manually merged with ARM version
This commit is contained in:
270
x502/lboot_req.h
Normal file
270
x502/lboot_req.h
Normal file
@ -0,0 +1,270 @@
|
||||
/***************************************************************************//**
|
||||
@file lcspec.h
|
||||
|
||||
Файл содержит константы и типы, которые использует как загрузчик lboot,
|
||||
так и приложение:
|
||||
- константы и типы для запроса на перепрошивку со стороны application
|
||||
- константы и типы для определения информации о прошивке, которая хранится
|
||||
внутри прошивки и проверяется bootloader'ом
|
||||
|
||||
!!Файл должен быть один (или одинаковый) для обоих проектов!!
|
||||
|
||||
@date 16.11.2010
|
||||
@author: Borisov Alexey <borisov@lcard.ru>
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef LBOOT_REQ_H_
|
||||
#define LBOOT_REQ_H_
|
||||
|
||||
|
||||
/** адрес, по которому должен быть сформирован запрос на перепрошивку */
|
||||
#define LBOOT_REQ_ADDR 0x10000000
|
||||
/** Адрес, начиная с кторого хранится информация о загрузчике */
|
||||
#define LBOOT_INFO_ADDR 0x200
|
||||
|
||||
/******************* размеры полей ***************************************/
|
||||
#define LBOOT_DEVNAME_SIZE 32
|
||||
#define LBOOT_SERIAL_SIZE 32
|
||||
#define LBOOT_SOFTVER_SIZE 32
|
||||
#define LBOOT_REVISION_SIZE 16
|
||||
#define LBOOT_IMPLEMENTATION_SIZE 16
|
||||
#define LBOOT_SPECINFO_SIZE 64
|
||||
|
||||
#define LBOOT_MAC_ADDR_SIZE 6
|
||||
|
||||
#define LBOOT_REQ_MAX_FILENAME_SIZE 256
|
||||
#define LBOOT_REQ_MAX_SIZE 4096
|
||||
|
||||
|
||||
/** различные коды режимов загрузки */
|
||||
#define LBOOT_BOOTMODE_MODBUS_RTU 0x100
|
||||
#define LBOOT_BOOTMODE_TFTP_CLIENT 0x200
|
||||
#define LBOOT_BOOTMODE_TFTP_SERVER 0x201
|
||||
#define LBOOT_BOOTMODE_USB 0x300
|
||||
#define LBOOT_BOOTMODE_CAN_LSS 0x400
|
||||
|
||||
#define LBOOT_BOOTMODE_TFTP LBOOT_BOOTMODE_TFTP_CLIENT
|
||||
|
||||
//режим работы устройства (application/bootloader) - в modbus сразу за device info
|
||||
#define LBOOT_MODE_BOOT 0x1
|
||||
#define LBOOT_MODE_APPL 0x2
|
||||
|
||||
#define LBOOT_TFTP_FLAGS_PACKED 0x2
|
||||
|
||||
|
||||
#define LBOOT_SEED_CODE_NOSIGN 0xFFAA5500
|
||||
|
||||
|
||||
/** признак, находящийся в информации о прошивке, по которому можно узнать
|
||||
наличие этой информации. Признак означает, что поддерживается защита этой
|
||||
информации CRC */
|
||||
#define LBOOT_INFO_SIGNATURE 0x4C42A55A
|
||||
|
||||
|
||||
|
||||
/** общие для всех интерфейсов флаги, определяющие поведение загрузчика */
|
||||
typedef enum {
|
||||
/** - при активном запросе прошивки (tftp) - признак,
|
||||
что перезависывется резервная копия, а не основная прошивка
|
||||
- при пассивном приеме (mbrtu, usb, can_lss) - признак,
|
||||
что разрешено перезаписывать резервную копию */
|
||||
LBOOT_REQ_FLAGS_RECOVERY_WR = 0x01,
|
||||
/** признак, что не нужно сверять имя устройства в прошивке */
|
||||
LBOOT_REQ_FLAGS_DONT_CHECK_NAME = 0x02,
|
||||
/** не проверять, что записывается стабильная прошивка (установлен флаг
|
||||
#LBOOT_APP_FLAGS_STABLE в информации о прошивке)*/
|
||||
LBOOT_REQ_FLAGS_DONT_CHECK_STABLE = 0x04,
|
||||
/** разрешение записывать прошивку для разработчика (с установленным флагом
|
||||
#LBOOT_APP_FLAGS_DEVELOP в информации о прошивке)*/
|
||||
LBOOT_REQ_FLAGS_ENABLE_DEVELOP = 0x08,
|
||||
/** разрешение записи прошивки без подписи (если поддерживается загрузчиком) */
|
||||
LBOOT_REQ_FLAGS_ENABLE_NO_SIGN = 0x10
|
||||
} t_lboot_req_flags;
|
||||
|
||||
/** флаги из #t_app_info */
|
||||
typedef enum {
|
||||
/** признак, что прошивка стабильная */
|
||||
LBOOT_APP_FLAGS_STABLE = 0x1,
|
||||
/** признак, что это прошивка для разработчиков */
|
||||
LBOOT_APP_FLAGS_DEVELOP = 0x2
|
||||
} t_lboot_app_flags;
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma pack(1)
|
||||
/** Информация о программе, содержащаяся в прошивке */
|
||||
struct st_app_info {
|
||||
uint32_t size; /**< размер информции о прошивке */
|
||||
uint32_t flags; /**< флаги */
|
||||
/** название устройства, для которого предназначена прошивка*/
|
||||
char devname[LBOOT_DEVNAME_SIZE];
|
||||
};
|
||||
typedef struct st_app_info t_app_info;
|
||||
|
||||
|
||||
|
||||
|
||||
/** Информация о загрузчике, находящаяся непосредственно
|
||||
в коде самого загрузчика */
|
||||
struct lboot_info_st {
|
||||
/** версия загрузчика (младший байт - минорная, старший - мажорная) */
|
||||
uint16_t ver;
|
||||
uint16_t flags; /**< флаги - резерв */
|
||||
/** серийный номер устройства */
|
||||
char serial[LBOOT_SERIAL_SIZE];
|
||||
uint8_t mac[6]; /**< mac-адрес устройства */
|
||||
/** ревизия платы (если вшита в загрузчик)*/
|
||||
char brd_revision[LBOOT_REVISION_SIZE];
|
||||
/** модификация (если вшита в загрузчик)*/
|
||||
char brd_impl[LBOOT_IMPLEMENTATION_SIZE];
|
||||
char creation_date[18]; /**< дата создания загрузчика */
|
||||
/** признак, что эта структура действительна (только с v1.3) */
|
||||
uint32_t sign;
|
||||
/** размер структуры (включая два байта crc)
|
||||
- для определения положения crc */
|
||||
uint32_t size;
|
||||
char devname[LBOOT_DEVNAME_SIZE];
|
||||
/** поддерживаемые возможности загрузчика */
|
||||
uint32_t features;
|
||||
uint32_t reserv;
|
||||
uint8_t ip_addr[4]; /**< ip-адрес устройства по-умолчанию */
|
||||
uint8_t ip_mask[4]; /**< маска устройства по-умолчанию */
|
||||
uint8_t gate[4]; /**< адрес шлюза по-умолчанию */
|
||||
/** crc (но при проверке следует брать ее не отсюда,
|
||||
а по адресу = адрес начала структуры + size - 2) */
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct lboot_info_st t_lboot_info;
|
||||
|
||||
/** информация о устройстве и прошивке */
|
||||
struct lboot_devinfo_st {
|
||||
char devname[LBOOT_DEVNAME_SIZE]; /**< название устройства */
|
||||
char serial[LBOOT_SERIAL_SIZE]; /**< серийный номер */
|
||||
char soft_ver[LBOOT_SOFTVER_SIZE]; /**< версия прошивки */
|
||||
char brd_revision[LBOOT_REVISION_SIZE]; /**< ревизия платы */
|
||||
char brd_impl[LBOOT_IMPLEMENTATION_SIZE]; /**< опции платы */
|
||||
char spec_info[LBOOT_SPECINFO_SIZE]; /**< резерв */
|
||||
};
|
||||
typedef struct lboot_devinfo_st t_lboot_devinfo;
|
||||
|
||||
|
||||
/** стандартный заголовок запроса на перепрошивку */
|
||||
struct lboot_params_hdr_st {
|
||||
uint32_t size; /**< размер структуры запроса (включая
|
||||
специфические для интерфейса данные и crc) */
|
||||
uint32_t bootmode; /**< режим загрузки - определяет интерфейс */
|
||||
uint32_t flags; /**< общие флаги */
|
||||
uint32_t timeout; /**< таймаут в мс - сколько загрузчик будет ожидать
|
||||
запроса на перепрошивку (0 - бесконечно) */
|
||||
uint32_t reserv[2]; /**< резерв */
|
||||
t_lboot_devinfo devinfo; /**< информация о устройстве и прошивке */
|
||||
};
|
||||
typedef struct lboot_params_hdr_st t_lboot_params_hdr;
|
||||
|
||||
|
||||
//специфические для tftp параметры
|
||||
struct st_lboot_specpar_tftp {
|
||||
uint16_t flags; //спец флаги (резерв)
|
||||
uint16_t server_port;
|
||||
uint8_t mac[6]; //mac-адрес
|
||||
uint8_t l_ip[4]; //свой ip-адрес
|
||||
uint8_t mask[4]; //mask - маска сети
|
||||
uint8_t gate[4]; //адрес шлюза
|
||||
uint8_t r_ip[4]; //адрес сервера tftp
|
||||
char filename[LBOOT_REQ_MAX_FILENAME_SIZE]; //имя файла с прошивкой
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct st_lboot_specpar_tftp t_lboot_specpar_tftp;
|
||||
|
||||
//параметры для запроса прошивки по tftp
|
||||
struct st_lboot_params_tftp {
|
||||
t_lboot_params_hdr hdr;
|
||||
uint16_t tftp_flags; //спец флаги (резерв)
|
||||
uint16_t server_port;
|
||||
uint8_t mac[6]; //mac-адрес
|
||||
uint8_t l_ip[4]; //свой ip-адрес
|
||||
uint8_t mask[4]; //mask - маска сети
|
||||
uint8_t gate[4]; //адрес шлюза
|
||||
uint8_t r_ip[4]; //адрес сервера tftp
|
||||
char filename[LBOOT_REQ_MAX_FILENAME_SIZE]; //имя файла с прошивкой
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct st_lboot_params_tftp t_lboot_params_tftp;
|
||||
|
||||
|
||||
|
||||
struct st_lboot_specpar_modbus_rtu {
|
||||
uint16_t flags ; //спец флаги
|
||||
uint8_t addr ; //адрес устройства в modbus сети
|
||||
uint8_t parity ;
|
||||
uint16_t res ;
|
||||
uint32_t baud_rate; //скорость передачи по rs-485/232
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct st_lboot_specpar_modbus_rtu t_lboot_specpar_modbus_rtu;
|
||||
|
||||
//параметры для перепрошивки по Modbus RTU
|
||||
struct st_lboot_params_modbus_rtu {
|
||||
t_lboot_params_hdr hdr ;
|
||||
uint16_t flags ; //спец флаги
|
||||
uint8_t addr ; //адрес устройства в modbus сети
|
||||
uint8_t parity ;
|
||||
uint16_t res ;
|
||||
uint32_t baud_rate; //скорость передачи по rs-485/232
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct st_lboot_params_modbus_rtu t_lboot_params_modbus_rtu;
|
||||
|
||||
|
||||
|
||||
struct st_lboot_specpar_usb {
|
||||
uint16_t flags ; //спец флаги
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct st_lboot_specpar_usb t_lboot_specpar_usb;
|
||||
|
||||
//параметры для перепрошивки по USB
|
||||
struct st_lboot_params_usb {
|
||||
t_lboot_params_hdr hdr ;
|
||||
uint16_t flags ; //спец флаги
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct st_lboot_params_usb t_lboot_params_usb;
|
||||
|
||||
struct st_lboot_specpar_can_lss {
|
||||
uint16_t flags;
|
||||
uint8_t br_index; /* BaudRate Index */
|
||||
uint8_t res;
|
||||
uint32_t vid;
|
||||
uint32_t pid;
|
||||
uint32_t rev;
|
||||
uint16_t crc;
|
||||
};
|
||||
typedef struct st_lboot_specpar_can_lss t_lboot_specpar_can_lss;
|
||||
|
||||
struct st_lboot_params_can_lss {
|
||||
t_lboot_params_hdr hdr;
|
||||
t_lboot_specpar_can_lss can;
|
||||
};
|
||||
typedef struct st_lboot_params_can_lss t_lboot_params_can_lss;
|
||||
|
||||
|
||||
|
||||
struct st_lboot_params {
|
||||
t_lboot_params_hdr hdr ;
|
||||
union {
|
||||
t_lboot_specpar_tftp tftp;
|
||||
t_lboot_specpar_modbus_rtu mbrtu;
|
||||
t_lboot_specpar_usb usb;
|
||||
t_lboot_specpar_can_lss can;
|
||||
};
|
||||
};
|
||||
typedef struct st_lboot_params t_lboot_params;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* LBOOT_REQ_H_ */
|
||||
Reference in New Issue
Block a user