@rickosborne/bluetools 2025.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/README.md +2624 -0
  2. package/assigned.cjs +577 -0
  3. package/assigned.cjs.map +6 -0
  4. package/assigned.d.ts +552 -0
  5. package/assigned.d.ts.map +1 -0
  6. package/assigned.mjs +557 -0
  7. package/assigned.mjs.map +6 -0
  8. package/battery-level.cjs +50 -0
  9. package/battery-level.cjs.map +6 -0
  10. package/battery-level.d.ts +25 -0
  11. package/battery-level.d.ts.map +1 -0
  12. package/battery-level.mjs +31 -0
  13. package/battery-level.mjs.map +6 -0
  14. package/cross-trainer-data.cjs +188 -0
  15. package/cross-trainer-data.cjs.map +6 -0
  16. package/cross-trainer-data.d.ts +192 -0
  17. package/cross-trainer-data.d.ts.map +1 -0
  18. package/cross-trainer-data.mjs +169 -0
  19. package/cross-trainer-data.mjs.map +6 -0
  20. package/csc-feature.cjs +59 -0
  21. package/csc-feature.cjs.map +6 -0
  22. package/csc-feature.d.ts +55 -0
  23. package/csc-feature.d.ts.map +1 -0
  24. package/csc-feature.mjs +40 -0
  25. package/csc-feature.mjs.map +6 -0
  26. package/csc-measurement.cjs +76 -0
  27. package/csc-measurement.cjs.map +6 -0
  28. package/csc-measurement.d.ts +57 -0
  29. package/csc-measurement.d.ts.map +1 -0
  30. package/csc-measurement.mjs +57 -0
  31. package/csc-measurement.mjs.map +6 -0
  32. package/current-time.cjs +66 -0
  33. package/current-time.cjs.map +6 -0
  34. package/current-time.d.ts +65 -0
  35. package/current-time.d.ts.map +1 -0
  36. package/current-time.mjs +47 -0
  37. package/current-time.mjs.map +6 -0
  38. package/data-view-from-hex.cjs +34 -0
  39. package/data-view-from-hex.cjs.map +6 -0
  40. package/data-view-from-hex.d.ts +6 -0
  41. package/data-view-from-hex.d.ts.map +1 -0
  42. package/data-view-from-hex.mjs +15 -0
  43. package/data-view-from-hex.mjs.map +6 -0
  44. package/data-view-reader.cjs +115 -0
  45. package/data-view-reader.cjs.map +6 -0
  46. package/data-view-reader.d.ts +21 -0
  47. package/data-view-reader.d.ts.map +1 -0
  48. package/data-view-reader.mjs +96 -0
  49. package/data-view-reader.mjs.map +6 -0
  50. package/date-time.cjs +65 -0
  51. package/date-time.cjs.map +6 -0
  52. package/date-time.d.ts +89 -0
  53. package/date-time.d.ts.map +1 -0
  54. package/date-time.mjs +46 -0
  55. package/date-time.mjs.map +6 -0
  56. package/day-date-time.cjs +55 -0
  57. package/day-date-time.cjs.map +6 -0
  58. package/day-date-time.d.ts +21 -0
  59. package/day-date-time.d.ts.map +1 -0
  60. package/day-date-time.mjs +36 -0
  61. package/day-date-time.mjs.map +6 -0
  62. package/day-of-week.cjs +50 -0
  63. package/day-of-week.cjs.map +6 -0
  64. package/day-of-week.d.ts +33 -0
  65. package/day-of-week.d.ts.map +1 -0
  66. package/day-of-week.mjs +31 -0
  67. package/day-of-week.mjs.map +6 -0
  68. package/dst-offset.cjs +50 -0
  69. package/dst-offset.cjs.map +6 -0
  70. package/dst-offset.d.ts +30 -0
  71. package/dst-offset.d.ts.map +1 -0
  72. package/dst-offset.mjs +31 -0
  73. package/dst-offset.mjs.map +6 -0
  74. package/elevation.cjs +50 -0
  75. package/elevation.cjs.map +6 -0
  76. package/elevation.d.ts +22 -0
  77. package/elevation.d.ts.map +1 -0
  78. package/elevation.mjs +31 -0
  79. package/elevation.mjs.map +6 -0
  80. package/exact-time-256.cjs +54 -0
  81. package/exact-time-256.cjs.map +6 -0
  82. package/exact-time-256.d.ts +27 -0
  83. package/exact-time-256.d.ts.map +1 -0
  84. package/exact-time-256.mjs +35 -0
  85. package/exact-time-256.mjs.map +6 -0
  86. package/firmware-revision-string.cjs +50 -0
  87. package/firmware-revision-string.cjs.map +6 -0
  88. package/firmware-revision-string.d.ts +19 -0
  89. package/firmware-revision-string.d.ts.map +1 -0
  90. package/firmware-revision-string.mjs +31 -0
  91. package/firmware-revision-string.mjs.map +6 -0
  92. package/five-zone-heart-rate-limits.cjs +59 -0
  93. package/five-zone-heart-rate-limits.cjs.map +6 -0
  94. package/five-zone-heart-rate-limits.d.ts +47 -0
  95. package/five-zone-heart-rate-limits.d.ts.map +1 -0
  96. package/five-zone-heart-rate-limits.mjs +40 -0
  97. package/five-zone-heart-rate-limits.mjs.map +6 -0
  98. package/gatt-characteristic-presentation-format.cjs +62 -0
  99. package/gatt-characteristic-presentation-format.cjs.map +6 -0
  100. package/gatt-characteristic-presentation-format.d.ts +91 -0
  101. package/gatt-characteristic-presentation-format.d.ts.map +1 -0
  102. package/gatt-characteristic-presentation-format.mjs +43 -0
  103. package/gatt-characteristic-presentation-format.mjs.map +6 -0
  104. package/gatt.cjs +57 -0
  105. package/gatt.cjs.map +6 -0
  106. package/gatt.d.ts +4 -0
  107. package/gatt.d.ts.map +1 -0
  108. package/gatt.mjs +38 -0
  109. package/gatt.mjs.map +6 -0
  110. package/glucose-feature.cjs +83 -0
  111. package/glucose-feature.cjs.map +6 -0
  112. package/glucose-feature.d.ts +127 -0
  113. package/glucose-feature.d.ts.map +1 -0
  114. package/glucose-feature.mjs +64 -0
  115. package/glucose-feature.mjs.map +6 -0
  116. package/glucose-measurement-context.cjs +133 -0
  117. package/glucose-measurement-context.cjs.map +6 -0
  118. package/glucose-measurement-context.d.ts +183 -0
  119. package/glucose-measurement-context.d.ts.map +1 -0
  120. package/glucose-measurement-context.mjs +114 -0
  121. package/glucose-measurement-context.mjs.map +6 -0
  122. package/glucose-measurement.cjs +136 -0
  123. package/glucose-measurement.cjs.map +6 -0
  124. package/glucose-measurement.d.ts +230 -0
  125. package/glucose-measurement.d.ts.map +1 -0
  126. package/glucose-measurement.mjs +117 -0
  127. package/glucose-measurement.mjs.map +6 -0
  128. package/hardware-revision-string.cjs +50 -0
  129. package/hardware-revision-string.cjs.map +6 -0
  130. package/hardware-revision-string.d.ts +19 -0
  131. package/hardware-revision-string.d.ts.map +1 -0
  132. package/hardware-revision-string.mjs +31 -0
  133. package/hardware-revision-string.mjs.map +6 -0
  134. package/heart-rate-control-point.cjs +50 -0
  135. package/heart-rate-control-point.cjs.map +6 -0
  136. package/heart-rate-control-point.d.ts +26 -0
  137. package/heart-rate-control-point.d.ts.map +1 -0
  138. package/heart-rate-control-point.mjs +31 -0
  139. package/heart-rate-control-point.mjs.map +6 -0
  140. package/heart-rate-max.cjs +50 -0
  141. package/heart-rate-max.cjs.map +6 -0
  142. package/heart-rate-max.d.ts +23 -0
  143. package/heart-rate-max.d.ts.map +1 -0
  144. package/heart-rate-max.mjs +31 -0
  145. package/heart-rate-max.mjs.map +6 -0
  146. package/heart-rate-measurement.cjs +79 -0
  147. package/heart-rate-measurement.cjs.map +6 -0
  148. package/heart-rate-measurement.d.ts +65 -0
  149. package/heart-rate-measurement.d.ts.map +1 -0
  150. package/heart-rate-measurement.mjs +60 -0
  151. package/heart-rate-measurement.mjs.map +6 -0
  152. package/heart-rate.cjs +58 -0
  153. package/heart-rate.cjs.map +6 -0
  154. package/heart-rate.d.ts +7 -0
  155. package/heart-rate.d.ts.map +1 -0
  156. package/heart-rate.mjs +39 -0
  157. package/heart-rate.mjs.map +6 -0
  158. package/index.cjs +84 -0
  159. package/index.cjs.map +6 -0
  160. package/index.d.ts +67 -0
  161. package/index.d.ts.map +1 -0
  162. package/index.mjs +67 -0
  163. package/index.mjs.map +6 -0
  164. package/indoor-bike-data.cjs +153 -0
  165. package/indoor-bike-data.cjs.map +6 -0
  166. package/indoor-bike-data.d.ts +146 -0
  167. package/indoor-bike-data.d.ts.map +1 -0
  168. package/indoor-bike-data.mjs +134 -0
  169. package/indoor-bike-data.mjs.map +6 -0
  170. package/language.cjs +50 -0
  171. package/language.cjs.map +6 -0
  172. package/language.d.ts +22 -0
  173. package/language.d.ts.map +1 -0
  174. package/language.mjs +31 -0
  175. package/language.mjs.map +6 -0
  176. package/latitude.cjs +50 -0
  177. package/latitude.cjs.map +6 -0
  178. package/latitude.d.ts +19 -0
  179. package/latitude.d.ts.map +1 -0
  180. package/latitude.mjs +31 -0
  181. package/latitude.mjs.map +6 -0
  182. package/local-time-information.cjs +55 -0
  183. package/local-time-information.cjs.map +6 -0
  184. package/local-time-information.d.ts +21 -0
  185. package/local-time-information.d.ts.map +1 -0
  186. package/local-time-information.mjs +36 -0
  187. package/local-time-information.mjs.map +6 -0
  188. package/location-and-speed.cjs +114 -0
  189. package/location-and-speed.cjs.map +6 -0
  190. package/location-and-speed.d.ts +182 -0
  191. package/location-and-speed.d.ts.map +1 -0
  192. package/location-and-speed.mjs +95 -0
  193. package/location-and-speed.mjs.map +6 -0
  194. package/location-name.cjs +50 -0
  195. package/location-name.cjs.map +6 -0
  196. package/location-name.d.ts +19 -0
  197. package/location-name.d.ts.map +1 -0
  198. package/location-name.mjs +31 -0
  199. package/location-name.mjs.map +6 -0
  200. package/longitude.cjs +50 -0
  201. package/longitude.cjs.map +6 -0
  202. package/longitude.d.ts +19 -0
  203. package/longitude.d.ts.map +1 -0
  204. package/longitude.mjs +31 -0
  205. package/longitude.mjs.map +6 -0
  206. package/manufacturer-name-string.cjs +50 -0
  207. package/manufacturer-name-string.cjs.map +6 -0
  208. package/manufacturer-name-string.d.ts +19 -0
  209. package/manufacturer-name-string.d.ts.map +1 -0
  210. package/manufacturer-name-string.mjs +31 -0
  211. package/manufacturer-name-string.mjs.map +6 -0
  212. package/maximum-recommended-heart-rate.cjs +50 -0
  213. package/maximum-recommended-heart-rate.cjs.map +6 -0
  214. package/maximum-recommended-heart-rate.d.ts +23 -0
  215. package/maximum-recommended-heart-rate.d.ts.map +1 -0
  216. package/maximum-recommended-heart-rate.mjs +31 -0
  217. package/maximum-recommended-heart-rate.mjs.map +6 -0
  218. package/measurement-interval.cjs +50 -0
  219. package/measurement-interval.cjs.map +6 -0
  220. package/measurement-interval.d.ts +27 -0
  221. package/measurement-interval.d.ts.map +1 -0
  222. package/measurement-interval.mjs +31 -0
  223. package/measurement-interval.mjs.map +6 -0
  224. package/model-number-string.cjs +50 -0
  225. package/model-number-string.cjs.map +6 -0
  226. package/model-number-string.d.ts +19 -0
  227. package/model-number-string.d.ts.map +1 -0
  228. package/model-number-string.mjs +31 -0
  229. package/model-number-string.mjs.map +6 -0
  230. package/navigation.cjs +90 -0
  231. package/navigation.cjs.map +6 -0
  232. package/navigation.d.ts +134 -0
  233. package/navigation.d.ts.map +1 -0
  234. package/navigation.mjs +71 -0
  235. package/navigation.mjs.map +6 -0
  236. package/number-of-digitals.cjs +50 -0
  237. package/number-of-digitals.cjs.map +6 -0
  238. package/number-of-digitals.d.ts +19 -0
  239. package/number-of-digitals.d.ts.map +1 -0
  240. package/number-of-digitals.mjs +31 -0
  241. package/number-of-digitals.mjs.map +6 -0
  242. package/package.json +456 -0
  243. package/plx-continuous-measurement.cjs +184 -0
  244. package/plx-continuous-measurement.cjs.map +6 -0
  245. package/plx-continuous-measurement.d.ts +352 -0
  246. package/plx-continuous-measurement.d.ts.map +1 -0
  247. package/plx-continuous-measurement.mjs +165 -0
  248. package/plx-continuous-measurement.mjs.map +6 -0
  249. package/plx-features.cjs +163 -0
  250. package/plx-features.cjs.map +6 -0
  251. package/plx-features.d.ts +354 -0
  252. package/plx-features.d.ts.map +1 -0
  253. package/plx-features.mjs +144 -0
  254. package/plx-features.mjs.map +6 -0
  255. package/plx-spot-check-measurement.cjs +169 -0
  256. package/plx-spot-check-measurement.cjs.map +6 -0
  257. package/plx-spot-check-measurement.d.ts +334 -0
  258. package/plx-spot-check-measurement.d.ts.map +1 -0
  259. package/plx-spot-check-measurement.mjs +150 -0
  260. package/plx-spot-check-measurement.mjs.map +6 -0
  261. package/reference-time-information.cjs +61 -0
  262. package/reference-time-information.cjs.map +6 -0
  263. package/reference-time-information.d.ts +38 -0
  264. package/reference-time-information.d.ts.map +1 -0
  265. package/reference-time-information.mjs +42 -0
  266. package/reference-time-information.mjs.map +6 -0
  267. package/resting-heart-rate.cjs +50 -0
  268. package/resting-heart-rate.cjs.map +6 -0
  269. package/resting-heart-rate.d.ts +23 -0
  270. package/resting-heart-rate.d.ts.map +1 -0
  271. package/resting-heart-rate.mjs +31 -0
  272. package/resting-heart-rate.mjs.map +6 -0
  273. package/rsc-feature.cjs +65 -0
  274. package/rsc-feature.cjs.map +6 -0
  275. package/rsc-feature.d.ts +73 -0
  276. package/rsc-feature.d.ts.map +1 -0
  277. package/rsc-feature.mjs +46 -0
  278. package/rsc-feature.mjs.map +6 -0
  279. package/rsc-measurement.cjs +73 -0
  280. package/rsc-measurement.cjs.map +6 -0
  281. package/rsc-measurement.d.ts +70 -0
  282. package/rsc-measurement.d.ts.map +1 -0
  283. package/rsc-measurement.mjs +54 -0
  284. package/rsc-measurement.mjs.map +6 -0
  285. package/scripts/fetch-and-cache-text.d.ts +2 -0
  286. package/scripts/fetch-and-cache-text.d.ts.map +1 -0
  287. package/scripts/from-xml.d.ts +2 -0
  288. package/scripts/from-xml.d.ts.map +1 -0
  289. package/scripts/gatt-assigned.d.ts +2 -0
  290. package/scripts/gatt-assigned.d.ts.map +1 -0
  291. package/sensor-location.cjs +50 -0
  292. package/sensor-location.cjs.map +6 -0
  293. package/sensor-location.d.ts +42 -0
  294. package/sensor-location.d.ts.map +1 -0
  295. package/sensor-location.mjs +31 -0
  296. package/sensor-location.mjs.map +6 -0
  297. package/serial-number-string.cjs +50 -0
  298. package/serial-number-string.cjs.map +6 -0
  299. package/serial-number-string.d.ts +19 -0
  300. package/serial-number-string.d.ts.map +1 -0
  301. package/serial-number-string.mjs +31 -0
  302. package/serial-number-string.mjs.map +6 -0
  303. package/software-revision-string.cjs +50 -0
  304. package/software-revision-string.cjs.map +6 -0
  305. package/software-revision-string.d.ts +19 -0
  306. package/software-revision-string.d.ts.map +1 -0
  307. package/software-revision-string.mjs +31 -0
  308. package/software-revision-string.mjs.map +6 -0
  309. package/supported-heart-rate-range.cjs +56 -0
  310. package/supported-heart-rate-range.cjs.map +6 -0
  311. package/supported-heart-rate-range.d.ts +37 -0
  312. package/supported-heart-rate-range.d.ts.map +1 -0
  313. package/supported-heart-rate-range.mjs +37 -0
  314. package/supported-heart-rate-range.mjs.map +6 -0
  315. package/supported-inclination-range.cjs +56 -0
  316. package/supported-inclination-range.cjs.map +6 -0
  317. package/supported-inclination-range.d.ts +37 -0
  318. package/supported-inclination-range.d.ts.map +1 -0
  319. package/supported-inclination-range.mjs +37 -0
  320. package/supported-inclination-range.mjs.map +6 -0
  321. package/supported-speed-range.cjs +56 -0
  322. package/supported-speed-range.cjs.map +6 -0
  323. package/supported-speed-range.d.ts +37 -0
  324. package/supported-speed-range.d.ts.map +1 -0
  325. package/supported-speed-range.mjs +37 -0
  326. package/supported-speed-range.mjs.map +6 -0
  327. package/system-id.cjs +53 -0
  328. package/system-id.cjs.map +6 -0
  329. package/system-id.d.ts +34 -0
  330. package/system-id.d.ts.map +1 -0
  331. package/system-id.mjs +34 -0
  332. package/system-id.mjs.map +6 -0
  333. package/temperature-measurement.cjs +79 -0
  334. package/temperature-measurement.cjs.map +6 -0
  335. package/temperature-measurement.d.ts +61 -0
  336. package/temperature-measurement.d.ts.map +1 -0
  337. package/temperature-measurement.mjs +60 -0
  338. package/temperature-measurement.mjs.map +6 -0
  339. package/temperature-type.cjs +50 -0
  340. package/temperature-type.cjs.map +6 -0
  341. package/temperature-type.d.ts +37 -0
  342. package/temperature-type.d.ts.map +1 -0
  343. package/temperature-type.mjs +31 -0
  344. package/temperature-type.mjs.map +6 -0
  345. package/temperature.cjs +50 -0
  346. package/temperature.cjs.map +6 -0
  347. package/temperature.d.ts +22 -0
  348. package/temperature.d.ts.map +1 -0
  349. package/temperature.mjs +31 -0
  350. package/temperature.mjs.map +6 -0
  351. package/three-zone-heart-rate-limits.cjs +53 -0
  352. package/three-zone-heart-rate-limits.cjs.map +6 -0
  353. package/three-zone-heart-rate-limits.d.ts +33 -0
  354. package/three-zone-heart-rate-limits.d.ts.map +1 -0
  355. package/three-zone-heart-rate-limits.mjs +34 -0
  356. package/three-zone-heart-rate-limits.mjs.map +6 -0
  357. package/time-accuracy.cjs +50 -0
  358. package/time-accuracy.cjs.map +6 -0
  359. package/time-accuracy.d.ts +23 -0
  360. package/time-accuracy.d.ts.map +1 -0
  361. package/time-accuracy.mjs +31 -0
  362. package/time-accuracy.mjs.map +6 -0
  363. package/time-source.cjs +50 -0
  364. package/time-source.cjs.map +6 -0
  365. package/time-source.d.ts +33 -0
  366. package/time-source.d.ts.map +1 -0
  367. package/time-source.mjs +31 -0
  368. package/time-source.mjs.map +6 -0
  369. package/time-update-control-point.cjs +50 -0
  370. package/time-update-control-point.cjs.map +6 -0
  371. package/time-update-control-point.d.ts +29 -0
  372. package/time-update-control-point.d.ts.map +1 -0
  373. package/time-update-control-point.mjs +31 -0
  374. package/time-update-control-point.mjs.map +6 -0
  375. package/time-update-state.cjs +53 -0
  376. package/time-update-state.cjs.map +6 -0
  377. package/time-update-state.d.ts +45 -0
  378. package/time-update-state.d.ts.map +1 -0
  379. package/time-update-state.mjs +34 -0
  380. package/time-update-state.mjs.map +6 -0
  381. package/time-with-dst.cjs +55 -0
  382. package/time-with-dst.cjs.map +6 -0
  383. package/time-with-dst.d.ts +21 -0
  384. package/time-with-dst.d.ts.map +1 -0
  385. package/time-with-dst.mjs +36 -0
  386. package/time-with-dst.mjs.map +6 -0
  387. package/time-zone.cjs +50 -0
  388. package/time-zone.cjs.map +6 -0
  389. package/time-zone.d.ts +23 -0
  390. package/time-zone.d.ts.map +1 -0
  391. package/time-zone.mjs +31 -0
  392. package/time-zone.mjs.map +6 -0
  393. package/treadmill-data.cjs +171 -0
  394. package/treadmill-data.cjs.map +6 -0
  395. package/treadmill-data.d.ts +167 -0
  396. package/treadmill-data.d.ts.map +1 -0
  397. package/treadmill-data.mjs +152 -0
  398. package/treadmill-data.mjs.map +6 -0
  399. package/two-zone-heart-rate-limit.cjs +50 -0
  400. package/two-zone-heart-rate-limit.cjs.map +6 -0
  401. package/two-zone-heart-rate-limit.d.ts +23 -0
  402. package/two-zone-heart-rate-limit.d.ts.map +1 -0
  403. package/two-zone-heart-rate-limit.mjs +31 -0
  404. package/two-zone-heart-rate-limit.mjs.map +6 -0
  405. package/vo2-max.cjs +50 -0
  406. package/vo2-max.cjs.map +6 -0
  407. package/vo2-max.d.ts +22 -0
  408. package/vo2-max.d.ts.map +1 -0
  409. package/vo2-max.mjs +31 -0
  410. package/vo2-max.mjs.map +6 -0
package/README.md ADDED
@@ -0,0 +1,2624 @@
1
+ # @rickosborne/bluetools
2
+
3
+ TypeScript/ES/JS for working with Bluetooth devices via node.
4
+
5
+ This library _does not_ attempt to do all the low-level [Web Bluetooth API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API) stuff.
6
+ Instead, it contains a bunch of types, classes, and functions auto-generated from the Bluetooth Characteristic and Descriptor reference XML.
7
+
8
+ Basically, it attempts to help with that annoying step of "okay, I got my nodejs/browser talking to the device, now how do I read the data?" part.
9
+
10
+ > ⚠️⚠️⚠️ ***This library does not attempt to cover the various edge cases of the real world or the Web Bluetooth spec.*** ⚠️⚠️⚠️
11
+
12
+ Indeed, I probably got a bunch of stuff wrong, as the source XML files for the data specs have almost zero examples.
13
+ I've tested it on a few of my own devices (heart rate monitors, mostly), but I don't claim that all the fiddly stuff will actually work.
14
+ Use at your own risk. YMMV. All that.
15
+
16
+ Some things I guarantee won't work until I get some examples for unit tests:
17
+
18
+ - Float values (both `FLOAT` and `SFLOAT`). How many bytes are these? Are they little endian, too, or some custom encoding?
19
+ - Nibble values. Their sub-byte-size makes them annoying to use with the `DataView` type which underpins the Web Bluetooth API.
20
+ - What the actual frak are `Uint24` and `Int24`? 24?!?! What's the byte order here? What's a sane and reasonable way to read one from a DataView? How do the signs work? And an `Int40?`? wat?
21
+
22
+ As most of the code in this library is auto-generated, it all follows the same pattern:
23
+
24
+ - An interface for the fields parsed from the Characteristic / Descriptor.
25
+ - A class which implements that interface, and also holds static constants like the UUID and Name.
26
+ - A parser function which can read a `DataView` and generate instances of the class.
27
+
28
+ I have not converted _all_ the Characteristics or Descriptors.
29
+ If you have access to one of the XML sources you'd like to see added, file a GitHub issue.
30
+ You can also try generating them on your own using the `scripts/from-xml.ts` and `scripts/gatt-assigned.ts` scripts.
31
+ The former does most of the code generation, while the latter just adds to the UUID records.
32
+ ## Usage
33
+
34
+ Install via your favorite package manager.
35
+
36
+ Each package supports CommonJS `require`, ESM `import`, and TypeScript usage.
37
+
38
+ You also have a choice: barrel imports or direct imports.
39
+
40
+ Barrel imports mean you're going to require/import everything from the same package-level namespace:
41
+
42
+ ```typescript
43
+ // CommonJS
44
+ const { isPlainObject, isListOf } = require("@rickosborne/guard");
45
+ // ESM / TypeScript
46
+ import { isPlainObject, isListOf } from "@rickosborne/guard";
47
+ ```
48
+
49
+ Implications:
50
+
51
+ - Nice and simple.
52
+ - Your build system needs to do tree-shaking well ... or you'll end up adding the entire package even if you only import two functions.
53
+
54
+ The other option is to use direct imports:
55
+
56
+ ```typescript
57
+ // CommonJS
58
+ const { isPlainObject } = require("@rickosborne/guard/is-object");
59
+ const { isListOf } = require("@rickosborne/guard/is-list-of");
60
+ // ESM / TypeScript
61
+ import { isPlainObject } from "@rickosborne/guard/is-object.js";
62
+ import { isListOf } from "@rickosborne/guard/is-list-of.js";
63
+ ```
64
+
65
+ Implications:
66
+
67
+ - You (probably) don't have to worry about tree-shaking as your build (likely) ends up with only the functions you need.
68
+
69
+ If you're using a modern build system, there aren't any strong reasons to prefer one way over the other.
70
+ It's really just down to your personal preference.
71
+
72
+ ### A quick note about file extensions
73
+
74
+ Do you need to use file extensions?
75
+ And if so, which extensions?
76
+
77
+ Honestly ... this is a dumpster fire question.
78
+ It really comes down to your own setup and configuration.
79
+
80
+ Within each package itself:
81
+
82
+ - The CommonJS files all have `.cjs` extensions.
83
+ - The ESM files all have `.mjs` extensions.
84
+ - Node subpath exports have been set up to send `.js` imports to the `.cjs` (via `require`) or `.mjs` (via `import`) files, depending on your setup.
85
+
86
+ So, in theory, the only extension which _won't_ work would be `.ts` because the source isn't included.
87
+
88
+ If you run into a problem with a particular configuration, file a GitHub issue with:
89
+
90
+ - Your `tsconfig.json`'s `module`, `moduleResolution`, and `target` settings.
91
+ - Your `package.json`'s `type` and `imports` settings.
92
+ - An example of another package which imports correctly for you.
93
+
94
+ ## License
95
+
96
+ This package is licensed as [CC-BY-NC-SA-4.0] unless otherwise noted.
97
+ That is, Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.
98
+
99
+ [CC-BY-NC-SA-4.0]: https://creativecommons.org/licenses/by-nc-sa/4.0/
100
+
101
+
102
+ ***
103
+
104
+ ## API
105
+
106
+ ### Classes
107
+
108
+ #### BatteryLevelImpl
109
+
110
+ <a id="api-batterylevelimpl"></a>
111
+
112
+ ```typescript
113
+ class BatteryLevelImpl implements BatteryLevel
114
+ ```
115
+
116
+ #### CrossTrainerDataImpl
117
+
118
+ <a id="api-crosstrainerdataimpl"></a>
119
+
120
+ ```typescript
121
+ class CrossTrainerDataImpl implements CrossTrainerData
122
+ ```
123
+
124
+ #### CscFeatureImpl
125
+
126
+ <a id="api-cscfeatureimpl"></a>
127
+
128
+ ```typescript
129
+ class CscFeatureImpl implements CscFeature
130
+ ```
131
+
132
+ #### CscMeasurementImpl
133
+
134
+ <a id="api-cscmeasurementimpl"></a>
135
+
136
+ ```typescript
137
+ class CscMeasurementImpl implements CscMeasurement
138
+ ```
139
+
140
+ #### CurrentTimeImpl
141
+
142
+ <a id="api-currenttimeimpl"></a>
143
+
144
+ ```typescript
145
+ class CurrentTimeImpl implements CurrentTime
146
+ ```
147
+
148
+ #### DateTimeImpl
149
+
150
+ <a id="api-datetimeimpl"></a>
151
+
152
+ ```typescript
153
+ class DateTimeImpl implements DateTime
154
+ ```
155
+
156
+ #### DayDateTimeImpl
157
+
158
+ <a id="api-daydatetimeimpl"></a>
159
+
160
+ ```typescript
161
+ class DayDateTimeImpl implements DayDateTime
162
+ ```
163
+
164
+ #### DayOfWeekImpl
165
+
166
+ <a id="api-dayofweekimpl"></a>
167
+
168
+ ```typescript
169
+ class DayOfWeekImpl implements DayOfWeek
170
+ ```
171
+
172
+ #### DstOffsetImpl
173
+
174
+ <a id="api-dstoffsetimpl"></a>
175
+
176
+ ```typescript
177
+ class DstOffsetImpl implements DstOffset
178
+ ```
179
+
180
+ #### ElevationImpl
181
+
182
+ <a id="api-elevationimpl"></a>
183
+
184
+ ```typescript
185
+ class ElevationImpl implements Elevation
186
+ ```
187
+
188
+ #### ExactTime256Impl
189
+
190
+ <a id="api-exacttime256impl"></a>
191
+
192
+ ```typescript
193
+ class ExactTime256Impl implements ExactTime256
194
+ ```
195
+
196
+ #### FirmwareRevisionStringImpl
197
+
198
+ <a id="api-firmwarerevisionstringimpl"></a>
199
+
200
+ ```typescript
201
+ class FirmwareRevisionStringImpl implements FirmwareRevisionString
202
+ ```
203
+
204
+ #### FiveZoneHeartRateLimitsImpl
205
+
206
+ <a id="api-fivezoneheartratelimitsimpl"></a>
207
+
208
+ ```typescript
209
+ class FiveZoneHeartRateLimitsImpl implements FiveZoneHeartRateLimits
210
+ ```
211
+
212
+ The fields in the above table are in the order of LSO to MSO. Where LSO = Least Significant Octet and MSO = Most Significant Octet.
213
+
214
+
215
+
216
+ #### GattCharacteristicPresentationFormatImpl
217
+
218
+ <a id="api-gattcharacteristicpresentationformatimpl"></a>
219
+
220
+ ```typescript
221
+ class GattCharacteristicPresentationFormatImpl implements GattCharacteristicPresentationFormat
222
+ ```
223
+
224
+ #### GlucoseFeatureImpl
225
+
226
+ <a id="api-glucosefeatureimpl"></a>
227
+
228
+ ```typescript
229
+ class GlucoseFeatureImpl implements GlucoseFeature
230
+ ```
231
+
232
+ #### GlucoseMeasurementContextImpl
233
+
234
+ <a id="api-glucosemeasurementcontextimpl"></a>
235
+
236
+ ```typescript
237
+ class GlucoseMeasurementContextImpl implements GlucoseMeasurementContext
238
+ ```
239
+
240
+ Where fields with the format ?nibble? have been defined in the above table, the fields are shown in the order of Least Significant Nibble first, when reading the table from top to bottom. Where the characteristic definition contains two adjacent nibbles and the service specification has defined that that pair of nibbles comprise a single octet, the Least Significant Nibble means the four bits numbered 0, 1, 2 and 3 of the octet and the Most Significant Nibble means the four bits numbered 4, 5, 6 and 7 of that octet.
241
+
242
+
243
+
244
+ #### GlucoseMeasurementImpl
245
+
246
+ <a id="api-glucosemeasurementimpl"></a>
247
+
248
+ ```typescript
249
+ class GlucoseMeasurementImpl implements GlucoseMeasurement
250
+ ```
251
+
252
+ Where fields with the format ?nibble? have been defined in the above table, the fields are shown in the order of Least Significant Nibble first, when reading the table from top to bottom. Where the characteristic definition contains two adjacent nibbles and the service specification has defined that that pair of nibbles comprise a single octet, the Least Significant Nibble means the four bits numbered 0, 1, 2 and 3 of the octet and the Most Significant Nibble means the four bits numbered 4, 5, 6 and 7 of that octet.
253
+
254
+
255
+
256
+ #### HardwareRevisionStringImpl
257
+
258
+ <a id="api-hardwarerevisionstringimpl"></a>
259
+
260
+ ```typescript
261
+ class HardwareRevisionStringImpl implements HardwareRevisionString
262
+ ```
263
+
264
+ #### HeartRateControlPointImpl
265
+
266
+ <a id="api-heartratecontrolpointimpl"></a>
267
+
268
+ ```typescript
269
+ class HeartRateControlPointImpl implements HeartRateControlPoint
270
+ ```
271
+
272
+ #### HeartRateMaxImpl
273
+
274
+ <a id="api-heartratemaximpl"></a>
275
+
276
+ ```typescript
277
+ class HeartRateMaxImpl implements HeartRateMax
278
+ ```
279
+
280
+ #### HeartRateMeasurementImpl
281
+
282
+ <a id="api-heartratemeasurementimpl"></a>
283
+
284
+ ```typescript
285
+ class HeartRateMeasurementImpl implements HeartRateMeasurement
286
+ ```
287
+
288
+ The fields in the above table are in the order of LSO to MSO. Where LSO = Least Significant Octet and MSO = Most Significant Octet.
289
+
290
+
291
+
292
+ #### IndoorBikeDataImpl
293
+
294
+ <a id="api-indoorbikedataimpl"></a>
295
+
296
+ ```typescript
297
+ class IndoorBikeDataImpl implements IndoorBikeData
298
+ ```
299
+
300
+ #### LanguageImpl
301
+
302
+ <a id="api-languageimpl"></a>
303
+
304
+ ```typescript
305
+ class LanguageImpl implements Language
306
+ ```
307
+
308
+ #### LatitudeImpl
309
+
310
+ <a id="api-latitudeimpl"></a>
311
+
312
+ ```typescript
313
+ class LatitudeImpl implements Latitude
314
+ ```
315
+
316
+ #### LocalTimeInformationImpl
317
+
318
+ <a id="api-localtimeinformationimpl"></a>
319
+
320
+ ```typescript
321
+ class LocalTimeInformationImpl implements LocalTimeInformation
322
+ ```
323
+
324
+ #### LocationAndSpeedImpl
325
+
326
+ <a id="api-locationandspeedimpl"></a>
327
+
328
+ ```typescript
329
+ class LocationAndSpeedImpl implements LocationAndSpeed
330
+ ```
331
+
332
+ #### LocationNameImpl
333
+
334
+ <a id="api-locationnameimpl"></a>
335
+
336
+ ```typescript
337
+ class LocationNameImpl implements LocationName
338
+ ```
339
+
340
+ #### LongitudeImpl
341
+
342
+ <a id="api-longitudeimpl"></a>
343
+
344
+ ```typescript
345
+ class LongitudeImpl implements Longitude
346
+ ```
347
+
348
+ #### ManufacturerNameStringImpl
349
+
350
+ <a id="api-manufacturernamestringimpl"></a>
351
+
352
+ ```typescript
353
+ class ManufacturerNameStringImpl implements ManufacturerNameString
354
+ ```
355
+
356
+ #### MaximumRecommendedHeartRateImpl
357
+
358
+ <a id="api-maximumrecommendedheartrateimpl"></a>
359
+
360
+ ```typescript
361
+ class MaximumRecommendedHeartRateImpl implements MaximumRecommendedHeartRate
362
+ ```
363
+
364
+ #### MeasurementIntervalImpl
365
+
366
+ <a id="api-measurementintervalimpl"></a>
367
+
368
+ ```typescript
369
+ class MeasurementIntervalImpl implements MeasurementInterval
370
+ ```
371
+
372
+ #### ModelNumberStringImpl
373
+
374
+ <a id="api-modelnumberstringimpl"></a>
375
+
376
+ ```typescript
377
+ class ModelNumberStringImpl implements ModelNumberString
378
+ ```
379
+
380
+ #### NavigationImpl
381
+
382
+ <a id="api-navigationimpl"></a>
383
+
384
+ ```typescript
385
+ class NavigationImpl implements Navigation
386
+ ```
387
+
388
+ #### NumberOfDigitalsImpl
389
+
390
+ <a id="api-numberofdigitalsimpl"></a>
391
+
392
+ ```typescript
393
+ class NumberOfDigitalsImpl implements NumberOfDigitals
394
+ ```
395
+
396
+ #### PlxContinuousMeasurementImpl
397
+
398
+ <a id="api-plxcontinuousmeasurementimpl"></a>
399
+
400
+ ```typescript
401
+ class PlxContinuousMeasurementImpl implements PlxContinuousMeasurement
402
+ ```
403
+
404
+ The fields in the above table, reading from top to bottom, are shown in the order of LSO to MSO, where LSO = Least Significant Octet and MSO = Most Significant Octet.
405
+
406
+
407
+
408
+ #### PlxFeaturesImpl
409
+
410
+ <a id="api-plxfeaturesimpl"></a>
411
+
412
+ ```typescript
413
+ class PlxFeaturesImpl implements PlxFeatures
414
+ ```
415
+
416
+ The fields in the above table, reading from top to bottom, are shown in the order of LSO to MSO, where LSO = Least Significant Octet and MSO = Most Significant Octet.
417
+
418
+
419
+
420
+ #### PlxSpotCheckMeasurementImpl
421
+
422
+ <a id="api-plxspotcheckmeasurementimpl"></a>
423
+
424
+ ```typescript
425
+ class PlxSpotCheckMeasurementImpl implements PlxSpotCheckMeasurement
426
+ ```
427
+
428
+ #### ReferenceTimeInformationImpl
429
+
430
+ <a id="api-referencetimeinformationimpl"></a>
431
+
432
+ ```typescript
433
+ class ReferenceTimeInformationImpl implements ReferenceTimeInformation
434
+ ```
435
+
436
+ #### RestingHeartRateImpl
437
+
438
+ <a id="api-restingheartrateimpl"></a>
439
+
440
+ ```typescript
441
+ class RestingHeartRateImpl implements RestingHeartRate
442
+ ```
443
+
444
+ #### RscFeatureImpl
445
+
446
+ <a id="api-rscfeatureimpl"></a>
447
+
448
+ ```typescript
449
+ class RscFeatureImpl implements RscFeature
450
+ ```
451
+
452
+ #### RscMeasurementImpl
453
+
454
+ <a id="api-rscmeasurementimpl"></a>
455
+
456
+ ```typescript
457
+ class RscMeasurementImpl implements RscMeasurement
458
+ ```
459
+
460
+ #### SensorLocationImpl
461
+
462
+ <a id="api-sensorlocationimpl"></a>
463
+
464
+ ```typescript
465
+ class SensorLocationImpl implements SensorLocation
466
+ ```
467
+
468
+ #### SerialNumberStringImpl
469
+
470
+ <a id="api-serialnumberstringimpl"></a>
471
+
472
+ ```typescript
473
+ class SerialNumberStringImpl implements SerialNumberString
474
+ ```
475
+
476
+ #### SoftwareRevisionStringImpl
477
+
478
+ <a id="api-softwarerevisionstringimpl"></a>
479
+
480
+ ```typescript
481
+ class SoftwareRevisionStringImpl implements SoftwareRevisionString
482
+ ```
483
+
484
+ #### SupportedHeartRateRangeImpl
485
+
486
+ <a id="api-supportedheartraterangeimpl"></a>
487
+
488
+ ```typescript
489
+ class SupportedHeartRateRangeImpl implements SupportedHeartRateRange
490
+ ```
491
+
492
+ #### SupportedInclinationRangeImpl
493
+
494
+ <a id="api-supportedinclinationrangeimpl"></a>
495
+
496
+ ```typescript
497
+ class SupportedInclinationRangeImpl implements SupportedInclinationRange
498
+ ```
499
+
500
+ #### SupportedSpeedRangeImpl
501
+
502
+ <a id="api-supportedspeedrangeimpl"></a>
503
+
504
+ ```typescript
505
+ class SupportedSpeedRangeImpl implements SupportedSpeedRange
506
+ ```
507
+
508
+ #### SystemIdImpl
509
+
510
+ <a id="api-systemidimpl"></a>
511
+
512
+ ```typescript
513
+ class SystemIdImpl implements SystemId
514
+ ```
515
+
516
+ #### TemperatureImpl
517
+
518
+ <a id="api-temperatureimpl"></a>
519
+
520
+ ```typescript
521
+ class TemperatureImpl implements Temperature
522
+ ```
523
+
524
+ #### TemperatureMeasurementImpl
525
+
526
+ <a id="api-temperaturemeasurementimpl"></a>
527
+
528
+ ```typescript
529
+ class TemperatureMeasurementImpl implements TemperatureMeasurement
530
+ ```
531
+
532
+ #### TemperatureTypeImpl
533
+
534
+ <a id="api-temperaturetypeimpl"></a>
535
+
536
+ ```typescript
537
+ class TemperatureTypeImpl implements TemperatureType
538
+ ```
539
+
540
+ #### ThreeZoneHeartRateLimitsImpl
541
+
542
+ <a id="api-threezoneheartratelimitsimpl"></a>
543
+
544
+ ```typescript
545
+ class ThreeZoneHeartRateLimitsImpl implements ThreeZoneHeartRateLimits
546
+ ```
547
+
548
+ The fields in the above table are in the order of LSO to MSO. Where LSO = Least Significant Octet and MSO = Most Significant Octet.
549
+
550
+
551
+
552
+ #### TimeAccuracyImpl
553
+
554
+ <a id="api-timeaccuracyimpl"></a>
555
+
556
+ ```typescript
557
+ class TimeAccuracyImpl implements TimeAccuracy
558
+ ```
559
+
560
+ #### TimeSourceImpl
561
+
562
+ <a id="api-timesourceimpl"></a>
563
+
564
+ ```typescript
565
+ class TimeSourceImpl implements TimeSource
566
+ ```
567
+
568
+ #### TimeUpdateControlPointImpl
569
+
570
+ <a id="api-timeupdatecontrolpointimpl"></a>
571
+
572
+ ```typescript
573
+ class TimeUpdateControlPointImpl implements TimeUpdateControlPoint
574
+ ```
575
+
576
+ #### TimeUpdateStateImpl
577
+
578
+ <a id="api-timeupdatestateimpl"></a>
579
+
580
+ ```typescript
581
+ class TimeUpdateStateImpl implements TimeUpdateState
582
+ ```
583
+
584
+ #### TimeWithDstImpl
585
+
586
+ <a id="api-timewithdstimpl"></a>
587
+
588
+ ```typescript
589
+ class TimeWithDstImpl implements TimeWithDst
590
+ ```
591
+
592
+ #### TimeZoneImpl
593
+
594
+ <a id="api-timezoneimpl"></a>
595
+
596
+ ```typescript
597
+ class TimeZoneImpl implements TimeZone
598
+ ```
599
+
600
+ #### TreadmillDataImpl
601
+
602
+ <a id="api-treadmilldataimpl"></a>
603
+
604
+ ```typescript
605
+ class TreadmillDataImpl implements TreadmillData
606
+ ```
607
+
608
+ #### TwoZoneHeartRateLimitImpl
609
+
610
+ <a id="api-twozoneheartratelimitimpl"></a>
611
+
612
+ ```typescript
613
+ class TwoZoneHeartRateLimitImpl implements TwoZoneHeartRateLimit
614
+ ```
615
+
616
+ #### Vo2MaxImpl
617
+
618
+ <a id="api-vo2maximpl"></a>
619
+
620
+ ```typescript
621
+ class Vo2MaxImpl implements Vo2Max
622
+ ```
623
+
624
+ ### Functions
625
+
626
+ #### batteryLevelFromDataView
627
+
628
+ <a id="api-batterylevelfromdataview"></a>
629
+
630
+ ```typescript
631
+ function batteryLevelFromDataView(dataView: DataView | DataViewReader, indexStart?: number): BatteryLevel;
632
+ ```
633
+
634
+ Parse from a DataView into [BatteryLevel](#api-batterylevel).
635
+
636
+
637
+ #### crossTrainerDataFromDataView
638
+
639
+ <a id="api-crosstrainerdatafromdataview"></a>
640
+
641
+ ```typescript
642
+ function crossTrainerDataFromDataView(dataView: DataView | DataViewReader, indexStart?: number): CrossTrainerData;
643
+ ```
644
+
645
+ Parse from a DataView into [CrossTrainerData](#api-crosstrainerdata).
646
+
647
+
648
+ #### cscFeatureFromDataView
649
+
650
+ <a id="api-cscfeaturefromdataview"></a>
651
+
652
+ ```typescript
653
+ function cscFeatureFromDataView(dataView: DataView | DataViewReader, indexStart?: number): CscFeature;
654
+ ```
655
+
656
+ Parse from a DataView into [CscFeature](#api-cscfeature).
657
+
658
+
659
+ #### cscMeasurementFromDataView
660
+
661
+ <a id="api-cscmeasurementfromdataview"></a>
662
+
663
+ ```typescript
664
+ function cscMeasurementFromDataView(dataView: DataView | DataViewReader, indexStart?: number): CscMeasurement;
665
+ ```
666
+
667
+ Parse from a DataView into [CscMeasurement](#api-cscmeasurement).
668
+
669
+
670
+ #### currentTimeFromDataView
671
+
672
+ <a id="api-currenttimefromdataview"></a>
673
+
674
+ ```typescript
675
+ function currentTimeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): CurrentTime;
676
+ ```
677
+
678
+ Parse from a DataView into [CurrentTime](#api-currenttime).
679
+
680
+
681
+ #### dataViewFromHex
682
+
683
+ <a id="api-dataviewfromhex"></a>
684
+
685
+ ```typescript
686
+ dataViewFromHex: (hex: string) => DataView
687
+ ```
688
+
689
+ Build a DataView from a hex-encoded string. This is a polyfill for `Uint8Array.fromHex()`.
690
+
691
+
692
+ #### dataViewReader
693
+
694
+ <a id="api-dataviewreader"></a>
695
+
696
+ ```typescript
697
+ dataViewReader: (dataView: DataView | DataViewReader, indexStart?: number) => DataViewReader
698
+ ```
699
+
700
+ #### dateTimeFromDataView
701
+
702
+ <a id="api-datetimefromdataview"></a>
703
+
704
+ ```typescript
705
+ function dateTimeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): DateTime;
706
+ ```
707
+
708
+ Parse from a DataView into [DateTime](#api-datetime).
709
+
710
+
711
+ #### dayDateTimeFromDataView
712
+
713
+ <a id="api-daydatetimefromdataview"></a>
714
+
715
+ ```typescript
716
+ function dayDateTimeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): DayDateTime;
717
+ ```
718
+
719
+ Parse from a DataView into [DayDateTime](#api-daydatetime).
720
+
721
+
722
+ #### dayOfWeekFromDataView
723
+
724
+ <a id="api-dayofweekfromdataview"></a>
725
+
726
+ ```typescript
727
+ function dayOfWeekFromDataView(dataView: DataView | DataViewReader, indexStart?: number): DayOfWeek;
728
+ ```
729
+
730
+ Parse from a DataView into [DayOfWeek](#api-dayofweek).
731
+
732
+
733
+ #### dstOffsetFromDataView
734
+
735
+ <a id="api-dstoffsetfromdataview"></a>
736
+
737
+ ```typescript
738
+ function dstOffsetFromDataView(dataView: DataView | DataViewReader, indexStart?: number): DstOffset;
739
+ ```
740
+
741
+ Parse from a DataView into [DstOffset](#api-dstoffset).
742
+
743
+
744
+ #### elevationFromDataView
745
+
746
+ <a id="api-elevationfromdataview"></a>
747
+
748
+ ```typescript
749
+ function elevationFromDataView(dataView: DataView | DataViewReader, indexStart?: number): Elevation;
750
+ ```
751
+
752
+ Parse from a DataView into [Elevation](#api-elevation).
753
+
754
+
755
+ #### exactTime256FromDataView
756
+
757
+ <a id="api-exacttime256fromdataview"></a>
758
+
759
+ ```typescript
760
+ function exactTime256FromDataView(dataView: DataView | DataViewReader, indexStart?: number): ExactTime256;
761
+ ```
762
+
763
+ Parse from a DataView into [ExactTime256](#api-exacttime256).
764
+
765
+
766
+ #### firmwareRevisionStringFromDataView
767
+
768
+ <a id="api-firmwarerevisionstringfromdataview"></a>
769
+
770
+ ```typescript
771
+ function firmwareRevisionStringFromDataView(dataView: DataView | DataViewReader, indexStart?: number): FirmwareRevisionString;
772
+ ```
773
+
774
+ Parse from a DataView into [FirmwareRevisionString](#api-firmwarerevisionstring).
775
+
776
+
777
+ #### fiveZoneHeartRateLimitsFromDataView
778
+
779
+ <a id="api-fivezoneheartratelimitsfromdataview"></a>
780
+
781
+ ```typescript
782
+ function fiveZoneHeartRateLimitsFromDataView(dataView: DataView | DataViewReader, indexStart?: number): FiveZoneHeartRateLimits;
783
+ ```
784
+
785
+ Parse from a DataView into [FiveZoneHeartRateLimits](#api-fivezoneheartratelimits).
786
+
787
+
788
+ #### gattCharacteristicName
789
+
790
+ <a id="api-gattcharacteristicname"></a>
791
+
792
+ ```typescript
793
+ gattCharacteristicName: (idOrName: string | number | null | undefined) => "string" | "current_time" | "aerobic_heart_rate_lower_limit" | "aerobic_heart_rate_upper_limit" | "aerobic_threshold" | "age" | "aggregate" | "alert_category_id" | "alert_category_id_bit_mask" | "alert_level" | "alert_notification_control_point" | "alert_status" | "altitude" | "anaerobic_heart_rate_lower_limit" | "anaerobic_heart_rate_upper_limit" | "anaerobic_threshold" | "analog" | "analog_output" | "apparent_wind_direction" | "apparent_wind_speed" | "barometric_pressure_trend" | "battery_level" | "battery_level_state" | "battery_power_state" | "blood_pressure_feature" | "blood_pressure_measurement" | "body_composition_feature" | "body_composition_measurement" | "body_sensor_location" | "bond_management_control_point" | "bond_management_feature" | "boot_keyboard_input_report" | "boot_keyboard_output_report" | "boot_mouse_input_report" | "cgm_feature" | "cgm_measurement" | "cgm_session_run_time" | "cgm_session_start_time" | "cgm_specific_ops_control_point" | "cgm_status" | "cross_trainer_data" | "csc_feature" | "csc_measurement" | "cycling_power_control_point" | "cycling_power_feature" | "cycling_power_measurement" | "cycling_power_vector" | "database_change_increment" | "date_of_birth" | "date_of_threshold_assessment" | "date_time" | "date_utc" | "day_date_time" | "day_of_week" | "descriptor_value_changed" | "dew_point" | "digital" | "digital_output" | "dst_offset" | "elevation" | "email_address" | "exact_time_100" | "exact_time_256" | "fat_burn_heart_rate_lower_limit" | "fat_burn_heart_rate_upper_limit" | "firmware_revision_string" | "first_name" | "fitness_machine_control_point" | "fitness_machine_feature" | "fitness_machine_status" | "five_zone_heart_rate_limits" | "floor_number" | "gap.appearance" | "gap.central_address_resolution_support" | "gap.device_name" | "gap.peripheral_preferred_connection_parameters" | "gap.peripheral_privacy_flag" | "gap.reconnection_address" | "gatt.service_changed" | "gender" | "glucose_feature" | "glucose_measurement" | "glucose_measurement_context" | "gust_factor" | "hardware_revision_string" | "heart_rate_control_point" | "heart_rate_max" | "heart_rate_measurement" | "heat_index" | "height" | "hid_control_point" | "hid_information" | "hip_circumference" | "http_control_point" | "http_entity_body" | "http_headers" | "http_status_code" | "https_security" | "humidity" | "ieee_11073-20601_regulatory_certification_data_list" | "indoor_bike_data" | "indoor_positioning_configuration" | "intermediate_cuff_pressure" | "intermediate_temperature" | "irradiance" | "language" | "last_name" | "latitude" | "ln_control_point" | "ln_feature" | "local_east_coordinate.xml" | "local_north_coordinate" | "local_time_information" | "location_and_speed" | "location_name" | "longitude" | "magnetic_declination" | "magnetic_flux_density_2D" | "magnetic_flux_density_3D" | "manufacturer_name_string" | "maximum_recommended_heart_rate" | "measurement_interval" | "model_number_string" | "navigation" | "network_availability" | "new_alert" | "object_action_control_point" | "object_changed" | "object_first_created" | "object_id" | "object_last_modified" | "object_list_control_point" | "object_list_filter" | "object_name" | "object_properties" | "object_size" | "object_type" | "ots_feature" | "plx_continuous_measurement" | "plx_features" | "plx_spot_check_measurement" | "pnp_id" | "pollen_concentration" | "position_2d" | "position_3d" | "position_quality" | "pressure" | "protocol_mode" | "pulse_oximetry_control_point" | "rainfall" | "record_access_control_point" | "reference_time_information" | "removable" | "report" | "report_map" | "resolvable_private_address_only" | "resting_heart_rate" | "ringer_control_point" | "ringer_setting" | "rower_data" | "rsc_feature" | "rsc_measurement" | "sc_control_point" | "scan_interval_window" | "scan_refresh" | "scientific_temperature_celsius" | "secondary_time_zone" | "sensor_location" | "serial_number_string" | "service_required" | "software_revision_string" | "sport_type_for_aerobic_and_anaerobic_thresholds" | "stair_climber_data" | "step_climber_data" | "supported_heart_rate_range" | "supported_inclination_range" | "supported_new_alert_category" | "supported_power_range" | "supported_resistance_level_range" | "supported_speed_range" | "supported_unread_alert_category" | "system_id" | "tds_control_point" | "temperature" | "temperature_celsius" | "temperature_fahrenheit" | "temperature_measurement" | "temperature_type" | "three_zone_heart_rate_limits" | "time_accuracy" | "time_broadcast" | "time_source" | "time_update_control_point" | "time_update_state" | "time_with_dst" | "time_zone" | "training_status" | "treadmill_data" | "true_wind_direction" | "true_wind_speed" | "two_zone_heart_rate_limit" | "tx_power_level" | "uncertainty" | "unread_alert_status" | "uri" | "user_control_point" | "user_index" | "uv_index" | "vo2_max" | "waist_circumference" | "weight" | "weight_measurement" | "weight_scale_feature" | "wind_chill" | undefined
794
+ ```
795
+
796
+ #### gattCharacteristicPresentationFormatFromDataView
797
+
798
+ <a id="api-gattcharacteristicpresentationformatfromdataview"></a>
799
+
800
+ ```typescript
801
+ function gattCharacteristicPresentationFormatFromDataView(dataView: DataView | DataViewReader, indexStart?: number): GattCharacteristicPresentationFormat;
802
+ ```
803
+
804
+ Parse from a DataView into [GattCharacteristicPresentationFormat](#api-gattcharacteristicpresentationformat).
805
+
806
+
807
+ #### gattDescriptorName
808
+
809
+ <a id="api-gattdescriptorname"></a>
810
+
811
+ ```typescript
812
+ gattDescriptorName: (idOrName: string | number | null | undefined) => "es_configuration" | "es_measurement" | "es_trigger_setting" | "external_report_reference" | "gatt.characteristic_aggregate_format" | "gatt.characteristic_extended_properties" | "gatt.characteristic_presentation_format" | "gatt.characteristic_user_description" | "gatt.client_characteristic_configuration" | "gatt.server_characteristic_configuration" | "number_of_digitals" | "report_reference" | "time_trigger_setting" | "valid_range" | "value_trigger_setting" | undefined
813
+ ```
814
+
815
+ #### gattServiceName
816
+
817
+ <a id="api-gattservicename"></a>
818
+
819
+ ```typescript
820
+ gattServiceName: (idOrName: string | number | null | undefined) => "alert_notification" | "automation_io" | "battery_service" | "blood_pressure" | "body_composition" | "bond_management" | "continuous_glucose_monitoring" | "current_time" | "cycling_power" | "cycling_speed_and_cadence" | "device_information" | "environmental_sensing" | "fitness_machine" | "generic_access" | "generic_attribute" | "glucose" | "health_thermometer" | "heart_rate" | "http_proxy" | "human_interface_device" | "immediate_alert" | "indoor_positioning" | "internet_protocol_support" | "link_loss" | "location_and_navigation" | "mesh_provisioning" | "mesh_proxy" | "next_dst_change" | "object_transfer" | "phone_alert_status" | "pulse_oximeter" | "reconnection_configuration" | "reference_time_update" | "running_speed_and_cadence" | "scan_parameters" | "transport_discovery" | "tx_power" | "user_data" | "weight_scale" | undefined
821
+ ```
822
+
823
+ #### glucoseFeatureFromDataView
824
+
825
+ <a id="api-glucosefeaturefromdataview"></a>
826
+
827
+ ```typescript
828
+ function glucoseFeatureFromDataView(dataView: DataView | DataViewReader, indexStart?: number): GlucoseFeature;
829
+ ```
830
+
831
+ Parse from a DataView into [GlucoseFeature](#api-glucosefeature).
832
+
833
+
834
+ #### glucoseMeasurementContextFromDataView
835
+
836
+ <a id="api-glucosemeasurementcontextfromdataview"></a>
837
+
838
+ ```typescript
839
+ function glucoseMeasurementContextFromDataView(dataView: DataView | DataViewReader, indexStart?: number): GlucoseMeasurementContext;
840
+ ```
841
+
842
+ Parse from a DataView into [GlucoseMeasurementContext](#api-glucosemeasurementcontext).
843
+
844
+
845
+ #### glucoseMeasurementFromDataView
846
+
847
+ <a id="api-glucosemeasurementfromdataview"></a>
848
+
849
+ ```typescript
850
+ function glucoseMeasurementFromDataView(dataView: DataView | DataViewReader, indexStart?: number): GlucoseMeasurement;
851
+ ```
852
+
853
+ Parse from a DataView into [GlucoseMeasurement](#api-glucosemeasurement).
854
+
855
+
856
+ #### hardwareRevisionStringFromDataView
857
+
858
+ <a id="api-hardwarerevisionstringfromdataview"></a>
859
+
860
+ ```typescript
861
+ function hardwareRevisionStringFromDataView(dataView: DataView | DataViewReader, indexStart?: number): HardwareRevisionString;
862
+ ```
863
+
864
+ Parse from a DataView into [HardwareRevisionString](#api-hardwarerevisionstring).
865
+
866
+
867
+ #### heartRateControlPointFromDataView
868
+
869
+ <a id="api-heartratecontrolpointfromdataview"></a>
870
+
871
+ ```typescript
872
+ function heartRateControlPointFromDataView(dataView: DataView | DataViewReader, indexStart?: number): HeartRateControlPoint;
873
+ ```
874
+
875
+ Parse from a DataView into [HeartRateControlPoint](#api-heartratecontrolpoint).
876
+
877
+
878
+ #### heartRateMaxFromDataView
879
+
880
+ <a id="api-heartratemaxfromdataview"></a>
881
+
882
+ ```typescript
883
+ function heartRateMaxFromDataView(dataView: DataView | DataViewReader, indexStart?: number): HeartRateMax;
884
+ ```
885
+
886
+ Parse from a DataView into [HeartRateMax](#api-heartratemax).
887
+
888
+
889
+ #### heartRateMeasurementFromDataView
890
+
891
+ <a id="api-heartratemeasurementfromdataview"></a>
892
+
893
+ ```typescript
894
+ function heartRateMeasurementFromDataView(dataView: DataView | DataViewReader, indexStart?: number): HeartRateMeasurement;
895
+ ```
896
+
897
+ Parse from a DataView into [HeartRateMeasurement](#api-heartratemeasurement).
898
+
899
+
900
+ #### indoorBikeDataFromDataView
901
+
902
+ <a id="api-indoorbikedatafromdataview"></a>
903
+
904
+ ```typescript
905
+ function indoorBikeDataFromDataView(dataView: DataView | DataViewReader, indexStart?: number): IndoorBikeData;
906
+ ```
907
+
908
+ Parse from a DataView into [IndoorBikeData](#api-indoorbikedata).
909
+
910
+
911
+ #### isDataViewReader
912
+
913
+ <a id="api-isdataviewreader"></a>
914
+
915
+ ```typescript
916
+ isDataViewReader: (value: unknown) => value is DataViewReader
917
+ ```
918
+
919
+ #### isGattCharacteristicName
920
+
921
+ <a id="api-isgattcharacteristicname"></a>
922
+
923
+ ```typescript
924
+ isGattCharacteristicName: (value: unknown) => value is "string" | "current_time" | "aerobic_heart_rate_lower_limit" | "aerobic_heart_rate_upper_limit" | "aerobic_threshold" | "age" | "aggregate" | "alert_category_id" | "alert_category_id_bit_mask" | "alert_level" | "alert_notification_control_point" | "alert_status" | "altitude" | "anaerobic_heart_rate_lower_limit" | "anaerobic_heart_rate_upper_limit" | "anaerobic_threshold" | "analog" | "analog_output" | "apparent_wind_direction" | "apparent_wind_speed" | "barometric_pressure_trend" | "battery_level" | "battery_level_state" | "battery_power_state" | "blood_pressure_feature" | "blood_pressure_measurement" | "body_composition_feature" | "body_composition_measurement" | "body_sensor_location" | "bond_management_control_point" | "bond_management_feature" | "boot_keyboard_input_report" | "boot_keyboard_output_report" | "boot_mouse_input_report" | "cgm_feature" | "cgm_measurement" | "cgm_session_run_time" | "cgm_session_start_time" | "cgm_specific_ops_control_point" | "cgm_status" | "cross_trainer_data" | "csc_feature" | "csc_measurement" | "cycling_power_control_point" | "cycling_power_feature" | "cycling_power_measurement" | "cycling_power_vector" | "database_change_increment" | "date_of_birth" | "date_of_threshold_assessment" | "date_time" | "date_utc" | "day_date_time" | "day_of_week" | "descriptor_value_changed" | "dew_point" | "digital" | "digital_output" | "dst_offset" | "elevation" | "email_address" | "exact_time_100" | "exact_time_256" | "fat_burn_heart_rate_lower_limit" | "fat_burn_heart_rate_upper_limit" | "firmware_revision_string" | "first_name" | "fitness_machine_control_point" | "fitness_machine_feature" | "fitness_machine_status" | "five_zone_heart_rate_limits" | "floor_number" | "gap.appearance" | "gap.central_address_resolution_support" | "gap.device_name" | "gap.peripheral_preferred_connection_parameters" | "gap.peripheral_privacy_flag" | "gap.reconnection_address" | "gatt.service_changed" | "gender" | "glucose_feature" | "glucose_measurement" | "glucose_measurement_context" | "gust_factor" | "hardware_revision_string" | "heart_rate_control_point" | "heart_rate_max" | "heart_rate_measurement" | "heat_index" | "height" | "hid_control_point" | "hid_information" | "hip_circumference" | "http_control_point" | "http_entity_body" | "http_headers" | "http_status_code" | "https_security" | "humidity" | "ieee_11073-20601_regulatory_certification_data_list" | "indoor_bike_data" | "indoor_positioning_configuration" | "intermediate_cuff_pressure" | "intermediate_temperature" | "irradiance" | "language" | "last_name" | "latitude" | "ln_control_point" | "ln_feature" | "local_east_coordinate.xml" | "local_north_coordinate" | "local_time_information" | "location_and_speed" | "location_name" | "longitude" | "magnetic_declination" | "magnetic_flux_density_2D" | "magnetic_flux_density_3D" | "manufacturer_name_string" | "maximum_recommended_heart_rate" | "measurement_interval" | "model_number_string" | "navigation" | "network_availability" | "new_alert" | "object_action_control_point" | "object_changed" | "object_first_created" | "object_id" | "object_last_modified" | "object_list_control_point" | "object_list_filter" | "object_name" | "object_properties" | "object_size" | "object_type" | "ots_feature" | "plx_continuous_measurement" | "plx_features" | "plx_spot_check_measurement" | "pnp_id" | "pollen_concentration" | "position_2d" | "position_3d" | "position_quality" | "pressure" | "protocol_mode" | "pulse_oximetry_control_point" | "rainfall" | "record_access_control_point" | "reference_time_information" | "removable" | "report" | "report_map" | "resolvable_private_address_only" | "resting_heart_rate" | "ringer_control_point" | "ringer_setting" | "rower_data" | "rsc_feature" | "rsc_measurement" | "sc_control_point" | "scan_interval_window" | "scan_refresh" | "scientific_temperature_celsius" | "secondary_time_zone" | "sensor_location" | "serial_number_string" | "service_required" | "software_revision_string" | "sport_type_for_aerobic_and_anaerobic_thresholds" | "stair_climber_data" | "step_climber_data" | "supported_heart_rate_range" | "supported_inclination_range" | "supported_new_alert_category" | "supported_power_range" | "supported_resistance_level_range" | "supported_speed_range" | "supported_unread_alert_category" | "system_id" | "tds_control_point" | "temperature" | "temperature_celsius" | "temperature_fahrenheit" | "temperature_measurement" | "temperature_type" | "three_zone_heart_rate_limits" | "time_accuracy" | "time_broadcast" | "time_source" | "time_update_control_point" | "time_update_state" | "time_with_dst" | "time_zone" | "training_status" | "treadmill_data" | "true_wind_direction" | "true_wind_speed" | "two_zone_heart_rate_limit" | "tx_power_level" | "uncertainty" | "unread_alert_status" | "uri" | "user_control_point" | "user_index" | "uv_index" | "vo2_max" | "waist_circumference" | "weight" | "weight_measurement" | "weight_scale_feature" | "wind_chill"
925
+ ```
926
+
927
+ #### isGattDescriptorName
928
+
929
+ <a id="api-isgattdescriptorname"></a>
930
+
931
+ ```typescript
932
+ isGattDescriptorName: (value: unknown) => value is "es_configuration" | "es_measurement" | "es_trigger_setting" | "external_report_reference" | "gatt.characteristic_aggregate_format" | "gatt.characteristic_extended_properties" | "gatt.characteristic_presentation_format" | "gatt.characteristic_user_description" | "gatt.client_characteristic_configuration" | "gatt.server_characteristic_configuration" | "number_of_digitals" | "report_reference" | "time_trigger_setting" | "valid_range" | "value_trigger_setting"
933
+ ```
934
+
935
+ #### isGattServiceName
936
+
937
+ <a id="api-isgattservicename"></a>
938
+
939
+ ```typescript
940
+ isGattServiceName: (value: unknown) => value is "alert_notification" | "automation_io" | "battery_service" | "blood_pressure" | "body_composition" | "bond_management" | "continuous_glucose_monitoring" | "current_time" | "cycling_power" | "cycling_speed_and_cadence" | "device_information" | "environmental_sensing" | "fitness_machine" | "generic_access" | "generic_attribute" | "glucose" | "health_thermometer" | "heart_rate" | "http_proxy" | "human_interface_device" | "immediate_alert" | "indoor_positioning" | "internet_protocol_support" | "link_loss" | "location_and_navigation" | "mesh_provisioning" | "mesh_proxy" | "next_dst_change" | "object_transfer" | "phone_alert_status" | "pulse_oximeter" | "reconnection_configuration" | "reference_time_update" | "running_speed_and_cadence" | "scan_parameters" | "transport_discovery" | "tx_power" | "user_data" | "weight_scale"
941
+ ```
942
+
943
+ #### languageFromDataView
944
+
945
+ <a id="api-languagefromdataview"></a>
946
+
947
+ ```typescript
948
+ function languageFromDataView(dataView: DataView | DataViewReader, indexStart?: number): Language;
949
+ ```
950
+
951
+ Parse from a DataView into [Language](#api-language).
952
+
953
+
954
+ #### latitudeFromDataView
955
+
956
+ <a id="api-latitudefromdataview"></a>
957
+
958
+ ```typescript
959
+ function latitudeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): Latitude;
960
+ ```
961
+
962
+ Parse from a DataView into [Latitude](#api-latitude).
963
+
964
+
965
+ #### localTimeInformationFromDataView
966
+
967
+ <a id="api-localtimeinformationfromdataview"></a>
968
+
969
+ ```typescript
970
+ function localTimeInformationFromDataView(dataView: DataView | DataViewReader, indexStart?: number): LocalTimeInformation;
971
+ ```
972
+
973
+ Parse from a DataView into [LocalTimeInformation](#api-localtimeinformation).
974
+
975
+
976
+ #### locationAndSpeedFromDataView
977
+
978
+ <a id="api-locationandspeedfromdataview"></a>
979
+
980
+ ```typescript
981
+ function locationAndSpeedFromDataView(dataView: DataView | DataViewReader, indexStart?: number): LocationAndSpeed;
982
+ ```
983
+
984
+ Parse from a DataView into [LocationAndSpeed](#api-locationandspeed).
985
+
986
+
987
+ #### locationNameFromDataView
988
+
989
+ <a id="api-locationnamefromdataview"></a>
990
+
991
+ ```typescript
992
+ function locationNameFromDataView(dataView: DataView | DataViewReader, indexStart?: number): LocationName;
993
+ ```
994
+
995
+ Parse from a DataView into [LocationName](#api-locationname).
996
+
997
+
998
+ #### longitudeFromDataView
999
+
1000
+ <a id="api-longitudefromdataview"></a>
1001
+
1002
+ ```typescript
1003
+ function longitudeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): Longitude;
1004
+ ```
1005
+
1006
+ Parse from a DataView into [Longitude](#api-longitude).
1007
+
1008
+
1009
+ #### manufacturerNameStringFromDataView
1010
+
1011
+ <a id="api-manufacturernamestringfromdataview"></a>
1012
+
1013
+ ```typescript
1014
+ function manufacturerNameStringFromDataView(dataView: DataView | DataViewReader, indexStart?: number): ManufacturerNameString;
1015
+ ```
1016
+
1017
+ Parse from a DataView into [ManufacturerNameString](#api-manufacturernamestring).
1018
+
1019
+
1020
+ #### maximumRecommendedHeartRateFromDataView
1021
+
1022
+ <a id="api-maximumrecommendedheartratefromdataview"></a>
1023
+
1024
+ ```typescript
1025
+ function maximumRecommendedHeartRateFromDataView(dataView: DataView | DataViewReader, indexStart?: number): MaximumRecommendedHeartRate;
1026
+ ```
1027
+
1028
+ Parse from a DataView into [MaximumRecommendedHeartRate](#api-maximumrecommendedheartrate).
1029
+
1030
+
1031
+ #### measurementIntervalFromDataView
1032
+
1033
+ <a id="api-measurementintervalfromdataview"></a>
1034
+
1035
+ ```typescript
1036
+ function measurementIntervalFromDataView(dataView: DataView | DataViewReader, indexStart?: number): MeasurementInterval;
1037
+ ```
1038
+
1039
+ Parse from a DataView into [MeasurementInterval](#api-measurementinterval).
1040
+
1041
+
1042
+ #### modelNumberStringFromDataView
1043
+
1044
+ <a id="api-modelnumberstringfromdataview"></a>
1045
+
1046
+ ```typescript
1047
+ function modelNumberStringFromDataView(dataView: DataView | DataViewReader, indexStart?: number): ModelNumberString;
1048
+ ```
1049
+
1050
+ Parse from a DataView into [ModelNumberString](#api-modelnumberstring).
1051
+
1052
+
1053
+ #### navigationFromDataView
1054
+
1055
+ <a id="api-navigationfromdataview"></a>
1056
+
1057
+ ```typescript
1058
+ function navigationFromDataView(dataView: DataView | DataViewReader, indexStart?: number): Navigation;
1059
+ ```
1060
+
1061
+ Parse from a DataView into [Navigation](#api-navigation).
1062
+
1063
+
1064
+ #### numberOfDigitalsFromDataView
1065
+
1066
+ <a id="api-numberofdigitalsfromdataview"></a>
1067
+
1068
+ ```typescript
1069
+ function numberOfDigitalsFromDataView(dataView: DataView | DataViewReader, indexStart?: number): NumberOfDigitals;
1070
+ ```
1071
+
1072
+ Parse from a DataView into [NumberOfDigitals](#api-numberofdigitals).
1073
+
1074
+
1075
+ #### parseHeartRate
1076
+
1077
+ <a id="api-parseheartrate"></a>
1078
+
1079
+ ```typescript
1080
+ parseHeartRate: (viewOrHex: DataView | string) => HeartRateMeasurement
1081
+ ```
1082
+
1083
+ #### plxContinuousMeasurementFromDataView
1084
+
1085
+ <a id="api-plxcontinuousmeasurementfromdataview"></a>
1086
+
1087
+ ```typescript
1088
+ function plxContinuousMeasurementFromDataView(dataView: DataView | DataViewReader, indexStart?: number): PlxContinuousMeasurement;
1089
+ ```
1090
+
1091
+ Parse from a DataView into [PlxContinuousMeasurement](#api-plxcontinuousmeasurement).
1092
+
1093
+
1094
+ #### plxFeaturesFromDataView
1095
+
1096
+ <a id="api-plxfeaturesfromdataview"></a>
1097
+
1098
+ ```typescript
1099
+ function plxFeaturesFromDataView(dataView: DataView | DataViewReader, indexStart?: number): PlxFeatures;
1100
+ ```
1101
+
1102
+ Parse from a DataView into [PlxFeatures](#api-plxfeatures).
1103
+
1104
+
1105
+ #### plxSpotCheckMeasurementFromDataView
1106
+
1107
+ <a id="api-plxspotcheckmeasurementfromdataview"></a>
1108
+
1109
+ ```typescript
1110
+ function plxSpotCheckMeasurementFromDataView(dataView: DataView | DataViewReader, indexStart?: number): PlxSpotCheckMeasurement;
1111
+ ```
1112
+
1113
+ Parse from a DataView into [PlxSpotCheckMeasurement](#api-plxspotcheckmeasurement).
1114
+
1115
+
1116
+ #### referenceTimeInformationFromDataView
1117
+
1118
+ <a id="api-referencetimeinformationfromdataview"></a>
1119
+
1120
+ ```typescript
1121
+ function referenceTimeInformationFromDataView(dataView: DataView | DataViewReader, indexStart?: number): ReferenceTimeInformation;
1122
+ ```
1123
+
1124
+ Parse from a DataView into [ReferenceTimeInformation](#api-referencetimeinformation).
1125
+
1126
+
1127
+ #### restingHeartRateFromDataView
1128
+
1129
+ <a id="api-restingheartratefromdataview"></a>
1130
+
1131
+ ```typescript
1132
+ function restingHeartRateFromDataView(dataView: DataView | DataViewReader, indexStart?: number): RestingHeartRate;
1133
+ ```
1134
+
1135
+ Parse from a DataView into [RestingHeartRate](#api-restingheartrate).
1136
+
1137
+
1138
+ #### rscFeatureFromDataView
1139
+
1140
+ <a id="api-rscfeaturefromdataview"></a>
1141
+
1142
+ ```typescript
1143
+ function rscFeatureFromDataView(dataView: DataView | DataViewReader, indexStart?: number): RscFeature;
1144
+ ```
1145
+
1146
+ Parse from a DataView into [RscFeature](#api-rscfeature).
1147
+
1148
+
1149
+ #### rscMeasurementFromDataView
1150
+
1151
+ <a id="api-rscmeasurementfromdataview"></a>
1152
+
1153
+ ```typescript
1154
+ function rscMeasurementFromDataView(dataView: DataView | DataViewReader, indexStart?: number): RscMeasurement;
1155
+ ```
1156
+
1157
+ Parse from a DataView into [RscMeasurement](#api-rscmeasurement).
1158
+
1159
+
1160
+ #### sensorLocationFromDataView
1161
+
1162
+ <a id="api-sensorlocationfromdataview"></a>
1163
+
1164
+ ```typescript
1165
+ function sensorLocationFromDataView(dataView: DataView | DataViewReader, indexStart?: number): SensorLocation;
1166
+ ```
1167
+
1168
+ Parse from a DataView into [SensorLocation](#api-sensorlocation).
1169
+
1170
+
1171
+ #### serialNumberStringFromDataView
1172
+
1173
+ <a id="api-serialnumberstringfromdataview"></a>
1174
+
1175
+ ```typescript
1176
+ function serialNumberStringFromDataView(dataView: DataView | DataViewReader, indexStart?: number): SerialNumberString;
1177
+ ```
1178
+
1179
+ Parse from a DataView into [SerialNumberString](#api-serialnumberstring).
1180
+
1181
+
1182
+ #### softwareRevisionStringFromDataView
1183
+
1184
+ <a id="api-softwarerevisionstringfromdataview"></a>
1185
+
1186
+ ```typescript
1187
+ function softwareRevisionStringFromDataView(dataView: DataView | DataViewReader, indexStart?: number): SoftwareRevisionString;
1188
+ ```
1189
+
1190
+ Parse from a DataView into [SoftwareRevisionString](#api-softwarerevisionstring).
1191
+
1192
+
1193
+ #### supportedHeartRateRangeFromDataView
1194
+
1195
+ <a id="api-supportedheartraterangefromdataview"></a>
1196
+
1197
+ ```typescript
1198
+ function supportedHeartRateRangeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): SupportedHeartRateRange;
1199
+ ```
1200
+
1201
+ Parse from a DataView into [SupportedHeartRateRange](#api-supportedheartraterange).
1202
+
1203
+
1204
+ #### supportedInclinationRangeFromDataView
1205
+
1206
+ <a id="api-supportedinclinationrangefromdataview"></a>
1207
+
1208
+ ```typescript
1209
+ function supportedInclinationRangeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): SupportedInclinationRange;
1210
+ ```
1211
+
1212
+ Parse from a DataView into [SupportedInclinationRange](#api-supportedinclinationrange).
1213
+
1214
+
1215
+ #### supportedSpeedRangeFromDataView
1216
+
1217
+ <a id="api-supportedspeedrangefromdataview"></a>
1218
+
1219
+ ```typescript
1220
+ function supportedSpeedRangeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): SupportedSpeedRange;
1221
+ ```
1222
+
1223
+ Parse from a DataView into [SupportedSpeedRange](#api-supportedspeedrange).
1224
+
1225
+
1226
+ #### systemIdFromDataView
1227
+
1228
+ <a id="api-systemidfromdataview"></a>
1229
+
1230
+ ```typescript
1231
+ function systemIdFromDataView(dataView: DataView | DataViewReader, indexStart?: number): SystemId;
1232
+ ```
1233
+
1234
+ Parse from a DataView into [SystemId](#api-systemid).
1235
+
1236
+
1237
+ #### temperatureFromDataView
1238
+
1239
+ <a id="api-temperaturefromdataview"></a>
1240
+
1241
+ ```typescript
1242
+ function temperatureFromDataView(dataView: DataView | DataViewReader, indexStart?: number): Temperature;
1243
+ ```
1244
+
1245
+ Parse from a DataView into [Temperature](#api-temperature).
1246
+
1247
+
1248
+ #### temperatureMeasurementFromDataView
1249
+
1250
+ <a id="api-temperaturemeasurementfromdataview"></a>
1251
+
1252
+ ```typescript
1253
+ function temperatureMeasurementFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TemperatureMeasurement;
1254
+ ```
1255
+
1256
+ Parse from a DataView into [TemperatureMeasurement](#api-temperaturemeasurement).
1257
+
1258
+
1259
+ #### temperatureTypeFromDataView
1260
+
1261
+ <a id="api-temperaturetypefromdataview"></a>
1262
+
1263
+ ```typescript
1264
+ function temperatureTypeFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TemperatureType;
1265
+ ```
1266
+
1267
+ Parse from a DataView into [TemperatureType](#api-temperaturetype).
1268
+
1269
+
1270
+ #### threeZoneHeartRateLimitsFromDataView
1271
+
1272
+ <a id="api-threezoneheartratelimitsfromdataview"></a>
1273
+
1274
+ ```typescript
1275
+ function threeZoneHeartRateLimitsFromDataView(dataView: DataView | DataViewReader, indexStart?: number): ThreeZoneHeartRateLimits;
1276
+ ```
1277
+
1278
+ Parse from a DataView into [ThreeZoneHeartRateLimits](#api-threezoneheartratelimits).
1279
+
1280
+
1281
+ #### timeAccuracyFromDataView
1282
+
1283
+ <a id="api-timeaccuracyfromdataview"></a>
1284
+
1285
+ ```typescript
1286
+ function timeAccuracyFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TimeAccuracy;
1287
+ ```
1288
+
1289
+ Parse from a DataView into [TimeAccuracy](#api-timeaccuracy).
1290
+
1291
+
1292
+ #### timeSourceFromDataView
1293
+
1294
+ <a id="api-timesourcefromdataview"></a>
1295
+
1296
+ ```typescript
1297
+ function timeSourceFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TimeSource;
1298
+ ```
1299
+
1300
+ Parse from a DataView into [TimeSource](#api-timesource).
1301
+
1302
+
1303
+ #### timeUpdateControlPointFromDataView
1304
+
1305
+ <a id="api-timeupdatecontrolpointfromdataview"></a>
1306
+
1307
+ ```typescript
1308
+ function timeUpdateControlPointFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TimeUpdateControlPoint;
1309
+ ```
1310
+
1311
+ Parse from a DataView into [TimeUpdateControlPoint](#api-timeupdatecontrolpoint).
1312
+
1313
+
1314
+ #### timeUpdateStateFromDataView
1315
+
1316
+ <a id="api-timeupdatestatefromdataview"></a>
1317
+
1318
+ ```typescript
1319
+ function timeUpdateStateFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TimeUpdateState;
1320
+ ```
1321
+
1322
+ Parse from a DataView into [TimeUpdateState](#api-timeupdatestate).
1323
+
1324
+
1325
+ #### timeWithDstFromDataView
1326
+
1327
+ <a id="api-timewithdstfromdataview"></a>
1328
+
1329
+ ```typescript
1330
+ function timeWithDstFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TimeWithDst;
1331
+ ```
1332
+
1333
+ Parse from a DataView into [TimeWithDst](#api-timewithdst).
1334
+
1335
+
1336
+ #### timeZoneFromDataView
1337
+
1338
+ <a id="api-timezonefromdataview"></a>
1339
+
1340
+ ```typescript
1341
+ function timeZoneFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TimeZone;
1342
+ ```
1343
+
1344
+ Parse from a DataView into [TimeZone](#api-timezone).
1345
+
1346
+
1347
+ #### treadmillDataFromDataView
1348
+
1349
+ <a id="api-treadmilldatafromdataview"></a>
1350
+
1351
+ ```typescript
1352
+ function treadmillDataFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TreadmillData;
1353
+ ```
1354
+
1355
+ Parse from a DataView into [TreadmillData](#api-treadmilldata).
1356
+
1357
+
1358
+ #### twoZoneHeartRateLimitFromDataView
1359
+
1360
+ <a id="api-twozoneheartratelimitfromdataview"></a>
1361
+
1362
+ ```typescript
1363
+ function twoZoneHeartRateLimitFromDataView(dataView: DataView | DataViewReader, indexStart?: number): TwoZoneHeartRateLimit;
1364
+ ```
1365
+
1366
+ Parse from a DataView into [TwoZoneHeartRateLimit](#api-twozoneheartratelimit).
1367
+
1368
+
1369
+ #### vo2MaxFromDataView
1370
+
1371
+ <a id="api-vo2maxfromdataview"></a>
1372
+
1373
+ ```typescript
1374
+ function vo2MaxFromDataView(dataView: DataView | DataViewReader, indexStart?: number): Vo2Max;
1375
+ ```
1376
+
1377
+ Parse from a DataView into [Vo2Max](#api-vo2max).
1378
+
1379
+
1380
+ ### Interfaces
1381
+
1382
+ #### BatteryLevel
1383
+
1384
+ <a id="api-batterylevel"></a>
1385
+
1386
+ ```typescript
1387
+ export interface BatteryLevel
1388
+ ```
1389
+
1390
+ <p>The current charge level of a battery. 100% represents fully charged while 0% represents fully discharged.</p>
1391
+
1392
+
1393
+ #### CrossTrainerData
1394
+
1395
+ <a id="api-crosstrainerdata"></a>
1396
+
1397
+ ```typescript
1398
+ export interface CrossTrainerData
1399
+ ```
1400
+
1401
+ <p>The Cross Trainer Data characteristic is used to send training-related data to the Client from a cross trainer (Server).</p>
1402
+
1403
+
1404
+ #### CscFeature
1405
+
1406
+ <a id="api-cscfeature"></a>
1407
+
1408
+ ```typescript
1409
+ export interface CscFeature
1410
+ ```
1411
+
1412
+ <p>The CSC (Cycling Speed and Cadence) Feature characteristic is used to describe the supported features of the Server.</p>
1413
+
1414
+
1415
+ #### CscMeasurement
1416
+
1417
+ <a id="api-cscmeasurement"></a>
1418
+
1419
+ ```typescript
1420
+ export interface CscMeasurement
1421
+ ```
1422
+
1423
+ <p>The CSC Measurement characteristic (CSC refers to Cycling Speed and Cadence) is a variable length structure containing a Flags field and, based on the contents of the Flags field, may contain one or more additional fields as shown in the tables below.</p>
1424
+
1425
+
1426
+ #### CurrentTime
1427
+
1428
+ <a id="api-currenttime"></a>
1429
+
1430
+ ```typescript
1431
+ export interface CurrentTime
1432
+ ```
1433
+
1434
+ #### DataViewReader
1435
+
1436
+ <a id="api-dataviewreader"></a>
1437
+
1438
+ ```typescript
1439
+ export interface DataViewReader
1440
+ ```
1441
+
1442
+ #### DateTime
1443
+
1444
+ <a id="api-datetime"></a>
1445
+
1446
+ ```typescript
1447
+ export interface DateTime
1448
+ ```
1449
+
1450
+ <p>The Date Time characteristic is used to represent time.</p> <p>The Date Time characteristic contains fields for year, month, day, hours, minutes and seconds. Calendar days in Date Time are represented using Gregorian calendar. Hours in Date Time are represented in the 24h system.</p>
1451
+
1452
+
1453
+ #### DayDateTime
1454
+
1455
+ <a id="api-daydatetime"></a>
1456
+
1457
+ ```typescript
1458
+ export interface DayDateTime
1459
+ ```
1460
+
1461
+ #### DayOfWeek
1462
+
1463
+ <a id="api-dayofweek"></a>
1464
+
1465
+ ```typescript
1466
+ export interface DayOfWeek
1467
+ ```
1468
+
1469
+ #### DstOffset
1470
+
1471
+ <a id="api-dstoffset"></a>
1472
+
1473
+ ```typescript
1474
+ export interface DstOffset
1475
+ ```
1476
+
1477
+ #### Elevation
1478
+
1479
+ <a id="api-elevation"></a>
1480
+
1481
+ ```typescript
1482
+ export interface Elevation
1483
+ ```
1484
+
1485
+ #### ExactTime256
1486
+
1487
+ <a id="api-exacttime256"></a>
1488
+
1489
+ ```typescript
1490
+ export interface ExactTime256
1491
+ ```
1492
+
1493
+ #### FirmwareRevisionString
1494
+
1495
+ <a id="api-firmwarerevisionstring"></a>
1496
+
1497
+ ```typescript
1498
+ export interface FirmwareRevisionString
1499
+ ```
1500
+
1501
+ <p>The value of this characteristic is a UTF-8 string representing the firmware revision for the firmware within the device.</p>
1502
+
1503
+
1504
+ #### FiveZoneHeartRateLimits
1505
+
1506
+ <a id="api-fivezoneheartratelimits"></a>
1507
+
1508
+ ```typescript
1509
+ export interface FiveZoneHeartRateLimits
1510
+ ```
1511
+
1512
+ <p>Data structure containing the limits between the heart rate zones for the 5-zone heart rate definition (Maximum, Hard, Moderate, Light and Very Light).</p>
1513
+
1514
+
1515
+ #### GattCharacteristicPresentationFormat
1516
+
1517
+ <a id="api-gattcharacteristicpresentationformat"></a>
1518
+
1519
+ ```typescript
1520
+ export interface GattCharacteristicPresentationFormat
1521
+ ```
1522
+
1523
+ <p>The Characteristic Presentation Format descriptor defines the format of the Characteristic Value.</p> <p>When encoding an IPv4 address, the uint32 Format type is used.</p> <p>When encoding an IPv6 address, the uint128 Format type is used.</p> <p>When encoding a Bluetooth address (BD_ADDR), the uint48 Format type is used.</p> <p>For a Characteristic Value of 23 and an Exponent of 2, the actual value is 2300</p> <p>For a Characteristi Value of 3892 and an Exponent of -3, the actual value is 3.892</p> <p>One or more Characteristic Presentation Format descriptors may be present. If multiple of these descriptors are present, then a Aggregate Formate descriptor is present. This descriptor is read only and does not require authentication or authorization to read. This descriptor is composed of five parts: format, exponent, unit, name space and description. The Format field determines how a single value contained in the Characteristic Value is formatted. The Exponent field is used with interger data types to determine how the Characteristic Value is furhter formatted. The actual value = Characteristic Value * 10^Exponent.</p>
1524
+
1525
+
1526
+ #### GlucoseFeature
1527
+
1528
+ <a id="api-glucosefeature"></a>
1529
+
1530
+ ```typescript
1531
+ export interface GlucoseFeature
1532
+ ```
1533
+
1534
+ <p>The Glucose Feature characteristic is used to describe the supported features of the Server. When read, the Glucose Feature characteristic returns a value that is used by a Client to determine the supported features of the Server.</p>
1535
+
1536
+
1537
+ #### GlucoseMeasurement
1538
+
1539
+ <a id="api-glucosemeasurement"></a>
1540
+
1541
+ ```typescript
1542
+ export interface GlucoseMeasurement
1543
+ ```
1544
+
1545
+ <p>The Glucose Measurement characteristic is a variable length structure containing a Flags field, a Sequence Number field, a Base Time field and, based upon the contents of the Flags field, may contain a Time Offset field, Glucose Concentration field, Type-Sample Location field and a Sensor Status Annunciation field.</p>
1546
+
1547
+
1548
+ #### GlucoseMeasurementContext
1549
+
1550
+ <a id="api-glucosemeasurementcontext"></a>
1551
+
1552
+ ```typescript
1553
+ export interface GlucoseMeasurementContext
1554
+ ```
1555
+
1556
+ <p>The Glucose Measurement Context characteristic is a variable length structure containing a Flags field, a Sequence Number field and, based upon the contents of the Flags field, may contain a Carbohydrate ID field, Carbohydrate field, Meal field, Tester-Health field, Exercise Duration field, Exercise Intensity field, Medication ID field, Medication field and a HbA1c field.</p>
1557
+
1558
+
1559
+ #### HardwareRevisionString
1560
+
1561
+ <a id="api-hardwarerevisionstring"></a>
1562
+
1563
+ ```typescript
1564
+ export interface HardwareRevisionString
1565
+ ```
1566
+
1567
+ <p>The value of this characteristic is a UTF-8 string representing the hardware revision for the hardware within the device.</p>
1568
+
1569
+
1570
+ #### HeartRateControlPoint
1571
+
1572
+ <a id="api-heartratecontrolpoint"></a>
1573
+
1574
+ ```typescript
1575
+ export interface HeartRateControlPoint
1576
+ ```
1577
+
1578
+ #### HeartRateMax
1579
+
1580
+ <a id="api-heartratemax"></a>
1581
+
1582
+ ```typescript
1583
+ export interface HeartRateMax
1584
+ ```
1585
+
1586
+ <p>Maximum heart rate a user can reach.</p>
1587
+
1588
+
1589
+ #### HeartRateMeasurement
1590
+
1591
+ <a id="api-heartratemeasurement"></a>
1592
+
1593
+ ```typescript
1594
+ export interface HeartRateMeasurement
1595
+ ```
1596
+
1597
+ #### IndoorBikeData
1598
+
1599
+ <a id="api-indoorbikedata"></a>
1600
+
1601
+ ```typescript
1602
+ export interface IndoorBikeData
1603
+ ```
1604
+
1605
+ <p>The Indoor Bike Data characteristic is used to send training-related data to the Client from an indoor bike (Server).</p>
1606
+
1607
+
1608
+ #### Language
1609
+
1610
+ <a id="api-language"></a>
1611
+
1612
+ ```typescript
1613
+ export interface Language
1614
+ ```
1615
+
1616
+ #### Latitude
1617
+
1618
+ <a id="api-latitude"></a>
1619
+
1620
+ ```typescript
1621
+ export interface Latitude
1622
+ ```
1623
+
1624
+ <p>The Latitude characteristic describes the WGS84 North coordinate of the device.</p>
1625
+
1626
+
1627
+ #### LocalTimeInformation
1628
+
1629
+ <a id="api-localtimeinformation"></a>
1630
+
1631
+ ```typescript
1632
+ export interface LocalTimeInformation
1633
+ ```
1634
+
1635
+ #### LocationAndSpeed
1636
+
1637
+ <a id="api-locationandspeed"></a>
1638
+
1639
+ ```typescript
1640
+ export interface LocationAndSpeed
1641
+ ```
1642
+
1643
+ <p>The Location and Speed characteristic is a variable length structure containing a Flags field and, based on the contents of the Flags field, may contain a combination of data fields listed below. Note that it is possible for this characteristic to exceed the default LE MTU size.</p>
1644
+
1645
+
1646
+ #### LocationName
1647
+
1648
+ <a id="api-locationname"></a>
1649
+
1650
+ ```typescript
1651
+ export interface LocationName
1652
+ ```
1653
+
1654
+ <p>The Location Name characteristic describes the name of the location the device is installed in.</p>
1655
+
1656
+
1657
+ #### Longitude
1658
+
1659
+ <a id="api-longitude"></a>
1660
+
1661
+ ```typescript
1662
+ export interface Longitude
1663
+ ```
1664
+
1665
+ <p>The Longitude characteristic describes the WGS84 East coordinate of the device.</p>
1666
+
1667
+
1668
+ #### ManufacturerNameString
1669
+
1670
+ <a id="api-manufacturernamestring"></a>
1671
+
1672
+ ```typescript
1673
+ export interface ManufacturerNameString
1674
+ ```
1675
+
1676
+ <p>The value of this characteristic is a UTF-8 string representing the name of the manufacturer of the device.</p>
1677
+
1678
+
1679
+ #### MaximumRecommendedHeartRate
1680
+
1681
+ <a id="api-maximumrecommendedheartrate"></a>
1682
+
1683
+ ```typescript
1684
+ export interface MaximumRecommendedHeartRate
1685
+ ```
1686
+
1687
+ <p>Maximum recommended heart rate is a threshold that may be set to limit exertion. The maximum recommended heart rate is smaller or equal to the maximal heart rate a user can reach.</p>
1688
+
1689
+
1690
+ #### MeasurementInterval
1691
+
1692
+ <a id="api-measurementinterval"></a>
1693
+
1694
+ ```typescript
1695
+ export interface MeasurementInterval
1696
+ ```
1697
+
1698
+ <p>The Measurement Interval characteristic defines the time between measurements.</p> <p>This characteristic is capable of representing values from 1 second to 65535 seconds which is equal to 18 hours, 12 minutes and 15 seconds.</p>
1699
+
1700
+
1701
+ #### ModelNumberString
1702
+
1703
+ <a id="api-modelnumberstring"></a>
1704
+
1705
+ ```typescript
1706
+ export interface ModelNumberString
1707
+ ```
1708
+
1709
+ <p>The value of this characteristic is a UTF-8 string representing the model number assigned by the device vendor.</p>
1710
+
1711
+
1712
+ #### Navigation
1713
+
1714
+ <a id="api-navigation"></a>
1715
+
1716
+ ```typescript
1717
+ export interface Navigation
1718
+ ```
1719
+
1720
+ <p>The Navigation characteristic is a variable length structure containing a Flags field, a Bearing field, a Heading field and, based on the contents of the Flags field, may contain a combination of data fields listed below.</p>
1721
+
1722
+
1723
+ #### NumberOfDigitals
1724
+
1725
+ <a id="api-numberofdigitals"></a>
1726
+
1727
+ ```typescript
1728
+ export interface NumberOfDigitals
1729
+ ```
1730
+
1731
+ <p>The Characteristic Number of Digitals descriptor is used for defining the number of digitals in a characteristic.</p>
1732
+
1733
+
1734
+ #### PlxContinuousMeasurement
1735
+
1736
+ <a id="api-plxcontinuousmeasurement"></a>
1737
+
1738
+ ```typescript
1739
+ export interface PlxContinuousMeasurement
1740
+ ```
1741
+
1742
+ <p>The PLX Continuous Measurement characteristic, if supported, is used to send periodic pulse oximetry measurements. This characteristic is a variable length structure containing the Flags field (to indicate presence of optional fields), the SpO2PR-Normal field, and depending on the contents of the Flags field, the SpO2PR-Fast field, the SpO2PR-Slow field, the Measurement Status field, the Device and Sensor Status field, and/or the Pulse Amplitude Index field.</p>
1743
+
1744
+
1745
+ #### PlxFeatures
1746
+
1747
+ <a id="api-plxfeatures"></a>
1748
+
1749
+ ```typescript
1750
+ export interface PlxFeatures
1751
+ ```
1752
+
1753
+ <p>The PLX Features characteristic is used to describe the supported features of the Server. Included in the characteristic is a PLX Features field, and, depending on the contents of the PLX Features field, the Measurement Status Support field, and the Device and Sensor Status Support field.</p>
1754
+
1755
+
1756
+ #### PlxSpotCheckMeasurement
1757
+
1758
+ <a id="api-plxspotcheckmeasurement"></a>
1759
+
1760
+ ```typescript
1761
+ export interface PlxSpotCheckMeasurement
1762
+ ```
1763
+
1764
+ <p>The PLX Spot-check Measurement characteristic, if supported, is used to send Spot-check measurements of SpO2 (Percent oxygen saturation of hemoglobin) and PR (pulse rate). This characteristic is a variable length structure containing the Flags field, the SpO2PR-Spot-Check field, and depending on the contents of the Flags field, the Timestamp field, the Measurement Status field, the Device and Sensor Status field, and/or the Pulse Amplitude Index field.</p>
1765
+
1766
+
1767
+ #### ReferenceTimeInformation
1768
+
1769
+ <a id="api-referencetimeinformation"></a>
1770
+
1771
+ ```typescript
1772
+ export interface ReferenceTimeInformation
1773
+ ```
1774
+
1775
+ #### RestingHeartRate
1776
+
1777
+ <a id="api-restingheartrate"></a>
1778
+
1779
+ ```typescript
1780
+ export interface RestingHeartRate
1781
+ ```
1782
+
1783
+ <p>Lowest Heart Rate a user can reach</p>
1784
+
1785
+
1786
+ #### RscFeature
1787
+
1788
+ <a id="api-rscfeature"></a>
1789
+
1790
+ ```typescript
1791
+ export interface RscFeature
1792
+ ```
1793
+
1794
+ <p>The RSC (Running Speed and Cadence) Feature characteristic is used to describe the supported features of the Server.</p>
1795
+
1796
+
1797
+ #### RscMeasurement
1798
+
1799
+ <a id="api-rscmeasurement"></a>
1800
+
1801
+ ```typescript
1802
+ export interface RscMeasurement
1803
+ ```
1804
+
1805
+ <p>The RSC Measurement characteristic (RSC refers to Running Speed and Cadence) is a variable length structure containing a Flags field, an Instantaneous Speed field and an Instantaneous Cadence field and, based on the contents of the Flags field, may contain a Stride Length field and a Total Distance field.</p>
1806
+
1807
+
1808
+ #### SensorLocation
1809
+
1810
+ <a id="api-sensorlocation"></a>
1811
+
1812
+ ```typescript
1813
+ export interface SensorLocation
1814
+ ```
1815
+
1816
+ <p>The Sensor Location characteristic is used to expose the location of the sensor.</p>
1817
+
1818
+
1819
+ #### SerialNumberString
1820
+
1821
+ <a id="api-serialnumberstring"></a>
1822
+
1823
+ ```typescript
1824
+ export interface SerialNumberString
1825
+ ```
1826
+
1827
+ <p>The value of this characteristic is a variable-length UTF-8 string representing the serial number for a particular instance of the device.</p>
1828
+
1829
+
1830
+ #### SoftwareRevisionString
1831
+
1832
+ <a id="api-softwarerevisionstring"></a>
1833
+
1834
+ ```typescript
1835
+ export interface SoftwareRevisionString
1836
+ ```
1837
+
1838
+ <p>The value of this characteristic is a UTF-8 string representing the software revision for the software within the device.</p>
1839
+
1840
+
1841
+ #### SupportedHeartRateRange
1842
+
1843
+ <a id="api-supportedheartraterange"></a>
1844
+
1845
+ ```typescript
1846
+ export interface SupportedHeartRateRange
1847
+ ```
1848
+
1849
+ <p>The Supported Heart Rate Range characteristic is used to send the supported Heart Rate range as well as the minimum Heart Rate increment supported by the Server.</p>
1850
+
1851
+
1852
+ #### SupportedInclinationRange
1853
+
1854
+ <a id="api-supportedinclinationrange"></a>
1855
+
1856
+ ```typescript
1857
+ export interface SupportedInclinationRange
1858
+ ```
1859
+
1860
+ <p>The Supported Inclination Range characteristic is used to send the supported inclination range as well as the minimum inclination increment supported by the Server.</p>
1861
+
1862
+
1863
+ #### SupportedSpeedRange
1864
+
1865
+ <a id="api-supportedspeedrange"></a>
1866
+
1867
+ ```typescript
1868
+ export interface SupportedSpeedRange
1869
+ ```
1870
+
1871
+ <p>The Supported Speed Range characteristic is used to send the supported speed range as well as the minimum speed increment supported by the Server.</p>
1872
+
1873
+
1874
+ #### SystemId
1875
+
1876
+ <a id="api-systemid"></a>
1877
+
1878
+ ```typescript
1879
+ export interface SystemId
1880
+ ```
1881
+
1882
+ <p>The SYSTEM ID characteristic consists of a structure with two fields. The first field are the LSOs and the second field contains the MSOs. This is a 64-bit structure which consists of a 40-bit manufacturer-defined identifier concatenated with a 24 bit unique Organizationally Unique Identifier (OUI). The OUI is issued by the IEEE Registration Authority (http://standards.ieee.org/regauth/index.html) and is required to be used in accordance with IEEE Standard 802-2001.6 while the least significant 40 bits are manufacturer defined.</p> <p>If System ID generated based on a Bluetooth Device Address, it is required to be done as follows. System ID and the Bluetooth Device Address have a very similar structure: a Bluetooth Device Address is 48 bits in length and consists of a 24 bit Company Assigned Identifier (manufacturer defined identifier) concatenated with a 24 bit Company Identifier (OUI). In order to encapsulate a Bluetooth Device Address as System ID, the Company Identifier is concatenated with 0xFFFE followed by the Company Assigned Identifier of the Bluetooth Address. For more guidelines related to EUI-64, refer to http://standards.ieee.org/develop/regauth/tut/eui64.pdf.</p> <p>If the system ID is based of a Bluetooth Device Address with a Company Identifier (OUI) is 0x123456 and the Company Assigned Identifier is 0x9ABCDE, then the System Identifier is required to be 0x123456FFFE9ABCDE.</p>
1883
+
1884
+
1885
+ #### Temperature
1886
+
1887
+ <a id="api-temperature"></a>
1888
+
1889
+ ```typescript
1890
+ export interface Temperature
1891
+ ```
1892
+
1893
+ #### TemperatureMeasurement
1894
+
1895
+ <a id="api-temperaturemeasurement"></a>
1896
+
1897
+ ```typescript
1898
+ export interface TemperatureMeasurement
1899
+ ```
1900
+
1901
+ <p>The Temperature Measurement characteristic is a variable length structure containing a Flags field, a Temperature Measurement Value field and, based upon the contents of the Flags field, optionally a Time Stamp field and/or a Temperature Type field.</p> <p>If the value of bit 1 of the Flags field is 0 and bit 2 is 0, the structure of the Temperature Measurement characteristic consists of two fields in this order; Flags and Temperature Measurement Value.</p> <p>If the value of bit 1 of the Flags field is 1 (Time Stamp) and bit 2 is 0, the structure of the Temperature Measurement characteristic consists of three fields in this order: Flags, Temperature Measurement Value and Time Stamp.</p> <p>If the value of bit 1 of the Flags field is 1 and bit 2 is 1 (Time Stamp and Temperature Type), the structure of the Temperature Measurement characteristic consists of four fields in this order: Flags, Temperature Measurement Value, Time Stamp and Temperature Type.</p> <p>If the value of bit 1 of the Flags field is 0 and bit 2 is 1 (Temperature Type), the structure of the Temperature Measurement characteristic consists of three fields in this order: Flags, Temperature Measurement Value and Temperature Type.</p> <p>The flags is the first field sent followed by the Temperature Measurement Value.</p> <p>The fields in the above table are in the order of LSO to MSO. Where LSO = Least Significant Octet and MSO = Most Significant Octet.</p>
1902
+
1903
+
1904
+ #### TemperatureType
1905
+
1906
+ <a id="api-temperaturetype"></a>
1907
+
1908
+ ```typescript
1909
+ export interface TemperatureType
1910
+ ```
1911
+
1912
+ <p>The Temperature Type characteristic is an enumeration that indicates where the temperature was measured.</p> <p>These Temperature Type values correspond to the Temperature Type descriptions used in ISO/IEEE 11073-10408-2008.</p>
1913
+
1914
+
1915
+ #### ThreeZoneHeartRateLimits
1916
+
1917
+ <a id="api-threezoneheartratelimits"></a>
1918
+
1919
+ ```typescript
1920
+ export interface ThreeZoneHeartRateLimits
1921
+ ```
1922
+
1923
+ <p>Data structure containing the limits between the heart rate zones for the 3-zone heart rate definition (Hard, Moderate and Light).</p>
1924
+
1925
+
1926
+ #### TimeAccuracy
1927
+
1928
+ <a id="api-timeaccuracy"></a>
1929
+
1930
+ ```typescript
1931
+ export interface TimeAccuracy
1932
+ ```
1933
+
1934
+ #### TimeSource
1935
+
1936
+ <a id="api-timesource"></a>
1937
+
1938
+ ```typescript
1939
+ export interface TimeSource
1940
+ ```
1941
+
1942
+ #### TimeUpdateControlPoint
1943
+
1944
+ <a id="api-timeupdatecontrolpoint"></a>
1945
+
1946
+ ```typescript
1947
+ export interface TimeUpdateControlPoint
1948
+ ```
1949
+
1950
+ #### TimeUpdateState
1951
+
1952
+ <a id="api-timeupdatestate"></a>
1953
+
1954
+ ```typescript
1955
+ export interface TimeUpdateState
1956
+ ```
1957
+
1958
+ #### TimeWithDst
1959
+
1960
+ <a id="api-timewithdst"></a>
1961
+
1962
+ ```typescript
1963
+ export interface TimeWithDst
1964
+ ```
1965
+
1966
+ #### TimeZone
1967
+
1968
+ <a id="api-timezone"></a>
1969
+
1970
+ ```typescript
1971
+ export interface TimeZone
1972
+ ```
1973
+
1974
+ #### TreadmillData
1975
+
1976
+ <a id="api-treadmilldata"></a>
1977
+
1978
+ ```typescript
1979
+ export interface TreadmillData
1980
+ ```
1981
+
1982
+ <p>The Treadmill Data characteristic is used to send training-related data to the Client from a treadmill (Server).</p>
1983
+
1984
+
1985
+ #### TwoZoneHeartRateLimit
1986
+
1987
+ <a id="api-twozoneheartratelimit"></a>
1988
+
1989
+ ```typescript
1990
+ export interface TwoZoneHeartRateLimit
1991
+ ```
1992
+
1993
+ <p>Heart rate limit between the heart rate zones for the 2-zone heart rate definition (Fitness and Fat Burn).</p>
1994
+
1995
+
1996
+ #### Vo2Max
1997
+
1998
+ <a id="api-vo2max"></a>
1999
+
2000
+ ```typescript
2001
+ export interface Vo2Max
2002
+ ```
2003
+
2004
+ <p>Maximal Oxygen uptake of a user</p>
2005
+
2006
+
2007
+ ### TypeAliases
2008
+
2009
+ #### GattCharacteristicName
2010
+
2011
+ <a id="api-gattcharacteristicname"></a>
2012
+
2013
+ ```typescript
2014
+ type GattCharacteristicName = keyof typeof GATT_CHARACTERISTIC_UUID;
2015
+ ```
2016
+
2017
+ #### GattDescriptorName
2018
+
2019
+ <a id="api-gattdescriptorname"></a>
2020
+
2021
+ ```typescript
2022
+ type GattDescriptorName = keyof typeof GATT_DESCRIPTOR_UUID;
2023
+ ```
2024
+
2025
+ #### GattServiceName
2026
+
2027
+ <a id="api-gattservicename"></a>
2028
+
2029
+ ```typescript
2030
+ type GattServiceName = keyof typeof GATT_SERVICE_UUID;
2031
+ ```
2032
+
2033
+ ### Variables
2034
+
2035
+ #### GATT_CHARACTERISTIC_ID
2036
+
2037
+ <a id="api-gatt-characteristic-id"></a>
2038
+
2039
+ ```typescript
2040
+ GATT_CHARACTERISTIC_ID: Readonly<{
2041
+ readonly aerobic_heart_rate_lower_limit: 10878;
2042
+ readonly aerobic_heart_rate_upper_limit: 10884;
2043
+ readonly aerobic_threshold: 10879;
2044
+ readonly age: 10880;
2045
+ readonly aggregate: 10842;
2046
+ readonly alert_category_id: 10819;
2047
+ readonly alert_category_id_bit_mask: 10818;
2048
+ readonly alert_level: 10758;
2049
+ readonly alert_notification_control_point: 10820;
2050
+ readonly alert_status: 10815;
2051
+ readonly altitude: 10931;
2052
+ readonly anaerobic_heart_rate_lower_limit: 10881;
2053
+ readonly anaerobic_heart_rate_upper_limit: 10882;
2054
+ readonly anaerobic_threshold: 10883;
2055
+ readonly analog: 10840;
2056
+ readonly analog_output: 10841;
2057
+ readonly apparent_wind_direction: 10867;
2058
+ readonly apparent_wind_speed: 10866;
2059
+ readonly barometric_pressure_trend: 10915;
2060
+ readonly battery_level: 10777;
2061
+ readonly battery_level_state: 10779;
2062
+ readonly battery_power_state: 10778;
2063
+ readonly blood_pressure_feature: 10825;
2064
+ readonly blood_pressure_measurement: 10805;
2065
+ readonly body_composition_feature: 10907;
2066
+ readonly body_composition_measurement: 10908;
2067
+ readonly body_sensor_location: 10808;
2068
+ readonly bond_management_control_point: 10916;
2069
+ readonly bond_management_feature: 10917;
2070
+ readonly boot_keyboard_input_report: 10786;
2071
+ readonly boot_keyboard_output_report: 10802;
2072
+ readonly boot_mouse_input_report: 10803;
2073
+ readonly cgm_feature: 10920;
2074
+ readonly cgm_measurement: 10919;
2075
+ readonly cgm_session_run_time: 10923;
2076
+ readonly cgm_session_start_time: 10922;
2077
+ readonly cgm_specific_ops_control_point: 10924;
2078
+ readonly cgm_status: 10921;
2079
+ readonly cross_trainer_data: 10958;
2080
+ readonly csc_feature: 10844;
2081
+ readonly csc_measurement: 10843;
2082
+ readonly current_time: 10795;
2083
+ readonly cycling_power_control_point: 10854;
2084
+ readonly cycling_power_feature: 10853;
2085
+ readonly cycling_power_measurement: 10851;
2086
+ readonly cycling_power_vector: 10852;
2087
+ readonly database_change_increment: 10905;
2088
+ readonly date_of_birth: 10885;
2089
+ readonly date_of_threshold_assessment: 10886;
2090
+ readonly date_time: 10760;
2091
+ readonly date_utc: 10989;
2092
+ readonly day_date_time: 10762;
2093
+ readonly day_of_week: 10761;
2094
+ readonly descriptor_value_changed: 10877;
2095
+ readonly dew_point: 10875;
2096
+ readonly digital: 10838;
2097
+ readonly digital_output: 10839;
2098
+ readonly dst_offset: 10765;
2099
+ readonly elevation: 10860;
2100
+ readonly email_address: 10887;
2101
+ readonly exact_time_100: 10763;
2102
+ readonly exact_time_256: 10764;
2103
+ readonly fat_burn_heart_rate_lower_limit: 10888;
2104
+ readonly fat_burn_heart_rate_upper_limit: 10889;
2105
+ readonly firmware_revision_string: 10790;
2106
+ readonly first_name: 10890;
2107
+ readonly fitness_machine_control_point: 10969;
2108
+ readonly fitness_machine_feature: 10956;
2109
+ readonly fitness_machine_status: 10970;
2110
+ readonly five_zone_heart_rate_limits: 10891;
2111
+ readonly floor_number: 10930;
2112
+ readonly "gap.appearance": 10753;
2113
+ readonly "gap.central_address_resolution_support": 10918;
2114
+ readonly "gap.device_name": 10752;
2115
+ readonly "gap.peripheral_preferred_connection_parameters": 10756;
2116
+ readonly "gap.peripheral_privacy_flag": 10754;
2117
+ readonly "gap.reconnection_address": 10755;
2118
+ readonly "gatt.service_changed": 10757;
2119
+ readonly gender: 10892;
2120
+ readonly glucose_feature: 10833;
2121
+ readonly glucose_measurement: 10776;
2122
+ readonly glucose_measurement_context: 10804;
2123
+ readonly gust_factor: 10868;
2124
+ readonly hardware_revision_string: 10791;
2125
+ readonly heart_rate_control_point: 10809;
2126
+ readonly heart_rate_max: 10893;
2127
+ readonly heart_rate_measurement: 10807;
2128
+ readonly heat_index: 10874;
2129
+ readonly height: 10894;
2130
+ readonly hid_control_point: 10828;
2131
+ readonly hid_information: 10826;
2132
+ readonly hip_circumference: 10895;
2133
+ readonly http_control_point: 10938;
2134
+ readonly http_entity_body: 10937;
2135
+ readonly http_headers: 10935;
2136
+ readonly http_status_code: 10936;
2137
+ readonly https_security: 10939;
2138
+ readonly humidity: 10863;
2139
+ readonly "ieee_11073-20601_regulatory_certification_data_list": 10794;
2140
+ readonly indoor_bike_data: 10962;
2141
+ readonly indoor_positioning_configuration: 10925;
2142
+ readonly intermediate_cuff_pressure: 10806;
2143
+ readonly intermediate_temperature: 10782;
2144
+ readonly irradiance: 10871;
2145
+ readonly language: 10914;
2146
+ readonly last_name: 10896;
2147
+ readonly latitude: 10926;
2148
+ readonly ln_control_point: 10859;
2149
+ readonly ln_feature: 10858;
2150
+ readonly "local_east_coordinate.xml": 10929;
2151
+ readonly local_north_coordinate: 10928;
2152
+ readonly local_time_information: 10767;
2153
+ readonly location_and_speed: 10855;
2154
+ readonly location_name: 10933;
2155
+ readonly longitude: 10927;
2156
+ readonly magnetic_declination: 10796;
2157
+ readonly magnetic_flux_density_2D: 10912;
2158
+ readonly magnetic_flux_density_3D: 10913;
2159
+ readonly manufacturer_name_string: 10793;
2160
+ readonly maximum_recommended_heart_rate: 10897;
2161
+ readonly measurement_interval: 10785;
2162
+ readonly model_number_string: 10788;
2163
+ readonly navigation: 10856;
2164
+ readonly network_availability: 10814;
2165
+ readonly new_alert: 10822;
2166
+ readonly object_action_control_point: 10949;
2167
+ readonly object_changed: 10952;
2168
+ readonly object_first_created: 10945;
2169
+ readonly object_id: 10947;
2170
+ readonly object_last_modified: 10946;
2171
+ readonly object_list_control_point: 10950;
2172
+ readonly object_list_filter: 10951;
2173
+ readonly object_name: 10942;
2174
+ readonly object_properties: 10948;
2175
+ readonly object_size: 10944;
2176
+ readonly object_type: 10943;
2177
+ readonly ots_feature: 10941;
2178
+ readonly plx_continuous_measurement: 10847;
2179
+ readonly plx_features: 10848;
2180
+ readonly plx_spot_check_measurement: 10846;
2181
+ readonly pnp_id: 10832;
2182
+ readonly pollen_concentration: 10869;
2183
+ readonly position_2d: 10799;
2184
+ readonly position_3d: 10800;
2185
+ readonly position_quality: 10857;
2186
+ readonly pressure: 10861;
2187
+ readonly protocol_mode: 10830;
2188
+ readonly pulse_oximetry_control_point: 10850;
2189
+ readonly rainfall: 10872;
2190
+ readonly record_access_control_point: 10834;
2191
+ readonly reference_time_information: 10772;
2192
+ readonly removable: 10810;
2193
+ readonly report: 10829;
2194
+ readonly report_map: 10827;
2195
+ readonly resolvable_private_address_only: 10953;
2196
+ readonly resting_heart_rate: 10898;
2197
+ readonly ringer_control_point: 10816;
2198
+ readonly ringer_setting: 10817;
2199
+ readonly rower_data: 10961;
2200
+ readonly rsc_feature: 10836;
2201
+ readonly rsc_measurement: 10835;
2202
+ readonly sc_control_point: 10837;
2203
+ readonly scan_interval_window: 10831;
2204
+ readonly scan_refresh: 10801;
2205
+ readonly scientific_temperature_celsius: 10812;
2206
+ readonly secondary_time_zone: 10768;
2207
+ readonly sensor_location: 10845;
2208
+ readonly serial_number_string: 10789;
2209
+ readonly service_required: 10811;
2210
+ readonly software_revision_string: 10792;
2211
+ readonly sport_type_for_aerobic_and_anaerobic_thresholds: 10899;
2212
+ readonly stair_climber_data: 10960;
2213
+ readonly step_climber_data: 10959;
2214
+ readonly string: 10813;
2215
+ readonly supported_heart_rate_range: 10967;
2216
+ readonly supported_inclination_range: 10965;
2217
+ readonly supported_new_alert_category: 10823;
2218
+ readonly supported_power_range: 10968;
2219
+ readonly supported_resistance_level_range: 10966;
2220
+ readonly supported_speed_range: 10964;
2221
+ readonly supported_unread_alert_category: 10824;
2222
+ readonly system_id: 10787;
2223
+ readonly tds_control_point: 10940;
2224
+ readonly temperature: 10862;
2225
+ readonly temperature_celsius: 10783;
2226
+ readonly temperature_fahrenheit: 10784;
2227
+ readonly temperature_measurement: 10780;
2228
+ readonly temperature_type: 10781;
2229
+ readonly three_zone_heart_rate_limits: 10900;
2230
+ readonly time_accuracy: 10770;
2231
+ readonly time_broadcast: 10773;
2232
+ readonly time_source: 10771;
2233
+ readonly time_update_control_point: 10774;
2234
+ readonly time_update_state: 10775;
2235
+ readonly time_with_dst: 10769;
2236
+ readonly time_zone: 10766;
2237
+ readonly training_status: 10963;
2238
+ readonly treadmill_data: 10957;
2239
+ readonly true_wind_direction: 10865;
2240
+ readonly true_wind_speed: 10864;
2241
+ readonly two_zone_heart_rate_limit: 10901;
2242
+ readonly tx_power_level: 10759;
2243
+ readonly uncertainty: 10932;
2244
+ readonly unread_alert_status: 10821;
2245
+ readonly uri: 10934;
2246
+ readonly user_control_point: 10911;
2247
+ readonly user_index: 10906;
2248
+ readonly uv_index: 10870;
2249
+ readonly vo2_max: 10902;
2250
+ readonly waist_circumference: 10903;
2251
+ readonly weight: 10904;
2252
+ readonly weight_measurement: 10909;
2253
+ readonly weight_scale_feature: 10910;
2254
+ readonly wind_chill: 10873;
2255
+ }>
2256
+ ```
2257
+
2258
+ #### GATT_CHARACTERISTIC_UUID
2259
+
2260
+ <a id="api-gatt-characteristic-uuid"></a>
2261
+
2262
+ ```typescript
2263
+ GATT_CHARACTERISTIC_UUID: Readonly<{
2264
+ readonly aerobic_heart_rate_lower_limit: "00002a7e-0000-1000-8000-00805f9b34fb";
2265
+ readonly aerobic_heart_rate_upper_limit: "00002a84-0000-1000-8000-00805f9b34fb";
2266
+ readonly aerobic_threshold: "00002a7f-0000-1000-8000-00805f9b34fb";
2267
+ readonly age: "00002a80-0000-1000-8000-00805f9b34fb";
2268
+ readonly aggregate: "00002a5a-0000-1000-8000-00805f9b34fb";
2269
+ readonly alert_category_id: "00002a43-0000-1000-8000-00805f9b34fb";
2270
+ readonly alert_category_id_bit_mask: "00002a42-0000-1000-8000-00805f9b34fb";
2271
+ readonly alert_level: "00002a06-0000-1000-8000-00805f9b34fb";
2272
+ readonly alert_notification_control_point: "00002a44-0000-1000-8000-00805f9b34fb";
2273
+ readonly alert_status: "00002a3f-0000-1000-8000-00805f9b34fb";
2274
+ readonly altitude: "00002ab3-0000-1000-8000-00805f9b34fb";
2275
+ readonly anaerobic_heart_rate_lower_limit: "00002a81-0000-1000-8000-00805f9b34fb";
2276
+ readonly anaerobic_heart_rate_upper_limit: "00002a82-0000-1000-8000-00805f9b34fb";
2277
+ readonly anaerobic_threshold: "00002a83-0000-1000-8000-00805f9b34fb";
2278
+ readonly analog: "00002a58-0000-1000-8000-00805f9b34fb";
2279
+ readonly analog_output: "00002a59-0000-1000-8000-00805f9b34fb";
2280
+ readonly apparent_wind_direction: "00002a73-0000-1000-8000-00805f9b34fb";
2281
+ readonly apparent_wind_speed: "00002a72-0000-1000-8000-00805f9b34fb";
2282
+ readonly barometric_pressure_trend: "00002aa3-0000-1000-8000-00805f9b34fb";
2283
+ readonly battery_level: "00002a19-0000-1000-8000-00805f9b34fb";
2284
+ readonly battery_level_state: "00002a1b-0000-1000-8000-00805f9b34fb";
2285
+ readonly battery_power_state: "00002a1a-0000-1000-8000-00805f9b34fb";
2286
+ readonly blood_pressure_feature: "00002a49-0000-1000-8000-00805f9b34fb";
2287
+ readonly blood_pressure_measurement: "00002a35-0000-1000-8000-00805f9b34fb";
2288
+ readonly body_composition_feature: "00002a9b-0000-1000-8000-00805f9b34fb";
2289
+ readonly body_composition_measurement: "00002a9c-0000-1000-8000-00805f9b34fb";
2290
+ readonly body_sensor_location: "00002a38-0000-1000-8000-00805f9b34fb";
2291
+ readonly bond_management_control_point: "00002aa4-0000-1000-8000-00805f9b34fb";
2292
+ readonly bond_management_feature: "00002aa5-0000-1000-8000-00805f9b34fb";
2293
+ readonly boot_keyboard_input_report: "00002a22-0000-1000-8000-00805f9b34fb";
2294
+ readonly boot_keyboard_output_report: "00002a32-0000-1000-8000-00805f9b34fb";
2295
+ readonly boot_mouse_input_report: "00002a33-0000-1000-8000-00805f9b34fb";
2296
+ readonly cgm_feature: "00002aa8-0000-1000-8000-00805f9b34fb";
2297
+ readonly cgm_measurement: "00002aa7-0000-1000-8000-00805f9b34fb";
2298
+ readonly cgm_session_run_time: "00002aab-0000-1000-8000-00805f9b34fb";
2299
+ readonly cgm_session_start_time: "00002aaa-0000-1000-8000-00805f9b34fb";
2300
+ readonly cgm_specific_ops_control_point: "00002aac-0000-1000-8000-00805f9b34fb";
2301
+ readonly cgm_status: "00002aa9-0000-1000-8000-00805f9b34fb";
2302
+ readonly cross_trainer_data: "00002ace-0000-1000-8000-00805f9b34fb";
2303
+ readonly csc_feature: "00002a5c-0000-1000-8000-00805f9b34fb";
2304
+ readonly csc_measurement: "00002a5b-0000-1000-8000-00805f9b34fb";
2305
+ readonly current_time: "00002a2b-0000-1000-8000-00805f9b34fb";
2306
+ readonly cycling_power_control_point: "00002a66-0000-1000-8000-00805f9b34fb";
2307
+ readonly cycling_power_feature: "00002a65-0000-1000-8000-00805f9b34fb";
2308
+ readonly cycling_power_measurement: "00002a63-0000-1000-8000-00805f9b34fb";
2309
+ readonly cycling_power_vector: "00002a64-0000-1000-8000-00805f9b34fb";
2310
+ readonly database_change_increment: "00002a99-0000-1000-8000-00805f9b34fb";
2311
+ readonly date_of_birth: "00002a85-0000-1000-8000-00805f9b34fb";
2312
+ readonly date_of_threshold_assessment: "00002a86-0000-1000-8000-00805f9b34fb";
2313
+ readonly date_time: "00002a08-0000-1000-8000-00805f9b34fb";
2314
+ readonly date_utc: "00002aed-0000-1000-8000-00805f9b34fb";
2315
+ readonly day_date_time: "00002a0a-0000-1000-8000-00805f9b34fb";
2316
+ readonly day_of_week: "00002a09-0000-1000-8000-00805f9b34fb";
2317
+ readonly descriptor_value_changed: "00002a7d-0000-1000-8000-00805f9b34fb";
2318
+ readonly dew_point: "00002a7b-0000-1000-8000-00805f9b34fb";
2319
+ readonly digital: "00002a56-0000-1000-8000-00805f9b34fb";
2320
+ readonly digital_output: "00002a57-0000-1000-8000-00805f9b34fb";
2321
+ readonly dst_offset: "00002a0d-0000-1000-8000-00805f9b34fb";
2322
+ readonly elevation: "00002a6c-0000-1000-8000-00805f9b34fb";
2323
+ readonly email_address: "00002a87-0000-1000-8000-00805f9b34fb";
2324
+ readonly exact_time_100: "00002a0b-0000-1000-8000-00805f9b34fb";
2325
+ readonly exact_time_256: "00002a0c-0000-1000-8000-00805f9b34fb";
2326
+ readonly fat_burn_heart_rate_lower_limit: "00002a88-0000-1000-8000-00805f9b34fb";
2327
+ readonly fat_burn_heart_rate_upper_limit: "00002a89-0000-1000-8000-00805f9b34fb";
2328
+ readonly firmware_revision_string: "00002a26-0000-1000-8000-00805f9b34fb";
2329
+ readonly first_name: "00002a8a-0000-1000-8000-00805f9b34fb";
2330
+ readonly fitness_machine_control_point: "00002ad9-0000-1000-8000-00805f9b34fb";
2331
+ readonly fitness_machine_feature: "00002acc-0000-1000-8000-00805f9b34fb";
2332
+ readonly fitness_machine_status: "00002ada-0000-1000-8000-00805f9b34fb";
2333
+ readonly five_zone_heart_rate_limits: "00002a8b-0000-1000-8000-00805f9b34fb";
2334
+ readonly floor_number: "00002ab2-0000-1000-8000-00805f9b34fb";
2335
+ readonly "gap.appearance": "00002a01-0000-1000-8000-00805f9b34fb";
2336
+ readonly "gap.central_address_resolution_support": "00002aa6-0000-1000-8000-00805f9b34fb";
2337
+ readonly "gap.device_name": "00002a00-0000-1000-8000-00805f9b34fb";
2338
+ readonly "gap.peripheral_preferred_connection_parameters": "00002a04-0000-1000-8000-00805f9b34fb";
2339
+ readonly "gap.peripheral_privacy_flag": "00002a02-0000-1000-8000-00805f9b34fb";
2340
+ readonly "gap.reconnection_address": "00002a03-0000-1000-8000-00805f9b34fb";
2341
+ readonly "gatt.service_changed": "00002a05-0000-1000-8000-00805f9b34fb";
2342
+ readonly gender: "00002a8c-0000-1000-8000-00805f9b34fb";
2343
+ readonly glucose_feature: "00002a51-0000-1000-8000-00805f9b34fb";
2344
+ readonly glucose_measurement: "00002a18-0000-1000-8000-00805f9b34fb";
2345
+ readonly glucose_measurement_context: "00002a34-0000-1000-8000-00805f9b34fb";
2346
+ readonly gust_factor: "00002a74-0000-1000-8000-00805f9b34fb";
2347
+ readonly hardware_revision_string: "00002a27-0000-1000-8000-00805f9b34fb";
2348
+ readonly heart_rate_control_point: "00002a39-0000-1000-8000-00805f9b34fb";
2349
+ readonly heart_rate_max: "00002a8d-0000-1000-8000-00805f9b34fb";
2350
+ readonly heart_rate_measurement: "00002a37-0000-1000-8000-00805f9b34fb";
2351
+ readonly heat_index: "00002a7a-0000-1000-8000-00805f9b34fb";
2352
+ readonly height: "00002a8e-0000-1000-8000-00805f9b34fb";
2353
+ readonly hid_control_point: "00002a4c-0000-1000-8000-00805f9b34fb";
2354
+ readonly hid_information: "00002a4a-0000-1000-8000-00805f9b34fb";
2355
+ readonly hip_circumference: "00002a8f-0000-1000-8000-00805f9b34fb";
2356
+ readonly http_control_point: "00002aba-0000-1000-8000-00805f9b34fb";
2357
+ readonly http_entity_body: "00002ab9-0000-1000-8000-00805f9b34fb";
2358
+ readonly http_headers: "00002ab7-0000-1000-8000-00805f9b34fb";
2359
+ readonly http_status_code: "00002ab8-0000-1000-8000-00805f9b34fb";
2360
+ readonly https_security: "00002abb-0000-1000-8000-00805f9b34fb";
2361
+ readonly humidity: "00002a6f-0000-1000-8000-00805f9b34fb";
2362
+ readonly "ieee_11073-20601_regulatory_certification_data_list": "00002a2a-0000-1000-8000-00805f9b34fb";
2363
+ readonly indoor_bike_data: "00002ad2-0000-1000-8000-00805f9b34fb";
2364
+ readonly indoor_positioning_configuration: "00002aad-0000-1000-8000-00805f9b34fb";
2365
+ readonly intermediate_cuff_pressure: "00002a36-0000-1000-8000-00805f9b34fb";
2366
+ readonly intermediate_temperature: "00002a1e-0000-1000-8000-00805f9b34fb";
2367
+ readonly irradiance: "00002a77-0000-1000-8000-00805f9b34fb";
2368
+ readonly language: "00002aa2-0000-1000-8000-00805f9b34fb";
2369
+ readonly last_name: "00002a90-0000-1000-8000-00805f9b34fb";
2370
+ readonly latitude: "00002aae-0000-1000-8000-00805f9b34fb";
2371
+ readonly ln_control_point: "00002a6b-0000-1000-8000-00805f9b34fb";
2372
+ readonly ln_feature: "00002a6a-0000-1000-8000-00805f9b34fb";
2373
+ readonly "local_east_coordinate.xml": "00002ab1-0000-1000-8000-00805f9b34fb";
2374
+ readonly local_north_coordinate: "00002ab0-0000-1000-8000-00805f9b34fb";
2375
+ readonly local_time_information: "00002a0f-0000-1000-8000-00805f9b34fb";
2376
+ readonly location_and_speed: "00002a67-0000-1000-8000-00805f9b34fb";
2377
+ readonly location_name: "00002ab5-0000-1000-8000-00805f9b34fb";
2378
+ readonly longitude: "00002aaf-0000-1000-8000-00805f9b34fb";
2379
+ readonly magnetic_declination: "00002a2c-0000-1000-8000-00805f9b34fb";
2380
+ readonly magnetic_flux_density_2D: "00002aa0-0000-1000-8000-00805f9b34fb";
2381
+ readonly magnetic_flux_density_3D: "00002aa1-0000-1000-8000-00805f9b34fb";
2382
+ readonly manufacturer_name_string: "00002a29-0000-1000-8000-00805f9b34fb";
2383
+ readonly maximum_recommended_heart_rate: "00002a91-0000-1000-8000-00805f9b34fb";
2384
+ readonly measurement_interval: "00002a21-0000-1000-8000-00805f9b34fb";
2385
+ readonly model_number_string: "00002a24-0000-1000-8000-00805f9b34fb";
2386
+ readonly navigation: "00002a68-0000-1000-8000-00805f9b34fb";
2387
+ readonly network_availability: "00002a3e-0000-1000-8000-00805f9b34fb";
2388
+ readonly new_alert: "00002a46-0000-1000-8000-00805f9b34fb";
2389
+ readonly object_action_control_point: "00002ac5-0000-1000-8000-00805f9b34fb";
2390
+ readonly object_changed: "00002ac8-0000-1000-8000-00805f9b34fb";
2391
+ readonly object_first_created: "00002ac1-0000-1000-8000-00805f9b34fb";
2392
+ readonly object_id: "00002ac3-0000-1000-8000-00805f9b34fb";
2393
+ readonly object_last_modified: "00002ac2-0000-1000-8000-00805f9b34fb";
2394
+ readonly object_list_control_point: "00002ac6-0000-1000-8000-00805f9b34fb";
2395
+ readonly object_list_filter: "00002ac7-0000-1000-8000-00805f9b34fb";
2396
+ readonly object_name: "00002abe-0000-1000-8000-00805f9b34fb";
2397
+ readonly object_properties: "00002ac4-0000-1000-8000-00805f9b34fb";
2398
+ readonly object_size: "00002ac0-0000-1000-8000-00805f9b34fb";
2399
+ readonly object_type: "00002abf-0000-1000-8000-00805f9b34fb";
2400
+ readonly ots_feature: "00002abd-0000-1000-8000-00805f9b34fb";
2401
+ readonly plx_continuous_measurement: "00002a5f-0000-1000-8000-00805f9b34fb";
2402
+ readonly plx_features: "00002a60-0000-1000-8000-00805f9b34fb";
2403
+ readonly plx_spot_check_measurement: "00002a5e-0000-1000-8000-00805f9b34fb";
2404
+ readonly pnp_id: "00002a50-0000-1000-8000-00805f9b34fb";
2405
+ readonly pollen_concentration: "00002a75-0000-1000-8000-00805f9b34fb";
2406
+ readonly position_2d: "00002a2f-0000-1000-8000-00805f9b34fb";
2407
+ readonly position_3d: "00002a30-0000-1000-8000-00805f9b34fb";
2408
+ readonly position_quality: "00002a69-0000-1000-8000-00805f9b34fb";
2409
+ readonly pressure: "00002a6d-0000-1000-8000-00805f9b34fb";
2410
+ readonly protocol_mode: "00002a4e-0000-1000-8000-00805f9b34fb";
2411
+ readonly pulse_oximetry_control_point: "00002a62-0000-1000-8000-00805f9b34fb";
2412
+ readonly rainfall: "00002a78-0000-1000-8000-00805f9b34fb";
2413
+ readonly record_access_control_point: "00002a52-0000-1000-8000-00805f9b34fb";
2414
+ readonly reference_time_information: "00002a14-0000-1000-8000-00805f9b34fb";
2415
+ readonly removable: "00002a3a-0000-1000-8000-00805f9b34fb";
2416
+ readonly report: "00002a4d-0000-1000-8000-00805f9b34fb";
2417
+ readonly report_map: "00002a4b-0000-1000-8000-00805f9b34fb";
2418
+ readonly resolvable_private_address_only: "00002ac9-0000-1000-8000-00805f9b34fb";
2419
+ readonly resting_heart_rate: "00002a92-0000-1000-8000-00805f9b34fb";
2420
+ readonly ringer_control_point: "00002a40-0000-1000-8000-00805f9b34fb";
2421
+ readonly ringer_setting: "00002a41-0000-1000-8000-00805f9b34fb";
2422
+ readonly rower_data: "00002ad1-0000-1000-8000-00805f9b34fb";
2423
+ readonly rsc_feature: "00002a54-0000-1000-8000-00805f9b34fb";
2424
+ readonly rsc_measurement: "00002a53-0000-1000-8000-00805f9b34fb";
2425
+ readonly sc_control_point: "00002a55-0000-1000-8000-00805f9b34fb";
2426
+ readonly scan_interval_window: "00002a4f-0000-1000-8000-00805f9b34fb";
2427
+ readonly scan_refresh: "00002a31-0000-1000-8000-00805f9b34fb";
2428
+ readonly scientific_temperature_celsius: "00002a3c-0000-1000-8000-00805f9b34fb";
2429
+ readonly secondary_time_zone: "00002a10-0000-1000-8000-00805f9b34fb";
2430
+ readonly sensor_location: "00002a5d-0000-1000-8000-00805f9b34fb";
2431
+ readonly serial_number_string: "00002a25-0000-1000-8000-00805f9b34fb";
2432
+ readonly service_required: "00002a3b-0000-1000-8000-00805f9b34fb";
2433
+ readonly software_revision_string: "00002a28-0000-1000-8000-00805f9b34fb";
2434
+ readonly sport_type_for_aerobic_and_anaerobic_thresholds: "00002a93-0000-1000-8000-00805f9b34fb";
2435
+ readonly stair_climber_data: "00002ad0-0000-1000-8000-00805f9b34fb";
2436
+ readonly step_climber_data: "00002acf-0000-1000-8000-00805f9b34fb";
2437
+ readonly string: "00002a3d-0000-1000-8000-00805f9b34fb";
2438
+ readonly supported_heart_rate_range: "00002ad7-0000-1000-8000-00805f9b34fb";
2439
+ readonly supported_inclination_range: "00002ad5-0000-1000-8000-00805f9b34fb";
2440
+ readonly supported_new_alert_category: "00002a47-0000-1000-8000-00805f9b34fb";
2441
+ readonly supported_power_range: "00002ad8-0000-1000-8000-00805f9b34fb";
2442
+ readonly supported_resistance_level_range: "00002ad6-0000-1000-8000-00805f9b34fb";
2443
+ readonly supported_speed_range: "00002ad4-0000-1000-8000-00805f9b34fb";
2444
+ readonly supported_unread_alert_category: "00002a48-0000-1000-8000-00805f9b34fb";
2445
+ readonly system_id: "00002a23-0000-1000-8000-00805f9b34fb";
2446
+ readonly tds_control_point: "00002abc-0000-1000-8000-00805f9b34fb";
2447
+ readonly temperature: "00002a6e-0000-1000-8000-00805f9b34fb";
2448
+ readonly temperature_celsius: "00002a1f-0000-1000-8000-00805f9b34fb";
2449
+ readonly temperature_fahrenheit: "00002a20-0000-1000-8000-00805f9b34fb";
2450
+ readonly temperature_measurement: "00002a1c-0000-1000-8000-00805f9b34fb";
2451
+ readonly temperature_type: "00002a1d-0000-1000-8000-00805f9b34fb";
2452
+ readonly three_zone_heart_rate_limits: "00002a94-0000-1000-8000-00805f9b34fb";
2453
+ readonly time_accuracy: "00002a12-0000-1000-8000-00805f9b34fb";
2454
+ readonly time_broadcast: "00002a15-0000-1000-8000-00805f9b34fb";
2455
+ readonly time_source: "00002a13-0000-1000-8000-00805f9b34fb";
2456
+ readonly time_update_control_point: "00002a16-0000-1000-8000-00805f9b34fb";
2457
+ readonly time_update_state: "00002a17-0000-1000-8000-00805f9b34fb";
2458
+ readonly time_with_dst: "00002a11-0000-1000-8000-00805f9b34fb";
2459
+ readonly time_zone: "00002a0e-0000-1000-8000-00805f9b34fb";
2460
+ readonly training_status: "00002ad3-0000-1000-8000-00805f9b34fb";
2461
+ readonly treadmill_data: "00002acd-0000-1000-8000-00805f9b34fb";
2462
+ readonly true_wind_direction: "00002a71-0000-1000-8000-00805f9b34fb";
2463
+ readonly true_wind_speed: "00002a70-0000-1000-8000-00805f9b34fb";
2464
+ readonly two_zone_heart_rate_limit: "00002a95-0000-1000-8000-00805f9b34fb";
2465
+ readonly tx_power_level: "00002a07-0000-1000-8000-00805f9b34fb";
2466
+ readonly uncertainty: "00002ab4-0000-1000-8000-00805f9b34fb";
2467
+ readonly unread_alert_status: "00002a45-0000-1000-8000-00805f9b34fb";
2468
+ readonly uri: "00002ab6-0000-1000-8000-00805f9b34fb";
2469
+ readonly user_control_point: "00002a9f-0000-1000-8000-00805f9b34fb";
2470
+ readonly user_index: "00002a9a-0000-1000-8000-00805f9b34fb";
2471
+ readonly uv_index: "00002a76-0000-1000-8000-00805f9b34fb";
2472
+ readonly vo2_max: "00002a96-0000-1000-8000-00805f9b34fb";
2473
+ readonly waist_circumference: "00002a97-0000-1000-8000-00805f9b34fb";
2474
+ readonly weight: "00002a98-0000-1000-8000-00805f9b34fb";
2475
+ readonly weight_measurement: "00002a9d-0000-1000-8000-00805f9b34fb";
2476
+ readonly weight_scale_feature: "00002a9e-0000-1000-8000-00805f9b34fb";
2477
+ readonly wind_chill: "00002a79-0000-1000-8000-00805f9b34fb";
2478
+ }>
2479
+ ```
2480
+
2481
+ #### GATT_DESCRIPTOR_ID
2482
+
2483
+ <a id="api-gatt-descriptor-id"></a>
2484
+
2485
+ ```typescript
2486
+ GATT_DESCRIPTOR_ID: Readonly<{
2487
+ readonly es_configuration: 10507;
2488
+ readonly es_measurement: 10508;
2489
+ readonly es_trigger_setting: 10509;
2490
+ readonly external_report_reference: 10503;
2491
+ readonly "gatt.characteristic_aggregate_format": 10501;
2492
+ readonly "gatt.characteristic_extended_properties": 10496;
2493
+ readonly "gatt.characteristic_presentation_format": 10500;
2494
+ readonly "gatt.characteristic_user_description": 10497;
2495
+ readonly "gatt.client_characteristic_configuration": 10498;
2496
+ readonly "gatt.server_characteristic_configuration": 10499;
2497
+ readonly number_of_digitals: 10505;
2498
+ readonly report_reference: 10504;
2499
+ readonly time_trigger_setting: 10510;
2500
+ readonly valid_range: 10502;
2501
+ readonly value_trigger_setting: 10506;
2502
+ }>
2503
+ ```
2504
+
2505
+ #### GATT_DESCRIPTOR_UUID
2506
+
2507
+ <a id="api-gatt-descriptor-uuid"></a>
2508
+
2509
+ ```typescript
2510
+ GATT_DESCRIPTOR_UUID: Readonly<{
2511
+ readonly es_configuration: "0000290b-0000-1000-8000-00805f9b34fb";
2512
+ readonly es_measurement: "0000290c-0000-1000-8000-00805f9b34fb";
2513
+ readonly es_trigger_setting: "0000290d-0000-1000-8000-00805f9b34fb";
2514
+ readonly external_report_reference: "00002907-0000-1000-8000-00805f9b34fb";
2515
+ readonly "gatt.characteristic_aggregate_format": "00002905-0000-1000-8000-00805f9b34fb";
2516
+ readonly "gatt.characteristic_extended_properties": "00002900-0000-1000-8000-00805f9b34fb";
2517
+ readonly "gatt.characteristic_presentation_format": "00002904-0000-1000-8000-00805f9b34fb";
2518
+ readonly "gatt.characteristic_user_description": "00002901-0000-1000-8000-00805f9b34fb";
2519
+ readonly "gatt.client_characteristic_configuration": "00002902-0000-1000-8000-00805f9b34fb";
2520
+ readonly "gatt.server_characteristic_configuration": "00002903-0000-1000-8000-00805f9b34fb";
2521
+ readonly number_of_digitals: "00002909-0000-1000-8000-00805f9b34fb";
2522
+ readonly report_reference: "00002908-0000-1000-8000-00805f9b34fb";
2523
+ readonly time_trigger_setting: "0000290e-0000-1000-8000-00805f9b34fb";
2524
+ readonly valid_range: "00002906-0000-1000-8000-00805f9b34fb";
2525
+ readonly value_trigger_setting: "0000290a-0000-1000-8000-00805f9b34fb";
2526
+ }>
2527
+ ```
2528
+
2529
+ #### GATT_SERVICE_ID
2530
+
2531
+ <a id="api-gatt-service-id"></a>
2532
+
2533
+ ```typescript
2534
+ GATT_SERVICE_ID: Readonly<{
2535
+ readonly alert_notification: 6161;
2536
+ readonly automation_io: 6165;
2537
+ readonly battery_service: 6159;
2538
+ readonly blood_pressure: 6160;
2539
+ readonly body_composition: 6171;
2540
+ readonly bond_management: 6174;
2541
+ readonly continuous_glucose_monitoring: 6175;
2542
+ readonly current_time: 6149;
2543
+ readonly cycling_power: 6168;
2544
+ readonly cycling_speed_and_cadence: 6166;
2545
+ readonly device_information: 6154;
2546
+ readonly environmental_sensing: 6170;
2547
+ readonly fitness_machine: 6182;
2548
+ readonly generic_access: 6144;
2549
+ readonly generic_attribute: 6145;
2550
+ readonly glucose: 6152;
2551
+ readonly health_thermometer: 6153;
2552
+ readonly heart_rate: 6157;
2553
+ readonly http_proxy: 6179;
2554
+ readonly human_interface_device: 6162;
2555
+ readonly immediate_alert: 6146;
2556
+ readonly indoor_positioning: 6177;
2557
+ readonly internet_protocol_support: 6176;
2558
+ readonly link_loss: 6147;
2559
+ readonly location_and_navigation: 6169;
2560
+ readonly mesh_provisioning: 6183;
2561
+ readonly mesh_proxy: 6184;
2562
+ readonly next_dst_change: 6151;
2563
+ readonly object_transfer: 6181;
2564
+ readonly phone_alert_status: 6158;
2565
+ readonly pulse_oximeter: 6178;
2566
+ readonly reconnection_configuration: 6185;
2567
+ readonly reference_time_update: 6150;
2568
+ readonly running_speed_and_cadence: 6164;
2569
+ readonly scan_parameters: 6163;
2570
+ readonly transport_discovery: 6180;
2571
+ readonly tx_power: 6148;
2572
+ readonly user_data: 6172;
2573
+ readonly weight_scale: 6173;
2574
+ }>
2575
+ ```
2576
+
2577
+ #### GATT_SERVICE_UUID
2578
+
2579
+ <a id="api-gatt-service-uuid"></a>
2580
+
2581
+ ```typescript
2582
+ GATT_SERVICE_UUID: Readonly<{
2583
+ readonly alert_notification: "00001811-0000-1000-8000-00805f9b34fb";
2584
+ readonly automation_io: "00001815-0000-1000-8000-00805f9b34fb";
2585
+ readonly battery_service: "0000180f-0000-1000-8000-00805f9b34fb";
2586
+ readonly blood_pressure: "00001810-0000-1000-8000-00805f9b34fb";
2587
+ readonly body_composition: "0000181b-0000-1000-8000-00805f9b34fb";
2588
+ readonly bond_management: "0000181e-0000-1000-8000-00805f9b34fb";
2589
+ readonly continuous_glucose_monitoring: "0000181f-0000-1000-8000-00805f9b34fb";
2590
+ readonly current_time: "00001805-0000-1000-8000-00805f9b34fb";
2591
+ readonly cycling_power: "00001818-0000-1000-8000-00805f9b34fb";
2592
+ readonly cycling_speed_and_cadence: "00001816-0000-1000-8000-00805f9b34fb";
2593
+ readonly device_information: "0000180a-0000-1000-8000-00805f9b34fb";
2594
+ readonly environmental_sensing: "0000181a-0000-1000-8000-00805f9b34fb";
2595
+ readonly fitness_machine: "00001826-0000-1000-8000-00805f9b34fb";
2596
+ readonly generic_access: "00001800-0000-1000-8000-00805f9b34fb";
2597
+ readonly generic_attribute: "00001801-0000-1000-8000-00805f9b34fb";
2598
+ readonly glucose: "00001808-0000-1000-8000-00805f9b34fb";
2599
+ readonly health_thermometer: "00001809-0000-1000-8000-00805f9b34fb";
2600
+ readonly heart_rate: "0000180d-0000-1000-8000-00805f9b34fb";
2601
+ readonly http_proxy: "00001823-0000-1000-8000-00805f9b34fb";
2602
+ readonly human_interface_device: "00001812-0000-1000-8000-00805f9b34fb";
2603
+ readonly immediate_alert: "00001802-0000-1000-8000-00805f9b34fb";
2604
+ readonly indoor_positioning: "00001821-0000-1000-8000-00805f9b34fb";
2605
+ readonly internet_protocol_support: "00001820-0000-1000-8000-00805f9b34fb";
2606
+ readonly link_loss: "00001803-0000-1000-8000-00805f9b34fb";
2607
+ readonly location_and_navigation: "00001819-0000-1000-8000-00805f9b34fb";
2608
+ readonly mesh_provisioning: "00001827-0000-1000-8000-00805f9b34fb";
2609
+ readonly mesh_proxy: "00001828-0000-1000-8000-00805f9b34fb";
2610
+ readonly next_dst_change: "00001807-0000-1000-8000-00805f9b34fb";
2611
+ readonly object_transfer: "00001825-0000-1000-8000-00805f9b34fb";
2612
+ readonly phone_alert_status: "0000180e-0000-1000-8000-00805f9b34fb";
2613
+ readonly pulse_oximeter: "00001822-0000-1000-8000-00805f9b34fb";
2614
+ readonly reconnection_configuration: "00001829-0000-1000-8000-00805f9b34fb";
2615
+ readonly reference_time_update: "00001806-0000-1000-8000-00805f9b34fb";
2616
+ readonly running_speed_and_cadence: "00001814-0000-1000-8000-00805f9b34fb";
2617
+ readonly scan_parameters: "00001813-0000-1000-8000-00805f9b34fb";
2618
+ readonly transport_discovery: "00001824-0000-1000-8000-00805f9b34fb";
2619
+ readonly tx_power: "00001804-0000-1000-8000-00805f9b34fb";
2620
+ readonly user_data: "0000181c-0000-1000-8000-00805f9b34fb";
2621
+ readonly weight_scale: "0000181d-0000-1000-8000-00805f9b34fb";
2622
+ }>
2623
+ ```
2624
+