Files
kunlun/driver/extern/virtualchannel/inc/vc_commands.h
2024-09-28 14:24:04 +08:00

262 lines
8.5 KiB
C

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef _VC_COMMANDS_H_
#define _VC_COMMANDS_H_
/**
* @brief vc_cmd_cid_e - List of commands id.
* Request:
* VC_CID_REQUEST_STATUS - K68 get status of stm32.
* VC_CID_REQUEST_FW_INFO - K68 get firmware version of stm32.
* VC_CID_REQUEST_USB_ENA - K68 enable/disable USB port of stm32.
* VC_CID_REQUEST_STATISTIC - K68 get statistics of all channels on stm32.
* VC_CID_REQUEST_DEBUG_ENA - K68 enable/disable debug information of stm32.
* Response:
* VC_CID_RESPONSE_STATUS - Stm32 response its status.
* VC_CID_RESPONSE_FW_INFO - Stm32 response version of frmware.
* VC_CID_RESPONSE_USB_ENA - Stm32 response the enable/disable status of USB port.
* VC_CID_RESPONSE_STATISTIC - Stm32 response the statistics of all channels.
* VC_CID_RESPONSE_STATUS - Stm32 response the enable/disable status of debug.
* VC_CID_RESPONSE_DEBUG_REPT - Stm32 report the debug information.
*/
typedef enum _vc_command_id_list_e_ {
VC_CID_REQUEST_STATUS = 0x00,
VC_CID_REQUEST_FW_INFO = 0x01,
VC_CID_REQUEST_USB_ENA = 0x02,
VC_CID_REQUEST_STATISTIC = 0x03,
VC_CID_REQUEST_DEBUG_ENA = 0x7D,
VC_CID_RESPONSE_STATUS = 0x80,
VC_CID_RESPONSE_FW_INFO = 0x81,
VC_CID_RESPONSE_USB_ENA = 0x82,
VC_CID_RESPONSE_STATISTIC = 0x83,
VC_CID_RESPONSE_DEBUG_ENA = 0xFD,
VC_CID_RESPONSE_DEBUG_REPT = 0xFE,
VC_CID_INVALID = 0xFF
} vc_cmd_cid_e;
/**
* @brief vc_cmd_resp_status_ready_e - Bitmap of response status.
* VC_RESP_STATUS_READY_USB - USB port is ready for transceiving.
* No inner error & device enabled.
* VC_RESP_STATUS_READY_UART - UART port is ready for transceiving.
* VC_RESP_STATUS_READY_SPI - SPI port is ready for transceiving.
*/
typedef enum _vc_command_response_status_bitmap_ready_list_e_ {
VC_RESP_STATUS_READY_USB = 0x01,
VC_RESP_STATUS_READY_UART = 0x02,
VC_RESP_STATUS_READY_SPI = 0x04
} vc_cmd_resp_status_ready_e;
/**
* @brief vc_cmd_resp_status_error_e - Bitmap of response status.
* VC_RESP_STATUS_ERROR_USB_FAULT - USB port has inner error on stm32.
* VC_RESP_STATUS_ERROR_OTHER_FAULT - Stm32 has other errors.
*/
typedef enum _vc_command_response_status_bitmap_error_list_e_ {
VC_RESP_STATUS_ERROR_USB_FAULT = 0x01,
VC_RESP_STATUS_ERROR_OTHER_FAULT = 0x02
} vc_cmd_resp_status_error_e;
/**
* @brief VC_COMMAND_PRECODE - Fix pre-code as 0xAA AA.
*/
#define VC_COMMAND_PRECODE 0xAAAA
/**
* @brief VC_COMMAND_PSTCODE - Fix pre-code as 0xFF.
*/
#define VC_COMMAND_PSTCODE 0xFF
/**
* @brief VC_COMMAND_FRAME_BREAK_TIMEOUT - Frame break time, in ms.
*/
#define VC_COMMAND_FRAME_BREAK_TIMEOUT 500
#pragma pack(push) /* save the pack status */
#pragma pack(1) /* 1 byte align */
/**
* @brief vc_cmd_header_t - Header of virtual channel frame.
*/
typedef struct _vc_command_frame_header_t_ {
uint16_t pre_code; /* Pre-code, fixed as 0xAAAA */
uint8_t channel; /* Channel number. */
uint8_t reserved; /* Reserved, keep 0. */
uint16_t sequnce; /* Sequnce of frames. 0 ~ 65535. */
uint16_t data_length; /* Length of data section. */
union {
uint8_t data[0]; /* If channel is not 0, the data section hold data. */
uint8_t fn[0]; /* If channel is 0, the data section hold command. */
};
} vc_cmd_header_t;
/**
* @brief vc_cmd_tail_t - Tail of virtual channel frame.
*/
typedef struct _vc_command_frame_tail_t_ {
uint16_t crc16; /* CRC16, from "channel" to end of data. */
uint8_t pst_code; /* Post-code, fixed as 0xFF. */
} vc_cmd_tail_t;
/**
* @brief VC_COMMAND_FRAME_HEADER_LENGTH - Length of header.
*/
#define VC_COMMAND_FRAME_HEADER_LENGTH sizeof(vc_cmd_header_t)
/**
* @brief VC_COMMAND_PSTCODE - Fix pre-code as 0xFF.
*/
#define VC_COMMAND_FRAME_TAIL_LENGTH sizeof(vc_cmd_tail_t)
/**
* @brief VC_COMMAND_MAX_PAYLOAD_LENGTH - Max length of payload in frame.
*/
#define VC_COMMAND_MAX_PAYLOAD_LENGTH (2048)
/**
* @brief VC_COMMAND_MAX_FRAME_LENGTH - Max length of frame in bytes.
*/
#define VC_COMMAND_MAX_FRAME_LENGTH ( VC_COMMAND_MAX_PAYLOAD_LENGTH + \
VC_COMMAND_FRAME_HEADER_LENGTH + VC_COMMAND_FRAME_TAIL_LENGTH)
/**
* @brief VC_COMMAND_MIN_FRAME_LENGTH - Mib length of frame in bytes.
*/
#define VC_COMMAND_MIN_FRAME_LENGTH \
(VC_COMMAND_FRAME_HEADER_LENGTH + VC_COMMAND_FRAME_TAIL_LENGTH)
#define VC_COMMAND_CRC_LENGTH_IN_HEAD \
(sizeof(vc_cmd_header_t) - (int)&((vc_cmd_header_t *)0)->channel)
/**
* @brief vc_cmd_req_status_t - K68 query the status of stm32.
*/
typedef struct _vc_command_request_status_t_ {
uint8_t fn; /* 0x00 */
} vc_cmd_req_status_t;
/**
* @brief vc_cmd_res_status_t - Stm32 response the status.
* See vc_cmd_resp_status_ready_e & vc_cmd_resp_status_error_e
*/
typedef struct _vc_command_response_status_t_ {
uint8_t fn; /* 0x80 */
uint8_t bitmap_ready;
uint8_t bitmap_error;
} vc_cmd_res_status_t;
/**
* @brief vc_cmd_req_fw_ver_t - K68 query the version of stm32 firmware.
*/
typedef struct _vc_command_request_frimware_version_t_ {
uint8_t fn; /* 0x01 */
} vc_cmd_req_fw_ver_t;
/**
* @brief vc_cmd_res_fw_ver_t - Stm32 response the firmware version.
*/
typedef struct _vc_command_response_frimware_version_t_ {
uint8_t fn; /* 0x81 */
uint32_t version;
uint32_t length;
uint32_t crc32;
} vc_cmd_res_fw_ver_t;
/**
* @brief vc_cmd_req_usb_ena_t - K68 set the ability of stm32 USB port.
*/
typedef struct _vc_command_request_usb_enable_t_ {
uint8_t fn; /* 0x02 */
uint8_t enable;
} vc_cmd_req_usb_ena_t;
/**
* @brief vc_cmd_res_usb_ena_t - Stm32 response the ability of USB port.
*/
typedef struct _vc_command_response_usb_enable_t_ {
uint8_t fn; /* 0x82 */
uint8_t enable;
} vc_cmd_res_usb_ena_t;
/**
* @brief vc_cmd_req_statistic_t - K68 set the statistics of stm32.
*/
typedef struct _vc_command_request_statistics_t_ {
uint8_t fn; /* 0x03 */
} vc_cmd_req_statistic_t;
/**
* @brief vc_cmd_res_statistics_t - Stm32 response the statistics
* of all channels.
*/
typedef struct _vc_command_channel_statistic_t_ {
uint32_t tx_frames; /* Total frames of data stm32 sent in the channel. */
uint32_t tx_bytes; /* Total bytes of data stm32 sent in the channel. */
uint32_t rx_frames; /* Total frames of data stm32 received in the channel. */
uint32_t rx_bytes; /* Total bytes of data stm32 received in the channel. */
} vc_cmd_chn_statistic_t;
typedef struct _vc_command_response_statistics_t_ {
uint8_t fn; /* 0x83 */
uint8_t chn_cnt;
vc_cmd_chn_statistic_t statistic[0];
} vc_cmd_res_statistics_t;
#define vc_get_channel_bitmap(chn, bmap) \
(((bmap) & (1 << (chn))) ? 1 : 0)
#define vc_set_channel_bitmap(chn, bmap, ena) \
do { \
if (ena) { \
(bmap) |= (1 << (chn)); \
} else { \
(bmap) &= ~(1 << (chn)); \
} \
} while(0)
/**
* @brief vc_cmd_req_chn_dbg_t - K68 set the statistics of stm32.
*/
typedef struct _vc_command_request_channel_debug_t_ {
uint8_t fn; /* 0x7E */
uint32_t bitmap_channel; /* bitmap as : vc_get_channel_bitmap(channel). */
} vc_cmd_req_chn_dbg_t;
/**
* @brief vc_cmd_res_chn_dbg_t - Stm32 response the statistics status.
*/
typedef struct _vc_command_response_channel_debug_t_ {
uint8_t fn; /* 0xFE */
uint32_t bitmap_channel; /* bitmap as : vc_get_channel_bitmap(channel). */
} vc_cmd_res_chn_dbg_t;
/**
* @brief vc_cmd_res_chn_dbg_str_t - Stm32 reports the debug
* information to k68
* without requesting.
*/
typedef struct _vc_command_response_channel_debug_string_t_ {
uint8_t fn; /* 0xFF */
uint16_t str_len;
uint8_t str_data[0]; /* printf string. */
} vc_cmd_res_chn_dbg_str_t;
#pragma pack(pop) /* restore the pack status */
#endif /* _VC_COMMANDS_H_ */