From be34234a04cbbf18c4d3fe7bee0df57b4aae2cb2 Mon Sep 17 00:00:00 2001 From: t0m1o1 <94725994+t0m1o1@users.noreply.github.com> Date: Sat, 20 Nov 2021 05:38:06 +0000 Subject: [PATCH] App to control music via HID commands using swipes on the touch screen on the Bangle.js 2. Based on the original Bluetooth Music Controls. --- apps.json | 14 ++++ apps/hidmsicswipe/changelog | 1 + apps/hidmsicswipe/hidmsicswipe-icon.js | 1 + apps/hidmsicswipe/hidmsicswipe.js | 93 +++++++++++++++++++++++++ apps/hidmsicswipe/hidmsicswipe.png | Bin 0 -> 632 bytes 5 files changed, 109 insertions(+) create mode 100644 apps/hidmsicswipe/changelog create mode 100644 apps/hidmsicswipe/hidmsicswipe-icon.js create mode 100644 apps/hidmsicswipe/hidmsicswipe.js create mode 100644 apps/hidmsicswipe/hidmsicswipe.png diff --git a/apps.json b/apps.json index 7fe259899..4b54e5d48 100644 --- a/apps.json +++ b/apps.json @@ -4307,5 +4307,19 @@ {"name":"binwatch.app.js","url":"app.js"}, {"name":"binwatch.img","url":"app-icon.js","evaluate":true} ] + }, + { + "id": "hidmsicswipe", + "name": "Bluetooth Music Swipe Controls", + "shortName": "Swipe Control", + "version": "0.01", + "description": "Based on the original Bluetooth Music Controls. Swipe up/down for volume, left/right for previous and next, tap for play/pause and btn1 to lock and unlock the controls. Enable HID in settings, pair with your phone, then use this app to control music from your watch!", + "icon": "hidmsicswipe.png", + "tags": "bluetooth", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"hidmsicswipe.app.js","url":"hidmsicswipe.js"}, + {"name":"hidmsicswipe.img","url":"hidmsicswipe-icon.js","evaluate":true} + ] } ] diff --git a/apps/hidmsicswipe/changelog b/apps/hidmsicswipe/changelog new file mode 100644 index 000000000..df3737358 --- /dev/null +++ b/apps/hidmsicswipe/changelog @@ -0,0 +1 @@ +0.01: Core functionnality based entirely on hidmsic diff --git a/apps/hidmsicswipe/hidmsicswipe-icon.js b/apps/hidmsicswipe/hidmsicswipe-icon.js new file mode 100644 index 000000000..6a0c64b9c --- /dev/null +++ b/apps/hidmsicswipe/hidmsicswipe-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AH4A5xGICquZzAVUAAIXQCogXQCoxHPCox0BxIXNxIVFBAQXPUAwXPBw4XowAvuC/4X/C9sIC6kIxGZzIXSFgIWBC6QWEC6RECAAOJwAXQFwoXLxAqBC4MICweZCxhWEC4mICxxuDA4I3BCxQ/FQxpyEK6AucC4idMI5OICyQwBQpgA/AH4Au")) diff --git a/apps/hidmsicswipe/hidmsicswipe.js b/apps/hidmsicswipe/hidmsicswipe.js new file mode 100644 index 000000000..e0fc760a4 --- /dev/null +++ b/apps/hidmsicswipe/hidmsicswipe.js @@ -0,0 +1,93 @@ +var storage = require('Storage'); + +const settings = storage.readJSON('setting.json',1) || { HID: false }; + +var sendHid, next, prev, toggle, up, down, profile; +var lasty = 0; +var lastx = 0; + +if (settings.HID=="kbmedia") { + profile = 'Music'; + sendHid = function (code, cb) { + try { + NRF.sendHIDReport([1,code], () => { + NRF.sendHIDReport([1,0], () => { + if (cb) cb(); + }); + }); + } catch(e) { + print(e); + } + }; + next = function (cb) { sendHid(0x01, cb); }; + prev = function (cb) { sendHid(0x02, cb); }; + toggle = function (cb) { sendHid(0x10, cb); }; + up = function (cb) {sendHid(0x40, cb); }; + down = function (cb) { sendHid(0x80, cb); }; +} else { + E.showPrompt("Enable HID?",{title:"HID disabled"}).then(function(enable) { + if (enable) { + settings.HID = "kbmedia"; + require("Storage").write('setting.json', settings); + setTimeout(load, 1000, "hidmsicswipe.app.js"); + } else setTimeout(load, 1000); + }); +} + +function drawApp() { + g.clear(); + if(Bangle.isLocked()==false) E.showMessage('Swipe', 'Music'); + else E.showMessage('Locked', 'Music'); +} + +if (next) { + setWatch(function(e) { + var len = e.time - e.lastTime; + E.showMessage('lock'); + setTimeout(drawApp, 1000); + Bangle.setLocked(true); + }, BTN1, { edge:"falling",repeat:true,debounce:50}); + Bangle.on('drag', function(e) { + if(!e.b){ + //console.log(lasty); + //console.log(lastx); + if(lasty > 40){ + E.showMessage('down'); + setTimeout(drawApp, 1000); + down(() => {}); + } + else if(lasty < -40){ + E.showMessage('up'); + setTimeout(drawApp, 1000); + up(() => {}); + } else if(lastx < -40){ + E.showMessage('prev'); + setTimeout(drawApp, 1000); + prev(() => {}); + } else if(lastx > 40){ + E.showMessage('next'); + setTimeout(drawApp, 1000); + next(() => {}); + } else if(lastx==0 && lasty==0){ + E.showMessage('play/pause'); + setTimeout(drawApp, 1000); + toggle(() => {}); + } + lastx = 0; + lasty = 0; + } + else{ + lastx = lastx + e.dx; + lasty = lasty + e.dy; + } + }); + + Bangle.on("lock", function(on) { + if(!on){ + E.showMessage('unlock'); + setTimeout(drawApp, 1000); + } + }); + + drawApp(); +} diff --git a/apps/hidmsicswipe/hidmsicswipe.png b/apps/hidmsicswipe/hidmsicswipe.png new file mode 100644 index 0000000000000000000000000000000000000000..923b5aa0e157bd3c8e32bfd5ce758da2cc8166fc GIT binary patch literal 632 zcmV-;0*C#HP)+gpH?nhpwLAjH%N$)U#%yap|A zfWjsPUE+oZSPY4wjPe5f$aW%Ok{AgJP=a@8Ttr*gd-uni;(py)_ntXtS2JUi_;!J!t=lqd)HeLH>e#l*t#m z*01afFMJdItOEo&0XiTa_+GKU`E}NXOVO>R!d0LF+L*lCnJ+k(x}}t{0kS580D1%D zInV}v##Nhp6Hg|~IQIBRTxtg!*ICe|JpI<2~(s|rg%1whe(AYIVyVt><1#N`ws z&E%u<+M=KLUjwyi=Tu}zRPUbuE$KaA`~`kgn>Anjx4@NIXM^U`z^Dg~%4>@%gfc%b zi~?xhf5ind4+a5-POGkPKTR`H2pvF_CutgqO6UM8dM8aIQ8DR(a%wJOFz-$LD``QK z0EcmlNdg){!Z$H=;}%ocjjItPd=sNvaf_+Qc3h1hM*mBO&eL}w%TWrc$WE!}-ivZ~ z8fKeVaxLIELY+}=tgQ(5W?~ee)N{Xy%41+;aBUFXQ`$v SUX6wT0000