升级文件上传

向服务端上传升级文件。

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 事件依赖事件订阅已经建立;没有有效订阅时无法获得解析结果
  • 升级期间重复上传:上一次解析仍在进行时再次上传,将覆盖接收文件,上一次解析的最终事件可能不再有意义