extern_interface/docs/extern_interface.md

127 lines
5.1 KiB
Markdown
Raw Permalink 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.

# 通讯模块文档
本文档主要描述Voix中的用于与遥测机及上位机进行通讯及相关附加功能的模块。
这些模块拆分自原host_com.cpp文件。
## 模块公开接口
以下接口由通讯模块公开可以在VOIX主程序中使用。
1. `void extern_interface_init(const char* config_path, et_callback_t cb)`:模块初始化函数
- `config_path`:配置文件路径
- `cb`:回调函数,用于进行指令响应和遥测数据请求
2. `void (*et_callback_t)(uint32_t type, size_t len, union PacketData data)`:回调函数类型,内部数据为指针类型的数据包仅保证在回调函数中有效。
- `type`:数据包类型
- `len`数据包长度对于指针类型数据包len为指针指向的数据长度对于字符串类型数据包len为字符串包含后缀`\0`的长度。
- `data`:数据包数据
3. `union PacketData`:数据包定义
- `pd_integer`int64_t类型的数据
- `pd_float`double类型的数据
- `pd_text`const char*类型的数据
- `pd_pointer`void*类型的数据,
4. 数据包类型(宏定义):
- `ET_TYPE_NONE`:无数据
- `ET_TYPE_TEXT`文本对应const char*类型的数据
- `ET_TYPE_AUDIO`音频对应short*类型的数据
- `ET_TYPE_COMMAND`指令码对应uint8_t[6]类型的数据
- `ET_TYPE_ALARM`告警码对应uint8_t[4]类型的数据
- `ET_TYPE_TELEMETRY_REQUEST`遥测请求对应void*类型的数据,需要主程序在数据包内的指针中写入对应的变量数据
5. `void send_data_packet(uint32_t type, size_t len, union PacketData data)`:发送数据包
- `type`:数据包类型
- `len`数据包长度对于指针类型数据包len为指针指向的数据长度对于字符串类型数据包len为字符串包含后缀`\0`的长度。
- `data`:数据包数据
## 外部依赖
通讯模块需要一些来自主程序的全局变量,主要用于生成遥测报文。
- `g_bKeepSysRuning`:系统运行状态标志
- `g_bCloseASR`ASR关闭状态标志
- `g_iSysState`:系统状态
- `g_bVolumeKeyPressed`:静音按键状态标志
- `g_bWakeupKeyPressed`:唤醒按键状态标志
- `g_iVolumeGrade`:音量等级
- `g_iSysVerHigh`系统版本号高8位
- `g_iSysVerLow`系统版本号低8位
- `g_iAppVerHigh`应用版本号高8位
- `g_iAppVerLow`应用版本号低8位
以上全局变量通过回调函数中的遥测请求数据包获取。
## Transport模块
用于进行底层通讯的模块包含comframe库、通讯线程及回调定义接口的封装。
主程序需要构建回调函数定义数组,并通过线程函数的参数传入。
### 公开接口
1. `void* transport_thread(void* arg)`:线程函数
- `arg`:需要传入以零项作为结尾的`struct ComFrameTypeDef`结构体数组
2. `struct ComFrameTypeDef`:回调函数定义
- `tp_id`数据类型与数据帧中的type对应
- `tp_callback`:回调函数指针
- `tp_flag`:类型回调标签,如 是否进行校验
3. `void (*tp_callback_t)(struct ComFrameTypeDef*, struct Comframe*)`:回调函数
- `struct ComFrameTypeDef*`:回调函数定义结构体指针
- `struct Comframe*`:数据帧
4. 回调标签(宏定义):
- `TP_FLAG_DEFAULT`:默认回调标签
- `TP_FLAG_NOVERIFY`:不进行数据校验
- `TP_FLAG_THREAD`:在独立线程中执行回调函数
- `TP_FLAG_DISABLE`:禁用回调函数
## Telemetry模块
遥测模块,用于获取并同步遥测信息,并提供遥测回调函数。
### 公开接口
1. `void telemetry_handler(struct ComFrameTypeDef*, struct Comframe*)`:遥测请求回调函数
### 内部接口
1. `struct Telemetry`:遥测数据(遥测串口)
2. `struct UpperHostTelemetry`:遥测数据(上位机串口)
3. `void flush_telemetry_data()`:更新遥测数据(遥测串口)
4. `void flush_upper_host_telemetry_data()`:更新遥测数据(上位机串口)
## Command模块
用于定义命令回调函数在transport模块中调用。
### 公开接口
1. `void command_handler(struct ComFrameTypeDef*, struct Comframe*)`:命令回调函数
### 内部接口
1. `struct CommandDef`:命令定义
- `cmd_id`命令ID
- `cmd_callback`:回调函数指针
2. `void (*cmd_callback_t)(uint8_t[])`:命令回调函数
## Alarm模块
用于定义告警回调函数在transport模块中调用。
### 公开接口
1. `void alarm_handler(struct ComFrameTypeDef*, struct Comframe*)`:告警回调函数
### 内部接口
1. `struct AlarmDef`:告警定义
- `alarm_id`告警ID
- `alarm_text`:告警文本
## TypeHandler模块
用于定义除遥测请求及告警信息外的其他回调函数在transport模块中调用。
### 公开接口
1. `void speech_injected_handler(struct ComFrameTypeDef*, struct Comframe*)`:语音注入回调函数
2. `void audio_handler(struct ComFrameTypeDef*, struct Comframe*)`:语音数据回调函数
3. `void grant_time_handler(struct ComFrameTypeDef*, struct Comframe*)`:授时回调函数