Подключить ProtoCAN из общего SETProtocol
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#define _protocan
|
||||
#include "main.h"
|
||||
#include "can.h"
|
||||
#include "../third_party/templates/c/set-protocol/include/pcan_id.h"
|
||||
|
||||
#define _DEMO
|
||||
|
||||
@@ -259,6 +260,38 @@ typedef union{
|
||||
unsigned int BitAll:29; /**< Общее представление 29-битного идентификатора. */
|
||||
} ProtoCanId_t;
|
||||
|
||||
/**
|
||||
* Переходная граница legacy API -> переносимый формат линии.
|
||||
*
|
||||
* Прикладной код SETCAN пока может заполнять исторические Fields, но CAN ID
|
||||
* всегда собирается и разбирается общим pcan_id без зависимости от порядка
|
||||
* битовых полей конкретного компилятора.
|
||||
*/
|
||||
static inline uint32_t PROTOCAN_IdPack(const ProtoCanId_t *legacy)
|
||||
{
|
||||
pcan_id_t shared;
|
||||
shared.msg_body = (uint16_t)legacy->Fields.MsgBody;
|
||||
shared.msg_type = (uint8_t)legacy->Fields.MsgType;
|
||||
shared.device_id = (uint8_t)legacy->Fields.DeviceID;
|
||||
shared.device_type = (uint8_t)legacy->Fields.DeviceType;
|
||||
shared.route = (uint8_t)legacy->Fields.Route;
|
||||
shared.priority = (uint8_t)legacy->Fields.Priority;
|
||||
return pcan_id_pack(&shared);
|
||||
}
|
||||
|
||||
static inline void PROTOCAN_IdUnpack(uint32_t raw, ProtoCanId_t *legacy)
|
||||
{
|
||||
pcan_id_t shared;
|
||||
pcan_id_unpack(raw, &shared);
|
||||
legacy->BitAll = 0U;
|
||||
legacy->Fields.MsgBody = shared.msg_body;
|
||||
legacy->Fields.MsgType = (ProtoCanMsgType)shared.msg_type;
|
||||
legacy->Fields.DeviceID = shared.device_id;
|
||||
legacy->Fields.DeviceType = shared.device_type;
|
||||
legacy->Fields.Route = (ProtoCanRouteType)shared.route;
|
||||
legacy->Fields.Priority = (ProtoCanPriorityType)shared.priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Структура для общего адресного пространства CAN.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user