Update header

This commit is contained in:
Nicola Gutierrez
2022-02-19 11:48:51 +01:00
parent 21b406a270
commit e26751d5d4
8 changed files with 53 additions and 17 deletions
+1
View File
@@ -165,6 +165,7 @@ CanFilterMask MMR_CAN_AlignStandardMask(CanFilterMask baseMask);
MmrCanFilterSettings MMR_CAN_GetDefaultFilterSettings();
HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet);
HalStatus MMR_CAN_SendNoTamper(CanHandle *hcan, MmrCanPacket packet);
HalStatus MMR_CAN_Receive(CanHandle *hcan, MmrCanMessage *result);
#endif /* INC_MMR_CAN_H_ */
+7
View File
@@ -18,6 +18,7 @@
* Constants with lower values have an higher priority.
*/
typedef enum {
MMR_CAN_MESSAGE_TYPE_SCS = B_(0000),
MMR_CAN_MESSAGE_TYPE_ACK = B_(0001),
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME = B_(0010),
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME_END = B_(0011),
@@ -62,6 +63,12 @@ uint32_t *MMR_CAN_HeaderToBits(MmrCanHeader *header);
*/
MmrCanHeader *MMR_CAN_HeaderFromBits(uint32_t *bits);
/**
* @brief
* Tells wether the given header represents an SCS.
*/
bool MMR_CAN_IsHeaderScs(MmrCanHeader header);
bool MMR_CAN_IsMultiFrame(MmrCanHeader *header);
bool MMR_CAN_IsMultiFrameEnd(MmrCanHeader *header);
-7
View File
@@ -47,13 +47,6 @@ uint8_t MMR_CAN_GetMessageIdSubtype(MmrCanMessageId msgId);
*/
bool MMR_CAN_IsMessageIdOfType(MmrCanMessageId msgId, MmrCanMessageIdType type);
/**
* @brief
* Tells wether the given message id is
* represents an SCS.
*/
bool MMR_CAN_IsMessageIdSCS(MmrCanMessageId msgId);
enum MmrCanMessageId {
// SCS
+6
View File
@@ -50,6 +50,12 @@ typedef enum {
bool MMR_CAN_MaybeHandleAck(MmrCanHeader header);
HalStatus MMR_CAN_HandleNextScs(CanHandle *hcan);
HalStatus MMR_CAN_SendAck(
CanHandle *hcan,
MmrCanHeader originalHeader
);
HalStatus MMR_CAN_SendScs(
CanHandle *hcan,
MmrCanMessageId scsId,
+4
View File
@@ -11,6 +11,10 @@ MmrCanHeader *MMR_CAN_HeaderFromBits(uint32_t *bits) {
}
bool MMR_CAN_IsHeaderScs(MmrCanHeader header) {
return header.messageType == MMR_CAN_MESSAGE_TYPE_SCS;
}
bool MMR_CAN_IsMultiFrame(MmrCanHeader *header) {
return header->messageType == MMR_CAN_MESSAGE_TYPE_MULTI_FRAME;
}
-6
View File
@@ -1,12 +1,6 @@
#include <stdint.h>
#include "mmr_can_message_id.h"
bool MMR_CAN_IsMessageIdSCS(MmrCanMessageId msgId) {
return MMR_CAN_IsMessageIdOfType(msgId, MMR_CAN_MESSAGE_ID_TYPE_SCS);
}
bool MMR_CAN_IsMessageIdOfType(
MmrCanMessageId msgId,
MmrCanMessageIdType type
+16 -3
View File
@@ -18,7 +18,7 @@ bool MMR_CAN_MaybeHandleAck(MmrCanHeader header) {
return false;
}
header.messageType = MMR_CAN_MESSAGE_TYPE_NORMAL;
header.messageType = MMR_CAN_MESSAGE_TYPE_SCS;
MmrCanScsEntry *entry = findEntry(header);
if (entry == NULL) {
return false;
@@ -29,6 +29,15 @@ bool MMR_CAN_MaybeHandleAck(MmrCanHeader header) {
}
HalStatus MMR_CAN_SendAck(
CanHandle *hcan,
MmrCanHeader originalHeader
) {
originalHeader.messageType = MMR_CAN_MESSAGE_TYPE_ACK;
return sendScs(hcan, originalHeader);
}
HalStatus MMR_CAN_SendScs(
CanHandle *hcan,
MmrCanMessageId scsId,
@@ -38,9 +47,13 @@ HalStatus MMR_CAN_SendScs(
.senderId = senderId,
.messageId = scsId,
.priority = MMR_CAN_MESSAGE_PRIORITY_HIGH,
.messageType = MMR_CAN_MESSAGE_TYPE_SCS,
};
putEntry(header);
if (putEntry(header) == NULL) {
return HAL_ERROR;
}
return sendScs(hcan, header);
}
@@ -68,7 +81,7 @@ HalStatus sendScs(CanHandle *hcan, MmrCanHeader header) {
.length = 0,
};
return MMR_CAN_Send(hcan, packet);
return MMR_CAN_SendNoTamper(hcan, packet);
}
+19 -1
View File
@@ -36,14 +36,32 @@ HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet) {
.TransmitGlobalTime = DISABLE,
},
};
syncHeaders(&tp);
syncHeaders(&tp);
return packet.length <= MMR_CAN_MAX_DATA_LENGTH
? sendNormal(&tp)
: sendMulti(&tp);
}
HalStatus MMR_CAN_SendNoTamper(CanHandle *hcan, MmrCanPacket packet) {
TransmissionParams tp = {
.handle = hcan,
.packet = &packet,
.headers.mmr = packet.header,
.headers.tx = {
.IDE = CAN_ID_EXT,
.RTR = CAN_RTR_DATA,
.DLC = packet.length,
.TransmitGlobalTime = DISABLE,
},
};
syncHeaders(&tp);
return send(&tp);
}
static HalStatus sendNormal(TransmissionParams *tp) {
setMessageType(tp, MMR_CAN_MESSAGE_TYPE_NORMAL);
return send(tp);