2. 基础功能

功能描述

命令原型

命令模型

命令参数

命令回复

备注

获取设备信息

Command.CMD_GET_TARGET_INFO

GetTargetInfoCmd

GetTargetInfoParam

参考 通用命令处理示例

查询设备系统信息

Command.CMD_GET_SYS_INFO

GetSysInfoCmd

GetSysInfoParam

SysInfoResponse

参考 通用命令处理示例

设置设备系统属性

Command.CMD_SET_SYS_INFO

SetSysInfoCmd

SetSysInfoParam

CommonResponse

参考 通用命令处理示例

监听设备系统属性变化

Command.CMD_SYS_INFO_AUTO_UPDATE

UpdateSysInfoCmd

SysInfoResponse

NULL

参考 接收命令处理示例

设置功能

Command.CMD_FUNCTION

FunctionCmd

FunctionParam

CommonResponse

参考 通用命令处理示例

重启设备

Command.CMD_REBOOT_DEVICE

RebootDeviceCmd

RebootDeviceParam

RebootDeviceResponse

参考 通用命令处理示例

Important

1. 表格中的数据模型都可以通过SDK查看
2. 本文档只展示部分重要数据模型

2.1. 请求设备信息

  1. JL_BluetoothManager方式

//Step0: 获取JL_BluetoothManager对象
JL_BluetoothManager manager = JL_BluetoothManager.getInstance(context);
//Step1: 构造功能命令 - 比如, 获取设备信息
//mask = 0xffffffff;  -- 获取所有属性
CommandBase getDeviceInfoCmd = CommandBuilder.buildGetDeviceInfoCmd(mask);
//Step2: 执行操作命令并等待结果回调
manager.sendCommandAsync(manager.getConnectedDevice(), getDeviceInfoCmd, manager.getBluetoothOption().getTimeoutMs(), new RcspCommandCallback() {
    //回调回复命令
    //注意: 无回复命时,回复命令本身
    @Override
    public void onCommandResponse(BluetoothDevice device, CommandBase cmd) {
        //Step3: 检查设备状态
        if (cmd.getStatus() != StateCode.STATUS_SUCCESS) { //设备状态异常,进行异常处理
            onErrCode(device, new BaseError(ErrorCode.SUB_ERR_RESPONSE_BAD_STATUS, "Device reply an bad status: " + cmd.getStatus()));
            return;
        }
        //成功回调
        //Step4: 判断是否有回复数据
        //注意 - 如果是没有回复数据的命令,回复数据为null
        boolean isHasResponse = cmd.getType() == CommandBase.FLAG_HAVE_PARAMETER_AND_RESPONSE
                || cmd.getType() == CommandBase.FLAG_NO_PARAMETER_AND_RESPONSE;
        if (isHasResponse) {
            //Step5: 获取对应的命令数据
            GetTargetInfoCmd command = (GetTargetInfoCmd) cmd;
            //Step6: 获取回复数据
            TargetInfoResponse response = command.getResponse();
            if (null == response) { //回复数据为空,证明设备回复的数据有问题,进行异常处理
                onErrCode(device, new BaseError(ErrorCode.SUB_ERR_DATA_FORMAT, "Response data is error."));
                return;
            }
            //处理设备回复数据
        }
    }

    @Override
    public void onErrCode(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});
  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//执行请求设备功能并等待结果回调
controller.requestDeviceInfo(controller.getUsingDevice(), 0xffffffff, new OnRcspActionCallback<DeviceInfo>() {
    @Override
    public void onSuccess(BluetoothDevice device, DeviceInfo message) {
        //成功回调
        //message - 设备信息
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});
//第二种方式,获取缓存的设备信息
DeviceInfo deviceInfo = controller.getDeviceInfo();

2.1.1. GetTargetInfoParam

获取设备信息参数

public class GetTargetInfoParam extends BaseParameter {
    private int mask;//配置信息查询掩码
    private byte platform;//手机平台 0 : android 1: iOS  2 : web app
}

Note

mask需要参考 4. 功能码

2.1.2. DeviceInfo

设备信息

public class DeviceInfo extends TargetInfoResponse {

    /*=============================================*
     * 闹钟信息
     *=============================================*/
    //闹钟信息
    private AlarmListInfo alarmListInfo;
    //闹钟响铃信息
    private List<DefaultAlarmBell> alarmDefaultBells;
    //闹钟数据结构版本
    private int alarmVersion;
    //闹钟拓展字段支持标识
    private byte alarmExpandFlag = 0x00;

    /*=============================================*
     * 音乐播放信息
     *=============================================*/
    //音乐名称
    private MusicNameInfo musicNameInfo;
    //音乐状态
    private MusicStatusInfo musicStatusInfo;
    //音乐播放模式信息
    private PlayModeInfo playModeInfo;
    //Aux播放状态
    private boolean isAuxPlay;
    //可以播放的格式
    private String playFileFormat;
    //当前播放的文件簇号
    private int cluster;
    //当前播放文件的设备序号
    private byte currentDevIndex;

    /*=============================================*
     * 均衡器信息
     *=============================================*/
    private EqPresetInfo eqPresetInfo;
    private EqInfo eqInfo;

    /*=============================================*
     * 设备存储器信息
     *=============================================*/
    private DevStorageInfo devStorageInfo;

    /*=============================================*
     * 灯光控制信息
     *=============================================*/
    private LightControlInfo lightControlInfo;

    /*=============================================*
     * 声卡信息
     *=============================================*/
    private EqInfo soundCardEqInfo;

    /*=============================================*
     * FM/FM_TX信息
     *=============================================*/
    private List<ChannelInfo> channelInfos; //频道列表
    private FmStatusInfo fmStatusInfo; //频道状态
    private float frequency; //发射频点

    /*=============================================*
     * ID3信息
     *=============================================*/
    private ID3MusicInfo iD3MusicInfo;

    /*=============================================*
     * 噪声处理(ANC)信息
     *=============================================*/
    private VoiceMode currentVoiceMode; //当前噪声处理模式信息
    private List<VoiceMode> voiceModeList; //所有噪声处理模式信息
    private AdaptiveData adaptiveData;     //自适应ANC数据
    private SmartNoPick smartNoPick;       //智能免摘信息
    /*降噪模式开启有效*/
    private SceneDenoising sceneDenoising; //场景降噪
    /*降噪模式开启有效*/
    private WindNoiseDetection windNoiseDetection; //风噪检测
    /*通透模式开启有效*/
    private VocalBooster vocalBooster;   //人声增强模式

    /*=============================================*
     * 通话信息
     *=============================================*/
    private int phoneStatus; //通话状态

    /*=============================================*
     * 拓展功能信息
     *=============================================*/
    private ExpandFunction expandFunction;

    /*=============================================*
     * 设备双连信息
     *=============================================*/
    private DoubleConnectionState doubleConnectionState;
    private ConnectedBtInfo connectedBtInfo;

    /*=============================================*
     * SPDIF功能信息
     *=============================================*/
    private SPDIFPlayStatusInfo spdifPlayStatusInfo;//播放状态
    private SPDIFAudioSourceInfo spdifAudioSourceInfo;//音源

    /*=============================================*
     * PC从机功能信息
     *=============================================*/
    private PCSlavePlayStatusInfo pcSlavePlayStatusInfo;

    /*=============================================*
     * AI翻译功能
     *=============================================*/
    /**
     * 翻译模式信息
     */
    private TranslationMode translationMode;

    /*=============================================*
     * Auracast功能
     *=============================================*/
    /**
     * 设备状态数据
     */
    private DeviceStateData deviceStateData;
    /**
     * Auracast发射端配置
     */
    private TransmitterSettings transmitterSettings;

    ...
}

2.1.3. TargetInfoResponse

目标设备信息

public class TargetInfoResponse extends CommonResponse {

    /**
     * 协议版本号
     */
    private final ProtocolVersion protocolVersion;
    /**
     * 系统信息
     */
    private final SystemInfo systemInfo;
    /**
     * 经典蓝牙相关信息
     */
    private final ClassicBtInfo classicBtInfo;
    /**
     * AI平台信息
     */
    private final AIPlatform aiPlatform;
    /**
     * 功能配置信息
     */
    private final FunctionConfiguration functionConfiguration;
    /**
     * 固件版本信息
     */
    private final Version version;
    /**
     * SDK类型
     */
    private int sdkType;
    /**
     * UBoot版本信息
     */
    private final Version uBootVersion;
    /**
     * 升级配置
     */
    private final OTASettings otaSettings;
    /**
     * 升级状态
     */
    private final OTAState otaState;
    /**
     * 产品信息
     */
    private final ProductInfo productInfo;
    //用于服务器校验产品信息
    /**
     * 认证秘钥
     */
    private String authKey;
    /**
     * 项目标识码
     */
    private String projectCode;
    /**
     * 协议MTU
     */
    private final ProtocolMTU protocolMtu;
    /**
     * 是否允许连接
     */
    private int allowConnectFlag;
    /**
     * 设备名
     */
    @Deprecated
    private String name;
    /**
     * BLE信息
     */
    private final BleInfo bleInfo;
    /**
     * 发射器信息
     */
    private final TransmitterInfo transmitterInfo;
    /**
     * 拓展功能
     */
    private final SysExpandFunc sysExpandFunc;
    /**
     * 文件操作配置
     */
    private final FileOpConfiguration fileOpConfiguration;

    /**
     * 自定义版本信息
     */
    private String customVersionMsg;

}

2.1.4. ProtocolVersion

协议版本信息

public class ProtocolVersion {
    /**
     * 版本号
     */
    private int versionCode;
    /**
     * 版本名
     */
    private String versionName;
}

2.1.5. SystemInfo

系统信息

public class SystemInfo {

    /**
     * 设备电量
     */
    private int quantity;
    /**
     * 设备音量
     */
    private int volume;
    /**
     * 最大音量
     */
    private int maxVol;
    /**
     * 是否支持音量同步
     */
    private boolean supportVolumeSync = false;
    /**
     * 升级最小电量限制值(1 ~ 100)
     */
    private int lowPowerLimit = 30;
}

2.1.6. ClassicBtInfo

经典蓝牙信息

public class ClassicBtInfo {

    /**
     * 经典蓝牙地址
     */
    private String edrAddr;
    /**
     * 经典蓝牙支持的协议
     */
    private int edrProfile = 0;
    /**
     * 经典蓝牙的连接状态
     */
    private int edrStatus = 0;
}

2.1.7. AIPlatform

AI平台信息

public class AIPlatform {
    /**
     * 平台类型
     */
    private int platform;
    /**
     * 认证码
     */
    private String license;

}

2.1.8. FunctionConfiguration

功能配置信息

public class FunctionConfiguration {

    /**
     * 功能支持掩码
     */
    private int functionMask;
    /**
     * 当前模式
     */
    private int curFunction;
    /**
     * 是否支持usb、sd、linein不在线时显示功能图标
     */
    private boolean supportOfflineShow;
    /**
     * 是否支持usb
     */
    private boolean supportUsb = true;
    /**
     * 是否支持sd0
     */
    private boolean supportSd0 = true;
    /**
     * 是否支持sd1
     */
    private boolean supportSd1 = true;
    /**
     * 是否隐藏网络电台
     */
    private boolean hideNetRadio;
}

2.1.9. Version

版本信息

public class Version {

    /**
     * 设备版本名称
     */
    private String versionName;
    /**
     * 设备版本信息
     */
    private int versionCode;
}

2.1.10. OTASettings

OTA设置

public class OTASettings{

    /**
     * 是否支持双备份升级
     * <p>单备份[false],需要断开回连过程;
     * <br/>双备份[true],不需要断开回连过程</p>
     */
    private boolean isSupportDoubleBackup;
    /**
     * 是否需要下载boot loader
     */
    private boolean isNeedBootLoader;
    /**
     * 单备份OTA连接方式
     * <p>
     * 0 -- 不使能<br/>
     * 1 -- BLE <br/>
     * 2 -- SP
     * </p>
     */
    private int singleBackupOtaWay;
    /**
     * 是否支持复用空间特殊升级流程
     */
    private boolean isSupportReuseSpaceOTA;
}

2.1.11. OTAState

OTA状态

public class OTAState {

    /**
     * 强制升级标志
     */
    private int mandatoryUpgradeFlag;
    /**
     * 请求升级标志
     * <p>
     * 取值范围: <br/>
     * 0 : 正常升级<br/>
     * 1 : 强制升级
     * </p>
     */
    private int requestOtaFlag;
    /**
     * 拓展模式
     * <p>
     * 取值范围:<br/>
     * 0 : 无效模式 <br/>
     * 1 : 更新资源模式 <br/>
     * 2 : 复用空间特殊升级模式-仅更新资源 <br/>
     * 3 : 复用空间特殊升级模式-仅升级固件程序
     * </p>
     */
    private int expandMode;
}

2.1.12. ProductInfo

产品信息

public class ProductInfo {
    /**
     * 厂商ID
     */
    private int vid;
    /**
     * 产品ID
     */
    private int pid;
    /**
     * 客户ID
     */
    private int uid;
}

2.1.13. ProtocolMTU

协议MTU

public class ProtocolMTU {
    /**
     * 发数MTU
     */
    private int sendMtu = Constants.DEFAULT_PROTOCOL_MTU;
    /**
     * 收数MTU
     */
    private int receiveMtu = Constants.DEFAULT_PROTOCOL_MTU;
}

2.1.14. BleInfo

BLE信息

public class BleInfo {
    /**
     * BLE地址
     */
    private String bleAddr;
    /**
     * 是否仅仅连接ble设备
     */
    private boolean bleOnly;
    /**
     * 是否BLE转SPP方式(连接BLE才打开EDR,才能连接SPP)
     */
    private boolean isBLEToSppWay;
    /**
     * 是否支持LE Audio功能
     */
    private boolean isSupportLeAudio;
    /**
     * LE Audio是否已连接
     */
    private boolean isLeAudioConnected;
}

2.1.15. TransmitterInfo

发射端信息

public class TransmitterInfo {

    /**
     * 是否支持外设模式
     */
    private boolean emitterSupport;
    /**
     * 0x00:普通模式  0x01:外设模式
     */
    private int emitterStatus;

}

2.1.16. SysExpandFunc

系统拓展功能

public class SysExpandFunc {
    /**
     * 是否支持MD5读取
     */
    private boolean isSupportMD5;
    /**
     * 是否游戏模式
     */
    private boolean isGameMode;
    /**
     * 是否支持查找设备
     */
    private boolean isSupportSearchDevice;
    /**
     * 是否支持声卡功能
     */
    private boolean supportSoundCard = false;
    /**
     * 禁止app调节设备eq
     */
    private boolean banEq;
    /**
     * 是否支持外挂Flash传输功能
     */
    private boolean supportExternalFlashTransfer = false;
    /**
     * 是否支持主动降噪功能
     */
    private boolean supportAnc = false;
    /**
     * 是否支持读取固件异常信息
     */
    private boolean supportReadErrorMSg;

    /**
     * 是否⽀持辅听设置功能
     */
    private boolean supportHearingAssist = false;
    /**
     * 是否支持自适应ANC算法
     */
    private boolean supportAdaptiveANC = false;
    /**
     * 是否支持获取设备配置信息
     */
    private boolean supportDevConfigure = false;
    /**
     * 是否支持智能免摘功能
     */
    private boolean supportSmartNoPick = false;
    /**
     * 是否支持场景降噪功能
     */
    private boolean supportSceneDenoising = false;
    /**
     * 是否支持风噪检测
     */
    private boolean supportWindNoiseDetection = false;
    /**
     * 是否支持人声增强
     */
    private boolean supportVocalBooster = false;
    /**
     * 是否支持设备双连
     */
    private boolean supportDoubleConnection = false;
}

2.1.17. FileOpConfiguration

文件操作配置

public class FileOpConfiguration {

    /**
     * 大文件传输是否支持分包crc16校验
     */
    private boolean supportPackageCrc16 = false;
    /**
     * 以新的文件名方式读取固件文件(支持多设备)
     */
    private boolean supportFileByNameWithDev = false;
    /**
     * 是否支持小文件传输方式
     */
    private boolean supportSmallFileTransfer = false;
}

2.2. 查询设备系统信息

  1. JL_BluetoothManager方式

//Step0: 获取JL_BluetoothManager对象
JL_BluetoothManager manager = JL_BluetoothManager.getInstance(context);
//Step1: 构造查询设备系统信息命令
//功能码
int function = AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC; //公共属性
//查询当前设备模式和设备存储信息
int mask = 0x01 << AttrAndFunCode.SYS_INFO_ATTR_CUR_MODE_TYPE | 0x01 << AttrAndFunCode.SYS_INFO_ATTR_MUSIC_DEV_STATUS;
CommandBase getSysInfoCmd = CommandBuilder.buildGetSysInfoCmd((byte)function, mask);
//Step2: 执行操作命令并等待结果回调
manager.sendCommandAsync(manager.getConnectedDevice(), getSysInfoCmd, manager.getBluetoothOption().getTimeoutMs(), new RcspCommandCallback() {
    //回调回复命令
    //注意: 无回复命时,回复命令本身
    @Override
    public void onCommandResponse(BluetoothDevice device, CommandBase cmd) {
        //Step3: 检查设备状态
        if (cmd.getStatus() != StateCode.STATUS_SUCCESS) { //设备状态异常,进行异常处理
            onErrCode(device, new BaseError(ErrorCode.SUB_ERR_RESPONSE_BAD_STATUS, "Device reply an bad status: " + cmd.getStatus()));
            return;
        }
        //成功回调
        //Step4: 判断是否有回复数据
        //注意 - 如果是没有回复数据的命令,回复数据为null
        boolean isHasResponse = cmd.getType() == CommandBase.FLAG_HAVE_PARAMETER_AND_RESPONSE
                || cmd.getType() == CommandBase.FLAG_NO_PARAMETER_AND_RESPONSE;
        if (isHasResponse) {
            //Step5: 获取对应的命令数据
            GetSysInfoCmd command = (GetSysInfoCmd) cmd;
            //Step6: 获取回复数据
            SysInfoResponse response = command.getResponse();
            if (null == response) { //回复数据为空,证明设备回复的数据有问题,进行异常处理
                onErrCode(device, new BaseError(ErrorCode.SUB_ERR_DATA_FORMAT, "Response data is error."));
                return;
            }
            //处理设备回复数据
            //response.getFunction(); //功能码
            //response.getAttrs();    //功能属性
        }
    }

    @Override
    public void onErrCode(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});
  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//添加蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {

    @Override
    public void onDevStorageInfoChange(BluetoothDevice device, DevStorageInfo storageInfo) {
        //此处将会回调设备存储信息
    }

    @Override
    public void onDeviceModeChange(BluetoothDevice device, int mode) {
        //此处将会回调设备模式
    }
});
int func = AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC; //公共属性
//查询当前设备模式和设备存储信息
int mask = 0x01 << AttrAndFunCode.SYS_INFO_ATTR_CUR_MODE_TYPE | 0x01 << AttrAndFunCode.SYS_INFO_ATTR_MUSIC_DEV_STATUS;
//执行查询设备系统信息并等待结果回调
controller.getDevSysInfo(controller.getUsingDevice(), func, mask, new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
        //结果将会在BTRcspEventCallback#onDeviceModeChange回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

Warning

1. function 需要参考 4. 功能码
2. mask 需要参考 4. 功能码
3. 不允许mask为全F

2.2.1. GetSysInfoParam

获取系统信息参数

public class GetSysInfoParam extends BaseParameter {
    private byte function; //功能码
    private int mask; //功能掩码
}

2.3. 设置设备系统属性

  1. JL_BluetoothManager方式

//Step0: 获取JL_BluetoothManager对象
JL_BluetoothManager manager = JL_BluetoothManager.getInstance(context);
//Step1: 构造设置设备系统属性命令
//功能码
int function = AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC; //公共属性
//数据列表
AttrBean attrBean = new AttrBean();
attrBean.setType(AttrAndFunCode.SYS_INFO_ATTR_VOLUME);  //系统音量
attrBean.setAttrData(new byte[]{(byte) 0x0E}); //14等级
List<AttrBean> data = new ArrayList<>();
data.add(attrBean);
CommandBase setSysInfoCmd = CommandBuilder.buildSetSysInfoCmd((byte) function, data);
//Step2: 执行操作命令并等待结果回调
manager.sendCommandAsync(manager.getConnectedDevice(), setSysInfoCmd, manager.getBluetoothOption().getTimeoutMs(), new RcspCommandCallback() {
    //回调回复命令
    //注意: 无回复命时,回复命令本身
    @Override
    public void onCommandResponse(BluetoothDevice device, CommandBase cmd) {
        //Step3: 检查设备状态
        if (cmd.getStatus() != StateCode.STATUS_SUCCESS) { //设备状态异常,进行异常处理
            onErrCode(device, new BaseError(ErrorCode.SUB_ERR_RESPONSE_BAD_STATUS, "Device reply an bad status: " + cmd.getStatus()));
            return;
        }
        //成功回调
        //等待系统调整成功后,通过更新设备系统信息命令通知
    }

    @Override
    public void onErrCode(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});
  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
int fun = AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC; //公共属性
//设置设备音量 - 14
AttrBean attrBean = new AttrBean();
attrBean.setType(AttrAndFunCode.SYS_INFO_ATTR_VOLUME);
attrBean.setAttrData(new byte[]{(byte) 0x0E});
List<AttrBean> data = new ArrayList<>();
data.add(attrBean);
//执行设置设备系统属性并等待结果回调
controller.setDevSysInfo(controller.getUsingDevice(), fun, data, new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

Warning

1. data是由多个 LTV格式 组成的
2. 请通过 CommandBuilder 构建设置设备系统属性命令

2.3.1. SetSysInfoParam

设置系统信息参数

public class SetSysInfoParam extends BaseParameter {

    private byte function; //功能码
    private List<AttrBean> attrBeanList; //功能属性
}

2.4. 监听设备系统属性变化

  1. JL_BluetoothManager方式

//Step0: 获取JL_BluetoothManager对象
JL_BluetoothManager manager = JL_BluetoothManager.getInstance(context);
//Step1: 添加蓝牙RCSP事件回调器
manager.addEventListener(new BTRcspEventCallback() {
    //回调设备发送的命令
    @Override
    public void onDeviceCommand(BluetoothDevice device, CommandBase cmd) {
        super.onDeviceCommand(device, cmd);
        //Step2: 处理命令
        if (cmd.getId() != Command.CMD_SYS_INFO_AUTO_UPDATE) {
            //过滤命令
            return;
        }
        //只处理目标命令 - 通知设备系统信息
        UpdateSysInfoCmd updateSysInfoCmd = (UpdateSysInfoCmd) cmd;
        //Step4: 获取参数
        UpdateSysInfoParam param = updateSysInfoCmd.getParam();
        if (null == param) return; //异常处理
        //Step5: 处理数据
//        param.getFunction();  //功能码
//        param.getParamData(); //功能属性
    }
});

Note

1. 结果解析与 查询设备系统信息 回复结果解析一致
2. 解析结果流程, 请参考demo
  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//添加蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {
    @Override
    public void onDeviceModeChange(BluetoothDevice device, int mode) {
        //回调设备模式
    }

    @Override
    public void onVolumeChange(BluetoothDevice device, VolumeInfo volume) {
        //回调设备音量信息
    }

    @Override
    public void onEqChange(BluetoothDevice device, EqInfo eqInfo) {
        //回调均衡器调节参数
    }

    @Override
    public void onDevStorageInfoChange(BluetoothDevice device, DevStorageInfo storageInfo) {
        //回调设备存储信息
    }

    @Override
    public void onFileFormatChange(BluetoothDevice device, String fileFormat) {
        //回调支持的播放格式
    }

    @Override
    public void onMusicNameChange(BluetoothDevice device, MusicNameInfo nameInfo) {
        //回调音乐名信息
    }

    @Override
    public void onMusicStatusChange(BluetoothDevice device, MusicStatusInfo statusInfo) {
        //回调音乐状态信息
    }

    @Override
    public void onPlayModeChange(BluetoothDevice device, PlayModeInfo playModeInfo) {
        //回调播放模式信息
    }

    @Override
    public void onAuxStatusChange(BluetoothDevice device, boolean isPlay) {
        //回调外接设备播放状态
    }

    @Override
    public void onFmChannelsChange(BluetoothDevice device, List<ChannelInfo> channels) {
        //回调FM频道列表信息
    }

    @Override
    public void onFmStatusChange(BluetoothDevice device, FmStatusInfo fmStatusInfo) {
        //回调FM状态信息
    }

    @Override
    public void onAlarmListChange(BluetoothDevice device, AlarmListInfo alarmListInfo) {
        //回调闹钟列表信息
    }

    @Override
    public void onAlarmDefaultBellListChange(BluetoothDevice device, List<DefaultAlarmBell> bells) {
        //回调闹钟默认铃声列表
    }

    @Override
    public void onAlarmNotify(BluetoothDevice device, AlarmBean alarmBean) {
        //回调闹钟提醒
    }

    @Override
    public void onAlarmStop(BluetoothDevice device, AlarmBean alarmBean) {
        //回调闹钟停止
    }

    @Override
    public void onID3MusicInfo(BluetoothDevice device, ID3MusicInfo id3MusicInfo) {
        //回调ID3音乐信息
    }

    @Override
    public void onHighAndBassChange(BluetoothDevice device, int high, int bass) {
        //回调高低音信息
    }

    @Override
    public void onEqPresetChange(BluetoothDevice device, EqPresetInfo eqPresetInfo) {
        //回调均衡器预设值信息
    }

    @Override
    public void onPhoneCallStatusChange(BluetoothDevice device, int status) {
        //回调电话状态
    }

    @Override
    public void onExpandFunction(BluetoothDevice device, int type, byte[] data) {
        //回调拓展功能信息
    }

    @Override
    public void onLightControlInfo(BluetoothDevice device, LightControlInfo lightControlInfo) {
        //回调灯光控制信息
    }

    @Override
    public void onSoundCardEqChange(BluetoothDevice device, EqInfo eqInfo) {
        //回调声卡信息
    }

    @Override
    public void onSoundCardStatusChange(BluetoothDevice device, long mask, byte[] values) {
        //回调声卡的状态信息
    }

    @Override
    public void onCurrentVoiceMode(BluetoothDevice device, VoiceMode voiceMode) {
        //回调当前噪声处理模式信息
    }

    @Override
    public void onVoiceModeList(BluetoothDevice device, List<VoiceMode> voiceModes) {
        //回调噪声处理列表信息
    }

    @Override
    public void onSearchDevice(BluetoothDevice device, SearchDevParam searchDevParam) {
        //回调查找设备参数
    }

    @Override
    public void onReverberation(BluetoothDevice device, ReverberationParam param) {
        //回调混响参数
    }

    @Override
    public void onDynamicLimiter(BluetoothDevice device, DynamicLimiterParam param) {
        //回调动态限幅参数
    }
});

2.4.1. SysInfoResponse

系统信息

public class SysInfoResponse extends CommonResponse {
    private byte function; //功能码
    private List<AttrBean> attrs; //功能属性
}

2.5. 设置功能

  1. JL_BluetoothManager方式

//Step0: 获取JL_BluetoothManager对象
JL_BluetoothManager manager = JL_BluetoothManager.getInstance(context);
//Step1: 构造设置功能命令
//功能码
int function = AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC; //公共属性
//标识
int flag = 0;
// 拓展参数
byte[] extend = null;
CommandBase setFunctionCmd = CommandBuilder.buildFunctionCmd((byte) function, (byte) flag, extend);
//Step2: 执行操作命令并等待结果回调
manager.sendCommandAsync(manager.getConnectedDevice(), setFunctionCmd, manager.getBluetoothOption().getTimeoutMs(), new RcspCommandCallback() {
    //回调回复命令
    //注意: 无回复命时,回复命令本身
    @Override
    public void onCommandResponse(BluetoothDevice device, CommandBase cmd) {
        //Step3: 检查设备状态
        if (cmd.getStatus() != StateCode.STATUS_SUCCESS) { //设备状态异常,进行异常处理
            onErrCode(device, new BaseError(ErrorCode.SUB_ERR_RESPONSE_BAD_STATUS, "Device reply an bad status: " + cmd.getStatus()));
            return;
        }
        //成功回调
    }

    @Override
    public void onErrCode(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});
  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//Step1: 构造设置功能命令
//功能码
int function = AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC; //公共属性
//标识
int flag = 0;
// 拓展参数
byte[] extend = null;
CommandBase setFunctionCmd = CommandBuilder.buildFunctionCmd((byte) function, (byte) flag, extend);
//Step2: 执行操作命令并等待结果回调
controller.sendRcspCommand(manager.getConnectedDevice(), setFunctionCmd, BluetoothConstant.DEFAULT_SEND_CMD_TIMEOUT, new RcspCommandCallback() {
    //回调回复命令
    //注意: 无回复命时,回复命令本身
    @Override
    public void onCommandResponse(BluetoothDevice device, CommandBase cmd) {
        //Step3: 检查设备状态
        if (cmd.getStatus() != StateCode.STATUS_SUCCESS) { //设备状态异常,进行异常处理
            onErrCode(device, new BaseError(ErrorCode.SUB_ERR_RESPONSE_BAD_STATUS, "Device reply an bad status: " + cmd.getStatus()));
            return;
        }
        //成功回调
    }

    @Override
    public void onErrCode(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

2.5.1. FunctionParam

功能参数

public class FunctionParam extends BaseParameter {

    private byte function; //功能号
    private byte cmd; //attr type
    private byte[] extend; //payload
}

2.6. 查询当前设备模式

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC – 公共属性
mask : 0x01 << AttrAndFunCode.SYS_INFO_ATTR_CUR_MODE_TYPE – 标识当前设备模式信息

命令构造

//构造获取当前设备模式
CommandBase getCurrentModeCmd = CommandBuilder.buildGetSysInfoCmd(AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC,
               0x01 << AttrAndFunCode.SYS_INFO_ATTR_CUR_MODE_TYPE);

代码示例参考 查询设备系统信息

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//添加蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {
    @Override
    public void onDeviceModeChange(BluetoothDevice device, int mode) {
        //回调设备模式
    }
});
//执行获取设备模式信息并等待结果回调
controller.getCurrentDevModeInfo(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
        //结果将会在BTRcspEventCallback#onDeviceModeChange回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

2.7. 切换设备模式

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC – 公共属性
flag : 设备模式, 参考 4. 功能码
extend : NULL

命令构造

byte mode = AttrAndFunCode.SYS_INFO_FUNCTION_BT;   //-- 蓝牙模式
//            AttrAndFunCode.SYS_INFO_FUNCTION_MUSIC -- 设备音乐模式
//            AttrAndFunCode.SYS_INFO_FUNCTION_RTC   -- 时钟模式(闹钟,秒表)
//            AttrAndFunCode.SYS_INFO_FUNCTION_AUX   -- 外部输入控制模式
//            AttrAndFunCode.SYS_INFO_FUNCTION_FM    -- FM控制模式
//            AttrAndFunCode.SYS_INFO_FUNCTION_LIGHT -- 灯光模式
CommandBase switchDevModeCmd = CommandBuilder.buildSwitchModeCmd(mode);

代码示例参考 设置功能

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//注册蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {
    @Override
    public void onDeviceModeChange(BluetoothDevice device, int mode) {
        //回调设备模式
    }
});
//byte SYS_INFO_FUNCTION_BT :  0 //Bluetooth mode
//byte SYS_INFO_FUNCTION_MUSIC : 1 //Music mode
//byte SYS_INFO_FUNCTION_RTC : 2   //clock mode
//byte SYS_INFO_FUNCTION_AUX : 3   //Linein mode
//byte SYS_INFO_FUNCTION_FM  : 4   //FM mode
//byte SYS_INFO_FUNCTION_LIGHT : 5 //Light mode
//执行切换设备模式功能并等待结果回调
controller.switchDeviceMode(controller.getUsingDevice(), mode, new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
        //结果将会在BTRcspEventCallback#onDeviceModeChange回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

2.8. 查询存储设备信息

  1. JL_BluetoothManager方式

function : AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC – 公共属性
mask : 0x01 << AttrAndFunCode.SYS_INFO_ATTR_MUSIC_DEV_STATUS – 标识存储设备信息(U盘, sd卡, flash等)

命令构造

//构造查询存储设备信息
CommandBase getMusicDevStatusCmd = CommandBuilder.buildGetSysInfoCmd(AttrAndFunCode.SYS_INFO_FUNCTION_PUBLIC,
              0x01 << AttrAndFunCode.SYS_INFO_ATTR_MUSIC_DEV_STATUS);

代码示例参考 查询设备系统信息

  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//添加蓝牙RCSP事件监听器
controller.addBTRcspEventCallback(new BTRcspEventCallback() {
    @Override
    public void onDevStorageInfoChange(BluetoothDevice device, DevStorageInfo storageInfo) {
        //回调设备存储信息
    }
});
//执行获取设备存储信息并等待结果回调
controller.getDevStorageInfo(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
        //结果将会在BTRcspEventCallback#onDevStorageInfoChange回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});

2.8.1. DevStorageInfo

设备存储器信息

public class DevStorageInfo implements Parcelable {
    /**
     * 存储器状态
     */
    @NonNull
    private List<> storageStates = new ArrayList<>();
    /**
     * 是否复用
     */
    private boolean isDeviceReuse;
}

Note

  1. 存储器状态, SDCardBean

2.9. 重启设备

  1. JL_BluetoothManager方式

//Step0: 获取JL_BluetoothManager对象
JL_BluetoothManager manager = JL_BluetoothManager.getInstance(context);
//Step1: 构建重启命令
CommandBase rebootCmd = CommandBuilder.buildRebootCmd();
//Step2: 发送重启命令并等待结果回调
manager.sendCommandAsync(manager.getConnectedDevice(), rebootCmd, manager.getBluetoothOption().getTimeoutMs(), new RcspCommandCallback() {
    @Override
    public void onCommandResponse(BluetoothDevice device, CommandBase cmd) {
        //Step3: 检查设备状态
        if (cmd.getStatus() != StateCode.STATUS_SUCCESS) { //设备状态异常,进行异常处理
            onErrCode(device, new BaseError(ErrorCode.SUB_ERR_RESPONSE_BAD_STATUS, "Device reply an bad status: " + cmd.getStatus()));
            return;
        }
        //成功回调
    }

    @Override
    public void onErrCode(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});
  1. RCSPController方式

//获取RCSPController对象
RCSPController controller = RCSPController.getInstance();
//执行重启设备功能并等待结果回调
controller.rebootDevice(controller.getUsingDevice(), new OnRcspActionCallback<Boolean>() {
    @Override
    public void onSuccess(BluetoothDevice device, Boolean message) {
        //成功回调
    }

    @Override
    public void onError(BluetoothDevice device, BaseError error) {
        //失败回调
        //error - 错误信息
    }
});