|
|
|
|
|
|
|
|
SystemClock.sleep(100); |
|
|
SystemClock.sleep(100); |
|
|
BluetoothGattService mGattService = MyBleDeviceUtils.getService(mBluetoothGatt, BleConfig.UUID_SERVER_AILINK); |
|
|
BluetoothGattService mGattService = MyBleDeviceUtils.getService(mBluetoothGatt, BleConfig.UUID_SERVER_AILINK); |
|
|
if (mGattService != null) { |
|
|
if (mGattService != null) { |
|
|
BluetoothGattCharacteristic mCharacteristic = MyBleDeviceUtils |
|
|
|
|
|
.getServiceWrite(mGattService, BleConfig.UUID_WRITE_NOTIFY_AILINK); |
|
|
|
|
|
|
|
|
BluetoothGattCharacteristic mCharacteristic = MyBleDeviceUtils.getServiceWrite(mGattService, BleConfig.UUID_WRITE_NOTIFY_AILINK); |
|
|
if (mCharacteristic != null) { |
|
|
if (mCharacteristic != null) { |
|
|
mCharacteristic.setValue(bytes); |
|
|
mCharacteristic.setValue(bytes); |
|
|
mCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE); |
|
|
mCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 将广播数据进行解密 |
|
|
* 将广播数据进行解密 |
|
|
* |
|
|
* |
|
|
* @param cid cid |
|
|
|
|
|
* @param vid vid |
|
|
|
|
|
* @param pid pid |
|
|
|
|
|
* @param payload byte[] |
|
|
* @param payload byte[] |
|
|
* @return byte[] |
|
|
* @return byte[] |
|
|
*/ |
|
|
*/ |
|
|
public byte[] decryptBroadcast(int cid, int vid,int pid, byte[] payload) { |
|
|
|
|
|
byte[] data = null; |
|
|
|
|
|
if (payload != null && payload.length >= 1) { |
|
|
|
|
|
data = AiLinkBleCheckUtil.decryptBroadcast(cid, vid, pid,payload); |
|
|
|
|
|
|
|
|
public byte[] decryptBroadcast(byte[] payload) { |
|
|
|
|
|
if (payload != null && payload.length >= 20) { |
|
|
|
|
|
byte[] cidB = new byte[1]; |
|
|
|
|
|
byte[] vidB = new byte[1]; |
|
|
|
|
|
byte[] pidB = new byte[1]; |
|
|
|
|
|
int start = 0; |
|
|
|
|
|
System.arraycopy(payload, start, cidB, 0, cidB.length); |
|
|
|
|
|
start += 1; |
|
|
|
|
|
System.arraycopy(payload, start, vidB, 0, vidB.length); |
|
|
|
|
|
start += 1; |
|
|
|
|
|
System.arraycopy(payload, start, pidB, 0, pidB.length); |
|
|
|
|
|
start += 1; |
|
|
|
|
|
//特殊广播,包含是否可以绑定的标志 |
|
|
|
|
|
int cid = (cidB[0] & 0xff); |
|
|
|
|
|
int vid = (vidB[0] & 0xff); |
|
|
|
|
|
int pid = (pidB[0] & 0xff); |
|
|
|
|
|
byte sum = payload[9]; |
|
|
|
|
|
byte[] decryptData = new byte[10];//根据协议取出需要解密的广播数据 |
|
|
|
|
|
System.arraycopy(payload, 10, decryptData, 0, decryptData.length); |
|
|
|
|
|
byte newSum = cmdSum(decryptData); |
|
|
|
|
|
if (sum == newSum) { |
|
|
|
|
|
byte[] data = AiLinkBleCheckUtil.decryptBroadcast(cid, vid, pid, decryptData); |
|
|
|
|
|
return data; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
return data; |
|
|
|
|
|
|
|
|
return payload; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 校验累加,从1开始加 |
|
|
|
|
|
*/ |
|
|
|
|
|
private static byte cmdSum(byte[] data) { |
|
|
|
|
|
byte sum = 0; |
|
|
|
|
|
for (byte datum : data) { |
|
|
|
|
|
sum += datum; |
|
|
|
|
|
} |
|
|
|
|
|
return sum; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
public void close() { |
|
|
public void close() { |