# MinewSensor ToF Kit说明文档

本套SDK仅支持Minew公司出品的蓝牙传感器设备。通过SDK可以帮助开发者处理手机和传感器之间的一切工作,包括:扫描设备,广播数据、连接设备,向设备写入数据,从设备接收数据等。

目前SDK仅支持 ToF 测距传感器的使用。

# 前期工作

整体框架:MSD01BleManager为设备管理类,在APP运行时始终是单例。MSD01Model是设备实例类,此套件会为每一个设备生成一个实例,在扫描和连接后都会使用,内部包含设备广播数据,在扫描期间该数据会随着设备不停广播而更新。

MSD01BleManager:设备管理类,可以扫描周围的设备,并且可以连接它们,校验它们等;

MSD01Model:扫描时获取到的ToF 测距传感器设备实例,继承自BaseBleDeviceEntity

# 导入到工程

  1. 开发环境

    sdk最低支持Android 7.0,对应API Level为24。在module的build.gradle中设置minSdkVersion为24或24以上

    android {
    
        defaultConfig {
            applicationId "com.xxx.xxx"
            minSdkVersion 24
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
  2. 将 jar包添加到module的libs文件夹下,并在该modulebuild.gradle中添加如下语句(直接添加依赖):

    implementation files('libs/lib_ble_base.jar')
    implementation files('libs/lib_ble_msd01.jar')
    implementation files('libs/lib_ble_nl.jar')
    implementation files('libs/lib_ble_v3.jar')
    api 'org.lucee:bcprov-jdk15on:1.52.0'
    
    1
    2
    3
    4
    5

    或者右键该jar文件,选择Add as Library,添加到当前module。

    添加.so库文件,App目录下build.gradle添加如下配置

    android {
        defaultConfig {
      
            ndk {
                abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
            }
    
        }
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
  3. AndroidManifest.xml需要以下权限,如果targetSdkVersion大于23,则需要做权限管理以获取权限:

        <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" tools:node="replace" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" tools:node="replace" />
        <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
        <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    
        <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
        <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
        <uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
        <uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
            android:maxSdkVersion="32" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
            android:maxSdkVersion="32"
            />
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

# 使用

sdk分为扫描、连接和读写三个阶段。

# 扫描部分

# 开始扫描

Android6.0系统以上,进行BLE扫描时,需要先申请到蓝牙权限后并且打开定位开关才能进行。

开启蓝牙扫描需要首先打开蓝牙,如果未打开蓝牙就去扫描,APP会闪退。可通过BLETool.checkBluetooth(this)来判断蓝牙是否已经打开。如果没有打开,可以先打开蓝牙。

MSD01BleManager mBleManager = 	MSD01BleManager.getInstance();

switch (BLETool.checkBluetooth(this)){
    case BLE_NOT_SUPPORT:
        Toast.makeText(this, "Not Support BLE", Toast.LENGTH_SHORT).show();
        break;
    case BLUETOOTH_ON:
		//设置扫描时长5分钟,sdk默认扫描时长5分钟
		mBleManager.startScan(this, 5 * 60 * 1000, new OnScanDevicesResultListener<MSD01Model>() {

            @Override
            public void onScanResult(List<MSD01Model> list) {
                
            }

            @Override
            public void onStopScan(List<MSD01Model> list) {

            }

        });
        
        break;
    case BLUETOOTH_OFF:
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, 4);
        break;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

sdk内部并没有对蓝牙扫描时长进行处理,但是扫描是耗电操作,SDK默认5分钟就停止扫描了,如果还需要继续扫描,可以提供定时器或者刷新等操作以便继续调用扫描方法继续扫描设备。

# 取出数据

在扫描期间,APP能够通过sdk获取到设备当前的一部分数据。如下所示通过MSD01Model获取设备ToF测距传感器数据,该数据保存在广播帧对象中。

sdk提供了BaseBleDeviceEntity作为MSD01Model的基类,用于存储传感器设备的公有数据,如下表所示:

名称 类型 说明
macAddress String 设备mac
name String 设备名称
rssi int 信号强度

BaseBleDeviceEntity还保存了一个Map,内部用于存储其在扫描期间获取到的设备广播数据帧,可通过如下方式取出:

MSD01Model module;
if(module.deviceType == DeviceType.MSD01_TOF){
    // ToF 测距传感器类型
}else if(module.deviceType == DeviceType.MSD01_OCCUPY){
    // 占位传感器类型
}


DeviceInformationFrame deviceInforFrame = (DeviceInformationFrame)module.getMinewFrame(FrameType.DEVICE_INFORMATION_FRAME);
if (deviceInforFrame != null) {
    //设备mac地址
    String macAddress = deviceInforFrame.getMacAddress();
    //电量百分比
    int battery = deviceInforFrame.getBattery();
    //固件版本
    String firmwareVersion = deviceInforFrame.getFirmwareVersion();
}

ToFFrame toFFrame = (ToFFrame) module.getMinewFrame(FrameType.TOF_FRAME);
if (toFFrame != null) {
	int serialNumber = toFFrame.getSerialNumber();//序列号
    int distance = toFFrame.getDistance();//测量距离值,单位毫米  无效=65535 
    int lowBattery = toFFrame.getLowBattery();//低电量报警信号
    int occupy = toFFrame.getOccupy();//占用判断
    int infraredTrigger = toFFrame.getInfraredTrigger();//红外触发信号
    int dismantle = toFFrame.getDismantle();//防拆报警信号
    int occupyNumber = toFFrame.getOccupyNumber();//占用次数序列号
    int dismantleNumber = toFFrame.getDismantleNumber();//防拆报警序列号
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

ToF测距传感器设备有2种广播帧类型。

  1. 设备信息帧

    • DeviceInformationFrame

      名称 类型 说明
      frameVersion int 设备类型
      firmwareVersion String 固件版本
      batteryLevel int 电池电量百分比
      macAddress String 固件mac
      peripheralSupportInfo PeripheralSupportInfo 外设支持描述,包含设备产品id
  2. ToF帧

    • ToFFrame

      名称 类型 说明
      serialNumber int 序列号用于指示当前已经触发过的次数, 每触发一次进行自增(从 0 开始计数, 到 255 后重新从0开始)
      distance int 测量距离值,单位毫米 无效=65535
      lowBattery int 低电量报警信号——0表示正常,1表示低电量
      occupy int 占用判断——0表示空闲,1表示占用
      infraredTrigger int 红外触发信号——0表示未触发,1表示触发
      dismantle int 防拆报警信号——0表示正常,1表示防拆报警
      occupyNumber int 占用次数序列号:用于指示占用触发的次数, 每触发一次进行自增(从 0 开始计数, 最大 255,超过 255 后从零开始重新计数)
      dismantleNumber int 防拆报警序列号:用于指示防拆报警触发的次数, 每触发一次进行自增(从 0 开始计数, 最大 255,超过 255 后从零开始重新计数)

# 连接

连接前一般需要先停止扫描。sdk提供了连接和断开连接方法。

MSD01BleManager mBleManager = 	MSD01BleManager.getInstance();

//停止扫描
mBleManager.stopScan(context);
//设置设备秘钥
String key="minewtech1234567";
mBleManager.setSecretKey(key);
//连接,module为准备连接的设备 
MSD01Model module;
mBleManager.connect(context,module);
//断开连接。macAddress为设备mac
mBleManager.disConnect(macAddress);
1
2
3
4
5
6
7
8
9
10
11
12

注意:连接设备前,请确认是否扫描到设备,如果没扫描到设备广播,调用连接方法,将连接失败。

在调用connect()后,sdk中会对连接过程会有状态监听。

//设置监听器
mBleManager.setOnConnStateListener(new OnConnStateListener() {
    
    /*
     * 连接过程中的状态回调
     *
     * @param macAddress      设备mac
     * @param connectionState 状态
     */
    @Override
    public void onUpdateConnState(String address, BleConnectionState state) {
        switch (state) {
            case Disconnect:
				//连接失败或者设备断开连接会回调,主动断开不会回调该状态
                break;
            case EnterAuthenticatePassword:
                //输入秘钥
				String key="minewtech1234567";
				mBleManager.setSecretKey(macAddress,key);
                mBleManager.authenticateV3Password(mwC03Model)
                break;
            case Connecting:
				//调用connect()后就会回调该状态
                break;
            case Connected:
                //初步连接成功,作为一个过渡阶段,此时并未真正成功
                break;
            case AuthenticateFail:
				//秘钥检验失败。
                break;
            case AuthenticateSuccess:
				//秘钥检验成功,
                break;
            case ConnectComplete:
				//连接完成,此时设备可进行读写操作
                break;
            default:
                break;
        }
    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

在连接过程中,sdk会返回多个连接状态到app中,app需要做好处理。

  • BleConnectionState.ConnectingBleConnectionState.Connected: 连接设备中,在这里状态下不要做耗时操作,因为此时在连接设备发现服务,并发送认证数据等。
  • BleConnectionState.EnterAuthenticatePassword: 设备需提示用户输入连接秘钥,通过 MSD01BleManager 的 setSecretKey 方法传入用户输入的密码,然后调用 MSD01BleManager的 authenticateV3Password 方法进行鉴权。
  • BleConnectionState.ConnectComplete: 此时传感器设备已经连接成功,可以进行读写操作,比如配置广播参数、传感器配置、读取历史数据等。
  • BleConnectionState.AuthenticateFail:认证过程中校验秘钥,输入的秘钥不正确,将回调这个状态并且设备主动断开连接。
  • BleConnectionState.AuthenticateSuccess:认证过程中校验秘钥,输入的秘钥正确,将回调这个状态。
  • BleConnectionState.Disconnect: 连接失败或者设备断开连接会回调。

# 读写

读写API如下:

    
   /**
     * 连接设备
     * @param context 上下文
     * @param module 设备 module
     */
	void connect(Context context, MSD01Model module);
        
   /**
     * 连接设备
     * @param context 上下文
     * @param macAddress 设备 macAddress
     */
    void connect(Context context, String macAddress);

    /**
     * 设置连接秘钥
     * @param macAddress 设备mac
     * @param secretKey  设备秘钥
     */
	void setSecretKey(String macAddress, String secretKey);
        
    /**
     * 鉴权
     * @param module 设备
     */
    void authenticateV3Password(MSD01Model module);

    /**
     * 断开连接
     * @param macAddress 设备 macAddress
     */
	void disConnect(String macAddress);

    /**
     * 恢复出厂设置
     *
     * @param macAddress 设备mac
     * @param listener   监听器
     */
     void reset(String macAddress, OnModifyConfigurationListener listener);

    /**
     * 关机
     * @param macAddress 设备mac
     * @param listener   监听器
     */
    void powerOff(String macAddress, OnModifyConfigurationListener listener);

    /**
     * 设置时间(授时)
     * @param macAddress 设备mac
     * @param timestamp 系统当前时间戳, 单位为 s 秒
     * @param listener   监听器
     */
	void setSyncTime(String macAddress, long timestamp, OnModifyConfigurationListener listener);

    /**
     * 升级文件校验
     * @param macAddress 设备mac
     * @param zipFilePath OTA 文件存储路径
     * @param dfuProductIdTypes   产品类型匹配列表
     */
	boolean verifyOtaFile(String macAddress, String zipFilePath, List<String> dfuProductIdTypes);

	//关于 dfuProductIdTypes:
        // MSD01Model module 已经连接完成的那个设备对象
        if(module.deviceType.productID.equals("0024")){
            dfuProductIdTypes.add("MSD01-001-DT00")
        }else if(module.deviceType.productID.equals("0025")){
            dfuProductIdTypes.add("MSD01-002-DT00")
        }


    /**
     * 固件升级
     * @param macAddress 设备mac
     * @param isLinkUpgrade   是否为链接升级
     * @param dfuTarget dfuTarget = 0
     * @param upgradeData 升级包数据
     * @param listener   监听器
     */
	void firmwareUpgrade(String macAddress, boolean isLinkUpgrade, int dfuTarget, byte[] upgradeData, OnFirmwareUpgradeListener listener);

    /**
     * 查询设备版本信息
     * @param macAddress 设备mac
     * @param listener   监听器
     */
	void queryDeviceFirmwareInfo(String macAddress, OnQueryResultListener<FirmwareVersionModel> listener);
        
    /**
     * 查询设备开关状态
     * @param macAddress 设备mac
     * @param listener   监听器
     */
	void queryOptionSwitch(String macAddress, OnQueryResultListener<List<OptionSwitchConfig>> listener);
	OptionSwitchConfig{
        int type;// 类型:灯效为 5 ,数据存储为 6
    	int optionStatus;// 状态:1 为打开,否则关闭
    }

    /**
     * 设置灯效开关
     * @param macAddress 设备mac
     * @param optionValue  :1 为开,0 为关
     * @param listener   监听器
     */
	void setLightOptionSwitch(String macAddress, int optionValue, OnModifyConfigurationListener listener);

    /**
     * 设置数据存储开关
     * @param macAddress 设备mac
     * @param optionValue  :1 为开,0 为关
     * @param listener   监听器
     */
	void setDataStoreOptionSwitch(String macAddress, int optionValue, OnModifyConfigurationListener listener);

    /**
     * 查询广播参数
     * @param macAddress 设备mac
     * @param slot  :0 为 DeviceInfoFrame,1 为 ToFFrame
     * @param listener   监听器
     */
	void queryAdvParametersConfiguration(String macAddress, int slot, OnQueryResultListener<AdvParametersConfig> listener);
	AdvParametersConfig{
        int slotNumber;// 该帧的通道号
        String frameType;// 帧类型
        int advertisingInterval;// 广播间隔
        int txPower;// 广播功率
        int alwaysAdvertising;// 是否开启持续广播
    }

	/**
     * 设置广播参数
     * @param macAddress 设备mac
     * @param frameType :AdvParametersConfig.frameType 默认配置为 queryAdvParametersConfiguration 方法查询获取的当前帧类型数值
     * @param slotNumber  :AdvParametersConfig.slotNumber 默认配置为 queryAdvParametersConfiguration 方法查询获取的当前帧通道数值
     * @param advertisingInterval  :广播间隔 500ms ~ 10000ms
     * @param isAlwaysAdv  :是否开启持续广播,默认配置为 queryAdvParametersConfiguration 方法查询获取的当前帧是否开启持续广播数值
     * @param txPower  :广播功率 -40 -20 -16 -12 -8 -4 0 4 dBm
     * @param listener   监听器
     */
	void setAdvParametersConfiguration(String macAddress, String frameType, int slotNumber, int advertisingInterval,int isAlwaysAdv, int txPower, OnModifyConfigurationListener listener);

	/**
     * 查询 ToF 测距参数
     * @param macAddress 设备mac
     * @param listener   监听器
     */
    void queryToFConfiguration(String macAddress, OnQueryResultListener<ToFConfiguration> listener);

	ToFConfiguration{
        int threshold = 0;//距离报警阈值,单位:毫米(mm)当测距模式选择标准模式为2.5m,则占用阈值可设置范围20mm~2400mm,当测距模式选择远距模式为5.0m,则占用阈值可设置范围20mm~4900mm
   		int interval = 0;//周期测距的测距间隔,单位:秒(s),默认间隔:1min; 范围:10s ~ 43200s (12h)
    	int distanceMode = 0;//测距模式,0:最远 2400 标准模式,1:最远 4900 远距模式
    	int occupationTime = 0;//占用时长,pir 模式测距成功后,一次占用状态持续时间,单位:秒(s),默认时长:1min; 范围:10s ~ 1800s (30min)
    	int distanceTimes = Integer.MIN_VALUE;//一次完整的测距中,tof 采集数据次数. 次数越高,精准度越高,测距时间越长。功耗相应的越高;范围:1 ~ 10 times, 默认次数:10 times 
        //1.高精度档位:10Hz  【高】—— distanceTimes = 10
        //2.标准测距档位:3Hz  【中】 —— distanceTimes = 3
        //3.低功耗测距档位:1Hz  【低】 —— distanceTimes = 1
    	int pirRangeInterval = Integer.MIN_VALUE;//pir 周期测距间隔,单位:分钟(min),默认间隔:1min; 范围:1min ~ 60min
    	int periodicRangingInThePir = Integer.MIN_VALUE;//pir 模式测距中周期测距开关;1:在 pir 模式中打开周期测距,0:在 pir 模式中关闭周期测距. 默认状态:0,关闭状态.
    }


	/**
     * 设置 ToF 测距参数
     * @param macAddress 设备mac
     
     * @param threshold :距离报警阈值,单位:毫米(mm),当测距模式选择标准模式为2.5m,则占用阈值可设置范围20mm~2400mm,当测距模式选择远距模式为5.0m,则占用阈值可设置范围20mm~4900mm,如不修改配置,默认配置为 queryToFConfiguration 方法查询获取的数值
     
     * @param interval  :周期测距的测距间隔,单位:秒(s),默认间隔:1min; 范围:10s ~ 43200s (12h),如不修改配置,默认配置为 queryToFConfiguration 方法查询获取的数值
     
     * @param distanceModel  :测距模式,0:最远 2400 标准模式,1:最远 4900 远距模式,设备能测得的最大距离模式,如不修改配置,默认配置为 queryToFConfiguration 方法查询获取的数值
     
     * @param occupationTime  :占用时长,pir 模式测距成功后,一次占用状态持续时间,单位:秒(s),默认时长:1min; 范围:10s ~ 1800s (30min),如不修改配置,默认配置为 queryToFConfiguration 方法查询获取的数值
     
     * @param distanceTimes  :一次完整的测距中,tof 采集数据次数. 次数越高,精准度越高,测距时间越长。功耗相应的越高;范围:1 ~ 10 times, 默认次数:10 times,如不修改配置,默认配置为 queryToFConfiguration 方法查询获取的数值
        //1.高精度档位:10Hz  【高】 
        //2.标准测距档位:3Hz  【中】
        //3.低功耗测距档位:1Hz  【低】
     
     * @param pirRangeInterval :pir 周期测距间隔,单位:分钟(min),默认间隔:1min; 范围:1min ~ 60min,如不修改配置,默认配置为 queryToFConfiguration 方法查询获取的数值
     
     * @param periodicRangingInThePir :pir 模式测距中周期测距开关;1:在 pir 模式中打开周期测距,0:在 pir 模式中关闭周期测距. 默认状态:0,关闭状态,如不修改配置,默认配置为 queryToFConfiguration 方法查询获取的数值
     
     * @param listener   监听器
     */
	void setToFParameters(String macAddress, int threshold, int interval, int distanceModel, int occupationTime, int distanceTimes, int pirRangeInterval, int periodicRangingInThePir, OnModifyConfigurationListener listener);

    /**
     * 读取历史数据
     * @param macAddress 设备mac
     * @param rules 历史数据获取规则,0 表示获取所有数据, 1 表示获取某个时间段的数据,当rules==0,startTime、endTime 都不需要传,默认传0
     * @param startTime 起始时间戳 单位:秒
     * @param endTime 结束时间戳 单位:秒
     * @param systemTime 实时时间戳 单位:秒
     * @param listener   监听器
     */
	void queryHistoryData(String macAddress, int rules, long startTime, long endTime, long systemTime, OnQueryResultListener<HistoryToFData> listener);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203

对部分方法进行补充说明:

  1. 查询设备版本信息

    MSD01BleManager mBleManager = 	MSD01BleManager.getInstance();
        /**
         * 查询设备版本信息
         * @param macAddress 设备mac
         * @param listener   监听器
         */
    mBleManager.queryDeviceFirmwareInfo(macAddress,new OnQueryResultListener<FirmwareVersionModel>() {
                @Override
                public void OnQueryResult(boolean b, FirmwareVersionModel firmwareVersionModel) {
    				//b true查询成功,false查询失败firmwareVersionModel=null。
                    Toast.makeText(context,"Query Result:"+b,Toast.LENGTH_LONG).show();
                    if(b){
                        List<VersionInfo> versionInfoList = firmwareVersionModel.getVersionInfoList();
                        String firmwareName = versionInfoList.get(0).getFirmwareName();
                        int firmwareType = versionInfoList.get(0).getFirmwareType();
                        String firmwareVersion = versionInfoList.get(0).getFirmwareVersion();
                    }
                }
            });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
  2. 查询历史数据

        /**
         * 读取历史数据
         *
         * @param macAddress 设备mac
         * @param rules 历史数据获取规则,0 表示获取所有数据, 1 表示获取某个时间段的数据,当rules==0,startTime、endTime 都不需要传,默认传0
         * @param startTime 起始时间戳 单位:秒
         * @param endTime 结束时间戳 单位:秒
         * @param systemTime 实时时间戳 单位:秒
         * @param listener   监听器
         */
    long systemTime = System.currentTimeMillis()/1000;
    long startTime = (systemTime-60*60*1000*24)/1000;
    long endTime = systemTime;
    
    int rule = 0;
    
    mBleManager.queryHistoryData(macAddress,rule, startTime, endTime, systemTime, new OnQueryResultListener<HistoryHtData>() {
    
        @Override
        public void OnQueryResult(boolean b, HistoryHtData historyHtData) {
            if(b){
                   List<HtData> htDataList = historyHtData.getHistoryDataList();
                   for (HtData htData : htDataList) {
                            
                   }
            }else{
                Toast.makeText(context,"selectHTHistoryData Result: fail",Toast.LENGTH_LONG).show();
            }
    
        }
    
    
    });
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
  3. 固件升级

/**
 * 固件升级
 *
 * @param macAddress  设备mac
 * @param upgradeData 升级包数据
 * @param listener    监听器
 */
mBleManager.firmwareUpgrade(mac,false,0, upgradeData, new OnFirmwareUpgradeListener() {
    
    /**
     * 升级包数据写入进度
     */
    @Override
    public void updateProgress(int progress) {
		
    }

    /**
     * 升级成功回调,此时设备会主动跟手机断开连接,所以会触发OnConnStateListener回调,返回
     * BleConnectionState.Disconnect状态
     */
    @Override
    public void upgradeSuccess() {

    }
    
    /**
     * 升级失败
     */
    @Override
    public void upgradeFailed() {

    }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 历史记录

  • 2026/01/15 添加编辑文档,新增 ToF 测距基础功能 Api;
上次更新:: 2026/1/15 16:56:58