From 953ee0471b3470d364847ab63ce18a02c04dfabc Mon Sep 17 00:00:00 2001 From: Shane T Odlum Date: Mon, 11 Nov 2019 16:59:02 +0000 Subject: [PATCH 1/2] Add BLE Scanner app --- apps.json | 12 ++++++++++ apps/blescan-icon.js | 1 + apps/blescan.js | 52 +++++++++++++++++++++++++++++++++++++++++++ apps/blescan.json | 7 ++++++ apps/blescan.png | Bin 0 -> 2491 bytes 5 files changed, 72 insertions(+) create mode 100644 apps/blescan-icon.js create mode 100644 apps/blescan.js create mode 100644 apps/blescan.json create mode 100644 apps/blescan.png diff --git a/apps.json b/apps.json index c46d5f8a9..936cc939c 100644 --- a/apps.json +++ b/apps.json @@ -337,5 +337,17 @@ {"name":".tfmodel","url":"gesture-tfmodel.js","evaluate":true}, {"name":"*gesture","url":"gesture-icon.js","evaluate":true} ] + }, + { + "id": "blescan", + "name": "BLE Scanner", + "icon": "blescan.png", + "description": "Scan for advertising BLE devices", + "tags" : "bluetooth", + "storage" : [ + {"name":"+blescan","url":"blescan.json"}, + {"name":"-blescan","url":"blescan.js"}, + {"name":"*blescan","url":"blescan-icon.js", "evaluate":true} + ] } ] diff --git a/apps/blescan-icon.js b/apps/blescan-icon.js new file mode 100644 index 000000000..0dd286e01 --- /dev/null +++ b/apps/blescan-icon.js @@ -0,0 +1 @@ +var img = require("heatshrink").decompress(atob("mEwxH+AH4A/AH4ATmIABrdbAgQrmAAYvEAAYtkF5QxcEZAvLGDAhJF5oxWFhYAFCBFaFzQsHAAk3CQmE1wwRFxiPFMY4uBwiSRI4uEQo4GIAAIVBxTCRFwoABJITvNrYTHRqIuCAAIvPxQSBBQwvQL6aMCBQ7sQVIQuGdIjqIGCIOEm4XHForqFIAYHBm4vTFxYMDAQKeHDIwvVRAoEDdRAvPE5QcHAoTqJDQ5eZAwS7DIZovWAodaRQLqGF6bhDABouCXYIAQF+6PUrQUQd7oMKF6wbLApYaIF45gSAgxeUF5olDBIICECJIvTm4wLAAoPHm4vTC4OK12EGJYLFI5IvJGAuE1wABGAycIBRQuKF4ouCAAIvPIgOFF6QwEL6c3IRAuMGA+EWw4GIwuusAuTeQzqGF4r0LF6AwIm4mEAA03FzAwJLAxbKFygwLd5IuaMRwthGBYvKFzQxJF5AtdGZAvEFcYA/AH4AvA==")) diff --git a/apps/blescan.js b/apps/blescan.js new file mode 100644 index 000000000..2dc563b75 --- /dev/null +++ b/apps/blescan.js @@ -0,0 +1,52 @@ +// ble-scanner +// Scan the airwaves every three seconds (which seems safe for a large number of devices) +// Using the menu feature, display a scrollable list of BLE devices on the watch + +// Dummy menu item to display until we find something +const NODEVICE = 'No devices found'; + +const SCAN_INTERVAL = 3000; + +const menu = { +}; + +menu[NODEVICE] = { + value : "", + onchange : () => {} +}; + + +function draw() { + Bangle.menu(menu); +} + +function scan() { + NRF.findDevices(devices => { + for (let device of devices) { + + // Only display devices that advertise a name + + if (device.name) { + // Remove no devices found message if it is present + if (menu[NODEVICE]) { + delete menu[NODEVICE]; + } + menu[device.name] = { + value : device.rssi, + onchange : () => {} + }; + } + } + draw(); + }, { active: true }); +} + + +function waitMessage() { + E.showMessage('scanning'); +} + +scan(); +waitMessage(); + +setInterval(scan, SCAN_INTERVAL); diff --git a/apps/blescan.json b/apps/blescan.json new file mode 100644 index 000000000..d9e7f28f1 --- /dev/null +++ b/apps/blescan.json @@ -0,0 +1,7 @@ + +{ + "name": "BLE Scanner", + "type":"app", + "icon": "*blescan", + "src": "-blescan" +} diff --git a/apps/blescan.png b/apps/blescan.png new file mode 100644 index 0000000000000000000000000000000000000000..efe76af517c4ff6e1d30afcd8db10a2d0bf80451 GIT binary patch literal 2491 zcmV;s2}JgZP)U^_vTXd8u>_O02d z$`VnPMi7=%l`8e6sw-YmF^~cUp-M%flr*I3Ll+Q~*9ONy1WZUw67MtKXY<_I?&-sI zjPKm*Es6R<{!jLImizy{^PT^9&KbCk+xTWf+>%*(P`Xo_yCuqgDd-lGb_AO{yAxr6 z{=U>4l2PDG;G97FurD#%M-SS~e)^^y=sMQcEES#)ZG2Z2{opv*Q+{<*<~> zn?mFF=Uy9{xKR!_18^gG##YuYb{=m#xY5D3^>#dR1e<4HvR6oc2YA;rX457=0OMo1^>p_M z_)$xDFnr(E%=-fa$n^|bR|@TWbc;LJPB|I1HKE;*^5f$U&YTXnEX;=j<9(Tbuf}iH73e(Pc2G!p`uhKkja43ec$T)UB__rj=5bN;T6QD{bO(xyJPL z0+otJJZ9s-p+RD?5@TZyUh0jL%Pr9oLSbK1ckqqLzKm+cbLFJ9Ri6c#mz&zQlnh-W zjX5SK7g(QO)ImaVA;fd{Z@ox(HH}d$4+yLk7P2qB%_gt2e-#Yxm=@K)eIX}Pn#IotRNI} zDH?tlFQA_Eq*p{_EX508Tew_lr}z~|FT?OzN`F_|vla#eZgks&jA010EG835vO zpH&dr?wM%qtT)5su^;GLZZoZbgsys9IIN%9 z=I6{x=JD8x#TwA0v?LGuhJETpn&##*6BAC}`{yovfdC$lDSk`e2!+g>SxUO=Z6*f< z?5wwWy)FQB0Fzv~+`6Bovbk6VgZk>s%oYvyU3V2Z{6If$cLha}bveI4JnkhBbeZNWFBU|% z%YvFP)+OCkho8N%SK5>fUlU9?bfh1zSI=Qh6a4j^E>zVjUh79q(|G--XAPXqDRd)M zbq%PhB%_(@!TUsm46NYj+Hf$Iig#(-aC{t45&^ zASxc45jepWAI`_qSqHD;np|r|RiV*Bh+DGG6aM zN!4)pY`B~@lLOhTipS%lsmWt-VBm8Pr%!Fu{~j=&MjIE83z>PNOaeGv`r$w=SzH4o zrpv#TjDA^fE97-$u-bG}lM5gv(WsXOuZ42d!RvJpje3ztrlt#~_UochUjqOTTwK!u z0q5#%b91@_;gI}Zdy>V((pV8@O|gwU(CS~N#F6w-qU54XyCR1W=Rz*sQ%_eX-^y!Pm3NzCx zL)Ye+nKl-@>xjj@M57Iq%QdcCnYZ9CPfk3SU3&!pY>GGu7`~)wlD+p1l4#E2bZYF} zsq*88XH8>^#VW(YS%W-&c43Ns_A87rB{hSz{R%h5u(usY&J z{an6ml4%L@k@F{qKUpOXtE21jWG{jfR&9|+56NU;X|t+omH9c9OtwV1Tx0j{7@$9F zIh{5F0T8YoSunNTu>j zrVCaZRwoaC-!?sb@YE^HXZVdc0I>b(?XF<0^yjr7cO8Vn9(-O0Znqu#qC?e+hFYqU z%axg*Q^^-9D?aY(q~yEvcGrW0FAbV+P&eWL=qquxDfyg)6YCwf&L23ILrN)nx6KUw za;?Z;$An=b literal 0 HcmV?d00001 From cf5cc648d5eb69510d70b01a2f76639bde4fb871 Mon Sep 17 00:00:00 2001 From: Shane T Odlum Date: Mon, 11 Nov 2019 17:19:02 +0000 Subject: [PATCH 2/2] BLE Scanner icon --- apps/blescan-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/blescan-icon.js b/apps/blescan-icon.js index 0dd286e01..771d36657 100644 --- a/apps/blescan-icon.js +++ b/apps/blescan-icon.js @@ -1 +1 @@ -var img = require("heatshrink").decompress(atob("mEwxH+AH4A/AH4ATmIABrdbAgQrmAAYvEAAYtkF5QxcEZAvLGDAhJF5oxWFhYAFCBFaFzQsHAAk3CQmE1wwRFxiPFMY4uBwiSRI4uEQo4GIAAIVBxTCRFwoABJITvNrYTHRqIuCAAIvPxQSBBQwvQL6aMCBQ7sQVIQuGdIjqIGCIOEm4XHForqFIAYHBm4vTFxYMDAQKeHDIwvVRAoEDdRAvPE5QcHAoTqJDQ5eZAwS7DIZovWAodaRQLqGF6bhDABouCXYIAQF+6PUrQUQd7oMKF6wbLApYaIF45gSAgxeUF5olDBIICECJIvTm4wLAAoPHm4vTC4OK12EGJYLFI5IvJGAuE1wABGAycIBRQuKF4ouCAAIvPIgOFF6QwEL6c3IRAuMGA+EWw4GIwuusAuTeQzqGF4r0LF6AwIm4mEAA03FzAwJLAxbKFygwLd5IuaMRwthGBYvKFzQxJF5AtdGZAvEFcYA/AH4AvA==")) +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4ATmIABrdbAgQrmAAYvEAAYtkF5QxcEZAvLGDAhJF5oxWFhYAFCBFaFzQsHAAk3CQmE1wwRFxiPFMY4uBwiSRI4uEQo4GIAAIVBxTCRFwoABJITvNrYTHRqIuCAAIvPxQSBBQwvQL6aMCBQ7sQVIQuGdIjqIGCIOEm4XHForqFIAYHBm4vTFxYMDAQKeHDIwvVRAoEDdRAvPE5QcHAoTqJDQ5eZAwS7DIZovWAodaRQLqGF6bhDABouCXYIAQF+6PUrQUQd7oMKF6wbLApYaIF45gSAgxeUF5olDBIICECJIvTm4wLAAoPHm4vTC4OK12EGJYLFI5IvJGAuE1wABGAycIBRQuKF4ouCAAIvPIgOFF6QwEL6c3IRAuMGA+EWw4GIwuusAuTeQzqGF4r0LF6AwIm4mEAA03FzAwJLAxbKFygwLd5IuaMRwthGBYvKFzQxJF5AtdGZAvEFcYA/AH4AvA=="))