Separate scs entries from manager

This commit is contained in:
Stefano Calabretti
2022-02-23 19:18:28 +01:00
parent 38be086307
commit 5026bc515c
3 changed files with 74 additions and 62 deletions
+57
View File
@@ -0,0 +1,57 @@
#include "mmr_can_scs_manager.h"
static MmrCanScsEntry __scsEntries[MMR_CAN_SCS_ENTRIES_COUNT];
MmrCanScsEntry* MMR_CAN_GetNextScsEntry() {
static int counter = 0;
MmrCanScsEntry *entry = __scsEntries + counter;
counter++;
counter %= MMR_CAN_SCS_ENTRIES_COUNT;
return entry;
}
MmrCanScsEntry* MMR_CAN_PutScsEntry(MmrCanHeader header) {
MmrCanScsEntry *entry = findEntry((MmrCanHeader){});
if (entry == NULL) {
return NULL;
}
*entry = (MmrCanScsEntry){
.header = header,
.counter = getCurrentTime(),
};
return entry;
}
MmrCanScsEntry* MMR_CAN_ClearScsEntry(MmrCanHeader header) {
MmrCanScsEntry *entry = findEntry(header);
if (entry == NULL) {
return NULL;
}
*entry = (MmrCanScsEntry){};
return entry;
}
MmrCanScsEntry* MMR_CAN_FindScsEntry(MmrCanHeader header) {
uint32_t target = MMR_CAN_HeaderToBits(header);
uint32_t i = 0;
for (; i < MMR_CAN_SCS_ENTRIES_COUNT; i++) {
MmrCanScsEntry *entry = __scsEntries + i;
uint32_t curr = MMR_CAN_HeaderToBits(entry->header);
if (curr == target) {
return entry;
}
}
return NULL;
}