incyclist-devices 1.5.37 → 2.0.0-beta.1

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 (251) hide show
  1. package/README.MD +0 -0
  2. package/lib/adapters.d.ts +6 -0
  3. package/lib/adapters.js +30 -0
  4. package/lib/antv2/adapter-factory.d.ts +20 -10
  5. package/lib/antv2/adapter-factory.js +49 -33
  6. package/lib/antv2/adapter.d.ts +64 -0
  7. package/lib/antv2/adapter.js +299 -0
  8. package/lib/antv2/ant-interface.d.ts +11 -9
  9. package/lib/antv2/ant-interface.js +15 -11
  10. package/lib/antv2/fe/adapter.d.ts +25 -0
  11. package/lib/antv2/{fe.js → fe/adapter.js} +48 -72
  12. package/lib/antv2/fe/index.d.ts +2 -0
  13. package/lib/antv2/fe/index.js +7 -0
  14. package/lib/antv2/hr/adapter.d.ts +14 -0
  15. package/lib/antv2/hr/adapter.js +73 -0
  16. package/lib/antv2/hr/index.d.ts +2 -0
  17. package/lib/antv2/hr/index.js +7 -0
  18. package/lib/antv2/index.d.ts +7 -0
  19. package/lib/antv2/index.js +20 -0
  20. package/lib/antv2/modes/ant-fe-adv-st-mode.d.ts +9 -0
  21. package/lib/{ant/antfe → antv2/modes}/ant-fe-adv-st-mode.js +1 -1
  22. package/lib/antv2/modes/ant-fe-erg-mode.d.ts +6 -0
  23. package/lib/{ant/antfe → antv2/modes}/ant-fe-erg-mode.js +1 -1
  24. package/lib/antv2/modes/ant-fe-st-mode.d.ts +5 -0
  25. package/lib/{ant/antfe → antv2/modes}/ant-fe-st-mode.js +1 -1
  26. package/lib/antv2/pwr/adapter.d.ts +22 -0
  27. package/lib/antv2/{pwr.js → pwr/adapter.js} +38 -76
  28. package/lib/antv2/pwr/index.d.ts +2 -0
  29. package/lib/antv2/pwr/index.js +7 -0
  30. package/lib/antv2/types.d.ts +19 -0
  31. package/lib/antv2/types.js +2 -0
  32. package/lib/antv2/utils.d.ts +1 -0
  33. package/lib/antv2/utils.js +181 -0
  34. package/lib/base/adpater.d.ts +56 -0
  35. package/lib/base/adpater.js +144 -0
  36. package/lib/ble/adapter-factory.d.ts +31 -0
  37. package/lib/ble/adapter-factory.js +96 -0
  38. package/lib/ble/adapter.d.ts +41 -0
  39. package/lib/ble/adapter.js +188 -0
  40. package/lib/ble/{ble-device.d.ts → ble-comms.d.ts} +9 -4
  41. package/lib/ble/{ble-device.js → ble-comms.js} +23 -11
  42. package/lib/ble/ble-interface.d.ts +15 -24
  43. package/lib/ble/ble-interface.js +32 -137
  44. package/lib/ble/ble-peripheral.d.ts +3 -3
  45. package/lib/ble/ble-peripheral.js +14 -14
  46. package/lib/ble/ble.d.ts +9 -81
  47. package/lib/ble/ble.js +1 -39
  48. package/lib/ble/consts.d.ts +2 -0
  49. package/lib/ble/consts.js +3 -1
  50. package/lib/ble/cp/adapter.d.ts +23 -0
  51. package/lib/ble/cp/adapter.js +124 -0
  52. package/lib/ble/cp/comm.d.ts +28 -0
  53. package/lib/ble/cp/comm.js +140 -0
  54. package/lib/ble/cp/index.d.ts +4 -0
  55. package/lib/ble/cp/index.js +10 -0
  56. package/lib/ble/cp/types.d.ts +13 -0
  57. package/lib/ble/cp/types.js +2 -0
  58. package/lib/ble/elite/adapter.d.ts +20 -0
  59. package/lib/ble/elite/adapter.js +127 -0
  60. package/lib/ble/elite/comms.d.ts +28 -0
  61. package/lib/ble/elite/comms.js +139 -0
  62. package/lib/ble/elite/index.d.ts +3 -0
  63. package/lib/ble/elite/index.js +10 -0
  64. package/lib/ble/fm/adapter.d.ts +21 -0
  65. package/lib/ble/fm/adapter.js +190 -0
  66. package/lib/ble/fm/comms.d.ts +50 -0
  67. package/lib/ble/{fm.js → fm/comms.js} +3 -224
  68. package/lib/ble/fm/consts.d.ts +6 -0
  69. package/lib/ble/fm/consts.js +9 -0
  70. package/lib/ble/fm/index.d.ts +5 -0
  71. package/lib/ble/fm/index.js +13 -0
  72. package/lib/ble/fm/types.d.ts +25 -0
  73. package/lib/ble/fm/types.js +2 -0
  74. package/lib/ble/hr/adapter.d.ts +17 -0
  75. package/lib/ble/hr/adapter.js +62 -0
  76. package/lib/ble/hr/comm.d.ts +15 -0
  77. package/lib/ble/hr/comm.js +52 -0
  78. package/lib/ble/hr/index.d.ts +4 -0
  79. package/lib/ble/hr/index.js +10 -0
  80. package/lib/ble/hr/types.d.ts +5 -0
  81. package/lib/ble/hr/types.js +2 -0
  82. package/lib/ble/index.d.ts +8 -0
  83. package/lib/ble/index.js +26 -0
  84. package/lib/ble/tacx/adapter.d.ts +10 -0
  85. package/lib/ble/tacx/adapter.js +93 -0
  86. package/lib/ble/{tacx.d.ts → tacx/comms.d.ts} +6 -38
  87. package/lib/ble/{tacx.js → tacx/comms.js} +13 -112
  88. package/lib/ble/tacx/index.d.ts +4 -0
  89. package/lib/ble/tacx/index.js +10 -0
  90. package/lib/ble/tacx/types.d.ts +25 -0
  91. package/lib/ble/tacx/types.js +2 -0
  92. package/lib/ble/types.d.ts +101 -0
  93. package/lib/ble/types.js +19 -0
  94. package/lib/ble/utils.d.ts +7 -0
  95. package/lib/ble/utils.js +95 -0
  96. package/lib/ble/wahoo/adapter.d.ts +9 -0
  97. package/lib/ble/wahoo/adapter.js +93 -0
  98. package/lib/ble/{wahoo-kickr.d.ts → wahoo/comms.d.ts} +5 -39
  99. package/lib/ble/{wahoo-kickr.js → wahoo/comms.js} +14 -112
  100. package/lib/ble/wahoo/index.d.ts +4 -0
  101. package/lib/ble/wahoo/index.js +10 -0
  102. package/lib/ble/wahoo/types.d.ts +19 -0
  103. package/lib/ble/wahoo/types.js +2 -0
  104. package/lib/device.d.ts +0 -94
  105. package/lib/device.js +0 -76
  106. package/lib/index.d.ts +12 -0
  107. package/lib/index.js +38 -0
  108. package/lib/interfaces.d.ts +6 -0
  109. package/lib/interfaces.js +23 -0
  110. package/lib/{ble → modes}/ble-erg-mode.d.ts +4 -4
  111. package/lib/{ble → modes}/ble-erg-mode.js +2 -2
  112. package/lib/{ble → modes}/ble-st-mode.d.ts +3 -3
  113. package/lib/{ble → modes}/ble-st-mode.js +1 -1
  114. package/lib/{cycling-mode.d.ts → modes/cycling-mode.d.ts} +8 -8
  115. package/lib/modes/power-base.d.ts +3 -3
  116. package/lib/modes/power-base.js +4 -4
  117. package/lib/modes/power-meter.d.ts +3 -3
  118. package/lib/modes/simulator.d.ts +2 -2
  119. package/lib/modes/simulator.js +1 -1
  120. package/lib/serial/adapter-factory.d.ts +12 -0
  121. package/lib/serial/adapter-factory.js +30 -0
  122. package/lib/serial/adapter.d.ts +16 -0
  123. package/lib/serial/adapter.js +42 -0
  124. package/lib/serial/bindings/tcp.d.ts +44 -0
  125. package/lib/serial/bindings/tcp.js +270 -0
  126. package/lib/serial/comm.d.ts +7 -0
  127. package/lib/serial/comm.js +2 -0
  128. package/lib/{daum → serial/daum}/DaumAdapter.d.ts +13 -22
  129. package/lib/{daum → serial/daum}/DaumAdapter.js +44 -90
  130. package/lib/{daum → serial/daum}/DaumPowerMeterCyclingMode.d.ts +2 -2
  131. package/lib/{daum → serial/daum}/DaumPowerMeterCyclingMode.js +1 -1
  132. package/lib/{daum → serial/daum}/ERGCyclingMode.d.ts +3 -3
  133. package/lib/{daum → serial/daum}/ERGCyclingMode.js +3 -3
  134. package/lib/{daum → serial/daum}/SmartTrainerCyclingMode.d.ts +3 -3
  135. package/lib/{daum → serial/daum}/SmartTrainerCyclingMode.js +4 -3
  136. package/lib/serial/daum/classic/adapter.d.ts +29 -0
  137. package/lib/{daum/classic/DaumClassicAdapter.js → serial/daum/classic/adapter.js} +77 -50
  138. package/lib/{daum/classic/bike.d.ts → serial/daum/classic/comms.d.ts} +14 -16
  139. package/lib/{daum/classic/bike.js → serial/daum/classic/comms.js} +68 -152
  140. package/lib/serial/daum/classic/mock.d.ts +96 -0
  141. package/lib/serial/daum/classic/mock.js +365 -0
  142. package/lib/{daum/classic/DaumClassicCyclingMode.d.ts → serial/daum/classic/modes/daum-classic.d.ts} +3 -3
  143. package/lib/{daum/classic/DaumClassicCyclingMode.js → serial/daum/classic/modes/daum-classic.js} +2 -2
  144. package/lib/{daum → serial/daum}/classic/utils.d.ts +1 -1
  145. package/lib/serial/daum/premium/adapter.d.ts +24 -0
  146. package/lib/{daum/premium/DaumPremiumAdapter.js → serial/daum/premium/adapter.js} +99 -46
  147. package/lib/{daum/premium/bike.d.ts → serial/daum/premium/comms.d.ts} +26 -54
  148. package/lib/{daum/premium/bike.js → serial/daum/premium/comms.js} +214 -420
  149. package/lib/serial/daum/premium/mock.d.ts +75 -0
  150. package/lib/serial/daum/premium/mock.js +290 -0
  151. package/lib/{daum/premium/DaumClassicCyclingMode.d.ts → serial/daum/premium/modes/daum-classic.d.ts} +3 -3
  152. package/lib/{daum/premium/DaumClassicCyclingMode.js → serial/daum/premium/modes/daum-classic.js} +2 -2
  153. package/lib/serial/daum/premium/types.d.ts +12 -0
  154. package/lib/serial/daum/premium/types.js +2 -0
  155. package/lib/{daum → serial/daum}/premium/utils.d.ts +8 -11
  156. package/lib/{daum → serial/daum}/premium/utils.js +22 -63
  157. package/lib/serial/index.d.ts +9 -0
  158. package/lib/serial/index.js +49 -0
  159. package/lib/{kettler → serial/kettler}/comms.d.ts +8 -6
  160. package/lib/{kettler → serial/kettler}/comms.js +71 -32
  161. package/lib/{kettler → serial/kettler}/ergo-racer/adapter.d.ts +13 -24
  162. package/lib/{kettler → serial/kettler}/ergo-racer/adapter.js +87 -130
  163. package/lib/serial/kettler/ergo-racer/mock.d.ts +66 -0
  164. package/lib/serial/kettler/ergo-racer/mock.js +216 -0
  165. package/lib/{kettler/ergo-racer/ERGCyclingMode.d.ts → serial/kettler/ergo-racer/modes/erg.d.ts} +4 -4
  166. package/lib/{kettler/ergo-racer/ERGCyclingMode.js → serial/kettler/ergo-racer/modes/erg.js} +2 -2
  167. package/lib/serial/serial-interface.d.ts +58 -0
  168. package/lib/serial/serial-interface.js +283 -0
  169. package/lib/simulator/Simulator.d.ts +10 -25
  170. package/lib/simulator/Simulator.js +19 -83
  171. package/lib/types/adapter.d.ts +32 -0
  172. package/lib/types/adapter.js +2 -0
  173. package/lib/types/capabilities.d.ts +8 -0
  174. package/lib/types/capabilities.js +12 -0
  175. package/lib/types/data.d.ts +12 -0
  176. package/lib/types/data.js +2 -0
  177. package/lib/types/device.d.ts +29 -0
  178. package/lib/types/device.js +11 -0
  179. package/lib/types/interface.d.ts +14 -0
  180. package/lib/types/interface.js +2 -0
  181. package/lib/types/route.d.ts +2 -2
  182. package/lib/types/user.d.ts +1 -1
  183. package/lib/{utils.d.ts → utils/utils.d.ts} +1 -0
  184. package/lib/{utils.js → utils/utils.js} +5 -1
  185. package/package.json +15 -11
  186. package/lib/DeviceSupport.d.ts +0 -36
  187. package/lib/DeviceSupport.js +0 -82
  188. package/lib/ant/AntAdapter.d.ts +0 -50
  189. package/lib/ant/AntAdapter.js +0 -109
  190. package/lib/ant/AntScanner.d.ts +0 -60
  191. package/lib/ant/AntScanner.js +0 -651
  192. package/lib/ant/antfe/AntFEAdapter.d.ts +0 -83
  193. package/lib/ant/antfe/AntFEAdapter.js +0 -652
  194. package/lib/ant/antfe/ant-fe-adv-st-mode.d.ts +0 -9
  195. package/lib/ant/antfe/ant-fe-erg-mode.d.ts +0 -6
  196. package/lib/ant/antfe/ant-fe-st-mode.d.ts +0 -5
  197. package/lib/ant/anthrm/AntHrmAdapter.d.ts +0 -16
  198. package/lib/ant/anthrm/AntHrmAdapter.js +0 -130
  199. package/lib/ant/antpwr/pwr-adapter.d.ts +0 -49
  200. package/lib/ant/antpwr/pwr-adapter.js +0 -251
  201. package/lib/ant/utils.d.ts +0 -1
  202. package/lib/ant/utils.js +0 -23
  203. package/lib/antv2/AntAdapter.d.ts +0 -48
  204. package/lib/antv2/AntAdapter.js +0 -104
  205. package/lib/antv2/ant-device.d.ts +0 -59
  206. package/lib/antv2/ant-device.js +0 -161
  207. package/lib/antv2/fe.d.ts +0 -32
  208. package/lib/antv2/hr.d.ts +0 -18
  209. package/lib/antv2/hr.js +0 -102
  210. package/lib/antv2/incyclist-protocol.d.ts +0 -37
  211. package/lib/antv2/incyclist-protocol.js +0 -126
  212. package/lib/antv2/pwr.d.ts +0 -28
  213. package/lib/ble/elite.d.ts +0 -90
  214. package/lib/ble/elite.js +0 -322
  215. package/lib/ble/fm.d.ts +0 -125
  216. package/lib/ble/hrm.d.ts +0 -48
  217. package/lib/ble/hrm.js +0 -134
  218. package/lib/ble/incyclist-protocol.d.ts +0 -31
  219. package/lib/ble/incyclist-protocol.js +0 -153
  220. package/lib/ble/pwr.d.ts +0 -89
  221. package/lib/ble/pwr.js +0 -322
  222. package/lib/daum/classic/DaumClassicAdapter.d.ts +0 -28
  223. package/lib/daum/classic/DaumClassicProtocol.d.ts +0 -27
  224. package/lib/daum/classic/DaumClassicProtocol.js +0 -185
  225. package/lib/daum/premium/DaumPremiumAdapter.d.ts +0 -16
  226. package/lib/daum/premium/DaumPremiumProtocol.d.ts +0 -32
  227. package/lib/daum/premium/DaumPremiumProtocol.js +0 -207
  228. package/lib/daum/premium/tcpserial.d.ts +0 -33
  229. package/lib/daum/premium/tcpserial.js +0 -123
  230. package/lib/kettler/ergo-racer/protocol.d.ts +0 -41
  231. package/lib/kettler/ergo-racer/protocol.js +0 -203
  232. package/lib/protocol.d.ts +0 -74
  233. package/lib/protocol.js +0 -41
  234. package/lib/registry.d.ts +0 -8
  235. package/lib/registry.js +0 -33
  236. package/lib/serialport/bindings/tcp.d.ts +0 -20
  237. package/lib/serialport/bindings/tcp.js +0 -33
  238. package/lib/serialport/index.d.ts +0 -2
  239. package/lib/serialport/index.js +0 -29
  240. package/lib/serialport/serialport.d.ts +0 -29
  241. package/lib/serialport/serialport.js +0 -87
  242. /package/lib/antv2/{ant-binding.d.ts → binding.d.ts} +0 -0
  243. /package/lib/antv2/{ant-binding.js → binding.js} +0 -0
  244. /package/lib/{cycling-mode.js → modes/cycling-mode.js} +0 -0
  245. /package/lib/{daum → serial/daum}/classic/utils.js +0 -0
  246. /package/lib/{daum → serial/daum}/constants.d.ts +0 -0
  247. /package/lib/{daum → serial/daum}/constants.js +0 -0
  248. /package/lib/{serialport.d.ts → serial/serialport.d.ts} +0 -0
  249. /package/lib/{serialport.js → serial/serialport.js} +0 -0
  250. /package/lib/{calculations.d.ts → utils/calculations.d.ts} +0 -0
  251. /package/lib/{calculations.js → utils/calculations.js} +0 -0
@@ -1,652 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const gd_eventlog_1 = require("gd-eventlog");
16
- const AntAdapter_1 = __importDefault(require("../AntAdapter"));
17
- const utils_1 = require("../utils");
18
- const utils_2 = require("../../utils");
19
- const ant_fe_st_mode_1 = __importDefault(require("./ant-fe-st-mode"));
20
- const ant_fe_erg_mode_1 = __importDefault(require("./ant-fe-erg-mode"));
21
- const ant_fe_adv_st_mode_1 = __importDefault(require("./ant-fe-adv-st-mode"));
22
- const hex = (v) => Math.abs(v).toString(16).toUpperCase();
23
- const TIMEOUT_ACK = 1000;
24
- const TIMEOUT_START = 10000;
25
- const TIMEOUT_ATTACH = 3000;
26
- const DEFAULT_USER_WEIGHT = 75;
27
- const DEFAULT_BIKE_WEIGHT = 10;
28
- const DEFAULT_BIKE_WEIGHT_MOUNTAIN = 14.5;
29
- class MockLogger {
30
- log(...args) { console.log('~~~~~Ant:', ...args); }
31
- logEvent(event) { console.log('~~~~~Ant:' + event.message, event); }
32
- }
33
- class AntFEAdapter extends AntAdapter_1.default {
34
- constructor(DeviceID, port, stick, protocol) {
35
- super(protocol);
36
- this.logger = new gd_eventlog_1.EventLogger('Ant+FE');
37
- this.logger.logEvent({ message: 'Ant+FE Adapter created', DeviceID, port });
38
- this.deviceID = DeviceID;
39
- this.port = port;
40
- this.stick = stick;
41
- this.deviceData = {
42
- DeviceID
43
- };
44
- this.data = {};
45
- this.started = false;
46
- this.starting = false;
47
- this.connected = false;
48
- }
49
- isBike() { return true; }
50
- isHrm() { return this.deviceData.HeartRate !== undefined; }
51
- isPower() { return true; }
52
- getProfile() {
53
- return 'Smart Trainer';
54
- }
55
- getName() {
56
- return `Ant+FE ${this.deviceID}`;
57
- }
58
- getDisplayName() {
59
- const { DeviceID, ManId, ComputedHeartRate } = this.deviceData;
60
- const hrmStr = ComputedHeartRate ? ` (${ComputedHeartRate})` : '';
61
- return `${(0, utils_1.getBrand)(ManId)} FE ${DeviceID}${hrmStr}`;
62
- }
63
- getSupportedCyclingModes() {
64
- return [ant_fe_st_mode_1.default, ant_fe_erg_mode_1.default, ant_fe_adv_st_mode_1.default];
65
- }
66
- setCyclingMode(mode, settings) {
67
- let selectedMode;
68
- if (typeof mode === 'string') {
69
- const supported = this.getSupportedCyclingModes();
70
- const CyclingModeClass = supported.find(M => { const m = new M(this); return m.getName() === mode; });
71
- if (CyclingModeClass) {
72
- this.cyclingMode = new CyclingModeClass(this, settings);
73
- return;
74
- }
75
- selectedMode = this.getDefaultCyclingMode();
76
- }
77
- else {
78
- selectedMode = mode;
79
- }
80
- this.cyclingMode = selectedMode;
81
- this.cyclingMode.setSettings(settings);
82
- }
83
- getCyclingMode() {
84
- if (!this.cyclingMode)
85
- this.cyclingMode = this.getDefaultCyclingMode();
86
- return this.cyclingMode;
87
- }
88
- getDefaultCyclingMode() {
89
- return new ant_fe_st_mode_1.default(this);
90
- }
91
- onAttached() {
92
- this.logger.logEvent({ message: 'Device connected' });
93
- this.connected = true;
94
- }
95
- getLogData(data, excludeList) {
96
- const logData = JSON.parse(JSON.stringify(data));
97
- excludeList.forEach((key) => {
98
- delete logData[key];
99
- });
100
- return logData;
101
- }
102
- onDeviceData(deviceData) {
103
- if (!this.started || this.isStopped())
104
- return;
105
- this.deviceData = deviceData;
106
- try {
107
- if (this.onDataFn && !(this.ignoreHrm && this.ignoreBike && this.ignorePower) && !this.paused) {
108
- if (!this.lastUpdate || (Date.now() - this.lastUpdate) > this.updateFrequency) {
109
- const logData = this.getLogData(deviceData, ['PairedDevices', 'RawData']);
110
- this.logger.logEvent({ message: 'onDeviceData', data: logData });
111
- let incyclistData = this.mapData(deviceData);
112
- incyclistData = this.getCyclingMode().updateData(incyclistData);
113
- const data = this.transformData(incyclistData);
114
- this.onDataFn(data);
115
- this.lastUpdate = Date.now();
116
- }
117
- }
118
- }
119
- catch (err) {
120
- }
121
- }
122
- mapData(deviceData) {
123
- const data = {
124
- isPedalling: false,
125
- power: 0,
126
- pedalRpm: undefined,
127
- speed: 0,
128
- heartrate: 0,
129
- distanceInternal: 0,
130
- slope: undefined,
131
- time: undefined
132
- };
133
- data.speed = (deviceData.VirtualSpeed !== undefined ? deviceData.VirtualSpeed : (deviceData.RealSpeed || 0)) * 3.6;
134
- data.slope = (deviceData.Incline !== undefined ? deviceData.Incline : data.slope);
135
- data.power = (deviceData.InstantaneousPower !== undefined ? deviceData.InstantaneousPower : data.power);
136
- data.time = (deviceData.ElapsedTime !== undefined ? deviceData.ElapsedTime : data.time);
137
- data.pedalRpm = (deviceData.Cadence !== undefined ? deviceData.Cadence : data.pedalRpm);
138
- data.isPedalling = data.pedalRpm > 0 || (data.pedalRpm === undefined && data.power > 0);
139
- return data;
140
- }
141
- onDeviceEvent(data) {
142
- try {
143
- const cmdInfo = this.currentCmd;
144
- if (!cmdInfo)
145
- return;
146
- const msg = cmdInfo.msg.readUInt8(2);
147
- const Constants = this.getProtocol().getAnt().Constants;
148
- const { expectedResponse } = cmdInfo;
149
- if (data.message === msg) {
150
- if (expectedResponse === undefined && data.code === Constants.EVENT_TRANSFER_TX_COMPLETED) {
151
- this.currentCmd.response = { success: true, message: hex(data.message), code: hex(data.code) };
152
- return;
153
- }
154
- if (expectedResponse === undefined && data.code !== Constants.EVENT_TRANSFER_TX_COMPLETED) {
155
- this.currentCmd.response = { success: false, message: hex(data.message), code: hex(data.code) };
156
- return;
157
- }
158
- }
159
- if (data.message === 1) {
160
- if (expectedResponse !== undefined && data.code === expectedResponse) {
161
- this.currentCmd.response = { success: true, message: hex(data.message), code: hex(data.code) };
162
- return;
163
- }
164
- if (expectedResponse === undefined && (data.code === Constants.EVENT_TRANSFER_TX_COMPLETED || data.code === 3)) {
165
- this.currentCmd.response = { success: true, message: hex(data.message), code: hex(data.code) };
166
- return;
167
- }
168
- if (data.code === Constants.EVENT_TRANSFER_TX_FAILED || data.code === Constants.EVENT_CHANNEL_COLLISION) {
169
- this.currentCmd.response = { success: false, message: hex(data.message), code: hex(data.code) };
170
- return;
171
- }
172
- }
173
- if (this.currentCmd !== undefined && data.message === Constants.MESSAGE_CHANNEL_ACKNOWLEDGED_DATA && data.code === 31) {
174
- this.logger.log("could not send (TRANSFER_IN_PROGRESS)");
175
- this.currentCmd.response = { success: false, message: hex(data.message), code: hex(data.code) };
176
- return;
177
- }
178
- this.logger.logEvent({ message: "Incoming Event ", event: { message: hex(data.message), code: hex(data.code) } });
179
- }
180
- catch (err) {
181
- this.logger.logEvent({ message: 'Error', fn: 'parseEvent', event: { message: hex(data.message), code: hex(data.code) }, error: err.message || err });
182
- }
183
- }
184
- transformData(bikeData) {
185
- if (bikeData === undefined)
186
- return;
187
- let distance = 0;
188
- if (this.distanceInternal !== undefined && bikeData.distanceInternal !== undefined) {
189
- distance = bikeData.distanceInternal - this.distanceInternal;
190
- }
191
- if (bikeData.distanceInternal !== undefined)
192
- this.distanceInternal = bikeData.distanceInternal;
193
- let data = {
194
- speed: bikeData.speed,
195
- slope: bikeData.slope,
196
- power: bikeData.power !== undefined ? Math.round(bikeData.power) : undefined,
197
- cadence: bikeData.pedalRpm !== undefined ? Math.round(bikeData.pedalRpm) : undefined,
198
- heartrate: bikeData.heartrate !== undefined ? Math.round(bikeData.heartrate) : undefined,
199
- distance,
200
- timestamp: Date.now()
201
- };
202
- if (this.ignorePower) {
203
- delete data.power;
204
- delete data.cadence;
205
- }
206
- if (this.ignoreBike) {
207
- data = { heartrate: data.heartrate };
208
- }
209
- if (this.ignoreHrm)
210
- delete data.heartrate;
211
- return data;
212
- }
213
- start(props) {
214
- const _super = Object.create(null, {
215
- start: { get: () => super.start }
216
- });
217
- return __awaiter(this, void 0, void 0, function* () {
218
- yield _super.start.call(this, props);
219
- this.logger.logEvent({ message: 'start()', props });
220
- const opts = props || {};
221
- const { args = {}, user = {} } = opts;
222
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
223
- if (this.ignoreHrm && this.ignoreBike && this.ignorePower) {
224
- this.logger.logEvent({ message: 'start() not done: bike disabled' });
225
- return resolve(false);
226
- }
227
- if (this.starting) {
228
- this.logger.logEvent({ message: 'start() not done: bike starting' });
229
- return resolve(false);
230
- }
231
- if (this.started) {
232
- this.logger.logEvent({ message: 'start() done: bike was already started' });
233
- this.startWorker();
234
- return resolve(true);
235
- }
236
- this.starting = true;
237
- const Ant = this.getProtocol().getAnt();
238
- const protocol = this.getProtocol();
239
- let start = Date.now();
240
- let timeout = start + (args.timeout || TIMEOUT_ATTACH);
241
- const ivAttach = setInterval(() => {
242
- if (Date.now() > timeout) {
243
- clearInterval(ivAttach);
244
- this.starting = false;
245
- reject(new Error('timeout'));
246
- }
247
- if (this.isStopped()) {
248
- clearInterval(ivAttach);
249
- this.starting = false;
250
- reject(new Error('stopped'));
251
- }
252
- }, 100);
253
- try {
254
- if (!this.connected) {
255
- this.logger.logEvent({ message: 'attach device ...' });
256
- yield protocol.attachSensors(this, Ant.FitnessEquipmentSensor, 'fitnessData');
257
- }
258
- clearInterval(ivAttach);
259
- this.startWorker();
260
- const tsStart = Date.now();
261
- const iv = setInterval(() => __awaiter(this, void 0, void 0, function* () {
262
- if (this.connected) {
263
- clearInterval(iv);
264
- let status = {
265
- trackResistanceSent: false,
266
- userSent: false,
267
- };
268
- (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
269
- if (this.isStopped())
270
- resolve(false);
271
- try {
272
- if (!status.trackResistanceSent) {
273
- yield this.sendTrackResistance(0.0);
274
- status.trackResistanceSent = true;
275
- }
276
- const mode = this.getCyclingMode();
277
- const bikeType = mode ? mode.getSetting('bikeType').toLowerCase() : 'race';
278
- const defaultBikeWeight = bikeType === 'mountain' ? DEFAULT_BIKE_WEIGHT_MOUNTAIN : DEFAULT_BIKE_WEIGHT;
279
- if (!status.userSent) {
280
- const userWeight = args.userWeight || user.weight || DEFAULT_USER_WEIGHT;
281
- const bikeWeight = args.bikeWeight || defaultBikeWeight;
282
- yield this.sendUserConfiguration(userWeight, bikeWeight, args.wheelDiameter, args.gearRatio);
283
- status.userSent = true;
284
- }
285
- this.started = true;
286
- this.starting = false;
287
- resolve(true);
288
- }
289
- catch (err) {
290
- throw (new Error(`could not start device, reason:${err.message || err}`));
291
- }
292
- }), 5, 1500)
293
- .catch(err => {
294
- this.logger.logEvent({ message: 'start() error', error: err.message || err });
295
- this.starting = false;
296
- reject(err);
297
- });
298
- }
299
- else if ((Date.now() - tsStart) > TIMEOUT_START) {
300
- clearInterval(iv);
301
- try {
302
- yield protocol.detachSensor(this);
303
- }
304
- catch (err) { }
305
- this.started = false;
306
- this.starting = false;
307
- reject(new Error('could not start device, reason:timeout'));
308
- }
309
- }), 50);
310
- }
311
- catch (err) {
312
- this.logger.logEvent({ message: 'start() error', error: err.message });
313
- this.starting = false;
314
- reject(new Error(`could not start device, reason:${err.message}`));
315
- }
316
- }));
317
- });
318
- }
319
- stop() {
320
- const _super = Object.create(null, {
321
- stop: { get: () => super.stop }
322
- });
323
- return __awaiter(this, void 0, void 0, function* () {
324
- yield _super.stop.call(this);
325
- this.logger.logEvent({ message: 'stop()' });
326
- this.stopWorker();
327
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
328
- this.starting = false;
329
- return resolve(true);
330
- }));
331
- });
332
- }
333
- sendUpdate(request) {
334
- return __awaiter(this, void 0, void 0, function* () {
335
- if (this.paused)
336
- return;
337
- const update = this.getCyclingMode().sendBikeUpdate(request);
338
- this.logger.logEvent({ message: 'send bike update requested', update, request });
339
- try {
340
- const isReset = (!request || request.reset || Object.keys(request).length === 0);
341
- if (isReset)
342
- this.sendTrackResistanceNR(0);
343
- if (update.slope !== undefined) {
344
- this.sendTrackResistanceNR(update.slope);
345
- }
346
- if (update.targetPower !== undefined) {
347
- this.sendTargetPowerNR(update.targetPower);
348
- }
349
- else if (request.maxPower !== undefined) {
350
- if (this.data.power && this.data.power > request.maxPower)
351
- this.sendTargetPowerNR(request.maxPower);
352
- }
353
- else if (request.minPower !== undefined) {
354
- if (this.data.power && this.data.power < request.minPower)
355
- this.sendTargetPowerNR(request.minPower);
356
- }
357
- }
358
- catch (err) {
359
- this.logger.logEvent({ message: 'sendBikeUpdate() error', error: err.message });
360
- }
361
- });
362
- }
363
- send(msg, logStr, callback, expectedResponse) {
364
- if (this.workerId === undefined) {
365
- return;
366
- }
367
- this.queue.enqueue({ msg, logStr, callback, expectedResponse });
368
- }
369
- sendAsync(msg, logStr, expectedResponse) {
370
- return new Promise((resolve, reject) => {
371
- this.send(msg, logStr, (res, err) => {
372
- if (err)
373
- return reject(err);
374
- resolve(res);
375
- }, expectedResponse);
376
- });
377
- }
378
- startWorker() {
379
- this.logger.logEvent({ message: 'startWorker()' });
380
- if (this.queue === undefined) {
381
- this.queue = new utils_2.Queue();
382
- }
383
- if (this.workerId)
384
- return;
385
- this.workerId = setInterval(() => {
386
- try {
387
- this.sendFromQueue();
388
- }
389
- catch (err) {
390
- this.logger.logEvent({ message: 'sendFromQueue error', error: err.message });
391
- }
392
- }, 10);
393
- }
394
- stopWorker() {
395
- if (!this.workerId)
396
- return;
397
- clearInterval(this.workerId);
398
- this.queue.clear();
399
- this.workerId = undefined;
400
- }
401
- sendFromQueue() {
402
- if (this.queue === undefined) {
403
- return;
404
- }
405
- if (this.currentCmd !== undefined) {
406
- const cmdInfo = this.currentCmd;
407
- if (this.currentCmd.response === undefined) {
408
- const { callback, logStr, tsStart } = cmdInfo;
409
- let timeout = cmdInfo.timeout;
410
- if (timeout === undefined)
411
- timeout = TIMEOUT_ACK;
412
- let duration = Date.now() - tsStart;
413
- if (duration > timeout) {
414
- this.logger.logEvent({ message: 'timeout', cmd: logStr, timeout: `${timeout}ms` });
415
- this.currentCmd = undefined;
416
- if (callback !== undefined) {
417
- callback(undefined, new Error('timeout'));
418
- }
419
- }
420
- }
421
- else {
422
- const { callback, response, logStr } = cmdInfo;
423
- this.logger.logEvent({ message: "response: ", cmd: logStr, response });
424
- this.currentCmd = undefined;
425
- if (callback !== undefined) {
426
- if (response && response.success === false) {
427
- callback(undefined, new Error(`ANT error ${response.code}`));
428
- return;
429
- }
430
- callback(response);
431
- }
432
- }
433
- }
434
- else {
435
- if (this.queue.isEmpty())
436
- return;
437
- this.currentCmd = this.queue.dequeue();
438
- this.currentCmd.tsStart = Date.now();
439
- const { msg, logStr } = this.currentCmd;
440
- this.logger.logEvent({ message: "sending", cmd: logStr, msg: (0, utils_2.hexstr)(msg), queueSize: this.queue.size() });
441
- if (this.stick)
442
- this.stick.write(msg);
443
- }
444
- }
445
- sendUserConfigurationNR(userWeight, bikeWeight, wheelDiameter, gearRatio) {
446
- this.sendUserConfiguration(userWeight, bikeWeight, wheelDiameter, gearRatio, true);
447
- }
448
- sendUserConfiguration(userWeight, bikeWeight, wheelDiameter, gearRatio, withoutResponse = false) {
449
- return new Promise((resolve, reject) => {
450
- if (!this.connected)
451
- reject(new Error('not connected'));
452
- if (!this.queue)
453
- this.startWorker();
454
- var payload = [];
455
- payload.push(this.channel);
456
- const logStr = `sendUserConfiguration(${userWeight},${bikeWeight},${wheelDiameter},${gearRatio})`;
457
- var m = userWeight === undefined ? 0xFFFF : userWeight;
458
- var mb = bikeWeight === undefined ? 0xFFF : bikeWeight;
459
- var d = wheelDiameter === undefined ? 0xFF : wheelDiameter;
460
- var gr = gearRatio === undefined ? 0x00 : gearRatio;
461
- var dOffset = 0xFF;
462
- if (m !== 0xFFFF)
463
- m = Math.trunc(m * 100);
464
- if (mb !== 0xFFF)
465
- mb = Math.trunc(mb * 20);
466
- if (d !== 0xFF) {
467
- d = d * 1000;
468
- dOffset = d % 10;
469
- d = Math.trunc(d / 10);
470
- }
471
- if (gr !== 0x00) {
472
- gr = Math.trunc(gr / 0.03);
473
- }
474
- payload.push(0x37);
475
- payload.push(m & 0xFF);
476
- payload.push((m >> 8) & 0xFF);
477
- payload.push(0xFF);
478
- payload.push(((mb & 0xF) << 4) | (dOffset & 0xF));
479
- payload.push((mb >> 4) & 0xF);
480
- payload.push(d & 0xFF);
481
- payload.push(gr & 0xFF);
482
- const Messages = this.protocol.getAnt().Messages;
483
- let msg = Messages.acknowledgedData(payload);
484
- if (withoutResponse) {
485
- this.send(msg, logStr);
486
- return resolve(true);
487
- }
488
- this.send(msg, logStr, (res, err) => {
489
- if (err)
490
- return reject(err);
491
- resolve(res);
492
- });
493
- });
494
- }
495
- sendBasicResistanceNR(resistance) {
496
- this.sendBasicResistance(resistance, true);
497
- }
498
- sendBasicResistance(resistance, withoutResponse = false) {
499
- return new Promise((resolve, reject) => {
500
- if (!this.connected)
501
- reject(new Error('not connected'));
502
- if (!this.queue)
503
- this.startWorker();
504
- var payload = [];
505
- payload.push(this.channel);
506
- const logStr = `sendBasicResistance(${resistance})`;
507
- var res = resistance === undefined ? 0 : resistance;
508
- res = res / 0.5;
509
- payload.push(0x30);
510
- payload.push(0xFF);
511
- payload.push(0xFF);
512
- payload.push(0xFF);
513
- payload.push(0xFF);
514
- payload.push(0xFF);
515
- payload.push(0xFF);
516
- payload.push(res & 0xFF);
517
- const Messages = this.protocol.getAnt().Messages;
518
- let msg = Messages.acknowledgedData(payload);
519
- if (withoutResponse) {
520
- this.send(msg, logStr);
521
- return resolve(true);
522
- }
523
- this.send(msg, logStr, (res, err) => {
524
- if (err)
525
- return reject(err);
526
- resolve(res);
527
- });
528
- });
529
- }
530
- sendTargetPowerNR(power) {
531
- this.sendTargetPower(power, true);
532
- }
533
- sendTargetPower(power, withoutResponse = false) {
534
- return new Promise((resolve, reject) => {
535
- if (!this.connected)
536
- reject(new Error('not connected'));
537
- if (!this.queue)
538
- this.startWorker();
539
- var payload = [];
540
- payload.push(this.channel);
541
- const logStr = `sendTargetPower(${power})`;
542
- var p = power === undefined ? 0x00 : power;
543
- p = p * 4;
544
- payload.push(0x31);
545
- payload.push(0xFF);
546
- payload.push(0xFF);
547
- payload.push(0xFF);
548
- payload.push(0xFF);
549
- payload.push(0xFF);
550
- payload.push(p & 0xFF);
551
- payload.push((p >> 8) & 0xFF);
552
- const Messages = this.protocol.getAnt().Messages;
553
- let msg = Messages.acknowledgedData(payload);
554
- if (withoutResponse) {
555
- this.send(msg, logStr);
556
- return resolve(true);
557
- }
558
- this.send(msg, logStr, (res, err) => {
559
- if (err)
560
- return reject(err);
561
- resolve(res);
562
- });
563
- });
564
- }
565
- sendWindResistanceNR(windCoeff, windSpeed, draftFactor) {
566
- this.sendWindResistance(windCoeff, windSpeed, draftFactor, true);
567
- }
568
- sendWindResistance(windCoeff, windSpeed, draftFactor, withoutResponse = false) {
569
- return new Promise((resolve, reject) => {
570
- if (!this.connected)
571
- reject(new Error('not connected'));
572
- if (!this.queue)
573
- this.startWorker();
574
- var payload = [];
575
- payload.push(this.channel);
576
- const logStr = `sendWindResistance(${windCoeff},${windSpeed},${draftFactor})`;
577
- var wc = windCoeff === undefined ? 0xFF : windCoeff;
578
- var ws = windSpeed === undefined ? 0xFF : windSpeed;
579
- var df = draftFactor === undefined ? 0xFF : draftFactor;
580
- if (wc !== 0xFF) {
581
- wc = Math.trunc(wc / 0.01);
582
- }
583
- if (ws !== 0xFF) {
584
- ws = Math.trunc(ws + 127);
585
- }
586
- if (df !== 0xFF) {
587
- df = Math.trunc(df / 0.01);
588
- }
589
- payload.push(0x32);
590
- payload.push(0xFF);
591
- payload.push(0xFF);
592
- payload.push(0xFF);
593
- payload.push(0xFF);
594
- payload.push(wc & 0xFF);
595
- payload.push(ws & 0xFF);
596
- payload.push(df & 0xFF);
597
- const Messages = this.protocol.getAnt().Messages;
598
- let msg = Messages.acknowledgedData(payload);
599
- if (withoutResponse) {
600
- this.send(msg, logStr);
601
- return resolve(true);
602
- }
603
- this.send(msg, logStr, (res, err) => {
604
- if (err)
605
- return reject(err);
606
- resolve(res);
607
- });
608
- });
609
- }
610
- sendTrackResistanceNR(slope, rrCoeff) {
611
- this.sendTrackResistance(slope, rrCoeff, true);
612
- }
613
- sendTrackResistance(slope, rrCoeff, withoutResponse = false) {
614
- return new Promise((resolve, reject) => {
615
- if (!this.connected)
616
- reject(new Error('not connected'));
617
- if (!this.queue)
618
- this.startWorker();
619
- var payload = [];
620
- payload.push(this.channel);
621
- const logStr = `sendTrackResistance(${slope},${rrCoeff})`;
622
- var s = slope === undefined ? 0xFFFF : slope;
623
- var rr = rrCoeff === undefined ? 0xFF : rrCoeff;
624
- if (s !== 0xFFFF) {
625
- s = Math.trunc((s + 200) / 0.01);
626
- }
627
- if (rr !== 0xFF) {
628
- rr = Math.trunc(rr / 0.00005);
629
- }
630
- payload.push(0x33);
631
- payload.push(0xFF);
632
- payload.push(0xFF);
633
- payload.push(0xFF);
634
- payload.push(0xFF);
635
- payload.push(s & 0xFF);
636
- payload.push((s >> 8) & 0xFF);
637
- payload.push(rr & 0xFF);
638
- const Messages = this.protocol.getAnt().Messages;
639
- let msg = Messages.acknowledgedData(payload);
640
- if (withoutResponse) {
641
- this.send(msg, logStr);
642
- return resolve(true);
643
- }
644
- this.send(msg, logStr, (res, err) => {
645
- if (err)
646
- return reject(err);
647
- resolve(res);
648
- });
649
- });
650
- }
651
- }
652
- exports.default = AntFEAdapter;
@@ -1,9 +0,0 @@
1
- import FtmsCyclingMode from "../../ble/ble-st-mode";
2
- import { UpdateRequest } from "../../cycling-mode";
3
- import { DeviceAdapter } from "../../device";
4
- export default class AntAdvSimCyclingMode extends FtmsCyclingMode {
5
- constructor(adapter: DeviceAdapter, props?: any);
6
- getName(): string;
7
- getDescription(): string;
8
- sendBikeUpdate(request: UpdateRequest): UpdateRequest;
9
- }
@@ -1,6 +0,0 @@
1
- import BleERGCyclingMode from "../../ble/ble-erg-mode";
2
- import { DeviceAdapter } from "../../device";
3
- export default class AntFeERGCyclingMode extends BleERGCyclingMode {
4
- static isERG: boolean;
5
- constructor(adapter: DeviceAdapter, props?: any);
6
- }
@@ -1,5 +0,0 @@
1
- import FtmsCyclingMode from "../../ble/ble-st-mode";
2
- import { DeviceAdapter } from "../../device";
3
- export default class AntStCyclingMode extends FtmsCyclingMode {
4
- constructor(adapter: DeviceAdapter, props?: any);
5
- }
@@ -1,16 +0,0 @@
1
- import AntAdapter from '../AntAdapter';
2
- export default class AntHrmAdapter extends AntAdapter {
3
- started: boolean;
4
- starting: boolean;
5
- constructor(DeviceID: any, port: any, stick: any, protocol: any);
6
- isBike(): boolean;
7
- isHrm(): boolean;
8
- isPower(): boolean;
9
- getProfile(): string;
10
- getName(): string;
11
- getDisplayName(): string;
12
- onDeviceData(deviceData: any): void;
13
- updateData(data: any, deviceData: any): any;
14
- start(props?: any): Promise<any>;
15
- stop(): Promise<boolean>;
16
- }