the whole thing, in the order it makes sense.

A couple dozen repos, and they're not really separate things. It's mostly one question poked at from a few sides: what can a $10 board do to the air around it? Talk on it, listen to it, hide on it, or stay up on it when everything else falls over. Here's the work in roughly that order. Most of these I actually run.

01 · talk on it

A phone system that fits in your hand

It started as one ESP32 pretending to be a whole PBX. Then it needed something to call from. So it grew a handset. Three repos that only make sense together.

pocket-dialself-contained SIP PBX on one ESP32-S3. point any SIP phone at it and call.→ + handsetpush-to-talk SIP handset. registers to pocket-dial, so now you have a phone to call from.→ resiprocatethe SIP / ICE / TURN / STUN / RTP stack doing the actual work underneath. vendored→
02 · listen to it

Radios that listen, and remember what they heard

Other people's radios are louder than mine. A police scanner spits out a serial firehose of P25 trunk traffic; on its own it's noise. So: write down what the bytes mean, then build the things that turn the firehose into something you can search, chart, and keep. Same move on the Meshtastic side: capture first, ask questions later.

bcd325p2-protocolthe serial command-protocol reference for the Uniden BCD325P2. everything below stands on this.→ + splunk-addoningest the serial RF telemetry, parse P25 / EDACS, into Splunk.→ + dashboarddecode, visualize, and persist BCD325P2 telemetry. the human-readable end.→ p25-trunk-loggerlog a P25 trunked control channel; spits out trunk-recorder configs.→ meshtapsame idea, mesh side: passive Meshtastic capture to BigQuery over cellular MQTT. capture now, query later.→
03 · talk back to it

Radios that don't just listen

Listening is half of it. The other half is making noise on purpose and seeing what flinches: deauth a 5 GHz network, then build the thing that notices someone doing exactly that. Wardrive the neighborhood. Reverse a LoRa chirp. Put voice on a frequency band that was never meant for it.

wifi-ble-marauderESP-IDF Wi-Fi/BLE security tool: 5 GHz deauth, Thread/Matter/Zigbee, BLE 5. no Arduino.→ deauth-detectorthe other side of marauder: a distributed 802.11 attack detector, with a LoRa back-haul.→ wigle-wardriverWi-Fi/BLE wardriver for Wigle.net, GPS-tagged to SD.→ esp32s3-mgmt-scannerpassive 802.11 management-frame scanner. quiet cousin of the loud ones.→ ble-sign-beaconbroadcast a short message as a BLE advertisement. deliberately visible, for once.→ lora-rf-toolkitLoRa reverse-engineering: sweep, I/Q capture, chirp and parameter analysis.→ fsk-walkie-talkievoice-over-FSK walkie-talkie (Codec2 + SX1262). a phone again, but over raw radio.→
04 · hide on it, keep it up

Comms that hide, or refuse to die

If you can listen to a radio, so can everyone else, which is the whole reason this part exists. Voice that goes out over Tor instead of the air. A tiny SSH server small enough to live on the chip itself. And meshes that route around the part of the world that's on fire. Two of these are upstreams I lean on, not mine. Said so.

tor-voiceencrypted voice over Tor: in-process Arti onion service + Opus + Noise. the opposite of broadcasting.→ glosshminimal SSH 2.0 server for ESP-IDF on PSA Crypto. a secure door on a $5 chip.→ esp-secure-transportMIT/PD secure-transport stack for ESP-IDF. on the shelf for now. paused→ reticulumcryptography-based mesh over LoRa, packet radio, serial, TCP. the won't-die layer. vendored→ rfpartywireless situational-awareness dashboard for BLE/Wi-Fi telemetry. vendored→
05 · the stuff around the edges

Bits that make the rest bearable

None of the above is much fun without a screen to look at, an agent to run on the box when there's no network, and a way to ask the pile of captured data a plain-English question. The boring-but-load-bearing stuff.

jc3248-display-driverESP-IDF driver + bring-up for the Guition JC3248W535EN (AXS15231B QSPI). the screen.→ esp32-ai-agentESP32 AI agent with persistent memory and an offline rule engine. brains when there's no internet.→ ask-the-logsnatural-language queries over BigQuery (Google ADK + Gemini). this is what reads what meshtap wrote.→
06 · what it adds up to (on purpose)

Two demos, made up so I don't have to use real ones

If you stack the listening tools, a picture falls out of them that's worth thinking about. These two say out loud what that looks like, built on synthetic data, not real captures, so nobody real is in them. The label is the point.

deanon-demowhat ~$900 of commodity hardware reconstructs about multi-channel pseudonymity. synthetic→ sentinel-node-demosecond- and third-order surveillance / counter-surveillance effects. synthetic→
doesn't fit the story

The odd one out

Has nothing to do with radios. Lived here before the rest did and I'm not going to pretend it belongs to a theme.

rdp-publisher-certprovisions a publisher certificate for .rdp files: self-signed, Group Policy, consent bypass.→