Fix header bit translation
This commit is contained in:
@@ -54,14 +54,14 @@ typedef struct {
|
||||
* 3 bits set to zero and the remaining 29 containing the
|
||||
* extended id
|
||||
*/
|
||||
uint32_t *MMR_CAN_HeaderToBits(MmrCanHeader *header);
|
||||
uint32_t MMR_CAN_HeaderToBits(MmrCanHeader header);
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Converts a 32bits integer to an MmrCanHeader.
|
||||
* The left-most 3 bits must be of padding.
|
||||
*/
|
||||
MmrCanHeader *MMR_CAN_HeaderFromBits(uint32_t *bits);
|
||||
MmrCanHeader MMR_CAN_HeaderFromBits(uint32_t bits);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
+15
-4
@@ -2,12 +2,23 @@
|
||||
#include "mmr_can_util.h"
|
||||
#include "mmr_can_optimize.h"
|
||||
|
||||
uint32_t *MMR_CAN_HeaderToBits(MmrCanHeader *header) {
|
||||
return (uint32_t*)header;
|
||||
uint32_t MMR_CAN_HeaderToBits(MmrCanHeader header) {
|
||||
return 0
|
||||
| ((uint32_t)header.priority << 26)
|
||||
| ((uint32_t)header.messageId << 23)
|
||||
| ((uint32_t)header.senderId << 13)
|
||||
| ((uint32_t)header.seqNumber << 3)
|
||||
| ((uint32_t)header.messageType);
|
||||
}
|
||||
|
||||
MmrCanHeader *MMR_CAN_HeaderFromBits(uint32_t *bits) {
|
||||
return (MmrCanHeader*)bits;
|
||||
MmrCanHeader MMR_CAN_HeaderFromBits(uint32_t bits) {
|
||||
return (MmrCanHeader) {
|
||||
.priority = bits >> 26,
|
||||
.messageId = bits >> 23,
|
||||
.senderId = bits >> 13,
|
||||
.seqNumber = bits >> 3,
|
||||
.messageType = bits,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -64,10 +64,14 @@ static HalStatus receiveAll(ReceptionParams *rp) {
|
||||
|
||||
|
||||
static HalStatus receiveOne(ReceptionParams *rp) {
|
||||
HalStatus status =
|
||||
HAL_CAN_GetRxMessage(rp->handle, rp->fifo, &(rp->headers.rx), rp->result);
|
||||
HalStatus status = HAL_CAN_GetRxMessage(
|
||||
rp->handle,
|
||||
rp->fifo,
|
||||
&rp->headers.rx,
|
||||
rp->result
|
||||
);
|
||||
|
||||
rp->headers.mmr = convertTo(MmrCanHeader, rp->headers.rx.ExtId);
|
||||
rp->headers.mmr = MMR_CAN_HeaderFromBits(rp->headers.rx.ExtId);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ static MmrCanScsEntry* clearEntry(MmrCanHeader header);
|
||||
static MmrCanScsEntry* findEntry(MmrCanHeader header);
|
||||
|
||||
static TimerRange getCurrentTime();
|
||||
static HalStatus sendScs(CanHandle *hcan, MmrCanHeader header);
|
||||
HalStatus sendScs(CanHandle *hcan, MmrCanHeader header);
|
||||
static MmrCanScsCheckResult checkScs(MmrCanScsEntry *entry);
|
||||
|
||||
|
||||
@@ -62,6 +62,10 @@ HalStatus MMR_CAN_HandleNextScs(CanHandle *hcan) {
|
||||
static int counter = 0;
|
||||
MmrCanScsEntry *entry = &__scsEntries[counter++ % MMR_CAN_SCS_ENTRIES_COUNT];
|
||||
|
||||
if (MMR_CAN_HeaderToBits(entry->header) == 0) {
|
||||
return HAL_OK;
|
||||
}
|
||||
|
||||
switch (checkScs(entry)) {
|
||||
case MMR_CAN_SCS_CHECK_ERROR: return HAL_ERROR;
|
||||
case MMR_CAN_SCS_CHECK_OK: return HAL_OK;
|
||||
@@ -134,14 +138,14 @@ MmrCanScsEntry* clearEntry(MmrCanHeader header) {
|
||||
}
|
||||
|
||||
MmrCanScsEntry* findEntry(MmrCanHeader header) {
|
||||
uint32_t *target = MMR_CAN_HeaderToBits(&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);
|
||||
uint32_t curr = MMR_CAN_HeaderToBits(entry->header);
|
||||
|
||||
if (*curr == *target) {
|
||||
if (curr == target) {
|
||||
return entry;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -24,6 +24,9 @@ static void setMessageType(TransmissionParams *header, MmrCanMessageType type);
|
||||
static void syncHeaders(TransmissionParams *tp);
|
||||
|
||||
|
||||
static CanMailbox __mailbox;
|
||||
|
||||
|
||||
HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet) {
|
||||
TransmissionParams tp = {
|
||||
.handle = hcan,
|
||||
@@ -57,7 +60,6 @@ HalStatus MMR_CAN_SendNoTamper(CanHandle *hcan, MmrCanPacket packet) {
|
||||
},
|
||||
};
|
||||
|
||||
syncHeaders(&tp);
|
||||
return send(&tp);
|
||||
}
|
||||
|
||||
@@ -108,13 +110,13 @@ static HalStatus send(TransmissionParams *tp) {
|
||||
tp->handle,
|
||||
&tp->headers.tx,
|
||||
tp->packet->data,
|
||||
tp->packet->mailbox
|
||||
&__mailbox
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
static void syncHeaders(TransmissionParams *tp) {
|
||||
tp->headers.tx.ExtId = *MMR_CAN_HeaderToBits(&tp->headers.mmr);
|
||||
tp->headers.tx.ExtId = MMR_CAN_HeaderToBits(tp->headers.mmr);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user