1 #if !defined(_RADIOLIB_M17_H)
2 #define _RADIOLIB_M17_H
4 #include "../../TypeDef.h"
6 #if !RADIOLIB_EXCLUDE_M17
8 #include "../PhysicalLayer/PhysicalLayer.h"
9 #include "../FSK4/FSK4.h"
12 #define RADIOLIB_M17_SHIFT_HZ (1600)
13 #define RADIOLIB_M17_RATE_BAUD (4800)
16 #define RADIOLIB_M17_PRE_LEN_BYTES (192/4)
17 #define RADIOLIB_M17_PRE_PATTERN_LSF (0x77)
18 #define RADIOLIB_M17_PRE_PATTERN_BERT (0xDD)
21 #define RADIOLIB_M17_EOT_LEN_BYTES (192/4)
22 #define RADIOLIB_M17_EOT_PATTERN (0x555D)
25 #define RADIOLIB_M17_SYNC_BURST_LSF (0x55F7)
26 #define RADIOLIB_M17_SYNC_BURST_BERT (0xDF55)
27 #define RADIOLIB_M17_SYNC_BURST_STREAM (0xFF5D)
28 #define RADIOLIB_M17_SYNC_BURST_PACKET (0x75FF)
31 #define RADIOLIB_M17_LSF_MODE_PACKET (0x00UL << 0)
32 #define RADIOLIB_M17_LSF_MODE_STREAM (0x01UL << 0)
33 #define RADIOLIB_M17_LSF_DATA_TYPE_DATA (0x01UL << 1)
34 #define RADIOLIB_M17_LSF_DATA_TYPE_VOICE (0x02UL << 1)
35 #define RADIOLIB_M17_LSF_DATA_TYPE_VOICE_DATA (0x03UL << 1)
36 #define RADIOLIB_M17_LSF_ENC_NONE (0x00UL << 3)
37 #define RADIOLIB_M17_LSF_ENC_SCRAMBLER (0x01UL << 3)
38 #define RADIOLIB_M17_LSF_ENC_AES (0x02UL << 3)
39 #define RADIOLIB_M17_LSF_ENC_OTHER (0x03UL << 3)
40 #define RADIOLIB_M17_LSF_AES_LEN_128 (0x00UL << 5)
41 #define RADIOLIB_M17_LSF_AES_LEN_192 (0x01UL << 5)
42 #define RADIOLIB_M17_LSF_AES_LEN_256 (0x02UL << 5)
43 #define RADIOLIB_M17_LSF_SCRAMLER_LEN_8 (0x00UL << 5)
44 #define RADIOLIB_M17_LSF_SCRAMLER_LEN_16 (0x01UL << 5)
45 #define RADIOLIB_M17_LSF_SCRAMLER_LEN_24 (0x02UL << 5)
48 #define RADIOLIB_M17_LSF_MAXLEN_BYTES_ENCODED (368/8)
50 #define RADIOLIB_M17_ADDR_LEN (6)
52 #define RADIOLIB_M17_RANDOMIZER_LEN (46)
54 static const uint8_t m17_randomizer[RADIOLIB_M17_RANDOMIZER_LEN] = {
55 0xD6, 0xB5, 0xE2, 0x30, 0x82, 0xFF, 0x84, 0x62,
56 0xBA, 0x4E, 0x96, 0x90, 0xD8, 0x98, 0xDD, 0x5D,
57 0x0C, 0xC8, 0x52, 0x43, 0x91, 0x1D, 0xF8, 0x6E,
58 0x68, 0x2F, 0x35, 0xDA, 0x14, 0xEA, 0xCD, 0x76,
59 0x19, 0x8D, 0xD5, 0x80, 0xD1, 0x33, 0x87, 0x13,
60 0x57, 0x18, 0x2D, 0x29, 0x78, 0xC3
80 int16_t
begin(
float base,
char* addr);
82 int16_t transmit(uint8_t* data,
size_t len,
char* dst);
88 uint8_t src[RADIOLIB_M17_ADDR_LEN] = { 0 };
89 uint8_t randIndex = 0;
91 int16_t encodeAddr(
char* in, uint8_t* out);
92 size_t encodeLsf(
char* dst, uint16_t type, uint8_t* out, uint8_t* meta = NULL,
size_t metaLen = 0);
93 void randomize(uint8_t* buff,
size_t len);
Client for FSK-4 communication. The public interface is the same as Arduino Serial.
Definition: FSK4.h:15
Client for M17 transmissions.
Definition: M17.h:67
int16_t begin(float base, char *addr)
Initialization method.
Definition: M17.cpp:14
M17Client(PhysicalLayer *phy)
Constructor for 4-FSK mode.
Definition: M17.cpp:10
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:151