}
}
+#if MCU_VARIANT == MCU_ESP32
+ portMUX_TYPE update_lock = portMUX_INITIALIZER_UNLOCKED;
+#endif
+
inline void kiss_write_packet() {
serial_write(FEND);
serial_write(CMD_DATA);
for (uint16_t i = 0; i < read_len; i++) {
+ #if MCU_VARIANT == MCU_ESP32
+ portENTER_CRITICAL(&update_lock);
+ #elif MCU_VARIANT == MCU_NRF52
+ portENTER_CRITICAL();
+ #endif
uint8_t byte = pbuf[i];
+ #if MCU_VARIANT == MCU_ESP32
+ portEXIT_CRITICAL(&update_lock);
+ #elif MCU_VARIANT == MCU_NRF52
+ portEXIT_CRITICAL();
+ #endif
if (byte == FEND) { serial_write(FESC); byte = TFEND; }
if (byte == FESC) { serial_write(FESC); byte = TFESC; }
serial_write(byte);
}
inline void getPacketData(uint16_t len) {
+ BaseType_t int_mask = taskENTER_CRITICAL_FROM_ISR();
while (len-- && read_len < MTU) {
pbuf[read_len++] = LoRa->read();
}
+ taskEXIT_CRITICAL_FROM_ISR(int_mask);
}
void ISR_VECT receive_callback(int packet_size) {
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ BaseType_t int_mask;
+ #endif
if (!promisc) {
// The standard operating mode allows large
// packets with a payload up to 500 bytes,
// This is the first part of a split
// packet, so we set the seq variable
// and add the data to the buffer
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ int_mask = taskENTER_CRITICAL_FROM_ISR();
+ #endif
read_len = 0;
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ taskEXIT_CRITICAL_FROM_ISR(int_mask);
+ #endif
seq = sequence;
#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
// same sequence id, so we must assume
// that we are seeing the first part of
// a new split packet.
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ int_mask = taskENTER_CRITICAL_FROM_ISR();
+ #endif
read_len = 0;
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ taskEXIT_CRITICAL_FROM_ISR(int_mask);
+ #endif
seq = sequence;
#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
if (seq != SEQ_UNSET) {
// If we already had part of a split
// packet in the buffer, we clear it.
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ int_mask = taskENTER_CRITICAL_FROM_ISR();
+ #endif
read_len = 0;
+ #if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
+ taskEXIT_CRITICAL_FROM_ISR(int_mask);
+ #endif
seq = SEQ_UNSET;
}
}
}
-#if MCU_VARIANT == MCU_ESP32
- portMUX_TYPE update_lock = portMUX_INITIALIZER_UNLOCKED;
-#endif
-
void updateModemStatus() {
#if MCU_VARIANT == MCU_ESP32
portENTER_CRITICAL(&update_lock);