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 package net.sf.bluecove;
26
27 import java.util.Hashtable;
28
29 import javax.bluetooth.RemoteDevice;
30 import javax.bluetooth.ServiceRecord;
31
32 import net.sf.bluecove.util.TimeStatistic;
33
34
35
36
37 public class RemoteDeviceInfo {
38
39 public static Hashtable devices = new Hashtable();
40
41 public static Hashtable services = new Hashtable();
42
43 public String name;
44
45 public RemoteDevice remoteDevice;
46
47 public int discoveredCount;
48
49 public long discoveredFirstTime;
50
51 public long discoveredLastTime;
52
53 private TimeStatistic deviceDiscovery = new TimeStatistic();
54
55 public static TimeStatistic deviceInquiryDuration = new TimeStatistic();
56
57 private TimeStatistic serviceSearch = new TimeStatistic();
58
59 public static TimeStatistic allServiceSearch = new TimeStatistic();
60
61 public long serviceDiscoveredFirstTime;
62
63 public long serviceDiscoveredLastTime;
64
65 public TimeStatistic serviceDiscovered = new TimeStatistic();
66
67 public long variableData;
68
69 public long variableDataCheckLastTime;
70
71 public boolean variableDataUpdated = false;
72
73 public static synchronized void clear() {
74 devices = new Hashtable();
75 services = new Hashtable();
76 allServiceSearch.clear();
77 deviceInquiryDuration.clear();
78 }
79
80 public static synchronized RemoteDeviceInfo getDevice(RemoteDevice remoteDevice) {
81 String addr = remoteDevice.getBluetoothAddress().toUpperCase();
82 RemoteDeviceInfo devInfo = (RemoteDeviceInfo) devices.get(addr);
83 if (devInfo == null) {
84 devInfo = new RemoteDeviceInfo();
85 devInfo.name = TestResponderClient.niceDeviceName(addr);
86 devInfo.remoteDevice = remoteDevice;
87 devices.put(addr, devInfo);
88 }
89 return devInfo;
90 }
91
92 public static synchronized void deviceFound(RemoteDevice remoteDevice) {
93 RemoteDeviceInfo devInfo = getDevice(remoteDevice);
94 long now = System.currentTimeMillis();
95 if (devInfo.discoveredCount == 0) {
96 devInfo.discoveredFirstTime = now;
97 devInfo.deviceDiscovery.add(0);
98 } else {
99 devInfo.deviceDiscovery.add(now - devInfo.discoveredLastTime);
100 }
101 devInfo.remoteDevice = remoteDevice;
102 devInfo.discoveredCount++;
103 devInfo.discoveredLastTime = now;
104 }
105
106 public static synchronized void deviceServiceFound(RemoteDevice remoteDevice, long variableData) {
107 RemoteDeviceInfo devInfo = getDevice(remoteDevice);
108 long now = System.currentTimeMillis();
109 if (devInfo.serviceDiscovered.count == 0) {
110 devInfo.serviceDiscoveredFirstTime = now;
111 devInfo.serviceDiscovered.add(0);
112 } else {
113 devInfo.serviceDiscovered.add(now - devInfo.serviceDiscoveredLastTime);
114 }
115 devInfo.remoteDevice = remoteDevice;
116 devInfo.serviceDiscoveredLastTime = now;
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 public static synchronized void searchServices(RemoteDevice remoteDevice, boolean found, long servicesSearch) {
146 RemoteDeviceInfo devInfo = getDevice(remoteDevice);
147 devInfo.serviceSearch.add(servicesSearch);
148 allServiceSearch.add(servicesSearch);
149 }
150
151 public static void discoveryInquiryFinished(long discoveryInquiry) {
152 deviceInquiryDuration.add(discoveryInquiry);
153 }
154
155 public static long allAvgDeviceInquiryDurationSec() {
156 return deviceInquiryDuration.avgSec();
157 }
158
159 public static long allAvgServiceSearchDurationSec() {
160 return allServiceSearch.avgSec();
161 }
162
163 public long avgDiscoveryFrequencySec() {
164 return deviceDiscovery.avgSec();
165 }
166
167 public long avgServiceDiscoveryFrequencySec() {
168 return serviceDiscovered.avgSec();
169 }
170
171 public long avgServiceSearchDurationSec() {
172 return serviceSearch.durationMaxSec();
173 }
174
175 public long serviceSearchSuccessPrc() {
176 if ((serviceSearch.count) == 0) {
177 return 0;
178 }
179 return (100 * serviceDiscovered.count) / (serviceSearch.count);
180 }
181
182 public static void saveServiceURL(ServiceRecord serviceRecord) {
183 services.put(serviceRecord.getConnectionURL(Configuration.getRequiredSecurity(), false), serviceRecord);
184 }
185 }