summaryrefslogtreecommitdiffstats
path: root/src/device/main.ino
diff options
context:
space:
mode:
Diffstat (limited to 'src/device/main.ino')
-rw-r--r--src/device/main.ino75
1 files changed, 10 insertions, 65 deletions
diff --git a/src/device/main.ino b/src/device/main.ino
index 1a34859..66e52e8 100644
--- a/src/device/main.ino
+++ b/src/device/main.ino
@@ -26,25 +26,15 @@
#include <stddef.h>
#include "SSD1306Wire.h"
#include "DejaVu_Sans_Mono_13.h"
+#include "device_network.h"
-static char udppacketbuffer[32] = {0};
-static char *udppacketcursor = NULL;
static const unsigned int internal_led = 2;
static unsigned int led_state = 0;
-static const char servermagic[] = "I love coffee!";
-static const char clientmagic[] = "I love tea!";
-static const int com_port = 6996;
-IPAddress ip; /* Daemon IP */
-WiFiUDP Udp;
SSD1306Wire display(0x3c, 4, 5, GEOMETRY_128_32);
static void init_OLED(void);
-unsigned int toggle_led(const int ip);
+unsigned int toggle_led(const int pin);
static int wifi_connect(const char * const ssid, const char * const password, const char doblink, const int ledpin);
-static void discover_client(const int port);
-static void udp_init_packet(IPAddress ip, const int port);
-static void udp_push(const void * const data, const size_t size);
-static int udp_flush(void);
static void blink_led(const int pin, const int ontime, const int offtime);
void setup(void)
@@ -58,7 +48,7 @@ void setup(void)
display.fillCircle(32, 16, 12);
display.display();
wifi_connect(ssid, password, 1, internal_led);
- Udp.begin(com_port);
+ udp_init(com_port);
display.fillCircle(64, 16, 12);
display.display();
discover_client(com_port);
@@ -73,25 +63,23 @@ void loop(void)
static const String daemonstr = "Daemon IP:";
static String prefix;
static IPAddress ip_to_print;
+ static IPAddress *daemon_ip = NULL;
static int print_dev_ip = 0;
static unsigned int delta = 2000; /* sleep length to use (ms) */
/* static int dot_idx = 0; */
delay(delta);
- udp_init_packet(ip, com_port);
+ udp_init_packet(com_port);
udp_push(clientmagic, sizeof(clientmagic));
udp_flush();
-#if 0
- if (dot_idx >= 2) {
- display.clear();
- dot_idx = 0;
+
+ if (!daemon_ip) {
+ daemon_ip = get_daemon_address();
}
- display.fillCircle(32 * (dot_idx + 1), 16, 12);
- dot_idx++;
-#endif
+
prefix = (print_dev_ip) ? devstr : daemonstr;
- ip_to_print = (print_dev_ip) ? WiFi.localIP() : ip;
+ ip_to_print = (print_dev_ip) ? WiFi.localIP() : *daemon_ip;
display.clear();
display.drawString(0, 0, prefix);
display.drawString(0, 16, ip_to_print.toString());
@@ -142,49 +130,6 @@ static int wifi_connect(const char * const ssid, const char * const password, co
return 0;
}
-static void discover_client(const int port)
-{
- IPAddress bcastip(255, 255, 255, 255);
- char buffer[32] = {0};
- size_t done = 0;
-
- do {
- udp_init_packet(bcastip, port);
- udp_push(servermagic, sizeof(servermagic));
- udp_flush();
- delay(5);
- while (Udp.parsePacket()) {
- if (Udp.available() >= sizeof(clientmagic)) {
- Udp.read(buffer, sizeof(clientmagic));
- if (!(strcmp(clientmagic, buffer))) {
- ip = Udp.remoteIP();
- ++done;
- }
- }
- }
- delay(95);
- } while (!done);
-}
-
-static void udp_init_packet(IPAddress ip, const int port)
-{
- Udp.beginPacket(ip, port);
- memset(udppacketbuffer, 0, sizeof(udppacketbuffer));
- udppacketcursor = udppacketbuffer;
-}
-
-static void udp_push(const void * const data, const size_t size)
-{
- memcpy(udppacketcursor, data, size);
- udppacketcursor += size;
-}
-
-static int udp_flush(void)
-{
- Udp.write((const uint8_t *) udppacketbuffer, udppacketcursor - udppacketbuffer);
- return Udp.endPacket();
-}
-
static void blink_led(const int pin, const int ontime, const int offtime)
{
toggle_led(pin);