Initial release
This commit is contained in:
91
src/parser.ts
Normal file
91
src/parser.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user