/* * eth_udp.hpp * * Created on: 15 апр. 2023 г. * Author: sychev */ #ifndef FREE_RTOS_ETHERNET_IP_ETH_UDP_SERVER_HPP_ #define FREE_RTOS_ETHERNET_IP_ETH_UDP_SERVER_HPP_ #include #include #include "free_rtos/handler_store/handler_store.hpp" #include "free_rtos/ethernet_ip/eth_udp_server_iface.hpp" #include "free_rtos/ethernet_ip/eth_arp_iface.hpp" #include "free_rtos/ethernet_ip/eth_ip_iface.hpp" #include "free_rtos/ethernet/eth_types.h" namespace free_rtos { class EthUdpServer : public Handler, public EthUdpServerIface { public: EthUdpServer(EthIpIface& ip_iface, EthArpIface& arp); void setPortId(TEthMacPorts port_id) { port_id_ = port_id;}; virtual std::shared_ptr createClient(uint16_t port_dst, uint16_t port_src, bool use_chksum) override; virtual int32_t Process(uint8_t * p_data, uint32_t len) override; virtual uint16_t Sender(HandlerArgs& handlerArgs, size_t scatter_segment) override; virtual int32_t select(uint32_t ticks = SystemP_WAIT_FOREVER) override { int32_t sts; do { sts = rx_sem_.pend(ticks); } while(sts != SystemP_SUCCESS); return sts; } private: EthIpIface& ip_iface_; EthArpIface& arp_; TEthMacPorts port_id_; std::map> connections_; /// ���� - ���� ���������� Semaphore rx_sem_; ///HandlerStore handlers_; /// ����������� udp-������ }; } #endif /* FREE_RTOS_ETHERNET_IP_ETH_UDP_SERVER_HPP_ */