* Cycle mailboxes

* Fix send bug

* Refactor
This commit was merged in pull request #12.
This commit is contained in:
Stefano Calabretti
2022-05-10 20:22:53 +02:00
committed by GitHub
parent efdd4655a3
commit d63f41a8d5
2 changed files with 23 additions and 10 deletions
+1
View File
@@ -1,2 +1,3 @@
!.vscode/settings.json !.vscode/settings.json
.vscode .vscode
.DS_Store
+21 -9
View File
@@ -14,7 +14,7 @@ typedef struct {
} TransmissionParams; } TransmissionParams;
static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket packet); static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket *packet);
static HalStatus send(TransmissionParams *tp); static HalStatus send(TransmissionParams *tp);
static HalStatus sendNormal(TransmissionParams *tp); static HalStatus sendNormal(TransmissionParams *tp);
static HalStatus sendMulti(TransmissionParams *tp); static HalStatus sendMulti(TransmissionParams *tp);
@@ -23,14 +23,18 @@ static uint8_t computeFramesToSend(MmrCanPacket *packet);
static uint8_t computeNextMessageLength(MmrCanPacket *packet); static uint8_t computeNextMessageLength(MmrCanPacket *packet);
static void setMessageType(TransmissionParams *header, MmrCanMessageType type); static void setMessageType(TransmissionParams *header, MmrCanMessageType type);
static void syncHeaders(TransmissionParams *tp); static void syncHeaders(TransmissionParams *tp);
static CanMailbox *getNextMailbox();
static CanMailbox __mailbox; #define MAILBOXES_COUNT 3
static CanMailbox __mailboxes[MAILBOXES_COUNT] = {};
static uint8_t __currentMailbox = 0;
HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet) { HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet) {
TransmissionParams tp = TransmissionParams tp =
buildParams(hcan, packet); buildParams(hcan, &packet);
syncHeaders(&tp); syncHeaders(&tp);
return packet.length <= MMR_CAN_MAX_DATA_LENGTH return packet.length <= MMR_CAN_MAX_DATA_LENGTH
@@ -41,21 +45,21 @@ HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet) {
HalStatus MMR_CAN_SendNoTamper(CanHandle *hcan, MmrCanPacket packet) { HalStatus MMR_CAN_SendNoTamper(CanHandle *hcan, MmrCanPacket packet) {
TransmissionParams tp = TransmissionParams tp =
buildParams(hcan, packet); buildParams(hcan, &packet);
return send(&tp); return send(&tp);
} }
static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket packet) { static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket *packet) {
return (TransmissionParams) { return (TransmissionParams) {
.handle = hcan, .handle = hcan,
.packet = &packet, .packet = packet,
.headers.mmr = packet.header, .headers.mmr = packet->header,
.headers.tx = { .headers.tx = {
.IDE = CAN_ID_EXT, .IDE = CAN_ID_EXT,
.RTR = CAN_RTR_DATA, .RTR = CAN_RTR_DATA,
.DLC = packet.length, .DLC = packet->length,
.TransmitGlobalTime = DISABLE, .TransmitGlobalTime = DISABLE,
}, },
}; };
@@ -108,11 +112,19 @@ static HalStatus send(TransmissionParams *tp) {
tp->handle, tp->handle,
&tp->headers.tx, &tp->headers.tx,
tp->packet->data, tp->packet->data,
&__mailbox getNextMailbox()
); );
} }
static CanMailbox *getNextMailbox() {
__currentMailbox++;
__currentMailbox %= MAILBOXES_COUNT;
return __mailboxes + __currentMailbox;
}
static void syncHeaders(TransmissionParams *tp) { 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);
} }