2023-05-03 14:01:32 +03:00
/*
* eth_udp_client . hpp
*
* Created on : 15 <EFBFBD> <EFBFBD> <EFBFBD> . 2023 <EFBFBD> .
* Author : sychev
*/
# ifndef FREE_RTOS_ETHERNET_IP_ETH_UDP_CLIENT_HPP_
# define FREE_RTOS_ETHERNET_IP_ETH_UDP_CLIENT_HPP_
2023-06-26 18:58:31 +03:00
# include "semaphore/semaphore.hpp"
# include "mutex/mutex.hpp"
# include "ethernet/eth_frame.h"
# include "ethernet_ip/eth_ip_iface.hpp"
# include "ethernet/eth_types.h"
2023-05-03 14:01:32 +03:00
# include <vector>
# include <cstdint>
namespace free_rtos {
class EthUpdClient {
friend class EthUdpServer ;
public :
EthUpdClient ( EthIpIface & ip_iface , TEthMacPorts port_id ,
uint16_t port_dst_be , uint16_t port_src_be ,
bool use_chksum ) ;
int32_t read ( uint8_t * p_data , uint32_t len ) ;
int32_t write ( uint32_t ip_dst_be , uint8_t * p_data , uint32_t len ) ;
void clear ( ) ; ///<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
private :
void put_data ( uint32_t src_ip , uint8_t * p_data , uint32_t len ) ;
private :
const uint32_t max_buf_size = 0x100000 ; // 1Mb
Semaphore rx_sem_ ;
Mutex rx_mut_ ;
const uint16_t port_dst_be_ ; /// big endian
const uint16_t port_src_be_ ; /// big endian
const bool use_checksum_ ;
std : : vector < uint8_t > buff_ ;
TEthPkt eth_pkt_ ;
EthIpIface & ip_iface_ ;
const TEthMacPorts port_id_ ;
uint32_t src_ip_ ; /// Ip <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> UDP
} ;
}
# endif /* FREE_RTOS_ETHERNET_IP_ETH_UDP_CLIENT_HPP_ */