OnlineStatusNotificationParser.java
2.49 KB
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
/*
* Copyright (C) 2015 The Telink Bluetooth Light Project
*
*/
package com.telink.bluetooth.light;
import java.util.ArrayList;
import java.util.List;
public final class OnlineStatusNotificationParser extends NotificationParser<List<OnlineStatusNotificationParser.DeviceNotificationInfo>> {
private OnlineStatusNotificationParser() {
}
public static OnlineStatusNotificationParser create() {
return new OnlineStatusNotificationParser();
}
@Override
public byte opcode() {
return Opcode.BLE_GATT_OP_CTRL_DC.getValue();
}
@Override
public List<DeviceNotificationInfo> parse(NotificationInfo notifyInfo) {
byte[] params = notifyInfo.params;
int meshAddress;
int status;
int brightness;
int reserve;
int position = 0;
int packetSize = 4;
int length = params.length;
List<DeviceNotificationInfo> notificationInfoList = null;
DeviceNotificationInfo deviceNotifyInfo;
while ((position + packetSize) < length) {
meshAddress = params[position++];
status = params[position++];
brightness = params[position++];
reserve = params[position++];
meshAddress = meshAddress & 0xFF;
if (meshAddress == 0x00
|| (meshAddress == 0xFF && brightness == 0xFF))
break;
if (notificationInfoList == null)
notificationInfoList = new ArrayList<>();
deviceNotifyInfo = new DeviceNotificationInfo();
deviceNotifyInfo.meshAddress = meshAddress;
deviceNotifyInfo.brightness = brightness;
deviceNotifyInfo.reserve = reserve;
deviceNotifyInfo.status = status;
if (status == 0) {
deviceNotifyInfo.connectStatus = ConnectionStatus.OFFLINE;
} else if (brightness != 0) {
deviceNotifyInfo.connectStatus = ConnectionStatus.ON;
} else {
deviceNotifyInfo.connectStatus = ConnectionStatus.OFF;
}
notificationInfoList.add(deviceNotifyInfo);
}
return notificationInfoList;
}
public final class DeviceNotificationInfo {
public int meshAddress;
public int status;
public int brightness;
public int reserve;
public ConnectionStatus connectStatus = ConnectionStatus.OFFLINE;
}
}