operate LoRa radio over I2C

Dependencies:   TimeoutAbs lib_i2c_slave_block sx12xx_hal

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cmds.h Source File

cmds.h

00001 #define CMD_UNUSED              0x00
00002 #define CMD_TEST                0x01
00003 #define CMD_TEST32              0x02
00004 #define CMD_BEACON_PAYLOAD      0x03
00005 #define CMD_CFG                 0x04    // firmware config
00006 #define CMD_IRQ                 0x05    // read when irq pin is asserted
00007 #define CMD_SKIP_BEACONS        0x06
00008 #define CMD_CURRENT_SLOT        0x07
00009 
00010 #define CMD_RADIO                 0x08
00011 #define CMD_FSK_MODEM_CFG_WRITE   (CMD_RADIO+0x00)   // 08
00012 #define CMD_FSK_MODEM_CFG_REQ     (CMD_RADIO+0x01)   // 09
00013 #define CMD_FSK_PKT_CFG_WRITE     (CMD_RADIO+0x02)   // 0a 
00014 #define CMD_FSK_PKT_CFG_REQ       (CMD_RADIO+0x03)   // 0b
00015 #define CMD_FSK_SYNC_WRITE        (CMD_RADIO+0x04)   // 0c
00016 #define CMD_FSK_SYNC_REQ          (CMD_RADIO+0x05)   // 0d
00017 #define CMD_LORA_SYMBTO_WRITE     (CMD_RADIO+0x06)   // 0e
00018 #define CMD_REQ_RANDOM            (CMD_RADIO+0x07)   // 0f
00019 #define CMD_CFHZ_WRITE            (CMD_RADIO+0x08)   // 10
00020 #define CMD_CFHZ_REQ              (CMD_RADIO+0x09)   // 11
00021 #define CMD_TXDBM_WRITE           (CMD_RADIO+0x0a)   // 12
00022 #define CMD_TXDBM_REQ             (CMD_RADIO+0x0b)   // 13
00023 #define CMD_LORA_MODEM_CFG_WRITE  (CMD_RADIO+0x0c)   // 14
00024 #define CMD_LORA_MODEM_CFG_REQ    (CMD_RADIO+0x0d)   // 15
00025 #define CMD_RX_START              (CMD_RADIO+0x0e)   // 16
00026 #define CMD_LORA_PKT_CFG_WRITE    (CMD_RADIO+0x0f)   // 17
00027 #define CMD_LORA_PKT_CFG_REQ      (CMD_RADIO+0x10)   // 18
00028 #define CMD_BEACON_CFG_WRITE      (CMD_RADIO+0x11)   // 19
00029 #define CMD_STANDBY               (CMD_RADIO+0x12)   // 1a
00030 #define CMD_OPMODE_REQ            (CMD_RADIO+0x13)   // 1b
00031 #define CMD_PUBLIC_NET            (CMD_RADIO+0x14)   // 1c
00032 #define CMD_MAX_PAYLEN_WRITE      (CMD_RADIO+0x15)   // 1d
00033 #define CMD_RX_PAYLOAD            (CMD_RADIO+0x16)   // 1e read this when irq.fields.flags.rx_pkt == 1
00034 #define CMD_TX_BUF_START          (CMD_RADIO+0x17)   // 1f length and begin of payload
00035 #define CMD_TX_BUF                (CMD_RADIO+0x18)   // 20 continuing payload
00036 #define CMD_SEND                  (CMD_RADIO+0x19)   // 21 transmit packet, immediate
00037 #define CMD_RSSI_REQ              (CMD_RADIO+0x1a)   // 22 returned via IRQ
00038 #define CMD_RADIO_RESET           (CMD_RADIO+0x1b)   // 23
00039 
00040 
00041 #ifdef DEBUG_SMBUS
00042 #define CMD_ISR                 0xf8
00043 #define CMD_STOPF               0xf9
00044 #define CMD_ADDR_HOST_READ      0xfa
00045 #define CMD_ADDR_HOST_WRITE     0xfb
00046 #define CMD_AF                  0xfc    // debug for tx buf on host read
00047 #endif /* DEBUG_SMBUS */
00048 #define CMD_TIMEOUT             0xfd    // indication of smbus timeout
00049 #define CMD_ARLO                0xfe    // indication of arbitration lost
00050 #define CMD_BUSERR              0xff    // indication of start or stop during transfer
00051 
00052 typedef union {
00053     struct {
00054         uint8_t fixLen : 1;    // 0
00055         uint8_t crcOn  : 1;    // 1
00056         uint8_t invIQ  : 1;    // 2
00057     } bits;
00058     uint8_t octet;
00059 } pktcfg_t;
00060 
00061 typedef union {
00062     struct __attribute__((packed)) {
00063         struct {
00064             uint8_t rxOnTxDone : 1;    // 0      enables gateway operation
00065             uint8_t res        : 7;    // 1,2,3,4,5,6,7
00066         } flags;
00067         uint32_t maxListenTime; // LBT
00068         uint32_t channelFreeTime;   // LBT
00069         int8_t rssiThresh;  // LBT
00070         uint8_t n_rssi_samples;     // rssi averaging
00071         uint16_t downlinkOffset;    // uplink end to downlink in ms, if rxOnTxDone==1
00072     } fields;
00073     uint8_t buf[13];
00074 } cfg_t;
00075 
00076 enum {
00077     OPMODE_SLEEP = 0,
00078     OPMODE_STANDBY,
00079     OPMODE_FS,
00080     OPMODE_RX,
00081     OPMODE_TX,
00082     OPMODE_FAIL
00083 };
00084 
00085 typedef enum {
00086     /* 0 */ IRQ_TYPE_PKT = 0,
00087     /* 1 */ IRQ_TYPE_RSSI,
00088     /* 2 */ IRQ_TYPE_CF,
00089     /* 3 */ IRQ_TYPE_BEACON_DUR,
00090     /* 4 */ IRQ_TYPE_RANDOM,
00091     /* 5 */ IRQ_TYPE_FSK_MODEM,
00092     /* 6 */ IRQ_TYPE_FSK_PKT,
00093     /* 7 */ IRQ_TYPE_FSK_SYNC,
00094     /* 8 */ IRQ_TYPE_TXDBM,
00095     /* 9 */ IRQ_TYPE_LORA_MODEM,
00096     /*10 */ IRQ_TYPE_LORA_PKT,
00097     /*11 */ IRQ_TYPE_OPMODE
00098 } irq_type_e;
00099 
00100 typedef union {
00101     struct __attribute__((packed)) {
00102         struct {
00103             uint8_t rx_pkt          : 1;    // 0
00104             uint8_t rx_pkt_overrun  : 1;    // 1
00105             uint8_t unused          : 2;    // 2,3
00106             uint8_t irq_type        : 4;    // 4,5,6,7
00107         } flags;
00108         uint8_t pkt_len;    // if flags.rx_pkt
00109         int8_t pkt_snr;     // if flags.rx_pkt
00110         uint16_t rx_slot;
00111         int16_t rssi;    // dBm * 10: if flags.rx_pkt or flags.bg_rssi
00112     } fields;
00113     uint8_t buf[11];
00114 } irq_t;
00115 
00116 extern const uint8_t cmd_to_length[];