Merge remote-tracking branch 'upstream/dev'
This commit is contained in:
		
						commit
						51139d98fa
					
				| @ -29,10 +29,12 @@ | |||||||
| #elif MCU_VARIANT == MCU_NRF52 | #elif MCU_VARIANT == MCU_NRF52 | ||||||
|   #include <bluefruit.h> |   #include <bluefruit.h> | ||||||
|   #include <math.h> |   #include <math.h> | ||||||
|   BLEUart SerialBT; |   #define BLE_MTU 512+3 | ||||||
|  |   BLEUart SerialBT(BLE_MTU); | ||||||
|   BLEDis  bledis; |   BLEDis  bledis; | ||||||
|   BLEBas  blebas; |   BLEBas  blebas; | ||||||
|   bool SerialBT_init = false; |   bool SerialBT_init = false; | ||||||
|  |   extern void led_indicate_info(int); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define BT_PAIRING_TIMEOUT 35000 | #define BT_PAIRING_TIMEOUT 35000 | ||||||
| @ -442,7 +444,7 @@ char bt_devname[11]; | |||||||
|     cable_state = CABLE_STATE_DISCONNECTED; |     cable_state = CABLE_STATE_DISCONNECTED; | ||||||
|     BLEConnection* conn = Bluefruit.Connection(conn_handle); |     BLEConnection* conn = Bluefruit.Connection(conn_handle); | ||||||
|     conn->requestPHY(BLE_GAP_PHY_2MBPS); |     conn->requestPHY(BLE_GAP_PHY_2MBPS); | ||||||
|     conn->requestMtuExchange(512+3); |     conn->requestMtuExchange(BLE_MTU); | ||||||
|     conn->requestDataLengthUpdate(); |     conn->requestDataLengthUpdate(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -509,10 +511,9 @@ void bt_disconnect_callback(uint16_t conn_handle, uint8_t reason) { | |||||||
|       // start device information service
 |       // start device information service
 | ||||||
|       bledis.begin(); |       bledis.begin(); | ||||||
| 
 | 
 | ||||||
|  |       // Guard to ensure SerialBT service is not duplicated through BT being power cycled
 | ||||||
|       if (!SerialBT_init) { |       if (!SerialBT_init) { | ||||||
| 
 |  | ||||||
|           SerialBT.bufferTXD(true); // enable buffering
 |           SerialBT.bufferTXD(true); // enable buffering
 | ||||||
| 
 |  | ||||||
|           SerialBT.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); // enable encryption for BLE serial
 |           SerialBT.setPermission(SECMODE_ENC_WITH_MITM, SECMODE_ENC_WITH_MITM); // enable encryption for BLE serial
 | ||||||
|           SerialBT.begin(); |           SerialBT.begin(); | ||||||
|           SerialBT_init = true; |           SerialBT_init = true; | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								Boards.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Boards.h
									
									
									
									
									
								
							| @ -82,7 +82,7 @@ | |||||||
|   #define MODEL_A1 0xA1            // T3S3 SX1262 868/915 MHz
 |   #define MODEL_A1 0xA1            // T3S3 SX1262 868/915 MHz
 | ||||||
|   #define MODEL_AB 0xAB            // T3S3 SX1276 868/915 MHz
 |   #define MODEL_AB 0xAB            // T3S3 SX1276 868/915 MHz
 | ||||||
|   #define MODEL_A5 0xA5            // T3S3 SX1278 433 MHz
 |   #define MODEL_A5 0xA5            // T3S3 SX1278 433 MHz
 | ||||||
|   #define MODEL_AB 0xAB            // T3S3 SX1280 2.4 GHz w/ PA
 |   #define MODEL_AC 0xAC            // T3S3 SX1280 2.4 GHz w/ PA
 | ||||||
| 
 | 
 | ||||||
|   #define PRODUCT_TECHO 0x15       // LilyGO T-Echo devices
 |   #define PRODUCT_TECHO 0x15       // LilyGO T-Echo devices
 | ||||||
|   #define BOARD_TECHO         0x43 |   #define BOARD_TECHO         0x43 | ||||||
| @ -727,7 +727,7 @@ | |||||||
|               -1  // pin_tcxo_enable
 |               -1  // pin_tcxo_enable
 | ||||||
|           } |           } | ||||||
|       }; |       }; | ||||||
|       #elif BOARD_VARIANT == MODEL_AB // SX1280 with PA 
 |       #elif BOARD_VARIANT == MODEL_AC // SX1280 with PA 
 | ||||||
|       const uint8_t interfaces[INTERFACE_COUNT] = {SX1280}; |       const uint8_t interfaces[INTERFACE_COUNT] = {SX1280}; | ||||||
|       const bool interface_cfg[INTERFACE_COUNT][3] = {  |       const bool interface_cfg[INTERFACE_COUNT][3] = {  | ||||||
|                     // SX1280
 |                     // SX1280
 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								Config.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Config.h
									
									
									
									
									
								
							| @ -90,7 +90,7 @@ | |||||||
| 	uint8_t last_rssi_raw   = 0x00; | 	uint8_t last_rssi_raw   = 0x00; | ||||||
| 	uint8_t last_snr_raw	= 0x80; | 	uint8_t last_snr_raw	= 0x80; | ||||||
| 	uint8_t seq[INTERFACE_COUNT]; | 	uint8_t seq[INTERFACE_COUNT]; | ||||||
| 	uint16_t read_len		= 0; | 	uint16_t read_len[INTERFACE_COUNT]; | ||||||
| 
 | 
 | ||||||
|     bool serial_in_frame = false; |     bool serial_in_frame = false; | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								Display.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Display.h
									
									
									
									
									
								
							| @ -94,7 +94,7 @@ void busyCallback(const void* p) { | |||||||
|   #define SCL_OLED 17 |   #define SCL_OLED 17 | ||||||
|   #define SDA_OLED 18 |   #define SDA_OLED 18 | ||||||
|   #endif |   #endif | ||||||
| #elif BOARD_MODEL == BOARD_OPENCOM_XL | #elif BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|   #if DISPLAY == OLED |   #if DISPLAY == OLED | ||||||
|   // RAK1921/SSD1306
 |   // RAK1921/SSD1306
 | ||||||
|   #define DISP_RST -1 |   #define DISP_RST -1 | ||||||
| @ -135,7 +135,7 @@ void busyCallback(const void* p) { | |||||||
| 
 | 
 | ||||||
| #include "Graphics.h" | #include "Graphics.h" | ||||||
| 
 | 
 | ||||||
| #if BOARD_MODEL == BOARD_OPENCOM_XL | #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|   #if DISPLAY == EINK_BW |   #if DISPLAY == EINK_BW | ||||||
|   GxEPD2_BW<DISPLAY_MODEL, DISPLAY_MODEL::HEIGHT> display(DISPLAY_MODEL(pin_disp_cs, pin_disp_dc, pin_disp_reset, pin_disp_busy)); |   GxEPD2_BW<DISPLAY_MODEL, DISPLAY_MODEL::HEIGHT> display(DISPLAY_MODEL(pin_disp_cs, pin_disp_dc, pin_disp_reset, pin_disp_busy)); | ||||||
|   float disp_target_fps = 0.2; |   float disp_target_fps = 0.2; | ||||||
| @ -316,7 +316,7 @@ bool display_init() { | |||||||
|       // waiting for the display to update, it will poll the serial buffer to
 |       // waiting for the display to update, it will poll the serial buffer to
 | ||||||
|       // check for any commands from the host.
 |       // check for any commands from the host.
 | ||||||
|       display.epd2.setBusyCallback(busyCallback); |       display.epd2.setBusyCallback(busyCallback); | ||||||
|     #elif BOARD_MODEL == BOARD_OPENCOM_XL |     #elif BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|       #if DISPLAY == OLED |       #if DISPLAY == OLED | ||||||
|       #elif DISPLAY == EINK_BW || DISPLAY == EINK_3C |       #elif DISPLAY == EINK_BW || DISPLAY == EINK_3C | ||||||
|       pinMode(pin_disp_en, INPUT_PULLUP); |       pinMode(pin_disp_en, INPUT_PULLUP); | ||||||
| @ -386,7 +386,7 @@ bool display_init() { | |||||||
|       #elif BOARD_MODEL == BOARD_HELTEC32_V2 |       #elif BOARD_MODEL == BOARD_HELTEC32_V2 | ||||||
|         disp_mode = DISP_MODE_PORTRAIT; |         disp_mode = DISP_MODE_PORTRAIT; | ||||||
|         display.setRotation(1); |         display.setRotation(1); | ||||||
|       #elif BOARD_MODEL == BOARD_OPENCOM_XL |       #elif BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|         #if DISPLAY == OLED |         #if DISPLAY == OLED | ||||||
|         #elif DISPLAY == EINK_BW || DISPLAY == EINK_3C |         #elif DISPLAY == EINK_BW || DISPLAY == EINK_3C | ||||||
|         disp_mode = DISP_MODE_PORTRAIT; |         disp_mode = DISP_MODE_PORTRAIT; | ||||||
| @ -397,7 +397,7 @@ bool display_init() { | |||||||
|       #elif BOARD_MODEL == BOARD_HELTEC32_V3 |       #elif BOARD_MODEL == BOARD_HELTEC32_V3 | ||||||
|         disp_mode = DISP_MODE_PORTRAIT; |         disp_mode = DISP_MODE_PORTRAIT; | ||||||
|         display.setRotation(1); |         display.setRotation(1); | ||||||
|       #elif BOARD_MODEL == BOARD_RAK4631 |       #elif BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|         disp_mode = DISP_MODE_LANDSCAPE; |         disp_mode = DISP_MODE_LANDSCAPE; | ||||||
|         display.setRotation(0); |         display.setRotation(0); | ||||||
|       #elif BOARD_MODEL == BOARD_TDECK |       #elif BOARD_MODEL == BOARD_TDECK | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -94,7 +94,7 @@ firmware-t3s3_sx126x: | |||||||
| 	arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xA1\"" | 	arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xA1\"" | ||||||
| 
 | 
 | ||||||
| firmware-t3s3_sx1280_pa: | firmware-t3s3_sx1280_pa: | ||||||
| 	arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xAB\"" | 	arduino-cli compile --fqbn "esp32:esp32:esp32s3:CDCOnBoot=cdc" $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x42\" \"-DBOARD_VARIANT=0xAC\"" | ||||||
| 
 | 
 | ||||||
| firmware-e22_esp32: | firmware-e22_esp32: | ||||||
| 	arduino-cli compile --fqbn esp32:esp32:esp32 $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x44\" \"-DEXTERNAL_LEDS=true\"" | 	arduino-cli compile --fqbn esp32:esp32:esp32 $(COMMON_BUILD_FLAGS) --build-property "compiler.cpp.extra_flags=\"-DBOARD_MODEL=0x44\" \"-DEXTERNAL_LEDS=true\"" | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								Power.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Power.h
									
									
									
									
									
								
							| @ -62,7 +62,7 @@ | |||||||
|   bool bat_voltage_dropping = false; |   bool bat_voltage_dropping = false; | ||||||
|   float bat_delay_v = 0; |   float bat_delay_v = 0; | ||||||
|   float bat_state_change_v = 0; |   float bat_state_change_v = 0; | ||||||
| #elif BOARD_MODEL == BOARD_OPENCOM_XL | #elif BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|   #include "nrfx_power.h" |   #include "nrfx_power.h" | ||||||
|   #define BAT_C_SAMPLES   7 |   #define BAT_C_SAMPLES   7 | ||||||
|   #define BAT_D_SAMPLES   2 |   #define BAT_D_SAMPLES   2 | ||||||
| @ -292,7 +292,7 @@ void measure_battery() { | |||||||
|       battery_ready = false; |       battery_ready = false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|   #elif BOARD_MODEL == BOARD_OPENCOM_XL |   #elif BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|     battery_installed = true; |     battery_installed = true; | ||||||
|     battery_indeterminate = false; |     battery_indeterminate = false; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -110,6 +110,7 @@ void ISR_VECT onDio0Rise() { | |||||||
|                 // Therefore, the modem is set into receive mode each time a packet is received.
 |                 // Therefore, the modem is set into receive mode each time a packet is received.
 | ||||||
|                 interface_obj[i]->receive(); |                 interface_obj[i]->receive(); | ||||||
|             } |             } | ||||||
|  |             break; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     taskEXIT_CRITICAL_FROM_ISR(int_status); |     taskEXIT_CRITICAL_FROM_ISR(int_status); | ||||||
| @ -740,7 +741,7 @@ void sx126x::sleep() | |||||||
| 
 | 
 | ||||||
| void sx126x::enableTCXO() { | void sx126x::enableTCXO() { | ||||||
|   if (_tcxo) { |   if (_tcxo) { | ||||||
|     #if BOARD_MODEL == BOARD_OPENCOM_XL || BOARD_MODEL == BOARD_HELTEC32_V3 |     #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL || BOARD_MODEL == BOARD_HELTEC32_V3 | ||||||
|       uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF}; |       uint8_t buf[4] = {MODE_TCXO_3_3V_6X, 0x00, 0x00, 0xFF}; | ||||||
|     #elif BOARD_MODEL == BOARD_TBEAM |     #elif BOARD_MODEL == BOARD_TBEAM | ||||||
|       uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF}; |       uint8_t buf[4] = {MODE_TCXO_1_8V_6X, 0x00, 0x00, 0xFF}; | ||||||
| @ -2240,7 +2241,8 @@ void sx128x::disableTCXO() { | |||||||
| 
 | 
 | ||||||
| void sx128x::setTxPower(int level, int outputPin) { | void sx128x::setTxPower(int level, int outputPin) { | ||||||
|     uint8_t tx_buf[2]; |     uint8_t tx_buf[2]; | ||||||
|     #if BOARD_VARIANT == MODEL_21 |     #if BOARD_VARIANT == MODEL_13 || BOARD_VARIANT == MODEL_21 | ||||||
|  |     // RAK4631 with WisBlock SX1280 module (LIBSYS002)
 | ||||||
|     if (level > 27) { |     if (level > 27) { | ||||||
|         level = 27; |         level = 27; | ||||||
|     } else if (level < 0) { |     } else if (level < 0) { | ||||||
| @ -2346,7 +2348,7 @@ void sx128x::setTxPower(int level, int outputPin) { | |||||||
| 
 | 
 | ||||||
|     executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2); |     executeOpcode(OP_TX_PARAMS_8X, tx_buf, 2); | ||||||
| 
 | 
 | ||||||
|     #elif BOARD_VARIANT == MODEL_AB |     #elif BOARD_VARIANT == MODEL_AC | ||||||
|     // T3S3 SX1280 PA
 |     // T3S3 SX1280 PA
 | ||||||
|         if (level > 20) { |         if (level > 20) { | ||||||
|             level = 20; |             level = 20; | ||||||
|  | |||||||
| @ -247,8 +247,7 @@ uint8_t boot_vector = 0x00; | |||||||
| 		void led_rx_off() {	analogWrite(pin_led_rx, 0); } | 		void led_rx_off() {	analogWrite(pin_led_rx, 0); } | ||||||
| 		void led_tx_on()  { analogWrite(pin_led_tx, 1); } | 		void led_tx_on()  { analogWrite(pin_led_tx, 1); } | ||||||
| 		void led_tx_off() { analogWrite(pin_led_tx, 0); } | 		void led_tx_off() { analogWrite(pin_led_tx, 0); } | ||||||
|     #endif |     #elif BOARD_MODEL == BOARD_RAK4631 | ||||||
|     #if BOARD_MODEL == BOARD_RAK4631 |  | ||||||
| 		void led_rx_on()  { digitalWrite(pin_led_rx, HIGH); } | 		void led_rx_on()  { digitalWrite(pin_led_rx, HIGH); } | ||||||
| 		void led_rx_off() {	digitalWrite(pin_led_rx, LOW); } | 		void led_rx_off() {	digitalWrite(pin_led_rx, LOW); } | ||||||
| 		void led_tx_on()  { digitalWrite(pin_led_tx, HIGH); } | 		void led_tx_on()  { digitalWrite(pin_led_tx, HIGH); } | ||||||
| @ -1060,7 +1059,7 @@ void setTXPower(RadioInterface* radio, int txp) { | |||||||
|     if (model == MODEL_A8) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); |     if (model == MODEL_A8) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); | ||||||
|     if (model == MODEL_A9) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); |     if (model == MODEL_A9) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); | ||||||
|     if (model == MODEL_AA) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); |     if (model == MODEL_AA) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); | ||||||
|     if (model == MODEL_AB) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); |     if (model == MODEL_AC) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); | ||||||
| 
 | 
 | ||||||
|     if (model == MODEL_B3) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); |     if (model == MODEL_B3) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); | ||||||
|     if (model == MODEL_B4) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); |     if (model == MODEL_B4) radio->setTxPower(txp, PA_OUTPUT_PA_BOOST_PIN); | ||||||
| @ -1438,6 +1437,8 @@ bool eeprom_model_valid() { | |||||||
| 	if (model == MODEL_C4 || model == MODEL_C9) { | 	if (model == MODEL_C4 || model == MODEL_C9) { | ||||||
| 	#elif BOARD_MODEL == BOARD_HELTEC32_V3 | 	#elif BOARD_MODEL == BOARD_HELTEC32_V3 | ||||||
| 	if (model == MODEL_C5 || model == MODEL_CA) { | 	if (model == MODEL_C5 || model == MODEL_CA) { | ||||||
|  |     #elif BOARD_MODEL == BOARD_RAK4631 | ||||||
|  |     if (model == MODEL_11 || model == MODEL_12 || model == MODEL_13 || model == MODEL_14) { | ||||||
|     #elif BOARD_MODEL == BOARD_OPENCOM_XL |     #elif BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|     if (model == MODEL_21) { |     if (model == MODEL_21) { | ||||||
| 	#elif BOARD_MODEL == BOARD_HUZZAH32 | 	#elif BOARD_MODEL == BOARD_HUZZAH32 | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ | |||||||
| 
 | 
 | ||||||
| #if MCU_VARIANT == MCU_NRF52 | #if MCU_VARIANT == MCU_NRF52 | ||||||
|   #define INTERFACE_SPI |   #define INTERFACE_SPI | ||||||
|   #if BOARD_MODEL == BOARD_OPENCOM_XL |   #if BOARD_MODEL == BOARD_RAK4631 || BOARD_MODEL == BOARD_OPENCOM_XL | ||||||
|         // Required because on RAK4631, non-default SPI pins must be initialised when class is declared.
 |         // Required because on RAK4631, non-default SPI pins must be initialised when class is declared.
 | ||||||
|       SPIClass interface_spi[1] = { |       SPIClass interface_spi[1] = { | ||||||
|             // SX1262
 |             // SX1262
 | ||||||
| @ -172,6 +172,7 @@ void setup() { | |||||||
|   memset(packet_lengths_buf, 0, sizeof(packet_starts_buf)); |   memset(packet_lengths_buf, 0, sizeof(packet_starts_buf)); | ||||||
| 
 | 
 | ||||||
|   memset(seq, 0xFF, sizeof(seq)); |   memset(seq, 0xFF, sizeof(seq)); | ||||||
|  |   memset(read_len, 0, sizeof(read_len)); | ||||||
| 
 | 
 | ||||||
|   modem_packet_queue = xQueueCreate(MODEM_QUEUE_SIZE, sizeof(modem_packet_t*)); |   modem_packet_queue = xQueueCreate(MODEM_QUEUE_SIZE, sizeof(modem_packet_t*)); | ||||||
| 
 | 
 | ||||||
| @ -359,7 +360,7 @@ inline void kiss_write_packet(int index) { | |||||||
|   // Add index of interface the packet came from
 |   // Add index of interface the packet came from
 | ||||||
|   serial_write(cmd_byte); |   serial_write(cmd_byte); | ||||||
| 
 | 
 | ||||||
|   for (uint16_t i = 0; i < read_len; i++) { |   for (uint16_t i = 0; i < read_len[index]; i++) { | ||||||
|     #if MCU_VARIANT == MCU_NRF52 |     #if MCU_VARIANT == MCU_NRF52 | ||||||
|       portENTER_CRITICAL(); |       portENTER_CRITICAL(); | ||||||
|       uint8_t byte = pbuf[i]; |       uint8_t byte = pbuf[i]; | ||||||
| @ -374,7 +375,7 @@ inline void kiss_write_packet(int index) { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   serial_write(FEND); |   serial_write(FEND); | ||||||
|   read_len = 0; |   read_len[index] = 0; | ||||||
| 
 | 
 | ||||||
|   #if MCU_VARIANT == MCU_ESP32 && HAS_BLE |   #if MCU_VARIANT == MCU_ESP32 && HAS_BLE | ||||||
|       bt_flush(); |       bt_flush(); | ||||||
| @ -382,14 +383,15 @@ inline void kiss_write_packet(int index) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| inline void getPacketData(RadioInterface* radio, uint16_t len) { | inline void getPacketData(RadioInterface* radio, uint16_t len) { | ||||||
|  |     uint8_t index = radio->getIndex(); | ||||||
|   #if MCU_VARIANT != MCU_NRF52 |   #if MCU_VARIANT != MCU_NRF52 | ||||||
|     while (len-- && read_len < MTU) { |     while (len-- && read_len[index] < MTU) { | ||||||
|       pbuf[read_len++] = radio->read(); |       pbuf[read_len[index]++] = radio->read(); | ||||||
|     }   |     }   | ||||||
|   #else |   #else | ||||||
|     BaseType_t int_mask = taskENTER_CRITICAL_FROM_ISR(); |     BaseType_t int_mask = taskENTER_CRITICAL_FROM_ISR(); | ||||||
|     while (len-- && read_len < MTU) { |     while (len-- && read_len[index] < MTU) { | ||||||
|       pbuf[read_len++] = radio->read(); |       pbuf[read_len[index]++] = radio->read(); | ||||||
|     } |     } | ||||||
|     taskEXIT_CRITICAL_FROM_ISR(int_mask); |     taskEXIT_CRITICAL_FROM_ISR(int_mask); | ||||||
|   #endif |   #endif | ||||||
| @ -398,7 +400,7 @@ inline void getPacketData(RadioInterface* radio, uint16_t len) { | |||||||
| inline bool queue_packet(RadioInterface* radio, uint8_t index) { | inline bool queue_packet(RadioInterface* radio, uint8_t index) { | ||||||
|     // Allocate packet struct, but abort if there
 |     // Allocate packet struct, but abort if there
 | ||||||
|     // is not enough memory available.
 |     // is not enough memory available.
 | ||||||
|     modem_packet_t *modem_packet = (modem_packet_t*)malloc(sizeof(modem_packet_t) + read_len); |     modem_packet_t *modem_packet = (modem_packet_t*)malloc(sizeof(modem_packet_t) + read_len[index]); | ||||||
|     if(!modem_packet) { memory_low = true; return false; } |     if(!modem_packet) { memory_low = true; return false; } | ||||||
| 
 | 
 | ||||||
|     // Get packet RSSI and SNR
 |     // Get packet RSSI and SNR
 | ||||||
| @ -412,8 +414,8 @@ inline bool queue_packet(RadioInterface* radio, uint8_t index) { | |||||||
|     // Send packet to event queue, but free the
 |     // Send packet to event queue, but free the
 | ||||||
|     // allocated memory again if the queue is
 |     // allocated memory again if the queue is
 | ||||||
|     // unable to receive the packet.
 |     // unable to receive the packet.
 | ||||||
|     modem_packet->len = read_len; |     modem_packet->len = read_len[index]; | ||||||
|     memcpy(modem_packet->data, pbuf, read_len); |     memcpy(modem_packet->data, pbuf, read_len[index]); | ||||||
|     if (!modem_packet_queue || xQueueSendFromISR(modem_packet_queue, &modem_packet, NULL) != pdPASS) { |     if (!modem_packet_queue || xQueueSendFromISR(modem_packet_queue, &modem_packet, NULL) != pdPASS) { | ||||||
|         free(modem_packet); |         free(modem_packet); | ||||||
|         return false; |         return false; | ||||||
| @ -441,9 +443,9 @@ void ISR_VECT receive_callback(uint8_t index, int packet_size) { | |||||||
|       // packet, so we set the seq variable
 |       // packet, so we set the seq variable
 | ||||||
|       // and add the data to the buffer
 |       // and add the data to the buffer
 | ||||||
|       #if MCU_VARIANT == MCU_NRF52 |       #if MCU_VARIANT == MCU_NRF52 | ||||||
|         int_mask = taskENTER_CRITICAL_FROM_ISR(); read_len = 0; taskEXIT_CRITICAL_FROM_ISR(int_mask); |         int_mask = taskENTER_CRITICAL_FROM_ISR(); read_len[index] = 0; taskEXIT_CRITICAL_FROM_ISR(int_mask); | ||||||
|       #else |       #else | ||||||
|         read_len = 0; |         read_len[index] = 0; | ||||||
|       #endif |       #endif | ||||||
|        |        | ||||||
|       seq[index] = sequence; |       seq[index] = sequence; | ||||||
| @ -466,9 +468,9 @@ void ISR_VECT receive_callback(uint8_t index, int packet_size) { | |||||||
|       // that we are seeing the first part of
 |       // that we are seeing the first part of
 | ||||||
|       // a new split packet.
 |       // a new split packet.
 | ||||||
|       #if MCU_VARIANT == MCU_NRF52 |       #if MCU_VARIANT == MCU_NRF52 | ||||||
|         int_mask = taskENTER_CRITICAL_FROM_ISR(); read_len = 0; taskEXIT_CRITICAL_FROM_ISR(int_mask); |         int_mask = taskENTER_CRITICAL_FROM_ISR(); read_len[index] = 0; taskEXIT_CRITICAL_FROM_ISR(int_mask); | ||||||
|       #else |       #else | ||||||
|         read_len = 0; |         read_len[index] = 0; | ||||||
|       #endif |       #endif | ||||||
|       seq[index] = sequence; |       seq[index] = sequence; | ||||||
| 
 | 
 | ||||||
| @ -483,9 +485,9 @@ void ISR_VECT receive_callback(uint8_t index, int packet_size) { | |||||||
|         // If we already had part of a split
 |         // If we already had part of a split
 | ||||||
|         // packet in the buffer, we clear it.
 |         // packet in the buffer, we clear it.
 | ||||||
|         #if MCU_VARIANT == MCU_NRF52 |         #if MCU_VARIANT == MCU_NRF52 | ||||||
|           int_mask = taskENTER_CRITICAL_FROM_ISR(); read_len = 0; taskEXIT_CRITICAL_FROM_ISR(int_mask); |           int_mask = taskENTER_CRITICAL_FROM_ISR(); read_len[index] = 0; taskEXIT_CRITICAL_FROM_ISR(int_mask); | ||||||
|         #else |         #else | ||||||
|           read_len = 0; |           read_len[index] = 0; | ||||||
|         #endif |         #endif | ||||||
|         seq[index] = SEQ_UNSET; |         seq[index] = SEQ_UNSET; | ||||||
|       } |       } | ||||||
| @ -497,7 +499,7 @@ void ISR_VECT receive_callback(uint8_t index, int packet_size) { | |||||||
|   } else { |   } else { | ||||||
|     // In promiscuous mode, raw packets are
 |     // In promiscuous mode, raw packets are
 | ||||||
|     // output directly to the host
 |     // output directly to the host
 | ||||||
|       read_len = 0; |     read_len[index] = 0; | ||||||
| 
 | 
 | ||||||
|     getPacketData(selected_radio, packet_size); |     getPacketData(selected_radio, packet_size); | ||||||
| 
 | 
 | ||||||
| @ -1341,10 +1343,10 @@ void loop() { | |||||||
|     #if MCU_VARIANT == MCU_ESP32 |     #if MCU_VARIANT == MCU_ESP32 | ||||||
|       modem_packet_t *modem_packet = NULL; |       modem_packet_t *modem_packet = NULL; | ||||||
|       if(modem_packet_queue && xQueueReceive(modem_packet_queue, &modem_packet, 0) == pdTRUE && modem_packet) { |       if(modem_packet_queue && xQueueReceive(modem_packet_queue, &modem_packet, 0) == pdTRUE && modem_packet) { | ||||||
|         read_len = modem_packet->len; |         packet_interface = modem_packet->interface; | ||||||
|  |         read_len[packet_interface] = modem_packet->len; | ||||||
|         last_rssi = modem_packet->rssi; |         last_rssi = modem_packet->rssi; | ||||||
|         last_snr_raw = modem_packet->snr_raw; |         last_snr_raw = modem_packet->snr_raw; | ||||||
|         packet_interface = modem_packet->interface; |  | ||||||
|         memcpy(&pbuf, modem_packet->data, modem_packet->len); |         memcpy(&pbuf, modem_packet->data, modem_packet->len); | ||||||
|         free(modem_packet); |         free(modem_packet); | ||||||
|         modem_packet = NULL; |         modem_packet = NULL; | ||||||
| @ -1357,11 +1359,11 @@ void loop() { | |||||||
|     #elif MCU_VARIANT == MCU_NRF52 |     #elif MCU_VARIANT == MCU_NRF52 | ||||||
|       modem_packet_t *modem_packet = NULL; |       modem_packet_t *modem_packet = NULL; | ||||||
|       if(modem_packet_queue && xQueueReceive(modem_packet_queue, &modem_packet, 0) == pdTRUE && modem_packet) { |       if(modem_packet_queue && xQueueReceive(modem_packet_queue, &modem_packet, 0) == pdTRUE && modem_packet) { | ||||||
|         memcpy(&pbuf, modem_packet->data, modem_packet->len); |         packet_interface = modem_packet->interface; | ||||||
|         read_len = modem_packet->len; |         read_len[packet_interface] = modem_packet->len; | ||||||
|         last_rssi = modem_packet->rssi; |         last_rssi = modem_packet->rssi; | ||||||
|         last_snr_raw = modem_packet->snr_raw; |         last_snr_raw = modem_packet->snr_raw; | ||||||
|         packet_interface = modem_packet->interface; |         memcpy(&pbuf, modem_packet->data, modem_packet->len); | ||||||
|         free(modem_packet); |         free(modem_packet); | ||||||
|         modem_packet = NULL; |         modem_packet = NULL; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user