HiSpark编程指南

- 调测资料
  - SDK Sample使用指南
    - 前言
    - 概述
    - Sample框架
    - 外设 Sample
    - SLE UART Sample
    - SLE UART DMA Sample
    - SLE Mouse Sample
    - SLE amic vdt with dongle
    - SLE microphone
    - SLE measure dis
    - BLE Lowpower Sample
    - BLE UART Sample
    - BLE Keyboard Sample
    - BLE SLE TAG Sample
    - BLE Mouse Sample
    - USB Keyboard Sample
    - USB Mouse Sample
    - USB AMIC VDT Sample
    - RCU
    - 多连接
    - air mouse
    - SLE MOUSE with Dongle
    - SLE OTA dongle
    - game mouse
    - BLE UUID
    - 缩略语
  - SDK二次开发网络安全注意事项
    - 前言
    - 产品安全解决方案
    - 结论
  - SDK开发环境搭建用户指南
    - 前言
    - 开发环境搭建
    - 编译SDK
    - 新建APP
  - 内存维测指导书
    - 前言
    - 简介
    - 内存维测功能
  - 射频AT测试指南
    - 前言
    - 射频测试AT指令
    - AT指令组包示例
    - 注意事项
  - 维测指导书
    - 前言
    - 概述
    - 日志说明
    - 日志分析
    - 问题定位
    - 典型案例
    - 常见问题FAQ
- 软件资料
  - AT命令使用指南
    - 前言
    - 指令说明
    - 通用AT指令
    - BT业务AT指令
    - 新增AT指令方法
  - DFU升级APK开发指南
    - 前言
    - 功能特性
    - 系统框架
    - 工程文件部署
    - 界面实现
    - 升级界面Fragment实现
    - 关于界面Fragment实现
    - 应用清单AndroidManifest
  - DFX软件开发指南
    - 前言
    - DIAG维测功能
    - 死机诊断
    - Dump解析
  - EFUSE使用指南
    - 前言
    - 概述
    - 使用软件接口读写EFUSE
    - 使用BurnTool烧写EFUSE
  - NFC TAG软件开发指导书
    - 前言
    - 概述
    - 开发指导
  - NV存储用户指南
    - 前言
    - NV简介
    - NV编译预置
    - NV API指南
    - 定制化NV结构使用介绍
    - 通过NV自定义传输数据最大长度
  - Release notes
    - 1.0.18版本描述文件
    - 1.0.17版本描述文件
    - 1.0.16版本描述文件
  - SDK开发指南
    - 前言
    - 概述
    - 系统接口
  - SDK接口变更说明书
    - 前言
    - BLE SDK接口变更说明
  - SP31 SLP使用指南
    - 开源版本
  - USB HID复合设备开发指南
    - 前言
    - 概述
    - 实现方式
  - 代码框架说明
    - 前言
    - SDK模块框架
    - SDK目录结构
    - SDK目录说明
  - 低功耗FAQ
    - 前言
    - 系统无法睡眠
    - IO无法唤醒系统
    - 唤醒后外设异常
    - 低功耗导致OTA升级异常
    - 功耗比预期高
    - 锁中断导致BT业务阻塞
    - 概率性狗超时
    - 供电模式&软件配置
    - 提前唤醒时间问题
  - 低功耗sample使用指南
    - 前言
    - 编译&测试
    - 系统状态管理
    - 用户指南
  - 低功耗开发指南
    - 前言
    - 低功耗概述
    - 低功耗方案
    - 开发指引
    - 功耗优化
    - 常见问题
  - 功率配置说明书
    - 前言
    - 射频功率配置说明
  - 升级方案使用指南
    - 前言
    - 概述
    - 升级包制作
    - 升级包传输
    - 升级包保存
    - 升级包本地升级
    - FAQ
  - 快速入门指南
    - 前言
    - 文档目录
    - 环境搭建
    - 基础功能开发
    - 调优
    - 特性开发
    - 测试报告
  - 星闪应用层SLE-Link协议
    - 前言
    - 概述
    - SLE Frame格式定义
    - 服务接口定义
    - 交互流程示例
  - 星闪软件开发指导书
    - 前言
    - 概述
    - Device Discovery接口
    - Connection Manager接口
    - SSAP Server接口
    - SSAP client接口
    - Low Latency接口
    - Transmission Manager接口
    - SLE Passkey接口
    - SLE Channel Map 接口
  - 红外学习使用指南
    - 前言
    - 红外学习方式
    - 通过比较器进行红外学习
    - 使用指南
  - 蓝牙软件开发指导书
    - 前言
    - 概述
    - GAP接口
    - GATT server接口
    - GATT client接口
  - 设备驱动开发指南
    - 前言
    - Pinctrl
    - GPIO
    - UART
    - SPI
    - I2C
    - ADC
    - DMA
    - PWM
    - WDT
    - Timer
    - Systick
    - TCXO
    - Flash
    - SFC
    - QDEC
    - KEYSCAN
    - PDM
    - USB_HID
    - USB_DFU
    - I2S
    - TRNG
    - 附：MIDDLEWARE
  - 音频编解码开发指导书
    - 前言
    - 概述
    - Audio Encoder
    - Audio Decoder
    - 调试与功能
- 工具资料
  - BurnTool工具使用指导书
    - 前言
    - BurnTool工具简介
    - 操作指南
    - FAQ
  - HiSpark Studio使用指南
    - 前言
    - 工具简介
    - 开发环境搭建
    - 工程管理
    - 工程配置
    - 编译运行
    - 软件包烧录
    - 栈分析和镜像分析
    - 工程调试
    - 串口控制台工具
    - Kconfig配置
    - GUI工程创建与使用
    - 高阶分析功能使用
    - 常见错误

### 该页内容

- 编译步骤
  - Initiator编译
  - Responder编译
- 使用方法
- 启动流程
- 可用功能
  - 虚拟串口
  - CIR上报功能

# 开源版本

开源版本支持SLP基础功能，示例代码中包含了SLP测距、SLP测角、SLP CIR上报、USB等功能的实现，可供开发人员参考。下文以生态三天线板指向单板作为

## 编译步骤

需编译RCU和Dongle两个版本，单板类型默认使用三天线单板，使用SDK搭配SLP固件进行编译，SDK由BS2X提供，以下章节主要介绍配置项的修改。

### Initiator编译

> 说明： SDK中已经包含配套的SLP固件，位于middleware\services\srv_tiot_host\tiot_driver\product_porting\air_mouse\firmware目录下，若非版本升级则不需要更新，下文的“1”是固件更新的操作流程，可跳过。

1. 更新SLP固件（SDK中自带版本，无更新时可跳过该步骤）。在SDK的interim_binary\bs21a\bin目录下，新建slp\firmware目录，将SP31A的版本文件夹中的“file_array”和“file_array_ota”放入“interim_binary\bs21a\bin\slp\firmware”目录下。

   图 1 SLP固件存放位置

2. 打开Visual Studio Code工具，根据BS2X的版本文档，导入SDK工程。

3. 打开KConfig，开启LDO模式，如下图所示。

   图 2 Initiator开启LDO模式

4. 将AIR MOUSE type设置为Enable AIR MOUSE sample，如下图所示。

   图 3 Initiator配置Enable AIR MOUSE sample模式

5. 将Select AIR MOUSE board设置为Open Source Board，如下图所示。

   图 4 Initiator配置Open Source Board类型

6. 若需要打印CIR，可开启Open Cir print模式，如下图所示。

   图 5 Initiator开启Open Cir print模式

7. 修改UART管脚配置，H0TX=26，H0RX=27，H0CTS=28，H0RTS=29

   图 6 Initiator修改UART管脚配置

8. 单击Rebuild，进行版本编译，编译成功后的版本路径：tools\pkg\fwpkg\bs21a，版本文件名称：bs21a_all.fwpkg。

### Responder编译

1. 更新SLP固件（SDK中自带版本，无更新时可跳过该步骤）。在SDK的interim_binary\bs21a\bin目录下，新建SLP\firmware目录，将SP31A的版本文件夹中的“file_array”和“file_array_ota”放入“interim_binary\bs21a\bin\slp\firmware”目录下。

   图 1 SLP固件存放位置

2. 打开Visual Studio Code工具，根据BS2X的版本文档，导入SDK工程。

3. 打开KConfig，开启LDO模式，如下图所示。

   图 2 Responder开启LDO模式

4. 打开KConfig，将AIR MOUSE type改为 Enable AIR MOUSE Dongle sample，如下图所示。

   图 3 Responder配置Enable AIR MOUSE Dongle sample模式

5. 将Select AIR MOUSE board设置为Open Source Board，如下图所示。

   图 4 Responder配置Open Source Board类型

6. 若需要打印CIR，可开启Open Cir print模式，如下图所示。

   图 5 Responder开启Open Cir print模式

7. 修改UART管脚配置，H0TX=26，H0RX=27，H0CTS=28，H0RTS=9

   图 6 Responder修改UART管脚配置

8. 单击Rebuild，进行版本编译，编译成功后的版本路径：tools\pkg\fwpkg\bs21a，版本文件名称：bs21a_all.fwpkg。

## 使用方法

1. Initiator侧和Responder侧各自烧录对应版本。

2. Initiator侧和Responder侧重新上电。Initiator侧上电后SLE启动广播。Responder侧通过USB连接主机设备，上电后SLE启动扫描、USB初始化和枚举设备等操作，主机设备会识别到HID设备。

3. 等待SLE建链。

4. 待SLE连接配对成功后，两端会自动加载SLP固件，加载成功后会上报SLP版本号信息（可检查版本是否正确），之后会自动启动SLP业务，若业务流程正常则在Responder侧的串口日志中周期性打印测距、测角等上报信息，主机屏幕上会显示光标。两端日志如下图所示，启动流程可参考“启动流程”。

   图 1 指向遥控器RCU、Dongle串口日志

5. 若开启了CIR功能，则在USB串口中打印CIR数据。

   图 2 USB串口中CIR日志上报

## 启动流程

图 1 CIR上报业务简易流程

## 可用功能

### 虚拟串口

USB类型默认设置为DEV_SER_HID（HID和虚拟串口设备），将单板通过USB线连接主机后，主机端会识别到一个串口设备和HID设备（见下图），其中HID设备用来显示光标，串口设备可收发数据，进行发送CIR数据或接收产测命令等操作。

图 1 主机USB设备显示

### CIR上报功能

> 须知： 该功能占用资源较多，仅部分版本支持。

示例中的Sample代码已实现CIR上报功能，可参考编译步骤章节进行配置，设备建链后会在USB串口中打印CIR数据。示例代码中相关函数如下表所示。

函数名称 | 描述 | 所在文件
--- | --- | ---
set_slp_start_ranging_param | 启动测距测角业务，CIR开启时默认频率设置为15Hz | sle_air_mouse_server.c
rpt_cir_cbk | Initiator侧挂载的cir上报回调函数 | sle_air_mouse_server.c
rpt_cir_cbk | Responder侧挂载的cir上报回调函数 | sle_air_mouse_client.c
air_mouse_print | 自定义的打印函数，CIR数据优先从USB串口中输出，若USB没有被枚举到，则从烧录串口中打印。 | air_mouse_common.c