Skip to content

Commit 40f083e

Browse files
committed
Make tracker setting functions async
1 parent c6d0f35 commit 40f083e

File tree

1 file changed

+51
-21
lines changed

1 file changed

+51
-21
lines changed

src/HaritoraX.ts

+51-21
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ export default class HaritoraX extends EventEmitter {
372372
* @example
373373
* trackers.setTrackerSettings("rightAnkle", 1, 100, ['accel', 'gyro'], true);
374374
**/
375-
setTrackerSettings(
375+
async setTrackerSettings(
376376
trackerName: string,
377377
sensorMode: SensorMode,
378378
fpsMode: FPSMode,
@@ -388,10 +388,14 @@ export default class HaritoraX extends EventEmitter {
388388
};
389389

390390
if (trackerName.startsWith("HaritoraXW")) {
391-
writeToBluetooth(trackerName, sensorModeCharacteristic, sensorMode === 1 ? 5 : 8);
392-
writeToBluetooth(trackerName, fpsModeCharacteristic, fpsMode === 50 ? 1 : 2);
393-
writeToBluetooth(trackerName, correctionCharacteristic, sensorAutoCorrectionBit);
394-
writeToBluetooth(trackerName, ankleCharacteristic, ankleMotionDetection ? 1 : 0);
391+
try {
392+
await writeToBluetooth(trackerName, sensorModeCharacteristic, sensorMode === 1 ? 5 : 8);
393+
await writeToBluetooth(trackerName, fpsModeCharacteristic, fpsMode === 50 ? 1 : 2);
394+
await writeToBluetooth(trackerName, correctionCharacteristic, sensorAutoCorrectionBit);
395+
await writeToBluetooth(trackerName, ankleCharacteristic, ankleMotionDetection ? 1 : 0);
396+
} catch (err) {
397+
error(`Error sending tracker settings: ${err}`);
398+
}
395399
} else {
396400
// GX dongle(s)
397401
const trackerPort = com.getTrackerPort(trackerName);
@@ -401,8 +405,12 @@ export default class HaritoraX extends EventEmitter {
401405
const hexValue = getSettingsHexValue(sensorMode, fpsMode, sensorAutoCorrection, ankleMotionDetection);
402406
const finalValue = `${identifierValue}${hexValue}`;
403407

404-
writeToPort(trackerPort, finalValue, trackerName);
405-
writeToPort(trackerPort, identifierValue, trackerName);
408+
try {
409+
await writeToPort(trackerPort, finalValue, trackerName);
410+
await writeToPort(trackerPort, identifierValue, trackerName);
411+
} catch (err) {
412+
error(`Error sending tracker settings: ${err}`);
413+
}
406414
}
407415

408416
logSettings(trackerName, settings);
@@ -434,15 +442,15 @@ export default class HaritoraX extends EventEmitter {
434442
* trackers.setAllTrackerSettings(2, 50, ['mag'], false);
435443
**/
436444

437-
setAllTrackerSettings(
445+
async setAllTrackerSettings(
438446
sensorMode: SensorMode,
439447
fpsMode: FPSMode,
440448
sensorAutoCorrection: SensorAutoCorrection[],
441449
ankleMotionDetection: boolean
442450
) {
443451
try {
444452
if (trackerModelEnabled === "wired") {
445-
handleWiredSettings(sensorMode, fpsMode, sensorAutoCorrection, ankleMotionDetection);
453+
await handleWiredSettings(sensorMode, fpsMode, sensorAutoCorrection, ankleMotionDetection);
446454
} else if (trackerModelEnabled === "wireless") {
447455
handleWirelessSettings(sensorMode, fpsMode, sensorAutoCorrection, ankleMotionDetection);
448456
}
@@ -508,8 +516,12 @@ export default class HaritoraX extends EventEmitter {
508516
error(`Error reading characteristic: ${err}`);
509517
}
510518
} else {
511-
writeToPort(com.getTrackerPort(trackerName), `s${com.getTrackerPortId(trackerName)}:`, trackerName);
512-
await new Promise((resolve) => setTimeout(resolve, 200));
519+
try {
520+
await writeToPort(com.getTrackerPort(trackerName), `s${com.getTrackerPortId(trackerName)}:`, trackerName);
521+
} catch (err) {
522+
error(`Error sending tracker settings: ${err}`);
523+
}
524+
await new Promise((resolve) => setTimeout(resolve, 500));
513525
({ sensorMode, fpsMode, sensorAutoCorrection, ankleMotionDetection } = getTrackerSettingsFromMap(trackerName));
514526
}
515527
} else if (trackerModelEnabled === "wireless" && comEnabled && !trackerName.startsWith("HaritoraXW")) {
@@ -591,7 +603,12 @@ export default class HaritoraX extends EventEmitter {
591603

592604
const rawValue = `i${trackerPortId}:`;
593605

594-
writeToPort(trackerPort, rawValue, trackerName);
606+
try {
607+
await writeToPort(trackerPort, rawValue, trackerName);
608+
} catch (err) {
609+
error(`Error sending device info command: ${err}`);
610+
return null;
611+
}
595612
}
596613

597614
if (isWirelessBTTracker(trackerName)) {
@@ -651,7 +668,12 @@ export default class HaritoraX extends EventEmitter {
651668

652669
const rawValue = `v${trackerPortId}:`;
653670

654-
writeToPort(trackerPort, rawValue, trackerName);
671+
try {
672+
await writeToPort(trackerPort, rawValue, trackerName);
673+
} catch (err) {
674+
error(`Error sending battery info command: ${err}`);
675+
return null;
676+
}
655677

656678
// Wait for the battery info to be sent back
657679
await new Promise((resolve) => setTimeout(resolve, 500));
@@ -849,12 +871,20 @@ export default class HaritoraX extends EventEmitter {
849871
const commands = [`o${trackerPortId}:${modifiedSettingsHex}`, `o${trackerPortId}:${settingsHex}`];
850872

851873
for (const command of commands) {
852-
await writeToPort(trackerPort, command);
874+
try {
875+
await writeToPort(trackerPort, command);
876+
} catch (err) {
877+
error(`Error sending power off command: ${err}`);
878+
return false;
879+
}
853880
// Allow for small delay between commands so tracker can process the first command
854881
await new Promise((resolve) => setTimeout(resolve, delay));
855882
}
856883

857-
log(`Manually powered off tracker "${trackerName}" (Port ${trackerPort}, port id ${trackerPortId}). Delay between commands: ${delay}ms.`, true);
884+
log(
885+
`Manually powered off tracker "${trackerName}" (Port ${trackerPort}, port id ${trackerPortId}). Delay between commands: ${delay}ms.`,
886+
true
887+
);
858888
return true;
859889
}
860890

@@ -1794,10 +1824,10 @@ function getSettingsHexValue(
17941824
return `00000${postureDataRateBit}${sensorModeBit}010${sensorAutoCorrectionBit}00${ankleMotionDetectionBit}`;
17951825
}
17961826

1797-
function writeToBluetooth(trackerName: string, characteristic: string, value: number) {
1827+
async function writeToBluetooth(trackerName: string, characteristic: string, value: number) {
17981828
try {
17991829
const buffer = Buffer.from([value]);
1800-
bluetooth.write(trackerName, settingsService, characteristic, buffer);
1830+
await bluetooth.write(trackerName, settingsService, characteristic, buffer);
18011831
if (printWrites) log(`Data written to characteristic ${characteristic} ${trackerName}: ${value}`);
18021832
} catch (err) {
18031833
error(`Error writing to Bluetooth tracker ${trackerName}: ${err}`);
@@ -1908,7 +1938,7 @@ function getTrackerSettingsFromMap(trackerName: string) {
19081938
}
19091939
}
19101940

1911-
function handleWiredSettings(
1941+
async function handleWiredSettings(
19121942
sensorMode: SensorMode,
19131943
fpsMode: FPSMode,
19141944
sensorAutoCorrection: SensorAutoCorrection[],
@@ -1936,7 +1966,7 @@ function handleWiredSettings(
19361966
for (const port in ports) {
19371967
for (const commandKey in commands) {
19381968
const command = commands[commandKey];
1939-
if (command) writeToPort(port, command, "HaritoraXWired");
1969+
if (command) await writeToPort(port, command, "HaritoraXWired");
19401970
}
19411971
}
19421972

@@ -1948,7 +1978,7 @@ function handleWiredSettings(
19481978
trackerSettings.set("HaritoraXWired", [sensorMode, fpsMode, sensorAutoCorrection, ankleMotionDetection]);
19491979
}
19501980

1951-
function handleWirelessSettings(
1981+
async function handleWirelessSettings(
19521982
sensorMode: SensorMode,
19531983
fpsMode: FPSMode,
19541984
sensorAutoCorrection: SensorAutoCorrection[],
@@ -1959,7 +1989,7 @@ function handleWirelessSettings(
19591989
const finalValue = `o0:${hexValue}\no1:${hexValue}`;
19601990

19611991
for (const port in com.getActivePorts()) {
1962-
writeToPort(port, finalValue, "HaritoraXWireless");
1992+
await writeToPort(port, finalValue, "HaritoraXWireless");
19631993
}
19641994
}
19651995

0 commit comments

Comments
 (0)