summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-21 20:01:08 +0300
committerGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-21 20:01:08 +0300
commitfe71239fc0d1e65e06ba9dcf2fb35239bff21466 (patch)
treee1e708310afc253ca006bb22558cc8cba67bdfb6
parent5ca7e24e58f6bd657787b9235247149ffff420ae (diff)
downloadusurpation-fe71239fc0d1e65e06ba9dcf2fb35239bff21466.tar.gz
usurpation-fe71239fc0d1e65e06ba9dcf2fb35239bff21466.tar.bz2
usurpation-fe71239fc0d1e65e06ba9dcf2fb35239bff21466.zip
Protocol: moved udp code out of main.
An effor was made to increase modularity of device code. It was a partial success. IP adress, communications port, and wifi login details had to be made static and visible in main. Time is scarce and I am not about to push this further. Signed-off-by: Ramūnas Mažeikis <ramunasnezinomas@gmail.com>
-rw-r--r--include/protocol.h4
-rwxr-xr-xinclude/udp.h16
-rw-r--r--src/device/main.ino29
-rwxr-xr-xsrc/device/protocol_device.c14
-rwxr-xr-xsrc/device/protocol_device_private.h3
-rwxr-xr-xsrc/device/udp.ino25
6 files changed, 57 insertions, 34 deletions
diff --git a/include/protocol.h b/include/protocol.h
index c5e657b..8d5c535 100644
--- a/include/protocol.h
+++ b/include/protocol.h
@@ -116,7 +116,7 @@ struct tlv * get_tlv(cd_t cd);
/**
* Any modifications made to the pending outgoing packet are nullified.
* */
-void clear_data(cd_t connection);
+int clear_data(cd_t connection);
/**
* Appends data to the next packet to be sent. Type of data is determined by
@@ -127,7 +127,7 @@ int push_data(cd_t connection, const char *data, enum tlv_type);
/**
* Sends packet towards the other end.
* */
-void flush_data(cd_t connection);
+int flush_data(cd_t connection);
cd_t protocol_init(void);
diff --git a/include/udp.h b/include/udp.h
new file mode 100755
index 0000000..358e585
--- /dev/null
+++ b/include/udp.h
@@ -0,0 +1,16 @@
+#ifndef DEVICE_UDP_H
+#define DEVICE_UDP_H
+
+#include <ESP8266WiFi.h>
+#include <WiFiUdp.h>
+
+static const int com_port = 6996;
+IPAddress ip; /* Daemon IP */
+WiFiUDP Udp;
+
+extern void discover_client(const int port);
+extern void udp_init_packet(IPAddress ip, const int port);
+extern void udp_push(const void * const data, const size_t size);
+extern int udp_flush(void);
+
+#endif /* DEVICE_UDP_H */ \ No newline at end of file
diff --git a/src/device/main.ino b/src/device/main.ino
index 1a34859..d4e092d 100644
--- a/src/device/main.ino
+++ b/src/device/main.ino
@@ -26,25 +26,17 @@
#include <stddef.h>
#include "SSD1306Wire.h"
#include "DejaVu_Sans_Mono_13.h"
+#include "udp.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);
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)
@@ -166,25 +158,6 @@ static void discover_client(const int port)
} 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);
diff --git a/src/device/protocol_device.c b/src/device/protocol_device.c
index 3e38e19..5910546 100755
--- a/src/device/protocol_device.c
+++ b/src/device/protocol_device.c
@@ -18,9 +18,15 @@ cd_t protocol_init(void)
return 0;
}
-void clear_data(void)
+int clear_data(cd_t cd)
{
- connection.inp_crs = 0;
+ int ret = 0;
+ if (cd >= MAX_CONNECTIONS) {
+ ret = E_IVALID_DESCRIPTOR;
+ } else {
+ connection.inp_crs = 0;
+ }
+ return ret;
}
static int push_bytes(cd_t cd, char *data, size_t size)
@@ -81,6 +87,10 @@ struct tlv * get_tlv(cd_t cd)
return ret;
}
+int flush_data(cd_t cd)
+{
+ return 0;
+}
int get_last_data(cd_t cd)
{
diff --git a/src/device/protocol_device_private.h b/src/device/protocol_device_private.h
index 29ff567..6754ecf 100755
--- a/src/device/protocol_device_private.h
+++ b/src/device/protocol_device_private.h
@@ -9,8 +9,7 @@
* bigger packets but memory is hard to come by and more won't be needed
* anyway.
* */
-#define MAX_PACKET_SIZE_IN (512)
-
+#define MAX_PACKET_SIZE_IN 512
/**
* Device only gets one connection. Because daemon.
*/
diff --git a/src/device/udp.ino b/src/device/udp.ino
new file mode 100755
index 0000000..3074b65
--- /dev/null
+++ b/src/device/udp.ino
@@ -0,0 +1,25 @@
+#include "udp.h"
+#include <ESP8266WiFi.h>
+#include <WiFiUdp.h>
+
+static char udppacketbuffer[32] = {0};
+static char *udppacketcursor = NULL;
+
+void udp_init_packet(IPAddress ip, const int port)
+{
+ Udp.beginPacket(ip, port);
+ memset(udppacketbuffer, 0, sizeof(udppacketbuffer));
+ udppacketcursor = udppacketbuffer;
+}
+
+void udp_push(const void * const data, const size_t size)
+{
+ memcpy(udppacketcursor, data, size);
+ udppacketcursor += size;
+}
+
+int udp_flush(void)
+{
+ Udp.write((const uint8_t *) udppacketbuffer, udppacketcursor - udppacketbuffer);
+ return Udp.endPacket();
+}