本页内容 收到指令后怎么处理告诉 APP 执行结果上报电量和里程上报车辆故障如何确认接入成功
SDK / FreeRTOS

控车与车况

执行 APP 指令,上报电量、里程和故障。

这一章接两条链路:把 APP 指令交给车辆控制器,再把车辆状态回传到 APP。开始前,先完成蓝牙连接,并在后台型号中开启对应功能。

收到指令后怎么处理

APP 点“解锁” → SDK 发出 VEHICLE_COMMAND 事件
→ 你的驱动操作车辆 → 控制器确认结果 → SDK 回传 APP

收到 MOTO_EVENT_VEHICLE_COMMAND 后,用下面三个字段确定动作:

字段 含义
e.message 哪一种控制命令
e.target 控制哪个对象
e.value 动作或设置值

具体取值使用接入包头文件中的命令定义。把整个事件复制给 CAN、串口或其他车辆驱动,完成后还要用这个事件回报结果。

告诉 APP 执行结果

控制器确认动作完成后调用:

moto_result rc = moto_terminal_complete(
    terminal, &saved_event, MOTO_SUCCEEDED, 0);

saved_event 是收到这条指令时保存的事件。结果按实际情况选择:

结果 例子
MOTO_SUCCEEDED 控制器确认已经解锁
MOTO_FAILED 控制器明确拒绝;最后一个参数填驱动错误码
MOTO_UNKNOWN 指令发出了,但超时后无法确认是否解锁

返回 MOTO_OK 表示 SDK 已接收这份结果;MOTO_FULL 表示还没接收,保留结果后重试。重试的是回报结果,不是再次执行车辆动作。

如果指令在驱动队列中等待过,执行前检查 deadline_ms(有效截止时间,0 表示未设置),并确认仍属于当前连接和会话。断连时取消尚未执行的旧指令。

上报电量和里程

读取车辆后,每次提交当前完整状态。下面的两个变量需换成你的采样值:

moto_vehicle_state state = {0};
state.present = MOTO_CAP(MOTO_BATTERY) | MOTO_CAP(MOTO_MILEAGE);
state.values[MOTO_BATTERY] = actual_soc_percent;   // 百分比
state.values[MOTO_MILEAGE] = actual_total_metres;  // 米
moto_result rc = moto_terminal_report_state(terminal, &state);
  • present:本次报告包含哪些字段。
  • values:每个字段的数值。
  • unknown:包含但暂时读不到的字段,必须同时出现在 present 中。

例如电量读不到时标记 unknown,不填 0;0 代表电量已耗尽。SDK 自动生成状态版本号,无需自行维护。

上报车辆故障

使用 moto_terminal_report_fault(t, id, active, module, code, severity):

参数 填写方式
id 非零故障编号,同一故障重试时保持不变
active true 为出现,false 为解除
module / code 模块名及厂商故障码,例如电池模块的故障编号
severity 严重程度,范围 0–3

如何确认接入成功

在 APP 逐项操作锁车、解锁和鸣笛,检查真实车辆动作与 APP 结果一致。再拔掉控制器通信,确认 APP 能收到失败或未知结果;恢复后核对电量和里程。

所有完成、状态和故障上报接口遇到 MOTO_FULL 时都要保留本次数据后重试。完整返回值见 API 速查。