Files
AC707N/SDK/apps/watch/product_test/product_test.h
T
2025-12-03 11:12:34 +08:00

185 lines
6.2 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.
#ifndef __PRODUCT_TEST_H
#define __PRODUCT_TEST_H
#include "system/includes.h"
#include "app_config.h"
// 模块使能
#ifndef PRODUCT_TEST_ENABLE
#define PRODUCT_TEST_ENABLE 0
#endif
#ifndef PT_GPIO_ENABLE
#define PT_GPIO_ENABLE 0
#endif
#ifndef PT_GSENSOR_ENABLE
#define PT_GSENSOR_ENABLE 0
#endif
#ifndef PT_MOTOR_ENABLE
#define PT_MOTOR_ENABLE 0
#endif
#ifndef PT_SD_ENABLE
#define PT_SD_ENABLE 0
#endif
#ifndef PT_HR_ENABLE
#define PT_HR_ENABLE 0
#endif
#ifndef PT_MR_ENABLE
#define PT_MR_ENABLE 0
#endif
#ifndef PT_PRESSURE_ENABLE
#define PT_PRESSURE_ENABLE 0
#endif
#ifndef PT_GPS_ENABLE
#define PT_GPS_ENABLE 0
#endif
#ifndef PT_SPEAKER_MIC_ENABLE
#define PT_SPEAKER_MIC_ENABLE 0
#endif
#ifndef PT_LCD_TP_ENABLE
#define PT_LCD_TP_ENABLE 0
#endif
#ifndef PT_GPIO_CHECK_LCD_TP
#define PT_GPIO_CHECK_LCD_TP 0
#endif
// 模块(module/MOD
#define PT_ORDER_M_SET(x) (u32)((x)<<0)
#define PT_ORDER_M_GET(x) (((u32)(x)>>0) & 0x000000FF)
// 命令(command/CMD
#define PT_ORDER_C_SET(x) (u32)((x)<<8)
#define PT_ORDER_C_GET(x) (((u32)(x)>>8) & 0x000000FF)
// 模块(module/MOD
#define PT_M_SYSTEM 0x00 // 系统命令
#define PT_M_GPIO 0x01 // GPIO
#define PT_M_POWER 0x02 // 功耗
#define PT_M_CHARGE 0x03 // 充电电流
#define PT_M_FLASH 0x04 // 内置flash
#define PT_M_PSRAM 0x05 // 内置psram
#define PT_M_EDR 0x10 // 蓝牙EDR
#define PT_M_BLE 0x11 // 蓝牙BLE
#define PT_M_EX_FLASH 0x40 // 外置flash
#define PT_M_EX_PSRAM 0x41 // 外置PSRAM
#define PT_M_SD 0x42 // SD卡
#define PT_M_SPI_NAND 0x43 // spi nand
#define PT_M_SPEAKER 0x44 // 喇叭
#define PT_M_MIC 0x45 // 麦克风
#define PT_M_LCD 0x46 // 显示屏
#define PT_M_TP 0x47 // 触摸屏
#define PT_M_MOTOR 0x48 // 马达
#define PT_M_GSENSOR 0x49 // GSENSOR
#define PT_M_HR 0x4A // 心率血氧
#define PT_M_MR 0x4B // 地磁传感器
#define PT_M_PRESSURE 0x4C // 气压传感器
#define PT_M_GPS 0x4D // GPS
#define PT_M_SPEAKER_MIC 0x60 // 喇叭+麦克风
#define PT_M_LCD_TP 0x61 // 显示屏+触摸屏
#define PT_M_USER 0x80 // 用户自定义扩展。0x80~0xBF
// 属性(attribute/ATTR
#define PT_ATTR_SELF BIT(0) // 自检(自动判别)。如果有其他属性值,即为有条件自检。例如喇叭+麦克风需要接外设才能完成自检
#define PT_ATTR_USER_JUDGE BIT(1) // 需要人工判别。例如马达主动等需要人工判别
#define PT_ATTR_INTERACTION BIT(2) // 需要人工交互。例如LCD+TP需要人工触摸
#define PT_ATTR_EXTRA_DEV BIT(3) // 需要外设。例如PCBA上没有接麦克风,需要外接麦克风
#define PT_ATTR_ENV_OUT BIT(8) // 对外界有影响。例如马达会对外主动,喇叭会对外发声。有这种属性的模块应该轮询检测
#define PT_ATTR_ENV_IN BIT(9) // 受外界影响。例如麦克风需要采集环境音
// 标准命令(normal_command/NORM_CMD
#define PT_N_C_GETINFO 0x01 // 获取信息(工具->固件)
#define PT_N_C_SETINFO 0x02 // 配置信息(工具->固件)
#define PT_N_C_START 0x03 // 启动测试(工具->固件)
#define PT_N_C_STOP 0x04 // 停止测试(工具->固件)
#define PT_N_C_PULL_DATA 0x05 // 下行数据(工具->固件)
#define PT_N_C_GET_RESULT 0x10 // 获取测试结果(工具->固件)
#define PT_N_C_SET_RESULT 0x11 // 设置测试结果(工具->固件)
#define PT_N_C_PRIV 0x20 // 模块私有命令。0x20~0x7F
#define PT_N_C_USER 0x80 // 用户自定义扩展。0x80~0xBF
// 系统命令(system_command/SYS_CMD
#define PT_S_C_GET_VER 0x21 // 获取版本消息(工具->固件)
#define PT_S_C_SET_INFO 0x22 // 设置参数(工具->固件)
#define PT_S_C_GET_MODULE 0x23 // 获取模块列表(工具->固件)
#define PT_S_C_HOLD 0x70 // 保持连接状态(固件->工具)
#define PT_S_C_END 0x7F // 结束(工具->固件)
// 错误值(error/ERR
#define PT_E_OK 0x00 // 成功
#define PT_E_SYS_UNREADY 0x01 // 系统还没准备好
#define PT_E_PARAM 0x02 // 参数错误
#define PT_E_TIMEOUT 0x03 // 超时
#define PT_E_NO_BUFF 0x04 // 申请不到buff
#define PT_E_OVER_ADDR 0x05 // 地址超范围
#define PT_E_OVER_LEN 0x06 // 大小超范围
#define PT_E_DATA_FORMAT 0x07 // 数据格式错误
#define PT_E_NO_DEV 0x08 // 没有设备
#define PT_E_NO_FILE 0x09 // 没有文件
#define PT_E_DEV_ID 0x0A // 设备ID错误
#define PT_E_SYS_QUEUE_FULL 0x0B // 消息池已满
#define PT_E_SYS_ERROR 0x0C // 系统出错
#define PT_E_MOD_NULL 0x41 // 模块不存在
#define PT_E_MOD_ERROR 0x42 // 模块存在但有异常
#define PT_E_MOD_UNREADY 0x43 // 模块还未准备好
#define PT_E_MOD_CANT_STOP 0x44 // 模块无法结束
#define PT_E_MOD_STOP_NO_END 0x45 // 模块没有检测完被强制结束
#define PT_E_MOD_TEST_ERROR 0x46 // 模块测试失败
#define PT_E_MOD_RUN 0x47 // 模块正在运行
// 包标识(pkt_log
#define PT_PKT_ONCE 0x00 // 单次包
#define PT_PKT_CONTINUE 0x01 // 连续包
#define PT_PKT_CONTINUE_END 0x02 // 连续包结束
//--------------传输包结构体------------
struct pt_pkt {
u32 order;
u16 res : 14;
u16 pkt_log : 2;
u16 data_len;
u8 dat[0];
};
//--------------模块结构体------------
struct pt_module {
u8 module; // 模块
u16 attr; // 属性
int (*init)(void); // 初始化接口。获取ID等。如果初始化不过,后面对模块的所有操作都返回错误
int (*ioctrl)(u32 order, int len, void *param); // 命令处理接口。每一条“工具->固件”的命令都需要回复
};
#define REGISTER_PT_MODULE(target) \
const struct pt_module target sec(.pt_module)
extern const struct pt_module pt_module_begin[];
extern const struct pt_module pt_module_end[];
#define list_for_each_pt_module(p) \
for (p = (struct pt_module*)pt_module_begin; p <(struct pt_module*)pt_module_end; p++)
#define GET_PT_MODULE_NUM() (((int)pt_module_end - (int)pt_module_begin) / sizeof(struct pt_module))
// 推送数据
int product_test_push_data(u32 order, int len, u8 *dat);
// open
int product_test_open(void);
// 检测是否开启产测
int product_test_check_run(void);
#endif // #define __PRODUCT_TEST_H