43#define CHIP_NAME "Semtech SX1262"
44#define MANUFACTURER_NAME "Semtech"
45#define SUPPLY_VOLTAGE_MIN 1.8f
46#define SUPPLY_VOLTAGE_MAX 3.7f
47#define MAX_CURRENT 107.0f
48#define TEMPERATURE_MIN -40.0f
49#define TEMPERATURE_MAX 85.0f
50#define DRIVER_VERSION 1000
55#define SX1262_COMMAND_SET_SLEEP 0x84
56#define SX1262_COMMAND_SET_STANDBY 0x80
57#define SX1262_COMMAND_SET_FS 0xC1
58#define SX1262_COMMAND_SET_TX 0x83
59#define SX1262_COMMAND_SET_RX 0x82
60#define SX1262_COMMAND_STOP_TIMER_ON_PREAMBLE 0x9F
61#define SX1262_COMMAND_SET_RX_DUTY_CYCLE 0x94
62#define SX1262_COMMAND_SET_CAD 0xC5
63#define SX1262_COMMAND_SET_TX_CONTINUOUS_WAVE 0xD1
64#define SX1262_COMMAND_SET_TX_INFINITE_PREAMBLE 0xD2
65#define SX1262_COMMAND_SET_REGULATOR_MODE 0x96
66#define SX1262_COMMAND_SET_CALIBRATE 0x89
67#define SX1262_COMMAND_SET_CALIBRATE_IMAGE 0x98
68#define SX1262_COMMAND_SET_PA_CONFIG 0x95
69#define SX1262_COMMAND_SET_RX_TX_FALLBACK_MODE 0x93
70#define SX1262_COMMAND_WRITE_REGISTER 0x0D
71#define SX1262_COMMAND_READ_REGISTER 0x1D
72#define SX1262_COMMAND_WRITE_BUFFER 0x0E
73#define SX1262_COMMAND_READ_BUFFER 0x1E
74#define SX1262_COMMAND_SET_DIO_IRQ_PARAMS 0x08
75#define SX1262_COMMAND_GET_IRQ_STATUS 0x12
76#define SX1262_COMMAND_CLEAR_IRQ_STATUS 0x02
77#define SX1262_COMMAND_SET_DIO2_AS_RF_SWITCH_CTRL 0x9D
78#define SX1262_COMMAND_SET_DIO3_AS_TCXO_CTRL 0x97
79#define SX1262_COMMAND_SET_RF_FREQUENCY 0x86
80#define SX1262_COMMAND_SET_PACKET_TYPE 0x8A
81#define SX1262_COMMAND_GET_PACKET_TYPE 0x11
82#define SX1262_COMMAND_SET_TX_PARAMS 0x8E
83#define SX1262_COMMAND_SET_MODULATION_PARAMS 0x8B
84#define SX1262_COMMAND_SET_PACKET_PARAMS 0x8C
85#define SX1262_COMMAND_SET_CAD_PARAMS 0x88
86#define SX1262_COMMAND_SET_BUFFER_BASE_ADDRESS 0x8F
87#define SX1262_COMMAND_SET_LORA_SYMB_NUM_TIMEOUT 0xA0
88#define SX1262_COMMAND_GET_STATUS 0xC0
89#define SX1262_COMMAND_GET_RSSI_LNST 0x15
90#define SX1262_COMMAND_GET_RX_BUFFER_STATUS 0x13
91#define SX1262_COMMAND_GET_PACKET_STATUS 0x14
92#define SX1262_COMMAND_GET_DEVICE_ERRORS 0x17
93#define SX1262_COMMAND_CLEAR_DEVICE_ERRORS 0x07
94#define SX1262_COMMAND_GET_STATS 0x10
95#define SX1262_COMMAND_RESET_STATS 0x00
100#define SX1262_REG_HOPPING_ENABLE 0x0385
101#define SX1262_REG_PACKET_LENGTH 0x0386
102#define SX1262_REG_NB_HOPPING_BLOCKS 0x0387
103#define SX1262_REG_NB_SYMBOLS_0 0x0388
104#define SX1262_REG_FREQ_0 0x038A
105#define SX1262_REG_NB_SYMBOLS_15 0x03E2
106#define SX1262_REG_FREQ_15 0x03E4
107#define SX1262_REG_DIOX_OUTPUT_ENABLE 0x0580
108#define SX1262_REG_DIOX_INPUT_ENABLE 0x0583
109#define SX1262_REG_DIOX_PULL_UP_CONTROL 0x0584
110#define SX1262_REG_DIOX_PULL_DOWN_CONTROL 0x0585
111#define SX1262_REG_WHITENING_INIT_VALUE_MSB 0x06B8
112#define SX1262_REG_WHITENING_INIT_VALUE_LSB 0x06B9
113#define SX1262_REG_CRC_INIT_VALUE_MSB 0x06BC
114#define SX1262_REG_CRC_INIT_VALUE_LSB 0x06BD
115#define SX1262_REG_CRC_POLYNOMIAL_VALUE_MSB 0x06BE
116#define SX1262_REG_CRC_POLYNOMIAL_VALUE_LSB 0x06BF
117#define SX1262_REG_SYNC_WORD_0 0x06C0
118#define SX1262_REG_SYNC_WORD_1 0x06C1
119#define SX1262_REG_SYNC_WORD_2 0x06C2
120#define SX1262_REG_SYNC_WORD_3 0x06C3
121#define SX1262_REG_SYNC_WORD_4 0x06C4
122#define SX1262_REG_SYNC_WORD_5 0x06C5
123#define SX1262_REG_SYNC_WORD_6 0x06C6
124#define SX1262_REG_SYNC_WORD_7 0x06C7
125#define SX1262_REG_NODE_ADDRESS 0x06CD
126#define SX1262_REG_BROADCAST_ADDRESS 0x06CE
127#define SX1262_REG_IQ_POLARITY_SETUP 0x0736
128#define SX1262_REG_LORA_SYNC_WORD_MSB 0x0740
129#define SX1262_REG_LORA_SYNC_WORD_LSB 0x0741
130#define SX1262_REG_RANDOM_NUMBER_GEN_0 0x0819
131#define SX1262_REG_RANDOM_NUMBER_GEN_1 0x081A
132#define SX1262_REG_RANDOM_NUMBER_GEN_2 0x081B
133#define SX1262_REG_RANDOM_NUMBER_GEN_3 0x081C
134#define SX1262_REG_TX_MODULATION 0x0889
135#define SX1262_REG_RX_GAIN 0x08AC
136#define SX1262_REG_TX_CLAMP_CONFIG 0x08D8
137#define SX1262_REG_OCP_CONFIGURATION 0x08E7
138#define SX1262_REG_RTC_CONTROL 0x0902
139#define SX1262_REG_XTA_TRIM 0x0911
140#define SX1262_REG_XTB_TRIM 0x0912
141#define SX1262_REG_DIO3_OUTPUT_CONTROL 0x0920
142#define SX1262_REG_EVENT_MASK 0x0944
155static uint8_t a_sx1262_spi_read(
sx1262_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
179static uint8_t a_sx1262_spi_write(
sx1262_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
188 memset(handle->
buf, 0,
sizeof(uint8_t) * 384);
189 handle->
buf[0] = reg;
190 memcpy(&handle->
buf[1], buf, len);
213static uint8_t a_sx1262_spi_read_register(
sx1262_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
224 memset(handle->
buf, 0,
sizeof(uint8_t) * 384);
226 reg_buf[1] = (reg >> 8) & 0xFF;
227 reg_buf[2] = (reg >> 0) & 0xFF;
234 memcpy(buf, handle->
buf + 1, len);
252static uint8_t a_sx1262_spi_write_register(
sx1262_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
261 memset(handle->
buf, 0,
sizeof(uint8_t) * 384);
263 handle->
buf[1] = (reg >> 8) & 0xFF;
264 handle->
buf[2] = (reg >> 0) & 0xFF;
265 memcpy(&handle->
buf[3], buf, len);
288static uint8_t a_sx1262_spi_write_buffer(
sx1262_handle_t *handle, uint8_t offset, uint8_t *buf, uint16_t len)
297 memset(handle->
buf, 0,
sizeof(uint8_t) * 384);
299 handle->
buf[1] = offset;
300 memcpy(&handle->
buf[2], buf, len);
323static uint8_t a_sx1262_spi_read_buffer(
sx1262_handle_t *handle, uint8_t offset, uint8_t *buf, uint16_t len)
334 memset(handle->
buf, 0,
sizeof(uint8_t) * 384);
343 memcpy(buf, handle->
buf + 1, len);
376 else if ((level == 1) && (timeout != 0))
422 memset(buf, 0,
sizeof(uint8_t) * 3);
426 handle->
debug_print(
"sx1262: get irq status failed.\n");
430 status = ((uint16_t)buf[1] << 8) | buf[2];
434 handle->
debug_print(
"sx1262: clear irq status failed.\n");
501 handle->
debug_print(
"sx1262: write register failed.\n");
510 handle->
debug_print(
"sx1262: read register failed.\n");
518 handle->
debug_print(
"sx1262: write register failed.\n");
539 uint8_t payload_length_rx;
540 uint8_t rx_start_buffer_pointer;
542 memset(buf, 0,
sizeof(uint8_t) * 3);
546 handle->
debug_print(
"sx1262: get rx buffer status failed.\n");
550 payload_length_rx = buf[1];
551 rx_start_buffer_pointer = buf[2];
553 res = a_sx1262_spi_read_buffer(handle, rx_start_buffer_pointer, handle->
receive_buf,
557 handle->
debug_print(
"sx1262: read buffer failed.\n");
605 handle->
debug_print(
"sx1262: spi_init is null.\n");
611 handle->
debug_print(
"sx1262: spi_deinit is null.\n");
617 handle->
debug_print(
"sx1262: spi_write_read is null.\n");
623 handle->
debug_print(
"sx1262: reset_gpio_init is null.\n");
629 handle->
debug_print(
"sx1262: reset_gpio_deinit is null.\n");
635 handle->
debug_print(
"sx1262: reset_gpio_write is null.\n");
641 handle->
debug_print(
"sx1262: busy_gpio_init is null.\n");
647 handle->
debug_print(
"sx1262: busy_gpio_deinit is null.\n");
653 handle->
debug_print(
"sx1262: busy_gpio_read is null.\n");
659 handle->
debug_print(
"sx1262: delay_ms is null.\n");
665 handle->
debug_print(
"sx1262: receive_callback is null.\n");
672 handle->
debug_print(
"sx1262: spi initialization failed.\n");
678 handle->
debug_print(
"sx1262: reset gpio initialization failed.\n");
685 handle->
debug_print(
"sx1262: busy gpio initialization failed.\n");
694 handle->
debug_print(
"sx1262: reset chip failed.\n");
704 handle->
debug_print(
"sx1262: reset chip failed.\n");
714 handle->
debug_print(
"sx1262: reset chip failed.\n");
725 handle->
debug_print(
"sx1262: get status failed.\n");
735 handle->
debug_print(
"sx1262: set standby failed.\n");
774 res = a_sx1262_check_busy(handle);
786 handle->
debug_print(
"sx1262: power down failed.\n");
794 handle->
debug_print(
"sx1262: busy gpio deinit failed.\n");
801 handle->
debug_print(
"sx1262: reset gpio deinit failed.\n");
808 handle->
debug_print(
"sx1262: spi deinit failed.\n");
832 uint16_t clear_irq_param;
844 res = a_sx1262_check_busy(handle);
852 clear_irq_param = 0x03FF;
853 buf[0] = (clear_irq_param >> 8) & 0xFF;
854 buf[1] = (clear_irq_param >> 0) & 0xFF;
858 handle->
debug_print(
"sx1262: clear irq status failed.\n");
863 res = a_sx1262_check_busy(handle);
871 timeout = (uint32_t)(us / 15.625);
872 buf[0] = (timeout >> 16) & 0xFF;
873 buf[1] = (timeout >> 8) & 0xFF;
874 buf[2] = (timeout >> 0) & 0xFF;
900 uint16_t clear_irq_param;
912 res = a_sx1262_check_busy(handle);
920 clear_irq_param = 0x03FF;
921 buf[0] = (clear_irq_param >> 8) & 0xFF;
922 buf[1] = (clear_irq_param >> 0) & 0xFF;
926 handle->
debug_print(
"sx1262: clear irq status failed.\n");
931 res = a_sx1262_check_busy(handle);
969 uint16_t clear_irq_param;
982 res = a_sx1262_check_busy(handle);
990 clear_irq_param = 0x03FF;
991 buf[0] = (clear_irq_param >> 8) & 0xFF;
992 buf[1] = (clear_irq_param >> 0) & 0xFF;
996 handle->
debug_print(
"sx1262: clear irq status failed.\n");
1001 res = a_sx1262_check_busy(handle);
1020 while ((timeout != 0) && (handle->
cad_done == 0))
1094 uint8_t *buf, uint16_t len, uint32_t us)
1099 uint16_t clear_irq_param;
1112 res = a_sx1262_check_busy(handle);
1120 clear_irq_param = 0x03FF;
1121 buffer[0] = (clear_irq_param >> 8) & 0xFF;
1122 buffer[1] = (clear_irq_param >> 0) & 0xFF;
1126 handle->
debug_print(
"sx1262: clear irq status failed.\n");
1131 res = a_sx1262_check_busy(handle);
1143 handle->
debug_print(
"sx1262: set standby failed.\n");
1148 res = a_sx1262_check_busy(handle);
1156 buffer[0] = (preamble_length >> 8) & 0xFF;
1157 buffer[1] = (preamble_length >> 0) & 0xFF;
1158 buffer[2] = header_type;
1159 buffer[3] = (uint8_t)len;
1160 buffer[4] = crc_type;
1161 buffer[5] = invert_iq_enable;
1165 handle->
debug_print(
"sx1262: set lora modulation params failed.\n");
1174 res = a_sx1262_check_busy(handle);
1185 handle->
debug_print(
"sx1262: read register failed.\n");
1194 handle->
debug_print(
"sx1262: read register failed.\n");
1203 res = a_sx1262_check_busy(handle);
1214 handle->
debug_print(
"sx1262: read register failed.\n");
1223 handle->
debug_print(
"sx1262: read register failed.\n");
1229 res = a_sx1262_check_busy(handle);
1237 if (a_sx1262_spi_write_buffer(handle, 0x00, buf, len) != 0)
1239 handle->
debug_print(
"sx1262: write buffer failed.\n");
1244 res = a_sx1262_check_busy(handle);
1252 reg = (uint32_t)(us / 15.625);
1253 buffer[0] = (reg >> 16) & 0xFF;
1254 buffer[1] = (reg >> 8) & 0xFF;
1255 buffer[2] = (reg >> 0) & 0xFF;
1265 ms = us / 1000 + 10000;
1266 while ((ms != 0) && (handle->
tx_done == 0) && (handle->
timeout == 0))
1271 if ((ms != 0) && (handle->
tx_done == 1))
1275 else if ((ms == 0) && (handle->
tx_done == 0))
1281 else if (handle->
timeout == 1)
1322 res = a_sx1262_check_busy(handle);
1330 if (a_sx1262_spi_write_register(handle, reg, buf, len) != 0)
1332 handle->
debug_print(
"sx1262: write register failed.\n");
1367 res = a_sx1262_check_busy(handle);
1375 if (a_sx1262_spi_read_register(handle, reg, buf, len) != 0)
1377 handle->
debug_print(
"sx1262: read register failed.\n");
1412 res = a_sx1262_check_busy(handle);
1420 if (a_sx1262_spi_write_buffer(handle, offset, buf, len) != 0)
1422 handle->
debug_print(
"sx1262: write buffer failed.\n");
1457 res = a_sx1262_check_busy(handle);
1465 if (a_sx1262_spi_read_buffer(handle, offset, buf, len) != 0)
1467 handle->
debug_print(
"sx1262: read buffer failed.\n");
1502 res = a_sx1262_check_busy(handle);
1510 prev = (uint8_t)((mode << 2) | (rtc_wake_up_enable << 0));
1514 handle->
debug_print(
"sx1262: set sleep failed.\n");
1548 res = a_sx1262_check_busy(handle);
1560 handle->
debug_print(
"sx1262: set standby failed.\n");
1592 res = a_sx1262_check_busy(handle);
1637 res = a_sx1262_check_busy(handle);
1645 buf[0] = (timeout >> 16) & 0xFF;
1646 buf[1] = (timeout >> 8) & 0xFF;
1647 buf[2] = (timeout >> 0) & 0xFF;
1686 res = a_sx1262_check_busy(handle);
1694 buf[0] = (timeout >> 16) & 0xFF;
1695 buf[1] = (timeout >> 8) & 0xFF;
1696 buf[2] = (timeout >> 0) & 0xFF;
1730 *reg = (uint32_t)(us / 15.625);
1757 *us = (double)(reg) * 15.625;
1788 res = a_sx1262_check_busy(handle);
1800 handle->
debug_print(
"sx1262: set stop timer on preamble failed.\n");
1835 res = a_sx1262_check_busy(handle);
1843 buf[0] = (rx_period >> 16) & 0xFF;
1844 buf[1] = (rx_period >> 8) & 0xFF;
1845 buf[2] = (rx_period >> 0) & 0xFF;
1846 buf[3] = (sleep_period >> 16) & 0xFF;
1847 buf[4] = (sleep_period >> 8) & 0xFF;
1848 buf[5] = (sleep_period >> 0) & 0xFF;
1852 handle->
debug_print(
"sx1262: set rx duty cycle failed.\n");
1884 res = a_sx1262_check_busy(handle);
1927 res = a_sx1262_check_busy(handle);
1938 handle->
debug_print(
"sx1262: set tx continuous wave failed.\n");
1970 res = a_sx1262_check_busy(handle);
1981 handle->
debug_print(
"sx1262: set tx infinite preamble failed.\n");
2015 res = a_sx1262_check_busy(handle);
2027 handle->
debug_print(
"sx1262: set regulator mode failed.\n");
2061 res = a_sx1262_check_busy(handle);
2073 handle->
debug_print(
"sx1262: set calibration failed.\n");
2108 res = a_sx1262_check_busy(handle);
2121 handle->
debug_print(
"sx1262: set calibration image failed.\n");
2156 res = a_sx1262_check_busy(handle);
2164 buf[0] = pa_duty_cycle;
2171 handle->
debug_print(
"sx1262: set pa config failed.\n");
2205 res = a_sx1262_check_busy(handle);
2217 handle->
debug_print(
"sx1262: set rx tx fallback mode failed.\n");
2241 uint16_t dio2_mask, uint16_t dio3_mask)
2255 res = a_sx1262_check_busy(handle);
2263 buf[0] = (irq_mask >> 8) & 0xFF;
2264 buf[1] = (irq_mask >> 0) & 0xFF;
2265 buf[2] = (dio1_mask >> 8) & 0xFF;
2266 buf[3] = (dio1_mask >> 0) & 0xFF;
2267 buf[4] = (dio2_mask >> 8) & 0xFF;
2268 buf[5] = (dio2_mask >> 0) & 0xFF;
2269 buf[6] = (dio3_mask >> 8) & 0xFF;
2270 buf[7] = (dio3_mask >> 0) & 0xFF;
2275 handle->
debug_print(
"sx1262: set dio irq params failed.\n");
2309 res = a_sx1262_check_busy(handle);
2320 handle->
debug_print(
"sx1262: get irq status failed.\n");
2324 *status = ((uint16_t)buf[1] << 8) | buf[2];
2355 res = a_sx1262_check_busy(handle);
2363 buf[0] = (clear_irq_param >> 8) & 0xFF;
2364 buf[1] = (clear_irq_param >> 0) & 0xFF;
2368 handle->
debug_print(
"sx1262: clear irq status failed.\n");
2402 res = a_sx1262_check_busy(handle);
2414 handle->
debug_print(
"sx1262: set dio2 as rf switch ctrl failed.\n");
2449 res = a_sx1262_check_busy(handle);
2458 buf[1] = (delay >> 16) & 0xFF;
2459 buf[2] = (delay >> 8) & 0xFF;
2460 buf[3] = (delay >> 0) & 0xFF;
2464 handle->
debug_print(
"sx1262: set dio3 as tcxo ctrl status failed.\n");
2494 *reg = (uint32_t)(powf(2.0f, 25.0f) / (32 * powf(10.f, 6.0f)) * freq);
2521 *freq = (uint32_t)(32 * powf(10.f, 6.0f) / powf(2.0f, 25.0f) * reg);
2552 res = a_sx1262_check_busy(handle);
2560 buf[0] = (reg >> 24) & 0xFF;
2561 buf[1] = (reg >> 16) & 0xFF;
2562 buf[2] = (reg >> 8) & 0xFF;
2563 buf[3] = (reg >> 0) & 0xFF;
2567 handle->
debug_print(
"sx1262: set rf frequency failed.\n");
2601 res = a_sx1262_check_busy(handle);
2613 handle->
debug_print(
"sx1262: set packet type failed.\n");
2647 res = a_sx1262_check_busy(handle);
2658 handle->
debug_print(
"sx1262: get packet type failed.\n");
2694 res = a_sx1262_check_busy(handle);
2707 handle->
debug_print(
"sx1262: set tx params failed.\n");
2745 res = a_sx1262_check_busy(handle);
2753 buf[0] = (br >> 16) & 0xFF;
2754 buf[1] = (br >> 8) & 0xFF;
2755 buf[2] = (br >> 0) & 0xFF;
2758 buf[5] = (fdev >> 16) & 0xFF;
2759 buf[6] = (fdev >> 8) & 0xFF;
2760 buf[7] = (fdev >> 0) & 0xFF;
2764 handle->
debug_print(
"sx1262: set gfsk modulation params failed.\n");
2794 *reg = (uint32_t)(32 * (32 * powf(10.f, 6.0f))) / br;
2821 *br = (uint32_t)(32 * 32 * powf(10.f, 6.0f) / reg);
2848 *reg = (uint32_t)(powf(2.0f, 25.0f) * freq / (32 * powf(10.f, 6.0f)));
2875 *freq = (uint32_t)(32 * powf(10.f, 6.0f) / powf(2.0f, 25.0f) * reg);
2910 res = a_sx1262_check_busy(handle);
2921 buf[3] = low_data_rate_optimize_enable;
2925 handle->
debug_print(
"sx1262: set lora modulation params failed.\n");
2970 if (sync_word_length > 0x40)
2972 handle->
debug_print(
"sx1262: sync word length is over 0x40.\n");
2977 res = a_sx1262_check_busy(handle);
2985 buf[0] = (preamble_length >> 8) & 0xFF;
2986 buf[1] = (preamble_length >> 0) & 0xFF;
2987 buf[2] = detector_length;
2988 buf[3] = sync_word_length;
2990 buf[5] = packet_type;
2991 buf[6] = payload_length;
2993 buf[8] = whitening_enable;
2997 handle->
debug_print(
"sx1262: set gfsk modulation params failed.\n");
3037 res = a_sx1262_check_busy(handle);
3045 buf[0] = (preamble_length >> 8) & 0xFF;
3046 buf[1] = (preamble_length >> 0) & 0xFF;
3047 buf[2] = header_type;
3048 buf[3] = payload_length;
3050 buf[5] = invert_iq_enable;
3054 handle->
debug_print(
"sx1262: set lora modulation params failed.\n");
3094 res = a_sx1262_check_busy(handle);
3103 buf[1] = cad_det_peak;
3104 buf[2] = cad_det_min;
3106 buf[4] = (timeout >> 16) & 0xFF;
3107 buf[5] = (timeout >> 8) & 0xFF;
3108 buf[6] = (timeout >> 0) & 0xFF;
3112 handle->
debug_print(
"sx1262: set cad params failed.\n");
3147 res = a_sx1262_check_busy(handle);
3155 buf[0] = tx_base_addr;
3156 buf[1] = rx_base_addr;
3160 handle->
debug_print(
"sx1262: set buffer base address failed.\n");
3194 res = a_sx1262_check_busy(handle);
3206 handle->
debug_print(
"sx1262: set lora symb num timeout failed.\n");
3240 res = a_sx1262_check_busy(handle);
3248 memset(buf, 0,
sizeof(uint8_t) * 1);
3252 handle->
debug_print(
"sx1262: get status failed.\n");
3288 res = a_sx1262_check_busy(handle);
3299 handle->
debug_print(
"sx1262: get rx buffer status failed.\n");
3303 *payload_length_rx = buf[1];
3304 *rx_start_buffer_pointer = buf[2];
3326 uint8_t *rssi_avg_raw,
float *rssi_sync,
float *rssi_avg)
3340 res = a_sx1262_check_busy(handle);
3351 handle->
debug_print(
"sx1262: get packet status failed.\n");
3356 *rssi_sync_raw = buf[2];
3357 *rssi_avg_raw = buf[3];
3358 *rssi_sync = -(float)(*rssi_sync_raw) / 2.0f;
3359 *rssi_avg = -(float)(*rssi_avg_raw) / 2.0f;
3382 uint8_t *signal_rssi_pkt_raw,
float *rssi_pkt,
float *snr_pkt,
float *signal_rssi_pkt)
3396 res = a_sx1262_check_busy(handle);
3407 handle->
debug_print(
"sx1262: get packet status failed.\n");
3411 *rssi_pkt_raw= buf[1];
3412 *snr_pkt_raw = (int8_t)buf[2];
3413 *signal_rssi_pkt_raw = buf[3];
3414 *rssi_pkt = -(float)(*rssi_pkt_raw) / 2.0f;
3415 *snr_pkt = (float)(*snr_pkt_raw) / 4.0f;
3416 *signal_rssi_pkt = -(float)(*signal_rssi_pkt_raw) / 2.0f;
3448 res = a_sx1262_check_busy(handle);
3459 handle->
debug_print(
"sx1262: get instantaneous rssi failed.\n");
3463 *rssi_inst_raw = buf[1];
3464 *rssi_inst = -(float)(*rssi_inst_raw) / 2.0f;
3497 res = a_sx1262_check_busy(handle);
3508 handle->
debug_print(
"sx1262: get stats failed.\n");
3512 *pkt_received = (uint16_t)(((uint16_t)buf[1] << 8) | buf[2]);
3513 *pkt_crc_error = (uint16_t)(((uint16_t)buf[3] << 8) | buf[4]);
3514 *pkt_length_header_error = (uint16_t)(((uint16_t)buf[5] << 8) | buf[6]);
3547 res = a_sx1262_check_busy(handle);
3555 buf[0] = (pkt_received >> 8) & 0xFF;
3556 buf[1] = (pkt_received >> 0) & 0xFF;
3557 buf[2] = (pkt_crc_error >> 8) & 0xFF;
3558 buf[3] = (pkt_crc_error >> 0) & 0xFF;
3559 buf[4] = (pkt_length_header_error >> 8) & 0xFF;
3560 buf[5] = (pkt_length_header_error >> 0) & 0xFF;
3564 handle->
debug_print(
"sx1262: reset stats failed.\n");
3598 res = a_sx1262_check_busy(handle);
3609 handle->
debug_print(
"sx1262: get device errors failed.\n");
3613 *op_error = (uint16_t)(((uint16_t)buf[1] << 8) | buf[2]);
3643 res = a_sx1262_check_busy(handle);
3656 handle->
debug_print(
"sx1262: clear device errors failed.\n");
3690 res = a_sx1262_check_busy(handle);
3698 buf[0] = (value >> 8) & 0xFF;
3699 buf[1] = (value >> 0) & 0xFF;
3703 handle->
debug_print(
"sx1262: write register failed.\n");
3737 res = a_sx1262_check_busy(handle);
3748 handle->
debug_print(
"sx1262: read register failed.\n");
3752 *value = (uint16_t)((uint16_t)buf[0] << 8 | buf[1]);
3783 res = a_sx1262_check_busy(handle);
3791 buf[0] = (value >> 8) & 0xFF;
3792 buf[1] = (value >> 0) & 0xFF;
3796 handle->
debug_print(
"sx1262: write register failed.\n");
3830 res = a_sx1262_check_busy(handle);
3841 handle->
debug_print(
"sx1262: read register failed.\n");
3845 *value = (uint16_t)((uint16_t)buf[0] << 8 | buf[1]);
3876 res = a_sx1262_check_busy(handle);
3884 buf[0] = (value >> 8) & 0xFF;
3885 buf[1] = (value >> 0) & 0xFF;
3889 handle->
debug_print(
"sx1262: write register failed.\n");
3923 res = a_sx1262_check_busy(handle);
3934 handle->
debug_print(
"sx1262: read register failed.\n");
3938 *value = (uint16_t)((uint16_t)buf[0] << 8 | buf[1]);
3968 res = a_sx1262_check_busy(handle);
3979 handle->
debug_print(
"sx1262: write register failed.\n");
4012 res = a_sx1262_check_busy(handle);
4023 handle->
debug_print(
"sx1262: read register failed.\n");
4056 res = a_sx1262_check_busy(handle);
4067 handle->
debug_print(
"sx1262: write register failed.\n");
4100 res = a_sx1262_check_busy(handle);
4111 handle->
debug_print(
"sx1262: read register failed.\n");
4144 res = a_sx1262_check_busy(handle);
4155 handle->
debug_print(
"sx1262: write register failed.\n");
4188 res = a_sx1262_check_busy(handle);
4199 handle->
debug_print(
"sx1262: read register failed.\n");
4232 res = a_sx1262_check_busy(handle);
4243 handle->
debug_print(
"sx1262: write register failed.\n");
4276 res = a_sx1262_check_busy(handle);
4287 handle->
debug_print(
"sx1262: read register failed.\n");
4321 res = a_sx1262_check_busy(handle);
4329 buf[0] = (sync_word >> 8) & 0xFF;
4330 buf[1] = (sync_word >> 0) & 0xFF;
4334 handle->
debug_print(
"sx1262: write register failed.\n");
4368 res = a_sx1262_check_busy(handle);
4379 handle->
debug_print(
"sx1262: read register failed.\n");
4383 *sync_word = (uint16_t)((uint16_t)buf[0] << 8 | buf[1]);
4414 res = a_sx1262_check_busy(handle);
4425 handle->
debug_print(
"sx1262: read register failed.\n");
4429 *r = (uint32_t)((uint32_t)buf[0] << 24 | (uint32_t)buf[1] << 16 |
4430 (uint32_t)buf[2] << 8 | buf[3]);
4460 res = a_sx1262_check_busy(handle);
4471 handle->
debug_print(
"sx1262: write register failed.\n");
4504 res = a_sx1262_check_busy(handle);
4515 handle->
debug_print(
"sx1262: read register failed.\n");
4548 res = a_sx1262_check_busy(handle);
4559 handle->
debug_print(
"sx1262: write register failed.\n");
4592 res = a_sx1262_check_busy(handle);
4603 handle->
debug_print(
"sx1262: read register failed.\n");
4636 res = a_sx1262_check_busy(handle);
4647 handle->
debug_print(
"sx1262: write register failed.\n");
4680 res = a_sx1262_check_busy(handle);
4691 handle->
debug_print(
"sx1262: read register failed.\n");
4724 res = a_sx1262_check_busy(handle);
4735 handle->
debug_print(
"sx1262: write register failed.\n");
4768 res = a_sx1262_check_busy(handle);
4779 handle->
debug_print(
"sx1262: read register failed.\n");
4812 res = a_sx1262_check_busy(handle);
4823 handle->
debug_print(
"sx1262: write register failed.\n");
4856 res = a_sx1262_check_busy(handle);
4867 handle->
debug_print(
"sx1262: read register failed.\n");
4900 res = a_sx1262_check_busy(handle);
4911 handle->
debug_print(
"sx1262: write register failed.\n");
4944 res = a_sx1262_check_busy(handle);
4955 handle->
debug_print(
"sx1262: read register failed.\n");
4988 res = a_sx1262_check_busy(handle);
4999 handle->
debug_print(
"sx1262: write register failed.\n");
5032 res = a_sx1262_check_busy(handle);
5043 handle->
debug_print(
"sx1262: read register failed.\n");
5076 res = a_sx1262_check_busy(handle);
5087 handle->
debug_print(
"sx1262: write register failed.\n");
5120 res = a_sx1262_check_busy(handle);
5131 handle->
debug_print(
"sx1262: read register failed.\n");
5164 res = a_sx1262_check_busy(handle);
5175 handle->
debug_print(
"sx1262: write register failed.\n");
5208 res = a_sx1262_check_busy(handle);
5219 handle->
debug_print(
"sx1262: read register failed.\n");
5252 res = a_sx1262_check_busy(handle);
5263 handle->
debug_print(
"sx1262: write register failed.\n");
5296 res = a_sx1262_check_busy(handle);
5307 handle->
debug_print(
"sx1262: read register failed.\n");
5340 res = a_sx1262_check_busy(handle);
5351 handle->
debug_print(
"sx1262: write register failed.\n");
5384 res = a_sx1262_check_busy(handle);
5395 handle->
debug_print(
"sx1262: read register failed.\n");
5428 res = a_sx1262_check_busy(handle);
5439 handle->
debug_print(
"sx1262: write register failed.\n");
5472 res = a_sx1262_check_busy(handle);
5483 handle->
debug_print(
"sx1262: read register failed.\n");
5516 res = a_sx1262_check_busy(handle);
5527 handle->
debug_print(
"sx1262: write register failed.\n");
5560 res = a_sx1262_check_busy(handle);
5571 handle->
debug_print(
"sx1262: read register failed.\n");
5604 res = a_sx1262_check_busy(handle);
5615 handle->
debug_print(
"sx1262: write register failed.\n");
5648 res = a_sx1262_check_busy(handle);
5659 handle->
debug_print(
"sx1262: read register failed.\n");
5692 res = a_sx1262_check_busy(handle);
5703 handle->
debug_print(
"sx1262: write register failed.\n");
5736 res = a_sx1262_check_busy(handle);
5747 handle->
debug_print(
"sx1262: read register failed.\n");
5780 res = a_sx1262_check_busy(handle);
5791 handle->
debug_print(
"sx1262: write register failed.\n");
5824 res = a_sx1262_check_busy(handle);
5835 handle->
debug_print(
"sx1262: read register failed.\n");
5869 res = a_sx1262_check_busy(handle);
5877 buf[0] = (num >> 8) & 0xFF;
5878 buf[1] = (num >> 0) & 0xFF;
5882 handle->
debug_print(
"sx1262: write register failed.\n");
5916 res = a_sx1262_check_busy(handle);
5927 handle->
debug_print(
"sx1262: read register failed.\n");
5931 *num = (uint16_t)(buf[0]) << 8 | buf[1];
5962 res = a_sx1262_check_busy(handle);
5970 buf[0] = (freq >> 24) & 0xFF;
5971 buf[1] = (freq >> 16) & 0xFF;
5972 buf[2] = (freq >> 8) & 0xFF;
5973 buf[3] = (freq >> 0) & 0xFF;
5977 handle->
debug_print(
"sx1262: write register failed.\n");
6011 res = a_sx1262_check_busy(handle);
6022 handle->
debug_print(
"sx1262: read register failed.\n");
6026 *freq = (uint32_t)(buf[0]) << 24 | (uint32_t)(buf[1]) << 16 |
6027 (uint32_t)(buf[2]) << 8 | (uint32_t)(buf[3]) << 0;
6058 res = a_sx1262_check_busy(handle);
6066 buf[0] = (num >> 8) & 0xFF;
6067 buf[1] = (num >> 0) & 0xFF;
6071 handle->
debug_print(
"sx1262: write register failed.\n");
6105 res = a_sx1262_check_busy(handle);
6116 handle->
debug_print(
"sx1262: read register failed.\n");
6120 *num = (uint16_t)(buf[0]) << 8 | buf[1];
6151 res = a_sx1262_check_busy(handle);
6159 buf[0] = (freq >> 24) & 0xFF;
6160 buf[1] = (freq >> 16) & 0xFF;
6161 buf[2] = (freq >> 8) & 0xFF;
6162 buf[3] = (freq >> 0) & 0xFF;
6166 handle->
debug_print(
"sx1262: write register failed.\n");
6200 res = a_sx1262_check_busy(handle);
6211 handle->
debug_print(
"sx1262: read register failed.\n");
6215 *freq = (uint32_t)(buf[0]) << 24 | (uint32_t)(buf[1]) << 16 |
6216 (uint32_t)(buf[2]) << 8 | (uint32_t)(buf[3]) << 0;
6236 uint8_t *out_buf, uint32_t out_len)
6248 if (handle->
spi_write_read(in_buf, in_len, out_buf, out_len) != 0)
#define SX1262_REG_DIOX_PULL_UP_CONTROL
#define SX1262_COMMAND_SET_FS
#define SX1262_COMMAND_SET_CAD_PARAMS
#define SX1262_COMMAND_SET_CAD
#define SX1262_REG_CRC_POLYNOMIAL_VALUE_MSB
#define SX1262_COMMAND_WRITE_REGISTER
#define SX1262_REG_FREQ_0
#define SX1262_COMMAND_SET_BUFFER_BASE_ADDRESS
#define SX1262_REG_TX_MODULATION
#define SX1262_COMMAND_SET_STANDBY
#define SX1262_COMMAND_WRITE_BUFFER
#define SX1262_COMMAND_RESET_STATS
#define SX1262_COMMAND_SET_TX_INFINITE_PREAMBLE
#define SX1262_REG_NB_SYMBOLS_0
#define SX1262_REG_WHITENING_INIT_VALUE_MSB
#define SX1262_COMMAND_SET_PACKET_PARAMS
#define SX1262_REG_LORA_SYNC_WORD_MSB
#define SX1262_REG_NODE_ADDRESS
#define SX1262_REG_NB_HOPPING_BLOCKS
#define SX1262_COMMAND_SET_DIO_IRQ_PARAMS
#define SX1262_COMMAND_GET_STATS
#define SX1262_COMMAND_SET_TX
#define SX1262_REG_CRC_INIT_VALUE_MSB
#define SX1262_COMMAND_STOP_TIMER_ON_PREAMBLE
#define SX1262_COMMAND_SET_TX_PARAMS
#define SUPPLY_VOLTAGE_MAX
#define SX1262_REG_DIO3_OUTPUT_CONTROL
#define SX1262_COMMAND_GET_STATUS
#define SX1262_REG_SYNC_WORD_0
#define SX1262_REG_HOPPING_ENABLE
chip register definition
#define SX1262_REG_RX_GAIN
#define SX1262_COMMAND_SET_MODULATION_PARAMS
#define SX1262_COMMAND_SET_RX_DUTY_CYCLE
#define SX1262_COMMAND_GET_PACKET_TYPE
#define SX1262_COMMAND_SET_CALIBRATE_IMAGE
#define SX1262_REG_IQ_POLARITY_SETUP
#define SX1262_REG_DIOX_INPUT_ENABLE
#define SX1262_REG_XTB_TRIM
#define SX1262_COMMAND_SET_RF_FREQUENCY
#define SX1262_COMMAND_SET_LORA_SYMB_NUM_TIMEOUT
#define SX1262_COMMAND_GET_DEVICE_ERRORS
#define SX1262_REG_PACKET_LENGTH
#define SX1262_COMMAND_GET_RSSI_LNST
#define SX1262_COMMAND_CLEAR_DEVICE_ERRORS
#define SX1262_REG_DIOX_PULL_DOWN_CONTROL
#define SX1262_REG_TX_CLAMP_CONFIG
#define SX1262_REG_FREQ_15
#define SX1262_COMMAND_SET_CALIBRATE
#define SX1262_REG_OCP_CONFIGURATION
#define SX1262_COMMAND_SET_RX
#define MANUFACTURER_NAME
#define SX1262_REG_EVENT_MASK
#define SUPPLY_VOLTAGE_MIN
#define SX1262_REG_XTA_TRIM
#define SX1262_COMMAND_READ_REGISTER
#define SX1262_REG_RANDOM_NUMBER_GEN_0
#define SX1262_COMMAND_READ_BUFFER
#define SX1262_COMMAND_GET_IRQ_STATUS
#define SX1262_COMMAND_CLEAR_IRQ_STATUS
#define SX1262_REG_NB_SYMBOLS_15
#define SX1262_COMMAND_SET_REGULATOR_MODE
#define SX1262_COMMAND_SET_TX_CONTINUOUS_WAVE
#define SX1262_COMMAND_SET_DIO3_AS_TCXO_CTRL
#define CHIP_NAME
chip information definition
#define SX1262_COMMAND_GET_PACKET_STATUS
#define SX1262_COMMAND_SET_PACKET_TYPE
#define SX1262_COMMAND_SET_PA_CONFIG
#define SX1262_REG_BROADCAST_ADDRESS
#define SX1262_COMMAND_SET_SLEEP
chip command definition
#define SX1262_REG_DIOX_OUTPUT_ENABLE
#define SX1262_COMMAND_SET_DIO2_AS_RF_SWITCH_CTRL
#define SX1262_REG_RTC_CONTROL
#define SX1262_COMMAND_SET_RX_TX_FALLBACK_MODE
#define SX1262_COMMAND_GET_RX_BUFFER_STATUS
driver sx1262 header file
sx1262_lora_bandwidth_t
sx1262 lora bandwidth enumeration definition
sx1262_gfsk_packet_type_t
sx1262 gfsk packet type enumeration definition
uint8_t sx1262_set_lora_modulation_params(sx1262_handle_t *handle, sx1262_lora_sf_t sf, sx1262_lora_bandwidth_t bw, sx1262_lora_cr_t cr, sx1262_bool_t low_data_rate_optimize_enable)
set the modulation params in LoRa mode
sx1262_bool_t
sx1262 bool enumeration definition
uint8_t sx1262_set_tx_continuous_wave(sx1262_handle_t *handle)
enter to the tx continuous wave mode
uint8_t sx1262_gfsk_frequency_deviation_convert_to_register(sx1262_handle_t *handle, uint32_t freq, uint32_t *reg)
convert the frequency deviation to the register raw data
uint8_t sx1262_set_buffer_base_address(sx1262_handle_t *handle, uint8_t tx_base_addr, uint8_t rx_base_addr)
set the buffer base address
uint8_t sx1262_get_gfsk_packet_status(sx1262_handle_t *handle, uint8_t *rx_status, uint8_t *rssi_sync_raw, uint8_t *rssi_avg_raw, float *rssi_sync, float *rssi_avg)
get the packet status in GFSK mode
uint8_t sx1262_clear_irq_status(sx1262_handle_t *handle, uint16_t clear_irq_param)
clear the irq status
sx1262_tcxo_voltage_t
sx1262 tcxo voltage enumeration definition
sx1262_lora_cad_exit_mode_t
sx1262 lora cad exit mode enumeration definition
sx1262_gfsk_bandwidth_t
sx1262 gfsk bandwidth enumeration definition
uint8_t sx1262_set_calibration_image(sx1262_handle_t *handle, uint8_t freq1, uint8_t freq2)
set the calibration image frequency
uint8_t sx1262_set_gfsk_packet_params(sx1262_handle_t *handle, uint16_t preamble_length, sx1262_gfsk_preamble_detector_length_t detector_length, uint8_t sync_word_length, sx1262_gfsk_addr_filter_t filter, sx1262_gfsk_packet_type_t packet_type, uint8_t payload_length, sx1262_gfsk_crc_type_t crc_type, sx1262_bool_t whitening_enable)
set the packet params in GFSK mode
uint8_t sx1262_set_rx_tx_fallback_mode(sx1262_handle_t *handle, sx1262_rx_tx_fallback_mode_t mode)
set the rx tx fallback mode
uint8_t sx1262_gfsk_bit_rate_convert_to_data(sx1262_handle_t *handle, uint32_t reg, uint32_t *br)
convert the register raw data to the bit rate
uint8_t sx1262_set_tx(sx1262_handle_t *handle, uint32_t timeout)
enter to the tx mode
uint8_t sx1262_set_rx(sx1262_handle_t *handle, uint32_t timeout)
enter to the rx mode
uint8_t sx1262_reset_stats(sx1262_handle_t *handle, uint16_t pkt_received, uint16_t pkt_crc_error, uint16_t pkt_length_header_error)
reset the stats
sx1262_lora_sf_t
sx1262 lora spreading factor enumeration definition
uint8_t sx1262_set_sleep(sx1262_handle_t *handle, sx1262_start_mode_t mode, sx1262_bool_t rtc_wake_up_enable)
enter to the sleep mode
uint8_t sx1262_lora_transmit(sx1262_handle_t *handle, sx1262_clock_source_t standby_src, uint16_t preamble_length, sx1262_lora_header_t header_type, sx1262_lora_crc_type_t crc_type, sx1262_bool_t invert_iq_enable, uint8_t *buf, uint16_t len, uint32_t us)
send the lora data
uint8_t sx1262_read_buffer(sx1262_handle_t *handle, uint8_t offset, uint8_t *buf, uint16_t len)
read the buffer
struct sx1262_info_s sx1262_info_t
sx1262 information structure definition
struct sx1262_handle_s sx1262_handle_t
sx1262 handle structure definition
uint8_t sx1262_set_standby(sx1262_handle_t *handle, sx1262_clock_source_t src)
enter to the standby mode
uint8_t sx1262_set_tx_params(sx1262_handle_t *handle, int8_t dbm, sx1262_ramp_time_t t)
set the tx params
uint8_t sx1262_timeout_convert_to_data(sx1262_handle_t *handle, uint32_t reg, double *us)
convert the register raw data to the timeout
uint8_t sx1262_write_buffer(sx1262_handle_t *handle, uint8_t offset, uint8_t *buf, uint16_t len)
write the buffer
sx1262_ramp_time_t
sx1262 ramp time enumeration definition
uint8_t sx1262_get_rx_buffer_status(sx1262_handle_t *handle, uint8_t *payload_length_rx, uint8_t *rx_start_buffer_pointer)
get the rx buffer status
sx1262_rx_tx_fallback_mode_t
sx1262 rx tx fallback mode enumeration definition
uint8_t sx1262_get_irq_status(sx1262_handle_t *handle, uint16_t *status)
get the irq status
uint8_t sx1262_set_dio2_as_rf_switch_ctrl(sx1262_handle_t *handle, sx1262_bool_t enable)
set dio2 as rf switch ctrl
uint8_t sx1262_set_regulator_mode(sx1262_handle_t *handle, sx1262_regulator_mode_t mode)
set the regulator_mode
uint8_t sx1262_set_lora_packet_params(sx1262_handle_t *handle, uint16_t preamble_length, sx1262_lora_header_t header_type, uint8_t payload_length, sx1262_lora_crc_type_t crc_type, sx1262_bool_t invert_iq_enable)
set the packet params in LoRa mode
uint8_t sx1262_frequency_convert_to_data(sx1262_handle_t *handle, uint32_t reg, uint32_t *freq)
convert the register raw data to the frequency
sx1262_gfsk_pulse_shape_t
sx1262 gfsk pulse shape enumeration definition
sx1262_start_mode_t
sx1262 start mode enumeration definition
uint8_t sx1262_set_lora_symb_num_timeout(sx1262_handle_t *handle, uint8_t symb_num)
set the lora symbol number timeout
uint8_t sx1262_read_register(sx1262_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
read the register
sx1262_packet_type_t
sx1262 packet type enumeration definition
uint8_t sx1262_gfsk_bit_rate_convert_to_register(sx1262_handle_t *handle, uint32_t br, uint32_t *reg)
convert the bit rate to the register raw data
uint8_t sx1262_irq_handler(sx1262_handle_t *handle)
irq handler
sx1262_lora_crc_type_t
sx1262 lora crc type enumeration definition
uint8_t sx1262_continuous_receive(sx1262_handle_t *handle)
enter to the continuous receive mode
uint8_t sx1262_gfsk_frequency_deviation_convert_to_data(sx1262_handle_t *handle, uint32_t reg, uint32_t *freq)
convert the register raw data to the frequency deviation
uint8_t sx1262_set_rx_duty_cycle(sx1262_handle_t *handle, uint32_t rx_period, uint32_t sleep_period)
set the rx duty cycle
uint8_t sx1262_set_pa_config(sx1262_handle_t *handle, uint8_t pa_duty_cycle, uint8_t hp_max)
set the pa config
uint8_t sx1262_single_receive(sx1262_handle_t *handle, double us)
enter to the single receive mode
uint8_t sx1262_set_gfsk_modulation_params(sx1262_handle_t *handle, uint32_t br, sx1262_gfsk_pulse_shape_t shape, sx1262_gfsk_bandwidth_t bw, uint32_t fdev)
set the modulation params in GFSK mode
sx1262_gfsk_addr_filter_t
sx1262 gfsk addr filter enumeration definition
sx1262_gfsk_preamble_detector_length_t
sx1262 gfsk preamble detector length enumeration definition
uint8_t sx1262_set_tx_infinite_preamble(sx1262_handle_t *handle)
enter to the tx infinite preamble mode
uint8_t sx1262_set_rf_frequency(sx1262_handle_t *handle, uint32_t reg)
set the rf frequency
uint8_t sx1262_set_packet_type(sx1262_handle_t *handle, sx1262_packet_type_t type)
set the packet type
uint8_t sx1262_set_dio3_as_tcxo_ctrl(sx1262_handle_t *handle, sx1262_tcxo_voltage_t voltage, uint32_t delay)
set dio3 as tcxo ctrl
uint8_t sx1262_set_cad(sx1262_handle_t *handle)
run the cad
sx1262_lora_header_t
sx1262 lora header enumeration definition
uint8_t sx1262_set_frequency_synthesis(sx1262_handle_t *handle)
enter to the frequency synthesis mode
uint8_t sx1262_get_status(sx1262_handle_t *handle, uint8_t *status)
get the status
uint8_t sx1262_get_lora_packet_status(sx1262_handle_t *handle, uint8_t *rssi_pkt_raw, int8_t *snr_pkt_raw, uint8_t *signal_rssi_pkt_raw, float *rssi_pkt, float *snr_pkt, float *signal_rssi_pkt)
get the packet status in LoRa mode
uint8_t sx1262_timeout_convert_to_register(sx1262_handle_t *handle, double us, uint32_t *reg)
convert the timeout to the register raw data
uint8_t sx1262_set_calibration(sx1262_handle_t *handle, uint8_t settings)
set the calibration settings
uint8_t sx1262_get_packet_type(sx1262_handle_t *handle, sx1262_packet_type_t *type)
get the packet type
uint8_t sx1262_write_register(sx1262_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
write the register
uint8_t sx1262_set_stop_timer_on_preamble(sx1262_handle_t *handle, sx1262_bool_t enable)
stop timer on preamble
uint8_t sx1262_get_instantaneous_rssi(sx1262_handle_t *handle, uint8_t *rssi_inst_raw, float *rssi_inst)
get the instantaneous rssi
uint8_t sx1262_deinit(sx1262_handle_t *handle)
close the chip
uint8_t sx1262_set_dio_irq_params(sx1262_handle_t *handle, uint16_t irq_mask, uint16_t dio1_mask, uint16_t dio2_mask, uint16_t dio3_mask)
set the dio irq params
sx1262_lora_cad_symbol_num_t
sx1262 lora cad symbol num enumeration definition
uint8_t sx1262_frequency_convert_to_register(sx1262_handle_t *handle, uint32_t freq, uint32_t *reg)
convert the frequency to the register raw data
sx1262_gfsk_crc_type_t
sx1262 gfsk crc type enumeration definition
uint8_t sx1262_get_device_errors(sx1262_handle_t *handle, uint16_t *op_error)
get the device errors
uint8_t sx1262_set_cad_params(sx1262_handle_t *handle, sx1262_lora_cad_symbol_num_t num, uint8_t cad_det_peak, uint8_t cad_det_min, sx1262_lora_cad_exit_mode_t mode, uint32_t timeout)
set the cad params
uint8_t sx1262_check_packet_error(sx1262_handle_t *handle, sx1262_bool_t *enable)
check the packet error
sx1262_clock_source_t
sx1262 clock source enumeration definition
uint8_t sx1262_get_stats(sx1262_handle_t *handle, uint16_t *pkt_received, uint16_t *pkt_crc_error, uint16_t *pkt_length_header_error)
get the stats
uint8_t sx1262_clear_device_errors(sx1262_handle_t *handle)
clear the device errors
sx1262_regulator_mode_t
sx1262 regulator mode enumeration definition
uint8_t sx1262_init(sx1262_handle_t *handle)
initialize the chip
uint8_t sx1262_lora_cad(sx1262_handle_t *handle, sx1262_bool_t *enable)
run the cad
uint8_t sx1262_info(sx1262_info_t *info)
get chip's information
sx1262_lora_cr_t
sx1262 lora coding rate enumeration definition
@ SX1262_IRQ_PREAMBLE_DETECTED
@ SX1262_IRQ_CAD_DETECTED
@ SX1262_IRQ_SYNC_WORD_VALID
@ SX1262_IRQ_HEADER_VALID
uint8_t sx1262_write_read_reg(sx1262_handle_t *handle, uint8_t *in_buf, uint32_t in_len, uint8_t *out_buf, uint32_t out_len)
write and read register
uint8_t sx1262_get_fhss_freq0(sx1262_handle_t *handle, uint32_t *freq)
get fhss freq0
uint8_t sx1262_set_dio_input_enable(sx1262_handle_t *handle, uint8_t enable)
set the dio input enable
uint8_t sx1262_set_tx_clamp_config(sx1262_handle_t *handle, uint8_t config)
set the tx clamp config
uint8_t sx1262_set_dio3_output_control(sx1262_handle_t *handle, uint8_t control)
set the dio3 output
uint8_t sx1262_set_lora_sync_word(sx1262_handle_t *handle, uint16_t sync_word)
set the lora sync word
uint8_t sx1262_set_pull_up_control(sx1262_handle_t *handle, uint8_t control)
set the pull up control
uint8_t sx1262_get_fhss_symbols_freq0(sx1262_handle_t *handle, uint16_t *num)
get fhss freq0 symbols
uint8_t sx1262_set_pull_down_control(sx1262_handle_t *handle, uint8_t control)
set the pull down control
uint8_t sx1262_get_iq_polarity(sx1262_handle_t *handle, uint8_t *setup)
get the iq polarity
uint8_t sx1262_set_iq_polarity(sx1262_handle_t *handle, uint8_t setup)
set the iq polarity
uint8_t sx1262_set_xta_trim(sx1262_handle_t *handle, uint8_t trim)
set the xta trim
uint8_t sx1262_get_fhss_nb_hopping_blocks(sx1262_handle_t *handle, uint8_t *n)
get fhss nb hopping blocks
uint8_t sx1262_set_rx_gain(sx1262_handle_t *handle, uint8_t gain)
set the rx gain
uint8_t sx1262_set_fsk_node_address(sx1262_handle_t *handle, uint8_t addr)
set the node address in FSK mode
uint8_t sx1262_get_lora_sync_word(sx1262_handle_t *handle, uint16_t *sync_word)
get the lora sync word
uint8_t sx1262_get_fsk_sync_word(sx1262_handle_t *handle, uint8_t sync_word[8])
get the sync word in FSK mode
uint8_t sx1262_get_fhss_packet_length(sx1262_handle_t *handle, uint8_t *len)
get fhss packet length
uint8_t sx1262_get_dio_output_enable(sx1262_handle_t *handle, uint8_t *enable)
get the dio output enable
uint8_t sx1262_set_rtc_control(sx1262_handle_t *handle, uint8_t control)
set the rtc control
uint8_t sx1262_set_ocp(sx1262_handle_t *handle, uint8_t ocp)
set the ocp
uint8_t sx1262_set_tx_modulation(sx1262_handle_t *handle, uint8_t modulation)
set the tx modulation
uint8_t sx1262_get_fhss_symbols_freq15(sx1262_handle_t *handle, uint16_t *num)
get fhss freq15 symbols
uint8_t sx1262_get_random_number(sx1262_handle_t *handle, uint32_t *r)
get the random number
uint8_t sx1262_set_fsk_crc_initical_value(sx1262_handle_t *handle, uint16_t value)
set the crc initial value in FSK mode
uint8_t sx1262_set_fsk_whitening_initial_value(sx1262_handle_t *handle, uint16_t value)
set the whitening initial value in FSK mode
uint8_t sx1262_get_rx_gain(sx1262_handle_t *handle, uint8_t *gain)
get the rx gain
uint8_t sx1262_set_fhss_nb_hopping_blocks(sx1262_handle_t *handle, uint8_t n)
set fhss nb hopping blocks
uint8_t sx1262_set_fhss_packet_length(sx1262_handle_t *handle, uint8_t len)
set fhss packet length
uint8_t sx1262_get_fsk_node_address(sx1262_handle_t *handle, uint8_t *addr)
get the node address in FSK mode
uint8_t sx1262_get_tx_clamp_config(sx1262_handle_t *handle, uint8_t *config)
get the tx clamp config
uint8_t sx1262_get_event_mask(sx1262_handle_t *handle, uint8_t *mask)
get the event mask
uint8_t sx1262_set_fhss_freq15(sx1262_handle_t *handle, uint32_t freq)
set fhss freq15
uint8_t sx1262_get_fsk_crc_polynomial_value(sx1262_handle_t *handle, uint16_t *value)
get the crc polynomial value in FSK mode
uint8_t sx1262_get_xta_trim(sx1262_handle_t *handle, uint8_t *trim)
get the xta trim
uint8_t sx1262_set_fhss_symbols_freq15(sx1262_handle_t *handle, uint16_t num)
set fhss freq15 symbols
uint8_t sx1262_get_dio_input_enable(sx1262_handle_t *handle, uint8_t *enable)
get the dio input enable
uint8_t sx1262_get_rtc_control(sx1262_handle_t *handle, uint8_t *control)
get the rtc control
uint8_t sx1262_get_tx_modulation(sx1262_handle_t *handle, uint8_t *modulation)
get the tx modulation
uint8_t sx1262_get_fhss_hopping_enable(sx1262_handle_t *handle, uint8_t *enable)
get fhss hopping enable
uint8_t sx1262_get_fsk_crc_initical_value(sx1262_handle_t *handle, uint16_t *value)
get the crc initical value in FSK mode
uint8_t sx1262_get_pull_down_control(sx1262_handle_t *handle, uint8_t *control)
get the pull down control
uint8_t sx1262_get_dio3_output_control(sx1262_handle_t *handle, uint8_t *control)
get the dio3 output
uint8_t sx1262_get_fsk_broadcast_address(sx1262_handle_t *handle, uint8_t *addr)
get the broadcast address in FSK mode
uint8_t sx1262_set_event_mask(sx1262_handle_t *handle, uint8_t mask)
set the event mask
uint8_t sx1262_get_pull_up_control(sx1262_handle_t *handle, uint8_t *control)
get the pull up control
uint8_t sx1262_get_fsk_whitening_initial_value(sx1262_handle_t *handle, uint16_t *value)
get the whitening initial value in FSK mode
uint8_t sx1262_set_fhss_symbols_freq0(sx1262_handle_t *handle, uint16_t num)
set fhss freq0 symbols
uint8_t sx1262_set_dio_output_enable(sx1262_handle_t *handle, uint8_t enable)
set the dio output enable
uint8_t sx1262_get_xtb_trim(sx1262_handle_t *handle, uint8_t *trim)
get the xtb trim
uint8_t sx1262_set_fsk_broadcast_address(sx1262_handle_t *handle, uint8_t addr)
set the broadcast address in FSK mode
uint8_t sx1262_set_fsk_sync_word(sx1262_handle_t *handle, uint8_t sync_word[8])
set the sync word in FSK mode
uint8_t sx1262_set_fhss_freq0(sx1262_handle_t *handle, uint32_t freq)
set fhss freq0
uint8_t sx1262_get_ocp(sx1262_handle_t *handle, uint8_t *ocp)
get the ocp
uint8_t sx1262_set_xtb_trim(sx1262_handle_t *handle, uint8_t trim)
set the xtb trim
uint8_t sx1262_set_fhss_hopping_enable(sx1262_handle_t *handle, uint8_t enable)
set fhss hopping enable
uint8_t sx1262_get_fhss_freq15(sx1262_handle_t *handle, uint32_t *freq)
get fhss freq15
uint8_t sx1262_set_fsk_crc_polynomial_value(sx1262_handle_t *handle, uint16_t value)
set the crc polynomial value in FSK mode
uint8_t(* spi_write_read)(uint8_t *in_buf, uint32_t in_len, uint8_t *out_buf, uint32_t out_len)
uint8_t(* spi_init)(void)
void(* delay_ms)(uint32_t ms)
uint8_t(* busy_gpio_init)(void)
void(* receive_callback)(uint16_t type, uint8_t *buf, uint16_t len)
uint8_t(* reset_gpio_deinit)(void)
void(* debug_print)(const char *const fmt,...)
uint8_t(* busy_gpio_deinit)(void)
uint8_t(* spi_deinit)(void)
uint8_t(* reset_gpio_init)(void)
uint8_t(* busy_gpio_read)(uint8_t *value)
uint8_t(* reset_gpio_write)(uint8_t value)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v