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.
|
||||
#Ports are between 1 and 65535.
|
||||
#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.
|
||||
|
||||
WEB_ENABLED : 'true'
|
||||
WEB_PORT : 80
|
||||
WEB_MAX_CLIENT : 0
|
||||
FTP_ENABLED : 'true'
|
||||
FTP_LOGIN : 'ESP8266'
|
||||
FTP_PASSWORD : '12345678'
|
||||
FTP_PORT : 21
|
||||
FTP_DATA_PORT : 1024
|
||||
FTP_MAX_CLIENT : 0
|
||||
|
@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="stylesheet" href="rsrc/style.css" />
|
||||
<link rel="stylesheet" href="rsrc/style.css"/>
|
||||
<link rel="shortcut icon" href="rsrc/favicon.ico" type="image/x-icon"/>
|
||||
<script src="rsrc/script.js"></script>
|
||||
<title>ESP8266 DASHBOARD</title>
|
||||
@ -16,11 +16,21 @@
|
||||
<div class="item">
|
||||
<p><span id="sigStrength"></span> dBm</p>
|
||||
</div>
|
||||
<div class="item">
|
||||
<p><span id="sigStrengthPercent"></span> %</p>
|
||||
<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">
|
||||
<p><span id="battLevel"></span></p>
|
||||
</div>
|
||||
<div class="item" style="margin-left: auto;">
|
||||
<p><span id="battLevel"></span></p>
|
||||
<p><span id="temperature"></span></p>
|
||||
</div>
|
||||
<div class="item" >
|
||||
<p>PING : <br /><span id="execTime"></span> ms</p>
|
||||
@ -34,23 +44,67 @@
|
||||
<div class="subSection">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<th>
|
||||
<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>Password : </p>
|
||||
</td>
|
||||
<td>
|
||||
<h2 class="categorie">STA Info</h2>
|
||||
<p>Local IP : <span id="localIP"></span></p>
|
||||
</td>
|
||||
<td>
|
||||
<h2 class="categorie">System Info</h2>
|
||||
<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>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<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>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
<p>Up time : <span id="upTime"></span></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="subSection inline" style="width:30%;">
|
||||
@ -66,9 +120,9 @@
|
||||
<p>
|
||||
Set RTC value : <br />
|
||||
<br />
|
||||
Time : <input type="number">:<input type="number">:<input type="number"><br />
|
||||
Date : <input type="number">/<input type="number">/<input type="number"><br /><br />
|
||||
<button>DO IT !</button>
|
||||
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 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 onclick="setRtcClock();">DO IT !</button><p><span id="rtcSetMsg" ></span></p>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -35,6 +35,15 @@ function init()
|
||||
|
||||
powerInfo();
|
||||
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");
|
||||
}
|
||||
|
||||
@ -187,6 +196,8 @@ function refreshSysInfo()
|
||||
document.getElementById('cpuInfo').innerHTML = systemInfoObj['CPU freq'];
|
||||
document.getElementById('fragInfo').innerHTML = systemInfoObj['heap frag'];
|
||||
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
|
||||
{
|
||||
@ -195,6 +206,8 @@ function refreshSysInfo()
|
||||
document.getElementById('cpuInfo').innerHTML = 'NaN';
|
||||
document.getElementById('fragInfo').innerHTML = 'NaN';
|
||||
document.getElementById('blockInfo').innerHTML = 'NaN';
|
||||
document.getElementById('upTime').innerHTML = 'NaN';
|
||||
document.getElementById('temperature').innerHTML = 'NaN';
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -237,6 +250,8 @@ function refreshSigStrength()
|
||||
document.getElementById('sigStrength').innerHTML = wifiStaObj.RSSI;
|
||||
document.getElementById('sigStrengthPercent').innerHTML = wifiStaObj.RSSI2;
|
||||
document.getElementById('localIP').innerHTML = wifiStaObj['local IP'];
|
||||
setSigStrenthPicture(wifiStaObj.RSSI2
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -256,6 +271,50 @@ function refreshSigStrength()
|
||||
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)
|
||||
{
|
||||
console.log("Sd card action : "+action);
|
||||
@ -639,4 +698,78 @@ function setIoLevel(pin,mode)
|
||||
ajaxReq.ontimeout = onTimeOut;
|
||||
ajaxReq.open('GET',"/sab/io/set/level?"+pinOnly+'='+ (mode == 'HIGH' ? '1' : '0'));
|
||||
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;
|
||||
padding:0;
|
||||
}
|
||||
#conIcon > img
|
||||
#conIcon > img, #strIco > img
|
||||
{
|
||||
width:70px;
|
||||
padding:0;
|
||||
@ -54,6 +54,16 @@ footer > p
|
||||
table
|
||||
{
|
||||
width:100%;
|
||||
/*border-collapse:collapse;*/
|
||||
}
|
||||
table p
|
||||
{
|
||||
margin:2px;
|
||||
}
|
||||
table th, table td
|
||||
{
|
||||
/*border:1px solid black;*/
|
||||
padding:0;
|
||||
}
|
||||
nav
|
||||
{
|
||||
@ -62,7 +72,7 @@ nav
|
||||
}
|
||||
input[type='number']
|
||||
{
|
||||
width:40px;
|
||||
width:50px;
|
||||
}
|
||||
.menuContainer
|
||||
{
|
||||
@ -78,6 +88,7 @@ input[type='number']
|
||||
margin:0 10px 0 0;
|
||||
background-color:white;
|
||||
min-width:60px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.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)
|
||||
{
|
||||
_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(_value, value);
|
||||
}
|
||||
|
||||
CFGParameterValue::CFGParameterValue(const char *parameter, const char *value):CFGParameterValue()
|
||||
{
|
||||
_parameter = (char *) malloc((strlen(parameter) * sizeof(char)) + 1); //+1 for the string terminating character
|
||||
|
@ -3,28 +3,18 @@
|
||||
ConnectivityManager::ConnectivityManager() : _error(0), _sdCardManager(NULL)
|
||||
{
|
||||
persistent(false);
|
||||
WiFi.disconnect();
|
||||
WiFi.softAPdisconnect();
|
||||
|
||||
if(!enableSTAAndAP(false))_error &= AP_AND_STA_ENABLED_ERR;
|
||||
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR;
|
||||
|
||||
if(!WiFi.disconnect(true))_error |= STA_ENABLED_DISABLE_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)
|
||||
{
|
||||
persistent(false);
|
||||
WiFi.disconnect();
|
||||
WiFi.softAPdisconnect();
|
||||
|
||||
if(!enableSTAAndAP(false))_error &= AP_AND_STA_ENABLED_ERR;
|
||||
else
|
||||
{
|
||||
//SOFT AP PART
|
||||
startAP();
|
||||
|
||||
//STATION PART
|
||||
connectToSTA();
|
||||
}
|
||||
startAP();
|
||||
connectToSTA();
|
||||
}
|
||||
|
||||
boolean ConnectivityManager::connectToSTA()
|
||||
@ -32,8 +22,9 @@ boolean ConnectivityManager::connectToSTA()
|
||||
//STATION PART
|
||||
CFGFileParser cfgFileParserSTA(*_sdCardManager, STA_CFG_FILE);
|
||||
CFGDictionary<CFGParameterValue> *cfgDictionary = (CFGDictionary<CFGParameterValue> *) cfgFileParserSTA.parseFile();
|
||||
|
||||
|
||||
boolean toBeReturned(true);
|
||||
if(!WiFi.disconnect(true))_error |= STA_ENABLED_DISABLE_ERR;
|
||||
|
||||
if(cfgDictionary != NULL)
|
||||
{
|
||||
@ -43,12 +34,10 @@ boolean ConnectivityManager::connectToSTA()
|
||||
{
|
||||
if(!begin((*cfgDictionary)("SSID")->stringValue(), (*cfgDictionary)("PASSWORD")->stringValue()))
|
||||
{
|
||||
_error &= AP_SETUP_ERR;
|
||||
_error |= STA_SETUP_ERR;
|
||||
toBeReturned = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
enableSTA(false);
|
||||
}
|
||||
else
|
||||
toBeReturned = false;
|
||||
@ -65,14 +54,15 @@ boolean ConnectivityManager::startAP()
|
||||
{
|
||||
CFGFileParser cfgFileParser(*_sdCardManager, AP_CFG_FILE);
|
||||
CFGDictionary<CFGParameterValue> *cfgDictionary = (CFGDictionary<CFGParameterValue> *) cfgFileParser.parseFile();
|
||||
|
||||
|
||||
boolean toBeReturned(true);
|
||||
if(!WiFi.softAPdisconnect(true))_error |= AP_ENABLED_DISABLE_ERR;
|
||||
|
||||
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)
|
||||
{
|
||||
@ -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()))
|
||||
{
|
||||
_error &= AP_SETUP_ERR;
|
||||
_error |= AP_SETUP_ERR;
|
||||
toBeReturned = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
enableAP(false);
|
||||
delete cfgDictionary;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error &= AP_SETUP_ERR;
|
||||
delete cfgDictionary;
|
||||
if(!softAP("ESP8266SwissArmyBoard", NULL, 1, false, 8))_error |= AP_SETUP_ERR;
|
||||
toBeReturned = false;
|
||||
}
|
||||
|
||||
delete cfgDictionary;
|
||||
|
||||
return toBeReturned;
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,11 @@
|
||||
#define MAX_RSSI -50
|
||||
#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
|
||||
{
|
||||
friend class SAB;
|
||||
@ -18,14 +23,15 @@ class ConnectivityManager : public ESP8266WiFiClass
|
||||
boolean enableSTAAndAP(boolean enable);
|
||||
boolean isSTAEnabled();
|
||||
boolean isAPEnabled();
|
||||
boolean connectToSTA();
|
||||
boolean startAP();
|
||||
|
||||
unsigned char RSSIPercent();
|
||||
unsigned char getError() const;
|
||||
protected:
|
||||
ConnectivityManager();
|
||||
ConnectivityManager(SDCardManager &sdCardManager);
|
||||
|
||||
boolean connectToSTA();
|
||||
boolean startAP();
|
||||
private:
|
||||
unsigned char _error;
|
||||
SDCardManager *_sdCardManager;
|
||||
|
@ -16,7 +16,7 @@ _error(0)
|
||||
{
|
||||
//We set the gpio up
|
||||
initGPIO();
|
||||
Serial.begin(500000, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||
Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||
Serial.println();
|
||||
delay(200);
|
||||
|
||||
@ -28,6 +28,8 @@ _error(0)
|
||||
_screenManager.init();
|
||||
_connectivityManager = new ConnectivityManager(_sdCardManager);
|
||||
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),
|
||||
@ -47,7 +49,7 @@ _error(0)
|
||||
{
|
||||
//We set the gpio up
|
||||
initGPIO();
|
||||
Serial.begin(500000, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||
Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||
Serial.println();
|
||||
delay(200);
|
||||
//We initialize the pins for the I2C communication
|
||||
@ -58,6 +60,8 @@ _error(0)
|
||||
_screenManager.init();
|
||||
_connectivityManager = new ConnectivityManager(_sdCardManager);
|
||||
if(!_pcf.begin()){_error |= IO_INIT_ERR;}
|
||||
|
||||
_powerUpTime = _rtcManager.getDateTime();
|
||||
}
|
||||
|
||||
void SAB::initGPIO()
|
||||
@ -115,6 +119,11 @@ PowerManager& SAB::getPowerManager()
|
||||
return _powerManager;
|
||||
}
|
||||
|
||||
TimeSpan SAB::getUpTime()
|
||||
{
|
||||
return _rtcManager.getDateTime() - _powerUpTime;
|
||||
}
|
||||
|
||||
BoardConfig SAB::getBoardConfig() const
|
||||
{
|
||||
return _boardConfig;
|
||||
|
@ -39,7 +39,9 @@ class SAB
|
||||
IOManager& getIoManager();
|
||||
TaskSchedulerManager& getTaskSchedulerManager();
|
||||
PowerManager& getPowerManager();
|
||||
TimeSpan getUpTime();
|
||||
BoardConfig getBoardConfig() const;
|
||||
|
||||
const char *getSoftVersion() const;
|
||||
unsigned char getError() const;
|
||||
private:
|
||||
@ -60,6 +62,7 @@ class SAB
|
||||
TaskSchedulerManager _taskSchedulerManager;
|
||||
PowerManager _powerManager;
|
||||
|
||||
DateTime _powerUpTime;
|
||||
uint8_t _error;
|
||||
};
|
||||
|
||||
|
@ -77,6 +77,6 @@ void TCPClient::freeDataBuffer(uint16_t size)
|
||||
#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;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
//#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
|
||||
Serial.println("WEBClient : Standard constructor called");
|
||||
|
@ -17,6 +17,7 @@ class WEBClient : public TCPClient
|
||||
WEBServer<WEBClient>::HttpRequestData _httpRequestData;
|
||||
WEBServer<WEBClient>::HttpParserStatus _httpParserState;
|
||||
uint64_t _fileSentBytes;
|
||||
uint64_t _range; //Used to store the value of the range param for file downloading
|
||||
void clearHttpRequestData();
|
||||
};
|
||||
|
||||
|
@ -19,10 +19,6 @@ typedef enum { GPIO_0 = 0,
|
||||
ADC = A0,
|
||||
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_CURRENT_VIEW NULL
|
||||
|
@ -25,7 +25,7 @@ boolean task_blink(void *pData)
|
||||
boolean task_batt_sensing(void *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();
|
||||
|
||||
return true;
|
||||
|
@ -8,25 +8,25 @@ boolean homeInfo(Adafruit_SSD1306 &display, void *pData)
|
||||
switch(p->powerInfo.powerType)
|
||||
{
|
||||
case PowerManager::USB:
|
||||
sprintf(power_str,"USB");
|
||||
sprintf_P(power_str,PSTR("USB"));
|
||||
break;
|
||||
default:
|
||||
sprintf(power_str,"BATT(%u%%)", p->powerInfo.level);
|
||||
sprintf_P(power_str,PSTR("BATT(%u%%)"), p->powerInfo.level);
|
||||
}
|
||||
|
||||
if(p->sdCardSize != 0.0)
|
||||
sprintf(sdCard,"%.2fGB",p->sdCardSize);
|
||||
sprintf_P(sdCard,PSTR("%.2fGB"),p->sdCardSize);
|
||||
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[1],p->dateTime.minute(),'0')
|
||||
, dateTimeFormater(zero_prepended[2],p->dateTime.second(),'0')
|
||||
, dateTimeFormater(zero_prepended[3],p->dateTime.day(),'0')
|
||||
, dateTimeFormater(zero_prepended[4],p->dateTime.month(),'0')
|
||||
, 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.setCursor(0,56);
|
||||
display.println(pageTitle);
|
||||
@ -38,13 +38,13 @@ boolean rtcInfo(Adafruit_SSD1306 &display, void *pData)
|
||||
{
|
||||
char buffer[300] = "";
|
||||
SAB *p = (SAB *) pData;
|
||||
|
||||
sprintf_P(buffer, F("Rtc temp : %.2f C"), p->getRtcManager().getTemperature());
|
||||
TimeSpan ts(p->getUpTime());
|
||||
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.setCursor(0,56);
|
||||
display.println(F("RTC INFO"));
|
||||
display.print(FPSTR("RTC INFO"));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -55,14 +55,14 @@ boolean apInfo(Adafruit_SSD1306 &display, void *pData)
|
||||
ViewAPPacket *p = (ViewAPPacket *) pData;
|
||||
|
||||
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
|
||||
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.setCursor(0,56);
|
||||
display.println(F("AP INFO"));
|
||||
display.print(FPSTR("AP INFO"));
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -74,14 +74,14 @@ boolean staInfo(Adafruit_SSD1306 &display, void *pData)
|
||||
ViewSTAPacket *p = (ViewSTAPacket *) pData;
|
||||
|
||||
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
|
||||
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.setCursor(0,56);
|
||||
display.println(F("STA INFO"));
|
||||
display.println(FPSTR("STA INFO"));
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -93,11 +93,11 @@ boolean memInfo(Adafruit_SSD1306 &display, void *pData)
|
||||
uint16_t biggestContigMemBlock;
|
||||
uint8_t 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.setCursor(0,56);
|
||||
display.println(F("SYS INFO"));
|
||||
display.println(FPSTR("SYS INFO"));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ boolean ioInfo(Adafruit_SSD1306 &display, void *pData)
|
||||
char buff[30] = "";
|
||||
|
||||
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",
|
||||
p->ioMode[0] ? '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
|
||||
|
||||
display.setCursor(0,56);
|
||||
display.println(F("I/O INFO"));
|
||||
display.println(FPSTR("I/O INFO"));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -145,13 +145,13 @@ boolean sysErrorInfo(Adafruit_SSD1306 &display, void *pData)
|
||||
|
||||
char error_str[300];
|
||||
|
||||
display.print("Rst reason : ");display.println(ESP.getResetReason());
|
||||
display.print("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("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("Rst reason : ")); display.println(ESP.getResetReason());
|
||||
display.print(FPSTR("RTC : "));display.println((p->getError() & SAB::RTC_BEGIN_ERR) != 0 ? "ERROR":"OK");
|
||||
display.print(FPSTR("DISPLAY : "));display.println((p->getError() & SAB::DISP_BEGIN_ERR) != 0 ? "ERROR":"OK");
|
||||
display.print(FPSTR("SDCard : "));display.println((p->getError() & SAB::SDCARD_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.print(F("SYS ERROR CODE : "));display.println(p->getError());
|
||||
display.print(FPSTR("SYS ERROR CODE : "));display.println(p->getError());
|
||||
return true;
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
#ifndef WEBAPI_H
|
||||
#define WEBAPI_H
|
||||
//#include "WebServerManager.h"
|
||||
#include "SAB.h"
|
||||
#include "views.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user