UNPKG

tello-custom-ip

Version:

Tello drone client with custom IP address support, forked from @0x77/tellots

132 lines (117 loc) 3.82 kB
import { BatteryResponse, HeightResponse, TemperatureResponse, SpeedResponse, TimeResponse, WifiResponse, AttitudeResponse, BarometerResponse, AccelerationResponse, TofResponse, ResponseParser } from './types'; /** * Parse battery level string to structured response */ export const parseBattery: ResponseParser<BatteryResponse> = (batteryStr: string) => { const value = parseInt(batteryStr, 10); return { value }; }; /** * Parse height string to structured response */ export const parseHeight: ResponseParser<HeightResponse> = (heightStr: string) => { const value = parseInt(heightStr.replace('dm', ''), 10); return { value, unit: 'dm' }; }; /** * Parse temperature string to structured response */ export const parseTemperature: ResponseParser<TemperatureResponse> = (tempStr: string) => { const match = tempStr.match(/(\d+)~(\d+)C/); if (match && match.length >= 3) { return { min: parseInt(match[1], 10), max: parseInt(match[2], 10), unit: '°C' }; } return { min: 0, max: 0, unit: '°C' }; }; /** * Parse speed string to structured response */ export const parseSpeed: ResponseParser<SpeedResponse> = (speedStr: string) => { const value = parseFloat(speedStr); return { value, unit: 'cm/s' }; }; /** * Parse time string to structured response */ export const parseTime: ResponseParser<TimeResponse> = (timeStr: string) => { const value = parseInt(timeStr.replace('s', ''), 10); return { value, unit: 's' }; }; /** * Parse wifi signal strength to structured response */ export const parseWifi: ResponseParser<WifiResponse> = (wifiStr: string) => { const value = parseInt(wifiStr, 10); return { value, unit: '%' }; }; /** * Parse attitude string to structured response */ export const parseAttitude: ResponseParser<AttitudeResponse> = (attitudeStr: string) => { const parts = attitudeStr.split(';'); const result: AttitudeResponse = { pitch: 0, roll: 0, yaw: 0, unit: '°' }; parts.forEach(part => { if (part.includes('pitch:')) { result.pitch = parseInt(part.replace('pitch:', ''), 10); } else if (part.includes('roll:')) { result.roll = parseInt(part.replace('roll:', ''), 10); } else if (part.includes('yaw:')) { result.yaw = parseInt(part.replace('yaw:', ''), 10); } }); return result; }; /** * Parse barometer string to structured response */ export const parseBarometer: ResponseParser<BarometerResponse> = (baroStr: string) => { const value = parseFloat(baroStr); return { value, unit: 'm' }; }; /** * Parse acceleration string to structured response */ export const parseAcceleration: ResponseParser<AccelerationResponse> = (accelStr: string) => { const parts = accelStr.split(';'); const result: AccelerationResponse = { x: 0, y: 0, z: 0, unit: 'mG' }; parts.forEach(part => { if (part.includes('agx:')) { result.x = parseFloat(part.replace('agx:', '')); } else if (part.includes('agy:')) { result.y = parseFloat(part.replace('agy:', '')); } else if (part.includes('agz:')) { result.z = parseFloat(part.replace('agz:', '')); } }); return result; }; /** * Parse ToF (Time of Flight) string to structured response */ export const parseTof: ResponseParser<TofResponse> = (tofStr: string) => { const value = parseInt(tofStr.replace('mm', ''), 10); return { value, unit: 'mm' }; }; /** * Parse boolean command response * Returns true for "ok", false for any other response */ export const parseCommandResponse: ResponseParser<boolean> = (response: string) => { return response.trim().toLowerCase() === "ok"; };