Update header
This commit is contained in:
@@ -165,6 +165,7 @@ CanFilterMask MMR_CAN_AlignStandardMask(CanFilterMask baseMask);
|
|||||||
MmrCanFilterSettings MMR_CAN_GetDefaultFilterSettings();
|
MmrCanFilterSettings MMR_CAN_GetDefaultFilterSettings();
|
||||||
|
|
||||||
HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet);
|
HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet);
|
||||||
|
HalStatus MMR_CAN_SendNoTamper(CanHandle *hcan, MmrCanPacket packet);
|
||||||
HalStatus MMR_CAN_Receive(CanHandle *hcan, MmrCanMessage *result);
|
HalStatus MMR_CAN_Receive(CanHandle *hcan, MmrCanMessage *result);
|
||||||
|
|
||||||
#endif /* INC_MMR_CAN_H_ */
|
#endif /* INC_MMR_CAN_H_ */
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
* Constants with lower values have an higher priority.
|
* Constants with lower values have an higher priority.
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
MMR_CAN_MESSAGE_TYPE_SCS = B_(0000),
|
||||||
MMR_CAN_MESSAGE_TYPE_ACK = B_(0001),
|
MMR_CAN_MESSAGE_TYPE_ACK = B_(0001),
|
||||||
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME = B_(0010),
|
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME = B_(0010),
|
||||||
MMR_CAN_MESSAGE_TYPE_MULTI_FRAME_END = B_(0011),
|
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);
|
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_IsMultiFrame(MmrCanHeader *header);
|
||||||
bool MMR_CAN_IsMultiFrameEnd(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);
|
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 {
|
enum MmrCanMessageId {
|
||||||
// SCS
|
// SCS
|
||||||
|
|||||||
@@ -50,6 +50,12 @@ typedef enum {
|
|||||||
|
|
||||||
bool MMR_CAN_MaybeHandleAck(MmrCanHeader header);
|
bool MMR_CAN_MaybeHandleAck(MmrCanHeader header);
|
||||||
HalStatus MMR_CAN_HandleNextScs(CanHandle *hcan);
|
HalStatus MMR_CAN_HandleNextScs(CanHandle *hcan);
|
||||||
|
|
||||||
|
HalStatus MMR_CAN_SendAck(
|
||||||
|
CanHandle *hcan,
|
||||||
|
MmrCanHeader originalHeader
|
||||||
|
);
|
||||||
|
|
||||||
HalStatus MMR_CAN_SendScs(
|
HalStatus MMR_CAN_SendScs(
|
||||||
CanHandle *hcan,
|
CanHandle *hcan,
|
||||||
MmrCanMessageId scsId,
|
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) {
|
bool MMR_CAN_IsMultiFrame(MmrCanHeader *header) {
|
||||||
return header->messageType == MMR_CAN_MESSAGE_TYPE_MULTI_FRAME;
|
return header->messageType == MMR_CAN_MESSAGE_TYPE_MULTI_FRAME;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "mmr_can_message_id.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(
|
bool MMR_CAN_IsMessageIdOfType(
|
||||||
MmrCanMessageId msgId,
|
MmrCanMessageId msgId,
|
||||||
MmrCanMessageIdType type
|
MmrCanMessageIdType type
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ bool MMR_CAN_MaybeHandleAck(MmrCanHeader header) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
header.messageType = MMR_CAN_MESSAGE_TYPE_NORMAL;
|
header.messageType = MMR_CAN_MESSAGE_TYPE_SCS;
|
||||||
MmrCanScsEntry *entry = findEntry(header);
|
MmrCanScsEntry *entry = findEntry(header);
|
||||||
if (entry == NULL) {
|
if (entry == NULL) {
|
||||||
return false;
|
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(
|
HalStatus MMR_CAN_SendScs(
|
||||||
CanHandle *hcan,
|
CanHandle *hcan,
|
||||||
MmrCanMessageId scsId,
|
MmrCanMessageId scsId,
|
||||||
@@ -38,9 +47,13 @@ HalStatus MMR_CAN_SendScs(
|
|||||||
.senderId = senderId,
|
.senderId = senderId,
|
||||||
.messageId = scsId,
|
.messageId = scsId,
|
||||||
.priority = MMR_CAN_MESSAGE_PRIORITY_HIGH,
|
.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);
|
return sendScs(hcan, header);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +81,7 @@ HalStatus sendScs(CanHandle *hcan, MmrCanHeader header) {
|
|||||||
.length = 0,
|
.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,
|
.TransmitGlobalTime = DISABLE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
syncHeaders(&tp);
|
|
||||||
|
|
||||||
|
syncHeaders(&tp);
|
||||||
return packet.length <= MMR_CAN_MAX_DATA_LENGTH
|
return packet.length <= MMR_CAN_MAX_DATA_LENGTH
|
||||||
? sendNormal(&tp)
|
? sendNormal(&tp)
|
||||||
: sendMulti(&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) {
|
static HalStatus sendNormal(TransmissionParams *tp) {
|
||||||
setMessageType(tp, MMR_CAN_MESSAGE_TYPE_NORMAL);
|
setMessageType(tp, MMR_CAN_MESSAGE_TYPE_NORMAL);
|
||||||
return send(tp);
|
return send(tp);
|
||||||
|
|||||||
Reference in New Issue
Block a user