forked from polarofficial/polar-ble-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBDBleApiImpl_8java_source.html
193 lines (193 loc) · 273 KB
/
BDBleApiImpl_8java_source.html
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>SDK for Polar sensors: BDBleApiImpl.java Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">SDK for Polar sensors
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('BDBleApiImpl_8java_source.html','');});
/* @license-end */
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
<div class="title">BDBleApiImpl.java</div> </div>
</div><!--header-->
<div class="contents">
<a href="BDBleApiImpl_8java.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// Copyright © 2019 Polar Electro Oy. All rights reserved.</span></div><div class="line"><a name="l00002"></a><span class="lineno"><a class="line" href="namespacepolar_1_1com_1_1sdk_1_1impl.html"> 2</a></span> <span class="keyword">package </span>polar.com.sdk.impl;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="keyword">import</span> android.annotation.SuppressLint;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="keyword">import</span> android.bluetooth.le.ScanFilter;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">import</span> android.content.Context;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">import</span> android.os.Build;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">import</span> android.os.ParcelUuid;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="keyword">import</span> android.support.annotation.Nullable;</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">import</span> android.util.Pair;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.BleDeviceListener;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.BleLogger;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.exceptions.BleDisconnected;</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.BleDeviceSession;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.advertisement.BleAdvertisementContent;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.advertisement.BlePolarHrAdvertisement;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.gatt.BleGattBase;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.gatt.client.BleBattClient;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.gatt.client.BleDisClient;</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.gatt.client.BleHrClient;</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.gatt.client.BlePMDClient;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.gatt.client.psftp.BlePsFtpClient;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">import</span> com.androidcommunications.polar.api.ble.model.gatt.client.psftp.BlePsFtpUtils;</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">import</span> com.androidcommunications.polar.common.ble.BleUtils;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">import</span> com.androidcommunications.polar.enpoints.ble.bluedroid.host.BDDeviceListenerImpl;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">import</span> org.reactivestreams.Publisher;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">import</span> java.io.ByteArrayOutputStream;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">import</span> java.text.SimpleDateFormat;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">import</span> java.util.ArrayList;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">import</span> java.util.Calendar;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">import</span> java.util.Collections;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">import</span> java.util.Comparator;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">import</span> java.util.Date;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">import</span> java.util.HashMap;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">import</span> java.util.HashSet;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">import</span> java.util.List;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">import</span> java.util.Locale;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">import</span> java.util.Map;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">import</span> java.util.Set;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">import</span> java.util.UUID;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">import</span> java.util.concurrent.TimeUnit;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">import</span> java.util.concurrent.atomic.AtomicInteger;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">import</span> fi.polar.remote.representation.protobuf.ExerciseSamples;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">import</span> fi.polar.remote.representation.protobuf.Types;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">import</span> io.reactivex.Completable;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">import</span> io.reactivex.CompletableEmitter;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">import</span> io.reactivex.CompletableOnSubscribe;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">import</span> io.reactivex.CompletableSource;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">import</span> io.reactivex.Flowable;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">import</span> io.reactivex.Scheduler;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">import</span> io.reactivex.Single;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">import</span> io.reactivex.SingleSource;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">import</span> io.reactivex.android.schedulers.AndroidSchedulers;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">import</span> io.reactivex.disposables.Disposable;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">import</span> io.reactivex.functions.Action;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">import</span> io.reactivex.functions.BiFunction;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">import</span> io.reactivex.functions.Consumer;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">import</span> io.reactivex.functions.Function;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">import</span> io.reactivex.functions.Predicate;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword">import</span> io.reactivex.schedulers.Timed;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">PolarBleApi</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html">PolarBleApiCallbackProvider</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors.html">errors</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceDisconnected.html">PolarDeviceDisconnected</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors.html">errors</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceNotFound.html">PolarDeviceNotFound</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors.html">errors</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors.html">errors</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarNotificationNotEnabled.html">PolarNotificationNotEnabled</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors.html">errors</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">PolarOperationNotSupported</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors.html">errors</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarServiceNotAvailable.html">PolarServiceNotAvailable</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData.html">PolarAccelerometerData</a>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarBiozData.html">PolarBiozData</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo.html">PolarDeviceInfo</a>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarEcgData.html">PolarEcgData</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseData.html">PolarExerciseData</a>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">PolarExerciseEntry</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrBroadcastData.html">PolarHrBroadcastData</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrData.html">PolarHrData</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData.html">PolarOhrPPGData</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData.html">PolarOhrPPIData</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">import</span> <a class="code" href="namespacepolar.html">polar</a>.<a class="code" href="namespacepolar_1_1com.html">com</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk.html">sdk</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api.html">api</a>.<a class="code" href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">model</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">PolarSensorSetting</a>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">import</span> protocol.PftpRequest;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">import</span> protocol.PftpResponse;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">import</span> <span class="keyword">static</span> com.androidcommunications.polar.api.ble.model.BleDeviceSession.DeviceSessionState.SESSION_CLOSED;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">import</span> <span class="keyword">static</span> com.androidcommunications.polar.api.ble.model.BleDeviceSession.DeviceSessionState.SESSION_OPEN;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">import</span> <span class="keyword">static</span> com.androidcommunications.polar.api.ble.model.BleDeviceSession.DeviceSessionState.SESSION_OPENING;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html"> 94</a></span> <span class="keyword">public</span> <span class="keyword">class </span><a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html">BDBleApiImpl</a> <span class="keyword">extends</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">PolarBleApi</a> implements</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  BleDeviceListener.BleDeviceSessionStateChangedCallback,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  BleDeviceListener.BlePowerStateChangedCallback {</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a463274cf31be9ae204533e17818c7f16"> 97</a></span>  <span class="keyword">protected</span> <span class="keyword">final</span> <span class="keyword">static</span> String <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a463274cf31be9ae204533e17818c7f16">TAG</a> = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html">BDBleApiImpl</a>.class.getSimpleName();</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d"> 98</a></span>  <span class="keyword">protected</span> BleDeviceListener <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9"> 99</a></span>  <span class="keyword">protected</span> Map<String, Disposable> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a> = <span class="keyword">new</span> HashMap<>();</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4"> 100</a></span>  <span class="keyword">protected</span> Scheduler <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a>;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2"> 101</a></span>  <span class="keyword">protected</span> <a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html">PolarBleApiCallbackProvider</a> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb"> 102</a></span>  <span class="keyword">protected</span> <a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger.html">PolarBleApiLogger</a> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">logger</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ad534524e529063b76364ac1e1acb5858"> 103</a></span>  <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keywordtype">int</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ad534524e529063b76364ac1e1acb5858">ANDROID_VERSION_O</a> = 26;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  BleDeviceListener.BleSearchPreFilter filter = <span class="keyword">new</span> BleDeviceListener.BleSearchPreFilter() {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  @Override</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> process(BleAdvertisementContent content) {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">return</span> content.getPolarDeviceId().length() != 0 && !content.getPolarDeviceType().equals(<span class="stringliteral">"mobile"</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  };</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  @SuppressLint({<span class="stringliteral">"NewApi"</span>, <span class="stringliteral">"CheckResult"</span>})</div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a49685140c9028f1d6f140977b03ab4ca"> 112</a></span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a49685140c9028f1d6f140977b03ab4ca">BDBleApiImpl</a>(<span class="keyword">final</span> Context context, <span class="keywordtype">int</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a6b3b45f899b318df179c9779f9faaf48">features</a>) {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  super(<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a6b3b45f899b318df179c9779f9faaf48">features</a>);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  Set<Class<? extends BleGattBase>> clients = <span class="keyword">new</span> HashSet<>();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span> ((this.features & <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">PolarBleApi</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a834709ca3f418d44d2588faf55c80ea3">FEATURE_HR</a>) != 0) {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  clients.add(BleHrClient.class);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">if</span> ((this.features & <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">PolarBleApi</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#aff5649c4b21e8bba4c0463905c1168e7">FEATURE_DEVICE_INFO</a>) != 0) {</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  clients.add(BleDisClient.class);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  }</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> ((this.features & <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">PolarBleApi</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a6a13b5d8c944d7321e17662b60b97954">FEATURE_BATTERY_INFO</a>) != 0) {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  clients.add(BleBattClient.class);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> ((this.features & <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">PolarBleApi</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a56b81b1ebb53df94c5e95ec5f74e6a2b">FEATURE_POLAR_SENSOR_STREAMING</a>) != 0) {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  clients.add(BlePMDClient.class);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> ((this.features & <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">PolarBleApi</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#ae9b1c6052d3c686487e906ae463a2ff7">FEATURE_POLAR_FILE_TRANSFER</a>) != 0) {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  clients.add(BlePsFtpClient.class);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a> = <span class="keyword">new</span> BDDeviceListenerImpl(context, clients);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setScanPreFilter(filter);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setDeviceSessionStateChangedCallback(<span class="keyword">this</span>);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setBlePowerStateCallback(<span class="keyword">this</span>);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a> = AndroidSchedulers.from(context.getMainLooper());</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  BleLogger.setLoggerInterface(<span class="keyword">new</span> BleLogger.BleLoggerInterface() {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  @Override</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> d(String tag, String msg) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a6170765b10eb5ecc9b6b9584b350fb1a">log</a>(tag + <span class="stringliteral">"/"</span> + msg);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  @Override</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> e(String tag, String msg) {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a">logError</a>(tag + <span class="stringliteral">"/"</span> + msg);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  @Override</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> w(String tag, String msg) {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  @Override</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> i(String tag, String msg) {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  });</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  @SuppressLint(<span class="stringliteral">"NewApi"</span>)</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aea179b27f1dc4b7ed1ad3e2cb971a7a8"> 157</a></span>  protected <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aea179b27f1dc4b7ed1ad3e2cb971a7a8">enableAndroidScanFilter</a>() {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">if</span> (Build.VERSION.SDK_INT >= <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ad534524e529063b76364ac1e1acb5858">ANDROID_VERSION_O</a>) {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  List<ScanFilter> filter = <span class="keyword">new</span> ArrayList<>();</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  filter.add(<span class="keyword">new</span> ScanFilter.Builder().setServiceUuid(</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  ParcelUuid.fromString(BleHrClient.HR_SERVICE.toString())).build());</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  filter.add(<span class="keyword">new</span> ScanFilter.Builder().setServiceUuid(</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  ParcelUuid.fromString(BlePsFtpUtils.RFC77_PFTP_SERVICE.toString())).build());</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setScanFilters(filter);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  @Override</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae1296701871fe33af919ca9423cadd7a"> 169</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae1296701871fe33af919ca9423cadd7a">shutDown</a>() {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.shutDown();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  @Override</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4f3fceac06da15b3c1a39dc5bb7b80f1"> 174</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4f3fceac06da15b3c1a39dc5bb7b80f1">cleanup</a>() {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.removeAllSessions();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  @Override</div><div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08c2703034dc62317eaa6c47ed2284c"> 179</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08c2703034dc62317eaa6c47ed2284c">setPolarFilter</a>(<span class="keywordtype">boolean</span> enable) {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">if</span> (!enable) {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setScanPreFilter(<span class="keyword">null</span>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setScanPreFilter(filter);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  @Override</div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af300d862a83d6f973d78081cde32ab99"> 188</a></span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af300d862a83d6f973d78081cde32ab99">isFeatureReady</a>(<span class="keyword">final</span> String deviceId, <span class="keywordtype">int</span> feature) {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">switch</span> (feature) {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">case</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#ae9b1c6052d3c686487e906ae463a2ff7">FEATURE_POLAR_FILE_TRANSFER</a>:</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(deviceId) != <span class="keyword">null</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">case</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a56b81b1ebb53df94c5e95ec5f74e6a2b">FEATURE_POLAR_SENSOR_STREAMING</a>:</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(deviceId) != <span class="keyword">null</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  } <span class="keywordflow">catch</span> (Throwable ignored) {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  @Override</div><div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a74af3feec0f83aa5acb8846dc2a1d1d6"> 202</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a74af3feec0f83aa5acb8846dc2a1d1d6">setApiCallback</a>(<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html">PolarBleApiCallbackProvider</a> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>) {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  this.callback = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#aa2327fad0fd836f18a3f26a6355a8d68">blePowerStateChanged</a>(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.bleActive());</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  @Override</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ad239df6d03a59f3a85506346931b52a1"> 208</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ad239df6d03a59f3a85506346931b52a1">setApiLogger</a>(@Nullable <a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger.html">PolarBleApiLogger</a> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">logger</a>) {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  this.logger = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">logger</a>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  @Override</div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a2c36d4ab6fbdc804df500d2a1d1c0e5d"> 213</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a2c36d4ab6fbdc804df500d2a1d1c0e5d">setAutomaticReconnection</a>(<span class="keywordtype">boolean</span> disable) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setAutomaticReconnection(disable);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  @Override</div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a95d10bce5ba70d0b499f610d761aeabb"> 218</a></span>  <span class="keyword">public</span> Completable <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a95d10bce5ba70d0b499f610d761aeabb">setLocalTime</a>(String identifier, Calendar cal) {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(identifier);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">final</span> BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  PftpRequest.PbPFtpSetLocalTimeParams.Builder builder = PftpRequest.PbPFtpSetLocalTimeParams.newBuilder();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  Types.PbDate date = Types.PbDate.newBuilder()</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  .setYear(cal.get(Calendar.YEAR))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  .setMonth(cal.get(Calendar.MONTH) + 1)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  .setDay(cal.get(Calendar.DAY_OF_MONTH)).build();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  Types.PbTime time = Types.PbTime.newBuilder()</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  .setHour(cal.get(Calendar.HOUR_OF_DAY))</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  .setMinute(cal.get(Calendar.MINUTE))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  .setSeconds(cal.get(Calendar.SECOND))</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  .setMillis(cal.get(Calendar.MILLISECOND)).build();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  builder.setDate(date).setTime(time).setTzOffset((<span class="keywordtype">int</span>) TimeUnit.MINUTES.convert(cal.get(Calendar.ZONE_OFFSET), TimeUnit.MILLISECONDS));</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">return</span> client.query(PftpRequest.PbPFtpQuery.SET_LOCAL_TIME_VALUE, builder.build().toByteArray()).toObservable().ignoreElements();</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  } <span class="keywordflow">catch</span> (Throwable error) {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">return</span> Completable.error(error);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  @Override</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a8bdd3c4c4bc2c98a5ff9ac7cd1385948"> 240</a></span>  <span class="keyword">public</span> Single<PolarSensorSetting> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a8bdd3c4c4bc2c98a5ff9ac7cd1385948">requestAccSettings</a>(String identifier) {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af7371642d2f1d673a4d20fd05be9e983">querySettings</a>(identifier, BlePMDClient.PmdMeasurementType.ACC);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  @Override</div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abc85de0575973be85cc572460952b5d3"> 245</a></span>  <span class="keyword">public</span> Single<PolarSensorSetting> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abc85de0575973be85cc572460952b5d3">requestEcgSettings</a>(String identifier) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af7371642d2f1d673a4d20fd05be9e983">querySettings</a>(identifier, BlePMDClient.PmdMeasurementType.ECG);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  @Override</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aa65443950ef837c869eb6199a643487c"> 250</a></span>  <span class="keyword">public</span> Single<PolarSensorSetting> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aa65443950ef837c869eb6199a643487c">requestPpgSettings</a>(String identifier) {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af7371642d2f1d673a4d20fd05be9e983">querySettings</a>(identifier, BlePMDClient.PmdMeasurementType.PPG);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  @Override</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#afc92150da6c98b93a9f86439a0d33e3d"> 255</a></span>  <span class="keyword">public</span> Single<PolarSensorSetting> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#afc92150da6c98b93a9f86439a0d33e3d">requestBiozSettings</a>(<span class="keyword">final</span> String identifier) {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af7371642d2f1d673a4d20fd05be9e983">querySettings</a>(identifier, BlePMDClient.PmdMeasurementType.BIOZ);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af7371642d2f1d673a4d20fd05be9e983"> 259</a></span>  <span class="keyword">protected</span> Single<PolarSensorSetting> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af7371642d2f1d673a4d20fd05be9e983">querySettings</a>(<span class="keyword">final</span> String identifier, <span class="keyword">final</span> BlePMDClient.PmdMeasurementType type) {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(identifier);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">final</span> BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">return</span> client.querySettings(type).map(<span class="keyword">new</span> Function<BlePMDClient.PmdSetting, PolarSensorSetting>() {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  @Override</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">PolarSensorSetting</a> apply(BlePMDClient.PmdSetting setting) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">PolarSensorSetting</a>(setting.settings, type);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  });</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  } <span class="keywordflow">catch</span> (Throwable e) {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">return</span> Single.error(e);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  @Override</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a24707fd78988e8b9f57d47a6d24cc7e3"> 275</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a24707fd78988e8b9f57d47a6d24cc7e3">backgroundEntered</a>() {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aea179b27f1dc4b7ed1ad3e2cb971a7a8">enableAndroidScanFilter</a>();</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  @Override</div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a1218a5c9c6a590b55f1d00c9a76d4a90"> 280</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a1218a5c9c6a590b55f1d00c9a76d4a90">foregroundEntered</a>() {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.setScanFilters(<span class="keyword">null</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  @Override</div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a59c11713e724352b7a8356089185fbda"> 285</a></span>  <span class="keyword">public</span> Completable <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a59c11713e724352b7a8356089185fbda">autoConnectToDevice</a>(<span class="keyword">final</span> <span class="keywordtype">int</span> rssiLimit, <span class="keyword">final</span> String service, <span class="keyword">final</span> <span class="keywordtype">int</span> timeout, <span class="keyword">final</span> TimeUnit unit, <span class="keyword">final</span> String polarDeviceType) {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keyword">final</span> <span class="keywordtype">long</span>[] start = {0};</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">return</span> Completable.create(<span class="keyword">new</span> CompletableOnSubscribe() {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  @Override</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> subscribe(CompletableEmitter emitter) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordflow">if</span> (service == <span class="keyword">null</span> || service.matches(<span class="stringliteral">"([0-9a-fA-F]{4})"</span>)) {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  emitter.onComplete();</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  emitter.tryOnError(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a>(<span class="stringliteral">"Invalid service string format"</span>));</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  }).andThen(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.search(<span class="keyword">false</span>).filter(<span class="keyword">new</span> Predicate<BleDeviceSession>() {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  @Override</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> test(BleDeviceSession bleDeviceSession) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">if</span> (bleDeviceSession.getMedianRssi() >= rssiLimit &&</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  bleDeviceSession.isConnectableAdvertisement() &&</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  (polarDeviceType == <span class="keyword">null</span> || polarDeviceType.equals(bleDeviceSession.getPolarDeviceType())) &&</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  (service == <span class="keyword">null</span> || bleDeviceSession.getAdvertisementContent().containsService(service))) {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">if</span> (start[0] == 0) {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  start[0] = System.currentTimeMillis();</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }).timestamp().takeUntil(<span class="keyword">new</span> Predicate<Timed<BleDeviceSession>>() {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  @Override</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> test(Timed<BleDeviceSession> bleDeviceSessionTimed) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordtype">long</span> diff = bleDeviceSessionTimed.time(TimeUnit.MILLISECONDS) - start[0];</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">return</span> (diff >= unit.toMillis(timeout));</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }).reduce(<span class="keyword">new</span> HashSet<BleDeviceSession>(), <span class="keyword">new</span> BiFunction<Set<BleDeviceSession>, Timed<BleDeviceSession>, Set<BleDeviceSession>>() {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  @Override</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keyword">public</span> Set<BleDeviceSession> apply(Set<BleDeviceSession> objects, Timed<BleDeviceSession> bleDeviceSessionTimed) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  objects.add(bleDeviceSessionTimed.value());</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> objects;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }).doOnSuccess(<span class="keyword">new</span> Consumer<Set<BleDeviceSession>>() {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  @Override</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Set<BleDeviceSession> <span class="keyword">set</span>) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  List<BleDeviceSession> list = <span class="keyword">new</span> ArrayList<>(<span class="keyword">set</span>);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  Collections.sort(list, <span class="keyword">new</span> Comparator<BleDeviceSession>() {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  @Override</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keyword">public</span> <span class="keywordtype">int</span> compare(BleDeviceSession o1, BleDeviceSession o2) {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">return</span> o1.getRssi() > o2.getRssi() ? -1 : 1;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  });</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.openSessionDirect(list.get(0));</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a6170765b10eb5ecc9b6b9584b350fb1a">log</a>(<span class="stringliteral">"auto connect search complete"</span>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }).toObservable().ignoreElements());</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  @Override</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ab7e325a9ea06accea9746866d0118f1b"> 339</a></span>  <span class="keyword">public</span> Completable <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ab7e325a9ea06accea9746866d0118f1b">autoConnectToDevice</a>(<span class="keyword">final</span> <span class="keywordtype">int</span> rssiLimit, <span class="keyword">final</span> String service, <span class="keyword">final</span> String polarDeviceType) {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a59c11713e724352b7a8356089185fbda">autoConnectToDevice</a>(rssiLimit, service, 2, TimeUnit.SECONDS, polarDeviceType);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  @Override</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a92ce7a49c8c5dda100c4095d96c2500d"> 344</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a92ce7a49c8c5dda100c4095d96c2500d">connectToDevice</a>(<span class="keyword">final</span> String identifier) <span class="keywordflow">throws</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a> {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a829ace600b46dbcb598683a488f821b9">fetchSession</a>(identifier);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">if</span> (session == <span class="keyword">null</span> || session.getSessionState() == SESSION_CLOSED) {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a>.containsKey(identifier)) {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a>.get(identifier).dispose();</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a>.remove(identifier);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">if</span> (session != <span class="keyword">null</span>) {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.openSessionDirect(session);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a>.put(identifier, <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.search(<span class="keyword">false</span>).filter(<span class="keyword">new</span> Predicate<BleDeviceSession>() {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  @Override</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> test(BleDeviceSession bleDeviceSession) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">return</span> identifier.contains(<span class="stringliteral">":"</span>) ?</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  bleDeviceSession.getAddress().equals(identifier) :</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  bleDeviceSession.getPolarDeviceId().equals(identifier);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }).take(1).observeOn(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a>).subscribe(</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">new</span> Consumer<BleDeviceSession>() {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  @Override</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(BleDeviceSession bleDeviceSession) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.openSessionDirect(bleDeviceSession);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  },</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">new</span> Consumer<Throwable>() {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  @Override</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a">logError</a>(throwable.getMessage());</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  },</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">new</span> Action() {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  @Override</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a6170765b10eb5ecc9b6b9584b350fb1a">log</a>(<span class="stringliteral">"connect search complete"</span>);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  }</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  ));</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  @Override</div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4b83c6b87fbac8b7fae12f677aab7ff9"> 386</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4b83c6b87fbac8b7fae12f677aab7ff9">disconnectFromDevice</a>(String identifier) <span class="keywordflow">throws</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a> {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a829ace600b46dbcb598683a488f821b9">fetchSession</a>(identifier);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> (session != <span class="keyword">null</span>) {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">if</span> (session.getSessionState() == SESSION_OPEN ||</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  session.getSessionState() == SESSION_OPENING ||</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  session.getSessionState() == BleDeviceSession.DeviceSessionState.SESSION_OPEN_PARK) {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.closeSessionDirect(session);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a>.containsKey(identifier)) {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a>.get(identifier).dispose();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">connectSubscriptions</a>.remove(identifier);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  }</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  @Override</div><div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a14a4d99e3a14c3e8dd2a9695e25ec9a8"> 402</a></span>  <span class="keyword">public</span> Completable <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a14a4d99e3a14c3e8dd2a9695e25ec9a8">startRecording</a>(String identifier, String exerciseId, <a class="code" href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1RecordingInterval.html">RecordingInterval</a> interval, <a class="code" href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1SampleType.html">SampleType</a> type) {</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(identifier);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keyword">final</span> BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">if</span> (session.getPolarDeviceType().equals(<span class="stringliteral">"H10"</span>)) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  Types.PbSampleType t = type == <a class="code" href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1SampleType.html">SampleType</a>.<a class="code" href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1SampleType.html#a03e6d65a0a2c5e98ab9f79a1237fc328">HR</a> ?</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  Types.PbSampleType.SAMPLE_TYPE_HEART_RATE :</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  Types.PbSampleType.SAMPLE_TYPE_RR_INTERVAL;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  Types.PbDuration duration = Types.PbDuration.newBuilder().setSeconds(interval.<a class="code" href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1RecordingInterval.html#ab8a6b3e4c40c2070da5e91b8e33dc240">getValue</a>()).build();</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  PftpRequest.PbPFtpRequestStartRecordingParams params = PftpRequest.PbPFtpRequestStartRecordingParams.newBuilder().</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  setSampleDataIdentifier(exerciseId).setSampleType(t).setRecordingInterval(duration).build();</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">return</span> client.query(PftpRequest.PbPFtpQuery.REQUEST_START_RECORDING_VALUE, params.toByteArray()).toObservable().ignoreElements().onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, CompletableSource>() {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  @Override</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keyword">public</span> CompletableSource apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">return</span> Completable.error(throwable);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  });</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">return</span> Completable.error(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">PolarOperationNotSupported</a>());</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  } <span class="keywordflow">catch</span> (Throwable error) {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">return</span> Completable.error(error);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  @Override</div><div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4eb11a28590fe41d76fdb88c28894ce2"> 427</a></span>  <span class="keyword">public</span> Completable <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4eb11a28590fe41d76fdb88c28894ce2">stopRecording</a>(String identifier) {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(identifier);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keyword">final</span> BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">if</span> (session.getPolarDeviceType().equals(<span class="stringliteral">"H10"</span>)) {</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">return</span> client.query(PftpRequest.PbPFtpQuery.REQUEST_STOP_RECORDING_VALUE, <span class="keyword">null</span>).toObservable().ignoreElements().onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, CompletableSource>() {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  @Override</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keyword">public</span> CompletableSource apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">return</span> Completable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  });</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> Completable.error(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">PolarOperationNotSupported</a>());</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  } <span class="keywordflow">catch</span> (Throwable error) {</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> Completable.error(error);</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  }</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  @Override</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a69edf9c785075d164e3c248192446f15"> 446</a></span>  <span class="keyword">public</span> Single<Pair<Boolean, String>> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a69edf9c785075d164e3c248192446f15">requestRecordingStatus</a>(String identifier) {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(identifier);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keyword">final</span> BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">if</span> (session.getPolarDeviceType().equals(<span class="stringliteral">"H10"</span>)) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">return</span> client.query(PftpRequest.PbPFtpQuery.REQUEST_RECORDING_STATUS_VALUE, <span class="keyword">null</span>).map(<span class="keyword">new</span> Function<ByteArrayOutputStream, Pair<Boolean, String>>() {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  @Override</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keyword">public</span> Pair<Boolean, String> apply(ByteArrayOutputStream byteArrayOutputStream) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  PftpResponse.PbRequestRecordingStatusResult result = PftpResponse.PbRequestRecordingStatusResult.parseFrom(byteArrayOutputStream.toByteArray());</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> Pair<>(result.getRecordingOn(), result.hasSampleDataIdentifier() ? result.getSampleDataIdentifier() : <span class="stringliteral">""</span>);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  }).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, SingleSource<? extends Pair<Boolean, String>>>() {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  @Override</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keyword">public</span> SingleSource<? extends Pair<Boolean, String>> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">return</span> Single.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  }</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  });</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> Single.error(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">PolarOperationNotSupported</a>());</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  } <span class="keywordflow">catch</span> (Throwable error) {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordflow">return</span> Single.error(error);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  @Override</div><div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aa7b05d48c5f57c4d66f1e1c182883739"> 471</a></span>  <span class="keyword">public</span> Flowable<PolarExerciseEntry> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aa7b05d48c5f57c4d66f1e1c182883739">listExercises</a>(String identifier) {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(identifier);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">final</span> BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordflow">switch</span> (session.getPolarDeviceType()) {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">case</span> <span class="stringliteral">"OH1"</span>:</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aae9728d213d59602f3c74b447c83c136">fetchRecursively</a>(client, <span class="stringliteral">"/U/0/"</span>, <span class="keyword">new</span> FetchRecursiveCondition() {</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  @Override</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> include(String entry) {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keywordflow">return</span> entry.matches(<span class="stringliteral">"^([0-9]{8})(\\/)"</span>) ||</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  entry.matches(<span class="stringliteral">"^([0-9]{6})(\\/)"</span>) ||</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  entry.equals(<span class="stringliteral">"E/"</span>) ||</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  entry.equals(<span class="stringliteral">"SAMPLES.BPB"</span>) ||</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  entry.equals(<span class="stringliteral">"00/"</span>);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }).map(<span class="keyword">new</span> Function<String, PolarExerciseEntry>() {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  @Override</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">PolarExerciseEntry</a> apply(String p) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  String[] components = p.split(<span class="stringliteral">"/"</span>);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  SimpleDateFormat format = <span class="keyword">new</span> SimpleDateFormat(<span class="stringliteral">"yyyyMMdd HHmmss"</span>, Locale.getDefault());</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  Date date = format.parse(components[3] + <span class="stringliteral">" "</span> + components[5]);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">PolarExerciseEntry</a>(p, date, components[3] + components[5]);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  }).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, Publisher<? extends PolarExerciseEntry>>() {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  @Override</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keyword">public</span> Publisher<? extends PolarExerciseEntry> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> Flowable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  });</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">case</span> <span class="stringliteral">"H10"</span>:</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aae9728d213d59602f3c74b447c83c136">fetchRecursively</a>(client, <span class="stringliteral">"/"</span>, <span class="keyword">new</span> FetchRecursiveCondition() {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  @Override</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> include(String entry) {</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">return</span> entry.endsWith(<span class="stringliteral">"/"</span>) || entry.equals(<span class="stringliteral">"SAMPLES.BPB"</span>);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  }).map(<span class="keyword">new</span> Function<String, PolarExerciseEntry>() {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  @Override</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">PolarExerciseEntry</a> apply(String p) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  String[] components = p.split(<span class="stringliteral">"/"</span>);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">PolarExerciseEntry</a>(p, <span class="keyword">new</span> Date(), components[1]);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  }).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, Publisher<? extends PolarExerciseEntry>>() {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  @Override</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">public</span> Publisher<? extends PolarExerciseEntry> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keywordflow">return</span> Flowable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  }</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  });</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keywordflow">return</span> Flowable.error(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">PolarOperationNotSupported</a>());</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  } <span class="keywordflow">catch</span> (Throwable error) {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">return</span> Flowable.error(error);</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  }</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  }</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  @Override</div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a573753301ab6af12467792bc87fc19a2"> 527</a></span>  <span class="keyword">public</span> Single<PolarExerciseData> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a573753301ab6af12467792bc87fc19a2">fetchExercise</a>(String identifier, <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">PolarExerciseEntry</a> entry) {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(identifier);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keyword">final</span> BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  protocol.PftpRequest.PbPFtpOperation.Builder builder = protocol.PftpRequest.PbPFtpOperation.newBuilder();</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  builder.setCommand(PftpRequest.PbPFtpOperation.Command.GET);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  builder.setPath(entry.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html#a6868bc6edf522eeacf300a790a312464">path</a>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">if</span> (session.getPolarDeviceType().equals(<span class="stringliteral">"OH1"</span>) || session.getPolarDeviceType().equals(<span class="stringliteral">"H10"</span>)) {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> </div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="comment">/*</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="comment"> TODO to improve throughput (device will request parameter update from mobile):</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="comment"></span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="comment"> Add these two notifications before reading ex</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="comment"> client.sendNotification(PftpNotification.PbPFtpHostToDevNotification.START_SYNC_VALUE, null).andThen(</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="comment"> client.sendNotification(PftpNotification.PbPFtpHostToDevNotification.INITIALIZE_SESSION_VALUE, null)</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="comment"> );</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="comment"></span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="comment"> Add these two notifications after reading ex</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment"> client.sendNotification(PftpNotification.PbPFtpHostToDevNotification.STOP_SYNC_VALUE,</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment"> PftpNotification.PbPFtpStopSyncParams.newBuilder().setCompleted(true).build().toByteArray()).andThen(</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment"> client.sendNotification(PftpNotification.PbPFtpHostToDevNotification.TERMINATE_SESSION_VALUE, null)</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="comment"> );</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="comment"> */</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">return</span> client.request(builder.build().toByteArray()).map(<span class="keyword">new</span> Function<ByteArrayOutputStream, PolarExerciseData>() {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  @Override</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseData.html">PolarExerciseData</a> apply(ByteArrayOutputStream byteArrayOutputStream) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  ExerciseSamples.PbExerciseSamples samples = ExerciseSamples.PbExerciseSamples.parseFrom(byteArrayOutputStream.toByteArray());</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">if</span> (samples.hasRrSamples()) {</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseData.html">PolarExerciseData</a>(samples.getRecordingInterval().getSeconds(), samples.getRrSamples().getRrIntervalsList());</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseData.html">PolarExerciseData</a>(samples.getRecordingInterval().getSeconds(), samples.getHeartRateSamplesList());</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  }</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  }).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, SingleSource<? extends PolarExerciseData>>() {</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  @Override</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keyword">public</span> SingleSource<? extends PolarExerciseData> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">return</span> Single.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  });</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">return</span> Single.error(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">PolarOperationNotSupported</a>());</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  } <span class="keywordflow">catch</span> (Throwable error) {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">return</span> Single.error(error);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  }</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  @Override</div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac645b2eedd096132b613ed5c0b6ecc2f"> 575</a></span>  <span class="keyword">public</span> Completable <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac645b2eedd096132b613ed5c0b6ecc2f">removeExercise</a>(String identifier, <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">PolarExerciseEntry</a> entry) {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(identifier);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keyword">final</span> BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">if</span> (session.getPolarDeviceType().equals(<span class="stringliteral">"OH1"</span>)) {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  protocol.PftpRequest.PbPFtpOperation.Builder builder = protocol.PftpRequest.PbPFtpOperation.newBuilder();</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  builder.setCommand(PftpRequest.PbPFtpOperation.Command.GET);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keyword">final</span> String[] components = entry.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html#a6868bc6edf522eeacf300a790a312464">path</a>.split(<span class="stringliteral">"/"</span>);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="keyword">final</span> String exerciseParent = <span class="stringliteral">"/U/0/"</span> + components[3] + <span class="stringliteral">"/E/"</span>;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  builder.setPath(exerciseParent);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">return</span> client.request(builder.build().toByteArray()).flatMap(<span class="keyword">new</span> Function<ByteArrayOutputStream, SingleSource<?>>() {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  @Override</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keyword">public</span> SingleSource<?> apply(ByteArrayOutputStream byteArrayOutputStream) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  PftpResponse.PbPFtpDirectory directory = PftpResponse.PbPFtpDirectory.parseFrom(byteArrayOutputStream.toByteArray());</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  protocol.PftpRequest.PbPFtpOperation.Builder removeBuilder = protocol.PftpRequest.PbPFtpOperation.newBuilder();</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  removeBuilder.setCommand(PftpRequest.PbPFtpOperation.Command.REMOVE);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">if</span> (directory.getEntriesCount() <= 1) {</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="comment">// remove entire directory</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  removeBuilder.setPath(<span class="stringliteral">"/U/0/"</span> + components[3] + <span class="stringliteral">"/"</span>);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="comment">// remove only exercise</span></div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  removeBuilder.setPath(<span class="stringliteral">"/U/0/"</span> + components[3] + <span class="stringliteral">"/E/"</span> + components[5] + <span class="stringliteral">"/"</span>);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keywordflow">return</span> client.request(removeBuilder.build().toByteArray());</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }).toObservable().ignoreElements().onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, CompletableSource>() {</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  @Override</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">public</span> CompletableSource apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">return</span> Completable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  });</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (session.getPolarDeviceType().equals(<span class="stringliteral">"H10"</span>)) {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  protocol.PftpRequest.PbPFtpOperation.Builder builder = protocol.PftpRequest.PbPFtpOperation.newBuilder();</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  builder.setCommand(PftpRequest.PbPFtpOperation.Command.REMOVE);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  builder.setPath(entry.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html#a6868bc6edf522eeacf300a790a312464">path</a>);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keywordflow">return</span> client.request(builder.build().toByteArray()).toObservable().ignoreElements().onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, CompletableSource>() {</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  @Override</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keyword">public</span> CompletableSource apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">return</span> Completable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  });</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">return</span> Completable.error(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">PolarOperationNotSupported</a>());</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  } <span class="keywordflow">catch</span> (Throwable error) {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">return</span> Completable.error(error);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  }</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  @Override</div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a436696ba043d2a5d77d5fe33e2ab91cf"> 624</a></span>  <span class="keyword">public</span> Flowable<PolarDeviceInfo> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a436696ba043d2a5d77d5fe33e2ab91cf">searchForDevice</a>() {</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.search(<span class="keyword">false</span>).distinct().map(<span class="keyword">new</span> Function<BleDeviceSession, PolarDeviceInfo>() {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  @Override</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo.html">PolarDeviceInfo</a> apply(BleDeviceSession bleDeviceSession) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo.html">PolarDeviceInfo</a>(bleDeviceSession.getPolarDeviceId(),</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  bleDeviceSession.getAddress(),</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  bleDeviceSession.getRssi(),</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  bleDeviceSession.getName(),</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  bleDeviceSession.isConnectableAdvertisement());</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  });</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  @Override</div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed55c3ce811dbb765d761f3b90b8ff96"> 638</a></span>  <span class="keyword">public</span> Flowable<PolarHrBroadcastData> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed55c3ce811dbb765d761f3b90b8ff96">startListenForPolarHrBroadcasts</a>(<span class="keyword">final</span> Set<String> deviceIds) {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="comment">// set filter to null, NOTE this disables reconnection in background</span></div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.search(<span class="keyword">false</span>).filter(<span class="keyword">new</span> Predicate<BleDeviceSession>() {</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  @Override</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keyword">public</span> <span class="keywordtype">boolean</span> test(BleDeviceSession bleDeviceSession) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">return</span> (deviceIds == <span class="keyword">null</span> || deviceIds.contains(bleDeviceSession.getPolarDeviceId())) &&</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  bleDeviceSession.getAdvertisementContent().getPolarHrAdvertisement().isPresent();</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  }</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }).map(<span class="keyword">new</span> Function<BleDeviceSession, PolarHrBroadcastData>() {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  @Override</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrBroadcastData.html">PolarHrBroadcastData</a> apply(BleDeviceSession bleDeviceSession) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  BlePolarHrAdvertisement advertisement = bleDeviceSession.getBlePolarHrAdvertisement();</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrBroadcastData.html">PolarHrBroadcastData</a>(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo.html">PolarDeviceInfo</a>(bleDeviceSession.getPolarDeviceId(),</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  bleDeviceSession.getAddress(),</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  bleDeviceSession.getRssi(),</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  bleDeviceSession.getName(),</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  bleDeviceSession.isConnectableAdvertisement()),</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  advertisement.getHrForDisplay(),</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  advertisement.getBatteryStatus() != 0);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  });</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> </div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  @Override</div><div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a7700f8c34663e4f37e208c0b5c779582"> 662</a></span>  <span class="keyword">public</span> Flowable<PolarEcgData> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a7700f8c34663e4f37e208c0b5c779582">startEcgStreaming</a>(String identifier,</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">PolarSensorSetting</a> setting) {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(identifier);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">final</span> BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">return</span> client.startMeasurement(BlePMDClient.PmdMeasurementType.ECG, setting.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html#a8861d81f7ca995e36dd8b1cddadb78c9">map2PmdSettings</a>()).andThen(</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  client.monitorEcgNotifications(<span class="keyword">true</span>).map(<span class="keyword">new</span> Function<BlePMDClient.EcgData, PolarEcgData>() {</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  @Override</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarEcgData.html">PolarEcgData</a> apply(BlePMDClient.EcgData ecgData) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  List<Integer> samples = <span class="keyword">new</span> ArrayList<>();</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">for</span> (BlePMDClient.EcgData.EcgSample s : ecgData.ecgSamples) {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  samples.add(s.microVolts);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  }</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarEcgData.html">PolarEcgData</a>(samples, ecgData.timeStamp);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  }).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, Publisher<? extends PolarEcgData>>() {</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  @Override</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keyword">public</span> Publisher<? extends PolarEcgData> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">return</span> Flowable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  }</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }).doFinally(<span class="keyword">new</span> Action() {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  @Override</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092">stopPmdStreaming</a>(session, client, BlePMDClient.PmdMeasurementType.ECG);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }));</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  } <span class="keywordflow">catch</span> (Throwable t) {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="keywordflow">return</span> Flowable.error(t);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span> </div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  @Override</div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a34b010c3844f564a377bfb430170e4a9"> 694</a></span>  <span class="keyword">public</span> Flowable<PolarAccelerometerData> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a34b010c3844f564a377bfb430170e4a9">startAccStreaming</a>(String identifier,</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">PolarSensorSetting</a> setting) {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(identifier);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keyword">final</span> BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">return</span> client.startMeasurement(BlePMDClient.PmdMeasurementType.ACC, setting.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html#a8861d81f7ca995e36dd8b1cddadb78c9">map2PmdSettings</a>()).andThen(</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  client.monitorAccNotifications(<span class="keyword">true</span>).map(<span class="keyword">new</span> Function<BlePMDClient.AccData, PolarAccelerometerData>() {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  @Override</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData.html">PolarAccelerometerData</a> apply(BlePMDClient.AccData accData) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  List<<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData.html">PolarAccelerometerData</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData_1_1PolarAccelerometerSample.html">PolarAccelerometerSample</a>> samples = <span class="keyword">new</span> ArrayList<>();</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">for</span> (BlePMDClient.AccData.AccSample s : accData.accSamples) {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  samples.add(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData.html">PolarAccelerometerData</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData_1_1PolarAccelerometerSample.html">PolarAccelerometerSample</a>(s.x, s.y, s.z));</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData.html">PolarAccelerometerData</a>(samples, accData.timeStamp);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  }).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, Publisher<? extends PolarAccelerometerData>>() {</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  @Override</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keyword">public</span> Publisher<? extends PolarAccelerometerData> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">return</span> Flowable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  }).doFinally(<span class="keyword">new</span> Action() {</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  @Override</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092">stopPmdStreaming</a>(session, client, BlePMDClient.PmdMeasurementType.ACC);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  }));</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  } <span class="keywordflow">catch</span> (Throwable t) {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">return</span> Flowable.error(t);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> </div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  @Override</div><div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a1163224a654db6b5917ad81fc3aa2d23"> 726</a></span>  <span class="keyword">public</span> Flowable<PolarOhrPPGData> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a1163224a654db6b5917ad81fc3aa2d23">startOhrPPGStreaming</a>(String identifier,</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">PolarSensorSetting</a> setting) {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(identifier);</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keyword">final</span> BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">return</span> client.startMeasurement(BlePMDClient.PmdMeasurementType.PPG, setting.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html#a8861d81f7ca995e36dd8b1cddadb78c9">map2PmdSettings</a>()).andThen(</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  client.monitorPpgNotifications(<span class="keyword">true</span>).map(<span class="keyword">new</span> Function<BlePMDClient.PpgData, PolarOhrPPGData>() {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  @Override</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData.html">PolarOhrPPGData</a> apply(BlePMDClient.PpgData ppgData) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  List<<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData.html">PolarOhrPPGData</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData_1_1PolarOhrPPGSample.html">PolarOhrPPGSample</a>> samples = <span class="keyword">new</span> ArrayList<>();</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keywordflow">for</span> (BlePMDClient.PpgData.PpgSample s : ppgData.ppgSamples) {</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  samples.add(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData.html">PolarOhrPPGData</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData_1_1PolarOhrPPGSample.html">PolarOhrPPGSample</a>(s.ppg0, s.ppg1, s.ppg2, s.ambient, s.ppgDataSamples, s.ambient1, s.status));</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData.html">PolarOhrPPGData</a>(samples, ppgData.timeStamp, ppgData.type);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  }</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  }).doFinally(<span class="keyword">new</span> Action() {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  @Override</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092">stopPmdStreaming</a>(session, client, BlePMDClient.PmdMeasurementType.PPG);</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  }</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  })).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, Publisher<? extends PolarOhrPPGData>>() {</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  @Override</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keyword">public</span> Publisher<? extends PolarOhrPPGData> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">return</span> Flowable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  }</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  });</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  } <span class="keywordflow">catch</span> (Throwable t) {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">return</span> Flowable.error(t);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  }</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  @Override</div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5d33c2910d8f2583ee44962c4bcac2bf"> 758</a></span>  <span class="keyword">public</span> Flowable<PolarOhrPPIData> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5d33c2910d8f2583ee44962c4bcac2bf">startOhrPPIStreaming</a>(String identifier) {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(identifier);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keyword">final</span> BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordflow">return</span> client.startMeasurement(BlePMDClient.PmdMeasurementType.PPI, <span class="keyword">new</span> BlePMDClient.PmdSetting(<span class="keyword">new</span> HashMap<BlePMDClient.PmdSetting.PmdSettingType, Integer>())).andThen(</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  client.monitorPpiNotifications(<span class="keyword">true</span>).map(<span class="keyword">new</span> Function<BlePMDClient.PpiData, PolarOhrPPIData>() {</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  @Override</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData.html">PolarOhrPPIData</a> apply(BlePMDClient.PpiData ppiData) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  List<<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData.html">PolarOhrPPIData</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData_1_1PolarOhrPPISample.html">PolarOhrPPISample</a>> samples = <span class="keyword">new</span> ArrayList<>();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keywordflow">for</span> (BlePMDClient.PpiData.PPSample ppSample : ppiData.ppSamples) {</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  samples.add(<span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData.html">PolarOhrPPIData</a>.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData_1_1PolarOhrPPISample.html">PolarOhrPPISample</a>(ppSample.ppInMs,</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  ppSample.ppErrorEstimate,</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  ppSample.hr,</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  ppSample.blockerBit != 0,</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  ppSample.skinContactStatus != 0,</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  ppSample.skinContactSupported != 0));</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData.html">PolarOhrPPIData</a>(ppiData.timestamp, samples);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  }</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }).doFinally(<span class="keyword">new</span> Action() {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  @Override</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092">stopPmdStreaming</a>(session, client, BlePMDClient.PmdMeasurementType.PPI);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  })).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, Publisher<? extends PolarOhrPPIData>>() {</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  @Override</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keyword">public</span> Publisher<? extends PolarOhrPPIData> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">return</span> Flowable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  });</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  } <span class="keywordflow">catch</span> (Throwable t) {</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">return</span> Flowable.error(t);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  @Override</div><div class="line"><a name="l00794"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a9863d8f3a3756b95cf030e821af4c21c"> 794</a></span>  <span class="keyword">public</span> Flowable<PolarBiozData> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a9863d8f3a3756b95cf030e821af4c21c">startBiozStreaming</a>(<span class="keyword">final</span> String identifier, <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">PolarSensorSetting</a> setting) {</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keyword">final</span> BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(identifier);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keyword">final</span> BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">return</span> client.startMeasurement(BlePMDClient.PmdMeasurementType.BIOZ, setting.<a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html#a8861d81f7ca995e36dd8b1cddadb78c9">map2PmdSettings</a>()).andThen(</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  client.monitorBiozNotifications(<span class="keyword">true</span>).map(<span class="keyword">new</span> Function<BlePMDClient.BiozData, PolarBiozData>() {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  @Override</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keyword">public</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarBiozData.html">PolarBiozData</a> apply(BlePMDClient.BiozData biozData) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarBiozData.html">PolarBiozData</a>(biozData.timeStamp, biozData.samples, biozData.status, biozData.type);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  }</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  }).doFinally(<span class="keyword">new</span> Action() {</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  @Override</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092">stopPmdStreaming</a>(session, client, BlePMDClient.PmdMeasurementType.PPG);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  }</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  })).onErrorResumeNext(<span class="keyword">new</span> Function<Throwable, Publisher<? extends PolarBiozData>>() {</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  @Override</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keyword">public</span> Publisher<? extends PolarBiozData> apply(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">return</span> Flowable.error(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(throwable));</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  }</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  });</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  } <span class="keywordflow">catch</span> (Throwable t) {</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keywordflow">return</span> Flowable.error(t);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div><div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a829ace600b46dbcb598683a488f821b9"> 820</a></span>  <span class="keyword">protected</span> BleDeviceSession <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a829ace600b46dbcb598683a488f821b9">fetchSession</a>(<span class="keyword">final</span> String identifier) <span class="keywordflow">throws</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a> {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">if</span> (identifier.matches(<span class="stringliteral">"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"</span>)) {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae0186ce1014ad60295930835b3620a22">sessionByAddress</a>(identifier);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (identifier.matches(<span class="stringliteral">"([0-9a-fA-F]){6,8}"</span>)) {</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a2ca3ebc9ca23822d2aca71a2002c1b73">sessionByDeviceId</a>(identifier);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  }</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a>();</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div><div class="line"><a name="l00829"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae0186ce1014ad60295930835b3620a22"> 829</a></span>  <span class="keyword">protected</span> BleDeviceSession <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae0186ce1014ad60295930835b3620a22">sessionByAddress</a>(<span class="keyword">final</span> String address) <span class="keywordflow">throws</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a> {</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">for</span> (BleDeviceSession session : <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.deviceSessions()) {</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">if</span> (session.getAddress().equals(address)) {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> session;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keywordflow">return</span> <span class="keyword">null</span>;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div><div class="line"><a name="l00838"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a2ca3ebc9ca23822d2aca71a2002c1b73"> 838</a></span>  <span class="keyword">protected</span> BleDeviceSession <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a2ca3ebc9ca23822d2aca71a2002c1b73">sessionByDeviceId</a>(<span class="keyword">final</span> String deviceId) <span class="keywordflow">throws</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">PolarInvalidArgument</a> {</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">for</span> (BleDeviceSession session : <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">listener</a>.deviceSessions()) {</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">if</span> (session.getAdvertisementContent().getPolarDeviceId().equals(deviceId)) {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keywordflow">return</span> session;</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordflow">return</span> <span class="keyword">null</span>;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  }</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span> </div><div class="line"><a name="l00847"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a647db72c6f3a1cbd7587cac769cf0e2c"> 847</a></span>  <span class="keyword">protected</span> BleDeviceSession <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a647db72c6f3a1cbd7587cac769cf0e2c">sessionServiceReady</a>(<span class="keyword">final</span> String identifier, UUID service) <span class="keywordflow">throws</span> Throwable {</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a829ace600b46dbcb598683a488f821b9">fetchSession</a>(identifier);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordflow">if</span> (session != <span class="keyword">null</span>) {</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">if</span> (session.getSessionState() == SESSION_OPEN) {</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  BleGattBase client = session.fetchClient(service);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">if</span> (client.isServiceDiscovered()) {</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">return</span> session;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  }</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarServiceNotAvailable.html">PolarServiceNotAvailable</a>();</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  }</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceDisconnected.html">PolarDeviceDisconnected</a>();</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceNotFound.html">PolarDeviceNotFound</a>();</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div><div class="line"><a name="l00862"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000"> 862</a></span>  <span class="keyword">public</span> BleDeviceSession <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">sessionPmdClientReady</a>(<span class="keyword">final</span> String identifier) <span class="keywordflow">throws</span> Throwable {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a647db72c6f3a1cbd7587cac769cf0e2c">sessionServiceReady</a>(identifier, BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keyword">final</span> AtomicInteger pair = client.getNotificationAtomicInteger(BlePMDClient.PMD_CP);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keyword">final</span> AtomicInteger pairData = client.getNotificationAtomicInteger(BlePMDClient.PMD_DATA);</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">if</span> (pair != <span class="keyword">null</span> && pairData != <span class="keyword">null</span> &&</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  pair.get() == BleGattBase.ATT_SUCCESS &&</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  pairData.get() == BleGattBase.ATT_SUCCESS) {</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">return</span> session;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  }</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarNotificationNotEnabled.html">PolarNotificationNotEnabled</a>();</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span> </div><div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c"> 875</a></span>  <span class="keyword">protected</span> BleDeviceSession <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">sessionPsFtpClientReady</a>(<span class="keyword">final</span> String identifier) <span class="keywordflow">throws</span> Throwable {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  BleDeviceSession session = <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a647db72c6f3a1cbd7587cac769cf0e2c">sessionServiceReady</a>(identifier, BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keyword">final</span> AtomicInteger pair = client.getNotificationAtomicInteger(BlePsFtpUtils.RFC77_PFTP_MTU_CHARACTERISTIC);</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keywordflow">if</span> (pair != <span class="keyword">null</span> && pair.get() == BleGattBase.ATT_SUCCESS) {</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <span class="keywordflow">return</span> session;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  }</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">throw</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarNotificationNotEnabled.html">PolarNotificationNotEnabled</a>();</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> </div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  @SuppressLint(<span class="stringliteral">"CheckResult"</span>)</div><div class="line"><a name="l00886"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092"> 886</a></span>  protected <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092">stopPmdStreaming</a>(BleDeviceSession session, BlePMDClient client, BlePMDClient.PmdMeasurementType type) {</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keywordflow">if</span> (session.getSessionState() == SESSION_OPEN) {</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="comment">// stop streaming</span></div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  client.stopMeasurement(type).subscribe(</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keyword">new</span> Action() {</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  @Override</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  }</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  },</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <span class="keyword">new</span> Consumer<Throwable>() {</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  @Override</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a">logError</a>(<span class="stringliteral">"failed to stop pmd stream: "</span> + throwable.getLocalizedMessage());</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  }</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  );</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  }</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  }</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> </div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  @SuppressLint(<span class="stringliteral">"CheckResult"</span>)</div><div class="line"><a name="l00907"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4a711dc98144cb480f5b4e4ef3c2af5b"> 907</a></span>  protected <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4a711dc98144cb480f5b4e4ef3c2af5b">setupDevice</a>(final BleDeviceSession session) {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keyword">final</span> String deviceId = session.getPolarDeviceId().length() != 0 ? session.getPolarDeviceId() : session.getAddress();</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  session.monitorServicesDiscovered(<span class="keyword">true</span>).observeOn(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a>).toFlowable().flatMapIterable(</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <span class="keyword">new</span> Function<List<UUID>, Iterable<UUID>>() {</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  @Override</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keyword">public</span> Iterable<UUID> apply(List<UUID> uuids) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <span class="keywordflow">return</span> uuids;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  }</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  ).flatMap(<span class="keyword">new</span> Function<UUID, Publisher<?>>() {</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  @Override</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keyword">public</span> Publisher<?> apply(UUID uuid) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keywordflow">if</span> (session.fetchClient(uuid) != <span class="keyword">null</span>) {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keywordflow">if</span> (uuid.equals(BleHrClient.HR_SERVICE)) {</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#aaa3aa5c3fa46b8e42c01e7aac9c8dc64">hrFeatureReady</a>(deviceId);</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="keyword">final</span> BleHrClient client = (BleHrClient) session.fetchClient(BleHrClient.HR_SERVICE);</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  client.observeHrNotifications(<span class="keyword">true</span>).observeOn(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a>).subscribe(</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="keyword">new</span> Consumer<BleHrClient.HrNotificationData>() {</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  @Override</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(BleHrClient.HrNotificationData hrNotificationData) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a486c58d7f53d93646e73350b18ca7848">hrNotificationReceived</a>(deviceId,</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrData.html">PolarHrData</a>(hrNotificationData.hrValue,</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  hrNotificationData.rrs,</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  hrNotificationData.sensorContact,</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  hrNotificationData.sensorContactSupported,</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  hrNotificationData.rrPresent));</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  }</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  }</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  },</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keyword">new</span> Consumer<Throwable>() {</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  @Override</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a">logError</a>(throwable.getMessage());</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  }</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  },</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="keyword">new</span> Action() {</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  @Override</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span> </div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  }</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  }</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  );</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (uuid.equals(BleBattClient.BATTERY_SERVICE)) {</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  BleBattClient client = (BleBattClient) session.fetchClient(BleBattClient.BATTERY_SERVICE);</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keywordflow">return</span> client.waitBatteryLevelUpdate(<span class="keyword">true</span>).observeOn(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a>).doOnSuccess(<span class="keyword">new</span> Consumer<Integer>() {</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  @Override</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Integer integer) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a78097d3ec0e9008595d905ab2302d404">batteryLevelReceived</a>(deviceId, integer);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  }</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  }</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  }).toFlowable();</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (uuid.equals(BlePMDClient.PMD_SERVICE)) {</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="keyword">final</span> BlePMDClient client = (BlePMDClient) session.fetchClient(BlePMDClient.PMD_SERVICE);</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keywordflow">return</span> client.waitNotificationEnabled(BlePMDClient.PMD_CP, <span class="keyword">true</span>).</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  concatWith(client.waitNotificationEnabled(BlePMDClient.PMD_DATA, <span class="keyword">true</span>)).andThen(client.readFeature(<span class="keyword">true</span>).doOnSuccess(<span class="keyword">new</span> Consumer<BlePMDClient.PmdFeature>() {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  @Override</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(BlePMDClient.PmdFeature pmdFeature) {</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="keywordflow">if</span> (pmdFeature.ecgSupported) {</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a8a037114fa4c5a7c78960e66ae1c0b7c">ecgFeatureReady</a>(deviceId);</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  }</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keywordflow">if</span> (pmdFeature.accSupported) {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a85047da74eb267aff2bed4af4dd4b521">accelerometerFeatureReady</a>(deviceId);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  }</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <span class="keywordflow">if</span> (pmdFeature.ppgSupported) {</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#aaa4a548d3f70132cf6ce25ef095c1388">ppgFeatureReady</a>(deviceId);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  }</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="keywordflow">if</span> (pmdFeature.ppiSupported) {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a4a24d6676e3d29a8351f1c81ca40643d">ppiFeatureReady</a>(deviceId);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">if</span> (pmdFeature.bioZSupported) {</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a00b1f45a9e85f83cf3481280f751afa6">biozFeatureReady</a>(deviceId);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  }</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  }</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  })).toFlowable();</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (uuid.equals(BleDisClient.DIS_SERVICE)) {</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  BleDisClient client = (BleDisClient) session.fetchClient(BleDisClient.DIS_SERVICE);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordflow">return</span> client.observeDisInfo(<span class="keyword">true</span>).observeOn(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a>).doOnNext(<span class="keyword">new</span> Consumer<Pair<UUID, String>>() {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  @Override</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Pair<UUID, String> pair) {</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a954feeb8cd34bdc09b695b4932c163cb">disInformationReceived</a>(deviceId, pair.first, pair.second);</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  }</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  }</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  });</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (uuid.equals(BlePsFtpUtils.RFC77_PFTP_SERVICE)) {</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  BlePsFtpClient client = (BlePsFtpClient) session.fetchClient(BlePsFtpUtils.RFC77_PFTP_SERVICE);</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keywordflow">return</span> client.waitPsFtpClientReady(<span class="keyword">true</span>).observeOn(<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">scheduler</a>).doOnComplete(<span class="keyword">new</span> Action() {</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  @Override</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span> &&</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  (session.getPolarDeviceType().equals(<span class="stringliteral">"OH1"</span>) || session.getPolarDeviceType().equals(<span class="stringliteral">"H10"</span>))) {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#adc5827b5a6ea10366996a06ebe4351cc">polarFtpFeatureReady</a>(deviceId);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  }).toFlowable();</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  }</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordflow">return</span> Flowable.empty();</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  }).subscribe(</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <span class="keyword">new</span> Consumer<Object>() {</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  @Override</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Object o) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  }</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  },</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="keyword">new</span> Consumer<Throwable>() {</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  @Override</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> accept(Throwable throwable) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a">logError</a>(throwable.getMessage());</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  }</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  },</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keyword">new</span> Action() {</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  @Override</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="keyword">public</span> <span class="keywordtype">void</span> run() <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a6170765b10eb5ecc9b6b9584b350fb1a">log</a>(<span class="stringliteral">"complete"</span>);</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  }</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  });</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  }</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div><div class="line"><a name="l01033"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9"> 1033</a></span>  <span class="keyword">protected</span> Exception <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">handleError</a>(Throwable throwable) {</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="keywordflow">if</span> (throwable instanceof BleDisconnected) {</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceDisconnected.html">PolarDeviceDisconnected</a>();</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> Exception(<span class="stringliteral">"Unknown Error: "</span> + throwable.getLocalizedMessage());</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  }</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  }</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  @Override</div><div class="line"><a name="l01042"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a078b82465b26d7ba58637f2e58a2e4b7"> 1042</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a078b82465b26d7ba58637f2e58a2e4b7">stateChanged</a>(BleDeviceSession session, BleDeviceSession.DeviceSessionState sessionState) {</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo.html">PolarDeviceInfo</a> info = <span class="keyword">new</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo.html">PolarDeviceInfo</a>(</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  session.getPolarDeviceId().length() != 0 ?</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  session.getPolarDeviceId() : session.getAddress(),</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  session.getAddress(),</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  session.getRssi(), session.getName(), <span class="keyword">true</span>);</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <span class="keywordflow">switch</span> (sessionState) {</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="keywordflow">case</span> SESSION_OPEN:</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#afa130881ddecbb8135bbf78dc45723ea">deviceConnected</a>(info);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  }</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4a711dc98144cb480f5b4e4ef3c2af5b">setupDevice</a>(session);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">case</span> SESSION_CLOSED:</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keywordflow">if</span> (session.getPreviousState() == SESSION_OPEN ||</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  session.getPreviousState() == BleDeviceSession.DeviceSessionState.SESSION_CLOSING) {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a74443790ce843fc101418cda1bc34b96">deviceDisconnected</a>(info);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  }</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">case</span> SESSION_OPENING:</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a209adefc35b35bdcc47d4a3d18d3c612">deviceConnecting</a>(info);</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  }</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  @Override</div><div class="line"><a name="l01072"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ab341f795ecc7020448e0be59b044d38d"> 1072</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ab341f795ecc7020448e0be59b044d38d">stateChanged</a>(Boolean power) {</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">callback</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#aa2327fad0fd836f18a3f26a6355a8d68">blePowerStateChanged</a>(power);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  }</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  }</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keyword">interface </span>FetchRecursiveCondition {</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="keywordtype">boolean</span> include(String entry);</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  }</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div><div class="line"><a name="l01082"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aae9728d213d59602f3c74b447c83c136"> 1082</a></span>  <span class="keyword">protected</span> Flowable<String> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aae9728d213d59602f3c74b447c83c136">fetchRecursively</a>(<span class="keyword">final</span> BlePsFtpClient client, <span class="keyword">final</span> String path, <span class="keyword">final</span> FetchRecursiveCondition condition) {</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  protocol.PftpRequest.PbPFtpOperation.Builder builder = protocol.PftpRequest.PbPFtpOperation.newBuilder();</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  builder.setCommand(PftpRequest.PbPFtpOperation.Command.GET);</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  builder.setPath(path);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="keywordflow">return</span> client.request(builder.build().toByteArray()).toFlowable().flatMap(<span class="keyword">new</span> Function<ByteArrayOutputStream, Publisher<String>>() {</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  @Override</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="keyword">public</span> Publisher<String> apply(ByteArrayOutputStream byteArrayOutputStream) <span class="keywordflow">throws</span> Exception {</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  PftpResponse.PbPFtpDirectory dir = PftpResponse.PbPFtpDirectory.parseFrom(byteArrayOutputStream.toByteArray());</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  Set<String> entrys = <span class="keyword">new</span> HashSet<>();</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < dir.getEntriesCount(); ++i) {</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  PftpResponse.PbPFtpEntry entry = dir.getEntries(i);</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keywordflow">if</span> (condition.include(entry.getName())) {</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  BleUtils.validate(entrys.add(path + entry.getName()), <span class="stringliteral">"duplicate entry"</span>);</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  }</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  }</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="keywordflow">if</span> (entrys.size() != 0) {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="keywordflow">return</span> Flowable.fromIterable(entrys).flatMap(<span class="keyword">new</span> Function<String, Publisher<String>>() {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  @Override</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <span class="keyword">public</span> Publisher<String> apply(String s) {</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keywordflow">if</span> (s.endsWith(<span class="stringliteral">"/"</span>)) {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <span class="keywordflow">return</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aae9728d213d59602f3c74b447c83c136">fetchRecursively</a>(client, s, condition);</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">return</span> Flowable.just(s);</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  }</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  });</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  }</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keywordflow">return</span> Flowable.empty();</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  }</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  });</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  }</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> </div><div class="line"><a name="l01114"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a6170765b10eb5ecc9b6b9584b350fb1a"> 1114</a></span>  <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a6170765b10eb5ecc9b6b9584b350fb1a">log</a>(<span class="keyword">final</span> String message) {</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">logger</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">logger</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger.html#ae55d724f7a34d52fab2f781993d4efcc">message</a>(<span class="stringliteral">""</span> + message);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div><div class="line"><a name="l01120"></a><span class="lineno"><a class="line" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a"> 1120</a></span>  <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a">logError</a>(<span class="keyword">final</span> String message) {</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keywordflow">if</span> (<a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">logger</a> != <span class="keyword">null</span>) {</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <a class="code" href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">logger</a>.<a class="code" href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger.html#ae55d724f7a34d52fab2f781993d4efcc">message</a>(<span class="stringliteral">"Error: "</span> + message);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  }</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  }</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> }</div><div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html">polar.com.sdk.api.model.PolarExerciseEntry</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarExerciseEntry_8java_source.html#l00009">PolarExerciseEntry.java:9</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a6170765b10eb5ecc9b6b9584b350fb1a"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a6170765b10eb5ecc9b6b9584b350fb1a">polar.com.sdk.impl.BDBleApiImpl.log</a></div><div class="ttdeci">void log(final String message)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l01114">BDBleApiImpl.java:1114</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_adc5827b5a6ea10366996a06ebe4351cc"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#adc5827b5a6ea10366996a06ebe4351cc">polar.com.sdk.api.PolarBleApiCallbackProvider.polarFtpFeatureReady</a></div><div class="ttdeci">void polarFtpFeatureReady(@NonNull final String identifier)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a463274cf31be9ae204533e17818c7f16"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a463274cf31be9ae204533e17818c7f16">polar.com.sdk.impl.BDBleApiImpl.TAG</a></div><div class="ttdeci">static final String TAG</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00097">BDBleApiImpl.java:97</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a78097d3ec0e9008595d905ab2302d404"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a78097d3ec0e9008595d905ab2302d404">polar.com.sdk.api.PolarBleApiCallbackProvider.batteryLevelReceived</a></div><div class="ttdeci">void batteryLevelReceived(@NonNull final String identifier, final int level)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ad534524e529063b76364ac1e1acb5858"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ad534524e529063b76364ac1e1acb5858">polar.com.sdk.impl.BDBleApiImpl.ANDROID_VERSION_O</a></div><div class="ttdeci">static final int ANDROID_VERSION_O</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00103">BDBleApiImpl.java:103</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a573753301ab6af12467792bc87fc19a2"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a573753301ab6af12467792bc87fc19a2">polar.com.sdk.impl.BDBleApiImpl.fetchExercise</a></div><div class="ttdeci">Single< PolarExerciseData > fetchExercise(String identifier, PolarExerciseEntry entry)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00527">BDBleApiImpl.java:527</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a1218a5c9c6a590b55f1d00c9a76d4a90"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a1218a5c9c6a590b55f1d00c9a76d4a90">polar.com.sdk.impl.BDBleApiImpl.foregroundEntered</a></div><div class="ttdeci">void foregroundEntered()</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00280">BDBleApiImpl.java:280</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a14a4d99e3a14c3e8dd2a9695e25ec9a8"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a14a4d99e3a14c3e8dd2a9695e25ec9a8">polar.com.sdk.impl.BDBleApiImpl.startRecording</a></div><div class="ttdeci">Completable startRecording(String identifier, String exerciseId, RecordingInterval interval, SampleType type)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00402">BDBleApiImpl.java:402</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a59c11713e724352b7a8356089185fbda"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a59c11713e724352b7a8356089185fbda">polar.com.sdk.impl.BDBleApiImpl.autoConnectToDevice</a></div><div class="ttdeci">Completable autoConnectToDevice(final int rssiLimit, final String service, final int timeout, final TimeUnit unit, final String polarDeviceType)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00285">BDBleApiImpl.java:285</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry_html_a6868bc6edf522eeacf300a790a312464"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseEntry.html#a6868bc6edf522eeacf300a790a312464">polar.com.sdk.api.model.PolarExerciseEntry.path</a></div><div class="ttdeci">String path</div><div class="ttdef"><b>Definition:</b> <a href="PolarExerciseEntry_8java_source.html#l00013">PolarExerciseEntry.java:13</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a2c36d4ab6fbdc804df500d2a1d1c0e5d"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a2c36d4ab6fbdc804df500d2a1d1c0e5d">polar.com.sdk.impl.BDBleApiImpl.setAutomaticReconnection</a></div><div class="ttdeci">void setAutomaticReconnection(boolean disable)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00213">BDBleApiImpl.java:213</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a8bdd3c4c4bc2c98a5ff9ac7cd1385948"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a8bdd3c4c4bc2c98a5ff9ac7cd1385948">polar.com.sdk.impl.BDBleApiImpl.requestAccSettings</a></div><div class="ttdeci">Single< PolarSensorSetting > requestAccSettings(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00240">BDBleApiImpl.java:240</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_afa130881ddecbb8135bbf78dc45723ea"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#afa130881ddecbb8135bbf78dc45723ea">polar.com.sdk.api.PolarBleApiCallbackProvider.deviceConnected</a></div><div class="ttdeci">void deviceConnected(@NonNull final PolarDeviceInfo polarDeviceInfo)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a31b079f8337863ff89f6f1d6dbce65b9"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a31b079f8337863ff89f6f1d6dbce65b9">polar.com.sdk.impl.BDBleApiImpl.handleError</a></div><div class="ttdeci">Exception handleError(Throwable throwable)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l01033">BDBleApiImpl.java:1033</a></div></div>
<div class="ttc" id="namespacepolar_1_1com_1_1sdk_1_1api_html"><div class="ttname"><a href="namespacepolar_1_1com_1_1sdk_1_1api.html">polar.com.sdk.api</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a5d33c2910d8f2583ee44962c4bcac2bf"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5d33c2910d8f2583ee44962c4bcac2bf">polar.com.sdk.impl.BDBleApiImpl.startOhrPPIStreaming</a></div><div class="ttdeci">Flowable< PolarOhrPPIData > startOhrPPIStreaming(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00758">BDBleApiImpl.java:758</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_aaa3aa5c3fa46b8e42c01e7aac9c8dc64"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#aaa3aa5c3fa46b8e42c01e7aac9c8dc64">polar.com.sdk.api.PolarBleApiCallbackProvider.hrFeatureReady</a></div><div class="ttdeci">void hrFeatureReady(@NonNull final String identifier)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarEcgData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarEcgData.html">polar.com.sdk.api.model.PolarEcgData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarEcgData_8java_source.html#l00010">PolarEcgData.java:10</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html">polar.com.sdk.impl.BDBleApiImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00094">BDBleApiImpl.java:94</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html">polar.com.sdk.api.PolarBleApiCallbackProvider</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApiCallbackProvider_8java_source.html#l00012">PolarBleApiCallbackProvider.java:12</a></div></div>
<div class="ttc" id="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1RecordingInterval_html"><div class="ttname"><a href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1RecordingInterval.html">polar.com.sdk.api.PolarBleApi.RecordingInterval</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00048">PolarBleApi.java:48</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_aed55c3ce811dbb765d761f3b90b8ff96"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed55c3ce811dbb765d761f3b90b8ff96">polar.com.sdk.impl.BDBleApiImpl.startListenForPolarHrBroadcasts</a></div><div class="ttdeci">Flowable< PolarHrBroadcastData > startListenForPolarHrBroadcasts(final Set< String > deviceIds)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00638">BDBleApiImpl.java:638</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ac08998b625def30d377e05abb8a80f8d"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08998b625def30d377e05abb8a80f8d">polar.com.sdk.impl.BDBleApiImpl.listener</a></div><div class="ttdeci">BleDeviceListener listener</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00098">BDBleApiImpl.java:98</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceNotFound_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceNotFound.html">polar.com.sdk.api.errors.PolarDeviceNotFound</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarDeviceNotFound_8java_source.html#l00007">PolarDeviceNotFound.java:7</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a436696ba043d2a5d77d5fe33e2ab91cf"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a436696ba043d2a5d77d5fe33e2ab91cf">polar.com.sdk.impl.BDBleApiImpl.searchForDevice</a></div><div class="ttdeci">Flowable< PolarDeviceInfo > searchForDevice()</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00624">BDBleApiImpl.java:624</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_html_a6b3b45f899b318df179c9779f9faaf48"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a6b3b45f899b318df179c9779f9faaf48">polar.com.sdk.api.PolarBleApi.features</a></div><div class="ttdeci">int features</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00096">PolarBleApi.java:96</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ae1296701871fe33af919ca9423cadd7a"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae1296701871fe33af919ca9423cadd7a">polar.com.sdk.impl.BDBleApiImpl.shutDown</a></div><div class="ttdeci">void shutDown()</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00169">BDBleApiImpl.java:169</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_af7371642d2f1d673a4d20fd05be9e983"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af7371642d2f1d673a4d20fd05be9e983">polar.com.sdk.impl.BDBleApiImpl.querySettings</a></div><div class="ttdeci">Single< PolarSensorSetting > querySettings(final String identifier, final BlePMDClient.PmdMeasurementType type)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00259">BDBleApiImpl.java:259</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData_1_1PolarAccelerometerSample_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData_1_1PolarAccelerometerSample.html">polar.com.sdk.api.model.PolarAccelerometerData.PolarAccelerometerSample</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarAccelerometerData_8java_source.html#l00014">PolarAccelerometerData.java:14</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_html_a56b81b1ebb53df94c5e95ec5f74e6a2b"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a56b81b1ebb53df94c5e95ec5f74e6a2b">polar.com.sdk.api.PolarBleApi.FEATURE_POLAR_SENSOR_STREAMING</a></div><div class="ttdeci">static final int FEATURE_POLAR_SENSOR_STREAMING</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00086">PolarBleApi.java:86</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger_html_ae55d724f7a34d52fab2f781993d4efcc"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger.html#ae55d724f7a34d52fab2f781993d4efcc">polar.com.sdk.api.PolarBleApi.PolarBleApiLogger.message</a></div><div class="ttdeci">void message(final String str)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrData.html">polar.com.sdk.api.model.PolarHrData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarHrData_8java_source.html#l00010">PolarHrData.java:10</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_afc92150da6c98b93a9f86439a0d33e3d"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#afc92150da6c98b93a9f86439a0d33e3d">polar.com.sdk.impl.BDBleApiImpl.requestBiozSettings</a></div><div class="ttdeci">Single< PolarSensorSetting > requestBiozSettings(final String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00255">BDBleApiImpl.java:255</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a4f3fceac06da15b3c1a39dc5bb7b80f1"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4f3fceac06da15b3c1a39dc5bb7b80f1">polar.com.sdk.impl.BDBleApiImpl.cleanup</a></div><div class="ttdeci">void cleanup()</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00174">BDBleApiImpl.java:174</a></div></div>
<div class="ttc" id="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1SampleType_html"><div class="ttname"><a href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1SampleType.html">polar.com.sdk.api.PolarBleApi.SampleType</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00066">PolarBleApi.java:66</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_abc85de0575973be85cc572460952b5d3"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abc85de0575973be85cc572460952b5d3">polar.com.sdk.impl.BDBleApiImpl.requestEcgSettings</a></div><div class="ttdeci">Single< PolarSensorSetting > requestEcgSettings(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00245">BDBleApiImpl.java:245</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a647db72c6f3a1cbd7587cac769cf0e2c"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a647db72c6f3a1cbd7587cac769cf0e2c">polar.com.sdk.impl.BDBleApiImpl.sessionServiceReady</a></div><div class="ttdeci">BleDeviceSession sessionServiceReady(final String identifier, UUID service)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00847">BDBleApiImpl.java:847</a></div></div>
<div class="ttc" id="namespacepolar_1_1com_1_1sdk_1_1api_1_1model_html"><div class="ttname"><a href="namespacepolar_1_1com_1_1sdk_1_1api_1_1model.html">polar.com.sdk.api.model</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarAccelerometerData_8java_source.html#l00002">PolarAccelerometerData.java:2</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a74443790ce843fc101418cda1bc34b96"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a74443790ce843fc101418cda1bc34b96">polar.com.sdk.api.PolarBleApiCallbackProvider.deviceDisconnected</a></div><div class="ttdeci">void deviceDisconnected(@NonNull final PolarDeviceInfo polarDeviceInfo)</div></div>
<div class="ttc" id="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1RecordingInterval_html_ab8a6b3e4c40c2070da5e91b8e33dc240"><div class="ttname"><a href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1RecordingInterval.html#ab8a6b3e4c40c2070da5e91b8e33dc240">polar.com.sdk.api.PolarBleApi.RecordingInterval.getValue</a></div><div class="ttdeci">int getValue()</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00058">PolarBleApi.java:58</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData.html">polar.com.sdk.api.model.PolarOhrPPGData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarOhrPPGData_8java_source.html#l00010">PolarOhrPPGData.java:10</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_html_a6a13b5d8c944d7321e17662b60b97954"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a6a13b5d8c944d7321e17662b60b97954">polar.com.sdk.api.PolarBleApi.FEATURE_BATTERY_INFO</a></div><div class="ttdeci">static final int FEATURE_BATTERY_INFO</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00082">PolarBleApi.java:82</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrBroadcastData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarHrBroadcastData.html">polar.com.sdk.api.model.PolarHrBroadcastData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarHrBroadcastData_8java_source.html#l00007">PolarHrBroadcastData.java:7</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarAccelerometerData.html">polar.com.sdk.api.model.PolarAccelerometerData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarAccelerometerData_8java_source.html#l00009">PolarAccelerometerData.java:9</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a829ace600b46dbcb598683a488f821b9"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a829ace600b46dbcb598683a488f821b9">polar.com.sdk.impl.BDBleApiImpl.fetchSession</a></div><div class="ttdeci">BleDeviceSession fetchSession(final String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00820">BDBleApiImpl.java:820</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ab341f795ecc7020448e0be59b044d38d"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ab341f795ecc7020448e0be59b044d38d">polar.com.sdk.impl.BDBleApiImpl.stateChanged</a></div><div class="ttdeci">void stateChanged(Boolean power)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l01072">BDBleApiImpl.java:1072</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a4a24d6676e3d29a8351f1c81ca40643d"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a4a24d6676e3d29a8351f1c81ca40643d">polar.com.sdk.api.PolarBleApiCallbackProvider.ppiFeatureReady</a></div><div class="ttdeci">void ppiFeatureReady(@NonNull final String identifier)</div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_aaa4a548d3f70132cf6ce25ef095c1388"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#aaa4a548d3f70132cf6ce25ef095c1388">polar.com.sdk.api.PolarBleApiCallbackProvider.ppgFeatureReady</a></div><div class="ttdeci">void ppgFeatureReady(@NonNull final String identifier)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_af300d862a83d6f973d78081cde32ab99"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#af300d862a83d6f973d78081cde32ab99">polar.com.sdk.impl.BDBleApiImpl.isFeatureReady</a></div><div class="ttdeci">boolean isFeatureReady(final String deviceId, int feature)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00188">BDBleApiImpl.java:188</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a69edf9c785075d164e3c248192446f15"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a69edf9c785075d164e3c248192446f15">polar.com.sdk.impl.BDBleApiImpl.requestRecordingStatus</a></div><div class="ttdeci">Single< Pair< Boolean, String > > requestRecordingStatus(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00446">BDBleApiImpl.java:446</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a3b89e047d30f1aea90be69a46cdd58d9"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a3b89e047d30f1aea90be69a46cdd58d9">polar.com.sdk.impl.BDBleApiImpl.connectSubscriptions</a></div><div class="ttdeci">Map< String, Disposable > connectSubscriptions</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00099">BDBleApiImpl.java:99</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ae0186ce1014ad60295930835b3620a22"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae0186ce1014ad60295930835b3620a22">polar.com.sdk.impl.BDBleApiImpl.sessionByAddress</a></div><div class="ttdeci">BleDeviceSession sessionByAddress(final String address)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00829">BDBleApiImpl.java:829</a></div></div>
<div class="ttc" id="namespacepolar_html"><div class="ttname"><a href="namespacepolar.html">polar</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_aa2327fad0fd836f18a3f26a6355a8d68"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#aa2327fad0fd836f18a3f26a6355a8d68">polar.com.sdk.api.PolarBleApiCallbackProvider.blePowerStateChanged</a></div><div class="ttdeci">void blePowerStateChanged(final boolean powered)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a34b010c3844f564a377bfb430170e4a9"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a34b010c3844f564a377bfb430170e4a9">polar.com.sdk.impl.BDBleApiImpl.startAccStreaming</a></div><div class="ttdeci">Flowable< PolarAccelerometerData > startAccStreaming(String identifier, PolarSensorSetting setting)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00694">BDBleApiImpl.java:694</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ae46e26479d9e1d5c57605c97343fd0f4"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae46e26479d9e1d5c57605c97343fd0f4">polar.com.sdk.impl.BDBleApiImpl.scheduler</a></div><div class="ttdeci">Scheduler scheduler</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00100">BDBleApiImpl.java:100</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a49685140c9028f1d6f140977b03ab4ca"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a49685140c9028f1d6f140977b03ab4ca">polar.com.sdk.impl.BDBleApiImpl.BDBleApiImpl</a></div><div class="ttdeci">BDBleApiImpl(final Context context, int features)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00112">BDBleApiImpl.java:112</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_aa65443950ef837c869eb6199a643487c"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aa65443950ef837c869eb6199a643487c">polar.com.sdk.impl.BDBleApiImpl.requestPpgSettings</a></div><div class="ttdeci">Single< PolarSensorSetting > requestPpgSettings(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00250">BDBleApiImpl.java:250</a></div></div>
<div class="ttc" id="namespacepolar_1_1com_html"><div class="ttname"><a href="namespacepolar_1_1com.html">polar.com</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_html_a834709ca3f418d44d2588faf55c80ea3"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#a834709ca3f418d44d2588faf55c80ea3">polar.com.sdk.api.PolarBleApi.FEATURE_HR</a></div><div class="ttdeci">static final int FEATURE_HR</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00074">PolarBleApi.java:74</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarOperationNotSupported.html">polar.com.sdk.api.errors.PolarOperationNotSupported</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarOperationNotSupported_8java_source.html#l00007">PolarOperationNotSupported.java:7</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a568cbfd6e9548d54fff470a938cbf000"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a568cbfd6e9548d54fff470a938cbf000">polar.com.sdk.impl.BDBleApiImpl.sessionPmdClientReady</a></div><div class="ttdeci">BleDeviceSession sessionPmdClientReady(final String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00862">BDBleApiImpl.java:862</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarInvalidArgument.html">polar.com.sdk.api.errors.PolarInvalidArgument</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarInvalidArgument_8java_source.html#l00003">PolarInvalidArgument.java:3</a></div></div>
<div class="ttc" id="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors_html"><div class="ttname"><a href="namespacepolar_1_1com_1_1sdk_1_1api_1_1errors.html">polar.com.sdk.api.errors</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarDeviceDisconnected_8java_source.html#l00002">PolarDeviceDisconnected.java:2</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_aae9728d213d59602f3c74b447c83c136"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aae9728d213d59602f3c74b447c83c136">polar.com.sdk.impl.BDBleApiImpl.fetchRecursively</a></div><div class="ttdeci">Flowable< String > fetchRecursively(final BlePsFtpClient client, final String path, final FetchRecursiveCondition condition)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l01082">BDBleApiImpl.java:1082</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a4eb11a28590fe41d76fdb88c28894ce2"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4eb11a28590fe41d76fdb88c28894ce2">polar.com.sdk.impl.BDBleApiImpl.stopRecording</a></div><div class="ttdeci">Completable stopRecording(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00427">BDBleApiImpl.java:427</a></div></div>
<div class="ttc" id="namespacepolar_1_1com_1_1sdk_html"><div class="ttname"><a href="namespacepolar_1_1com_1_1sdk.html">polar.com.sdk</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a00b1f45a9e85f83cf3481280f751afa6"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a00b1f45a9e85f83cf3481280f751afa6">polar.com.sdk.api.PolarBleApiCallbackProvider.biozFeatureReady</a></div><div class="ttdeci">void biozFeatureReady(@NonNull final String identifier)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ae49061dfea23ddf3c13917f9c757d1f2"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae49061dfea23ddf3c13917f9c757d1f2">polar.com.sdk.impl.BDBleApiImpl.callback</a></div><div class="ttdeci">PolarBleApiCallbackProvider callback</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00101">BDBleApiImpl.java:101</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_html_aff5649c4b21e8bba4c0463905c1168e7"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#aff5649c4b21e8bba4c0463905c1168e7">polar.com.sdk.api.PolarBleApi.FEATURE_DEVICE_INFO</a></div><div class="ttdeci">static final int FEATURE_DEVICE_INFO</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00078">PolarBleApi.java:78</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a85047da74eb267aff2bed4af4dd4b521"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a85047da74eb267aff2bed4af4dd4b521">polar.com.sdk.api.PolarBleApiCallbackProvider.accelerometerFeatureReady</a></div><div class="ttdeci">void accelerometerFeatureReady(@NonNull final String identifier)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a4a711dc98144cb480f5b4e4ef3c2af5b"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4a711dc98144cb480f5b4e4ef3c2af5b">polar.com.sdk.impl.BDBleApiImpl.setupDevice</a></div><div class="ttdeci">void setupDevice(final BleDeviceSession session)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00907">BDBleApiImpl.java:907</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData_1_1PolarOhrPPGSample_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPGData_1_1PolarOhrPPGSample.html">polar.com.sdk.api.model.PolarOhrPPGData.PolarOhrPPGSample</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarOhrPPGData_8java_source.html#l00015">PolarOhrPPGData.java:15</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a92ce7a49c8c5dda100c4095d96c2500d"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a92ce7a49c8c5dda100c4095d96c2500d">polar.com.sdk.impl.BDBleApiImpl.connectToDevice</a></div><div class="ttdeci">void connectToDevice(final String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00344">BDBleApiImpl.java:344</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a9863d8f3a3756b95cf030e821af4c21c"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a9863d8f3a3756b95cf030e821af4c21c">polar.com.sdk.impl.BDBleApiImpl.startBiozStreaming</a></div><div class="ttdeci">Flowable< PolarBiozData > startBiozStreaming(final String identifier, PolarSensorSetting setting)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00794">BDBleApiImpl.java:794</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_aa7b05d48c5f57c4d66f1e1c182883739"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aa7b05d48c5f57c4d66f1e1c182883739">polar.com.sdk.impl.BDBleApiImpl.listExercises</a></div><div class="ttdeci">Flowable< PolarExerciseEntry > listExercises(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00471">BDBleApiImpl.java:471</a></div></div>
<div class="ttc" id="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1SampleType_html_a03e6d65a0a2c5e98ab9f79a1237fc328"><div class="ttname"><a href="enumpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1SampleType.html#a03e6d65a0a2c5e98ab9f79a1237fc328">polar.com.sdk.api.PolarBleApi.SampleType.HR</a></div><div class="ttdeci">HR</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00067">PolarBleApi.java:67</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ab7e325a9ea06accea9746866d0118f1b"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ab7e325a9ea06accea9746866d0118f1b">polar.com.sdk.impl.BDBleApiImpl.autoConnectToDevice</a></div><div class="ttdeci">Completable autoConnectToDevice(final int rssiLimit, final String service, final String polarDeviceType)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00339">BDBleApiImpl.java:339</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarNotificationNotEnabled_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarNotificationNotEnabled.html">polar.com.sdk.api.errors.PolarNotificationNotEnabled</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarNotificationNotEnabled_8java_source.html#l00007">PolarNotificationNotEnabled.java:7</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a2ca3ebc9ca23822d2aca71a2002c1b73"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a2ca3ebc9ca23822d2aca71a2002c1b73">polar.com.sdk.impl.BDBleApiImpl.sessionByDeviceId</a></div><div class="ttdeci">BleDeviceSession sessionByDeviceId(final String deviceId)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00838">BDBleApiImpl.java:838</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ac08c2703034dc62317eaa6c47ed2284c"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac08c2703034dc62317eaa6c47ed2284c">polar.com.sdk.impl.BDBleApiImpl.setPolarFilter</a></div><div class="ttdeci">void setPolarFilter(boolean enable)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00179">BDBleApiImpl.java:179</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a74af3feec0f83aa5acb8846dc2a1d1d6"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a74af3feec0f83aa5acb8846dc2a1d1d6">polar.com.sdk.impl.BDBleApiImpl.setApiCallback</a></div><div class="ttdeci">void setApiCallback(PolarBleApiCallbackProvider callback)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00202">BDBleApiImpl.java:202</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_html_ae9b1c6052d3c686487e906ae463a2ff7"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html#ae9b1c6052d3c686487e906ae463a2ff7">polar.com.sdk.api.PolarBleApi.FEATURE_POLAR_FILE_TRANSFER</a></div><div class="ttdeci">static final int FEATURE_POLAR_FILE_TRANSFER</div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00090">PolarBleApi.java:90</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ac645b2eedd096132b613ed5c0b6ecc2f"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ac645b2eedd096132b613ed5c0b6ecc2f">polar.com.sdk.impl.BDBleApiImpl.removeExercise</a></div><div class="ttdeci">Completable removeExercise(String identifier, PolarExerciseEntry entry)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00575">BDBleApiImpl.java:575</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a954feeb8cd34bdc09b695b4932c163cb"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a954feeb8cd34bdc09b695b4932c163cb">polar.com.sdk.api.PolarBleApiCallbackProvider.disInformationReceived</a></div><div class="ttdeci">void disInformationReceived(@NonNull final String identifier, @NonNull UUID uuid, @NonNull final String value)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_aea179b27f1dc4b7ed1ad3e2cb971a7a8"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aea179b27f1dc4b7ed1ad3e2cb971a7a8">polar.com.sdk.impl.BDBleApiImpl.enableAndroidScanFilter</a></div><div class="ttdeci">void enableAndroidScanFilter()</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00157">BDBleApiImpl.java:157</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a078b82465b26d7ba58637f2e58a2e4b7"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a078b82465b26d7ba58637f2e58a2e4b7">polar.com.sdk.impl.BDBleApiImpl.stateChanged</a></div><div class="ttdeci">void stateChanged(BleDeviceSession session, BleDeviceSession.DeviceSessionState sessionState)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l01042">BDBleApiImpl.java:1042</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a209adefc35b35bdcc47d4a3d18d3c612"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a209adefc35b35bdcc47d4a3d18d3c612">polar.com.sdk.api.PolarBleApiCallbackProvider.deviceConnecting</a></div><div class="ttdeci">void deviceConnecting(@NonNull final PolarDeviceInfo polarDeviceInfo)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_abb45392febb6f61abfe49ef9482f07bb"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#abb45392febb6f61abfe49ef9482f07bb">polar.com.sdk.impl.BDBleApiImpl.logger</a></div><div class="ttdeci">PolarBleApiLogger logger</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00102">BDBleApiImpl.java:102</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a5e80e959cbc19490c9a1963e6914a092"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a5e80e959cbc19490c9a1963e6914a092">polar.com.sdk.impl.BDBleApiImpl.stopPmdStreaming</a></div><div class="ttdeci">void stopPmdStreaming(BleDeviceSession session, BlePMDClient client, BlePMDClient.PmdMeasurementType type)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00886">BDBleApiImpl.java:886</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a24707fd78988e8b9f57d47a6d24cc7e3"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a24707fd78988e8b9f57d47a6d24cc7e3">polar.com.sdk.impl.BDBleApiImpl.backgroundEntered</a></div><div class="ttdeci">void backgroundEntered()</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00275">BDBleApiImpl.java:275</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ad239df6d03a59f3a85506346931b52a1"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ad239df6d03a59f3a85506346931b52a1">polar.com.sdk.impl.BDBleApiImpl.setApiLogger</a></div><div class="ttdeci">void setApiLogger(@Nullable PolarBleApiLogger logger)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00208">BDBleApiImpl.java:208</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a1163224a654db6b5917ad81fc3aa2d23"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a1163224a654db6b5917ad81fc3aa2d23">polar.com.sdk.impl.BDBleApiImpl.startOhrPPGStreaming</a></div><div class="ttdeci">Flowable< PolarOhrPPGData > startOhrPPGStreaming(String identifier, PolarSensorSetting setting)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00726">BDBleApiImpl.java:726</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a7700f8c34663e4f37e208c0b5c779582"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a7700f8c34663e4f37e208c0b5c779582">polar.com.sdk.impl.BDBleApiImpl.startEcgStreaming</a></div><div class="ttdeci">Flowable< PolarEcgData > startEcgStreaming(String identifier, PolarSensorSetting setting)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00662">BDBleApiImpl.java:662</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a486c58d7f53d93646e73350b18ca7848"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a486c58d7f53d93646e73350b18ca7848">polar.com.sdk.api.PolarBleApiCallbackProvider.hrNotificationReceived</a></div><div class="ttdeci">void hrNotificationReceived(@NonNull final String identifier, @NonNull final PolarHrData data)</div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData.html">polar.com.sdk.api.model.PolarOhrPPIData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarOhrPPIData_8java_source.html#l00010">PolarOhrPPIData.java:10</a></div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider_html_a8a037114fa4c5a7c78960e66ae1c0b7c"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApiCallbackProvider.html#a8a037114fa4c5a7c78960e66ae1c0b7c">polar.com.sdk.api.PolarBleApiCallbackProvider.ecgFeatureReady</a></div><div class="ttdeci">void ecgFeatureReady(@NonNull final String identifier)</div></div>
<div class="ttc" id="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger_html"><div class="ttname"><a href="interfacepolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_1_1PolarBleApiLogger.html">polar.com.sdk.api.PolarBleApi.PolarBleApiLogger</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00037">PolarBleApi.java:37</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceDisconnected_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarDeviceDisconnected.html">polar.com.sdk.api.errors.PolarDeviceDisconnected</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarDeviceDisconnected_8java_source.html#l00007">PolarDeviceDisconnected.java:7</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting_html_a8861d81f7ca995e36dd8b1cddadb78c9"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html#a8861d81f7ca995e36dd8b1cddadb78c9">polar.com.sdk.api.model.PolarSensorSetting.map2PmdSettings</a></div><div class="ttdeci">BlePMDClient.PmdSetting map2PmdSettings()</div><div class="ttdef"><b>Definition:</b> <a href="PolarSensorSetting_8java_source.html#l00062">PolarSensorSetting.java:62</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarExerciseData.html">polar.com.sdk.api.model.PolarExerciseData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarExerciseData_8java_source.html#l00009">PolarExerciseData.java:9</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarSensorSetting.html">polar.com.sdk.api.model.PolarSensorSetting</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarSensorSetting_8java_source.html#l00014">PolarSensorSetting.java:14</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarServiceNotAvailable_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1errors_1_1PolarServiceNotAvailable.html">polar.com.sdk.api.errors.PolarServiceNotAvailable</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarServiceNotAvailable_8java_source.html#l00007">PolarServiceNotAvailable.java:7</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a95d10bce5ba70d0b499f610d761aeabb"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a95d10bce5ba70d0b499f610d761aeabb">polar.com.sdk.impl.BDBleApiImpl.setLocalTime</a></div><div class="ttdeci">Completable setLocalTime(String identifier, Calendar cal)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00218">BDBleApiImpl.java:218</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData_1_1PolarOhrPPISample_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarOhrPPIData_1_1PolarOhrPPISample.html">polar.com.sdk.api.model.PolarOhrPPIData.PolarOhrPPISample</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarOhrPPIData_8java_source.html#l00012">PolarOhrPPIData.java:12</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_aed83b0c4e2180511a242f1ccedd3d03c"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#aed83b0c4e2180511a242f1ccedd3d03c">polar.com.sdk.impl.BDBleApiImpl.sessionPsFtpClientReady</a></div><div class="ttdeci">BleDeviceSession sessionPsFtpClientReady(final String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00875">BDBleApiImpl.java:875</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_ae897ee6968f1b84641861cda05859a6a"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#ae897ee6968f1b84641861cda05859a6a">polar.com.sdk.impl.BDBleApiImpl.logError</a></div><div class="ttdeci">void logError(final String message)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l01120">BDBleApiImpl.java:1120</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarBiozData_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarBiozData.html">polar.com.sdk.api.model.PolarBiozData</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarBiozData_8java_source.html#l00009">PolarBiozData.java:9</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1model_1_1PolarDeviceInfo.html">polar.com.sdk.api.model.PolarDeviceInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarDeviceInfo_8java_source.html#l00007">PolarDeviceInfo.java:7</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi_html"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1api_1_1PolarBleApi.html">polar.com.sdk.api.PolarBleApi</a></div><div class="ttdef"><b>Definition:</b> <a href="PolarBleApi_8java_source.html#l00032">PolarBleApi.java:32</a></div></div>
<div class="ttc" id="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl_html_a4b83c6b87fbac8b7fae12f677aab7ff9"><div class="ttname"><a href="classpolar_1_1com_1_1sdk_1_1impl_1_1BDBleApiImpl.html#a4b83c6b87fbac8b7fae12f677aab7ff9">polar.com.sdk.impl.BDBleApiImpl.disconnectFromDevice</a></div><div class="ttdeci">void disconnectFromDevice(String identifier)</div><div class="ttdef"><b>Definition:</b> <a href="BDBleApiImpl_8java_source.html#l00386">BDBleApiImpl.java:386</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_5eb159725f84c66aafd839904a4acdd0.html">main</a></li><li class="navelem"><a class="el" href="dir_fd3f6763802dee1ad875f6c80eac0bda.html">java</a></li><li class="navelem"><a class="el" href="dir_57f0ca8c420846e7d0426b6adce5936e.html">polar</a></li><li class="navelem"><a class="el" href="dir_1ff65af9a4dc657909b37e4b73346a08.html">com</a></li><li class="navelem"><a class="el" href="dir_fac840b1a3a552bfa17e24a7f5dc9555.html">sdk</a></li><li class="navelem"><a class="el" href="dir_505f0308430f86f31e1193b50b0d8658.html">impl</a></li><li class="navelem"><a class="el" href="BDBleApiImpl_8java.html">BDBleApiImpl.java</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
</div>
</body>
</html>