UNPKG

@hangtime/grip-connect-cli

Version:
126 lines 4.63 kB
/** * Device definition for the Tindeq Progressor. */ import input from "@inquirer/input"; import { Progressor } from "@hangtime/grip-connect-runtime"; import { fail, printResult } from "../utils.js"; /** Helper to parse 12 hex bytes into Uint8Array for setCalibration. */ function parseCurveHex(s) { const hex = s.replace(/\s+/g, "").toLowerCase(); if (hex.length !== 24 || !/^[0-9a-f]+$/.test(hex)) { fail("Expected 12 hex bytes (24 hex chars). E.g. 24 1d 00 20 87 05 01 00 16 db 15 a9"); } const bytes = new Uint8Array(12); for (let i = 0; i < 12; i++) { bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16); } return bytes; } const calibrationSubactions = [ { name: "Get Current Calibration Curve", description: "Read calibration curve", run: async (device) => { const d = device; printResult("Calibration:", await d.calibration()); }, }, { name: "Set Calibration Curve", description: "Expert only. Raw overwrite, restore from backup / clone. ", nameColor: "yellow", run: async (device, opts) => { const d = device; printResult("Current calibration curve:", await d.calibration()); let curve = opts?.setCalibrationCurve; if (!curve && opts?.ctx?.json) { fail("Set calibration requires --set-calibration-curve in JSON mode"); } if (!curve) { const raw = await input({ message: "Paste 12-byte curve (hex, e.g. FF FF FF FF FF FF FF FF 00 00 00 00):", default: "", }); curve = raw?.trim() ?? ""; } else { curve = String(curve).trim(); } const bytes = curve ? parseCurveHex(curve) : new Uint8Array(0); await d.setCalibration(bytes); printResult("Set calibration:", bytes.length === 0 ? "No curve provided, calibration reset" : "sent"); printResult("Calibration after set:", await d.calibration()); }, }, { name: "Add Calibration point", description: "Expert only. Capture current load as calibration point.", nameColor: "yellow", run: async (device, opts) => { const d = device; if (typeof d.stop === "function") { await d.stop(); await new Promise((r) => setTimeout(r, 500)); } printResult("Calibration before:", await d.calibration()); await input({ message: "Ensure correct load on device (no load for zero, or known weight for reference). Press Enter to capture.", default: "", }); await d.addCalibrationPoint(); await new Promise((r) => setTimeout(r, 1500)); printResult("Add calibration point:", "captured"); printResult("Calibration after:", await d.calibration()); let shouldSave = opts?.saveCalibration; if (shouldSave == null && !opts?.ctx?.json) { const raw = await input({ message: "Save calibration now? (Requires zero + reference points first.) [y/N]:", default: "n", }); shouldSave = /^y(es)?$/i.test(raw?.trim() ?? ""); } if (shouldSave) { await d.saveCalibration(); printResult("Save calibration:", "complete. Try streaming to verify."); } }, }, ]; const errorSubactions = [ { name: "Get Error Info", description: "Retrieve error information from device", run: async (device) => { const d = device; printResult("Error info:", await d.errorInfo()); }, }, { name: "Clear Error Info", description: "Clear error information on device", run: async (device) => { const d = device; await d.clearErrorInfo(); printResult("Clear error info:", "sent"); }, }, ]; const progressor = { name: "Progressor", class: Progressor, actions: [ { name: "Sleep", description: "Shutdown / sleep device", run: async (device) => { const d = device; await d.sleep(); printResult("Sleep:", "sent"); }, }, ], calibrationSubactions, errorSubactions, }; export default progressor; //# sourceMappingURL=progressor.js.map