Bugfix #12
+2
-1
@@ -1,2 +1,3 @@
|
|||||||
!.vscode/settings.json
|
!.vscode/settings.json
|
||||||
.vscode
|
.vscode
|
||||||
|
.DS_Store
|
||||||
+21
-9
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user