Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: lr1110_wifi_geolocation_device lr1110_wifi_geolocation_gateway
sx12xx.h
00001 #include "mbed.h" 00002 #ifndef SX1265_H 00003 #define SX1265_H 00004 00005 #define XTAL_FREQ_HZ 32000000 00006 #define FREQ_STEP 0.95367431640625 // ( ( double )( XTAL_FREQ / ( double )FREQ_DIV ) ) 00007 #define GFSK_BITRATE_NUMERATOR 1024000000 00008 00009 00010 #define OPCODE_GET_STATUS 0x0100 00011 #define OPCODE_GET_VERSION 0x0101 00012 #define OPCODE_WRITEREGMEM32 0x0105 00013 #define OPCODE_READREGMEM32 0x0106 00014 #define OPCODE_CLEAR_RX_BUFFER 0x010b 00015 #define OPCODE_WRITE_BUFFER8 0x0109 00016 #define OPCODE_READ_BUFFER8 0x010a 00017 #define OPCODE_GET_ERRORS 0x010d 00018 #define OPCODE_CLEAR_ERRORS 0x010e 00019 #define OPCODE_CALIBRATE 0x010f 00020 #define OPCODE_SET_REGULATOR_MODE 0x0110 00021 #define OPCODE_CALIBRATE_IMAGE 0x0111 // operating band change 00022 #define OPCODE_SET_DIO_AS_RFSWITCH 0x0112 00023 #define OPCODE_CLEAR_IRQ 0x0114 00024 #define OPCODE_SET_SLEEP 0x011b 00025 #define OPCODE_SET_STANDBY 0x011c 00026 #define OPCODE_SET_FS 0x011d 00027 #define OPCODE_SET_DIOIRQPARAMS 0x0113 00028 #define OPCODE_SET_TCXO_MODE 0x0117 00029 #define OPCODE_GET_DEVEUI 0x0125 00030 #define OPCODE_GET_JOINEUI 0x0126 00031 #define OPCODE_GET_DEVICE_PIN 0x0127 00032 #define OPCODE_RESET_STATS 0x0200 00033 #define OPCODE_GET_STATS 0x0201 00034 #define OPCODE_GET_PACKET_TYPE 0x0202 00035 #define OPCODE_GET_RX_BUFFER_STATUS 0x0203 00036 #define OPCODE_GET_PKT_STATUS 0x0204 00037 #define OPCODE_GET_RSSI_INST 0x0205 00038 #define OPCODE_SET_GFSK_SYNC_WORD 0x0206 00039 #define OPCODE_SET_LORA_PUBLIC_NETWORK 0x0208 00040 #define OPCODE_SET_RX 0x0209 00041 #define OPCODE_SET_RF_FREQ_HZ 0x020b // 0x00f30058 00042 #define OPCODE_SET_TX 0x020a 00043 #define OPCODE_AUTO_TX_RX 0x020c 00044 #define OPCODE_SET_CAD_PARAMS 0x020d 00045 #define OPCODE_SET_PACKET_TYPE 0x020e 00046 #define OPCODE_SET_MODULATION 0x020f 00047 #define OPCODE_SET_PACKET_PARAM 0x0210 00048 #define OPCODE_SET_TXPARAMS 0x0211 00049 #define OPCODE_SET_GFSK_PKT_ADDRESS 0x0212 00050 #define OPCODE_SET_RXTX_FALLBACK_MODE 0x0213 00051 #define OPCODE_SET_RX_DUTYCYCLE 0x0214 00052 #define OPCODE_SET_PA_CONFIG 0x0215 00053 #define OPCODE_STOP_TIMEOUT_ON_PREAMBLE 0x0217 00054 #define OPCODE_SET_CAD 0x0218 00055 #define OPCODE_SET_TXCW 0x0219 00056 #define OPCODE_SET_TX_PREAMBLE 0x021a 00057 #define OPCODE_SET_LORA_SYNC_TIMEOUT 0x021b 00058 #define OPCODE_SET_GFSK_CRC_PARAMS 0x0224 00059 #define OPCODE_SET_GFSK_WHITENING 0x0225 00060 #define OPCODE_SET_RX_BOSSTED 0x0227 00061 00062 #define OPCODE_WIFI_SCAN 0x0300 00063 #define OPCODE_GET_WIFI_NB_RESULTS 0x0305 00064 #define OPCODE_WIFI_READ_RESULTS 0x0306 00065 #define OPCODE_WIFI_RESET_CT 0x0307 00066 #define OPCODE_WIFI_READ_CT 0x0308 00067 00068 #define OPCODE_GNSS_SET_CONSTELLATION 0x0400 00069 #define OPCODE_GNSS_SET_MODE 0x0408 00070 #define OPCODE_GNSS_AUTONOMOUS 0x0409 00071 #define OPCODE_GNSS_ASSISTED 0x040a 00072 #define OPCODE_GNSS_GET_RESULT_SIZE 0x040c 00073 #define OPCODE_GNSS_READ_RESULTS 0x040d 00074 #define OPCODE_GNSS_ALMANAC_FULL_UPDATE 0x040e 00075 #define OPCODE_GNSS_SET_ASSISTED_POS 0x0410 00076 #define OPCODE_GNSS_GET_NBSVDET 0x0417 00077 #define OPCODE_GNSS_GET_SVDET 0x0418 00078 00079 #define OPCODE_CRYPTO_SET_KEY 0x0502 00080 #define OPCODE_CRYPTO_DIRIVE_STORE_KEY 0x0503 00081 #define OPCODE_CRYPTO_PROCESS_JOIN_ACC 0x0504 00082 #define OPCODE_CRYPTO_COMPUTE_AES_CMAC 0x0505 00083 #define OPCODE_CRYPTO_VERIFY_AES_CMAC 0x0506 00084 #define OPCODE_CRYPTO_AES_ENCRYPT01 0x0507 00085 #define OPCODE_CRYPTO_AES_ENCRYPT 0x0508 00086 #define OPCODE_CRYPTO_AES_DECRYPT 0x0509 00087 #define OPCODE_CRYPTO_STORE_TO_FLASH 0x050a 00088 #define OPCODE_CRYPTO_RESTORE_FROM_FLASH 0x050b 00089 #define OPCODE_CRYPTO_SET_PARAM 0x050d 00090 #define OPCODE_CRYPTO_GET_PARAM 0x050e 00091 00092 /* for 0x0112 command: */ 00093 #define DIO_en_IDX 0 00094 #define DIO_stby_IDX 1 00095 #define DIO_rx_IDX 2 00096 #define DIO_tx_IDX 3 00097 #define DIO_txhp_IDX 4 00098 #define DIO_gnss_IDX 6 00099 #define DIO_wifi_IDX 7 00100 00101 #define DIO5_BIT 0x01 00102 #define DIO6_BIT 0x02 00103 #define DIO7_BIT 0x04 00104 #define DIO8_BIT 0x08 00105 #define DIO10_BIT 0x10 00106 00107 enum { 00108 /* 0x00 */ TCXO_VOLTS_1v6 = 0, 00109 /* 0x01 */ TCXO_VOLTS_1v8, 00110 /* 0x02 */ TCXO_VOLTS_1V8, 00111 /* 0x03 */ TCXO_VOLTS_2v2, 00112 /* 0x04 */ TCXO_VOLTS_2v4, 00113 /* 0x05 */ TCXO_VOLTS_2v7, 00114 /* 0x06 */ TCXO_VOLTS_3v0, 00115 /* 0x07 */ TCXO_VOLTS_3v3, 00116 }; 00117 00118 /* valid memory ranges: 00119 * 000c1000 - 000c2000 1024 dwords 00120 * 00800000 - 00810000 16384 dwords 00121 * 00122 * 00f00000 - 00f00050 20 dwords 00123 * 00f01000 - 00f01048 18 dwords 00124 * 00f02000 - 00f02014 5 dwords 00125 * 00f02018 - 00f02024 3 dwords 00126 * 00f03000 - 00f03034 13 dwords 00127 * 00f04000 - 00f04018 6 dwords 00128 * 00f04020 - 00f04040 8 dwords 00129 * 00f0f000 - 00f0f004 1 dwords 00130 * 00f0f008 - 00f0f010 2 dwords 00131 * 00f10000 - 00f11ffc (lockup) 00132 * 00f11000 - 00f11058 22 dwords 00133 * 00f12000 - 00f1200c 3 dwords 00134 * 00f12010 - 00f12040 12 dwords 00135 * 00f13000 - 00f15034 2061 dwords 00136 * 00f16000 - 00f16014 5 dwords 00137 * 00f17000 - 00f17058 22 dwords 00138 * 00f18000 - 00f18020 8 dwords 00139 * 00f19000 - 00f190a4 41 dwords 00140 * 00f1a000 - 00f1a034 13 dwords 00141 * 00f1f000 - 00f1f004 1 dwords 00142 * 00f1f00c - 00f1f014 2 dwords 00143 * 00f20000 - 00f20020 8 dwords 00144 * 00f20100 - 00f2013c 15 dwords 00145 * 00f20200 - 00f20250 20 dwords 00146 * 00f20300 - 00f20390 36 dwords 00147 * 00f20400 - 00f204c0 48 dwords 00148 * 00f20500 - 00f2050c 3 dwords 00149 * 00f20540 - 00f20598 22 dwords 00150 * 00f30000 - 00f300cc 51 dwords 00151 */ 00152 00153 /* 800000->8000xx: cmd buffer 00154 */ 00155 #define REG_ADDR_REGULATOR_MODE 0x0080036c 00156 #define REG_ADDR_GNSS_CONST 0x008003b8 00157 #define REG_ADDR_GNSS_MODE 0x008004b4 00158 #define REG_ADDR_GNSS_ASSIST_LAT 0x008008ec 00159 #define REG_ADDR_GNSS_ASSIST_LON 0x008008f0 00160 #define REG_ADDR_TCXO 0x00f0003c 00161 #define REG_ADDR_DIO5 0x00f03018 00162 #define REG_ADDR_DIO6 0x00f0301c 00163 #define REG_ADDR_DIO7 0x00f03020 00164 #define REG_ADDR_DIO8 0x00f03024 00165 #define REG_ADDR_DIO10 0x00f0302c 00166 #define REG_ADDR_COUNTER 0x00f04014 00167 #define REG_ADDR_GFSK_BWF 0x00f20124 00168 #define REG_ADDR_GFSK_CFG0 0x00f20314 00169 #define REG_ADDR_GFSK_BITRATE 0x00f20338 00170 #define REG_ADDR_GFSK_FDEV 0x00f2033c 00171 #define REG_ADDR_GFSK_CFG1 0x00f2034c // gfsk preambleDetect, gfsk preambleLength 00172 #define REG_ADDR_GFSK_CFG2 0x00f20350 // gfsk sync word length (in bits) 00173 #define REG_ADDR_GFSK_SYNC_LO 0x00f20354 // gfsk sync word lo 00174 #define REG_ADDR_GFSK_SYNC_HI 0x00f20358 // gfsk sync word hi 00175 #define REG_ADDR_GFSK_CFG3 0x00f2035c // gfsk fixlen/varlen 00176 #define REG_ADDR_GFSK_PAYLOAD_LENGTH_A 0x00f20360 // lowest 8bits todo:tx-or-rx? 00177 #define REG_ADDR_GFSK_PAYLOAD_LENGTH_B 0x00f20368 // payload-length-bits[27:20], addrComp:[17:16] 00178 #define REG_ADDR_GFSK_CFG5 0x00f20370 // gfsk whitening, crcType 00179 #define REG_ADDR_GFSK_CRC_POLY 0x00f20374 00180 #define REG_ADDR_GFSK_CRC_INIT 0x00f20378 00181 #define REG_ADDR_LORA_CONFIG0 0x00f20414 00182 #define REG_ADDR_LORA_CONFIGC 0x00f2041c 00183 #define REG_ADDR_LORA_CONFIGA 0x00f20420 00184 #define REG_ADDR_LORA_CONFIGB 0x00f20428 00185 #define REG_ADDR_LORA_SYNC 0x00f20460 00186 #define REG_ADDR_RFFREQ 0x00f30058 00187 #define REG_ADDR_TX_PARAMS_A 0x00f30074 00188 #define REG_ADDR_TX_PARAMS_B 0x00f30078 00189 #define REG_ADDR_TX_PARAMS_C 0x00f30080 00190 #define REG_ADDR_TX_PARAMS_D 0x00f30088 00191 //#define REG_ADDR_ 0x 00192 // 00193 00194 #define GFSK_CRC_OFF 0x01 00195 #define GFSK_CRC_1_BYTE 0x00 00196 #define GFSK_CRC_2_BYTE 0x02 00197 #define GFSK_CRC_1_BYTE_INV 0x04 00198 #define GFSK_CRC_2_BYTE_INV 0x06 00199 00200 #define GFSK_BT_OFF 0x00 00201 #define GFSK_BT_0_3 0x08 00202 #define GFSK_BT_0_5 0x09 00203 #define GFSK_BT_0_7 0x0a 00204 #define GFSK_BT_1_0 0x0b 00205 00206 #define GFSK_RX_BW_4800 0x1f 00207 #define GFSK_RX_BW_5800 0x17 00208 #define GFSK_RX_BW_7300 0x0f 00209 #define GFSK_RX_BW_9700 0x1e 00210 #define GFSK_RX_BW_11700 0x16 00211 #define GFSK_RX_BW_14600 0x0e 00212 #define GFSK_RX_BW_19500 0x1d 00213 #define GFSK_RX_BW_23400 0x15 00214 #define GFSK_RX_BW_29300 0x0d 00215 #define GFSK_RX_BW_39000 0x1c 00216 #define GFSK_RX_BW_46900 0x14 00217 #define GFSK_RX_BW_58600 0x0c 00218 #define GFSK_RX_BW_78200 0x1b 00219 #define GFSK_RX_BW_93800 0x13 00220 #define GFSK_RX_BW_117300 0x0b 00221 #define GFSK_RX_BW_156200 0x1a 00222 #define GFSK_RX_BW_187200 0x12 00223 #define GFSK_RX_BW_234300 0x0a 00224 #define GFSK_RX_BW_312000 0x19 00225 #define GFSK_RX_BW_373600 0x11 00226 #define GFSK_RX_BW_467000 0x09 00227 00228 #define GFSK_PBLDET_LENGTH_OFF 0x00 00229 #define GFSK_PBLDET_LENGTH_8 0x04 00230 #define GFSK_PBLDET_LENGTH_16 0x05 00231 #define GFSK_PBLDET_LENGTH_24 0x06 00232 #define GFSK_PBLDET_LENGTH_32 0x07 00233 00234 enum { 00235 /* 0 */ LORA_BW_7_8KHz = 0, 00236 /* 1 */ LORA_BW_15_6KHz, 00237 /* 2 */ LORA_BW_31_25KHz, 00238 /* 3 */ LORA_BW_62_5KHz, 00239 /* 4 */ LORA_BW_125KHz, 00240 /* 5 */ LORA_BW_250KHz, 00241 /* 6 */ LORA_BW_500KHz, 00242 /* 7 */ LORA_BW_1000KHz, 00243 }; 00244 00245 typedef union { 00246 struct { 00247 uint8_t lf_rc : 1; // 0 00248 uint8_t hf_rc : 1; // 1 00249 uint8_t pll : 1; // 2 00250 uint8_t adc : 1; // 3 00251 uint8_t img : 1; // 4 00252 uint8_t pll_tx : 1; // 5 00253 uint8_t rfu : 2; // 6,7 00254 } bits; 00255 uint8_t octet; 00256 } calibParams_t; // for opcode 0x010f 00257 00258 00259 typedef union { 00260 struct __attribute__((packed)) { 00261 uint8_t dcdc_en : 1; // 0 00262 uint32_t _todo_ :31; // 1 -> 31 00263 } bits; 00264 uint32_t dword; 00265 } regulatorMode_t; // 0x0080036c 00266 00267 typedef union { 00268 struct __attribute__((packed)) { 00269 uint8_t gps : 1; // 0 00270 uint8_t beidou : 1; // 1 00271 uint32_t _todo_ :30; // 2 -> 31 00272 } bits; 00273 uint32_t dword; 00274 } gnssConstellation_t; // 0x008003b8 00275 00276 typedef union { 00277 struct __attribute__((packed)) { 00278 uint8_t todo : 1; // 0 00279 uint8_t gnss_scan_single : 1; // 1 0=dual-scanning 00280 uint32_t _todo_ :30; // 2 -> 31 00281 } bits; 00282 uint32_t dword; 00283 } gnssMode_t; // 0x008004b4 00284 00285 typedef union { 00286 struct __attribute__((packed)) { 00287 uint16_t todo :16; // 0 -> 15 00288 uint8_t volts : 3; // 16,17,18 00289 uint32_t _todo_ :13; // 19 -> 31 00290 } bits; 00291 uint32_t dword; 00292 } tcxo_t; // 0x00f0003c 00293 00294 typedef union { 00295 struct __attribute__((packed)) { 00296 uint8_t todo : 1; // 0 00297 uint8_t enable : 1; // 1 00298 uint32_t _todo_ :30; // 2 -> 31 00299 } bits; 00300 uint32_t dword; 00301 } dioEnable_t; // 0x00f030xx 00302 00303 typedef union { 00304 struct __attribute__((packed)) { 00305 uint32_t todo : 20; // 0 -> 19 00306 uint8_t bwf_lo : 3; // 20,21,22 /* ? receiver bandwidth exponent ? */ 00307 uint8_t _todo_ : 1; // 23 00308 uint8_t bwf_hi : 2; // 24,25 /* ? receiver bandwidth mantissa ? */ 00309 uint8_t todo_ : 6; // 26,27,28,29,30,31 00310 } bits; 00311 uint32_t dword; 00312 } gfskBW_t; // 0x00f20124 00313 00314 typedef union { 00315 struct __attribute__((packed)) { 00316 uint8_t modem_sf : 4; // 0,1,2,3 00317 uint8_t modem_bw : 4; // 4,5,6,7 00318 uint8_t coding_rate : 4; // 8,9,10,11 TODO:not all 4 bits 00319 uint8_t ppm_offset : 1; // 12 LowDatarateOptimize 00320 uint8_t todo_a : 3; // 13,14,15 00321 uint8_t crc_on : 1; // 16 00322 uint8_t implicit_header : 1; // 17 00323 uint8_t todo_b : 6; // 18,19,20,21,22,23 00324 uint8_t payload_length : 8; // 24,25,26,27,28,29,30,31 00325 } bits; 00326 uint32_t dword; 00327 } loraConfig0_t; // at 0x00f20414 00328 00329 typedef union { 00330 struct { 00331 uint16_t preamble_length : 16; // 0 -> 15 00332 uint16_t todo : 16; // 16 -> 31 00333 } bits; 00334 uint32_t dword; 00335 } loraConfigC_t; // at 0x00f2041c 00336 00337 typedef union { 00338 struct { 00339 uint8_t todo_a : 8; // 0,1,2,3,4,5,6,7 00340 uint8_t todo_b : 2; // 8,9 00341 uint8_t invertIQ : 1; // 10 00342 uint32_t todo_c :21; // 11,12,13,14 15,16,17,18 19,20,21,22 23,24,25,26 27,28,29,30 31 00343 } bits; 00344 uint32_t dword; 00345 } loraConfigA_t; // at 0xf20420 00346 00347 typedef union { 00348 struct { 00349 uint8_t todo_a : 1; // 0 00350 uint8_t invertIQ : 1; // 1 00351 uint32_t todo_b :30; // 2,3,4,5 6,7,8,9 10,11,12,13 14,15,16,17 18,19,20,21 22,23,24,25 26,27,28,29 30,31 00352 } bits; 00353 uint32_t dword; 00354 } loraConfigB_t; // at 0x00f20428 00355 00356 typedef union { 00357 struct { 00358 uint8_t ppg_a : 4; // 0,1,2,3 00359 uint8_t todo : 4; // 4,5,6,7 00360 uint8_t ppg_b : 4; // 8,9,10,11 00361 uint8_t todo_ : 4; // 12,13,14,15 00362 uint16_t _todo :16; // 16 -> 31 00363 } bits; 00364 uint32_t dword; 00365 } loraSync_t; // at 0x00f20460 00366 00367 typedef union { 00368 struct { 00369 uint32_t todo_ :20; // 0,1,2,3 4,5,6,7 8,9,10,11 12,13,14,15 16,17,18,19 00370 uint8_t bt : 4; // 20,21,22,23 (0=0.3 1=0.5 2=0.7 3=1.0) 00371 uint8_t shaping_en : 1; // 24 00372 uint8_t todo : 7; // 25,26,27,28,29,30,31 00373 } bits; 00374 uint32_t dword; 00375 } gfskConfig0_t; // at 0x00f20314 00376 00377 typedef union { 00378 struct { 00379 uint16_t preamble_length :16; // 0,1,2,3 4,5,6,7 8,9,10,11 12,13,14,15 00380 uint8_t preamble_det_len : 4; // 16,17,18,19 0=8bit 1=16bit 2=24bit 3=32bit 00381 uint8_t preamble_det_enable : 1; // 20 00382 uint16_t todo :11; // 21,22,23,24 25,26,27,28, 29,30,31 00383 } bits; 00384 uint32_t dword; 00385 } gfskConfig1_t; // at 0x00f2034c 00386 00387 typedef union { 00388 struct __attribute__((packed)) { 00389 uint32_t _todo :20; // 0,1,2,3 4,5,6,7 8,9,10,11 12,13,14,15 16,17,18,19 00390 uint8_t sync_word_length : 7; // 20,21,22,23,24,25,26 length in bits 00391 uint16_t todo : 5; // 27,28,29,30,31 00392 } bits; 00393 uint32_t dword; 00394 } gfskConfig2_t; // at 0x00f20350 00395 00396 typedef union { 00397 struct { 00398 uint8_t variable_length : 1; // 0 00399 uint32_t todo :31; // 1 -> 31 00400 } bits; 00401 uint32_t dword; 00402 } gfskConfig3_t; // at 0x00f2035c 00403 00404 typedef union { 00405 struct __attribute__((packed)) { 00406 uint8_t todo : 8; // 0 -> 7 00407 uint8_t node_adrs : 8; // 8 -> 15 00408 uint8_t addr_comp : 2; // 16,17 00409 uint8_t _todo : 2; // 18,19 00410 uint8_t payload_length : 8; // 20,21,22,23 24,25,26,27 00411 uint8_t todo_ : 4; // 28,29,30,31 00412 } bits; 00413 uint32_t dword; 00414 } gfskConfig4_t; // at 0x00f20368 00415 00416 typedef union { 00417 struct { 00418 uint8_t crc_off : 1; // 0 00419 uint8_t todo : 3; // 1,2,3 00420 uint8_t crc_size : 1; // 4 0=one-byte 1=two-byte 00421 uint8_t _todo : 3; // 5,6,7 00422 uint8_t crc_invert : 1; // 8 00423 uint8_t _todo_ : 7; // 9,10,11,12 13,14,15 00424 uint8_t whitening_enable : 1; // 16 00425 uint16_t todo_ :15; // 17,18,19,20 21,22,23,24 25,26,27,28 29,30,31 00426 } bits; 00427 uint32_t dword; 00428 } gfskConfig5_t; // at 0x00f20370 00429 00430 typedef union { 00431 struct { 00432 uint8_t _todo : 8; // 0 -> 7 00433 uint8_t RegPASupply : 1; // 8 00434 uint32_t todo_ :23; // 9 -> 31 00435 } bits; 00436 uint32_t dword; 00437 } txParamsA_t; // at 0x00f30074 00438 00439 typedef union { 00440 struct { 00441 uint8_t _todo : 1; // 0 00442 uint8_t PaSel : 1; // 1 00443 uint8_t __todo : 2; // 2,3 00444 uint8_t PaHPSel : 3; // 4,5,6 00445 uint8_t todo : 1; // 7 00446 uint8_t PaDutyCycle : 3; // 8,9,10 00447 uint32_t todo_ :21; // 11 -> 31 00448 } bits; 00449 uint32_t dword; 00450 } txParamsB_t; // at 0x00f30078 00451 00452 typedef union { 00453 struct __attribute__((packed)) { 00454 uint8_t todo : 8; // 0 -> 7 00455 uint8_t pa_ramp_time : 3; // 8,9,10 00456 uint8_t _todo : 1; // 11 00457 uint8_t tx_dbm : 5; // 12,13,14,15,16 00458 uint16_t todo_ :15; // 17 -> 31 00459 } bits; 00460 uint32_t dword; 00461 } txParamsC_t; // at 0x00f30080 00462 00463 typedef union { 00464 struct { 00465 uint32_t todo_ :28; // 0 -> 27 00466 uint8_t PaSel : 1; // 28 00467 uint8_t todo : 3; // 29,30,31 00468 } bits; 00469 uint32_t dword; 00470 } txParamsD_t; // at 0x00f30088 00471 00472 enum { 00473 /* 0 */ CMD_FAIL = 0, 00474 /* 1 */ CMD_PERR, 00475 /* 2 */ CMD_OK, 00476 /* 3 */ CMD_DAT 00477 }; 00478 00479 enum { 00480 /* 0 */ PACKET_TYPE_NONE = 0, 00481 /* 1 */ PACKET_TYPE_GFSK, 00482 /* 2 */ PACKET_TYPE_LORA, 00483 }; 00484 00485 typedef union { 00486 struct { 00487 uint32_t ___ : 2; // 0,1 00488 uint32_t TxDone : 1; // 2 00489 uint32_t RxDone : 1; // 3 00490 uint32_t PreambleDetected : 1; // 4 00491 uint32_t SyncHeaderValid : 1; // 5 00492 uint32_t HeaderErr : 1; // 6 00493 uint32_t Err : 1; // 7 00494 uint32_t CadDone : 1; // 8 00495 uint32_t CadDetected : 1; // 9 00496 uint32_t Timeout : 1; // 10 00497 uint32_t __ : 8; // 11,12,13,14,15,16,17,18 00498 uint32_t GNSSDone : 1; // 19 00499 uint32_t WifiDone : 1; // 20 00500 uint32_t lowBat : 1; // 21 00501 uint32_t CmdErr : 1; // 22 00502 uint32_t Error : 1; // 23 00503 uint32_t FskLenError : 1; // 24 00504 uint32_t FskAddrError : 1; // 25 00505 uint32_t _ : 6; // 26,27,28,29,30,31 00506 } bits; 00507 uint32_t dword; 00508 } irq_t; 00509 00510 typedef union { 00511 struct { 00512 uint16_t bootloader : 1; // 0 00513 uint16_t chipMode : 3; // 1,2,3 00514 uint16_t resetStatus : 4; // 4,5,6,7 00515 uint16_t intActive : 1; // 8 00516 uint16_t cmdStatus : 3; // 9,10,11 00517 uint16_t rfu : 4; // 12,13,14,15 00518 } bits; 00519 uint16_t word; 00520 } stat_t; 00521 00522 typedef union { 00523 struct { 00524 uint16_t lf_rc_calib : 1; // 0 00525 uint16_t hf_rc_calib : 1; // 1 00526 uint16_t adc_calib : 1; // 2 00527 uint16_t pll_calib : 1; // 3 00528 uint16_t img_calib : 1; // 4 00529 uint16_t hf_xosc_start_ : 1; // 5 00530 uint16_t lf_xosc_start : 1; // 6 00531 uint16_t pll_lock : 1; // 7 00532 uint16_t rx_adc_offset : 1; // 8 00533 uint16_t rfu : 7; // 9,10,11,12,13,14,15 00534 } bits; 00535 uint16_t word; 00536 } ErrorStat_t; 00537 00538 typedef union { 00539 struct { 00540 uint8_t signal : 2; // 0,1 00541 uint8_t datarate : 6; // 2,3,4,5,6,7 00542 } bits; 00543 uint16_t octet; 00544 } wifiType_t; 00545 00546 typedef union { 00547 struct { 00548 uint8_t channelID : 4; // 0,1,2,3 00549 uint8_t macValidationID : 4; // 4,5,6,7 00550 } bits; 00551 uint16_t octet; 00552 } wifiChanInfo_t; 00553 00554 typedef enum { 00555 CHIPMODE_NONE = 0, 00556 CHIPMODE_RX, 00557 CHIPMODE_TX 00558 } chipMote_e; 00559 00560 class SX1265 { 00561 public: 00562 SX1265(SPI&, PinName nss, PinName busy, PinName dio9, PinName nrst, uint32_t default_irqs = 0x3ffffff, unsigned tcxoTimeout = 2048, uint8_t tcxoVolts = TCXO_VOLTS_2v7); 00563 static Callback<void()> dio9_topHalf; // low latency ISR context 00564 uint16_t xfer(uint16_t opcode, uint16_t writeLen, uint16_t readLen, uint8_t* buf); 00565 uint32_t service(void); 00566 void hw_reset(void); 00567 const char *cmdStatus_toString(uint8_t); 00568 uint8_t setMHz(float); 00569 float getMHz(void); 00570 void to_big_endian16(uint16_t in, uint8_t *out); 00571 void to_big_endian32(uint32_t in, uint8_t *out); 00572 void to_big_endian24(uint32_t in, uint8_t *out); 00573 uint32_t from_big_endian32(const uint8_t *in); 00574 //int memRegRead(uint32_t addr, uint16_t len_dwords, uint8_t *dest); 00575 int memRegRead(uint32_t addr, uint16_t len_dwords, uint32_t *dest); 00576 uint8_t getPacketType(void); 00577 void setPacketType(uint8_t); 00578 void start_tx(uint8_t pktLen); // tx_buf must be filled prior to calling 00579 00580 Timer t; 00581 ErrorStat_t errorStat; 00582 00583 //! RF transmit packet buffer 00584 uint8_t tx_buf[256]; // lora fifo size 00585 00586 //! RF receive packet buffer 00587 uint8_t rx_buf[256]; // lora fifo size 00588 00589 Callback<void()> chipModeChange; // read chipMode_e chipMode 00590 Callback<void()> txDone; // user context 00591 void (*cadDone)(bool detected); // user context 00592 void (*rxDone)(uint8_t size, float rssi, float snr); // user context 00593 void (*timeout)(bool tx); // user context 00594 unsigned txTimeout; 00595 uint16_t err_opcode; 00596 uint8_t rx_buf_offset; 00597 chipMote_e chipMode; 00598 00599 void GetPaConfig(uint8_t*); /* for read-modify-write */ 00600 void GetLoRaModulationParameters(uint8_t*); /* for read-modify-write */ 00601 void GetLoRaPacketParameters(uint8_t*); /* for read-modify-write */ 00602 void GetGfskModulationParameters(uint8_t*); /* for read-modify-write */ 00603 void GetGfskPacketParameters(uint8_t*); /* for read-modify-write */ 00604 00605 private: 00606 SPI& spi; 00607 DigitalOut nss; 00608 DigitalIn busy; 00609 InterruptIn dio9; 00610 DigitalInOut nrst; 00611 static void dio9isr(void); 00612 bool sleeping; 00613 uint16_t prev_opcode; 00614 uint16_t this_opcode; 00615 bool inService; 00616 void enable_default_irqs_(void); 00617 00618 public: 00619 uint32_t default_irqs; 00620 00621 private: 00622 unsigned tcxoStartDelay; 00623 uint8_t tcxoVolts; 00624 uint8_t rxArgs[3]; 00625 }; 00626 00627 #endif /* SX1265_H */ 00628
Generated on Tue Jul 19 2022 12:22:24 by
1.7.2