Mobile app now allows user to interact with wifi settings. Also (mostly) properly displays the state of a sequence.
This commit is contained in:
parent
6b59b15d62
commit
7d5f6c6601
|
@ -76,12 +76,15 @@
|
||||||
<div class="ble">
|
<div class="ble">
|
||||||
<h2>WIFI</h2>
|
<h2>WIFI</h2>
|
||||||
<div>
|
<div>
|
||||||
<input type="text" id="ssid" placeholder="Wifi SSID" />
|
<select id="available" class="" onchange="mobile.editWifi();">
|
||||||
|
<option>N/A</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<input type="password" id="password" placeholder="Wifi Password" />
|
<input type="password" id="password" class="" placeholder="Wifi Password" />
|
||||||
</div>
|
</div>
|
||||||
<button id="wifi" onclick="alert('WIFI');">CONNECT</button>
|
<button id="wifi" class="" onclick="mobile.setWifi();">CONNECT</button>
|
||||||
|
<button id="wifiRefresh" class="" onclick="mobile.getWifi();">REFRESH WIFI</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="mscript" class="page">
|
<div id="mscript" class="page">
|
||||||
|
|
|
@ -294,3 +294,13 @@ footer > div.selected{
|
||||||
#scan.active{
|
#scan.active{
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#available.active{
|
||||||
|
border-color: #20ce45;;
|
||||||
|
}
|
||||||
|
#password,#wifi{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#password.active,#wifi.active{
|
||||||
|
display: block;
|
||||||
|
}
|
|
@ -181,6 +181,8 @@ var setState = function (res) {
|
||||||
STATE.sequence = true;
|
STATE.sequence = true;
|
||||||
if (mobile.ble) mobile.ble.active = true;
|
if (mobile.ble) mobile.ble.active = true;
|
||||||
seqState(true);
|
seqState(true);
|
||||||
|
} else {
|
||||||
|
seqState(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,11 @@ mobile.ble = {
|
||||||
active : false
|
active : false
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mobile.wifi = {
|
||||||
|
current : 'null',
|
||||||
|
available : []
|
||||||
|
};
|
||||||
|
|
||||||
mobile.ble.scan = function () {
|
mobile.ble.scan = function () {
|
||||||
spinnerShow();
|
spinnerShow();
|
||||||
ble.scan([], 5, mobile.ble.onDiscover, mobile.ble.onError);
|
ble.scan([], 5, mobile.ble.onDiscover, mobile.ble.onError);
|
||||||
|
@ -69,6 +74,7 @@ mobile.ble.onConnect = function (peripheral, device) {
|
||||||
scan.classList.remove('active');
|
scan.classList.remove('active');
|
||||||
|
|
||||||
getState();
|
getState();
|
||||||
|
mobile.getWifi();
|
||||||
};
|
};
|
||||||
|
|
||||||
mobile.ble.disconnect = function () {
|
mobile.ble.disconnect = function () {
|
||||||
|
@ -266,18 +272,125 @@ mobile.sequence = function () {
|
||||||
mobile.ble.active = true;
|
mobile.ble.active = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
mobile.sequenceSuccess = function () {
|
mobile.sequenceSuccess = function () {
|
||||||
console.log('Sequence state changed');
|
console.log('Sequence state changed');
|
||||||
mobile.getState();
|
mobile.getState();
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (STATE.sequence) {
|
if (STATE.sequence) {
|
||||||
mobile.ble.active = true;
|
mobile.ble.active = true;
|
||||||
|
seqState(true);
|
||||||
} else {
|
} else {
|
||||||
mobile.ble.active = false;
|
mobile.ble.active = false;
|
||||||
|
seqState(false);
|
||||||
}
|
}
|
||||||
}, 20);
|
}, 20);
|
||||||
|
};
|
||||||
|
|
||||||
|
//retreive object with list of available Wifi APs,
|
||||||
|
//and state of current connection, if available
|
||||||
|
mobile.getWifi = function () {
|
||||||
|
spinnerShow();
|
||||||
|
ble.read(mobile.ble.device.id,
|
||||||
|
mobile.ble.SERVICE_ID,
|
||||||
|
mobile.ble.WIFI_ID,
|
||||||
|
mobile.getWifiSuccess,
|
||||||
|
mobile.ble.onError);
|
||||||
|
};
|
||||||
|
|
||||||
|
mobile.getWifiSuccess = function (data) {
|
||||||
|
const elem = document.getElementById('available');
|
||||||
|
const wifi = document.getElementById('wifi');
|
||||||
|
const password = document.getElementById('password');
|
||||||
|
let option = document.createElement('option');
|
||||||
|
let str = bytesToString(data);
|
||||||
|
let res = JSON.parse(str);
|
||||||
|
|
||||||
|
spinnerHide();
|
||||||
|
elem.innerHTML = ''
|
||||||
|
if (!res.available || res.available.length === 0) {
|
||||||
|
if (elem.classList.contains('active')) {
|
||||||
|
elem.classList.remove('active');
|
||||||
}
|
}
|
||||||
|
option.text = 'N/A'
|
||||||
|
elem.add(option);
|
||||||
|
elem.value = '';
|
||||||
|
} else {
|
||||||
|
for (let ap of res.available) {
|
||||||
|
option = document.createElement('option');
|
||||||
|
option.text = ap;
|
||||||
|
option.value = ap;
|
||||||
|
elem.add(option);
|
||||||
|
}
|
||||||
|
if (res.current && res.available.indexOf(res.current) !== -1) {
|
||||||
|
elem.value = res.current
|
||||||
|
if (!elem.classList.contains('active')) {
|
||||||
|
elem.classList.add('active');
|
||||||
|
}
|
||||||
|
if (wifi.classList.contains('active')) {
|
||||||
|
wifi.classList.remove('active');
|
||||||
|
}
|
||||||
|
if (password.classList.contains('active')) {
|
||||||
|
password.classList.remove('active');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!wifi.classList.contains('active')) {
|
||||||
|
wifi.classList.add('active');
|
||||||
|
}
|
||||||
|
if (!password.classList.contains('active')) {
|
||||||
|
password.classList.add('active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mobile.wifi.current = res.current;
|
||||||
|
mobile.wifi.available = res.available;
|
||||||
|
};
|
||||||
|
|
||||||
|
mobile.editWifi = function () {
|
||||||
|
const available = document.getElementById('available');
|
||||||
|
const wifi = document.getElementById('wifi');
|
||||||
|
const password = document.getElementById('password');
|
||||||
|
if (!wifi.classList.contains('active')) {
|
||||||
|
wifi.classList.add('active');
|
||||||
|
}
|
||||||
|
if (!password.classList.contains('active')) {
|
||||||
|
password.classList.add('active');
|
||||||
|
}
|
||||||
|
password.focus();
|
||||||
|
if (available.value !== mobile.wifi.current && available.classList.contains('active')) {
|
||||||
|
available.classList.remove('active');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
mobile.setWifi = function () {
|
||||||
|
const ssid = document.getElementById('available').value;
|
||||||
|
const pwd = document.getElementById('password').value;
|
||||||
|
const opts = {
|
||||||
|
ssid : ssid,
|
||||||
|
pwd : pwd
|
||||||
|
}
|
||||||
|
spinnerShow();
|
||||||
|
if (ssid === '' || ssid === null || ssid === undefined) {
|
||||||
|
return alert('Cannot set wireless credentials with a blank SSID');
|
||||||
|
}
|
||||||
|
if (pwd === '' || pwd === null || pwd === undefined) {
|
||||||
|
return alert('Cannot set wireless credentials with a blank passphrase');
|
||||||
|
}
|
||||||
|
if (pwd.length < 8 || pwd.length > 63) {
|
||||||
|
return alert('Passphrase must be 8..63 characters');
|
||||||
|
}
|
||||||
|
ble.write(mobile.ble.device.id,
|
||||||
|
mobile.ble.SERVICE_ID,
|
||||||
|
mobile.ble.WIFI_ID,
|
||||||
|
stringToBytes(JSON.stringify(opts)),
|
||||||
|
mobile.setWifiSuccess,
|
||||||
|
mobile.ble.onError);
|
||||||
|
};
|
||||||
|
|
||||||
|
mobile.setWifiSuccess = function () {
|
||||||
|
spinnerHide();
|
||||||
|
console.log('Set new wifi credentials');
|
||||||
|
setTimeout(mobile.getWifi, 100);
|
||||||
|
};
|
||||||
|
|
||||||
function bytesToString (buffer) {
|
function bytesToString (buffer) {
|
||||||
return String.fromCharCode.apply(null, new Uint8Array(buffer));
|
return String.fromCharCode.apply(null, new Uint8Array(buffer));
|
||||||
|
|
Loading…
Reference in New Issue