先完成一个结果:APP 能添加开发板,手机切换日夜模式时,仪表跟着变化。 导航和控车在接通后继续加入。
本指南使用 SDK 0.1.0 的 FreeRTOS 接口,不限定芯片品牌。开始前先确认与你的芯片、FreeRTOS 配置和工具链匹配的接入包。
1. 准备开发板和接入包
你需要:运行 FreeRTOS 且具备 BLE 通信的开发板、可显示配对码的屏幕、已安装无限骑行的手机,以及对应平台的 SDK 包。
每台设备还需要自己的 .motolic 授权文件、签发时使用的硬件标识和可信公钥,由 load_license 读取。设备授权说明。
2. 加入现有 FreeRTOS 工程
将接入包的头文件目录加入编译路径,按包内说明链接目标平台的静态库和依赖库。继续使用开发板原有的编译、烧录工具,不需要更换工程框架。
应用中主要接两部分:
| 部分 | 你要做什么 |
|---|---|
| SDK 启动与事件任务 | 填写配置、启动 SDK、持续读取并分发事件 |
| 板级驱动 | 提供授权读取、存储、蓝牙、计时、随机数和屏幕接口 |
编译通过后,还需要接通这些驱动才能连接手机。
3. 填写硬件接口
在 moto_terminal_config.port 中填写下列回调。port 就是 SDK 调用你的硬件功能时使用的接口表:
| 回调 | 你要实现的操作 |
|---|---|
load_license |
读出本机授权、硬件标识和公钥;成功返回 0 |
read_pairing / write_pairing |
原样读取、持久化绑定记录;无记录时读出长度为 0 |
random |
填满指定长度的安全随机字节 |
now_ms |
提供线程安全、单调递增的毫秒计时 |
ble_send |
复制数据到蓝牙发送队列,返回已接收字节数;暂忙返回 0 |
ble_close |
请求断开指定的蓝牙连接 |
蓝牙驱动还需创建服务、开始广播,并转交连接和收包事件。UUID 与收发规则。屏幕驱动负责显示、清除四位配对码,以及切换日夜界面。
4. 配置并启动 SDK
下面是配置片段。board_fill_port 是你实现的辅助函数,用来填写上面的回调,不是 SDK API:
#include <moto_freertos/terminal.h>
moto_terminal_config c;
moto_terminal_config_init(&c);
board_fill_port(&c.port);
c.hardware_revision = "BOARD-REV1";
c.firmware_version = "1.0.0";
c.width = 1024;
c.height = 600;
宽高改成实际屏幕像素。首次验证连接时先保持 h264、mjpeg 关闭;大屏接入导航时再开启视频,同时保留 HUD。
从 FreeRTOS 应用任务按以下顺序启动:
- 初始化存储、随机源、时钟和硬件驱动。
- 调用
moto_terminal_create(&c, &terminal, &error);成功后调用moto_terminal_start(terminal),每一步都检查返回值。 - 获取 SDK 广播数据并启动 BLE,允许手机连接。
- 用一个任务持续调用
moto_terminal_next_event,处理配对码和手机状态事件。耗时操作交给对应驱动任务。
用开发板原有工具编译、烧录并查看日志。启动失败时按常见问题排查。
5. 用手机确认接通
- 在 APP 登录,进入添加设备并搜索开发板。
- 输入仪表显示的四位 PIN,包括开头的
0。 - 添加成功后,切换 APP 日夜外观。
- 仪表收到
MOTO_EVENT_PHONE_STATE,按e.data.phone.theme切换屏幕主题。 - 重启开发板,确认已有绑定仍能连接。
