From fe71239fc0d1e65e06ba9dcf2fb35239bff21466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C5=ABnas=20Ma=C5=BEeikis?= Date: Tue, 21 May 2019 20:01:08 +0300 Subject: Protocol: moved udp code out of main. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- include/protocol.h | 4 ++-- include/udp.h | 16 ++++++++++++++++ src/device/main.ino | 29 +---------------------------- src/device/protocol_device.c | 14 ++++++++++++-- src/device/protocol_device_private.h | 3 +-- src/device/udp.ino | 25 +++++++++++++++++++++++++ 6 files changed, 57 insertions(+), 34 deletions(-) create mode 100755 include/udp.h create mode 100755 src/device/udp.ino 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 +#include + +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 #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 +#include + +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(); +} -- cgit v1.2.3