Update header
This commit is contained in:
@@ -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_ */
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user