@ -3,24 +3,190 @@
const semver = require ( 'semver' ) ;
require ( './../injected_methods' ) ;
const jBox = require ( './../libraries/jBox/jBox.min' ) ;
const i18n = require ( './../localization' ) ;
const { GUI } = require ( './../gui' ) ;
const { globalSettings } = require ( '../globalSettings' ) ;
var ublox = ( function ( ) {
var self = { } ;
var assistnowOnline = null ;
var assitnowOffline = null ;
var assistnowOffline = null ;
// m7 = aid, not supported
// m8+ = mga
const fmt = "mga" ; ;
const gnss = "gps,gal,bds,glo,qzss" ;
const onlineServers = [
'online-live1.services.u-blox.com' ,
'online-live2.services.u-blox.com' ,
] ;
const period = 5
const offline _gnss = "gps,gal,bds,glo" ;
const offline _alm = "gps,gal,bds,glo" ;
const offlineServers = [
'offline-live1.services.u-blox.com' ,
'offline-live2.services.u-blox.com'
] ;
self . init = function ( ) {
} ;
self . loadAssitnowOffline = function ( token ) {
var hasFirstHeader ;
var hasSecondHeader ;
var ubxClass ;
var ubxId ;
var lenLow ;
var lenHigh ;
var payloadLen ;
var skipped ;
var currentCommand ;
function resetUbloxState ( ) {
console . log ( "Reset ublox state" ) ;
hasFirstHeader = false ;
hasSecondHeader = false ;
ubxClass = false ;
ubxId = false ;
lenLow = false ;
lenHigh = false ;
payloadLen = 0 ;
skipped = 0 ;
currentCommand = [ ] ;
}
function splitUbloxData ( ubxBytes ) {
console . log ( "type of data: " + typeof ( ubxBytes ) ) ;
console . log ( "splitUbloxData: " + ubxBytes . length ) ;
var ubxCommands = [ ]
resetUbloxState ( )
for ( var i = 0 ; i < ubxBytes . length ; ++ i ) {
let c = ubxBytes . charCodeAt ( i ) ;
//let c = ubxBytes[i];
if ( ! hasFirstHeader ) {
if ( c == 0xb5 ) {
console . log ( "First header" ) ;
hasFirstHeader = true ;
currentCommand . push ( c ) ;
continue ;
}
else
{
resetUbloxState ( ) ;
continue ;
}
}
if ( ! hasSecondHeader ) {
if ( c == 0x62 ) {
console . log ( "Second header" ) ;
hasSecondHeader = true ;
currentCommand . push ( c ) ;
continue ;
}
else
{
resetUbloxState ( ) ;
continue ;
}
}
if ( ! ubxClass ) {
ubxClass = true ;
console . log ( "ubxClass: 0x" + ( c ) . toString ( 16 ) ) ;
currentCommand . push ( c )
continue ;
}
if ( ! ubxId ) {
ubxId = true ;
console . log ( "ubxId: 0x" + ( c ) . toString ( 16 ) ) ;
currentCommand . push ( c ) ;
continue ;
}
if ( ! lenLow ) {
console . log ( "Len low" ) ;
lenLow = true ;
//(int) c
payloadLen = c ;
currentCommand . push ( c ) ;
continue ;
}
if ( ! lenHigh ) {
console . log ( "Len high" ) ;
lenHigh = true ;
// (int)c
payloadLen = ( c << 8 ) | payloadLen ;
console . log ( "Payload len " + payloadLen ) ;
payloadLen += 2 ; // add crc bytes;
currentCommand . push ( c ) ;
continue
}
if ( skipped < payloadLen - 1 ) {
console . log ( "payload + crc" ) ;
skipped = skipped + 1 ;
currentCommand . push ( c ) ;
continue ;
}
if ( skipped == payloadLen - 1 ) {
skipped = skipped + 1 ;
currentCommand . push ( c ) ;
ubxCommands . push ( currentCommand ) ;
console . log ( "Adding command" ) ;
resetUbloxState ( ) ;
continue ;
}
}
return ubxCommands
}
function processOnlineData ( data ) {
assistnowOnline = splitUbloxData ( data ) ;
console . log ( "Assitnow online commands:" + assistnowOnline . length ) ;
}
function processOfflineData ( data ) {
assistnowOffline = splitUbloxData ( data ) ;
console . log ( "Assitnow offline commands:" + assistnowOffline . length ) ;
}
// For more info on assistnow, check:
// https://developer.thingstream.io/guides/location-services/assistnow-user-guide
// Currently only supported for M8+ units
self . loadAssistnowOffline = function ( callback ) {
// offline_url = "https://offline-live1.services.u-blox.com/GetOfflineData.ashx?token=" + offline_token + ";gnss=" + offline_gnss + ";format=" + fmt + ";period=" + period + ";resolution=1;alm=" + alm + ";"
let url = ` https:// ${ offlineServers [ 0 ] } /GetOfflineData.ashx?token= ${ globalSettings . assistnowApiKey } ;gnss= ${ offline _gnss } ;format= ${ fmt } ;period= ${ period } ;resolution=1;alm= ${ offline _alm } ; `
console . log ( url ) ;
$ . get ( url , processOfflineData ) . fail ( function ( ) { GUI . alert ( "Error loading Offline data" ) } ) ;
if ( callback != null ) {
callback ( "" ) ;
}
} ;
self . loadAssistnowOnline = function ( token ) {
self . loadAssistnowOnline = function ( callback ) {
//url = "https://online-live1.services.u-blox.com/GetOnlineData.ashx?token=" + online_token + ";gnss=" + gnss + ";datatype=eph,alm,aux,pos;format=" + fmt + ";"
let url = ` https:// ${ onlineServers [ 0 ] } /GetOnlineData.ashx?token= ${ globalSettings . assistnowApiKey } ;gnss= ${ gnss } ;datatype=eph,alm,aux,pos;format= ${ fmt } ` ;
$ . get ( url , processOnlineData ) . fail ( function ( ) { GUI . alert ( "Error loading Offline data" ) } ) ;
if ( callback != null ) {
callback ( "" ) ;
}
}
} ) ;
return self ;
} ) ( ) ;
module . exports = ublox ;