Merge branch 'master' of https://git.rd12.ru/Templates/SETCAN
This commit is contained in:
@@ -11,8 +11,8 @@
|
||||
#define OFFLINE 0;
|
||||
|
||||
#define ID_MAIN_DEVICE 0x000
|
||||
#define CURRENT_TYPE_DEVICE 0b001
|
||||
#define CURRENT_ID_DEVICE 0b0010
|
||||
#define CURRENT_TYPE_DEVICE 0b111
|
||||
#define CURRENT_ID_DEVICE 0b1111
|
||||
|
||||
#define PROTOCAN_RX_BUFFER_SIZE 128
|
||||
|
||||
@@ -81,9 +81,49 @@ typedef enum {
|
||||
PROTOCAN_MSGTYPE_MODBUS_HOLDING = 0b0110, /**< Сообщение Modbus - Holding. */
|
||||
PROTOCAN_MSGTYPE_MODBUS_INPUT = 0b0111, /**< Сообщение Modbus - Input. */
|
||||
PROTOCAN_MSGTYPE_ERROR = 0b1000, /**< Сообщение об ошибке. */
|
||||
PROTOCAN_MSGTYPE_SETTINGS = 0b1110, /**< Привязка датчика к локации. */
|
||||
PROTOCAN_MSGTYPE_PULSE = 0b1111, /**< Импульсное сообщение. */
|
||||
}ProtoCanMsgType;
|
||||
|
||||
/** Длина ROM-кода 1-Wire и payload успешного ответа SETTINGS. */
|
||||
#define PROTOCAN_SETTINGS_ROM_SIZE 8U
|
||||
|
||||
/** Фиксированные базы выбранного DeviceType=0x7, DeviceID=0xF, MsgType=0xE. */
|
||||
#define PROTOCAN_SETTINGS_REQUEST_BASE_ID 0x17FE0000UL
|
||||
#define PROTOCAN_SETTINGS_RESPONSE_BASE_ID 0x1FFE0000UL
|
||||
#define PROTOCAN_SETTINGS_HEADER_MASK 0x1FFF0000UL
|
||||
|
||||
/** Операции SETTINGS, определяемые по направлению, DLC и payload. */
|
||||
typedef enum {
|
||||
PROTOCAN_SETTINGS_GET = 0,
|
||||
PROTOCAN_SETTINGS_WRITE = 1,
|
||||
PROTOCAN_SETTINGS_CLEAR = 2,
|
||||
PROTOCAN_SETTINGS_RESPONSE = 3,
|
||||
PROTOCAN_SETTINGS_ERROR = 4,
|
||||
PROTOCAN_SETTINGS_INVALID = 5
|
||||
} ProtoCanSettingsOperationType;
|
||||
|
||||
/** Коды результата SETTINGS в ответе с DLC=1. */
|
||||
typedef enum {
|
||||
PROTOCAN_SETTINGS_RESULT_OK = 0x00U,
|
||||
PROTOCAN_SETTINGS_RESULT_INVALID_DLC = 0x01U,
|
||||
PROTOCAN_SETTINGS_RESULT_INVALID_ROM_CRC = 0x02U,
|
||||
PROTOCAN_SETTINGS_RESULT_NOT_FOUND = 0x03U,
|
||||
PROTOCAN_SETTINGS_RESULT_ALREADY_ASSIGNED = 0x04U,
|
||||
PROTOCAN_SETTINGS_RESULT_EEPROM_ERROR = 0x05U,
|
||||
PROTOCAN_SETTINGS_RESULT_INVALID_LOCATION = 0x06U,
|
||||
PROTOCAN_SETTINGS_RESULT_BUSY = 0x07U
|
||||
} ProtoCanSettingsResultType;
|
||||
|
||||
/** Разобранная команда SETTINGS с локацией и ROM. */
|
||||
typedef struct {
|
||||
ProtoCanSettingsOperationType Operation;
|
||||
uint8_t AssemblySerial; /**< Body[15:8], номер сборки Z. */
|
||||
uint8_t Position; /**< Body[7:0], позиция Y. */
|
||||
ProtoCanSettingsResultType Result;
|
||||
uint8_t Rom[PROTOCAN_SETTINGS_ROM_SIZE];
|
||||
} ProtoCanSettingsMsg_t;
|
||||
|
||||
/**
|
||||
* @brief Типы широковещательных сообщений CAN.
|
||||
*
|
||||
@@ -240,6 +280,10 @@ typedef struct{
|
||||
uint16_t Info;
|
||||
uint16_t Code;
|
||||
} ErrorData;
|
||||
struct ProtoCanSettingsData{
|
||||
const uint8_t *Data;
|
||||
uint8_t DataCount;
|
||||
} SettingsData;
|
||||
} ProtoCanData_t;
|
||||
|
||||
/**
|
||||
@@ -307,6 +351,29 @@ PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogUSens(struct RXMsg _rxMsg);
|
||||
PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogISens(struct RXMsg _rxMsg);
|
||||
PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogTSens(struct RXMsg _rxMsg);
|
||||
|
||||
/** Разбирает запрос SETTINGS и вызывает прикладной обработчик. */
|
||||
PROTOCAN_StatusTypeDef PROTOCAN_SettingsProcessing(struct RXMsg _rxMsg);
|
||||
|
||||
/**
|
||||
* Прикладной обработчик GET/WRITE/CLEAR. Приложение должно переопределить
|
||||
* слабую реализацию и после проверки датчика/EEPROM отправить ответ или ошибку.
|
||||
*/
|
||||
PROTOCAN_StatusTypeDef ProtoCanMsgToSettings(const ProtoCanSettingsMsg_t *message);
|
||||
|
||||
/** Отправляет произвольный SETTINGS-кадр с уже заполненным Body. */
|
||||
PROTOCAN_StatusTypeDef PROTOCAN_SEND_SETTINGS(ProtoCanId_t id,
|
||||
const struct ProtoCanSettingsData data);
|
||||
|
||||
/** Отправляет успешный ответ 0x1FFEZZYY, DLC=8, с текущим ROM локации. */
|
||||
PROTOCAN_StatusTypeDef PROTOCAN_SEND_SETTINGS_RESPONSE(uint8_t assemblySerial,
|
||||
uint8_t position,
|
||||
const uint8_t *rom);
|
||||
|
||||
/** Отправляет ошибку 0x1FFEZZYY, DLC=1, Data[0]=result. */
|
||||
PROTOCAN_StatusTypeDef PROTOCAN_SEND_SETTINGS_ERROR(uint8_t assemblySerial,
|
||||
uint8_t position,
|
||||
ProtoCanSettingsResultType result);
|
||||
|
||||
PROTOCAN_StatusTypeDef ProtoCanMsgToGeneralAddressSpace(struct RXMsg _rxMsg);
|
||||
|
||||
PROTOCAN_StatusTypeDef PROTOCAN_RequestError(struct RXMsg _rxMsg);
|
||||
|
||||
Reference in New Issue
Block a user