@hangtime/grip-connect-cli
Version:
CLI tool for Grip Connect devices
78 lines • 3.5 kB
JavaScript
/**
* `grip-connect tare [device]` -- runs tare (zero) calibration.
*/
import ora from "ora";
import { resolveDeviceKey, createDevice, connectAndRun, resolveContext, fail, isStreamDevice } from "../utils.js";
/**
* Registers the `tare` command on the Commander program.
*
* @param program - The root Commander program.
*/
export function registerTare(program) {
program
.command("tare [device]")
.description("Connect and run tare (zero) calibration")
.option("-d, --duration <ms>", "Tare duration in milliseconds", "5000")
.action(async (deviceKey, options) => {
const ctx = resolveContext(program);
const key = await resolveDeviceKey(deviceKey);
const { device, name } = createDevice(key);
const duration = parseInt(options.duration, 10);
await connectAndRun(device, name, async (d) => {
if (typeof d.tare !== "function") {
fail("Tare not supported on this device.");
}
if (isStreamDevice(d)) {
// Stream devices need an active stream for tare (data to tare against)
const streamSpinner = ctx.json ? null : ora("Starting stream for tare...").start();
const streamFn = d.stream;
if (typeof streamFn === "function")
await streamFn(0);
await new Promise((r) => setTimeout(r, 1500)); // Wait for data to flow
streamSpinner?.succeed("Stream running.");
const started = d.tare(duration);
if (!started) {
const stopFn = d.stop;
if (typeof stopFn === "function")
await stopFn();
fail("Tare could not be started (already active?).");
}
const usesHardwareTare = "usesHardwareTare" in d && d.usesHardwareTare;
if (usesHardwareTare) {
if (!ctx.json)
ora().succeed("Tare complete (hardware).");
}
else {
const tareSpinner = ctx.json
? null
: ora(`Tare calibration (${duration / 1000}s). Keep device still...`).start();
await new Promise((r) => setTimeout(r, duration));
tareSpinner?.succeed("Tare calibration complete.");
}
const stopFn = d.stop;
if (typeof stopFn === "function")
await stopFn();
}
else {
// Non-stream devices: tare immediately
const started = d.tare(duration);
if (!started) {
fail("Tare could not be started (already active?).");
}
const usesHardwareTare = "usesHardwareTare" in d && d.usesHardwareTare;
if (usesHardwareTare) {
if (!ctx.json)
ora().succeed("Tare complete (hardware).");
}
else {
const spinner = ctx.json
? null
: ora(`Tare calibration (${duration / 1000}s). Keep device still...`).start();
await new Promise((r) => setTimeout(r, duration));
spinner?.succeed("Tare calibration complete.");
}
}
}, ctx);
});
}
//# sourceMappingURL=tare.js.map