跳到主要内容

运行时包

确保 Provider / profile 已装好。合法 ID 见 运行时

备注

SDK 不自动安装 / 升级系统驱动(要管理员和重启);驱动问题 fail-closed + darra_diag_collect 给确切原因。

darra_runtime_ensure()

int32_t darra_runtime_ensure(const char* profile_or_provider_id,
const char* offline_zip_or_null,
darra_progress_cb cb,
void* user);

确保指定 Provider / profile 已装好;没装就探测 → 选包 → 下载 → sha256 校验 → 解压登记。

参数:

  • profile_or_provider_id (const char*) — 细包 / 场景包 ID;NULL = 按硬件探测自动选
  • offline_zip_or_null (const char*) — 离线整合包 zip 路径;给定时跳过 manifest/download,仍过内嵌 sha256 清单校验。NULL = 在线下载
  • cb (darra_progress_cb) — 进度回调,可为 NULL
  • user (void*) — 原样透传给 cb

返回值:

  • int32_tDARRA_OK 成功

行为:

  • 幂等:已装且清单匹配 → 直接成功(回调收到一次 "done", 100)。
  • 进程内串行:并发调用被内部互斥串行化,重复调用安全。
  • 事务性:全部步骤成功才登记 Provider;取消或任何失败不留半成品。

典型错误:DARRA_IO_NOT_FOUND(离线包路径错)/ DARRA_NETWORK_FAILED / DARRA_CHECKSUM_MISMATCH / DARRA_IO_DENIED(目标目录需管理员)/ DARRA_UNSUPPORTED_PLATFORM(如 Windows 上指名 edge-rknn)/ DARRA_PROVIDER_ABI_MISMATCH / DARRA_CANCELLED

相关结构:

typedef void (*darra_progress_cb)(float percent, const char* stage, void* user);

percent 0..100,每个 stage 内单调不降。回调在 SDK 内部工作线程触发:回调里禁止调用任何 darra_* 函数,只准记录或转发到调用方自己的 UI 队列。

stage 取值:

  • probe — 硬件探测
  • manifest — 清单获取
  • download — 下载
  • verify — sha256 校验
  • install — 解压登记
  • done — 完成

示例:

static void on_progress(float percent, const char* stage, void* user) {
(void)user;
printf("\r[%-8s] %5.1f%%", stage, percent); fflush(stdout);
}

int32_t rc = darra_runtime_ensure("cpu-only", NULL, on_progress, NULL);

断网现场换成:

darra_runtime_ensure("cpu-only", "darra-ai-runtime-cpu-only-offline.zip", on_progress, NULL);

darra_runtime_ensure_cancel()

void darra_runtime_ensure_cancel(void);

请求取消当前在飞的 darra_runtime_ensure(可从任意线程调,含进度回调外的 UI 线程)。没有在飞的 ensure 时为 no-op。被取消的 ensure 返回 DARRA_CANCELLED,不留半成品包。

备注

进度回调内部禁止调用(回调里调本函数同样视为违反契约)。