GSSNet / ALERT FMTechnical Replication Manual
v2.5
Confidential & Proprietary · Global Security Systems — GSSNet / ALERT FM · Internal use only, do not distribute without authorization
Technical deep dive · for full system replication

GSSNet & ALERT FM: a replication manual

A complete technical description of how an emergency message originates in software, is addressed and uplinked, is filtered by tower encoders, rides the FM RDS subcarrier, and is decoded and acted on by a receiver. Scope is strictly the technology required to rebuild the system.

This document covers origination, satellite addressing, tower/encoder addressing, the over-the-air protocol, and receiver addressing/decoding. It is reconstructed from the GSSNet/ALERT FM specification set (listed in Chapter 17). Deployment, operations, and commercial matters are deliberately out of scope.

1. System architecture

GSSNet is a one-way data-distribution system that carries short addressed messages over the standard RDS data subcarrier of ordinary FM broadcast stations. ALERT FM is the alerting application built on it. The core engineering idea is that a single message, uplinked once, reaches every participating FM transmitter simultaneously over satellite, and inexpensive receivers in the field decode and act only on the messages addressed to them.

Three properties define the design and shape every chapter below:

  • Push, not poll. The network distributes the same non-repeated data to all edges at once; there is no per-receiver request path. Distribution is strictly one-way (satellite/RF downstream only).
  • Bandwidth is conserved by addressing. RDS is a very small channel (~1187.5 bps). The entire addressing scheme — group codes, areas, county-based multicast, encoder filtering — exists to transmit and process the fewest possible messages.
  • Intelligence is split across three tiers. The comm server decides who to address; the tower encoder decides whether a message is relevant to its coverage; the receiver decides whether it is for its owner. No single node holds the entire map.

The protocol works with standard, unmodified RDS encoders: GSSNet does not require special encoder hardware, only that the encoder support the RDS Basic Paging Protocol and a configurable group sequence. This is a deliberate cost/availability decision and is foundational to the design.

"The GSSNet Air Protocol is designed to work with standard RDS encoders, without the need for special GSSNet encoder software upgrades… it is possible to deploy GSSNet networks faster and more cost efficient."— RDS Implementation in GSSNet Receivers (application note)

2. End-to-end signal path

The full chain, from origination to a sounding receiver:

ORIGINATION SOFTWARE  (alert composed; address grammar applied)
      │  one alert → address triples
      ▼
COMM SERVER
      │  expand [address].[service]@[area] → UECP "paging" commands (MEC 1B, 80 char)
      │  ×10 duplication for "urgent"; emit system code + UTC clock + heartbeat
      ▼
SATELLITE UPLINK → DVB-S2 transponder
      │  multicast UDP  224.9.9.9 / 224.12.x.x : port 5401
      ▼
SAT DATA RECEIVER at station  (DVB-S receiver + ~1 m dish)
      │  forwards alert packets on the LAN (UDP)
      ▼
TOWER RDS ENCODER  (standard RDS encoder, Basic Paging)
      │  filter on multicast + site.encoder address → 10-slot paging buffer
      │  emit RDS Group 1A (1/s system code), 4A (1/min UTC), 7A (alert, every 6 s)
      ▼
FM TRANSMITTER  — 57 kHz RDS subcarrier, ~10% injection, locked to 19 kHz pilot
      ▼
RECEIVER  — derive day's system code from 4A, validate 1A, lock; decode 7A;
            filter by serial #/group/geo; sound alert

Every arrow is a point at which a message may be filtered, duplicated, or (on the lossy UDP/satellite leg) dropped. The mental model that governs everything downstream: one originated alert is not one transmission — it fans out into one wire message per [address].[service]@[area] triple, multiplied by ten if marked urgent.

3. Alert origination & the address grammar

Messages originate in software that abstracts the addressing complexity behind a compose form, then hands a structured request to the comm server. Regardless of the front end, every originated message resolves to one or more triples of the form:

[address] . [service] @ [area]

Each triple is exactly one message the comm server must transmit and an encoder must process.

3.1 [address] — serial number vs group code

  • On the wire [address] is a decimal number identifying either an individual device serial number or a group address code.
  • Origination software typically lets the operator choose the type: a group code is entered in hexadecimal (devices require hex) and converted to decimal for the comm server; a serial number is decimal throughout.
  • Group addressing is the bandwidth lever. The replication rule is to provision as few group addresses as possible and minimize serial-number addressing, because each distinct address is a separate transmitted message.
"This is always a decimal number that identifies either an individual device's serial number, or a group address code… group addresses [are entered] as hexadecimal… configure as FEW group addresses as possible."— internal addressing reference

3.2 [service] — timeslot selection

The service code selects which of the ten per-minute RDS timeslots a message uses. The standard service is alert = 40 (a single timeslot). A high-priority message uses the urgent service, which occupies all ten 6-second slots; the comm server therefore emits ten copies of the message, one per slot. Battery receivers that sleep between subscribed slots only reliably catch alerts on slots they subscribe to, which is the functional reason urgent exists.

3.3 [area] — the routing handle

An area is a dotted, domain-like name that resolves (in the comm server) to a network destination plus an encoder address. Origination selects an area; the comm server resolves it (Chapter 6). Length constraints that originate here: a base message is 80 characters; an "extended length" message splices three 80-character fragments for up to 240 characters; geographic/polygon messages are smaller still because the shape consumes payload bytes.

4. The comm server

The comm server is the network's brain. It accepts originated alerts, resolves the areas table, expands each alert into UECP paging commands, duplicates them for urgent service, and emits them as UDP/multicast to the encoders. It also generates the housekeeping streams that keep the network coherent.

4.1 Output: UECP paging commands

The comm server speaks UECP (the RDS Universal Encoder Communication Protocol). A decoded paging command (test message to a group code, site/encoder 55.55) shows the structure:

  • FE UECP message start; packed address 0D F7 = first 10 bits site (55), last 6 bits encoder (55).
  • 1B = Message Element Code: an 80-character paging command.
  • Inside the paging command sits the GSS Payload (defined by the Air Spec): a service ID (e.g. 0F A0 = 4000), a sender ID (0 on the current comm server), a per-message sequence counter that increments every message, an address type/length, and the group/address code (e.g. C0 F8 = 49400).
"1B – UECP Message Element Code. This tells the encoder that we're sending an 80-character paging command… The data… is the 'GSS Payload' that is carried in the UECP paging command. This is defined in the GSS Air Spec document."— internal UECP packet analysis

4.2 Expansion math

One originated alert becomes N comm-server messages, one per [address].[service]@[area] triple; urgent multiplies by 10. Example: an urgent alert to 3 addresses generates 10 × 3 = 30 wire messages. This duplication happens at the comm server, downstream of the origination UI, which is why origination logs show the triples but not the ×10.

4.3 Housekeeping streams

StreamCadenceDestinationFunction
System code (PIN)every 10 min (resets daily)224.9.9.9Stamped by the encoder into 1A; a new encoder acquires the day's code within 10 min.
UTC clock → 4Acontinuousstate-addressedDrives Group 4A; sets per-state DST on non-internet encoders; basis for receiver code computation.
Heartbeat / "System Test"1 / minute224.9.9.9Addressed to nobody; lets an engineer confirm the satellite receiver is passing traffic to the LAN.

4.4 Transport reliability

The comm server emits UECP over UDP only, with no retransmission. A dropped packet on the satellite/internet path is a lost message with no automatic retry. Verification is done by packet capture: every originated alert should produce a corresponding packet leaving the comm server. There is no documented redundant comm-server cluster; resilience comes from overlapping RF coverage and uplink redundancy.

"UDP doesn't have a built-in retry mechanism for dropped packets (unlike TCP); so if a packet gets dropped… it's game over for that alert."— internal transport analysis

4.5 Lineage: the original RDS Server

The comm server has a direct technical ancestor: an early Windows "RDS Server / First Alert" application (2005) that already performed the core function — take an addressed message and push it to an RDS encoder over either UDP or a serial COM port (COM1–4 at 9600 baud, default encoder IP 192.168.1.199), tracking sent counts and the encoder response. The production comm server industrialized this same compose→address→emit pattern and added the areas table, multicast fan-out, UECP paging, urgent duplication, and the housekeeping streams. The dual UDP-or-serial encoder link is original to the design.

5. Satellite path & transport

Distribution is a one-way DVB-S multicast: every station's dish sees the same carrier, and addressing decides which packets each site acts on. The space segment was migrated in the 2023–2024 transition from SES-3 (transponder “SES3-22”, 103° W) to SES-1, transponder 15K (“SES1-15K”, 101° W). The current carrier parameters needed to receive the data:

ParameterCurrent (SES1-15K)Superseded (SES3-22)
Space segmentSES-1, transponder 15K @ 101° W (Ku-band)SES-3 @ 103° W
Downlink frequency12000.0 MHz (Vertical down)11704.35 MHz
Uplink frequency14300.0 MHz (Horizontal up)
PolarityHorizontal up / Vertical down (same sense as SES-3)(same sense)
L-band IF to receiver1250.0 MHz (LNB LO 10750 MHz)954.350 MHz
Symbol rate20.0 Msym/s (20,000,000)~3.65 Msym/s (3,649,946)
FEC3/43/4 (DVB-S2 QPSK)
Dish / LNB~1 m dish; standard Ku LNB (LO 10750 MHz); peak on 101° Wpeak on 103° W
Carrier migration note Dual illumination began 30 June 2023 and ran ~nine months, so the operational carrier became SES1-15K in 2024; SES3-22 is retired. Both carriers use the same standard Ku LNB local oscillator (10750 MHz), so only the dish aim (103°→101° W), the tuned downlink/L-band frequency, and the symbol rate change at the receiver. The transition notice specifies FEC 3/4 but does not restate the modulation; the prior carrier was DVB-S2 QPSK, and replication should confirm the SES1-15K modulation against a live receiver lock.

5.1 Satellite data receiver

The station-side unit is a DVB-S data receiver (Westport/Kalipso class, or an integrated SatMaxx-class receiver/monitor) feeding a ~1 m dish. It demodulates the transport stream and forwards the alert packets onto the local LAN over UDP port 5401. Receiver health is read as EbNo and BER.

5.2 IP transport

  • UECP commands are carried as multicast UDP (224.x.x.x) on port 5401.
  • A once-per-minute heartbeat on 224.9.9.9 confirms the receiver is passing GSS traffic.
  • No ARQ: the satellite/IP leg is fire-and-forget. For terrestrial (internet-fed) encoders the same UECP can be delivered to a static public IP, optionally behind a site-to-site tunnel.

6. Satellite addressing & routing

The comm server maintains the areas table that turns an @[area] handle into an actual destination. Each area row resolves to two addressable components:

  1. Network-level address — the IP+port over UDP. Satellite-fed encoders use a multicast address (224.x.x.x) so one packet reaches many encoders; terrestrial encoders use a static public IP.
  2. RDS encoder address — a site.encoder pair embedded in the UECP command (see Chapter 7).

Stored row format is name, multicast, site.encoder, "description". Worked rows (encoder/state #52 example):

1.1.pr.us,        224.9.9.9,    1.52,  "individual site"
pr.us,            224.9.9.9,    0.52,  "statewide (time = GMT-240)"
statewide.pr.us,  224.12.52.1,  0.0,   "statewide alerting"

6.1 The multicast map

MulticastMeaning
224.9.9.9System-wide control + "all-call" (EAN-style mass alert, analogous to FIPS 000000). System-code updates and the per-minute heartbeat ride here.
224.12.1xx.yyyCounty range. Third octet = state number + 100; fourth octet = county, assigned alphabetically. (E.g. state 10 → 224.12.110.yyy.)
224.12.<state>.1Per-state statewide address; lower-100 third octet reserved for statewide/specialized addresses.
224.12.254.254Reserved: a separate EAS data channel (IPAWS → ENDEC) on the same dish (port 5403).

An encoder can subscribe to a maximum of 50 multicast groups — roughly the number of counties a strong (+60 dBu) signal covers. This cap is why a single encoder is never loaded with all counties.

6.2 Site/encoder numbering plan

  • UECP field mapping: UECP "Encoder" = state, UECP "Site" = station.
  • Capacity: 63 (+0) Encoder/state addresses and 1023 (+0) Site/station addresses.
  • A station's state is defined by where its transmitter sits. Site numbers are assigned incrementally as stations come online (not call-letter based).
  • 0 is a wildcard: 0.<state> targets every encoder in a state; 0.0 means "ignore UECP addressing, accept anything matching the multicast."

6.3 Bandwidth strategy

The endgame is national county-based broadcast with edge filtering: every encoder hears every county alert and "votes" on whether its station's coverage contour includes that county before transmitting (Chapter 7). Consolidating onto county multicast keeps satellite bandwidth low while letting many simultaneous alerts coexist. Provisioning a new area is therefore an exercise in minimizing area/group combinations.

7. Tower encoder addressing

At each transmitter site, a standard RDS encoder is the edge router between the IP network and the FM signal. It ingests UECP over UDP and emits the GSSNet RDS groups. Two encoder families are used; both must support the RDS Basic Paging Protocol and a configurable group sequence.

7.1 The two-key acceptance filter

An incoming UECP message is accepted into the encoder's paging buffer only if both match:

  1. the encoder is subscribed to the message's multicast address, and
  2. the message's site.encoder address (or a wildcard) matches the encoder's configured site/encoder.

Otherwise the message is discarded. This is the mechanism by which a national broadcast is filtered down to locally-relevant alerts — the encoder's subscription set is its coverage definition.

7.2 The paging buffer and "overload"

The paging buffer holds 10 messages, one per 6-second timeslot. If messages arrive while the buffer is full, they are discarded until a slot frees; this full-buffer drop condition is what "encoder overloaded" means. Correct provisioning (few addresses/areas per encoder) is what keeps the buffer from saturating.

"The RDS paging buffer is limited to 10 individual messages (corresponding to the 10, 6-second time slots). If new messages are sent while that buffer is full, the incoming message(s) will be discarded."— internal addressing reference

7.3 Required encoder configuration

SettingValue / note
Group sequenceMust include 7A (alert) and 1A (beacon). Adding 7A auto-enables 1A. Plain RDS reverts to e.g. 0A,0A,2A.
GRPD1 (Group Designation 1) — required for GSS operation; without it GSS reception fails.
UECP UDP port5401
Multicast groupsUp to 50; always includes 224.9.9.9 plus the county/area groups for this site.
Site / Encoder addressstation number / state number (Chapter 6.2)
4A time sourceInternal/GSS time (CT=1); encoder will not start 1A until it has a valid time source. Local offset via CT.OFFSET=±half-hours, updated per state at DST change (Chapter 8.3).
RDS injection~10% of composite

7.4 Encoder families & programming

Legacy paging encoder (Audemat-class)

Programmed via Telnet + FTP (replace tcp.cmd / reset.eve). Commands: CT=1, TIME=, DATE=, GRPD=1, GS?. 10-message buffer; max 50 multicast groups. Driven by UECP MEC 1B (80-char paging).

Modern encoder (Inovonics-class)

Browser-based, custom firmware that watches for GSS multicast packets and encodes the 7A group. Diagnostic pages expose live 1A/7A and the current system code. Won't start 1A until it receives a valid time from the comm server when set to network time.

Port conventions at the encoder: 5401 UECP (GSS), 5402 RadioText/song metadata, 5403 EAS multicast, 5404 alternate alert-data port, 50080→80 web UI, 23 telnet.

8. The over-the-air RDS protocol

Over the air, GSSNet is standard 57 kHz RDS/RBDS. It uses the RDS Basic Paging Protocol (Annex M of IEC 62106:1999) and only redefines how Type 7A group content is interpreted; the underlying RDS block/checkword structure is unchanged, which is what allows standard encoders to carry it.

It is not DARC The bearer is conventional 57 kHz RDS (~1187.5 bps), locked to the third harmonic of the 19 kHz stereo pilot, injected near 10%. It is not a 76 kHz DARC/LMSK subcarrier. (DARC is unrelated heritage technology and is not used here.)

8.1 The three GSSNet groups

GroupCadenceCarriesPurpose
1A1 / secondSystem code / GSSNet ID (11 bits, block 4); paging position-in-minute; SLCNetwork-identity beacon. A receiver locks and stays only with the correct system code.
4A1 / minute (top of minute)UTC date + timeTiming master: defines the minute boundary that slots the timeslots; basis for system-code computation.
7Aevery 6 s (2 of every 3 groups while sending)The alert payload (Basic Paging)The actual message. Only emitted when a message is present; its presence also enables 1A.
0A / 2Afiller ratioPS name / RadioText (standard RDS)Make a GSS station also present as normal RDS between alerts.

8.2 The per-minute timeslot wheel

One minute = ten 6-second timeslotsTS00sTS16sTS212sTS318sTS424sTS530sTS636sTS742sTS848sTS954s60s4A marks top of minute → TS0alert = 1 slot · urgent = all 10 slots (message sent ×10)

A minute is divided into ten 6-second timeslots, mapped one-to-one onto the encoder's 10-message paging buffer. The service code (Chapter 3.2) selects the slot(s): standard alert uses one slot (interval 0, marked by the 4A); urgent uses all ten. Timeslot 0 always begins at the first 6 seconds of the minute.

8.3 1A and 4A group encoding

The GSS-specific redefinition is confined to Group 7A (Chapter 11) and the system code in 1A block 4 (Chapter 9). Everything else in the 1A and 4A groups follows the underlying RDS standard (IEC 62106); the GSS layer only sets it via the encoder's UECP command interface. The operative details:

Group 4A — clock-time / date

  • Transmitted as one 4A group at the top of each minute. Enabled on the encoder by CT=1.
  • Carries both date and time in UTC. Time is initialized with TIME=HH:MM:SS (or HH:MM); date with DATE=DD/MM/YY (or YYYY; note the day/month order).
  • Local time offset is sent per the RDS standard as a signed number of half-hours from UTC, set by CT.OFFSET=x. Example: US Pacific (PST, UTC−8) = CT.OFFSET=-16; US Central (CST) = CT.OFFSET=-12. (The encoder CLI expresses the offset in half-hours; some web UIs show it in whole hours.)
  • The offset is updated per state at the day/time of each Daylight Saving change — the mechanism by which non-internet encoders get correct local time.
  • The raw field packing (Modified Julian Day, hour, minute, signed half-hour offset) is exactly the standard RDS 4A layout; GSSNet does not alter it.

Group 1A — system code + paging position

  • Transmitted once per second; enabled automatically by including one or more 7A groups in the group sequence.
  • Block 4 carries the daily system code (Chapter 9). Beyond that, as part of the legacy Radio Paging (RP) protocol, 1A also conveys where in the minute the current second sits, relative to the top-of-minute defined by 4A — this is what aligns the receiver to the 6-second timeslot grid.
  • 1A additionally carries the ECC (Extended Country Code) via Slow Labelling Codes, variant 0 (set by the corresponding UECP SLC command). ECC is normally absent on plain RDS but is present when GSS is enabled, because it rides in 1A.

Group sequence

The encoder's group sequence determines the ratio of group types on air. Representative sequences:

no paging:    4A,0A,0A,2A,2A,0A,0A,2A,2A,0A,1A,0A …
with paging:  4A,0A,7A,0A,7A,2A,7A,2A,7A,0A,1A,7A,0A …   (2 of 3 groups = 7A while sending)
Replication note For 1A and 4A you implement standard RDS bit layouts (IEC 62106): the 4A clock group (MJD/hour/minute + signed half-hour local offset) and the 1A group with the system code in block 4 and the RP position-in-minute. The only GSS-original bit semantics are the 7A reinterpretation (Chapter 11) and the 11-bit system code value (Chapter 9). No GSS-specific 1A/4A bit-field redefinition exists.

9. The system code (daily PIN)

Group 1A — carries the daily system codeBlock 1PI codeBlock 2PTY + flagsBlock 3Slow LabellingBlock 4PIN Code11 LSBs = system code(changes daily 00:00 UTC)

The "system code" (informally the daily PIN) is the value that identifies a valid GSSNet network and gates receiver lock. It is derived from the date, not random:

input string = "GSSNETSYSTEMCODE YYYY-MM-DD"   (UTC date)
CRC-16 over that string   (poly x¹⁶+x¹²+x⁵+1, init 0xFFFF, result inverted)
system code = the 11 least-significant bits of the 16-bit CRC
  • The 11-bit code is carried in the last block of Group 1A (the Program Item Number Code), transmitted once per second whenever paging is enabled.
  • Because the date is the input, the code changes at 00:00 UTC each day. The encoder stamps the current code into 1A (the comm server pushes it every 10 minutes).
  • The network-name part of the string (default GSSNETSYSTEMCODE) is configurable: different strings yield different codes, so multiple parallel GSSNet networks can coexist on air, each invisible to the others' receivers.
  • The CRC parameters are identical to the message-payload CRC (Chapter 11.4): a single 16-bit CRC-CCITT definition is reused throughout the system.
"The variable string 'GSSNETSYSTEMCODE YYYY-MM-DD' (UTC-time) is used as an input to a CRC calculation algorithm… the 11 least significant bits are used as the GSSNet system code… carried in the last block of Group 1A."— GSSNet System Code specification

10. Receiver lock mechanism

This is the conceptual heart of the system and is easy to get backwards: the daily code is not transmitted to the receiver as a secret to match. The receiver computes the expected code itself and checks the broadcast against its own answer. The code is self-validating.

10.1 The lock decision

Receiver lock decision — it derives the coderead 4AUTC dateCRC-16of date stringlow 11 bits= expected coderead 1A11 bits, block 4equal?LOCK + stayyesscan onno
  1. Get the date from the air. Read Group 4A (UTC clock/date, top of every minute).
  2. Compute the expected code. Run CRC-16 (x¹⁶+x¹²+x⁵+1, init 0xFFFF, inverted) over GSSNETSYSTEMCODE YYYY-MM-DD; keep the low 11 bits.
  3. Read the broadcast code. Read the 11 LSBs of block 4 of Group 1A (once per second).
  4. Compare. If equal, this is a valid station on the right network: lock and stay. Otherwise keep scanning (130-second timeout per channel).

Three ingredients make this work, none of them a transmitted secret: the algorithm (in firmware), the network-name string (in firmware, configurable for parallel networks), and the date (over the air in 4A). Both ends independently derive the same number from the same date, so they always agree without the code ever being delivered to the receiver.

10.2 Acquisition / scan order

On power-up the receiver scans the FM band and ranks candidates: by RSSI, then presence of any RDS, then presence of the 1A beacon, then the correct system code. Finding the valid code is what makes it stop and stay.

"Scan the entire FM band… sorted by signal strength… For each channel: try to find service (group 1A) and correct system code with 130 seconds timeout. If correct service found, stop evaluation and use this channel."— receiver acquisition description

10.3 Grace window & the 4A precondition

At the date rollover, the receiver also accepts the previous day's code during the first hour after 00:00 UTC, to tolerate clock skew. And because the receiver needs the time before it can compute the code, 4A sync is a precondition for lock — if it cannot sync to 4A (it scans away after failing twice), it cannot validate the code and will not lock.

The lock test is also a health check The same dependency makes a station with a failed delivery path quietly drop off every receiver: no satellite feed → the encoder's clock/system-code source goes stale → receivers fail the check and scan elsewhere. The lock mechanism doubles as an end-to-end integrity test on the whole chain.

11. The 7A message wire format

A GSSNet message is carried across consecutive RDS Type 7A groups (other groups may be interleaved). The format below is the complete bit-level structure required to encode or decode a message.

11.1 The 7A group, redefined

RDS Type 7A group — redefined for GSSNetBlock 1PI codeBlock 2control bitsBlock 3GSS data (2 ch)Block 4GSS data (2 ch)Block 2 low bits → 1-bit Paging A/B + 4-bit segment codePTY..A/BT3T2T1T0
BlockStandard RDSGSSNet use
1PI codeUnchanged — station PI code.
2group type, PTY, flagsLast 5 bits = GSSNet control: 1-bit Paging A/B flag + 4-bit segment address code T3–T0.
3 & 4dataGSSNet information — 4 characters total, 8 bits each.

The Paging A/B bit toggles between distinct messages (marks a new/repeated call). The segment address code identifies what blocks 3 & 4 of this group contain. Only codes with the high bit set (10001111) are GSSNet.

11.2 The segment cycle

Message assembly across consecutive 7A groups1000headerSID/KID/TS1001GSS0-31010GSS4-71110GSS20-231111end(last ≤4B)…1001→1110 carry 24 message bytes per cycle (n += 24), then repeat until 1111

1000 is the header; 10011110 are six data segments of 4 bytes each (24 bytes per cycle, index n advancing by 24 each cycle); 1111 ends the message. Maximum message length is 80 characters; a message also ends when the Paging A/B flag flips.

T3 T2 T1 T0Contents of blocks 3 & 4
1000Header: Service ID (SID), Key ID (KID), Time Slot (TS)
1001GSSn … GSSn+3
1010GSSn+4 … GSSn+7
1011GSSn+8 … GSSn+11
1100GSSn+12 … GSSn+15
1101GSSn+16 … GSSn+19
1110GSSn+20 … GSSn+23 (then n += 24)
1111End of message — last four (or fewer) bytes

11.3 The header group (segment 1000)

Block 3 = Y1 Y2 Z1 Z2; block 4 = Z3 Z4 + 8 unused bits. All BCD.

  • Y1 Y2 Z1 Z2 = Service ID (SID), 0000–9999. Every receiver subscribes to ≥1 SID. Four reserved broadcast SIDs — 0000, 2000, 4000, 7000 — are the "ALL alert" channels: every receiver listens to them in any timeslot.
  • Z3 = Key ID (KID), 0–9: 0 = clear text, 1 = receiver individual key, 2–9 = shared key id. In the deployed public system KID = 0 (Chapter 14).
  • Z4 = Time Slot (TS), 0–9. Together [Y1 Y2 Z1 Z2 Z3 Z4] form the UGSID (unique global service identity).

11.4 The application message (bytes GSS1…x)

GSSNet application message — field layout (MSB first)MO8 bSEQ8 bADPRE+TYPE1+7 bADLEN+ADTYPE4+4 bADDRn bLEN8 bDATAn bCRC16 bpresent only if ADPRE = 1CRC-16: poly x16+x12+x5+1, init 0xFFFF, inverted, over MO…DATA

The data bytes carry a self-describing application message, MSB-first (network order). If KID > 0 the whole field including the CRC is encrypted (unused in practice).

MO │ SEQ │ ADPRE+TYPE │ [ADLEN+ADTYPE │ ADDR] │ LEN │ DATA │ CRC

MO     8 bits   Message Originator (sender ID), 0–255
SEQ    8 bits   Sequence counter, per-MO, 0–255
ADPRE  1 bit    Address present? 1 = ADDRESS FIELD follows; 0 = broadcast
TYPE   7 bits   Message type 0–127 (see 11.5)
ADLEN  4 bits   (opt) length of ADDR in bytes
ADTYPE 4 bits   (opt) address type (0 = numeric)
ADDR   ADLEN B  (opt) the GSSNet address
LEN    8 bits   length of DATA, 0–74 bytes
DATA   LEN B    the application payload (alert text)
CRC    16 bits  CRC-16 (x¹⁶+x¹²+x⁵+1, init 0xFFFF, inverted),
                over MO..DATA; the 7A group-1 address header is excluded

11.5 Message types (TYPE field)

TYPEMeaning
0TEST — decode DATA as text (testing only)
1TEXT — decode DATA as text
2TEXT, High Priority — decode DATA as text
3Heart-beat — DATA not decoded

Extended length & multi-loop assembly: a single paging message is 80 characters; up to three are spliced for 240 characters. Crucially, the segment-coded fragments are not required to arrive within one minute. The message repeats in the per-minute loop (Chapter 8.2), and the receiver accumulates fragments across successive 60-second loops: one loop carries the first part, the next appends the remainder, and so on, until the full message is reassembled and its CRC-16 (Chapter 11.4) validates. Only on a passing checksum does the receiver render and alert.

This is the "data rate" answer The system's effective message capacity is built by time-division accumulation over loops, not by a faster carrier. The instantaneous RDS rate stays ~1187.5 bps; "higher data rates" in early material describe the message throughput achieved by polling/combining fragments across minutes, gated by the checksum. See Chapter 16.

12. Message addressing & geo-targeting

The ADTYPE field selects how the ADDR bytes are interpreted, and is the receiver's filter key.

12.1 Numeric addressing (ADTYPE 0/1)

  • ADDR is a number up to 64 bits (8 bytes), used as an individual or group address.
  • This is the wire form of the serial-number / group-code split: a serial number selects one device; a group code selects a set.
  • FIPS-derived group codes: a county group code is formed as "2" + county FIPS, then converted to hex. Example: "2" + 01073 (Jefferson Co.) = 201073 → 0x31171.
  • A broadcast message (ADPRE = 0) carries no ADDR.

12.2 Geographic addressing (ADTYPE 2/3/4)

Geographic addressing — anchor + signed offsetsP1 (reference)P2P3P4P5P6P7x/y offsetabsolute lat/longP1 = abs long/lat inADDR field; P2..Pn =signed x/y deltas fromprevious point (2's-C).PREC 30m–10km;RES 12/16/20 bits.

A single message can target an arbitrary area; each receiver decides locally whether it is inside. The address type selects the shape:

ADTYPEShapeAddress contents
2CircleReference point + precision + radius
3Global polygon (Grid Alert)Reference point placed anywhere on earth + shape + offset points
4PolygonReference point + N offset points
  • Reference point (P1) is an absolute longitude/latitude in the address field; remaining vertices are signed x/y offsets (two's-complement) from the previous point.
  • SHAPE indicator (4 bits): 0 = circle by radius-in-km from PE (0 ⇒ 500 m, no offsets); 1 = circle, radius from one offset; 2 = square (reference + diagonal offset); 3–15 = polygon with that many vertices.
  • Precision/resolution: PREC ∈ {100, 300, 1000, 3000, 10000 m}; RES ∈ {12, 16, 20 bits/point}; special high-precision case ≈ 30 m. Global ~30 m precision uses a 5-byte address.
  • A radio-audio control bit can enable the FM audio; an MFI/DFI byte selects a canned message ID (0–63) or a text data field (DFI 64).
Resolved: the geometry runs on the receiver The two point-encoding formulas in the source (PE = 5·RES + PREC vs 3·PREC + RES) are not the operative concern for replication. The address only needs to convey the polygon vertices; the actual decision is made on the receiver, which carries a lat/long reference library and its own stored fixed position, reconstructs the polygon from the reference point plus offsets, and runs a local point-in-polygon (inside/outside) test to decide whether to alert. The receiver computes to four decimal degrees of precision (~11 m). The practical constraints are therefore that polygon data consumes message length (fewer text bytes remain) and that vertex precision is bounded by the receiver's 4-decimal working precision — not the exact PE byte packing.

13. Receiver decoding & device model

Because the transmit side is standard RDS, any FM/RDS receiver can be a GSSNet device; only the firmware that decodes the GSS-specific parts is GSS-provided.

13.1 The receiver stack (OSI view)

Receiver decode stackUser interfaceLayer 5-7→ Device-specificMessage handlerLayer 4→ GSSNet firmwarePacket handlerLayer 3→ GSSNet firmwareRDS handlerLayer 2→ Standard RDS decoderFM-RDS radioLayer 1→ Standard FM radiodata flow: radio → RDS → packet → message → UI (GSS logic = layers 3-4)
OSI layerBlockProvided by
1 — PhysicalFM-RDS radioStandard FM radio
2 — Data linkRDS handlerStandard RDS decoder
3 — NetworkPacket handlerGSSNet firmware
4 — TransportMessage handlerGSSNet firmware
5–7User interfaceDevice-specific

Flow: FM-RDS radio → RDS handler → packet handler → message handler → UI. GSSNet logic lives only in layers 3–4.

13.2 Decode pipeline

  1. Acquire/lock per Chapter 10 (4A → compute code → validate 1A).
  2. Collect consecutive 7A groups by segment code into the header (SID/KID/TS) plus the GSS byte stream, accumulating fragments across successive per-minute loops until the message is complete (segment 1111 / A-B flip).
  3. If KID > 0, decrypt (unused in practice).
  4. Verify the CRC-16 over the assembled application message. The receiver holds the partial message and does not render or alert until the checksum passes — this gates against partial or corrupted delivery.
  5. Apply the address filter (ADTYPE): numeric match against subscribed serial/group; or, for geographic types, reconstruct the polygon (reference point + offsets) and run a local point-in-polygon test of the device's stored fixed position using the on-device lat/long reference library, at four-decimal-degree precision (~11 m). The device alerts only if it is inside.
  6. For TYPE 1/2, render DATA as text and signal per the device's priority profile.

13.3 Device configuration model (BLE)

Receivers are provisioned over Bluetooth Low Energy via a GATT server (base UUID f90aXXXX-21ea-43a5-a81e-43901297b9a7). Pairing requires on-device numeric confirmation (a number shown on the device must match the phone, confirmed with the front button) — standard BLE numeric comparison, giving encryption and MITM protection. Bonding allows reconnect without re-confirmation.

ServiceUUIDPurpose
Device Information0x180AProduct/serial numbers, firmware version
Battery0x180FBattery state
Alert Notification0x1811Standard BLE; only Category 8 (High-Prioritized Alert) used
Authorizationbase + 0x0000Write password to authorize config; read access level (0 user / 1 operator)
Alert FMbase + 0x0100New-alert notify, statistics, channel-lock state, command point (0x01 = clear messages)
Alert FM Configurationbase + 0x0200Services, addresses, places, alert profiles, behavior (password-protected)
FM/RDS (TBD)base + 0x0300Low-level radio control + raw RDS feedback (freq, RSSI, SNR, per-block BLER)
Secure DFUNordicFirmware upgrade over BLE

Provisioned objects: an array of Services (each SID 0–9999 + timeslot 0–9, optionally locked), an array of up-to-32-bit Addresses (with a lock bitmask), and up to five Places (Place 0–4) — each a name, a 64-bit lat/long position, and a ZIP code. An incoming alert reports an address-match bitmask (Place 0–4 / address-list / broadcast / no-match). Positions are signed 32-bit lat and long in units of 1/65536 degree, transferred LSB-first.

13.4 Alert rendering profiles

Per-priority profiles (Test / Silent / Normal / High) configure volume (dB offset), LED blink+brightness, backlight, timeout (0 = indefinite), a relay-enable flag, and a siren:

SirenSound
0No siren
1400 → 2000 Hz over 2 s, repeating
2400 → 4000 Hz over 2 s, repeating
3400→2000 Hz (1 s), 4 beeps @ 2000 Hz, 2000→400 Hz (1 s), repeating
4Alternating 557 / 662 Hz at 1 s interval, repeating
5400 → 2000 Hz over 700 ms, repeating
6Single short beep

Other config: antenna (internal/external), FM alert volume (0–63), backlight levels (idle-on-power / idle-on-battery / active, 0–5), scroll mode (horizontal/vertical). Devices keep statistics (text/area/heartbeat/other, and matched counts). Firmware updates over BLE use the Nordic DFU bootloader.

Two priority scales — don't conflate The air-protocol TYPE (11.5: 0 test / 1 text / 2 high-priority text / 3 heartbeat) describes the message on the wire. The device Prio (0 test / 1 silent / 2 normal / 3 high) describes how the device renders it.

13.5 Device variants by capability

Portable / battery

Optimized for long battery life, not latency. Sleeps between subscribed timeslots, so reliably catches only alerts on subscribed slots. Supports ZIP-code and group addressing.

Mains / always-listening

Wired, always decoding, so can receive a message started at any time. Password protection enabled by default (default = serial number).

14. Security model

ALERT FM is best described as authenticated but unencrypted public broadcast. What binds a receiver to the correct network is the daily system code plus the 4A time (Chapters 9–10): the receiver derives the day's code from the clock and locks only to a station carrying it. The alert payload is then decoded straight from the RDS in the clear.

  • The 128-bit KID encryption (Chapter 11.3) is an optional capability for private/individual messaging. In the deployed public system KID = 0; payloads are clear text.
  • The system code itself is a CRC-derived code, not a cipher — its purpose is network identification and tamper/health detection, not confidentiality.
  • OTA programming of receiver addresses is part of the design, but message confidentiality is not a property the public system provides.

For replication: implement the system-code derivation and the lock check exactly (they are what make the network coherent and self-monitoring); the payload cipher can be omitted entirely without affecting public alerting behavior.

15. Quick reference & glossary

15.1 Addressing cheat-sheet

[address] . [service] @ [area]

[address]  decimal serial # (one device)  OR  group code (hex → decimal on wire)
[service]  alert = 40 (1 slot)  |  urgent = all 10 slots (×10 messages)
[area]     dotted name → network addr: 224.x.x.x (sat) | static IP (terrestrial)
                       → RDS encoder addr: site.encoder  (encoder=STATE, site=STATION, 0=wildcard)

site/encoder packed in UECP: 10 bits site + 6 bits encoder
county group code = ("2" + county FIPS) → hex

15.2 RDS group cadence

1A  every 1 s    system code (11 bits, block 4) — lock gate
4A  every 1 min  UTC clock — slots timeslots, basis for code computation
7A  every 6 s    alert payload (2 of 3 groups while sending)
0A/2A  filler    PS name / RadioText
GRPD=1           required GSS group-designation flag

15.3 7A segment codes

1000        header: SID / KID / TS
1001..1110  six 4-byte data segments (24 bytes/cycle)
1111        end of message
A/B flag    toggles between messages

15.4 Ports & multicast

UDP 5401   UECP alert (GSS)          224.9.9.9        system-wide / all-call / heartbeat
UDP 5402   RadioText/metadata        224.12.1xx.yyy   county (xx = state+100)
UDP 5403   EAS multicast             224.12.<state>.1  statewide
UDP 5404   alt alert-data            224.12.254.254   EAS/IPAWS → ENDEC
TCP 23     telnet (legacy encoder)   50080→80         encoder web UI

15.5 Glossary

TermMeaning
RDS / RBDSRadio Data System — the standard 57 kHz FM data subcarrier GSSNet rides on.
Basic Paging ProtocolRDS paging mode (Annex M, IEC 62106) that GSSNet repurposes via Type 7A.
UECPUniversal Encoder Communication Protocol — comm server ↔ encoder. MEC 1B = 80-char paging.
System code / PINDaily 11-bit value in 1A block 4, derived by CRC over the date string; the lock gate.
SID / KID / TSService ID (0–9999) / Key ID (0=clear) / Time Slot (0–9) — the 7A header (UGSID).
Service / timeslotOne of ten 6-second slots per minute; maps to the encoder's 10-message buffer.
AreaComm-server routing record = network address + RDS encoder (site.encoder) address.
Site.encoderUECP address; encoder=state, site=station; 0 = wildcard; 0.0 = ignore UECP addressing.
Group codeHex address (county FIPS, ZIP, or private) selecting a set of devices.
Overloaded encoderIts 10-slot buffer is full; new messages are dropped.
ADTYPEAddress type in the application message: 0/1 numeric, 2 circle, 3 global polygon, 4 polygon.
All-call224.9.9.9 EAN-style mass alert (analogous to FIPS 000000).

16. Open questions

Items previously flagged as incomplete, with their current resolution status:

  • 1A/4A encoding — resolved. Apart from the system code in 1A block 4 and the 7A reinterpretation, the 1A and 4A groups use standard RDS (IEC 62106) layouts, driven via the encoder UECP interface (Chapter 8.3): 4A = clock/date in UTC with a signed half-hour local offset (CT.OFFSET), 1A = system code + Radio-Paging position-in-minute + ECC via Slow Labelling Codes variant 0. There is no GSS-specific 1A/4A bit redefinition to reverse-engineer; implement the RDS-standard fields.
  • Polygon point-encoding formula — resolved. The two PE formulas in the source are moot for replication: the address only carries the polygon vertices, and the inside/outside decision is computed on the receiver, which holds a lat/long reference library and its own stored position and runs a point-in-polygon test at four-decimal-degree precision (~11 m). Polygon data consumes message length. What matters is reconstructing the vertices and testing locally, not the exact PE byte packing (Chapters 12.2, 13.2).
  • Message encryption — resolved (confirmed absent). An exhaustive search of the full archive (~2.1 GB plus ~16.9 GB of mail) finds no encryption specification, no “GSS-06.003,” no cipher algorithm/mode/key-schedule, and no KID>0 traffic — not as code and not even as discussion. The KID field exists in the wire format, but the optional cipher was never implemented. The only confidentiality/validity mechanism on the message path is the daily system code (Chapter 9). The public system is clear-text (Chapter 14); replication can omit the cipher entirely.
  • Over-the-air data rate — resolved. The OTA rate is standard RDS (~1187.5 bps); there is no faster carrier. The higher “data rates” in early material describe effective message throughput, which is built by polling and combining message fragments across successive 60-second loops: the first loop carries the first part of a message, the next loop appends the remainder, the receiver verifies the checksum, and on a pass it displays the message and notifies the user (Chapters 11.5, 13.2). Capacity is gained over time, not over bandwidth.

17. Source specifications

This manual is built from the GSSNet/ALERT FM specification set and supporting technical material:

  • GSSNet Interface Protocol for Third Party Devices — the Type 7A wire format, segment codes, header, application message, CRC, addressing types (the basis of Chapters 11–12).
  • GSSNet System Code — the daily system-code CRC algorithm and 1A carriage (Chapter 9).
  • GSSNet Polygon Addressing — the geographic/Grid Alert addressing extension (Chapter 12.2).
  • RDS Implementation in GSSNet Receivers — transmitter/receiver model and the OSI mapping (Chapters 1, 13).
  • Warner/Wallmer BLE Specification — receiver provisioning, configuration objects, and alert profiles (Chapter 13).
  • UECP / RDS standards — the encoder command layer and the RDS Basic Paging Protocol (Annex M, IEC 62106 / RDS).
  • Supporting RF/transport parameters and addressing conventions reconstructed from internal engineering analysis.

External standard references used for definitions: the RDS/RBDS standard and NWS SAME/event codes (for FIPS/event-code context only).