}
serial_write(FEND);
read_len = 0;
+ packet_ready = false;
}
inline void getPacketData(RadioInterface* radio, uint16_t len) {
getPacketData(selected_radio, packet_size);
seq = SEQ_UNSET;
- ready = true;
+ packet_ready = true;
} else if (isSplitPacket(header) && seq != sequence) {
// This split packet does not carry the
}
getPacketData(selected_radio, packet_size);
- ready = true;
+ packet_ready = true;
}
} else {
// In promiscuous mode, raw packets are
read_len = 0;
getPacketData(selected_radio, packet_size);
- ready = true;
+ packet_ready = true;
}
- if (ready) {
- #if MCU_VARIANT == MCU_ESP32
- portENTER_CRITICAL(&update_lock);
- #elif MCU_VARIANT == MCU_NRF52
- portENTER_CRITICAL();
- #endif
- last_rssi = selected_radio->packetRssi();
- last_snr_raw = selected_radio->packetSnrRaw();
- #if MCU_VARIANT == MCU_ESP32
- portEXIT_CRITICAL(&update_lock);
- #elif MCU_VARIANT == MCU_NRF52
- portEXIT_CRITICAL();
- #endif
- kiss_indicate_stat_rssi();
- kiss_indicate_stat_snr();
- kiss_write_packet(index);
- }
last_rx = millis();
}
}
void loop() {
- packet_poll();
+ if (packet_ready) {
+ #if MCU_VARIANT == MCU_ESP32
+ portENTER_CRITICAL(&update_lock);
+ #elif MCU_VARIANT == MCU_NRF52
+ portENTER_CRITICAL();
+ #endif
+ last_rssi = selected_radio->packetRssi();
+ last_snr_raw = selected_radio->packetSnrRaw();
+ #if MCU_VARIANT == MCU_ESP32
+ portEXIT_CRITICAL(&update_lock);
+ #elif MCU_VARIANT == MCU_NRF52
+ portEXIT_CRITICAL();
+ #endif
+ kiss_indicate_stat_rssi();
+ kiss_indicate_stat_snr();
+ kiss_write_packet(1);
+ }
bool ready = false;
for (int i = 0; i < INTERFACE_COUNT; i++) {
process_serial();
}
-void packet_poll() {
- // If we have received a packet on an interface which needs to be processed
- while (!fifo_isempty(&packet_rdy_interfaces)) {
- #if MCU_VARIANT == MCU_ESP32
- portENTER_CRITICAL(&update_lock);
- #elif MCU_VARIANT == MCU_NRF52
- portENTER_CRITICAL();
- #endif
- uint8_t packet_int = fifo_pop(&packet_rdy_interfaces);
- #if MCU_VARIANT == MCU_ESP32
- portEXIT_CRITICAL(&update_lock);
- #elif MCU_VARIANT == MCU_NRF52
- portEXIT_CRITICAL();
- #endif
- selected_radio = interface_obj[packet_int];
- selected_radio->handleDio0Rise();
- }
-}
-
volatile bool serial_polling = false;
void serial_poll() {
serial_polling = true;
// which one is high. We can then use the index of this pin in the 2D array to
// signal the correct interface to the main loop
void ISR_VECT onDio0Rise() {
+ BaseType_t int_status = taskENTER_CRITICAL_FROM_ISR();
for (int i = 0; i < INTERFACE_COUNT; i++) {
if (digitalRead(interface_pins[i][5]) == HIGH) {
if (interface_obj[i]->getPacketValidity()) {
- fifo_push(&packet_rdy_interfaces, i);
+ interface_obj[i]->handleDio0Rise();
}
if (interfaces[i] == SX128X) {
// On the SX1280, there is a bug which can cause the busy line
}
}
}
+ taskEXIT_CRITICAL_FROM_ISR(int_status);
}
sx126x::sx126x(uint8_t index, SPIClass* spi, bool tcxo, bool dio2_as_rf_switch, int ss, int sclk, int mosi, int miso, int reset, int dio0, int busy, int rxen) :
_csma_slot_ms = 10;
float target_preamble_symbols;
- if (_bitrate <= LORA_FAST_BITRATE_THRESHOLD) {
+ //if (_bitrate <= LORA_FAST_BITRATE_THRESHOLD) {
target_preamble_symbols = (LORA_PREAMBLE_TARGET_MS/_lora_symbol_time_ms)-LORA_PREAMBLE_SYMBOLS_HW;
- } else {
- target_preamble_symbols = (LORA_PREAMBLE_FAST_TARGET_MS/_lora_symbol_time_ms)-LORA_PREAMBLE_SYMBOLS_HW;
- }
+ //} else {
+ /*target_preamble_symbols = (LORA_PREAMBLE_FAST_TARGET_MS/_lora_symbol_time_ms)-LORA_PREAMBLE_SYMBOLS_HW;
+ }*/
if (target_preamble_symbols < LORA_PREAMBLE_SYMBOLS_MIN) {
target_preamble_symbols = LORA_PREAMBLE_SYMBOLS_MIN;
} else {