transmit
transmit模块提供数据传输功能,支持文件、内存、Flash和OTA升级包等多种传输类型,支持上位机与下位机之间的上行和下行数据传输,并提供传输回调机制和自定义消息处理能力。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| uapi_transmit_init | 初始化数据传输模块 |
| uapi_transmit_deinit | 去初始化数据传输模块 |
| uapi_transmit_host_start | 作为上位机启动一次传输 |
| uapi_transmit_host_stop | 作为上位机主动停止传输 |
| uapi_transmit_device_stop | 作为下位机停止所有传输 |
| uapi_transmit_device_register_result_hook | 统一使用uapi_transmit_device_register_hook注册回调函数,本函数逐步废弃 |
| uapi_transmit_device_register_hook | 作为下位机注册传输回调函数 |
| uapi_transmit_register_msg_proc_hook | 注册用户自定义的传输消息处理函数 |
| uapi_transmit_unregister_msg_proc_hook | 去注册用户自定义的传输消息处理函数 |
Functions
uapi_transmit_init
函数声明
头文件清单
功能说明
- 初始化数据传输模块,完成传输控制块清零、定时器初始化、DIAG服务注册等操作
- 作为数据传输模块的初始化入口,其他传输接口基于本接口完成后的状态运行
- 重复调用时若模块已初始化则直接返回成功,不会重复初始化
前置条件
- DIAG模块已初始化完成,DIAG服务可用
- 传输模块未被初始化,或已通过uapi_transmit_deinit去初始化
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 初始化成功 |
| Other | 其他错误码,参考errcode_t | 定时器初始化失败或DIAG服务注册失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
uapi_transmit_deinit
函数声明
头文件清单
功能说明
- 去初始化数据传输模块,停止所有传输任务,释放缓冲区,注销DIAG服务,清零传输控制块
- 调用后传输模块不可用,如需再次使用须重新调用uapi_transmit_init初始化
- 若模块未初始化则直接返回成功
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 去初始化成功 |
| Other | 其他错误码,参考errcode_t | 内部操作失败 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
uapi_transmit_host_start
函数声明
errcode_t uapi_transmit_host_start(transmit_type_t transmit_type, uint16_t channel_id, transmit_cfg_info_t *cfg_info, transmit_callback_t *callback);
头文件清单
功能说明
- 作为上位机启动一次传输,不论上行还是下行均由上位机启动
- 支持文件、内存、Flash、OTA升级包等多种传输类型,通过transmit_type参数指定
- 传输过程中通过callback回调函数通知传输结果、进度、启动等事件
- 使用此函数需打开CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE宏
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
- CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE宏已开启
- DIAG连接已建立,channel_id对应的通道可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| transmit_type | transmit_type_t | 传输类型 | - TRANSMIT_TYPE_FILE_UPSTREAM - TRANSMIT_TYPE_RESERVED - TRANSMIT_TYPE_FILE_DOWNSTREAM - TRANSMIT_TYPE_OTA_IMG_DOWNSTREAM - TRANSMIT_TYPE_MEMORY_UPSTREAM - TRANSMIT_TYPE_MEMORY_DOWNSTREAM - TRANSMIT_TYPE_FLASH_UPSTREAM - TRANSMIT_TYPE_FLASH_DOWNSTREAM - TRANSMIT_TYPE_OTA_IMG_UPSTREAM |
| channel_id | uint16_t | 传输所使用的通道ID | 参考 diag_frame_fid_t |
| cfg_info | transmit_cfg_info_t * | 要传输的数据的配置信息(如文件名、地址、长度等) | 非NULL |
| callback | transmit_callback_t * | 传输回调函数 | 非NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 传输请求成功发起 |
| ERRCODE_INVALID_PARAM(0x80000001) | 参数无效 | cfg_info或callback为NULL,或transmit_type超出有效范围 |
| ERRCODE_NOT_SUPPORT(0x80000002) | 不支持 | CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE未开启 |
| ERRCODE_MALLOC(0x80000005) | 内存分配失败 | 内存不足,无法分配参数结构体 |
参考案例
middleware/utils/dfx/diag/diag_system_cmd/diag_cmd_dfx_case.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
| CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE | 功能宏 | 支持上位机传输功能 | n |
uapi_transmit_host_stop
函数声明
头文件清单
功能说明
- 作为上位机主动停止传输,上位机可在传输过程中主动停止指定类型和通道的传输
- 使用此函数需打开CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE宏
- 若指定类型和通道不存在匹配的传输项,返回参数无效错误
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
- CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE宏已开启
- 已通过uapi_transmit_host_start启动了对应类型和通道的传输
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| transmit_type | transmit_type_t | 传输类型 | - TRANSMIT_TYPE_FILE_UPSTREAM - TRANSMIT_TYPE_RESERVED - TRANSMIT_TYPE_FILE_DOWNSTREAM - TRANSMIT_TYPE_OTA_IMG_DOWNSTREAM - TRANSMIT_TYPE_MEMORY_UPSTREAM - TRANSMIT_TYPE_MEMORY_DOWNSTREAM - TRANSMIT_TYPE_FLASH_UPSTREAM - TRANSMIT_TYPE_FLASH_DOWNSTREAM - TRANSMIT_TYPE_OTA_IMG_UPSTREAM |
| channel_id | uint16_t | 传输所使用的通道ID | 参考 diag_frame_fid_t |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 停止传输请求成功发起 |
| ERRCODE_NOT_SUPPORT(0x80000002) | 不支持 | CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE未开启 |
参考案例
middleware/utils/dfx/diag/diag_system_cmd/diag_cmd_dfx_case.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
| CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE | 功能宏 | 支持上位机传输功能 | n |
uapi_transmit_device_stop
函数声明
头文件清单
功能说明
- 作为下位机主动停止所有传输,在正常传输流程中传输停止由上位机控制,但在特殊情况下(如连接中断)下位机可主动停止
- 停止下位机上的所有传输任务,包括源端和目的端
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
- 存在正在进行的传输任务或需要清理的传输项
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 停止所有传输成功 |
| Other | 其他错误码,参考errcode_t | 内部操作失败 |
参考案例
middleware/utils/dfx/diag/diag_system_cmd/diag_cmd_dfx_case.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
uapi_transmit_device_register_result_hook
函数声明
头文件清单
功能说明
- 统一使用uapi_transmit_device_register_hook注册回调函数,本函数逐步废弃
- 内部直接调用uapi_transmit_device_register_hook实现
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
- callback指针非NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| callback | transmit_callback_t * | 传输回调函数 | 非NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 注册成功 |
| ERRCODE_INVALID_PARAM(0x80000001) | 参数无效 | callback为NULL |
参考案例
middleware/utils/dfx/diag/diag_system_cmd/diag_cmd_dfx_case.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
uapi_transmit_device_register_hook
函数声明
头文件清单
功能说明
- 作为下位机注册传输回调函数,包括传输结果回调、进度上报回调、传输开始回调
- 注册的回调函数在下位机接收到传输数据时被调用
- 重复注册会覆盖之前的回调函数
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
- callback指针非NULL
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| callback | transmit_callback_t * | 传输回调函数 | 非NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 注册成功 |
| ERRCODE_INVALID_PARAM(0x80000001) | 参数无效 | callback为NULL |
参考案例
middleware/chips/3322/dfx/dfx_channel.c
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
uapi_transmit_register_msg_proc_hook
函数声明
errcode_t uapi_transmit_register_msg_proc_hook(uint32_t msg_id_start, uint32_t msg_id_end, transmit_msg_proc_hook hook);
头文件清单
功能说明
- 注册用户自定义的传输消息处理函数,用于在传输线程中添加自定义消息及处理函数
- 使用此函数需打开CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK宏,且必须单独创建传输线程,不能复用dfx_msg线程
- 消息ID范围不能与已注册的范围重叠,最多支持注册10个消息处理函数
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
- CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK宏已开启
- 传输线程已单独创建,未复用dfx_msg线程
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| msg_id_start | uint32_t | 自定义消息的起始ID | 小于msg_id_end |
| msg_id_end | uint32_t | 自定义消息的结束ID | 大于msg_id_start |
| hook | transmit_msg_proc_hook | 自定义消息处理函数 | 非NULL |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 注册成功 |
| ERRCODE_FAIL(0xFFFFFFFF) | 执行失败 | msg_id_start >= msg_id_end、hook为NULL、消息ID范围重叠或注册数量已满 |
| ERRCODE_NOT_SUPPORT(0x80000002) | 不支持 | CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK未开启 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK | 功能宏 | 支持文件传输回调功能 | y |
uapi_transmit_unregister_msg_proc_hook
函数声明
头文件清单
功能说明
- 去注册用户自定义的传输消息处理函数,用于移除已注册的自定义处理函数
- 使用此函数需打开CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK宏
- 若指定hook未注册则返回失败
前置条件
- 传输模块已通过uapi_transmit_init初始化完成
- CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK宏已开启
- hook对应的处理函数已通过uapi_transmit_register_msg_proc_hook注册
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| hook | transmit_msg_proc_hook | 自定义消息处理函数 | 已注册的有效hook |
返回值
- 返回类型:errcode_t
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| ERRCODE_SUCC(0x00) | 执行成功 | 去注册成功 |
| ERRCODE_FAIL(0xFFFFFFFF) | 执行失败 | 指定hook未注册 |
| ERRCODE_NOT_SUPPORT(0x80000002) | 不支持 | CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK未开启 |
Kconfig配置
| 配置项 | 宏类型 | 说明 | 默认值 |
|---|---|---|---|
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE | 功能宏 | 支持数据传输功能 | n(核心为APPS时为y) |
| CONFIG_DFX_SUPPORT_TRANSMIT_FILE_HOOK | 功能宏 | 支持文件传输回调功能 | y |
Type definitions
transmit_result_hook
使用说明
作为transmit_callback_t的result_hook成员类型,用于传输结果回调
调用时机
传输完成时由传输模块调用,通过result参数传递传输结果
transmit_start_hook
使用说明
作为transmit_callback_t的start_hook成员类型,用于传输开始回调
调用时机
传输开始时由传输模块调用,通过channel_id参数传递传输通道ID
transmit_msg_proc_hook
使用说明
作为uapi_transmit_register_msg_proc_hook和uapi_transmit_unregister_msg_proc_hook的hook参数类型,用于自定义消息处理
调用时机
在传输线程中收到自定义消息时调用,通过msg_id传递消息ID,msg传递消息内容,msg_len传递消息长度
transmit_report_schedule_hook
typedef errcode_t (*transmit_report_schedule_hook)(const uint32_t progress, uintptr_t schedule_usr_data);
使用说明
作为transmit_callback_t的schedule_hook成员类型,用于传输进度上报回调
调用时机
传输进度更新时由传输模块调用,通过progress参数传递当前进度
Enumerations
transmit_type_t
typedef enum {
TRANSMIT_TYPE_FILE_UPSTREAM = 0,
TRANSMIT_TYPE_RESERVED = 1,
TRANSMIT_TYPE_FILE_DOWNSTREAM = 2,
TRANSMIT_TYPE_OTA_IMG_DOWNSTREAM = 3,
TRANSMIT_TYPE_MEMORY_UPSTREAM = 4,
TRANSMIT_TYPE_MEMORY_DOWNSTREAM = 5,
TRANSMIT_TYPE_FLASH_UPSTREAM = 6,
TRANSMIT_TYPE_FLASH_DOWNSTREAM = 7,
TRANSMIT_TYPE_OTA_IMG_UPSTREAM = 8,
TRANSMIT_TYPE_MAX,
} transmit_type_t;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| TRANSMIT_TYPE_FILE_UPSTREAM | 0 | 文件数据上行(下位机->上位机),即下位机作为源端(读文件) |
| TRANSMIT_TYPE_RESERVED | 1 | 保留类型(为兼容旧的工具而保留) |
| TRANSMIT_TYPE_FILE_DOWNSTREAM | 2 | 文件数据下行(上位机->下位机),即下位机作为目的端(写文件) |
| TRANSMIT_TYPE_OTA_IMG_DOWNSTREAM | 3 | 升级包数据下行(上位机->下位机),即下位机作为目的端(写升级包) |
| TRANSMIT_TYPE_MEMORY_UPSTREAM | 4 | 内存数据上行(下位机->上位机),即下位机作为源端(读内存) |
| TRANSMIT_TYPE_MEMORY_DOWNSTREAM | 5 | 内存数据下行(上位机->下位机),即下位机作为目的端(写内存) |
| TRANSMIT_TYPE_FLASH_UPSTREAM | 6 | Flash数据上行(下位机->上位机),即下位机作为源端(读Flash) |
| TRANSMIT_TYPE_FLASH_DOWNSTREAM | 7 | Flash数据下行(上位机->下位机),即下位机作为目的端(写Flash) |
| TRANSMIT_TYPE_OTA_IMG_UPSTREAM | 8 | 升级包数据上行(下位机->上位机),即下位机作为源端(读升级包) |
| TRANSMIT_TYPE_MAX | 9 | 传输类型数量 |
Structures
transmit_addr_info
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| host_start_addr | uintptr_t | 上位机上的Flash或memory数据的起始地址 |
| device_start_addr | uintptr_t | 下位机上的Flash或memory数据的起始地址 |
transmit_file_info
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| host_file_name | const char * | 上位机上的文件名称(包含路径) |
| device_file_name | const char * | 下位机上文件名称(包含路径) |
transmit_cfg_info_t
typedef struct {
union {
transmit_addr_info addr_info;
transmit_file_info file_info;
} data;
uint32_t total_size;
uint16_t data_block_number;
uint16_t data_block_size;
bool re_transmit;
} transmit_cfg_info_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| data.addr_info | transmit_addr_info | Flash或memory数据地址信息 |
| data.file_info | transmit_file_info | 文件名称信息 |
| total_size | uint32_t | 要传输的数据长度 |
| data_block_number | uint16_t | 每组传输次数,0表示默认值DEFAULT_TRANSMIT_BLOCK_NUMBER(8) |
| data_block_size | uint16_t | 每次传输数据大小,0表示默认值DEFAULT_TRANSMIT_BLOCK_SIZE(0x100) |
| re_transmit | bool | 是否需要断点续传 |
transmit_callback_t
typedef struct {
transmit_result_hook result_hook;
uintptr_t result_usr_data;
transmit_report_schedule_hook schedule_hook;
uintptr_t schedule_usr_data;
transmit_start_hook start_hook;
uintptr_t start_usr_data;
} transmit_callback_t;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| result_hook | transmit_result_hook | 传输结果回调函数 |
| result_usr_data | uintptr_t | 传输结果回调函数用户数据 |
| schedule_hook | transmit_report_schedule_hook | 传输进度向上位机上报回调函数 |
| schedule_usr_data | uintptr_t | 传输进度向上位机上报回调函数用户数据 |
| start_hook | transmit_start_hook | 传输开始回调函数 |
| start_usr_data | uintptr_t | 传输开始回调函数用户数据 |