Add some of the basic plumbing for Assistnow handling

Currently able to fetch assistnow online and offline data from the web,
but breaking data down into individual ubx commands is failing.

I may need to change it into fetching and treating data as binary.
pull/2123/head
Marcelo Bezerra 3 months ago
parent dd3e10fd59
commit ee98c70807

@ -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;

@ -5917,5 +5917,11 @@
},
"gpsOptionsAssistnowToken": {
"message": "AssitNow Token"
},
"gpsLoadAssistnowOfflineButton": {
"message": "Load AssistNow Offline"
},
"gpsLoadAssistnowOnlineButton": {
"message": "Load AssistNow Online"
}
}

@ -159,5 +159,11 @@
<div class="btn save_btn">
<a class="save" href="#" data-i18n="configurationButtonSave"></a>
</div>
<div class="btn save_btn">
<a class="loadAssistnowOnline" href="#" data-i18n="gpsLoadAssistnowOnlineButton"></a>
</div>
<div class="btn save_btn">
<a class="loadAssistnowOffline" href="#" data-i18n="gpsLoadAssistnowOfflineButton"></a>
</div>
</div>
</div>

@ -18,6 +18,7 @@ const features = require('./../js/feature_framework');
const { globalSettings } = require('./../js/globalSettings');
const jBox = require('./../js/libraries/jBox/jBox.min');
const SerialBackend = require('../js/serial_backend');
const ublox = require('../js/ublox/UBLOX');
TABS.gps = {};
@ -418,6 +419,29 @@ TABS.gps.initialize = function (callback) {
});
});
function processUbloxData(data) {
if(data != null) {
// foreach data
//mspHelper.sendUbloxCommand(d);
}
}
$('a.loadAssistnowOnline').on('click', function () {
if(globalSettings.assistnowApiKey != null && globalSettings.assistnowApiKey != '') {
ublox.loadAssistnowOnline(processUbloxData);
} else {
GUI.alert("Assistnow Token not set!");
}
});
$('a.loadAssistnowOffline').on('click', function () {
if(globalSettings.assistnowApiKey != null && globalSettings.assistnowApiKey != '') {
ublox.loadAssistnowOffline(processUbloxData);
} else {
GUI.alert("Assistnow Token not set!");
}
});
GUI.content_ready(callback);
}

Loading…
Cancel
Save