mcu_hi3321_watch/middleware/utils/dfx/diag/include/diag_common.h
2025-05-26 20:15:20 +08:00

228 lines
8.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) @CompanyNameMagicTag 2021-2023. All rights reserved.
* Description: diag common header file
* This file should be changed only infrequently and with great care.
*/
#ifndef DIAG_COMMON_H
#define DIAG_COMMON_H
#include "errcode.h"
#include "dfx_feature_config.h"
#include "zdiag_config.h"
#define DIAG_ROUTER_FRAME_START_FLAG 0xAF
#define DIAG_ROUTER_FRAME_END_FLAG 0xFA
#define MUX_START_FLAG DIAG_ROUTER_FRAME_START_FLAG
#define AES_KEY_LEN 16
#define AES_IV_LEN 12
#define AES_TAG_LEN 16
#define DIAG_SERVICE_HEADER_LEN 8
#define DIAG_ROUTER_HEADER_LEN 4
#define DIAG_ROUTER_HEADER_MAX_LEN 8
#define DIAG_ROUTER_CTRL2_LEN 1
#define DIAG_ROUTER_FID_LEN 1
#define DIAG_ROUTER_SN_LEN 1
#define DIAG_ROUTER_ECHO_LEN 1
#define DIAG_ROUTER_CRC_LEN 2 /* CRC16 */
#define DIAG_ROUTER_SECURE_LEN 28
#define DIAG_ROUTER_EOF_LEN 1
#define DIAG_ROUTER_CTRL_CRC_BIT 0
#define DIAG_ROUTER_CTRL_FID_BIT 1
#define DIAG_ROUTER_CTRL_SN_BIT 2
#define DIAG_ROUTER_CTRL_EOF_BIT 4
#define DIAG_ROUTER_CTRL_FULL_CRC_BIT 5
#define DIAG_ROUTER_CTRL_SECURE_FLAG_BIT 6
#define DIAG_ROUTER_CTRL_EXTEND_BIT 7
#define DIAG_ROUTER_CTAL2_ACK_TYPE_BIT 0
#define DIAG_ROUTER_CTRL_CRC_EN_MASK 0x01
#define DIAG_ROUTER_CTRL_FID_EN_MASK 0x02
#define DIAG_ROUTER_CTRL_SN_MASK 0x0C
#define DIAG_ROUTER_CTRL_EOF_EN_MASK 0x10
#define DIAG_ROUTER_CTRL_FULL_CRC_EN_MASK 0x20
#define DIAG_ROUTER_CTRL_SECURE_FLAG_MASK 0x40
#define DIAG_ROUTER_CTRL_EXTEND_EN_MASK 0x80
#define DIAG_ROUTER_CTAL2_ACK_TYPE_MASK 0x03
#define DIAG_ROUTER_FID_SRC_BIT 0
#define DIAG_ROUTER_FID_DST_BIT 4
#define DIAG_ROUTER_FID_MASK 0xF
#define DIAG_FRAME_SHIFT_8 8
/* a: en_crc, b: en_fid, c:en_sn, d: en_eof, e: en_full_crc, f: en_crypto, g: en_extend */
#define frame_ctrl_build(a, b, c, d, e, f, g) (((a) << DIAG_ROUTER_CTRL_CRC_BIT) | \
((b) << DIAG_ROUTER_CTRL_FID_BIT) | \
((c) << DIAG_ROUTER_CTRL_SN_BIT) | \
((d) << DIAG_ROUTER_CTRL_EOF_BIT) | \
((e) << DIAG_ROUTER_CTRL_FULL_CRC_BIT) | \
((f) << DIAG_ROUTER_CTRL_SECURE_FLAG_BIT) | \
((g) << DIAG_ROUTER_CTRL_EXTEND_BIT))
/* a: ack_type */
#define frame_ctrl2_build(a) ((a) << DIAG_ROUTER_CTAL2_ACK_TYPE_BIT)
#define get_frame_ctrl_crc_en(x) (((x) & DIAG_ROUTER_CTRL_CRC_EN_MASK) >> DIAG_ROUTER_CTRL_CRC_BIT)
#define get_frame_ctrl_fid_en(x) (((x) & DIAG_ROUTER_CTRL_FID_EN_MASK) >> DIAG_ROUTER_CTRL_FID_BIT)
#define get_frame_ctrl_sn(x) (((x) & DIAG_ROUTER_CTRL_SN_MASK) >> DIAG_ROUTER_CTRL_SN_BIT)
#define get_frame_ctrl_eof_en(x) (((x) & DIAG_ROUTER_CTRL_EOF_EN_MASK) >> DIAG_ROUTER_CTRL_EOF_BIT)
#define get_frame_ctrl_full_crc_en(x) (((x) & DIAG_ROUTER_CTRL_FULL_CRC_EN_MASK) >> DIAG_ROUTER_CTRL_FULL_CRC_BIT)
#define get_frame_ctrl_secure_flag(x) (((x) & DIAG_ROUTER_CTRL_SECURE_FLAG_MASK) >> DIAG_ROUTER_CTRL_SECURE_FLAG_BIT)
#define get_frame_ctrl_extend_en(x) (((x) & DIAG_ROUTER_CTRL_EXTEND_EN_MASK) >> DIAG_ROUTER_CTRL_EXTEND_BIT)
#define get_frame_ctrl2_ack_type(x) (((x) & DIAG_ROUTER_CTAL2_ACK_TYPE_MASK) >> DIAG_ROUTER_CTAL2_ACK_TYPE_BIT)
#define get_frame_fid_src(x) ((x) & DIAG_ROUTER_FID_MASK)
#define get_frame_fid_dst(x) (((x) >> DIAG_ROUTER_FID_DST_BIT) & DIAG_ROUTER_FID_MASK)
#define get_frame_len(x, y) (((x) << DIAG_FRAME_SHIFT_8) | (y))
/* Ack_type definitions */
enum {
FRAME_ACK_TYPE_NONE = 0,
FRAME_ACK_TYPE_ACK = 1,
FRAME_ACK_TYPE_ECHO = 3,
FRAME_ACK_TYPE_MAX,
};
typedef enum {
DIAG_PKT_PROC_ASYNC, /* 发出去的异步命令或应答 */
DIAG_PKT_PROC_SYNC, /* 同步命令或应答 */
} diag_pkt_mode_t;
/* FID definitions */
typedef enum {
DIAG_FRAME_FID_LOCAL = 0x00, /* 本地设备的帧 */
DIAG_FRAME_FID_PC = 0x01, /* 用于UART通道的帧 */
DIAG_FRAME_FID_MCU = 0x02, /* 用于标记MCU主控设备如果是耳机目标领域为本值则表示对耳设备。 */
DIAG_FRAME_FID_BT = 0x03, /* 用于标记蓝牙GATT设备。 */
DIAG_FRAME_FID_PHONE = 0x04, /* 用于标记蓝牙SPP设备。 */
DIAG_FRAME_FID_GLE = 0x05, /* 用于标记星闪设备。 */
DIAG_FRAME_FID_MAX = 0x0F,
} diag_frame_fid_t;
typedef enum {
DIAG_FRAME_SN_NONE = 0x0,
DIAG_FRAME_SN_START = 0x1,
DIAG_FRAME_SN_INSIDE = 0x2,
DIAG_FRAME_SN_END = 0x3,
DIAG_FRAME_SN_MAX = 0x4,
} diag_frame_sn_t;
typedef struct {
uint32_t module; /* source module ID */
uint32_t dest_mod; /* destination module ID */
uint32_t no; /* No. */
uint32_t id; /* ID */
uint32_t time; /* Timestamp */
int8_t data[0]; /* log data */
} diag_cmd_log_layer_stru_t;
#define DIAG_FULL_LOG_HEADER_SIZE sizeof(diag_cmd_log_layer_stru_t)
typedef struct __attribute__ ((packed)) {
uint16_t no; /* No. */
uint32_t id; /* ID */
int8_t data[0]; /* log data */
} diag_cmd_minimal_log_layer_t;
#define DIAG_MINIMAL_LOG_HEADER_SIZE sizeof(diag_cmd_minimal_log_layer_t)
typedef struct __attribute__ ((packed)) {
uint8_t module; /* module ID */
uint8_t no_lo; /* Lower 8 bits of No. */
uint16_t no_hi : 6; /* Upper 6 bits of No. */
uint16_t time_ms : 10; /* millisecond portion of Timestamp */
uint32_t id; /* ID */
uint32_t time; /* second portion of Timestamp */
int8_t data[0]; /* log data */
} diag_cmd_normal_log_layer_t;
#define DIAG_NORMAL_LOG_HEADER_SIZE sizeof(diag_cmd_normal_log_layer_t)
typedef struct __attribute__ ((packed)) {
uint8_t sub_mod; /* core (3 bits) + sub module ID (5 bits) */
uint8_t no; /* No. */
uint32_t id; /* ID */
uint32_t time; /* local time */
int8_t data[0]; /* log data */
} diag_cmd_extend_log_layer_t;
#define DIAG_EXTEND_LOG_HEADER_SIZE sizeof(diag_cmd_extend_log_layer_t)
#if (CONFIG_DFX_SUPPORT_DIAG_MINIMAL_MSG == DFX_YES)
#ifndef DIAG_CMD_MSG_RPT_SYS
#define DIAG_CMD_MSG_RPT_SYS DIAG_CMD_MSG_RPT_SYS_MINI_LOG
#endif
#define DIAG_LOG_HEADER_SIZE DIAG_MINIMAL_LOG_HEADER_SIZE
#elif (CONFIG_DFX_SUPPORT_DIAG_NORMAL_MSG == DFX_YES)
#ifndef DIAG_CMD_MSG_RPT_SYS
#define DIAG_CMD_MSG_RPT_SYS DIAG_CMD_MSG_RPT_SYS_NORMAL_LOG
#endif
#define DIAG_LOG_HEADER_SIZE DIAG_NORMAL_LOG_HEADER_SIZE
#elif (CONFIG_DFX_SUPPORT_DIAG_EXTEND_MSG == DFX_YES)
#ifndef DIAG_CMD_MSG_RPT_SYS
#define DIAG_CMD_MSG_RPT_SYS DIAG_CMD_MSG_RPT_SYS_EXTEND_LOG
#endif
#define DIAG_LOG_HEADER_SIZE DIAG_EXTEND_LOG_HEADER_SIZE
#else
#ifndef DIAG_CMD_MSG_RPT_SYS
#define DIAG_CMD_MSG_RPT_SYS DIAG_CMD_MSG_RPT_SYS_FULLY_LOG
#endif
#define DIAG_LOG_HEADER_SIZE DIAG_FULL_LOG_HEADER_SIZE
#endif
typedef struct {
uint8_t mod_id; /* mod id */
uint8_t cmd_id; /* cmd id */
uint8_t param[0]; /* data */
} diag_head_req_stru_t;
#define DIAG_REQ_HEADER_SIZE sizeof(diag_head_req_stru_t)
typedef struct {
uint8_t mod_id; /* mod id */
uint8_t cmd_id; /* cmd id */
uint8_t param[0]; /* data */
} diag_head_ind_stru_t;
#define DIAG_IND_HEADER_SIZE sizeof(diag_head_ind_stru_t)
typedef struct {
uint8_t en_crc : 1;
uint8_t en_fid : 1;
uint8_t en_sn : 2;
uint8_t en_eof : 1;
uint8_t en_full_crc : 1;
uint8_t en_crypto : 1;
uint8_t en_extend : 1;
} diag_router_ctrl_t;
typedef struct {
uint8_t ack_type : 2;
uint8_t reserved : 6;
} diag_router_ctrl2_t;
typedef struct {
diag_router_ctrl_t ctrl;
diag_router_ctrl2_t ctrl2;
uint8_t fid;
uint8_t sn_count;
uint8_t echo;
uint16_t mfs;
uint16_t data_len; /* Payload len */
uint8_t *data;
} diag_router_data_t;
typedef struct __attribute__ ((packed)) {
uint8_t len_lsb; /* data len, (low 8bit) */
uint8_t len_msb; /* data len, (high 8bit) */
uint8_t payload[0]; /* FID (optional) + SN (optional) + ECHO (optional) + payload */
} diag_router_inner_frame_t;
typedef struct __attribute__ ((packed)) {
uint8_t sof; /* start of frame fixed 0xAF */
uint8_t ctrl; /* data contrl options. */
uint8_t inner[0]; /* ctrl2 (optional) + len + FID (optional) + SN (optional) + ECHO (optional) + payload */
} diag_router_frame_t;
#define DIAG_FRAME_HEADER_SIZE DIAG_ROUTER_HEADER_LEN
#endif