业务模块调用示例.md 3.8 KB

BLE SDK业务模块调用示例

📋 设计说明

BLE SDK封装了新大洲本田蓝牙协议的所有细节,业务模块(特别是module-vehicle)可以直接调用高级API,不需要了解:

  • ❌ 数据包结构(包头、包尾、校验等)
  • ❌ 加密解密过程
  • ❌ 分包处理逻辑
  • ❌ UUID、功能码等底层细节

🎯 业务模块调用示例

1. 连接和握手

// 在module-vehicle中
val bleService: BLEService = BLEServiceImpl(context)

// 扫描设备
bleService.startScan { device ->
    if (device.name.startsWith("SDH-Smart")) {
        // 连接设备
        bleService.connect(device, object : ConnectCallback {
            override fun onConnected() {
                // 连接成功,进行握手
                val userId = getUserID() // 16字节
                val userType = BLEConstants.USER_TYPE_OWNER // 车主
                
                bleService.handshake(userId, userType, object : HandshakeCallback {
                    override fun onSuccess() {
                        // 握手成功,可以发送指令了
                    }
                    
                    override fun onFailed(error: String) {
                        // 握手失败
                    }
                })
            }
            
            override fun onFailed(error: String) {
                // 连接失败
            }
            
            override fun onDisconnected() {
                // 连接断开
            }
        })
    }
}

2. 发送应用控制指令(设撤防)

// 设防
bleService.sendAppControlCommand(
    AppControlInstruction.SET_DEFENSE,
    byteArrayOf(0x01), // 0x01=设防,0x00=撤防
    object : CommandCallback {
        override fun onResponse(response: BLEResponse) {
            if (response.success) {
                // 设防成功
            }
        }
        
        override fun onTimeout() {
            // 超时
        }
        
        override fun onError(error: String) {
            // 错误
        }
    }
)

3. 发送系统控制指令(氛围灯)

// 开启氛围灯,设置颜色RGB(255, 0, 0)
val colorData = byteArrayOf(0xFF.toByte(), 0x00, 0x00) // R, G, B

bleService.sendSystemControlCommand(
    SystemControlInstruction.AMBIENT_LIGHT_COLOR,
    colorData,
    object : CommandCallback {
        override fun onResponse(response: BLEResponse) {
            // 处理响应
        }
        
        override fun onTimeout() { }
        override fun onError(error: String) { }
    }
)

4. 查询车辆信息

bleService.queryVehicleInfo(object : CommandCallback {
    override fun onResponse(response: BLEResponse) {
        if (response.success && response.data != null) {
            // 解析车辆信息(76字节数据)
            val vehicleInfo = parseVehicleInfo(response.data!!)
        }
    }
    
    override fun onTimeout() { }
    override fun onError(error: String) { }
})

5. 接收实时数据

// 设置数据接收监听器
bleService.setDataReceivedListener(object : DataCallback {
    override fun onDataReceived(data: ByteArray) {
        // 解析实时数据(车辆状态、电池信息等)
        val vehicleStatus = parseVehicleStatus(data)
    }
})

✅ 封装优势

  1. 业务模块简单:不需要了解协议细节,直接调用高级API
  2. 协议集中管理:所有协议相关代码都在BLE SDK中
  3. 易于维护:协议变更只需修改BLE SDK
  4. 类型安全:使用常量定义(AppControlInstruction、SystemControlInstruction等)

📝 注意事项

  • BLE SDK负责协议封装,业务模块负责业务逻辑
  • 响应数据(BLEResponse)在业务模块的Repository层转换为统一的业务模型
  • 业务模块不需要知道数据包结构、加密方式等细节