Initial release

This commit is contained in:
2026-03-11 17:24:57 +01:00
commit 5d537975e9
17 changed files with 6635 additions and 0 deletions

91
src/parser.ts Normal file
View File

@@ -0,0 +1,91 @@
/**
* Decode a Base91 encoded string to a number.
* Base91 uses ASCII characters 33-123 (! to {) for encoding.
* Each character represents a digit in base 91.
*
* @param str Base91 encoded string (typically 4 characters for 32-bit values in APRS)
* @returns Decoded number value
*/
export const base91ToNumber = (str: string): number => {
let value = 0;
const base = 91;
for (let i = 0; i < str.length; i++) {
const charCode = str.charCodeAt(i);
const digit = charCode - 33; // Base91 uses chars 33-123 (! to {)
if (digit < 0 || digit >= base) {
throw new Error(`Invalid Base91 character: '${str[i]}' (code ${charCode})`);
}
value = value * base + digit;
}
return value;
}
/* Conversions from Freedom Units to whatever the rest of the world uses and understands. */
const KNOTS_TO_KMH = 1.852;
const FEET_TO_METERS = 0.3048;
const FAHRENHEIT_TO_CELSIUS_OFFSET = 32;
/**
* Convert speed from knots to kilometers per hour.
*
* @param knots number of knots
* @returns equivalent speed in kilometers per hour
*/
export const knotsToKmh = (knots: number): number => {
return knots * KNOTS_TO_KMH;
}
/**
* Convert speed from kilometers per hour to knots.
*
* @param kmh speed in kilometers per hour
* @returns equivalent speed in knots
*/
export const kmhToKnots = (kmh: number): number => {
return kmh / KNOTS_TO_KMH;
}
/**
* Convert altitude from feet to meters.
*
* @param feet altitude in feet
* @returns equivalent altitude in meters
*/
export const feetToMeters = (feet: number): number => {
return feet * FEET_TO_METERS;
}
/**
* Convert altitude from meters to feet.
*
* @param meters altitude in meters
* @returns equivalent altitude in feet
*/
export const metersToFeet = (meters: number): number => {
return meters / FEET_TO_METERS;
}
/**
* Convert temperature from Celsius to Fahrenheit.
*
* @param celsius temperature in Celsius
* @returns equivalent temperature in Fahrenheit
*/
export const celsiusToFahrenheit = (celsius: number): number => {
return (celsius * 9/5) + FAHRENHEIT_TO_CELSIUS_OFFSET;
}
/**
* Convert temperature from Fahrenheit to Celsius.
*
* @param fahrenheit temperature in Fahrenheit
* @returns equivalent temperature in Celsius
*/
export const fahrenheitToCelsius = (fahrenheit: number): number => {
return (fahrenheit - FAHRENHEIT_TO_CELSIUS_OFFSET) * 5/9;
}