51 lines
		
	
	
		
			996 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			996 B
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #pragma once
 | ||
|  | 
 | ||
|  | #ifdef _WIN32
 | ||
|  |   #include <windows.h>
 | ||
|  |   #define socklen_t int
 | ||
|  |    typedef unsigned int uint32_t; | ||
|  | #else
 | ||
|  |   #include <arpa/inet.h>
 | ||
|  |   #include <unistd.h>
 | ||
|  |   #	define closesocket close
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #include <vector>
 | ||
|  | #include <cstring>
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief UDP Handler | ||
|  |  */ | ||
|  | class UDPHandler | ||
|  | { | ||
|  | public: | ||
|  |   UDPHandler(unsigned short port = 9000); | ||
|  |   virtual ~UDPHandler(); | ||
|  | 
 | ||
|  |   int CreateSocket(); | ||
|  |   void Close(); | ||
|  |   bool Bind(); | ||
|  | 
 | ||
|  |   int Send(const char *buf, int size, char *ip, unsigned short port); | ||
|  |   int Recv(char *buf, int bufsize, sockaddr_in *from); | ||
|  | 
 | ||
|  |   int SetRecvTimeout(int sec); | ||
|  |   int SetSendTimeout(int sec); | ||
|  | 
 | ||
|  | private: | ||
|  |   int usock = 0; | ||
|  |   unsigned short uport = 0; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief Transform a Data Struct to UDP buffer | ||
|  |  * | ||
|  |  * @tparam DataStruct an IMUUnitree or ScanUnitree | ||
|  |  * @param data | ||
|  |  * @param buffer | ||
|  |  * @param msgType  | ||
|  |  * @return uint32_t the total bytes sent through udp | ||
|  |  */ | ||
|  | template <typename DataStruct> | ||
|  | uint32_t dataStructToUDPBuffer(const DataStruct &data, uint32_t msgType, char *buffer); |