From 906dfcd3dba5021ae8fa0dbd52742532a4b727ec Mon Sep 17 00:00:00 2001 From: Stefano Calabretti <45517710+cala-br@users.noreply.github.com> Date: Sat, 29 Jan 2022 13:27:37 +0100 Subject: [PATCH] Update header (#9) * Add ack message type * Rename dictionaryEntry to messageId * Refactor * Map message ids --- Inc/mmr_can_header.h | 5 ++-- Inc/mmr_can_message_id.h | 63 ++++++++++++++++++++++++++++++++++++++++ Src/mmr_can_message_id.c | 23 +++++++++++++++ Src/mmr_can_send.c | 1 + 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 Inc/mmr_can_message_id.h create mode 100644 Src/mmr_can_message_id.c diff --git a/Inc/mmr_can_header.h b/Inc/mmr_can_header.h index c148cce..7a5cf88 100644 --- a/Inc/mmr_can_header.h +++ b/Inc/mmr_can_header.h @@ -4,6 +4,7 @@ #include #include "mmr_can_util.h" #include "mmr_can_binary_literals.h" +#include "mmr_can_message_id.h" /** * @brief @@ -18,13 +19,13 @@ * messages have a higher priority over normal ones */ typedef enum { + MMR_CAN_MESSAGE_ACK = B_(0001), MMR_CAN_MESSAGE_TYPE_MULTI_FRAME = B_(0010), MMR_CAN_MESSAGE_TYPE_MULTI_FRAME_END = B_(0011), MMR_CAN_MESSAGE_TYPE_NORMAL = B_(1000), } MmrCanMessageType; - typedef enum { MMR_CAN_MESSAGE_PRIORITY_LOW = B_(0010), MMR_CAN_MESSAGE_PRIORITY_NORMAL = B_(0001), @@ -39,7 +40,7 @@ typedef enum { */ typedef struct { MmrCanMessagePriority priority : 3; - uint32_t dictionaryEntry : 10; + MmrCanMessageId messageId : 10; uint32_t senderId : 12; MmrCanMessageType messageType : 4; } MmrCanHeader; diff --git a/Inc/mmr_can_message_id.h b/Inc/mmr_can_message_id.h new file mode 100644 index 0000000..68d1082 --- /dev/null +++ b/Inc/mmr_can_message_id.h @@ -0,0 +1,63 @@ +#ifndef INC_MMR_CAN_MESSAGE_ID_H_ +#define INC_MMR_CAN_MESSAGE_ID_H_ + +#include +#include "mmr_can_binary_literals.h" + +/** + * @brief + * Message ids are 10 bits wide + * The first 3 bits determine the message id type, while + * the other 7 determine the subtype. + * + * Ids scheme: + * + * id | type | subtype + * -----|------|--------- + * SCS | 000 | xxxxxxx + */ +typedef enum MmrCanMessageId MmrCanMessageId; + +typedef enum { + MMR_CAN_MESSAGE_ID_TYPE_SCS = 0, +} MmrCanMessageIdType; + + +uint8_t MMR_CAN_GetMessageIdType(MmrCanMessageId msgId); +uint8_t MMR_CAN_GetMessageIdSubtype(MmrCanMessageId msgId); + +bool MMR_CAN_IsMessageIdOfType(MmrCanMessageId msgId, MmrCanMessageIdType type); +bool MMR_CAN_IsMessageIdSCS(MmrCanMessageId msgId); + + +enum MmrCanMessageId { +// SCS + MMR_CAN_MESSAGE_ID_SCS_PPA = 0x1, + MMR_CAN_MESSAGE_ID_SCS_PLF, + MMR_CAN_MESSAGE_ID_SCS_LV12, + MMR_CAN_MESSAGE_ID_SCS_LV24, + MMR_CAN_MESSAGE_ID_SCS_PF, + MMR_CAN_MESSAGE_ID_SCS_FRBPS, + MMR_CAN_MESSAGE_ID_SCS_EBS, + MMR_CAN_MESSAGE_ID_SCS_APPS, + MMR_CAN_MESSAGE_ID_SCS_TPS, + + MMR_CAN_MESSAGE_ID_SCS_AS_R2D, + MMR_CAN_MESSAGE_ID_SCS_AS_TS, + MMR_CAN_MESSAGE_ID_SCS_AS_FINISHED, + MMR_CAN_MESSAGE_ID_SCS_AS_EMERGENCY, + MMR_CAN_MESSAGE_ID_SCS_AS_READY, + MMR_CAN_MESSAGE_ID_SCS_AS_DRIVING, + MMR_CAN_MESSAGE_ID_SCS_AS_OFF, + + MMR_CAN_MESSAGE_ID_SCS_AM_MANUAL_DRIVING, + MMR_CAN_MESSAGE_ID_SCS_AM_ACCELERATION, + MMR_CAN_MESSAGE_ID_SCS_AM_SKIDPAD, + MMR_CAN_MESSAGE_ID_SCS_AM_AUTOCROSS, + MMR_CAN_MESSAGE_ID_SCS_AM_TRACKDRIVE, + MMR_CAN_MESSAGE_ID_SCS_AM_EBS_TEST, + MMR_CAN_MESSAGE_ID_SCS_AM_INSPECTION = 0x17, +// !SCS +}; + +#endif // !INC_MMR_CAN_MESSAGE_ID_H_ diff --git a/Src/mmr_can_message_id.c b/Src/mmr_can_message_id.c new file mode 100644 index 0000000..d224d92 --- /dev/null +++ b/Src/mmr_can_message_id.c @@ -0,0 +1,23 @@ +#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 +) { + return MMR_CAN_GetMessageIdType(msgId) == type; +} + + +uint8_t MMR_CAN_GetMessageIdType(MmrCanMessageId msgId) { + return msgId >> 7; +} + +uint8_t MMR_CAN_GetMessageIdSubtype(MmrCanMessageId msgId) { + return msgId & B8_(0111, 1111); +} diff --git a/Src/mmr_can_send.c b/Src/mmr_can_send.c index 1c06ba8..4e02a7d 100644 --- a/Src/mmr_can_send.c +++ b/Src/mmr_can_send.c @@ -23,6 +23,7 @@ static uint8_t computeNextMessageLength(MmrCanPacket *packet); static void setMessageType(TransmissionParams *header, MmrCanMessageType type); static void syncHeaders(TransmissionParams *tp); + HalStatus MMR_CAN_Send(CanHandle *hcan, MmrCanPacket packet) { TransmissionParams tp = { .handle = hcan,