summaryrefslogtreecommitdiffstats
path: root/f010_raznefunkcije.ino
diff options
context:
space:
mode:
Diffstat (limited to 'f010_raznefunkcije.ino')
-rw-r--r--f010_raznefunkcije.ino164
1 files changed, 164 insertions, 0 deletions
diff --git a/f010_raznefunkcije.ino b/f010_raznefunkcije.ino
new file mode 100644
index 0000000..9613049
--- /dev/null
+++ b/f010_raznefunkcije.ino
@@ -0,0 +1,164 @@
+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&scaron;&ccaron;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();
+}