运行时包
确保 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) — 进度回调,可为 NULLuser(void*) — 原样透传给 cb
返回值:
int32_t—DARRA_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,不留半成品包。
备注
进度回调内部禁止调用(回调里调本函数同样视为违反契约)。