Garmin USB binary protocol parser for nodejs / nwjs
npm install garmin-parser --save
Parser written by using of Garmin Device Interface Specification May 19, 2006 (It's a latest documentation which i found)
At this moment only session start and PVT data parsing is available. Tested on:
Montana 650t
Oregon 450
Another features and more detailed docs will come soon.
Please look at example https://github.com/Zuzon/garmin-parser/tree/master/examples
download repository and run this command
npm install
npm install usb
npm run example
- delete official garmin driver
- associate device to generic WinUsb driver by using Zadig or winusb-driver-generator https://www.npmjs.com/package/winusb-driver-generator (personally i'm using a driver generator in my app, so user can instantly connect to garmin without any extra actions)
import { GarminParser } from 'garmin-parser'
...
const garmin = new GarminParser()
...
returns device unit ID
const deviceUnitId = await garmin.startSession();
starts session command to activate Application Layer Protocol. Must be called before all another commands
returns ProductData object and configures supported protocols of device, highly recommended to call after start session
start PVT translation
garmin.on('pvtData', (data: PVTdataType) => {
...
});
garmin.startPvt();
stop PVT data translation
event starts coming approx 1 time per second after .startPvt()
{
raw: { // raw object as PVT data type
alt: number; // altitude above WGS 84 ellipsoid (meters)
epe: number; // estimated position error, 2 sigma (meters)
eph: number; // epe, but horizontal only (meters)
eve: number; // epe, but vertical only (meters)
fix: number; // type of position fix
tow: number; // time of week (seconds)
posn: {
lat: number; // latitude in radians
lon: number; // longitude in radians
};
east: number; // velocity east (meters/second)
north: number; // velocity north (meters/second)
up: number; // velocity up (meters/second)
msl_hght: number; // height of WGS84 ellipsoid above MSL(meters)
leap_scnds: number; // difference between GPS and UTC (seconds)
wn_days: number; // week number days
};
parsed: { // more javascript and human friendly data
lat: number; // latitutde in degrees
lon: number; // longitude in degrees
altitude: number; // altitude in meters
dateUTC: Date; // GPS datetime in UTC
speedKmh: number; // speed km/h
fix: string; // GPS fix type
}
}