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 --- src/device/main.ino | 29 +---------------------------- src/device/protocol_device.c | 14 ++++++++++++-- src/device/protocol_device_private.h | 3 +-- src/device/udp.ino | 25 +++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 32 deletions(-) create mode 100755 src/device/udp.ino (limited to 'src/device') 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