From 148fc61db815a3caa10da69159989291f8a5b347 Mon Sep 17 00:00:00 2001 From: gabryelreyes Date: Tue, 20 Aug 2024 16:31:43 +0200 Subject: [PATCH] Test udp client for linux --- lib/ArduinoNative/src/WiFiUdp.cpp | 54 +++++++++++++++++++++++++++---- lib/ArduinoNative/src/WiFiUdp.h | 11 ++++++- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/lib/ArduinoNative/src/WiFiUdp.cpp b/lib/ArduinoNative/src/WiFiUdp.cpp index 0d78fa9c..32e839c4 100644 --- a/lib/ArduinoNative/src/WiFiUdp.cpp +++ b/lib/ArduinoNative/src/WiFiUdp.cpp @@ -35,6 +35,15 @@ #include "WiFiUdp.h" #include +#include + +#include +#include +#include +#include +#include +#include +#include /****************************************************************************** * Compiler Switches @@ -62,30 +71,61 @@ uint8_t WiFiUDP::begin(uint16_t port) { - UTIL_NOT_USED(port); + m_socket = socket(AF_INET, SOCK_DGRAM, 0); + + if (m_socket == -1) + { + LOG_ERROR("socket creation failed"); + } + else + { + m_servaddr.sin_family = AF_INET; + return 1; + } + return 0; } void WiFiUDP::stop() { + close(m_socket); } int WiFiUDP::beginPacket(IPAddress ip, uint16_t port) // NOLINT(performance-unnecessary-value-param) { - UTIL_NOT_USED(ip); - UTIL_NOT_USED(port); - return 0; + LOG_DEBUG("%s %d", ip.toString().c_str(), port); + m_servaddr.sin_port = htons(port); + m_servaddr.sin_addr.s_addr = ip.raw(); + m_outBufferLength = 0; + + const char* hello = "Hello from client"; + + sendto(m_socket, (const char*)hello, strlen(hello), 0, (const struct sockaddr*)&m_servaddr, sizeof(m_servaddr)); + return 1; } size_t WiFiUDP::write(const uint8_t* buffer, size_t length) { - UTIL_NOT_USED(buffer); - UTIL_NOT_USED(length); - return 0U; + memcpy(m_outBuffer, buffer, length); + m_outBufferLength += length; + return m_outBufferLength; } int WiFiUDP::endPacket() { + + int len = sendto(m_socket, reinterpret_cast(m_outBuffer), m_outBufferLength, 0, + (const struct sockaddr*)&m_servaddr, sizeof(m_servaddr)); + + if (len == -1) + { + LOG_ERROR("sendto failed"); + } + else + { + LOG_INFO("Hello message sent."); + return 1; + } return 0; } diff --git a/lib/ArduinoNative/src/WiFiUdp.h b/lib/ArduinoNative/src/WiFiUdp.h index 87084f31..5dda6949 100644 --- a/lib/ArduinoNative/src/WiFiUdp.h +++ b/lib/ArduinoNative/src/WiFiUdp.h @@ -45,11 +45,14 @@ #include #include "IPAddress.h" +#include /****************************************************************************** * Macros *****************************************************************************/ +#define MAXLINE 1024 + /****************************************************************************** * Types and Classes *****************************************************************************/ @@ -63,7 +66,7 @@ class WiFiUDP : public Stream /** * Default constructor. */ - WiFiUDP() + WiFiUDP() : Stream(), m_socket(-1), m_servaddr(), m_outBuffer{0}, m_outBufferLength(0) { } @@ -146,6 +149,12 @@ class WiFiUDP : public Stream */ int read(uint8_t* buffer, size_t size); +private: + int m_socket; /**< Socket file descriptor. */ + struct sockaddr_in m_servaddr; /**< Server address. */ + uint8_t m_outBuffer[MAXLINE]; /**< Buffer for outgoing packets. */ + size_t m_outBufferLength; /**< Length of the buffer. */ + private: /** * Print argument to the Output Stream.