11#if DETWS_ENABLE_RADIO_SNIFF
15void wr16le(uint8_t *p, uint16_t v)
18 p[1] = (uint8_t)(v >> 8);
20void wr32le(uint8_t *p, uint32_t v)
23 p[1] = (uint8_t)(v >> 8);
24 p[2] = (uint8_t)(v >> 16);
25 p[3] = (uint8_t)(v >> 24);
29uint32_t detws_radiosniff_i2f32(int32_t dbm)
38 mag = (uint32_t)(-(int64_t)dbm);
43 while (!((mag >> e) & 1u))
45 uint32_t exp = (uint32_t)(127 + e);
46 uint32_t mant = (e >= 23) ? ((mag >> (e - 23)) & 0x7FFFFFu) : ((mag << (23 - e)) & 0x7FFFFFu);
47 return sign | (exp << 23) | mant;
50size_t detws_radiosniff_global(uint8_t *out,
size_t cap)
55size_t detws_radiosniff_tap_record(uint8_t *out,
size_t cap,
const uint8_t *frame,
size_t flen, int32_t rssi_dbm,
56 uint16_t channel, uint32_t ts_sec, uint32_t ts_usec)
58 if (!out || !frame || flen == 0)
60 size_t caplen = RADIO_SNIFF_TAP_LEN + flen;
72 wr16le(p + 2, RADIO_SNIFF_TAP_LEN);
76 wr32le(p + 8, detws_radiosniff_i2f32(rssi_dbm));
85 uint8_t *f = p + RADIO_SNIFF_TAP_LEN;
86 for (
size_t i = 0; i < flen; i++)
void wr32le(uint8_t *p, uint32_t v)
void wr16le(uint8_t *p, uint16_t v)
size_t det_pcap_global_header(uint8_t *out, size_t cap, uint32_t linktype)
Write the 24-byte libpcap global header (little-endian, microsecond timestamps).
#define DET_DLT_IEEE802_15_4_TAP
802.15.4 with a TAP pseudo-header (RSSI / channel TLVs)
size_t det_pcap_record_header(uint8_t *out, size_t cap, uint32_t ts_sec, uint32_t ts_usec, uint32_t caplen, uint32_t origlen)
Write a 16-byte libpcap record header for one captured frame.
#define DET_PCAP_REC_HDR_LEN
Receive-only radio channel sniffer -> pcap capture records (DETWS_ENABLE_RADIO_SNIFF).