Initial support for Govee devices
This commit is contained in:
parent
20f6565f44
commit
95b029d49d
17 changed files with 1164 additions and 17 deletions
|
|
@ -52,7 +52,12 @@ net_port::~net_port()
|
|||
}
|
||||
}
|
||||
|
||||
bool net_port::udp_client(const char * client_name, const char * port)
|
||||
bool net_port::udp_client(const char* client_name, const char * port)
|
||||
{
|
||||
return(udp_client(client_name, port, "0"));
|
||||
}
|
||||
|
||||
bool net_port::udp_client(const char * client_name, const char * send_port, const char * recv_port)
|
||||
{
|
||||
sockaddr_in myAddress;
|
||||
|
||||
|
|
@ -73,7 +78,7 @@ bool net_port::udp_client(const char * client_name, const char * port)
|
|||
|
||||
myAddress.sin_family = AF_INET;
|
||||
myAddress.sin_addr.s_addr = inet_addr("0.0.0.0");
|
||||
myAddress.sin_port = htons(0);
|
||||
myAddress.sin_port = htons(atoi(recv_port));
|
||||
|
||||
if(bind(sock, (sockaddr*)&myAddress, sizeof(myAddress)) == SOCKET_ERROR)
|
||||
{
|
||||
|
|
@ -85,7 +90,7 @@ bool net_port::udp_client(const char * client_name, const char * port)
|
|||
addrinfo hints = {};
|
||||
hints.ai_family = AF_INET;
|
||||
hints.ai_socktype = SOCK_DGRAM;
|
||||
if(getaddrinfo(client_name, port, &hints, &result_list) == 0)
|
||||
if(getaddrinfo(client_name, send_port, &hints, &result_list) == 0)
|
||||
{
|
||||
memcpy(&addrDest, result_list->ai_addr, result_list->ai_addrlen);
|
||||
freeaddrinfo(result_list);
|
||||
|
|
@ -99,28 +104,32 @@ bool net_port::udp_client(const char * client_name, const char * port)
|
|||
}
|
||||
}
|
||||
|
||||
void net_port::udp_join_multicast_group(const char * group_name)
|
||||
{
|
||||
struct ip_mreq group;
|
||||
|
||||
group.imr_multiaddr.s_addr = inet_addr(group_name);
|
||||
group.imr_interface.s_addr = inet_addr("0.0.0.0");
|
||||
|
||||
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group));
|
||||
}
|
||||
|
||||
int net_port::udp_listen(char * recv_data, int length)
|
||||
{
|
||||
return(recvfrom(sock, recv_data, length, 0, NULL, NULL));
|
||||
}
|
||||
|
||||
int net_port::udp_listen_timeout(char * recv_data, int length, int sec, int usec)
|
||||
void net_port::set_receive_timeout(int sec, int usec)
|
||||
{
|
||||
fd_set fds;
|
||||
#ifdef WIN32
|
||||
DWORD tv = ( sec * 1000 ) + ( usec / 1000 );
|
||||
#else
|
||||
struct timeval tv;
|
||||
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(sock, &fds);
|
||||
|
||||
tv.tv_sec = sec;
|
||||
tv.tv_usec = usec;
|
||||
#endif
|
||||
|
||||
if(select((int)sock, &fds, NULL, NULL, &tv) <= 0)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
return(recvfrom(sock, recv_data, length, 0, NULL, NULL));
|
||||
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);
|
||||
}
|
||||
|
||||
int net_port::udp_write(char * buffer, int length)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue