blob: 9613049efe715325c5dab7656761b3cdb631df03 (
plain) (
tree)
|
|
int x2i(char *s)
{
int x = 0;
for(;;) {
char c = *s;
if (c >= '0' && c <= '9') {
x *= 16;
x += c - '0';
}
else if (c >= 'A' && c <= 'F') {
x *= 16;
x += (c - 'A') + 10;
}
else if (c >= 'a' && c <= 'f') {
x *= 16;
x += (c - 'a') + 10;
}
else break;
s++;
}
return x;
}
void explode(String s, String delimiter, String arr[], int ARR_LEN) {
// by timemage on #arduino/freenode
unsigned part_begin = 0;
for (size_t i = 0; i < ARR_LEN; ++i) {
const auto delim_index = s.indexOf(delimiter, part_begin);
const auto part_end = (delim_index >= 0) ? delim_index : s.length();
arr[i] = s.substring(part_begin, part_end);
if (delim_index >= 0) {
part_begin = delim_index + delimiter.length();
}
}
}
int pin2gpio(String in) {
in.toUpperCase();
if (in == "A0") return int(A0);
if (in == "D0") return int(D0);
if (in == "D1") return int(D1);
if (in == "D2") return int(D2);
if (in == "D3") return int(D3);
if (in == "D4") return int(D4);
if (in == "D5") return int(D5);
if (in == "D6") return int(D6);
if (in == "D7") return int(D7);
if (in == "D8") return int(D8);
return in.toInt();// fallback to gpio
}
String getContentType(String filename) { // convert the file extension to the MIME type
if (filename.endsWith(".html")) return "text/html";
else if (filename.endsWith(".css")) return "text/css";
else if (filename.endsWith(".js")) return "application/javascript";
else if (filename.endsWith(".ico")) return "image/x-icon";
else if (filename.endsWith(".jpg")) return "image/jpeg";
else if (filename.endsWith(".jpeg")) return "image/jpeg";
else if (filename.endsWith(".txt")) return "text/plain";
else if (filename.endsWith(".pdf")) return "application/pdf";
else if (filename.endsWith(".png")) return "image/png";
else if (filename.endsWith(".zip")) return "application/zip";
else if (filename.endsWith(".ttf")) return "font/ttf";
else if (filename.endsWith(".gif")) return "image/gif";
else if (filename.endsWith(".mp3")) return "application/ogg";
else if (filename.endsWith(".ogg")) return "application/ogg";
else if (filename.endsWith(".mp4")) return "application/ogg";
else if (filename.endsWith(".gz")) return "application/x-gzip";
else if (filename.endsWith(".xml")) return "text/xml";
else if (filename.endsWith(".svg")) return "text/svg+xml";
return "application/octet-stream";
}
bool writefile(String filepath, String contents) {
File file = SPIFFS.open(filepath, "w");
if (!file) {
return false;
}
int bytesWritten = file.print(String(contents));
if (bytesWritten == 0) {
return false;
}
file.close();
return true;
}
String readfile(String filepath) {
File file = SPIFFS.open(filepath, "r");
if (!file) {
return "";
}
String filecontents;
while (file.available()) {
filecontents += char(file.read());
}
file.close();
return filecontents;
}
String fihr(int code, String text) { // format inline html response
return "<body style=background:#000;color:#FFF;font-family:monospace><h1>"+String(code)+": "+text+" <a href=/>na koren spletišča (/)<a/>"
+"<button onclick=window.history.back();>nazaj</button></h1><hr><h2><i>"+program_ime+"/"+String(verzija[0])+"."+String(verzija[1])+"."+String(verzija[2])
+"</i></h2></body>";
}
const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets
time_t getNtpTime()
{
IPAddress ntpServerIP; // NTP server's ip address
while (Udp.parsePacket() > 0) ; // discard any previously received packets
Serial.println("Transmit NTP Request");
// get a random server from the pool
WiFi.hostByName(ntpServerName, ntpServerIP);
Serial.print(ntpServerName);
Serial.print(": ");
Serial.println(ntpServerIP);
sendNTPpacket(ntpServerIP);
uint32_t beginWait = millis();
while (millis() - beginWait < 1500) {
int size = Udp.parsePacket();
if (size >= NTP_PACKET_SIZE) {
Serial.println("Receive NTP Response");
Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer
unsigned long secsSince1900;
// convert four bytes starting at location 40 to a long integer
secsSince1900 = (unsigned long)packetBuffer[40] << 24;
secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
secsSince1900 |= (unsigned long)packetBuffer[43];
return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
}
}
Serial.println("No NTP Response :-(");
return 0; // return 0 if unable to get the time
}
// send an NTP request to the time server at the given address
void sendNTPpacket(IPAddress &address)
{
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(address, 123); //NTP requests are to port 123
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}
|