Files
free-d-js/packages/free-d/src/utils.ts
T
2024-10-29 11:55:53 -05:00

38 lines
1.2 KiB
TypeScript

export function checksum(bytes: Uint8Array): number {
let checksum = 0x40;
bytes.forEach((byte) => {
checksum -= byte;
if (checksum < 0) {
checksum += 256;
}
});
return checksum;
}
export function rotationToFreeDUnits(rotation: number): Uint8Array {
const view = new DataView(new ArrayBuffer(4));
const units = rotation * 32768 * 256;
view.setInt32(0, units);
return new Uint8Array(view.buffer, 0, 3);
}
export function positionToFreeDUnits(position: number): Uint8Array {
const view = new DataView(new ArrayBuffer(4));
const units = position * 64 * 256;
view.setInt32(0, units);
return new Uint8Array(view.buffer, 0, 3);
}
export function freeDUnitsToRotation(upper: number, middle: number, lower: number): number {
const padded = new Uint8Array([upper, middle, lower, 0]);
const view = new DataView(padded.buffer, padded.byteOffset, padded.byteLength);
return view.getInt32(0) / 256 / 32768;
}
export function freeDUnitsToPosition(upper: number, middle: number, lower: number): number {
const padded = new Uint8Array([upper, middle, lower, 0]);
const view = new DataView(padded.buffer, padded.byteOffset, padded.byteLength);
return view.getInt32(0) / 256 / 64;
}