This pull request fixes #12. The root cause was [`BLE_HandleCommonEvents()`](https://git.ktag.clubk.club/Software/SystemK/src/tag/SystemK_v01.01/BLE/BLE_Utils.c#L57) was causing BLE events to be marked as "not new" by [`BLE_IsPacketNew()`](https://git.ktag.clubk.club/Software/SystemK/src/tag/SystemK_v01.01/BLE/BLE_Packet_Tracker.c#L53), even though these packets were left unhandled by the common event handler. The solution is to separate the querying of whether a packet is new from the marking it as already seen, since we don't want to mark a packet as seen until it has been properly _handled_. I added the function `BLE_RememberPacket()` for the latter purpose. I also cleaned up some of the logging code, now that logging is configurable (on ESP32 platform, anyway). Co-authored-by: Joe Kearney <joe@clubk.club> Reviewed-on: #13
This commit is contained in:
parent
45df6f952a
commit
daa1a2a1ec
6 changed files with 28 additions and 6 deletions
|
|
@ -54,9 +54,6 @@ bool BLE_IsPacketNew(const uint8_t *sender_BD_ADDR,
|
|||
BLE_PacketType_T packet_type,
|
||||
uint8_t event_number)
|
||||
{
|
||||
//esp_log_level_set("BLE", ESP_LOG_DEBUG);
|
||||
//KLOG_DEBUG("BLE", "Packet from %s", BLE_ADDR_To_Str(sender_BD_ADDR));
|
||||
|
||||
// Check if the packet already exists in the tracker.
|
||||
for (int i = 0; i < Tracker.count; i++)
|
||||
{
|
||||
|
|
@ -66,11 +63,18 @@ bool BLE_IsPacketNew(const uint8_t *sender_BD_ADDR,
|
|||
(Tracker.packets[index].event_number == event_number))
|
||||
{
|
||||
// We've already seen this packet.
|
||||
KLOG_TRACE("BLE", "Packet from %s is not new.", BLE_ADDR_To_Str(sender_BD_ADDR));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// The packet is new--find the location to store it.
|
||||
KLOG_DEBUG("BLE", "Packet from %s is new.", BLE_ADDR_To_Str(sender_BD_ADDR));
|
||||
return true;
|
||||
}
|
||||
|
||||
void BLE_RememberPacket(const uint8_t* sender_BD_ADDR, BLE_PacketType_T packet_type, uint8_t event_number)
|
||||
{
|
||||
// Find the location to store the packet.
|
||||
int new_index;
|
||||
if (Tracker.count < MAX_REMEMBERED_PACKETS)
|
||||
{
|
||||
|
|
@ -89,8 +93,6 @@ bool BLE_IsPacketNew(const uint8_t *sender_BD_ADDR,
|
|||
memcpy(Tracker.packets[new_index].sender_BD_ADDR, sender_BD_ADDR, BD_ADDR_SIZE);
|
||||
Tracker.packets[new_index].packet_type = packet_type;
|
||||
Tracker.packets[new_index].event_number = event_number;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Initialize the MessageTracker
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
bool BLE_IsPacketNew(const uint8_t* sender_BD_ADDR, BLE_PacketType_T packet_type, uint8_t event_number);
|
||||
void BLE_RememberPacket(const uint8_t* sender_BD_ADDR, BLE_PacketType_T packet_type, uint8_t event_number);
|
||||
void BLE_ClearPacketTracker(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -118,6 +118,11 @@ SystemKResult_T BLE_HandleCommonEvents(KEvent_T *event)
|
|||
result = SYSTEMK_RESULT_OVERFLOW;
|
||||
}
|
||||
}
|
||||
|
||||
if (result != SYSTEMK_RESULT_EVENT_NOT_HANDLED)
|
||||
{
|
||||
BLE_RememberPacket(event_packet->BD_ADDR, BLE_PACKET_TYPE_EVENT, event_packet->event_number);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -206,6 +206,8 @@ void HandleBLETagPacket(const BLE_TagPacket_T *const packet)
|
|||
{
|
||||
if (BLE_IsPacketNew(packet->BD_ADDR, BLE_PACKET_TYPE_TAG, packet->event_number))
|
||||
{
|
||||
BLE_RememberPacket(packet->BD_ADDR, BLE_PACKET_TYPE_TAG, packet->event_number);
|
||||
|
||||
Health_In_Percent = (int16_t)Get_Health();
|
||||
|
||||
if (packet->damage > 0)
|
||||
|
|
|
|||
|
|
@ -376,6 +376,8 @@ void HandleBLEConfigurationPacket(const BLE_ParametersPacket_T *const packet)
|
|||
{
|
||||
if (BLE_IsPacketNew(packet->BD_ADDR, BLE_PACKET_TYPE_PARAMETERS, packet->event_number))
|
||||
{
|
||||
BLE_RememberPacket(packet->BD_ADDR, BLE_PACKET_TYPE_PARAMETERS, packet->event_number);
|
||||
|
||||
if (packet->subtype == BLE_REQUEST_PARAMETER_CHANGE)
|
||||
{
|
||||
SystemKResult_T result = SYSTEMK_RESULT_SUCCESS;
|
||||
|
|
|
|||
|
|
@ -135,6 +135,8 @@ void HandleBLEEventPacket(const BLE_EventPacket_T *const packet, StateMachineCon
|
|||
{
|
||||
if (BLE_IsPacketNew(packet->BD_ADDR, BLE_PACKET_TYPE_EVENT, packet->event_number))
|
||||
{
|
||||
BLE_RememberPacket(packet->BD_ADDR, BLE_PACKET_TYPE_EVENT, packet->event_number);
|
||||
|
||||
if (packet->event_ID == BLE_EVENT_CONFIGURED)
|
||||
{
|
||||
if (context->States.Current_State == STATE_CONFIGURING)
|
||||
|
|
@ -146,6 +148,10 @@ void HandleBLEEventPacket(const BLE_EventPacket_T *const packet, StateMachineCon
|
|||
};
|
||||
Transition_For_Event(context, STATE_READY, &Event);
|
||||
}
|
||||
else
|
||||
{
|
||||
KLOG_WARN("STATE", "Ignoring a BLE Configured event--not in the Configuring State!");
|
||||
}
|
||||
}
|
||||
else if (packet->event_ID == BLE_EVENT_CONFIGURE)
|
||||
{
|
||||
|
|
@ -158,6 +164,10 @@ void HandleBLEEventPacket(const BLE_EventPacket_T *const packet, StateMachineCon
|
|||
};
|
||||
Transition_For_Event(context, STATE_CONFIGURING, &Event);
|
||||
}
|
||||
else
|
||||
{
|
||||
KLOG_WARN("STATE", "Ignoring a BLE Configure event--not in the Ready State!");
|
||||
}
|
||||
}
|
||||
else if (packet->event_ID == BLE_EVENT_WRAPUP_COMPLETE)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue