This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Dependents: MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more
UdpSocket.cpp
00001 //////////////////////////////////////////////////////////////////////////////// 00002 // UdpSocket.cpp 00003 //////////////////////////////////////////////////////////////////////////////// 00004 00005 #include "UdpSocket.h" 00006 #include "mbed.h" 00007 00008 00009 00010 namespace MiMic 00011 { 00012 #define TIMEOUT_IN_MSEC (2*1000) 00013 00014 void UdpSocket::rxhandler(NyLPC_TiUdpSocket_t* i_inst,const void* i_buf,const struct NyLPC_TIPv4RxInfo* i_info) 00015 { 00016 UdpSocket* sock=(UdpSocket*)i_inst->_tag; 00017 sock->onRxHandler(i_buf,i_info); 00018 } 00019 00020 UdpSocket::UdpSocket(unsigned short i_port,bool i_nobuffer) 00021 { 00022 if(i_nobuffer){ 00023 this->_inst=NyLPC_cNet_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NOBUF); 00024 }else{ 00025 this->_inst=NyLPC_cNet_createUdpSocketEx(i_port,NyLPC_TSocketType_UDP_NORMAL); 00026 } 00027 if(this->_inst==NULL){ 00028 mbed_die(); 00029 } 00030 } 00031 UdpSocket::~UdpSocket() 00032 { 00033 NyLPC_iUdpSocket_finalize(this->_inst); 00034 } 00035 bool UdpSocket::canRecv() 00036 { 00037 const void* rx; 00038 const struct NyLPC_TIPv4RxInfo* info; 00039 return NyLPC_iUdpSocket_precv(this->_inst,&rx,&info,TIMEOUT_IN_MSEC)>0; 00040 } 00041 00042 int UdpSocket::precvFrom(const void* &i_rx,IpAddr* i_peer_host,unsigned short* i_port) 00043 { 00044 const struct NyLPC_TIPv4RxInfo* info; 00045 int rs=NyLPC_iUdpSocket_precv(this->_inst,&i_rx,&info,TIMEOUT_IN_MSEC); 00046 if(rs>1){ 00047 if(i_peer_host!=NULL){ 00048 i_peer_host->setIPv4(info->peer_ip); 00049 } 00050 if(i_port!=NULL){ 00051 *i_port=info->peer_port; 00052 } 00053 } 00054 return rs; 00055 } 00056 int UdpSocket::precvFrom(const char* &i_rx,IpAddr* i_peer_host,unsigned short* i_port) 00057 { 00058 const struct NyLPC_TIPv4RxInfo* info; 00059 int rs=NyLPC_iUdpSocket_precv(this->_inst,(const void**)&i_rx,&info,TIMEOUT_IN_MSEC); 00060 if(rs>1){ 00061 if(i_peer_host!=NULL){ 00062 i_peer_host->setIPv4(info->peer_ip); 00063 } 00064 if(i_port!=NULL){ 00065 *i_port=info->peer_port; 00066 } 00067 } 00068 return rs; 00069 } 00070 00071 void UdpSocket::precvNext(void) 00072 { 00073 NyLPC_iUdpSocket_pseek(this->_inst); 00074 } 00075 00076 bool UdpSocket::sendTo(const IpAddr& i_host,unsigned short i_port,const void* i_tx,unsigned short i_tx_size) 00077 { 00078 int r=NyLPC_iUdpSocket_send(this->_inst,&i_host.addr.v4,i_port,i_tx,i_tx_size,TIMEOUT_IN_MSEC); 00079 return (r==i_tx_size); 00080 00081 } 00082 00083 void UdpSocket::joinMulticast(const IpAddr& i_host) 00084 { 00085 NyLPC_iUdpSocket_joinMulticast(this->_inst,&i_host.addr.v4); 00086 } 00087 void UdpSocket::setBroadcast(void) 00088 { 00089 NyLPC_iUdpSocket_setBroadcast(this->_inst); 00090 00091 } 00092 }
Generated on Tue Jul 12 2022 15:46:17 by 1.7.2