3 接口说明

3.1 蓝牙代理类

IBluetoothManager是用户必须实现的接口类, 需要通过该接口类获取用户SDK的蓝牙控制接口, 蓝牙传输数据等重要内容。

方法名

参数

返回

描述

作用方式

onBtDeviceConnection

device: 蓝牙设备对象
status: 连接状态
注意: 需要转换为StateCode的 3.6.1   连接状态

void

传递蓝牙连接状态

用户调用
实现状态传递

onReceiveDeviceData

device: 蓝牙设备对象
data: 原始数据

void

传递接收到的蓝牙数据

用户调用
实现数据传递

onMtuChanged

gatt: BluetoothGatt控制对象
mtu: 协商的BLE的mtu
status: 状态

void

传递协商的BLE的MTU

用户调用
可以不实现

onError

error: 错误事件

void

传递错误事件

用户调用
可以不实现

getConnectedDevice

BluetoothDevice - 已连接的蓝牙设备对象
备注: 没有设备连接时, 返回null

获取已连接的蓝牙设备对象

需要用户实现

getConnectedBluetoothGatt

BluetoothGatt - 已连接的BLE的GATT控制对象
备注: 没有设备连接时, 返回null

获取已连接的BLE的GATT控制对象

需要用户实现
可以不实现, SPP不实现

connectBluetoothDevice

device: 蓝牙设备对象

void

连接蓝牙设备

需要用户实现, 方便库内实现回连设备

disconnectBluetoothDevice

device: 蓝牙设备对象

void

断开蓝牙设备的连接

需要用户实现, 方便库内断开蓝牙设备

sendDataToDevice

device: 蓝牙设备对象
data: 数据包

boolean - 操作结果

向蓝牙设备发送数据

用户必须实现

queryMandatoryUpdate

IActionCallback<TargetInfoResponse> - 结果回调

void

查询设备升级状态

直接调用

Important

1. connectBluetoothDevice 必须保证单独连接, 不会影响到其他连接
- BLE方式, 只连接BLE, 不连接经典蓝牙
- 传递的连接状态需要转换为 3.6   状态码 的连接状态
2. sendDataToDevice 需要保证数据完整的发送
- BLE方式, 需要根据 MTU分包队列式发数 。API会通知发送的数据, 不考虑MTU。
可以参考Demo的 SendBleDataThread 的实现
- SPP方式, 无需特殊处理
3. BLE方式实现 sendDataToDevice 接口需要注意以下几点
- 需要根据BLE的MTU值, 进行MTU分包
- 不能并发式发数, 需要队列式发数
- 因为OTA功能需要发送大量数据, 需要队列式发数, 保证数据完整的正确的发送

3.2 OTA操作接口

IUpgradeManager 主要是实现OTA的流程功能的, 由OTA库实现, 用户调用对应接口即可实现OTA升级。

方法名

参数

返回

描述

configure

2.2.1   BluetoothOTAConfigure - OTA参数

void

配置OTA的实现参数

startOTA

3.3   OTA流程回调 - OTA的状态回调

void

开始OTA流程

cancelOTA

void

void

取消OTA流程

release

void

void

释放资源

isOTA

void

boolean

是否进行OTA

getDeviceInfo

void

2.4.1   TargetInfoResponse

获取缓存的设备信息,
可以作为初始化是否完成标志

Important

  1. cancelOTA : 如果是单备份方案, API无效; 如果是双备份方案, API才有效

3.3 OTA流程回调

IUpgradeCallback 是OTA流程的状态回调, 用于更新UI。

public interface IUpgradeCallback {

   /**
    * OTA开始
    */
   void onStartOTA();

   /**
    * 需要回连的回调
    *
    * <p>注意:<br/>
    * 1.仅连接BLE通讯通道<br/>
    * 2.用于单备份OTA</p>
    *
    * @param addr 回连设备的MAC地址
    * @param isNewReconnectWay 是否使用新回连方式
    */
   void onNeedReconnect(String addr, boolean isNewReconnectWay);

   /**
    * 进度回调
    *
    * @param type     类型
    *                 <p>0 -- 下载资源
    *                 or 1 -- 固件升级</p>
    * @param progress 进度
    */
   void onProgress(int type, float progress);

   /**
    * OTA结束
    */
   void onStopOTA();

   /**
    * OTA取消
    */
   void onCancelOTA();

   /**
    * OTA失败
    *
    * @param error 错误信息
    */
   void onError(BaseError error);
}

3.3.1 BaseError

错误信息

public class BaseError {
   /**
    * 主错误码
    */
    private final int code;
   /**
    * 子错误码
    */
   private final int subCode;
   /**
    * 操作码
    */
   private int opCode;
   /**
    * 描述信息
    */
   private final String message;
}

3.4 蓝牙事件回调

IBluetoothCallback

public interface IBluetoothCallback {
   /**
    * 蓝牙适配器开关回调
    *
    * @param bEnabled 开关
    * @param bHasBle  是否支持BLE功能
    */
   void onAdapterStatus(boolean bEnabled, boolean bHasBle);

   /**
    * 搜索蓝牙设备的状态回调
    *
    * @param bBle 是否搜索BLE
    * @param bStart 搜索状态
    */
   void onDiscoveryStatus(boolean bBle, boolean bStart);

   /**
    * 发现蓝牙设备的回调
    *
    * @param device 蓝牙设备对象
    */
   @Deprecated
   void onDiscovery(BluetoothDevice device);

   /**
    * 发现蓝牙设备的回调
    * @param device 蓝牙设备对象
    * @param bleScanMessage BLE扫描数据
    */
   void onDiscovery(BluetoothDevice device, BleScanMessage bleScanMessage);

   /**
    * 蓝牙设备配对状态回调
    *
    * @param device 蓝牙设备对象
    * @param status 配对状态
    */
   void onBondStatus(BluetoothDevice device, int status);

   /**
    * BLE数据缓冲区送数据设置回调
    *
    * @param device: BLE设备
    * @param block 缓冲区大小
    * @param status: 0 - 成功, 其他失败
    */
   void onBleDataBlockChanged(BluetoothDevice device, int block, int status);

   /**
    * 蓝牙设备连接回调
    *
    * @param device 蓝牙设备对象
    * @param status 连接状态
    */
   void onBtDeviceConnection(BluetoothDevice device, int status);

   /**
    * 连接回调
    *
    * @param device 蓝牙设备对象
    * @param status 连接状态
    */
   void onConnection(BluetoothDevice device, int status);

   /**
    * 从蓝牙设备接收到的数据
    *
    * @param device 蓝牙设备对象
    * @param data   原始数据
    */
   void onReceiveData(BluetoothDevice device, byte[] data);

   /**
    * 经典蓝牙的A2DP服务连接状态
    *
    * @param device 经典蓝牙设备对象
    * @param status 连接状态
    */
   void onA2dpStatus(BluetoothDevice device, int status);

   /**
    * 经典蓝牙的HFP服务连接状态
    *
    * @param device 经典蓝牙设备对象
    * @param status 连接状态
    */
   void onHfpStatus(BluetoothDevice device, int status);

   /**
    * 错误事件回调
    *
    * @param error 错误事件
    */
   void onError(BaseError error);
}

3.5 错误码

对应的类名: ErrorCode

3.5.1 主错误码

错误码

名称

描述

-1

ErrorCode#ERR_UNKNOWN

未知错误

0

ErrorCode#ERR_NONE

没有错误

1

ErrorCode#ERR_COMMON

通用错误

2

ErrorCode#ERR_STATUS

状态错误

3

ErrorCode#ERR_COMMUNICATION

通讯错误

4

ErrorCode#ERR_OTA

OTA错误

5

ErrorCode#ERR_OTHER

其他错误

3.5.2 详细错误码

格式: 0x[主码值][序号]

错误码

名称

描述

备注

0x1001(4097)

ErrorCode#SUB_ERR_PARAMETER

参数错误

0x1012(4098)

ErrorCode#SUB_ERR_REMOTE_NOT_CONNECTED

远端设备未连接

2.1 蓝牙设备已连接, 为什么调用OTA库接口返回错误, 4114(0x1012), 设备未连接


0x3002(12290)

ErrorCode#SUB_ERR_SEND_FAILED

发送数据失败

2.2 错误码: 12290(0x3002), 发送数据失败

0x3003(12291)

ErrorCode#SUB_ERR_PAIR_TIMEOUT

配对超时

0x3004(12292)

ErrorCode#SUB_ERR_DATA_FORMAT

数据格式异常

0x3005(12293)

ErrorCode#SUB_ERR_PARSE_DATA

解包异常

0x3007(12295)

ErrorCode#SUB_ERR_SEND_TIMEOUT

发送数据超时

2.4 错误码: 12295(0x3007), 发送数据超时

0x3008(12296)

ErrorCode#SUB_ERR_RESPONSE_BAD_STATUS

回复失败状态

2.6 错误码:12296(0x3008), 回复失败状态

0x300A(12298)

ErrorCode#SUB_ERR_RESPONSE_BAD_RESULT

设备回复错误结果

0x300B(12299)

ErrorCode#SUB_ERR_WAITING_COMMAND_TIMEOUT

等待命令超时

3.1 升级失败,错误码: 12299(0x300B), 等待命令超时


0x4001(16385)

ErrorCode#SUB_ERR_OTA_FAILED

OTA升级失败

3.3 升级失败,错误码: 16385(0x4001), OTA升级失败

0x4002(16386)

ErrorCode#SUB_ERR_DEVICE_LOW_VOLTAGE

设备低电压

3.4 升级失败,错误码: 16386(0x4002), 设备低电压

0x4003(16387)

ErrorCode#SUB_ERR_CHECK_UPGRADE_FILE

升级文件错误

3.5 升级失败,错误码: 16387(0x4003), 升级文件错误

0x4004(16388)

ErrorCode#SUB_ERR_OFFSET_OVER

读取偏移量失败

设备请求数据的偏移量越界

0x4005(16389)

ErrorCode#SUB_ERR_CHECK_RECEIVED_DATA_FAILED

数据校验失败

3.6 升级失败, 错误吗: 16389(0x4005), 数据校验失败

0x4006(16390)

ErrorCode#SUB_ERR_UPGRADE_KEY_NOT_MATCH

加密key不匹配

3.12 升级失败, 错误码: 16390(0x4006), 加密key不匹配

0x4007(16391)

ErrorCode#SUB_ERR_UPGRADE_TYPE_NOT_MATCH

升级类型出错

0x4008(16392)

ErrorCode#SUB_ERR_OTA_IN_HANDLE

升级程序正在进行

3.2 升级失败,错误码: 16392(0x4008), 升级程序正在进行

0x4009(16393)

ErrorCode#SUB_ERR_UPGRADE_DATA_LEN

升级过程中出现长度错误

0x400A(16394)

ErrorCode#SUB_ERR_UPGRADE_FLASH_READ

flash读写错误

0x400B(16395)

ErrorCode#SUB_ERR_UPGRADE_CMD_TIMEOUT

命令超时

0x400C(16396)

ErrorCode#SUB_ERR_UPGRADE_FILE_VERSION_SAME

升级文件的固件版本一致

3.7 升级失败, 错误码: 16396(0x400C), 升级文件的固件版本一致

0x400D(16397)

ErrorCode#SUB_ERR_TWS_NOT_CONNECT

TWS未连接

3.8 升级失败, 错误码: 16397(0x400D), TWS未连接

0x400E(16398)

ErrorCode#SUB_ERR_HEADSET_NOT_IN_CHARGING_BIN

耳机未在充电仓

0x400F(16399)

ErrorCode#SUB_ERR_UPGRADE_SAME_FILE

相同文件

3.9 升级失败, 错误码: 16399(0x400F), 相同文件

0x4010(16400)

ErrorCode#SUB_ERR_UPGRADE_UNKNOWN

未知升级错误

0x4011(16401)

ErrorCode#SUB_ERR_RECONNECT_TIMEOUT

回连设备超时

3.10 升级失败,错误码: 16401(0x4011), 回连设备超时

0x4012(16402)

ErrorCode#SUB_ERR_RECONNECT_FAILED

回连设备失败

0x4013(16403)

ErrorCode#SUB_ERR_OTA_IN_PROGRESS

设备正在升级中

0x4014(16404)

ErrorCode#SUB_ERR_DEVICE_IN_DOUBLE_CONNECTION

设备处于设备双连模式

3.11 升级失败, 错误码: 16404(0x4014), 设备处于设备双连模式


0x5001(20481)

ErrorCode#SUB_ERR_AUTH_DEVICE

认证设备失败

2.5 错误码:20481(0x5001), 设备认证失败

0x5004(20484)

ErrorCode#SUB_ERR_FILE_NOT_FOUND

未找到升级文件

3.13 升级失败, 错误码: 20484(0x5004), 未找到升级文件

0x5005(20485)

ErrorCode#SUB_ERR_DATA_NOT_FOUND

未找到升级数据

0x5006(20486)

ErrorCode#SUB_ERR_IO_EXCEPTION

IO异常

3.6 状态码

对应的类名: StateCode

3.6.1 连接状态

状态码

名称

描述

0

StateCode#CONNECTION_DISCONNECT

断开连接

1

StateCode#CONNECTION_OK

连接成功

2

StateCode#CONNECTION_FAILED

连接失败

3

StateCode#CONNECTION_CONNECTING

连接中

4

StateCode#CONNECTION_CONNECTED

已连接(已弃用)

3.6.2 回复状态

状态码

名称

描述

0

StateCode#STATUS_SUCCESS

成功状态

1

StateCode#STATUS_FAIL

失败状态

2

StateCode#STATUS_UNKOWN_CMD

未知命令

3

StateCode#STATUS_BUSY

繁忙状态

4

StateCode#STATUS_NO_RESOURCE

没有资源

5

StateCode#STATUS_CRC_ERROR

CRC校验错误

6

StateCode#STATUS_ALL_DATA_CRC_ERROR

全部数据CRC错误

7

StateCode#STATUS_PARAMETER_ERROR

参数错误

8

StateCode#STATUS_RESPONSE_DATA_OVER_LIMIT

回复数据超出限制

3.7 命令生成器

用于多个杰理库复用时, 统一Seq生成

public interface ICmdSnGenerator {

   /**
    * 获取Rcsp命令序列号
    *
    * @param device 蓝牙设备对象
    * @return 序列号
    * <p>
    * 范围:0-255<br>
    * 每调用一次就累加一次
    * </p>
    */
   int getRcspCmdSeq(BluetoothDevice device);
}