Dependents: SimpleLCDClock readCard2Twitter_http AnalogClock_StepperMotor_NTP ServoCamV1
Diff: api/UdpSocket.h
- Revision:
- 0:3717b703f76d
- Child:
- 1:e52ec2a24c6a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/api/UdpSocket.h Mon May 24 10:23:42 2010 +0000 @@ -0,0 +1,66 @@ +#ifndef UDPSOCKET_H +#define UDPSOCKET_H + +#include "if/net/net.h" +//Essentially it is a safe interface to NetUdpSocket + +enum UdpSocketErr +{ + __UDPSOCKET_MIN = -0xFFFF, + UDPSOCKET_SETUP, //NetUdpSocket not properly configured + UDPSOCKET_IF, //If has problems, does not exist or is not initialized + UDPSOCKET_MEM, //Not enough mem + UDPSOCKET_INUSE, //If/Port is in use +//... + UDPSOCKET_OK = 0 +}; + +enum UdpSocketEvent //Only one lonely event here... but who knows, maybe some day there'll be another one! +{ + UDPSOCKET_READABLE, //Data in buf +}; + + +class UdpSocket +{ +public: + UdpSocket(); + ~UdpSocket(); //close() + + UdpSocketErr bind(const Host& me); + + int /*if < 0 : UdpSocketErr*/ sendto(const char* buf, int len, Host* pHost); + int /*if < 0 : UdpSocketErr*/ recvfrom(char* buf, int len, Host* pHost); + + /* TODO NTH : printf / scanf helpers that call send/recv */ + + UdpSocketErr close(); + + class CDummy; + //Callbacks + void setOnEvent( void (*pMethod)(UdpSocketEvent) ); + template<class T> + //Linker bug : Must be defined here :( + void setOnEvent( T* pItem, void (T::*pMethod)(UdpSocketEvent) ) + { + m_pCbItem = (CDummy*) pItem; + m_pCbMeth = (void (CDummy::*)(UdpSocketEvent)) pMethod; + } + + void resetOnEvent(); //Disable callback + +protected: + void onNetUdpSocketEvent(NetUdpSocketEvent e); + UdpSocketErr checkInst(); + +private: + NetUdpSocket* m_pNetUdpSocket; + + CDummy* m_pCbItem; + void (CDummy::*m_pCbMeth)(UdpSocketEvent); + + void (*m_pCb)(UdpSocketEvent); + +}; + +#endif