mirror of
https://github.com/markqvist/RNode_Firmware.git
synced 2025-02-10 03:38:41 -05:00
Merge pull request #86 from jacobeva/master
Fix RAK4631 intermittent packet corruption
This commit is contained in:
commit
1de5f3c796
@ -241,11 +241,25 @@ void lora_receive() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MCU_VARIANT == MCU_ESP32
|
||||||
|
portMUX_TYPE update_lock = portMUX_INITIALIZER_UNLOCKED;
|
||||||
|
#endif
|
||||||
|
|
||||||
inline void kiss_write_packet() {
|
inline void kiss_write_packet() {
|
||||||
serial_write(FEND);
|
serial_write(FEND);
|
||||||
serial_write(CMD_DATA);
|
serial_write(CMD_DATA);
|
||||||
for (uint16_t i = 0; i < read_len; i++) {
|
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];
|
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 == FEND) { serial_write(FESC); byte = TFEND; }
|
||||||
if (byte == FESC) { serial_write(FESC); byte = TFESC; }
|
if (byte == FESC) { serial_write(FESC); byte = TFESC; }
|
||||||
serial_write(byte);
|
serial_write(byte);
|
||||||
@ -263,12 +277,17 @@ inline void kiss_write_packet() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline void getPacketData(uint16_t len) {
|
inline void getPacketData(uint16_t len) {
|
||||||
|
BaseType_t int_mask = taskENTER_CRITICAL_FROM_ISR();
|
||||||
while (len-- && read_len < MTU) {
|
while (len-- && read_len < MTU) {
|
||||||
pbuf[read_len++] = LoRa->read();
|
pbuf[read_len++] = LoRa->read();
|
||||||
}
|
}
|
||||||
|
taskEXIT_CRITICAL_FROM_ISR(int_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ISR_VECT receive_callback(int packet_size) {
|
void ISR_VECT receive_callback(int packet_size) {
|
||||||
|
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
BaseType_t int_mask;
|
||||||
|
#endif
|
||||||
if (!promisc) {
|
if (!promisc) {
|
||||||
// The standard operating mode allows large
|
// The standard operating mode allows large
|
||||||
// packets with a payload up to 500 bytes,
|
// packets with a payload up to 500 bytes,
|
||||||
@ -283,7 +302,13 @@ void ISR_VECT receive_callback(int packet_size) {
|
|||||||
// This is the first part of a split
|
// This is the first part of a split
|
||||||
// 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_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
int_mask = taskENTER_CRITICAL_FROM_ISR();
|
||||||
|
#endif
|
||||||
read_len = 0;
|
read_len = 0;
|
||||||
|
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
taskEXIT_CRITICAL_FROM_ISR(int_mask);
|
||||||
|
#endif
|
||||||
seq = sequence;
|
seq = sequence;
|
||||||
|
|
||||||
#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
|
#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
|
||||||
@ -314,7 +339,13 @@ void ISR_VECT receive_callback(int packet_size) {
|
|||||||
// same sequence id, so we must assume
|
// same sequence id, so we must assume
|
||||||
// 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_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
int_mask = taskENTER_CRITICAL_FROM_ISR();
|
||||||
|
#endif
|
||||||
read_len = 0;
|
read_len = 0;
|
||||||
|
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
taskEXIT_CRITICAL_FROM_ISR(int_mask);
|
||||||
|
#endif
|
||||||
seq = sequence;
|
seq = sequence;
|
||||||
|
|
||||||
#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
|
#if MCU_VARIANT != MCU_ESP32 && MCU_VARIANT != MCU_NRF52
|
||||||
@ -332,7 +363,13 @@ void ISR_VECT receive_callback(int packet_size) {
|
|||||||
if (seq != SEQ_UNSET) {
|
if (seq != SEQ_UNSET) {
|
||||||
// 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_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
int_mask = taskENTER_CRITICAL_FROM_ISR();
|
||||||
|
#endif
|
||||||
read_len = 0;
|
read_len = 0;
|
||||||
|
#if MCU_VARIANT == MCU_ESP32 || MCU_VARIANT == MCU_NRF52
|
||||||
|
taskEXIT_CRITICAL_FROM_ISR(int_mask);
|
||||||
|
#endif
|
||||||
seq = SEQ_UNSET;
|
seq = SEQ_UNSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1076,10 +1113,6 @@ void serialCallback(uint8_t sbyte) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MCU_VARIANT == MCU_ESP32
|
|
||||||
portMUX_TYPE update_lock = portMUX_INITIALIZER_UNLOCKED;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void updateModemStatus() {
|
void updateModemStatus() {
|
||||||
#if MCU_VARIANT == MCU_ESP32
|
#if MCU_VARIANT == MCU_ESP32
|
||||||
portENTER_CRITICAL(&update_lock);
|
portENTER_CRITICAL(&update_lock);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user