mirror of https://github.com/ARMmbed/mbed-os.git
LoRAWAN: volatile bool -> atomic_flag
Now we have a proper atomic flag API, use it rather than a volatile cheat.pull/9245/head
parent
51b8d6e59d
commit
6f757a5824
|
@ -35,6 +35,7 @@ set(unittest-test-sources
|
|||
stubs/LoRaPHY_stub.cpp
|
||||
stubs/LoRaMac_stub.cpp
|
||||
stubs/mbed_assert_stub.c
|
||||
stubs/mbed_critical_stub.c
|
||||
stubs/LoRaMacCrypto_stub.cpp
|
||||
stubs/LoRaMacChannelPlan_stub.cpp
|
||||
stubs/LoRaWANTimer_stub.cpp
|
||||
|
|
|
@ -39,7 +39,6 @@ LoRaWANStack::LoRaWANStack()
|
|||
_app_port(12),
|
||||
_link_check_requested(false),
|
||||
_automatic_uplink_ongoing(false),
|
||||
_ready_for_rx(true),
|
||||
_queue(NULL)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -49,6 +49,15 @@ void core_util_critical_section_exit(void)
|
|||
{
|
||||
}
|
||||
|
||||
bool core_util_atomic_flag_test_and_set(volatile core_util_atomic_flag *flagPtr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void core_util_atomic_flag_clear(volatile core_util_atomic_flag *flagPtr)
|
||||
{
|
||||
}
|
||||
|
||||
bool core_util_atomic_cas_u8(volatile uint8_t *ptr, uint8_t *expectedCurrentValue, uint8_t desiredValue)
|
||||
{
|
||||
return false;
|
||||
|
|
|
@ -73,11 +73,11 @@ LoRaWANStack::LoRaWANStack()
|
|||
_app_port(INVALID_PORT),
|
||||
_link_check_requested(false),
|
||||
_automatic_uplink_ongoing(false),
|
||||
_ready_for_rx(true),
|
||||
_queue(NULL)
|
||||
{
|
||||
_tx_metadata.stale = true;
|
||||
_rx_metadata.stale = true;
|
||||
core_util_atomic_flag_clear(&_rx_payload_in_use);
|
||||
|
||||
#ifdef MBED_CONF_LORA_APP_PORT
|
||||
if (is_port_valid(MBED_CONF_LORA_APP_PORT)) {
|
||||
|
@ -519,11 +519,10 @@ void LoRaWANStack::tx_interrupt_handler(void)
|
|||
void LoRaWANStack::rx_interrupt_handler(const uint8_t *payload, uint16_t size,
|
||||
int16_t rssi, int8_t snr)
|
||||
{
|
||||
if (!_ready_for_rx || size > sizeof _rx_payload) {
|
||||
if (size > sizeof _rx_payload || core_util_atomic_flag_test_and_set(&_rx_payload_in_use)) {
|
||||
return;
|
||||
}
|
||||
|
||||
_ready_for_rx = false;
|
||||
memcpy(_rx_payload, payload, size);
|
||||
|
||||
const uint8_t *ptr = _rx_payload;
|
||||
|
@ -709,13 +708,13 @@ void LoRaWANStack::process_reception(const uint8_t *const payload, uint16_t size
|
|||
mlme_confirm_handler();
|
||||
|
||||
if (_loramac.get_mlme_confirmation()->req_type == MLME_JOIN) {
|
||||
_ready_for_rx = true;
|
||||
core_util_atomic_flag_clear(&_rx_payload_in_use);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!_loramac.nwk_joined()) {
|
||||
_ready_for_rx = true;
|
||||
core_util_atomic_flag_clear(&_rx_payload_in_use);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -744,7 +743,7 @@ void LoRaWANStack::process_reception(const uint8_t *const payload, uint16_t size
|
|||
mlme_indication_handler();
|
||||
}
|
||||
|
||||
_ready_for_rx = true;
|
||||
core_util_atomic_flag_clear(&_rx_payload_in_use);
|
||||
}
|
||||
|
||||
void LoRaWANStack::process_reception_timeout(bool is_timeout)
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include "events/EventQueue.h"
|
||||
#include "platform/mbed_critical.h"
|
||||
#include "platform/Callback.h"
|
||||
#include "platform/NonCopyable.h"
|
||||
#include "platform/ScopedLock.h"
|
||||
|
@ -504,7 +505,7 @@ private:
|
|||
uint8_t _app_port;
|
||||
bool _link_check_requested;
|
||||
bool _automatic_uplink_ongoing;
|
||||
volatile bool _ready_for_rx;
|
||||
core_util_atomic_flag _rx_payload_in_use;
|
||||
uint8_t _rx_payload[LORAMAC_PHY_MAXPAYLOAD];
|
||||
events::EventQueue *_queue;
|
||||
lorawan_time_t _tx_timestamp;
|
||||
|
|
Loading…
Reference in New Issue