summaryrefslogtreecommitdiffstats
path: root/src/device
diff options
context:
space:
mode:
authorGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-28 21:05:30 +0300
committerGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-28 21:05:30 +0300
commit078a767c5a878fc5fb7b851a5a4b68590a78bca9 (patch)
treef5371aa336af6a3b5becdc8a06f10e5242e9382d /src/device
parent77c5d53360058b85ab1df84961b23f40a78fe3a8 (diff)
downloadusurpation-078a767c5a878fc5fb7b851a5a4b68590a78bca9.tar.gz
usurpation-078a767c5a878fc5fb7b851a5a4b68590a78bca9.tar.bz2
usurpation-078a767c5a878fc5fb7b851a5a4b68590a78bca9.zip
Device: accidentally broke code by renaming function.
Signed-off-by: Ramūnas Mažeikis <ramunasnezinomas@gmail.com>
Diffstat (limited to 'src/device')
-rw-r--r--src/device/main.ino69
1 files changed, 55 insertions, 14 deletions
diff --git a/src/device/main.ino b/src/device/main.ino
index 66e52e8..d83f3e1 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 "protocol.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)