# BLE SDK业务模块调用示例

## 📋 设计说明

BLE SDK封装了新大洲本田蓝牙协议的所有细节，业务模块（特别是`module-vehicle`）可以直接调用高级API，不需要了解：
- ❌ 数据包结构（包头、包尾、校验等）
- ❌ 加密解密过程
- ❌ 分包处理逻辑
- ❌ UUID、功能码等底层细节

## 🎯 业务模块调用示例

### 1. 连接和握手

```kotlin
// 在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. 发送应用控制指令（设撤防）

```kotlin
// 设防
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. 发送系统控制指令（氛围灯）

```kotlin
// 开启氛围灯，设置颜色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. 查询车辆信息

```kotlin
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. 接收实时数据

```kotlin
// 设置数据接收监听器
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层转换为统一的业务模型
- 业务模块不需要知道数据包结构、加密方式等细节

