* 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
+2 -1
View File
@@ -1,2 +1,3 @@
!.vscode/settings.json
.vscode
.vscode
.DS_Store
+21 -9
View File
@@ -14,7 +14,7 @@ typedef struct {
} TransmissionParams;
static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket packet);
static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket *packet);
static HalStatus send(TransmissionParams *tp);
static HalStatus sendNormal(TransmissionParams *tp);
static HalStatus sendMulti(TransmissionParams *tp);
@@ -23,14 +23,18 @@ static uint8_t computeFramesToSend(MmrCanPacket *packet);
static uint8_t computeNextMessageLength(MmrCanPacket *packet);
static void setMessageType(TransmissionParams *header, MmrCanMessageType type);
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) {
TransmissionParams tp =
buildParams(hcan, packet);
buildParams(hcan, &packet);
syncHeaders(&tp);
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) {
TransmissionParams tp =
buildParams(hcan, packet);
buildParams(hcan, &packet);
return send(&tp);
}
static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket packet) {
static TransmissionParams buildParams(CanHandle *hcan, MmrCanPacket *packet) {
return (TransmissionParams) {
.handle = hcan,
.packet = &packet,
.headers.mmr = packet.header,
.packet = packet,
.headers.mmr = packet->header,
.headers.tx = {
.IDE = CAN_ID_EXT,
.RTR = CAN_RTR_DATA,
.DLC = packet.length,
.DLC = packet->length,
.TransmitGlobalTime = DISABLE,
},
};
@@ -108,11 +112,19 @@ static HalStatus send(TransmissionParams *tp) {
tp->handle,
&tp->headers.tx,
tp->packet->data,
&__mailbox
getNextMailbox()
);
}
static CanMailbox *getNextMailbox() {
__currentMailbox++;
__currentMailbox %= MAILBOXES_COUNT;
return __mailboxes + __currentMailbox;
}
static void syncHeaders(TransmissionParams *tp) {
tp->headers.tx.ExtId = MMR_CAN_HeaderToBits(tp->headers.mmr);
}