Update GPS Adv Sports II.js

pull/1394/head
nujw 2022-02-05 20:46:28 +13:00 committed by GitHub
parent ab31c898b0
commit e3a6f961fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 92 additions and 135 deletions

View File

@ -1,150 +1,122 @@
// Add this script to DroidScript on an android device. // Add this script to DroidScript on an android device.
// Uses the PuckJS plugin to provide mirroring of the GPS Adv Sports II Bangle app face onto an android device. // Uses the PuckJS plugin to provide mirroring of the GPS Adv Sports II Bangle app face onto an android device.
app.LoadPlugin( "PuckJS" ); app.LoadPlugin("PuckJS");
//Called when application is started. //Called when application is started.
function OnStart() function OnStart() {
{
requiredVer = '1.43'; requiredVer = '1.43';
// Mode = 0 // 0=SPD, 1=ALT, 2=DST, 3=VMG, 4=POSN, 5=TIME // Mode = 0 // 0=SPD, 1=ALT, 2=DST, 3=VMG, 4=POSN, 5=TIME
btnOff = '#175A63' btnOff = '#175A63'
btnOn = '#4285F4' btnOn = '#4285F4'
// Connect to Bangle // Connect to Bangle
puck = app.CreatePuckJS(); puck = app.CreatePuckJS();
puck.SetOnConnect( onConnect ); // Callback. puck.SetOnConnect(onConnect); // Callback.
puck.SetOnReceive( readResponse ); // Callback to capture console output from app. puck.SetOnReceive(readResponse); // Callback to capture console output from app.
puck.Scan("Bangle"); puck.Scan("Bangle");
// Controls // Controls
app.SetScreenMode("Full")
//Create a layout with objects vertically centered. //Create a layout with objects vertically centered.
layVert = app.CreateLayout( "Linear", "VCenter,FillXY" ) layVert = app.CreateLayout("Linear", "VCenter,FillXY")
layVert.SetPadding( 0.02, 0.02, 0.02, 0.02 ); layVert.SetPadding(0.02, 0.02, 0.02, 0.02);
layVert.SetBackColor('black') layVert.SetBackColor('black')
//Create a text label and add it to layout. //Create a text label and add it to layout.
val = app.CreateText('',-1,-1,"Multiline") // main value val = app.CreateText('', -1, -1, "Multiline") // main value
val.SetTextSize( 120 ) val.SetTextSize(120)
val.SetTextColor('#64FF00') // green val.SetTextColor('#64FF00') // green
layVert.AddChild( val ) layVert.AddChild(val)
val2 = app.CreateText('') // minor value or waypoint name val2 = app.CreateText('') // minor value or waypoint name
val2.SetTextSize( 50 ) val2.SetTextSize(50)
val2.SetTextColor('#00E4FF') // cyan val2.SetTextColor('#00E4FF') // cyan
layVert.AddChild( val2 ) layVert.AddChild(val2)
// Units and status text // Units and status text
layHor = app.CreateLayout( "Linear", "Horizontal" ) layHor = app.CreateLayout("Linear", "Horizontal")
layHor.SetMargins(-1,-1,-1,10,'px') layHor.SetMargins(-1, -1, -1, 10, 'px')
unit = app.CreateText('') unit = app.CreateText('')
unit.SetSize(200,-1,"px") unit.SetSize(200, -1, "px")
unit.SetTextSize( 32 ) unit.SetTextSize(32)
unit.SetTextColor('#FCFA00') // yellow unit.SetTextColor('#FCFA00') // yellow
layHor.AddChild(unit) layHor.AddChild(unit)
// mode = app.CreateText( '' ,.3,-1,"Center" ) // mode = app.CreateText( '' ,.3,-1,"Center" )
mode = app.CreateText( '' ,-1,-1) mode = app.CreateText('', -1, -1)
mode.SetSize(200,-1,"px") mode.SetSize(200, -1, "px")
mode.SetTextSize( 32 ) mode.SetTextSize(32)
mode.SetTextColor('#FCFA00') // yellow mode.SetTextColor('#FCFA00') // yellow
layHor.AddChild(mode) layHor.AddChild(mode)
// sats = app.CreateText( '' ,.3,-1,"Right") // sats = app.CreateText( '' ,.3,-1,"Right")
sats = app.CreateText( '' ,-1,-1,"FillXY,Bottom") sats = app.CreateText('', -1, -1, "FillXY,Bottom")
sats.SetSize(200,-1,"px") sats.SetSize(200, -1, "px")
sats.SetTextSize( 20 ) sats.SetTextSize(20)
sats.SetTextColor('#00E4FF') // cyan sats.SetTextColor('#00E4FF') // cyan
layHor.AddChild(sats) layHor.AddChild(sats)
layVert.AddChild( layHor ) layVert.AddChild(layHor)
// Buttons // Buttons
layBtn = app.CreateLayout( "Linear", "Horizontal" ) layBtn = app.CreateLayout("Linear", "Horizontal")
btnStart = app.CreateButton( "Start" ); btnStart = app.CreateButton("Start");
btnStart.SetOnTouch( btn_OnStart ); btnStart.SetOnTouch(btn_OnStart);
btnStart.SetBackColor(btnOff) btnStart.SetBackColor(btnOff)
layBtn.AddChild( btnStart ); layBtn.AddChild(btnStart);
btnStop = app.CreateButton( "Stop" ); btnStop = app.CreateButton("Stop");
btnStop.SetOnTouch( btn_OnStop ); btnStop.SetOnTouch(btn_OnStop);
btnStop.SetBackColor(btnOff) btnStop.SetBackColor(btnOff)
layBtn.AddChild( btnStop ); layBtn.AddChild(btnStop);
btnScan = app.CreateButton( "Scan" ); btnScan = app.CreateButton("Scan");
btnScan.SetOnTouch( btn_OnScan ); btnScan.SetOnTouch(btn_OnScan);
btnScan.SetBackColor(btnOff) btnScan.SetBackColor(btnOff)
layBtn.AddChild( btnScan ); layBtn.AddChild(btnScan);
/*
btn1 = app.CreateButton( " SPD " );
btn1.SetOnTouch( btn_OnBTN1 );
btn1.SetBackColor(btnOff)
layBtn.AddChild( btn1 );
btn2 = app.CreateButton( " ALT " );
btn2.SetOnTouch( btn_OnBTN2 );
btn2.SetBackColor(btnOff)
layBtn.AddChild( btn2 );
btn3 = app.CreateButton( " DST " );
btn3.SetOnTouch( btn_OnBTN3 );
btn3.SetBackColor(btnOff)
layBtn.AddChild( btn3 );
btn4 = app.CreateButton( " VMG " );
btn4.SetOnTouch( btn_OnBTN4 );
btn4.SetBackColor(btnOff)
layBtn.AddChild( btn4 );
*/
// Status 'LED' // Status 'LED'
led = app.AddCanvas( layBtn, 0.1, 0.1,"FillXY,Bottom" ) led = app.AddCanvas(layBtn, 0.1, 0.1, "FillXY,Bottom")
// bt = app.CreateText( '' ,-1,-1)
// bt.SetSize(20,-1,"px")
// layBtn.AddChild(bt)
layVert.AddChild(layBtn)
//Add layout to app.
layVert.AddChild( layBtn ) app.AddLayout(layVert)
//Add layout to app.
app.AddLayout( layVert )
} }
function readResponse(data) { function readResponse(data) {
if ( data.substring(0,1) != '{' ) return; // ignore non JSON if (data.substring(0, 1) != '{') return; // ignore non JSON
btnStart.SetBackColor(btnOn) btnStart.SetBackColor(btnOn)
d = JSON.parse(data); d = JSON.parse(data);
if ( (parseFloat(d.v) < parseFloat(requiredVer)) || (typeof(d.v) == 'undefined') ) { if ((parseFloat(d.v) < parseFloat(requiredVer)) || (typeof(d.v) == 'undefined')) {
btn_OnStop() btn_OnStop()
app.Alert('The GPS Adv Sports II app on your Bangle must be at least version '+requiredVer,'Bangle App Upgrade Required') app.Alert('The GPS Adv Sports II app on your Bangle must be at least version ' + requiredVer, 'Bangle App Upgrade Required')
return return
} }
// Flash blue 'led' indicator when data packet received. // Flash blue 'led' indicator when data packet received.
led.SetPaintColor("#0051FF") led.SetPaintColor("#0051FF")
led.DrawCircle( 0.5, 0.5, 0.1 ) led.DrawCircle(0.5, 0.5, 0.1)
led.Update() led.Update()
setTimeout(clearLED, 500 ) setTimeout(clearLED, 500)
if ( d.m == 0 ) { // Speed ( dont need pos or time here ) if (d.m == 0) { // Speed ( dont need pos or time here )
val.SetTextSize( 120 ) val.SetTextSize(120)
val2.SetTextSize( 50 ) val2.SetTextSize(50)
val.SetText(d.sp) val.SetText(d.sp)
val2.SetText('') val2.SetText('')
@ -152,10 +124,10 @@ function readResponse(data) {
mode.SetText('SPD') mode.SetText('SPD')
sats.SetText(d.sats) sats.SetText(d.sats)
} }
if ( d.m == 1 ) { // Alt if (d.m == 1) { // Alt
val.SetTextSize( 120 ) val.SetTextSize(120)
val2.SetTextSize( 50 ) val2.SetTextSize(50)
val.SetText(d.al) val.SetText(d.al)
val2.SetText('') val2.SetText('')
@ -163,10 +135,10 @@ function readResponse(data) {
mode.SetText('ALT') mode.SetText('ALT')
sats.SetText(d.sats) sats.SetText(d.sats)
} }
if ( d.m == 2 ) { // Dist if (d.m == 2) { // Dist
val.SetTextSize( 120 ) val.SetTextSize(120)
val2.SetTextSize( 50 ) val2.SetTextSize(50)
val.SetText(d.di) val.SetText(d.di)
val2.SetText(d.wp) val2.SetText(d.wp)
@ -174,10 +146,10 @@ function readResponse(data) {
mode.SetText('DST') mode.SetText('DST')
sats.SetText(d.sats) sats.SetText(d.sats)
} }
if ( d.m == 3 ) { // VMG if (d.m == 3) { // VMG
val.SetTextSize( 120 ) val.SetTextSize(120)
val2.SetTextSize( 50 ) val2.SetTextSize(50)
val.SetText(d.vmg) val.SetText(d.vmg)
val2.SetText(d.wp) val2.SetText(d.wp)
@ -186,55 +158,51 @@ function readResponse(data) {
sats.SetText(d.sats) sats.SetText(d.sats)
} }
if ( d.m == 4 ) { // POS if (d.m == 4) { // POS
val.SetTextSize( 80 ) val.SetTextSize(80)
val2.SetTextSize( 20 ) val2.SetTextSize(20)
val.SetText(d.lat+' '+d.ns+"\n"+d.lon+' '+d.ew) val.SetText(d.lat + ' ' + d.ns + "\n" + d.lon + ' ' + d.ew)
val2.SetText('') val2.SetText('')
unit.SetText('') unit.SetText('')
mode.SetText('') mode.SetText('')
sats.SetText(d.sats) sats.SetText(d.sats)
} }
if ( d.m == 5 ) { // Time if (d.m == 5) { // Time
val.SetTextSize( 90 ) val.SetTextSize(90)
val2.SetTextSize( 10 ) val2.SetTextSize(10)
dt = new Date(); dt = new Date();
val.SetText(String(dt.getHours()).padStart(2, '0')+"\n"+String(dt.getMinutes()).padStart(2, '0')) val.SetText(String(dt.getHours()).padStart(2, '0') + "\n" + String(dt.getMinutes()).padStart(2, '0'))
val2.SetText('') val2.SetText('')
unit.SetText('') unit.SetText('')
mode.SetText('') mode.SetText('')
sats.SetText(d.sats) sats.SetText(d.sats)
} }
} }
function clearLED() { function clearLED() {
led.Clear() led.Clear()
// led.SetPaintColor("#D31A99")
// led.DrawCircle( 0.5, 0.5, 0.1 )
led.Update() led.Update()
} }
function onConnect() { function onConnect() {
btn_OnStart() // Once connect tell app to start sending updates btn_OnStart() // Once connect tell app to start sending updates
} }
function btn_OnStart() function btn_OnStart() {
{
btnStart.SetBackColor(btnOn) btnStart.SetBackColor(btnOn)
btnStop.SetBackColor(btnOff) btnStop.SetBackColor(btnOff)
puck.SendCode('btOn(1)\n') // Enable the data send puck.SendCode('btOn(1)\n') // Enable the data send
} }
function btn_OnStop() function btn_OnStop() {
{
btnStart.SetBackColor(btnOff) btnStart.SetBackColor(btnOff)
btnStop.SetBackColor(btnOn) btnStop.SetBackColor(btnOn)
puck.SendCode('btOn(0)\n') // Disable the data send puck.SendCode('btOn(0)\n') // Disable the data send
val.SetText('') val.SetText('')
val2.SetText('') val2.SetText('')
unit.SetText('') unit.SetText('')
@ -242,20 +210,9 @@ function btn_OnStop()
sats.SetText('') sats.SetText('')
} }
function btn_OnScan() function btn_OnScan() {
{
btnStart.SetBackColor(btnOff) btnStart.SetBackColor(btnOff)
btnStop.SetBackColor(btnOff) btnStop.SetBackColor(btnOff)
puck.Scan("Bangle"); puck.Scan("Bangle");
} }
/*
function btn_OnBTN1() {puck.SendCode('btSetMode(0)\n')} // SPD
function btn_OnBTN2() {puck.SendCode('btSetMode(1)\n')} // ALT
function btn_OnBTN3() {puck.SendCode('btSetMode(2)\n')} // DST
function btn_OnBTN4() {puck.SendCode('btSetMode(3)\n')} // DST
*/