Files
99_7018_lmx/apps/common/device/gx8002_npu/gx8002_npu.h
2025-10-29 13:10:02 +08:00

96 lines
2.7 KiB
C

#ifndef __GX8002_NPU_H__
#define __GX8002_NPU_H__
/*
* Message command
*/
#define MSG_TYPEBITS 8
#define MSG_NRBITS 8
#define MSG_NRMASK ((1 << MSG_NRBITS) - 1)
#define MSG_TYPEMASK ((1 << MSG_TYPEBITS) - 1)
#define MSG_NRSHIFT 0
#define MSG_TYPESHIFT (MSG_NRSHIFT + MSG_NRBITS)
/* Create new message */
#define NEW_MSG(type, nr) \
(((type) << MSG_TYPESHIFT) | \
((nr) << MSG_NRSHIFT))
/* Get message type */
#define MSG_TYPE(cmd) (((cmd) >> MSG_TYPESHIFT) & MSG_TYPEMASK)
/* Get message nr */
#define MSG_NR(cmd) (((cmd) >> MSG_NRSHIFT) & MSG_NRMASK)
/*
* Message flags
*/
#define MSG_FLAG_BCHECK (1 << 0)
#define MSG_FLAG_BCHECK_BITS 1
#define MSG_FLAG_BCHECK_MASK ((1 << MSG_FLAG_BCHECK_BITS) - 1)
#define MSG_FLAG_BCHECK_SHIFT 0
/* Check if need message body crc32 */
#define MSG_NEED_BCHECK(flags) (((flags) >> MSG_FLAG_BCHECK_SHIFT) & MSG_FLAG_BCHECK_MASK)
#define MSG_HEAD_LEN 14 /* Message header length */
#define MSG_HEAD_CHECK_LEN 4 /* Message header crc32 length */
#define MSG_MAGIC_LEN 4 /* Message magic length */
#define MSG_BODY_LEN_MAX 3072 /* Message body maximun length */
#define MSG_BODY_CHECK_LEN 4 /* Message body crc32 length */
#define MSG_SEQ_MAX 255 /* Message sequence maximum count */
#define MSG_LEN_MAX (MSG_HEAD_LEN + MSG_BODY_LEN_MAX) /* Message maximun length */
#define MSG_MAGIC 0x58585542
#define MSG_RCV_MAGIC0 (((MSG_MAGIC) & 0x000000FF) >> 0 )
#define MSG_RCV_MAGIC1 (((MSG_MAGIC) & 0x0000FF00) >> 8 )
#define MSG_RCV_MAGIC2 (((MSG_MAGIC) & 0x00FF0000) >> 16)
#define MSG_RCV_MAGIC3 (((MSG_MAGIC) & 0xFF000000) >> 24)
typedef enum {
MSG_TYPE_REQ = 0x1,
MSG_TYPE_RSP = 0x2,
MSG_TYPE_NTF = 0x3,
} MSG_TYPE;
struct message {
unsigned short cmd;
unsigned char seq;
unsigned char flags;
unsigned char *body;
unsigned short bodylen;
} __attribute__((packed));
typedef enum {
MSG_REQ_VOICE_EVENT = NEW_MSG(MSG_TYPE_REQ, 0x0C),
MSG_RSP_VOICE_EVENT = NEW_MSG(MSG_TYPE_RSP, 0x0C),
//查询gx固件版本
MSG_REQ_VERSION_EVENT = NEW_MSG(MSG_TYPE_REQ, 0x02),
MSG_RSP_VERSION_EVENT = NEW_MSG(MSG_TYPE_RSP, 0x02),
//查询MIC状态
MSG_REQ_MIC_EVENT = NEW_MSG(MSG_TYPE_REQ, 0x70),
MSG_RSP_MIC_EVENT = NEW_MSG(MSG_TYPE_RSP, 0x70),
//查询Gsensor状态
MSG_REQ_GSENSOR_EVENT = NEW_MSG(MSG_TYPE_REQ, 0x71),
MSG_RSP_GSENSOR_EVENT = NEW_MSG(MSG_TYPE_RSP, 0x71),
} UART_MSG_ID;
/* Stream read callback */
typedef int (*STREAM_READ)(unsigned char *buf, int len);
/* Stream write callback */
typedef int (*STREAM_WRITE)(const unsigned char *buf, int len);
/* Stream is empty callback */
typedef int (*STREAM_EMPTY)(void);
#endif /* #ifndef __GX8002_NPU_H__ */