package com.narutohuo.xindazhou.ble.model

/**
 * BLE指令模型
 * 
 * 封装业务层需要发送的指令
 */
data class BLECommand(
    /**
     * 功能码
     * 0x01=握手, 0x02=应用控制, 0x03=系统控制, 0x04=系统查询, 0x05=系统设置
     */
    val functionCode: Byte,
    
    /**
     * 指令类型
     */
    val instructionType: Byte,
    
    /**
     * 应用数据
     */
    val applicationData: ByteArray
)

/**
 * 握手指令参数
 */
data class HandshakeCommand(
    /**
     * 用户ID（16字节）
     */
    val userId: ByteArray,
    
    /**
     * 用户类型
     * 0x01=最高权限, 0x02=车主, 0x03=分享用户
     */
    val userType: Byte
)

/**
 * 应用控制指令类型
 */
object AppControlInstruction {
    const val SET_DEFENSE = 0x01.toByte()      // 设撤防
    const val POWER_ON_OFF = 0x02.toByte()     // 上下电
    const val FIND_CAR = 0x03.toByte()         // 寻车
    const val SEAT_LOCK = 0x04.toByte()        // 座桶锁
    const val HANDLEBAR_LOCK = 0x05.toByte()  // 龙头锁
    const val TRUNK_LOCK = 0x06.toByte()       // 尾箱锁
}

/**
 * 系统控制指令类型
 */
object SystemControlInstruction {
    const val SENSOR_UNLOCK = 0x01.toByte()           // 感应解锁开关
    const val RSSI_COLLECTION = 0x02.toByte()         // RSSI信号强度采集
    const val REMOVE_SHARE_USER = 0x03.toByte()       // 删除分享用户
    const val STOLEN_LOCK = 0x04.toByte()             // 被盗锁定开关
    const val SEAT_SENSOR = 0x05.toByte()             // 座椅感应开关
    const val SOUND_EFFECT = 0x06.toByte()            // 车辆音效开关
    const val AUTO_HEADLIGHT = 0x07.toByte()         // 自动大灯开关
    const val AUTO_POWER_OFF_TIME = 0x08.toByte()     // 自动下电时间
    const val AUTO_DEFENSE_TIME = 0x09.toByte()      // 自动设防时间
    const val AMBIENT_LIGHT = 0x10.toByte()           // 氛围灯开关
    const val AMBIENT_LIGHT_COLOR = 0x11.toByte()     // 氛围灯颜色
    const val RESET_MILEAGE = 0x12.toByte()           // 小计里程清零
    const val VOICE_BROADCAST = 0x13.toByte()         // 语音播报开关
    const val WALK_ME_HOME = 0x14.toByte()            // 伴我回家
    const val SPEAKER_VOLUME = 0x15.toByte()          // 蓝牙音箱
    const val DELAYED_CHARGING = 0x16.toByte()        // 延时充电时间
    const val LOW_BATTERY_ALARM = 0x1F.toByte()       // 低电量报警阈值
    const val ENTER_P_TIME = 0x20.toByte()            // 进入P档时间
    const val ABS = 0x21.toByte()                     // ABS
    const val TCS = 0x22.toByte()                     // TCS
}

