|
@@ -1,210 +1,210 @@
|
|
|
-//#ifndef HELPERS_H
|
|
|
-//#define HELPERS_H
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//static const uint8_t monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31};
|
|
|
-//#define LEAP_YEAR(Y) ( ((1970+Y)>0) && !((1970+Y)%4) && ( ((1970+Y)%100) || !((1970+Y)%400) ) )
|
|
|
-//
|
|
|
-//
|
|
|
-//struct strDateTime
|
|
|
-//{
|
|
|
-// byte hour;
|
|
|
-// byte minute;
|
|
|
-// byte second;
|
|
|
-// int year;
|
|
|
-// byte month;
|
|
|
-// byte day;
|
|
|
-// byte wday;
|
|
|
-//
|
|
|
-//} ;
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-////
|
|
|
-//// Summertime calculates the daylight saving for a given date.
|
|
|
-////
|
|
|
-//boolean summertime(int year, byte month, byte day, byte hour, byte tzHours)
|
|
|
-//// input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
|
|
|
-//{
|
|
|
-// if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
|
|
|
-// if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
|
|
|
-// if (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7)))
|
|
|
-// return true;
|
|
|
-// else
|
|
|
-// return false;
|
|
|
-//}
|
|
|
-//
|
|
|
-////
|
|
|
-//// Check the Values is between 0-255
|
|
|
-////
|
|
|
-//boolean checkRange(String Value)
|
|
|
-//{
|
|
|
-// if (Value.toInt() < 0 || Value.toInt() > 255)
|
|
|
-// {
|
|
|
-// return false;
|
|
|
-// }
|
|
|
-// else
|
|
|
-// {
|
|
|
-// return true;
|
|
|
-// }
|
|
|
-//}
|
|
|
-//
|
|
|
-//
|
|
|
-//void WriteStringToEEPROM(int beginaddress, String string)
|
|
|
-//{
|
|
|
-// char charBuf[string.length()+1];
|
|
|
-// string.toCharArray(charBuf, string.length()+1);
|
|
|
-// for (int t= 0; t<sizeof(charBuf);t++)
|
|
|
-// {
|
|
|
-// EEPROM.write(beginaddress + t,charBuf[t]);
|
|
|
-// }
|
|
|
-//}
|
|
|
-//String ReadStringFromEEPROM(int beginaddress)
|
|
|
-//{
|
|
|
-// byte counter=0;
|
|
|
-// char rChar;
|
|
|
-// String retString = "";
|
|
|
-// while (1)
|
|
|
-// {
|
|
|
-// rChar = EEPROM.read(beginaddress + counter);
|
|
|
-// if (rChar == 0) break;
|
|
|
-// if (counter > 31) break;
|
|
|
-// counter++;
|
|
|
-// retString.concat(rChar);
|
|
|
-//
|
|
|
-// }
|
|
|
-// return retString;
|
|
|
-//}
|
|
|
-//void EEPROMWritelong(int address, long value)
|
|
|
-// {
|
|
|
-// byte four = (value & 0xFF);
|
|
|
-// byte three = ((value >> 8) & 0xFF);
|
|
|
-// byte two = ((value >> 16) & 0xFF);
|
|
|
-// byte one = ((value >> 24) & 0xFF);
|
|
|
-//
|
|
|
-// //Write the 4 bytes into the eeprom memory.
|
|
|
-// EEPROM.write(address, four);
|
|
|
-// EEPROM.write(address + 1, three);
|
|
|
-// EEPROM.write(address + 2, two);
|
|
|
-// EEPROM.write(address + 3, one);
|
|
|
-// }
|
|
|
-//long EEPROMReadlong(long address)
|
|
|
-// {
|
|
|
-// //Read the 4 bytes from the eeprom memory.
|
|
|
-// long four = EEPROM.read(address);
|
|
|
-// long three = EEPROM.read(address + 1);
|
|
|
-// long two = EEPROM.read(address + 2);
|
|
|
-// long one = EEPROM.read(address + 3);
|
|
|
-//
|
|
|
-// //Return the recomposed long by using bitshift.
|
|
|
-// return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
|
|
|
-//}
|
|
|
-//
|
|
|
-//void ConvertUnixTimeStamp( unsigned long TimeStamp, struct strDateTime* DateTime)
|
|
|
-//{
|
|
|
-// uint8_t year;
|
|
|
-// uint8_t month, monthLength;
|
|
|
-// uint32_t time;
|
|
|
-// unsigned long days;
|
|
|
-// time = (uint32_t)TimeStamp;
|
|
|
-// DateTime->second = time % 60;
|
|
|
-// time /= 60; // now it is minutes
|
|
|
-// DateTime->minute = time % 60;
|
|
|
-// time /= 60; // now it is hours
|
|
|
-// DateTime->hour = time % 24;
|
|
|
-// time /= 24; // now it is days
|
|
|
-// DateTime->wday = ((time + 4) % 7) + 1; // Sunday is day 1
|
|
|
-//
|
|
|
-// year = 0;
|
|
|
-// days = 0;
|
|
|
-// while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) {
|
|
|
-// year++;
|
|
|
-// }
|
|
|
-// DateTime->year = year; // year is offset from 1970
|
|
|
-//
|
|
|
-// days -= LEAP_YEAR(year) ? 366 : 365;
|
|
|
-// time -= days; // now it is days in this year, starting at 0
|
|
|
-//
|
|
|
-// days=0;
|
|
|
-// month=0;
|
|
|
-// monthLength=0;
|
|
|
-// for (month=0; month<12; month++) {
|
|
|
-// if (month==1) { // february
|
|
|
-// if (LEAP_YEAR(year)) {
|
|
|
-// monthLength=29;
|
|
|
-// } else {
|
|
|
-// monthLength=28;
|
|
|
-// }
|
|
|
-// } else {
|
|
|
-// monthLength = monthDays[month];
|
|
|
-// }
|
|
|
-//
|
|
|
-// if (time >= monthLength) {
|
|
|
-// time -= monthLength;
|
|
|
-// } else {
|
|
|
-// break;
|
|
|
-// }
|
|
|
-// }
|
|
|
-// DateTime->month = month + 1; // jan is month 1
|
|
|
-// DateTime->day = time + 1; // day of month
|
|
|
-// DateTime->year += 1970;
|
|
|
-//
|
|
|
-//
|
|
|
-//}
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//String GetMacAddress()
|
|
|
-//{
|
|
|
-// uint8_t mac[6];
|
|
|
-// char macStr[18] = {0};
|
|
|
-// WiFi.macAddress(mac);
|
|
|
-// sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
|
|
-// return String(macStr);
|
|
|
-//}
|
|
|
-//
|
|
|
-//// convert a single hex digit character to its integer value (from https://code.google.com/p/avr-netino/)
|
|
|
-//unsigned char h2int(char c)
|
|
|
-//{
|
|
|
-// if (c >= '0' && c <='9'){
|
|
|
-// return((unsigned char)c - '0');
|
|
|
-// }
|
|
|
-// if (c >= 'a' && c <='f'){
|
|
|
-// return((unsigned char)c - 'a' + 10);
|
|
|
-// }
|
|
|
-// if (c >= 'A' && c <='F'){
|
|
|
-// return((unsigned char)c - 'A' + 10);
|
|
|
-// }
|
|
|
-// return(0);
|
|
|
-//}
|
|
|
-//
|
|
|
-//String urldecode(String input) // (based on https://code.google.com/p/avr-netino/)
|
|
|
-//{
|
|
|
-// char c;
|
|
|
-// String ret = "";
|
|
|
-//
|
|
|
-// for(byte t=0;t<input.length();t++)
|
|
|
-// {
|
|
|
-// c = input[t];
|
|
|
-// if (c == '+') c = ' ';
|
|
|
-// if (c == '%') {
|
|
|
-//
|
|
|
-//
|
|
|
-// t++;
|
|
|
-// c = input[t];
|
|
|
-// t++;
|
|
|
-// c = (h2int(c) << 4) | h2int(input[t]);
|
|
|
-// }
|
|
|
-//
|
|
|
-// ret.concat(c);
|
|
|
-// }
|
|
|
-// return ret;
|
|
|
-//
|
|
|
-//}
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//
|
|
|
-//#endif
|
|
|
+#ifndef HELPERS_H
|
|
|
+#define HELPERS_H
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+static const uint8_t monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31};
|
|
|
+#define LEAP_YEAR(Y) ( ((1970+Y)>0) && !((1970+Y)%4) && ( ((1970+Y)%100) || !((1970+Y)%400) ) )
|
|
|
+
|
|
|
+
|
|
|
+struct strDateTime
|
|
|
+{
|
|
|
+ byte hour;
|
|
|
+ byte minute;
|
|
|
+ byte second;
|
|
|
+ int year;
|
|
|
+ byte month;
|
|
|
+ byte day;
|
|
|
+ byte wday;
|
|
|
+
|
|
|
+} ;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//
|
|
|
+// Summertime calculates the daylight saving for a given date.
|
|
|
+//
|
|
|
+boolean summertime(int year, byte month, byte day, byte hour, byte tzHours)
|
|
|
+// input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
|
|
|
+{
|
|
|
+ if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
|
|
|
+ if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
|
|
|
+ if (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7)))
|
|
|
+ return true;
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+//
|
|
|
+// Check the Values is between 0-255
|
|
|
+//
|
|
|
+boolean checkRange(String Value)
|
|
|
+{
|
|
|
+ if (Value.toInt() < 0 || Value.toInt() > 255)
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void WriteStringToEEPROM(int beginaddress, String string)
|
|
|
+{
|
|
|
+ char charBuf[string.length()+1];
|
|
|
+ string.toCharArray(charBuf, string.length()+1);
|
|
|
+ for (int t= 0; t<sizeof(charBuf);t++)
|
|
|
+ {
|
|
|
+ EEPROM.write(beginaddress + t,charBuf[t]);
|
|
|
+ }
|
|
|
+}
|
|
|
+String ReadStringFromEEPROM(int beginaddress)
|
|
|
+{
|
|
|
+ byte counter=0;
|
|
|
+ char rChar;
|
|
|
+ String retString = "";
|
|
|
+ while (1)
|
|
|
+ {
|
|
|
+ rChar = EEPROM.read(beginaddress + counter);
|
|
|
+ if (rChar == 0) break;
|
|
|
+ if (counter > 31) break;
|
|
|
+ counter++;
|
|
|
+ retString.concat(rChar);
|
|
|
+
|
|
|
+ }
|
|
|
+ return retString;
|
|
|
+}
|
|
|
+void EEPROMWritelong(int address, long value)
|
|
|
+ {
|
|
|
+ byte four = (value & 0xFF);
|
|
|
+ byte three = ((value >> 8) & 0xFF);
|
|
|
+ byte two = ((value >> 16) & 0xFF);
|
|
|
+ byte one = ((value >> 24) & 0xFF);
|
|
|
+
|
|
|
+ //Write the 4 bytes into the eeprom memory.
|
|
|
+ EEPROM.write(address, four);
|
|
|
+ EEPROM.write(address + 1, three);
|
|
|
+ EEPROM.write(address + 2, two);
|
|
|
+ EEPROM.write(address + 3, one);
|
|
|
+ }
|
|
|
+long EEPROMReadlong(long address)
|
|
|
+ {
|
|
|
+ //Read the 4 bytes from the eeprom memory.
|
|
|
+ long four = EEPROM.read(address);
|
|
|
+ long three = EEPROM.read(address + 1);
|
|
|
+ long two = EEPROM.read(address + 2);
|
|
|
+ long one = EEPROM.read(address + 3);
|
|
|
+
|
|
|
+ //Return the recomposed long by using bitshift.
|
|
|
+ return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
|
|
|
+}
|
|
|
+
|
|
|
+void ConvertUnixTimeStamp( unsigned long TimeStamp, struct strDateTime* DateTime)
|
|
|
+{
|
|
|
+ uint8_t year;
|
|
|
+ uint8_t month, monthLength;
|
|
|
+ uint32_t time;
|
|
|
+ unsigned long days;
|
|
|
+ time = (uint32_t)TimeStamp;
|
|
|
+ DateTime->second = time % 60;
|
|
|
+ time /= 60; // now it is minutes
|
|
|
+ DateTime->minute = time % 60;
|
|
|
+ time /= 60; // now it is hours
|
|
|
+ DateTime->hour = time % 24;
|
|
|
+ time /= 24; // now it is days
|
|
|
+ DateTime->wday = ((time + 4) % 7) + 1; // Sunday is day 1
|
|
|
+
|
|
|
+ year = 0;
|
|
|
+ days = 0;
|
|
|
+ while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) {
|
|
|
+ year++;
|
|
|
+ }
|
|
|
+ DateTime->year = year; // year is offset from 1970
|
|
|
+
|
|
|
+ days -= LEAP_YEAR(year) ? 366 : 365;
|
|
|
+ time -= days; // now it is days in this year, starting at 0
|
|
|
+
|
|
|
+ days=0;
|
|
|
+ month=0;
|
|
|
+ monthLength=0;
|
|
|
+ for (month=0; month<12; month++) {
|
|
|
+ if (month==1) { // february
|
|
|
+ if (LEAP_YEAR(year)) {
|
|
|
+ monthLength=29;
|
|
|
+ } else {
|
|
|
+ monthLength=28;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ monthLength = monthDays[month];
|
|
|
+ }
|
|
|
+
|
|
|
+ if (time >= monthLength) {
|
|
|
+ time -= monthLength;
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ DateTime->month = month + 1; // jan is month 1
|
|
|
+ DateTime->day = time + 1; // day of month
|
|
|
+ DateTime->year += 1970;
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+String GetMacAddress()
|
|
|
+{
|
|
|
+ uint8_t mac[6];
|
|
|
+ char macStr[18] = {0};
|
|
|
+ WiFi.macAddress(mac);
|
|
|
+ sprintf(macStr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
|
|
+ return String(macStr);
|
|
|
+}
|
|
|
+
|
|
|
+// convert a single hex digit character to its integer value (from https://code.google.com/p/avr-netino/)
|
|
|
+unsigned char h2int(char c)
|
|
|
+{
|
|
|
+ if (c >= '0' && c <='9'){
|
|
|
+ return((unsigned char)c - '0');
|
|
|
+ }
|
|
|
+ if (c >= 'a' && c <='f'){
|
|
|
+ return((unsigned char)c - 'a' + 10);
|
|
|
+ }
|
|
|
+ if (c >= 'A' && c <='F'){
|
|
|
+ return((unsigned char)c - 'A' + 10);
|
|
|
+ }
|
|
|
+ return(0);
|
|
|
+}
|
|
|
+
|
|
|
+String urldecode(String input) // (based on https://code.google.com/p/avr-netino/)
|
|
|
+{
|
|
|
+ char c;
|
|
|
+ String ret = "";
|
|
|
+
|
|
|
+ for(byte t=0;t<input.length();t++)
|
|
|
+ {
|
|
|
+ c = input[t];
|
|
|
+ if (c == '+') c = ' ';
|
|
|
+ if (c == '%') {
|
|
|
+
|
|
|
+
|
|
|
+ t++;
|
|
|
+ c = input[t];
|
|
|
+ t++;
|
|
|
+ c = (h2int(c) << 4) | h2int(input[t]);
|
|
|
+ }
|
|
|
+
|
|
|
+ ret.concat(c);
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+#endif
|