operate LoRa radio over I2C
Dependencies: TimeoutAbs lib_i2c_slave_block sx12xx_hal
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[];
Generated on Tue Jul 12 2022 23:07:48 by 1.7.2