升级文件上传
向服务端上传升级文件。
ti_upgrade
上传升级文件。
文件由 SDK 内部分块流式上传。返回成功仅表示服务端已完整接收文件并开始解析;最终解析结果通过 upgradeStatus 事件获取。
- client: 客户端句柄。
- key: 升级目标 key,当前支持
TI_UPGRADE_TARGET_SYSTEM。 - file_path: 升级文件路径(UTF-8 编码)。
- 返回:
TI_OK— 上传完成,服务端已接收并开始解析(不表示解析通过) - 返回:
TI_ERR_NOT_CONNECTED— 未连接 - 返回:
TI_ERR_INVALID_ARG— client / key / file_path 为 NULL 或为空、文件不存在或打不开、文件大小超出上限(256 MiB) - 返回:
TI_ERR_TIMEOUT— 上传超时(300s deadline) - 返回:
TI_ERR_SERVER— 服务端接收失败
注意: 同步阻塞调用(最长 300s),不要在 UI 线程直接调用,否则界面会卡死。
参见: ti_start_event_subscription()
TI_UPGRADE_TARGET_SYSTEM
升级目标 key:整机系统升级文件。
upgradeStatus 事件
上传完成后,解析结果通过事件订阅推送,status 为三态:
| status | 含义 |
|---|---|
"parsing" | 文件已完整接收,正在解析(中间态,继续等待) |
"ready" | 解析通过,升级文件已就绪;可提示操作员按产品手册执行后续升级步骤 |
"failed" | 解析失败,message 携带失败原因;可更换升级文件后重试 |
事件 JSON 形状(message 为空时省略该键):
{"upgradeStatus":{"key":"SYSTEM","status":"parsing"}}
{"upgradeStatus":{"key":"SYSTEM","status":"ready"}}
{"upgradeStatus":{"key":"SYSTEM","status":"failed","message":"invalid file format"}}
使用示例
// 事件回调:解析 upgradeStatus
void on_event(const char *event_json, void *user_data) {
// 在此解析 {"upgradeStatus": {"key": "SYSTEM", "status": ...}}
// status 为 "ready" 或 "failed" 时流程结束
}
// 1. 注册回调并启动事件订阅(必须在 ti_upgrade 之前)
ti_set_event_callback(cli, on_event, NULL);
ti_start_event_subscription(cli);
// 2. 上传系统升级文件
int rc = ti_upgrade(cli, TI_UPGRADE_TARGET_SYSTEM, "/path/to/upgrade.bin");
if (rc != TI_OK) {
fprintf(stderr, "上传失败: %s\n", ti_last_error(cli));
return;
}
// 3. 继续等待 upgrade_status 事件(回调中获取最终结果)
文件要求与注意事项
- 使用设备对应型号的系统升级文件
- 文件大小不超过 256 MiB
upgradeStatus事件依赖事件订阅已经建立;没有有效订阅时无法获得解析结果- 升级期间重复上传:上一次解析仍在进行时再次上传,将覆盖接收文件,上一次解析的最终事件可能不再有意义