This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
mbed/UdpSocket.cpp
- Committer:
- furutani
- Date:
- 2017-02-24
- Revision:
- 115:fa79286d8ea4
- Parent:
- 110:257739f9b31e
File content as of revision 115:fa79286d8ea4:
//////////////////////////////////////////////////////////////////////////////// // UdpSocket.cpp //////////////////////////////////////////////////////////////////////////////// #include "UdpSocket.h" #include "mbed.h" namespace MiMic { #define TIMEOUT_IN_MSEC (2*1000) void UdpSocket::rxhandler(NyLPC_TiUdpSocket_t* i_inst,const void* i_buf,const struct NyLPC_TIPv4RxInfo* i_info) { UdpSocket* sock=(UdpSocket*)i_inst->_tag; sock->onRxHandler(i_buf,i_info); } UdpSocket::UdpSocket(unsigned short i_port,bool i_nobuffer) { if(i_nobuffer){ this->_inst=NyLPC_cNet_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NOBUF); }else{ this->_inst=NyLPC_cNet_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NORMAL); } if(this->_inst==NULL){ mbed_die(); } } UdpSocket::~UdpSocket() { NyLPC_iUdpSocket_finalize(this->_inst); } bool UdpSocket::canRecv() { const void* rx; const struct NyLPC_TIPv4RxInfo* info; return NyLPC_iUdpSocket_precv(this->_inst,&rx,&info,TIMEOUT_IN_MSEC)>0; } int UdpSocket::precvFrom(const void* &i_rx,IpAddr* i_peer_host,unsigned short* i_port) { const struct NyLPC_TIPv4RxInfo* info; int rs=NyLPC_iUdpSocket_precv(this->_inst,&i_rx,&info,TIMEOUT_IN_MSEC); if(rs>1){ if(i_peer_host!=NULL){ i_peer_host->setIPv4(info->peer_ip); } if(i_port!=NULL){ *i_port=info->peer_port; } } return rs; } int UdpSocket::precvFrom(const char* &i_rx,IpAddr* i_peer_host,unsigned short* i_port) { const struct NyLPC_TIPv4RxInfo* info; int rs=NyLPC_iUdpSocket_precv(this->_inst,(const void**)&i_rx,&info,TIMEOUT_IN_MSEC); if(rs>1){ if(i_peer_host!=NULL){ i_peer_host->setIPv4(info->peer_ip); } if(i_port!=NULL){ *i_port=info->peer_port; } } return rs; } void UdpSocket::precvNext(void) { NyLPC_iUdpSocket_pseek(this->_inst); } bool UdpSocket::sendTo(const IpAddr& i_host,unsigned short i_port,const void* i_tx,unsigned short i_tx_size) { int r=NyLPC_iUdpSocket_send(this->_inst,&i_host.addr.v4,i_port,i_tx,i_tx_size,TIMEOUT_IN_MSEC); return (r==i_tx_size); } void UdpSocket::joinMulticast(const IpAddr& i_host) { NyLPC_iUdpSocket_joinMulticast(this->_inst,&i_host.addr.v4); } void UdpSocket::setBroadcast(void) { NyLPC_iUdpSocket_setBroadcast(this->_inst); } }