Compare commits
13 Commits
4834d41580
...
5de3553fc9
Author | SHA1 | Date | |
---|---|---|---|
|
5de3553fc9 | ||
|
5b44ee1441 | ||
|
3db344aa00 | ||
|
efadce0b41 | ||
|
cd46e089f1 | ||
|
c19c15dd07 | ||
|
4ee100d16b | ||
|
aa544d307e | ||
|
df1816ca44 | ||
|
33661ec97e | ||
|
81dcd390e0 | ||
|
202aa27d9b | ||
|
fc434c1292 |
@ -2,12 +2,15 @@
|
|||||||
#For the moment, there is a web and ftp server. Maybe more to come.
|
#For the moment, there is a web and ftp server. Maybe more to come.
|
||||||
#Ports are between 1 and 65535.
|
#Ports are between 1 and 65535.
|
||||||
#0 means unlimitted.
|
#0 means unlimitted.
|
||||||
|
#An empty password means the service is open.
|
||||||
#The blank new line at then end of the file is mendatory. Without it, the last parameter won't be read.
|
#The blank new line at then end of the file is mendatory. Without it, the last parameter won't be read.
|
||||||
|
|
||||||
WEB_ENABLED : 'true'
|
WEB_ENABLED : 'true'
|
||||||
WEB_PORT : 80
|
WEB_PORT : 80
|
||||||
WEB_MAX_CLIENT : 0
|
WEB_MAX_CLIENT : 0
|
||||||
FTP_ENABLED : 'true'
|
FTP_ENABLED : 'true'
|
||||||
|
FTP_LOGIN : 'ESP8266'
|
||||||
|
FTP_PASSWORD : '12345678'
|
||||||
FTP_PORT : 21
|
FTP_PORT : 21
|
||||||
FTP_DATA_PORT : 1024
|
FTP_DATA_PORT : 1024
|
||||||
FTP_MAX_CLIENT : 0
|
FTP_MAX_CLIENT : 0
|
||||||
|
@ -16,11 +16,21 @@
|
|||||||
<div class="item">
|
<div class="item">
|
||||||
<p><span id="sigStrength"></span> dBm</p>
|
<p><span id="sigStrength"></span> dBm</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="item" id="strIco">
|
||||||
|
<img id="imgSig1" src="rsrc/sigstr1.png" alt="sigstr1">
|
||||||
|
<img id="imgSig2" src="rsrc/sigstr2.png" alt="sigstr2" style="display:none;">
|
||||||
|
<img id="imgSig3" src="rsrc/sigstr3.png" alt="sigstr3" style="display:none;">
|
||||||
|
<img id="imgSig4" src="rsrc/sigstr4.png" alt="sigstr4" style="display:none;">
|
||||||
|
<img id="imgSig5" src="rsrc/sigstr5.png" alt="sigstr5" style="display:none;">
|
||||||
|
<p style="position:absolute;bottom:-15px;left:0;">
|
||||||
|
<span id="sigStrengthPercent"></span> %
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<p><span id="sigStrengthPercent"></span> %</p>
|
<p><span id="battLevel"></span></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="item" style="margin-left: auto;">
|
<div class="item" style="margin-left: auto;">
|
||||||
<p><span id="battLevel"></span></p>
|
<p><span id="temperature"></span></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="item" >
|
<div class="item" >
|
||||||
<p>PING : <br /><span id="execTime"></span> ms</p>
|
<p>PING : <br /><span id="execTime"></span> ms</p>
|
||||||
@ -34,23 +44,67 @@
|
|||||||
<div class="subSection">
|
<div class="subSection">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<th>
|
||||||
<h2 class="categorie">AP Info</h2>
|
<h2 class="categorie">AP Info</h2>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<h2 class="categorie">STA Info</h2>
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
<h2 class="categorie">System Info</h2>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
<p>SSID : </p>
|
<p>SSID : </p>
|
||||||
<p>Password : </p>
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<h2 class="categorie">STA Info</h2>
|
|
||||||
<p>Local IP : <span id="localIP"></span></p>
|
<p>Local IP : <span id="localIP"></span></p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<h2 class="categorie">System Info</h2>
|
|
||||||
<p>Free ram : <span id="ramInfo"></span> Byte(s)</p>
|
<p>Free ram : <span id="ramInfo"></span> Byte(s)</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>Password : </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
<p>CPU Frequ : <span id="cpuInfo"></span> Mhz</p>
|
<p>CPU Frequ : <span id="cpuInfo"></span> Mhz</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
<p>Heap frag : <span id="fragInfo"></span> %</p>
|
<p>Heap frag : <span id="fragInfo"></span> %</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
<p>Max block : <span id="blockInfo"></span> Byte(s)</p>
|
<p>Max block : <span id="blockInfo"></span> Byte(s)</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Up time : <span id="upTime"></span></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="subSection inline" style="width:30%;">
|
<div class="subSection inline" style="width:30%;">
|
||||||
@ -66,9 +120,9 @@
|
|||||||
<p>
|
<p>
|
||||||
Set RTC value : <br />
|
Set RTC value : <br />
|
||||||
<br />
|
<br />
|
||||||
Time : <input type="number">:<input type="number">:<input type="number"><br />
|
Time : <input id="hour" type="number" min="0" max="23">h:<input id="minute" type="number" min="0" max="59">m:<input id="second" type="number" min="0" max="59">s<br />
|
||||||
Date : <input type="number">/<input type="number">/<input type="number"><br /><br />
|
Date : <input id="day" type="number" min="1" max="31">d/<input id="month" type="number" min="1" max="12">m/<input id="year" type="number" min="2000" max="3000">y<br /><br />
|
||||||
<button>DO IT !</button>
|
<button onclick="setRtcClock();">DO IT !</button><p><span id="rtcSetMsg" ></span></p>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -35,6 +35,15 @@ function init()
|
|||||||
|
|
||||||
powerInfo();
|
powerInfo();
|
||||||
powerInfoInter = setInterval(powerInfo,10000);
|
powerInfoInter = setInterval(powerInfo,10000);
|
||||||
|
|
||||||
|
//We init the time boxes
|
||||||
|
var curDate = new Date();
|
||||||
|
document.getElementById('hour').value = curDate.getHours();
|
||||||
|
document.getElementById('minute').value = curDate.getMinutes();
|
||||||
|
document.getElementById('second').value = curDate.getSeconds();
|
||||||
|
document.getElementById('day').value = curDate.getDate();
|
||||||
|
document.getElementById('month').value = curDate.getMonth() + 1;
|
||||||
|
document.getElementById('year').value = curDate.getFullYear();
|
||||||
console.log("Ending setup");
|
console.log("Ending setup");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,6 +196,8 @@ function refreshSysInfo()
|
|||||||
document.getElementById('cpuInfo').innerHTML = systemInfoObj['CPU freq'];
|
document.getElementById('cpuInfo').innerHTML = systemInfoObj['CPU freq'];
|
||||||
document.getElementById('fragInfo').innerHTML = systemInfoObj['heap frag'];
|
document.getElementById('fragInfo').innerHTML = systemInfoObj['heap frag'];
|
||||||
document.getElementById('blockInfo').innerHTML = systemInfoObj['max block'];
|
document.getElementById('blockInfo').innerHTML = systemInfoObj['max block'];
|
||||||
|
document.getElementById('upTime').innerHTML = systemInfoObj['up time'].days + ' days ' + systemInfoObj['up time'].hours + ' hours ' + systemInfoObj['up time'].minutes + ' minutes ' + systemInfoObj['up time'].seconds + ' seconds ';
|
||||||
|
document.getElementById('temperature').innerHTML = systemInfoObj['temperature'].level + systemInfoObj['temperature'].unit;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -195,6 +206,8 @@ function refreshSysInfo()
|
|||||||
document.getElementById('cpuInfo').innerHTML = 'NaN';
|
document.getElementById('cpuInfo').innerHTML = 'NaN';
|
||||||
document.getElementById('fragInfo').innerHTML = 'NaN';
|
document.getElementById('fragInfo').innerHTML = 'NaN';
|
||||||
document.getElementById('blockInfo').innerHTML = 'NaN';
|
document.getElementById('blockInfo').innerHTML = 'NaN';
|
||||||
|
document.getElementById('upTime').innerHTML = 'NaN';
|
||||||
|
document.getElementById('temperature').innerHTML = 'NaN';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -237,6 +250,8 @@ function refreshSigStrength()
|
|||||||
document.getElementById('sigStrength').innerHTML = wifiStaObj.RSSI;
|
document.getElementById('sigStrength').innerHTML = wifiStaObj.RSSI;
|
||||||
document.getElementById('sigStrengthPercent').innerHTML = wifiStaObj.RSSI2;
|
document.getElementById('sigStrengthPercent').innerHTML = wifiStaObj.RSSI2;
|
||||||
document.getElementById('localIP').innerHTML = wifiStaObj['local IP'];
|
document.getElementById('localIP').innerHTML = wifiStaObj['local IP'];
|
||||||
|
setSigStrenthPicture(wifiStaObj.RSSI2
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -256,6 +271,50 @@ function refreshSigStrength()
|
|||||||
ajaxReq.send();
|
ajaxReq.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setSigStrenthPicture(value)
|
||||||
|
{
|
||||||
|
if(value < 5)
|
||||||
|
{
|
||||||
|
document.getElementById('imgSig1').style.display = 'block';
|
||||||
|
document.getElementById('imgSig2').style.display = 'none';
|
||||||
|
document.getElementById('imgSig3').style.display = 'none';
|
||||||
|
document.getElementById('imgSig4').style.display = 'none';
|
||||||
|
document.getElementById('imgSig5').style.display = 'none';
|
||||||
|
}
|
||||||
|
else if(value < 20)
|
||||||
|
{
|
||||||
|
document.getElementById('imgSig1').style.display = 'none';
|
||||||
|
document.getElementById('imgSig2').style.display = 'block';
|
||||||
|
document.getElementById('imgSig3').style.display = 'none';
|
||||||
|
document.getElementById('imgSig4').style.display = 'none';
|
||||||
|
document.getElementById('imgSig5').style.display = 'none';
|
||||||
|
}
|
||||||
|
else if(value < 40)
|
||||||
|
{
|
||||||
|
document.getElementById('imgSig1').style.display = 'none';
|
||||||
|
document.getElementById('imgSig2').style.display = 'none';
|
||||||
|
document.getElementById('imgSig3').style.display = 'block';
|
||||||
|
document.getElementById('imgSig4').style.display = 'none';
|
||||||
|
document.getElementById('imgSig5').style.display = 'none';
|
||||||
|
}
|
||||||
|
else if(value < 80)
|
||||||
|
{
|
||||||
|
document.getElementById('imgSig1').style.display = 'none';
|
||||||
|
document.getElementById('imgSig2').style.display = 'none';
|
||||||
|
document.getElementById('imgSig3').style.display = 'none';
|
||||||
|
document.getElementById('imgSig4').style.display = 'block';
|
||||||
|
document.getElementById('imgSig5').style.display = 'none';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.getElementById('imgSig1').style.display = 'none';
|
||||||
|
document.getElementById('imgSig2').style.display = 'none';
|
||||||
|
document.getElementById('imgSig3').style.display = 'none';
|
||||||
|
document.getElementById('imgSig4').style.display = 'none';
|
||||||
|
document.getElementById('imgSig5').style.display = 'block';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function sdCardMountUnmnout(action)
|
function sdCardMountUnmnout(action)
|
||||||
{
|
{
|
||||||
console.log("Sd card action : "+action);
|
console.log("Sd card action : "+action);
|
||||||
@ -640,3 +699,77 @@ function setIoLevel(pin,mode)
|
|||||||
ajaxReq.open('GET',"/sab/io/set/level?"+pinOnly+'='+ (mode == 'HIGH' ? '1' : '0'));
|
ajaxReq.open('GET',"/sab/io/set/level?"+pinOnly+'='+ (mode == 'HIGH' ? '1' : '0'));
|
||||||
ajaxReq.send();
|
ajaxReq.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setRtcClock()
|
||||||
|
{
|
||||||
|
//First we chech the typeof the data
|
||||||
|
var hour = parseInt(document.getElementById('hour').value);
|
||||||
|
var minute = parseInt(document.getElementById('minute').value);
|
||||||
|
var second = parseInt(document.getElementById('second').value);
|
||||||
|
var day = parseInt(document.getElementById('day').value);
|
||||||
|
var month = parseInt(document.getElementById('month').value);
|
||||||
|
var year = parseInt(document.getElementById('year').value);
|
||||||
|
|
||||||
|
if( isFinite(hour) &&
|
||||||
|
isFinite(minute) &&
|
||||||
|
isFinite(second) &&
|
||||||
|
isFinite(day) &&
|
||||||
|
isFinite(month) &&
|
||||||
|
isFinite(year) )
|
||||||
|
{
|
||||||
|
//First, we create the request string : datetime=day_month_year_hours_minutes_seconds
|
||||||
|
var data = day+"_"+month+"_"+year+"_"+hour+"_"+minute+"_"+second;
|
||||||
|
|
||||||
|
var ajaxReq = new XMLHttpRequest();
|
||||||
|
ajaxReq.timeout = 5000;
|
||||||
|
ajaxReq.onreadystatechange = function()
|
||||||
|
{
|
||||||
|
switch(this.readyState)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
console.log("Connection established");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
console.log("Request received");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
console.log("Processing request");
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
console.log("Response is ready");
|
||||||
|
if(this.status != 0){onConnected(); document.getElementById('execTime').innerHTML = new Date().getTime() - execTimeStart;}
|
||||||
|
if(this.status == 200)
|
||||||
|
{
|
||||||
|
console.log("Response : " + this.responseText);
|
||||||
|
var rtcRespObj = JSON.parse(this.responseText);
|
||||||
|
console.log(rtcRespObj);
|
||||||
|
document.getElementById('rtcSetMsg').innerHTML = rtcRespObj.status;
|
||||||
|
document.getElementById('rtcSetMsg').style.color = 'green';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log("Error, status is : " + this.status);
|
||||||
|
document.getElementById('rtcSetMsg').innerHTML = 'Failed to execute';
|
||||||
|
document.getElementById('rtcSetMsg').style.color = 'red';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.log("Unknown state");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ajaxReq.ontimeout = onTimeOut;
|
||||||
|
ajaxReq.open('GET',"/sab/rtc/set/datetime?datetime="+data);
|
||||||
|
console.log("datetime="+data);
|
||||||
|
execTimeStart = new Date().getTime();
|
||||||
|
ajaxReq.send();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.error("Non numeric values encountered to set the rtc clock");
|
||||||
|
document.getElementById('rtcSetMsg').innerHTML = 'Failed to execute';
|
||||||
|
document.getElementById('rtcSetMsg').style.color = 'red';
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@ header > h1
|
|||||||
margin:0;
|
margin:0;
|
||||||
padding:0;
|
padding:0;
|
||||||
}
|
}
|
||||||
#conIcon > img
|
#conIcon > img, #strIco > img
|
||||||
{
|
{
|
||||||
width:70px;
|
width:70px;
|
||||||
padding:0;
|
padding:0;
|
||||||
@ -54,6 +54,16 @@ footer > p
|
|||||||
table
|
table
|
||||||
{
|
{
|
||||||
width:100%;
|
width:100%;
|
||||||
|
/*border-collapse:collapse;*/
|
||||||
|
}
|
||||||
|
table p
|
||||||
|
{
|
||||||
|
margin:2px;
|
||||||
|
}
|
||||||
|
table th, table td
|
||||||
|
{
|
||||||
|
/*border:1px solid black;*/
|
||||||
|
padding:0;
|
||||||
}
|
}
|
||||||
nav
|
nav
|
||||||
{
|
{
|
||||||
@ -62,7 +72,7 @@ nav
|
|||||||
}
|
}
|
||||||
input[type='number']
|
input[type='number']
|
||||||
{
|
{
|
||||||
width:40px;
|
width:50px;
|
||||||
}
|
}
|
||||||
.menuContainer
|
.menuContainer
|
||||||
{
|
{
|
||||||
@ -78,6 +88,7 @@ input[type='number']
|
|||||||
margin:0 10px 0 0;
|
margin:0 10px 0 0;
|
||||||
background-color:white;
|
background-color:white;
|
||||||
min-width:60px;
|
min-width:60px;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-start
|
.item-start
|
||||||
|
@ -4,7 +4,6 @@ CFGParameterValue::CFGParameterValue():DictionaryInterface(),_parameter(NULL), _
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CFGParameterValue::CFGParameterValue(const char *parameter, const char *value, boolean quotedParameter, boolean quotedValue):_quotedParameter(quotedParameter), _quotedValue(quotedValue)
|
CFGParameterValue::CFGParameterValue(const char *parameter, const char *value, boolean quotedParameter, boolean quotedValue):_quotedParameter(quotedParameter), _quotedValue(quotedValue)
|
||||||
{
|
{
|
||||||
_parameter = (char *) malloc((strlen(parameter) * sizeof(char)) + 1); //+1 for the string terminating character
|
_parameter = (char *) malloc((strlen(parameter) * sizeof(char)) + 1); //+1 for the string terminating character
|
||||||
@ -13,7 +12,6 @@ CFGParameterValue::CFGParameterValue(const char *parameter, const char *value, b
|
|||||||
strcpy(_parameter, parameter);
|
strcpy(_parameter, parameter);
|
||||||
strcpy(_value, value);
|
strcpy(_value, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
CFGParameterValue::CFGParameterValue(const char *parameter, const char *value):CFGParameterValue()
|
CFGParameterValue::CFGParameterValue(const char *parameter, const char *value):CFGParameterValue()
|
||||||
{
|
{
|
||||||
_parameter = (char *) malloc((strlen(parameter) * sizeof(char)) + 1); //+1 for the string terminating character
|
_parameter = (char *) malloc((strlen(parameter) * sizeof(char)) + 1); //+1 for the string terminating character
|
||||||
|
@ -3,29 +3,19 @@
|
|||||||
ConnectivityManager::ConnectivityManager() : _error(0), _sdCardManager(NULL)
|
ConnectivityManager::ConnectivityManager() : _error(0), _sdCardManager(NULL)
|
||||||
{
|
{
|
||||||
persistent(false);
|
persistent(false);
|
||||||
WiFi.disconnect();
|
|
||||||
WiFi.softAPdisconnect();
|
|
||||||
|
|
||||||
if(!enableSTAAndAP(false))_error &= AP_AND_STA_ENABLED_ERR;
|
if(!WiFi.disconnect(true))_error |= STA_ENABLED_DISABLE_ERR;
|
||||||
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR;
|
if(!WiFi.softAPdisconnect(true))_error |= AP_ENABLED_DISABLE_ERR;
|
||||||
|
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error |= AP_SETUP_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConnectivityManager::ConnectivityManager(SDCardManager &sdCardManager) : _error(0), _sdCardManager(&sdCardManager)
|
ConnectivityManager::ConnectivityManager(SDCardManager &sdCardManager) : _error(0), _sdCardManager(&sdCardManager)
|
||||||
{
|
{
|
||||||
persistent(false);
|
persistent(false);
|
||||||
WiFi.disconnect();
|
|
||||||
WiFi.softAPdisconnect();
|
|
||||||
|
|
||||||
if(!enableSTAAndAP(false))_error &= AP_AND_STA_ENABLED_ERR;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//SOFT AP PART
|
|
||||||
startAP();
|
startAP();
|
||||||
|
|
||||||
//STATION PART
|
|
||||||
connectToSTA();
|
connectToSTA();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
boolean ConnectivityManager::connectToSTA()
|
boolean ConnectivityManager::connectToSTA()
|
||||||
{
|
{
|
||||||
@ -34,6 +24,7 @@ boolean ConnectivityManager::connectToSTA()
|
|||||||
CFGDictionary<CFGParameterValue> *cfgDictionary = (CFGDictionary<CFGParameterValue> *) cfgFileParserSTA.parseFile();
|
CFGDictionary<CFGParameterValue> *cfgDictionary = (CFGDictionary<CFGParameterValue> *) cfgFileParserSTA.parseFile();
|
||||||
|
|
||||||
boolean toBeReturned(true);
|
boolean toBeReturned(true);
|
||||||
|
if(!WiFi.disconnect(true))_error |= STA_ENABLED_DISABLE_ERR;
|
||||||
|
|
||||||
if(cfgDictionary != NULL)
|
if(cfgDictionary != NULL)
|
||||||
{
|
{
|
||||||
@ -43,12 +34,10 @@ boolean ConnectivityManager::connectToSTA()
|
|||||||
{
|
{
|
||||||
if(!begin((*cfgDictionary)("SSID")->stringValue(), (*cfgDictionary)("PASSWORD")->stringValue()))
|
if(!begin((*cfgDictionary)("SSID")->stringValue(), (*cfgDictionary)("PASSWORD")->stringValue()))
|
||||||
{
|
{
|
||||||
_error &= AP_SETUP_ERR;
|
_error |= STA_SETUP_ERR;
|
||||||
toBeReturned = false;
|
toBeReturned = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
enableSTA(false);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
toBeReturned = false;
|
toBeReturned = false;
|
||||||
@ -67,12 +56,13 @@ boolean ConnectivityManager::startAP()
|
|||||||
CFGDictionary<CFGParameterValue> *cfgDictionary = (CFGDictionary<CFGParameterValue> *) cfgFileParser.parseFile();
|
CFGDictionary<CFGParameterValue> *cfgDictionary = (CFGDictionary<CFGParameterValue> *) cfgFileParser.parseFile();
|
||||||
|
|
||||||
boolean toBeReturned(true);
|
boolean toBeReturned(true);
|
||||||
|
if(!WiFi.softAPdisconnect(true))_error |= AP_ENABLED_DISABLE_ERR;
|
||||||
|
|
||||||
if(cfgDictionary == NULL)
|
if(cfgDictionary == NULL)
|
||||||
{
|
{
|
||||||
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR;
|
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error |= AP_SETUP_ERR;
|
||||||
|
|
||||||
toBeReturned = false;
|
return false;
|
||||||
}
|
}
|
||||||
else if((*cfgDictionary)("SSID") != NULL && (*cfgDictionary)("PASSWORD") != NULL && (*cfgDictionary)("CHANNEL") != NULL && (*cfgDictionary)("SSID_HIDDEN") != NULL && (*cfgDictionary)("AP_MAX_CONNECTION") != NULL && (*cfgDictionary)("ENABLED") != NULL)
|
else if((*cfgDictionary)("SSID") != NULL && (*cfgDictionary)("PASSWORD") != NULL && (*cfgDictionary)("CHANNEL") != NULL && (*cfgDictionary)("SSID_HIDDEN") != NULL && (*cfgDictionary)("AP_MAX_CONNECTION") != NULL && (*cfgDictionary)("ENABLED") != NULL)
|
||||||
{
|
{
|
||||||
@ -80,21 +70,19 @@ boolean ConnectivityManager::startAP()
|
|||||||
{
|
{
|
||||||
if(!softAP((*cfgDictionary)("SSID")->stringValue(), strcmp((*cfgDictionary)("PASSWORD")->stringValue(),"") == 0 ? NULL:(*cfgDictionary)("PASSWORD")->stringValue(), (*cfgDictionary)("CHANNEL")->intValue(), (*cfgDictionary)("SSID_HIDDEN")->booleanValue(), (*cfgDictionary)("AP_MAX_CONNECTION")->intValue()))
|
if(!softAP((*cfgDictionary)("SSID")->stringValue(), strcmp((*cfgDictionary)("PASSWORD")->stringValue(),"") == 0 ? NULL:(*cfgDictionary)("PASSWORD")->stringValue(), (*cfgDictionary)("CHANNEL")->intValue(), (*cfgDictionary)("SSID_HIDDEN")->booleanValue(), (*cfgDictionary)("AP_MAX_CONNECTION")->intValue()))
|
||||||
{
|
{
|
||||||
_error &= AP_SETUP_ERR;
|
_error |= AP_SETUP_ERR;
|
||||||
toBeReturned = false;
|
toBeReturned = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
enableAP(false);
|
|
||||||
delete cfgDictionary;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR;
|
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error |= AP_SETUP_ERR;
|
||||||
delete cfgDictionary;
|
|
||||||
toBeReturned = false;
|
toBeReturned = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete cfgDictionary;
|
||||||
|
|
||||||
return toBeReturned;
|
return toBeReturned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,11 @@
|
|||||||
#define MAX_RSSI -50
|
#define MAX_RSSI -50
|
||||||
#define COEF_RSSI 3.225806452
|
#define COEF_RSSI 3.225806452
|
||||||
|
|
||||||
|
#define STA_ENABLED_DISABLE_ERR B00001000
|
||||||
|
#define AP_ENABLED_DISABLE_ERR B00000001
|
||||||
|
#define AP_SETUP_ERR B00000010
|
||||||
|
#define STA_SETUP_ERR B00000100
|
||||||
|
|
||||||
class ConnectivityManager : public ESP8266WiFiClass
|
class ConnectivityManager : public ESP8266WiFiClass
|
||||||
{
|
{
|
||||||
friend class SAB;
|
friend class SAB;
|
||||||
@ -18,14 +23,15 @@ class ConnectivityManager : public ESP8266WiFiClass
|
|||||||
boolean enableSTAAndAP(boolean enable);
|
boolean enableSTAAndAP(boolean enable);
|
||||||
boolean isSTAEnabled();
|
boolean isSTAEnabled();
|
||||||
boolean isAPEnabled();
|
boolean isAPEnabled();
|
||||||
boolean connectToSTA();
|
|
||||||
boolean startAP();
|
|
||||||
|
|
||||||
unsigned char RSSIPercent();
|
unsigned char RSSIPercent();
|
||||||
unsigned char getError() const;
|
unsigned char getError() const;
|
||||||
protected:
|
protected:
|
||||||
ConnectivityManager();
|
ConnectivityManager();
|
||||||
ConnectivityManager(SDCardManager &sdCardManager);
|
ConnectivityManager(SDCardManager &sdCardManager);
|
||||||
|
|
||||||
|
boolean connectToSTA();
|
||||||
|
boolean startAP();
|
||||||
private:
|
private:
|
||||||
unsigned char _error;
|
unsigned char _error;
|
||||||
SDCardManager *_sdCardManager;
|
SDCardManager *_sdCardManager;
|
||||||
|
@ -16,7 +16,7 @@ _error(0)
|
|||||||
{
|
{
|
||||||
//We set the gpio up
|
//We set the gpio up
|
||||||
initGPIO();
|
initGPIO();
|
||||||
Serial.begin(500000, SERIAL_8N1, SERIAL_TX_ONLY);
|
Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||||
Serial.println();
|
Serial.println();
|
||||||
delay(200);
|
delay(200);
|
||||||
|
|
||||||
@ -28,6 +28,8 @@ _error(0)
|
|||||||
_screenManager.init();
|
_screenManager.init();
|
||||||
_connectivityManager = new ConnectivityManager(_sdCardManager);
|
_connectivityManager = new ConnectivityManager(_sdCardManager);
|
||||||
if(!_pcf.begin()){_error |= IO_INIT_ERR;}
|
if(!_pcf.begin()){_error |= IO_INIT_ERR;}
|
||||||
|
|
||||||
|
_powerUpTime = _rtcManager.getDateTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
SAB::SAB(const BoardConfig boardConfig, const unsigned int webServerPort, const unsigned int ftpServerPort) : _boardConfig(boardConfig),
|
SAB::SAB(const BoardConfig boardConfig, const unsigned int webServerPort, const unsigned int ftpServerPort) : _boardConfig(boardConfig),
|
||||||
@ -47,7 +49,7 @@ _error(0)
|
|||||||
{
|
{
|
||||||
//We set the gpio up
|
//We set the gpio up
|
||||||
initGPIO();
|
initGPIO();
|
||||||
Serial.begin(500000, SERIAL_8N1, SERIAL_TX_ONLY);
|
Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||||
Serial.println();
|
Serial.println();
|
||||||
delay(200);
|
delay(200);
|
||||||
//We initialize the pins for the I2C communication
|
//We initialize the pins for the I2C communication
|
||||||
@ -58,6 +60,8 @@ _error(0)
|
|||||||
_screenManager.init();
|
_screenManager.init();
|
||||||
_connectivityManager = new ConnectivityManager(_sdCardManager);
|
_connectivityManager = new ConnectivityManager(_sdCardManager);
|
||||||
if(!_pcf.begin()){_error |= IO_INIT_ERR;}
|
if(!_pcf.begin()){_error |= IO_INIT_ERR;}
|
||||||
|
|
||||||
|
_powerUpTime = _rtcManager.getDateTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SAB::initGPIO()
|
void SAB::initGPIO()
|
||||||
@ -115,6 +119,11 @@ PowerManager& SAB::getPowerManager()
|
|||||||
return _powerManager;
|
return _powerManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TimeSpan SAB::getUpTime()
|
||||||
|
{
|
||||||
|
return _rtcManager.getDateTime() - _powerUpTime;
|
||||||
|
}
|
||||||
|
|
||||||
BoardConfig SAB::getBoardConfig() const
|
BoardConfig SAB::getBoardConfig() const
|
||||||
{
|
{
|
||||||
return _boardConfig;
|
return _boardConfig;
|
||||||
|
@ -39,7 +39,9 @@ class SAB
|
|||||||
IOManager& getIoManager();
|
IOManager& getIoManager();
|
||||||
TaskSchedulerManager& getTaskSchedulerManager();
|
TaskSchedulerManager& getTaskSchedulerManager();
|
||||||
PowerManager& getPowerManager();
|
PowerManager& getPowerManager();
|
||||||
|
TimeSpan getUpTime();
|
||||||
BoardConfig getBoardConfig() const;
|
BoardConfig getBoardConfig() const;
|
||||||
|
|
||||||
const char *getSoftVersion() const;
|
const char *getSoftVersion() const;
|
||||||
unsigned char getError() const;
|
unsigned char getError() const;
|
||||||
private:
|
private:
|
||||||
@ -60,6 +62,7 @@ class SAB
|
|||||||
TaskSchedulerManager _taskSchedulerManager;
|
TaskSchedulerManager _taskSchedulerManager;
|
||||||
PowerManager _powerManager;
|
PowerManager _powerManager;
|
||||||
|
|
||||||
|
DateTime _powerUpTime;
|
||||||
uint8_t _error;
|
uint8_t _error;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,6 +77,6 @@ void TCPClient::freeDataBuffer(uint16_t size)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy((char *)_data, (char *)_data + secureSize);
|
memmove(_data, _data + secureSize, _dataSize - secureSize + 1 /*We do not forget to copy the \0 at then end*/);
|
||||||
_dataSize -= secureSize;
|
_dataSize -= secureSize;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
//#define DEBUG_WEBCL
|
//#define DEBUG_WEBCL
|
||||||
|
|
||||||
WEBClient::WEBClient(WiFiClient client, uint8_t id, uint16_t maxResourceBuffer, uint16_t maxBodyBuffer, uint16_t dataBufferSize) : TCPClient(client, id, dataBufferSize), _WEBClientState(WEBServer<WEBClient>::WEBClientState::ACCEPTED), _httpParserState(WEBServer<WEBClient>::HttpParserStatus::HTTP_VERB), _fileSentBytes(0)
|
WEBClient::WEBClient(WiFiClient client, uint8_t id, uint16_t maxResourceBuffer, uint16_t maxBodyBuffer, uint16_t dataBufferSize) : TCPClient(client, id, dataBufferSize), _WEBClientState(WEBServer<WEBClient>::WEBClientState::ACCEPTED), _httpParserState(WEBServer<WEBClient>::HttpParserStatus::HTTP_VERB), _fileSentBytes(0), _range(0)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_WEBCL
|
#ifdef DEBUG_WEBCL
|
||||||
Serial.println("WEBClient : Standard constructor called");
|
Serial.println("WEBClient : Standard constructor called");
|
||||||
|
@ -17,6 +17,7 @@ class WEBClient : public TCPClient
|
|||||||
WEBServer<WEBClient>::HttpRequestData _httpRequestData;
|
WEBServer<WEBClient>::HttpRequestData _httpRequestData;
|
||||||
WEBServer<WEBClient>::HttpParserStatus _httpParserState;
|
WEBServer<WEBClient>::HttpParserStatus _httpParserState;
|
||||||
uint64_t _fileSentBytes;
|
uint64_t _fileSentBytes;
|
||||||
|
uint64_t _range; //Used to store the value of the range param for file downloading
|
||||||
void clearHttpRequestData();
|
void clearHttpRequestData();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -19,10 +19,6 @@ typedef enum { GPIO_0 = 0,
|
|||||||
ADC = A0,
|
ADC = A0,
|
||||||
DEFAULT_PIN = -1 } Pin;
|
DEFAULT_PIN = -1 } Pin;
|
||||||
|
|
||||||
#define AP_AND_STA_ENABLED_ERR B00000001
|
|
||||||
#define AP_SETUP_ERR B00000010
|
|
||||||
#define STA_SETUP_ERR B00000100
|
|
||||||
|
|
||||||
#define NO_ERROR 0
|
#define NO_ERROR 0
|
||||||
|
|
||||||
#define NO_CURRENT_VIEW NULL
|
#define NO_CURRENT_VIEW NULL
|
||||||
|
@ -25,7 +25,7 @@ boolean task_blink(void *pData)
|
|||||||
boolean task_batt_sensing(void *pData)
|
boolean task_batt_sensing(void *pData)
|
||||||
{
|
{
|
||||||
View1Packet *p = (View1Packet *) pData;
|
View1Packet *p = (View1Packet *) pData;
|
||||||
//Serial.println(F("BATT SENSING..."));
|
Serial.printf_P(F("BATT SENSING...\nRunning since : %d s\n"), millis()/1000);
|
||||||
p->powerInfo = p->sab->getPowerManager().getPowerInfo();
|
p->powerInfo = p->sab->getPowerManager().getPowerInfo();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -8,25 +8,25 @@ boolean homeInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
switch(p->powerInfo.powerType)
|
switch(p->powerInfo.powerType)
|
||||||
{
|
{
|
||||||
case PowerManager::USB:
|
case PowerManager::USB:
|
||||||
sprintf(power_str,"USB");
|
sprintf_P(power_str,PSTR("USB"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf(power_str,"BATT(%u%%)", p->powerInfo.level);
|
sprintf_P(power_str,PSTR("BATT(%u%%)"), p->powerInfo.level);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(p->sdCardSize != 0.0)
|
if(p->sdCardSize != 0.0)
|
||||||
sprintf(sdCard,"%.2fGB",p->sdCardSize);
|
sprintf_P(sdCard,PSTR("%.2fGB"),p->sdCardSize);
|
||||||
else
|
else
|
||||||
sprintf(sdCard,"NO CARD");
|
sprintf_P(sdCard,PSTR("NO CARD"));
|
||||||
|
|
||||||
sprintf_P(time_str, F("Time : %s:%s:%s\nDate : %s/%s/%d\nFree RAM : %d\nSdCard : %s\nPower : %s\nViews : %u\n")
|
sprintf_P(time_str, PSTR("Time : %s:%s:%s\nDate : %s/%s/%d\nFree RAM : %d\nSdCard : %s\nPower : %s\nViews : %u\n")
|
||||||
, dateTimeFormater(zero_prepended[0],p->dateTime.hour(),'0')
|
, dateTimeFormater(zero_prepended[0],p->dateTime.hour(),'0')
|
||||||
, dateTimeFormater(zero_prepended[1],p->dateTime.minute(),'0')
|
, dateTimeFormater(zero_prepended[1],p->dateTime.minute(),'0')
|
||||||
, dateTimeFormater(zero_prepended[2],p->dateTime.second(),'0')
|
, dateTimeFormater(zero_prepended[2],p->dateTime.second(),'0')
|
||||||
, dateTimeFormater(zero_prepended[3],p->dateTime.day(),'0')
|
, dateTimeFormater(zero_prepended[3],p->dateTime.day(),'0')
|
||||||
, dateTimeFormater(zero_prepended[4],p->dateTime.month(),'0')
|
, dateTimeFormater(zero_prepended[4],p->dateTime.month(),'0')
|
||||||
, p->dateTime.year(),ESP.getFreeHeap(),sdCard,power_str, p->nbViews);
|
, p->dateTime.year(),ESP.getFreeHeap(),sdCard,power_str, p->nbViews);
|
||||||
sprintf_P(pageTitle, F("GLOBAL INFO v %s"),p->version);
|
sprintf_P(pageTitle, PSTR("GLOBAL INFO v %s"),p->version);
|
||||||
display.println(time_str);
|
display.println(time_str);
|
||||||
display.setCursor(0,56);
|
display.setCursor(0,56);
|
||||||
display.println(pageTitle);
|
display.println(pageTitle);
|
||||||
@ -38,13 +38,13 @@ boolean rtcInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
{
|
{
|
||||||
char buffer[300] = "";
|
char buffer[300] = "";
|
||||||
SAB *p = (SAB *) pData;
|
SAB *p = (SAB *) pData;
|
||||||
|
TimeSpan ts(p->getUpTime());
|
||||||
sprintf_P(buffer, F("Rtc temp : %.2f C"), p->getRtcManager().getTemperature());
|
sprintf_P(buffer, PSTR("Rtc temp : %.2f C\nUp Time : \n %d d %d h %d m %d s"), p->getRtcManager().getTemperature(), ts.days(), ts.hours(), ts.minutes(), ts.seconds());
|
||||||
|
|
||||||
display.println(buffer);
|
display.println(buffer);
|
||||||
|
|
||||||
display.setCursor(0,56);
|
display.setCursor(0,56);
|
||||||
display.println(F("RTC INFO"));
|
display.print(FPSTR("RTC INFO"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,14 +55,14 @@ boolean apInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
ViewAPPacket *p = (ViewAPPacket *) pData;
|
ViewAPPacket *p = (ViewAPPacket *) pData;
|
||||||
|
|
||||||
if(p->enabled)
|
if(p->enabled)
|
||||||
sprintf_P(conn_str,F("Ip addr : %u.%u.%u.%u\nMac addr : \n%s\nConns : %u\nSSID : %s\n") ,p->ipAddr[0], p->ipAddr[1], p->ipAddr[2], p->ipAddr[3], p->macAddr.c_str(), p->nbOfCon, p->ssid.c_str());
|
sprintf_P(conn_str,PSTR("Ip addr : %u.%u.%u.%u\nMac addr : \n%s\nConns : %u\nSSID : %s\n") ,p->ipAddr[0], p->ipAddr[1], p->ipAddr[2], p->ipAddr[3], p->macAddr.c_str(), p->nbOfCon, p->ssid.c_str());
|
||||||
else
|
else
|
||||||
sprintf_P(conn_str,F("AP connectivity\nis not enabled\nCheck the cfg file\n"));
|
sprintf_P(conn_str,PSTR("AP connectivity\nis not enabled\nCheck the cfg file\n"));
|
||||||
|
|
||||||
display.println(conn_str);
|
display.println(conn_str);
|
||||||
|
|
||||||
display.setCursor(0,56);
|
display.setCursor(0,56);
|
||||||
display.println(F("AP INFO"));
|
display.print(FPSTR("AP INFO"));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -74,14 +74,14 @@ boolean staInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
ViewSTAPacket *p = (ViewSTAPacket *) pData;
|
ViewSTAPacket *p = (ViewSTAPacket *) pData;
|
||||||
|
|
||||||
if(p->enabled)
|
if(p->enabled)
|
||||||
sprintf_P(conn_str, F("Ip addr : %u.%u.%u.%u\nMac addr : \n%s\nSignal : %d dBm\n"), p->ipAddr[0], p->ipAddr[1], p->ipAddr[2], p->ipAddr[3], p->macAddr.c_str(), p->sigStrength);
|
sprintf_P(conn_str, PSTR("Ip addr : %u.%u.%u.%u\nMac addr : \n%s\nSignal : %d dBm\n"), p->ipAddr[0], p->ipAddr[1], p->ipAddr[2], p->ipAddr[3], p->macAddr.c_str(), p->sigStrength);
|
||||||
else
|
else
|
||||||
sprintf_P(conn_str,F("STA connectivity\nis not enabled\nCheck the cfg file\n"));
|
sprintf_P(conn_str,PSTR("STA connectivity\nis not enabled\nCheck the cfg file\n"));
|
||||||
|
|
||||||
display.println(conn_str);
|
display.println(conn_str);
|
||||||
|
|
||||||
display.setCursor(0,56);
|
display.setCursor(0,56);
|
||||||
display.println(F("STA INFO"));
|
display.println(FPSTR("STA INFO"));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -93,11 +93,11 @@ boolean memInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
uint16_t biggestContigMemBlock;
|
uint16_t biggestContigMemBlock;
|
||||||
uint8_t frag;
|
uint8_t frag;
|
||||||
ESP.getHeapStats(&freeMem, &biggestContigMemBlock, &frag);
|
ESP.getHeapStats(&freeMem, &biggestContigMemBlock, &frag);
|
||||||
sprintf_P(dispBuffer, F("Free RAM : %u\nHeap frag : %u\nMax block : %u\nFree Flash : %u\nProg size : %u\nCPU Freq : %u MHz\n"), freeMem, frag, biggestContigMemBlock, ESP.getFreeSketchSpace(), ESP.getSketchSize(), ESP.getCpuFreqMHz());
|
sprintf_P(dispBuffer, PSTR("Free RAM : %u\nHeap frag : %u\nMax block : %u\nFree Flash : %u\nProg size : %u\nCPU Freq : %u MHz\n"), freeMem, frag, biggestContigMemBlock, ESP.getFreeSketchSpace(), ESP.getSketchSize(), ESP.getCpuFreqMHz());
|
||||||
display.println(dispBuffer);
|
display.println(dispBuffer);
|
||||||
|
|
||||||
display.setCursor(0,56);
|
display.setCursor(0,56);
|
||||||
display.println(F("SYS INFO"));
|
display.println(FPSTR("SYS INFO"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ boolean ioInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
char buff[30] = "";
|
char buff[30] = "";
|
||||||
|
|
||||||
display.setCursor(0,2);
|
display.setCursor(0,2);
|
||||||
display.print(F("0 1 2 3 4 5 6 7"));
|
display.print(FPSTR("0 1 2 3 4 5 6 7"));
|
||||||
sprintf(buff,"%c %c %c %c %c %c %c %c",
|
sprintf(buff,"%c %c %c %c %c %c %c %c",
|
||||||
p->ioMode[0] ? 'O' : 'I',
|
p->ioMode[0] ? 'O' : 'I',
|
||||||
p->ioMode[1] ? 'O' : 'I',
|
p->ioMode[1] ? 'O' : 'I',
|
||||||
@ -135,7 +135,7 @@ boolean ioInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
p->ioState[7] ? display.fillRect(119,31,9,17,WHITE) : display.drawRect(119,31,9,17,WHITE);//7
|
p->ioState[7] ? display.fillRect(119,31,9,17,WHITE) : display.drawRect(119,31,9,17,WHITE);//7
|
||||||
|
|
||||||
display.setCursor(0,56);
|
display.setCursor(0,56);
|
||||||
display.println(F("I/O INFO"));
|
display.println(FPSTR("I/O INFO"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,13 +145,13 @@ boolean sysErrorInfo(Adafruit_SSD1306 &display, void *pData)
|
|||||||
|
|
||||||
char error_str[300];
|
char error_str[300];
|
||||||
|
|
||||||
display.print("Rst reason : ");display.println(ESP.getResetReason());
|
display.print(FPSTR("Rst reason : ")); display.println(ESP.getResetReason());
|
||||||
display.print("RTC : ");display.println((p->getError() & SAB::RTC_BEGIN_ERR) != 0 ? "ERROR":"OK");
|
display.print(FPSTR("RTC : "));display.println((p->getError() & SAB::RTC_BEGIN_ERR) != 0 ? "ERROR":"OK");
|
||||||
display.print("DISPLAY : ");display.println((p->getError() & SAB::DISP_BEGIN_ERR) != 0 ? "ERROR":"OK");
|
display.print(FPSTR("DISPLAY : "));display.println((p->getError() & SAB::DISP_BEGIN_ERR) != 0 ? "ERROR":"OK");
|
||||||
display.print("SDCard : ");display.println((p->getError() & SAB::SDCARD_INIT_ERR) != 0 ? "ERROR":"OK");
|
display.print(FPSTR("SDCard : "));display.println((p->getError() & SAB::SDCARD_INIT_ERR) != 0 ? "ERROR":"OK");
|
||||||
display.print("IO : ");display.println((p->getError() & SAB::IO_INIT_ERR) != 0 ? "ERROR":"OK");
|
display.print(FPSTR("IO : "));display.println((p->getError() & SAB::IO_INIT_ERR) != 0 ? "ERROR":"OK");
|
||||||
|
|
||||||
display.setCursor(0,56);
|
display.setCursor(0,56);
|
||||||
display.print(F("SYS ERROR CODE : "));display.println(p->getError());
|
display.print(FPSTR("SYS ERROR CODE : "));display.println(p->getError());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#ifndef WEBAPI_H
|
#ifndef WEBAPI_H
|
||||||
#define WEBAPI_H
|
#define WEBAPI_H
|
||||||
//#include "WebServerManager.h"
|
|
||||||
#include "SAB.h"
|
#include "SAB.h"
|
||||||
#include "views.h"
|
#include "views.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user