3
Week 2 · Decoding

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.

⏱ 45 min Gear: a fixed-code remote you own Firmware: Momentum

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.

✓
Good practice targets you own A wireless doorbell push button, a colour-changing LED strip remote, a ceiling-fan or fireplace remote, a cheap power-outlet remote, or an old one-button garage remote for a garage that is yours. All of these are almost always fixed-code. Skip car fobs and modern gates for now — those are rolling, and they won't decode into a tidy key.

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:

S S L S 0 0 1 0 Key: 0010…
A short pulse means one bit, a long pulse means the other. Measure the widths, read off the bits.

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:

FamilyTypical bitsYou'll find it in
Princeton fixed24Cheap generic remotes, LED strips, outlet switches. Uses a timing unit called TE.
CAME fixed12Older gate and barrier remotes.
Nice FLO fixed12Older Nice gate remotes. (Its rolling cousin, Nice FloR-S, is Module 5.)
Holtek fixed40A common encoder chip inside many no-name remotes.
Linear / Chamberlain (older) fixed8–10Older 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.
i
The tell for "fixed" Press the button three or four times. On a fixed-code remote the Key stays identical every press. If instead you see a value labelled Cnt (a counter) climbing by one each press, you've found a rolling code — stop, and come back to it in Module 5. Today you want a device whose key doesn't budge.

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.

!
Name it like you'll need it in a year The Flipper offers a default name when you save. Replace it with something you'll recognise: doorbell-front, led-strip-power, fan-remote-off. A folder of Raw_signal_47 files is a folder you'll never open again.

Lab

Lab 3.1

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).

  1. Open Sub-GHz → Read. Leave it on the default 433.92 MHz / AM650 unless Module 1 told you your remote lives elsewhere.
  2. Hold the remote 10–30 cm from the Flipper and press its button once. Watch the screen for a Protocol name to appear.
  3. 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.)
  4. Read off and jot down the three headline facts: Protocol, Bit, and Key.
  5. Save the capture. Give it a clear, human name like doorbell-front — not the default.
  6. Open Sub-GHz → Saved and confirm your named file is there with its protocol shown.
✓You've got it when: you have one saved .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.