Подключить ProtoCAN из общего SETProtocol

This commit is contained in:
2026-09-01 11:50:08 +03:00
parent ab60e58318
commit c8eec55978
5 changed files with 84 additions and 40 deletions

View File

@@ -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.
*