Decode a real protocol
In Module 1 you found a frequency; in Module 2 you chose a modulation. Now you'll press a remote, watch the Flipper turn its flashes of radio into a named protocol and a key, and save your very first .sub file.
Goal
Capture a fixed-code device you own, let the Flipper recognise and name its protocol, and save the capture with a clear name. By the end you'll have one real .sub file on your SD card and you'll understand every line inside it.
A fixed-code device sends the same message every single time you press the button. That makes it the perfect first target: predictable, easy to recognise, and safe to practise on. Rolling codes — the ones that change on every press — are Module 5's problem. Today we stay in the friendly shallows.
From pulses to bits to meaning
Strip away the jargon and a Sub-GHz remote does something almost silly in its simplicity: it switches a little radio transmitter on and off in a fast, deliberate pattern. That's the on-off keying (OOK) you met in Module 2. A long "on" here, a short "on" there, gaps in between — a flicker of radio light, like Morse code sent far too fast for a human to follow.
The receiver's job is to measure the timing of those flickers and rebuild the pattern. The Flipper does the same. It records how long each pulse and each gap lasts, in microseconds (millionths of a second), and lines them up as a train of highs and lows:
Now the leap. A "short" pulse might mean the bit 0 and a "long" pulse the bit 1 — or the other way round, or encoded as a pair of pulses. Different manufacturers made different choices, and each of those choices is a protocol: an agreed rule for turning timing into bits. Once you know the rule, a meaningless flicker becomes a number. And that number is the whole secret the remote is shouting to its receiver.
Play with the decoder below. Feed it a pulse train and watch it become bits the way the Flipper does it — short and long widths in, ones and zeros out.
The Flipper carries a built-in library of these rules. When you capture in Sub-GHz → Read, it doesn't just log the pulses — it tries every rule it knows against them. If one fits, it prints the protocol's name and hands you the decoded key. If none fits, it stays quiet, and that silence is itself information (Module 5).
What a protocol actually contains
A decoded fixed-code message is not one lump of random bits. It has structure, and every family arranges the same three ideas a little differently:
Preamble
A short wake-up pattern at the start — a few sync pulses that say "a real message is coming, start listening." The receiver uses it to lock onto the timing before the data arrives.
Serial / ID
The bulk of the bits: a fixed identity number burned into this particular remote (sometimes set by tiny DIP switches inside). It's how the receiver knows the press came from its paired remote and not a neighbour's.
Button / command
A few bits that say which button you pressed — open vs. close, channel A vs. B, colour up vs. down. On a one-button remote this may be a single fixed value.
So "the key" the Flipper shows you is really the serial and command bits packed together into one number. Press the same button twice on a fixed-code remote and you get the identical key both times — that repeatability is exactly what makes it "fixed." It's also, as we'll see in Module 5, exactly why fixed codes are easy to copy and rolling codes were invented.
Families the Flipper recognises
Momentum ships knowing dozens of fixed-code families. You don't need to memorise them, but you'll meet these names on the Read screen again and again:
| Family | Typical bits | You'll find it in |
|---|---|---|
| Princeton fixed | 24 | Cheap generic remotes, LED strips, outlet switches. Uses a timing unit called TE. |
| CAME fixed | 12 | Older gate and barrier remotes. |
| Nice FLO fixed | 12 | Older Nice gate remotes. (Its rolling cousin, Nice FloR-S, is Module 5.) |
| Holtek fixed | 40 | A common encoder chip inside many no-name remotes. |
| Linear / Chamberlain (older) fixed | 8–10 | Older North-American garage and gate remotes. |
Numbers vary by product; treat this as a map, not a spec sheet. The point is that "Princeton, 24 bit" is the kind of plain-English answer the Flipper gives you once it recognises the rule.
What the Read screen shows you
Open Sub-GHz → Read, hold your remote a hand-span away, and press its button. Read defaults to the most common band and preset (433.92 MHz, AM650), which is where most of the world's remotes live — you can change the frequency from within Read if Module 1 told you the remote lives elsewhere. When a known protocol comes through, the screen fills in a small dossier:
- Protocol
- The family name the Flipper matched, e.g. Princeton or CAME.
- Key
- The decoded message as a hexadecimal number — the serial and command bits together. This is the value you'll replay in Module 4.
- Bit
- How many bits long the message is (24, 12, 40…). A quick sanity check: it should match the family.
- Fq / Mod
- The frequency and modulation it decoded on — handy confirmation you were on the right settings.
- Button
- For some protocols, which button the bits map to. Not every family exposes this.
Anatomy of a .sub file
When you Save a capture, the Flipper writes a small plain-text file with the extension .sub onto the SD card, under the Sub-GHz folder. It's genuinely just text — you can open it on a computer in any editor. Here's a realistic decoded save for a 24-bit Princeton remote:
Filetype: Flipper SubGhz Key File
Version: 1
Frequency: 433920000
Preset: FuriHalSubGhzPresetOok650Async
Protocol: Princeton
Bit: 24
Key: 00 00 00 00 00 8C 5A 3B
TE: 400
Nine short lines, and each one is a decision the Flipper made about how to reproduce your signal. Read it top to bottom:
- Filetype
- Flipper SubGhz Key File — this is a decoded capture (a known protocol with a key), as opposed to a raw recording, which you'll meet in Module 5.
- Version
- 1 — the file-format version. Lets future firmware read old files.
- Frequency
- 433920000 — in hertz, so this is 433.92 MHz. The exact channel to transmit on.
- Preset
- …PresetOok650Async — the modulation and filter to use: OOK (on-off keying, i.e. AM) with the 650 kHz-wide filter. This is the AM650 preset written out in full.
- Protocol
- Princeton — which decoding/encoding rule turns the key back into pulses.
- Bit
- 24 — how many bits of the key are meaningful.
- Key
- 00 00 00 … 8C 5A 3B — the message itself, in hex. The leading zeros pad it out to a fixed width; the last few bytes carry the real value.
- TE
- 400 — the timing element in microseconds: the base pulse width Princeton multiplies to build its short and long pulses. Get this wrong and the receiver won't understand the replay.
Notice there is no counter and nothing secret here — just enough to rebuild an identical pulse train on demand. That completeness is the whole reason a fixed code can be replayed perfectly, and the whole reason it can also be copied by anyone in range. Hold that thought; it's the hinge the next two modules turn on.
doorbell-front, led-strip-power, fan-remote-off. A folder of Raw_signal_47 files is a folder you'll never open again.Lab
Capture, name, and save a real protocol
Gear: your Flipper, a fixed-code remote you own (doorbell push, LED remote, fan remote, or an old one-button garage remote for your own garage).
- Open Sub-GHz → Read. Leave it on the default 433.92 MHz / AM650 unless Module 1 told you your remote lives elsewhere.
- Hold the remote 10–30 cm from the Flipper and press its button once. Watch the screen for a Protocol name to appear.
- Press the same button three more times. Confirm the Key stays identical each press — that's your proof it's fixed-code. (If a Cnt value climbs instead, pick a different device and note this one for Module 5.)
- Read off and jot down the three headline facts: Protocol, Bit, and Key.
- Save the capture. Give it a clear, human name like
doorbell-front— not the default. - Open Sub-GHz → Saved and confirm your named file is there with its protocol shown.
.sub in Saved with a real protocol name (Princeton, CAME, Nice FLO, Holtek…), a clear filename, and you can point to its Key and Bit count and say out loud why the key is the same every time you press.Keep this file. In Module 4 you'll transmit it back — legally, to your own device — and watch the doorbell ring or the LED flip on.
Going deeper
How many combinations does a 24-bit key have?
Each bit is a light switch: two states, 0 or 1. Twenty-four of them multiply out to 224 = 16,777,216 — about 16.7 million possible keys.
That sounds like a lot, and for a curious neighbour it is. But "a lot" is not the same as "secure." Imagine a device that would accept codes fired at it as fast as a remote can send them — a few dozen per second at best. Grinding through 16.7 million codes at, say, 40 per second is over four days of continuous transmission, and only if nothing goes wrong. Real receivers make it worse still: many ignore a flood of rapid, malformed presses, and the sheer noise would be obvious to anyone nearby.
So a 24-bit fixed code resists guessing reasonably well. What it does not resist is copying: one clean capture reproduces the exact key instantly, no guessing required. That single weakness — capture once, replay forever — is precisely the hole rolling codes were designed to close, and it's where Module 5 begins.
Why does the Flipper need the Preset and the Protocol?
They answer two different questions. The Preset is about physics: which frequency, whether the carrier is switched on-off (AM/OOK) or shifted in frequency (FM/FSK), and how wide a filter to listen through. The Protocol is about language: given clean pulses, what do their timings mean? You need the right radio settings to hear the pulses at all, and the right protocol to turn them into a key. Get the preset wrong and there are no clean pulses to decode; get the protocol wrong and the pulses arrive but stay gibberish.
Check yourself
Verify the details
Read the primary sources: Flipper: reading signals and presets · Flipper: static and dynamic protocol support. Course review: 10 September 2026.