@hangtime/grip-connect
Version:
Griptonite Motherboard, Tindeq Progressor, PitchSix Force Board, WHC-06, Entralpi, Climbro, mySmartBoard: Bluetooth API Force-Sensing strength analysis for climbers
77 lines • 2.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertForce = convertForce;
exports.convertForceMeasurement = convertForceMeasurement;
/** 1 kgf = this many N (standard gravity) */
const KG_TO_N = 9.80665;
/** 1 lbf = this many N */
const LBS_TO_N = 4.4482216152605;
function toNewtons(value, from) {
switch (from) {
case "kg":
return value * KG_TO_N;
case "lbs":
return value * LBS_TO_N;
case "n":
return value;
}
}
function fromNewtons(value, to) {
switch (to) {
case "kg":
return value / KG_TO_N;
case "lbs":
return value / LBS_TO_N;
case "n":
return value;
}
}
/**
* Converts a force value between kg, lbs, and newtons.
* @param value - The numeric force value in the source unit.
* @param from - The unit of the input value.
* @param to - The unit for the output value.
* @returns The force value in the target unit.
*/
function convertForce(value, from, to) {
if (from === to)
return value;
return fromNewtons(toNewtons(value, from), to);
}
/**
* Converts all numeric force fields in a ForceMeasurement from one unit to another.
* Recurses one level into distribution.left / center / right.
* Used internally by the device model when building notify payloads.
*/
function convertForceMeasurement(measurement, from, to) {
if (from === to)
return measurement;
const out = {
unit: to,
timestamp: measurement.timestamp,
current: convertForce(measurement.current, from, to),
peak: convertForce(measurement.peak, from, to),
mean: convertForce(measurement.mean, from, to),
min: convertForce(measurement.min, from, to),
};
if (measurement.performance !== undefined) {
out.performance = { ...measurement.performance };
}
if (measurement.distribution &&
(measurement.distribution.left !== undefined ||
measurement.distribution.center !== undefined ||
measurement.distribution.right !== undefined)) {
out.distribution = {};
if (measurement.distribution.left !== undefined) {
out.distribution.left = convertForceMeasurement(measurement.distribution.left, from, to);
}
if (measurement.distribution.center !== undefined) {
out.distribution.center = convertForceMeasurement(measurement.distribution.center, from, to);
}
if (measurement.distribution.right !== undefined) {
out.distribution.right = convertForceMeasurement(measurement.distribution.right, from, to);
}
}
return out;
}
//# sourceMappingURL=utils.js.map