diff options
author | 2019-06-01 15:27:19 +0300 | |
---|---|---|
committer | 2019-06-01 15:27:19 +0300 | |
commit | fb220a85890b1de874061cc6b1b2102ba33ad43f (patch) | |
tree | 6ec02e665d35d114c2212a5243dd1cb0f6afff37 /src/device/main.ino | |
parent | 96d7d31534921889c219a5c9e00a46c3e94d0124 (diff) | |
parent | 227a0e12ee262dbabdd8d988fec194273cf90029 (diff) | |
download | usurpation-fb220a85890b1de874061cc6b1b2102ba33ad43f.tar.gz usurpation-fb220a85890b1de874061cc6b1b2102ba33ad43f.tar.bz2 usurpation-fb220a85890b1de874061cc6b1b2102ba33ad43f.zip |
Merge branch '35-Message-Output'
Signed-off-by: Gediminas Jakutis <gediminas@varciai.lt>
Diffstat (limited to 'src/device/main.ino')
-rw-r--r-- | src/device/main.ino | 69 |
1 files changed, 55 insertions, 14 deletions
diff --git a/src/device/main.ino b/src/device/main.ino index 66e52e8..24cfb9c 100644 --- a/src/device/main.ino +++ b/src/device/main.ino @@ -27,6 +27,9 @@ #include "SSD1306Wire.h" #include "DejaVu_Sans_Mono_13.h" #include "device_network.h" +#include "screen.h" +#include "net.h" +#include "tlv.h" static const unsigned int internal_led = 2; static unsigned int led_state = 0; @@ -36,6 +39,16 @@ static void init_OLED(void); 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 blink_led(const int pin, const int ontime, const int offtime); +void handle_tlv(const struct tlv *data); + +static struct progstate_t { + int ip_print_count = 5; + struct display_status ds = {0}; + struct tlv_parser parser = {0}; + struct tlv crr_data; + size_t bytes_read = 0; + char in_packet_buf[MTU]; +} progstate; void setup(void) { @@ -64,27 +77,55 @@ void loop(void) 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(com_port); - udp_push(clientmagic, sizeof(clientmagic)); - udp_flush(); + /* Initial display of ip's. */ + if (progstate.ip_print_count > 0) { + udp_init_packet(com_port); + udp_push(clientmagic, sizeof(clientmagic)); + udp_flush(); + + if (!daemon_ip) { + daemon_ip = get_daemon_address(); + } - if (!daemon_ip) { - daemon_ip = get_daemon_address(); + prefix = (progstate.ip_print_count % 2) ? devstr : daemonstr; + ip_to_print = (progstate.ip_print_count) ? WiFi.localIP() : *daemon_ip; + display.clear(); + display.drawString(0, 0, prefix); + display.drawString(0, 16, ip_to_print.toString()); + display.display(); + progstate.ip_print_count--; + } else { /* Dealing with tlv's one at a time. */ + progstate.bytes_read = udp_get_data(progstate.in_packet_buf, sizeof(progstate.in_packet_buf)); + if (progstate.bytes_read > 0) { + progstate.parser.data = progstate.in_packet_buf; + progstate.parser.offset = 0; + progstate.parser.size = progstate.bytes_read; + /* Ignore errors for now. */ + while (tlv_get(&progstate.parser, &progstate.crr_data) == 0) { + handle_tlv(&progstate.crr_data); + } + } + display_update_scroll(&progstate.ds); } +} - prefix = (print_dev_ip) ? devstr : daemonstr; - 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()); - display.display(); - print_dev_ip = !print_dev_ip; +void handle_tlv(const struct tlv *t) +{ + /* Currently just dealing with text. + * */ + switch (t->type) { + case TEXT: + display_status_init(&display, &progstate.ds, (char *)t->data); + break; + default: + display.clear(); + display.drawString(0, 0, "Fugg :DDD"); + break; + } } static void init_OLED(void) |