58 lines
1.1 KiB
C
58 lines
1.1 KiB
C
#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;
|
|
}
|