Some quick code to use UDP-only (no TCP) with mBed. Echos received packets and sends packets when a button is pressed

Dependencies:   mbed

Committer:
pehrhovey
Date:
Sun Mar 14 00:54:12 2010 +0000
Revision:
0:a548a085de55

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pehrhovey 0:a548a085de55 1 #ifndef TCPCALLBACKCONNECTION_H
pehrhovey 0:a548a085de55 2 #define TCPCALLBACKCONNECTION_H
pehrhovey 0:a548a085de55 3
pehrhovey 0:a548a085de55 4 #include "TCPConnection.h"
pehrhovey 0:a548a085de55 5
pehrhovey 0:a548a085de55 6 namespace mbed {
pehrhovey 0:a548a085de55 7
pehrhovey 0:a548a085de55 8 #define NO_SENT_FNC ((err_t (*)(TCPCallbackConnection *, u16_t))NULL)
pehrhovey 0:a548a085de55 9 #define NO_RECV_FNC ((err_t (*)(TCPCallbackConnection *, struct pbuf *, err_t))NULL)
pehrhovey 0:a548a085de55 10 #define NO_POLL_FNC ((err_t (*)(TCPCallbackConnection *))NULL)
pehrhovey 0:a548a085de55 11 #define NO_ACCEPT_FNC ((err_t (*)(TCPCallbackConnection *, struct tcp_pcb *, err_t))NULL)
pehrhovey 0:a548a085de55 12 #define NO_CONNECT_FNC ((err_t (*)(TCPCallbackConnection *, err_t))NULL)
pehrhovey 0:a548a085de55 13 #define NO_ERR_FNC ((void (*)(TCPCallbackConnection *, err_t))NULL)
pehrhovey 0:a548a085de55 14
pehrhovey 0:a548a085de55 15
pehrhovey 0:a548a085de55 16 class TCPCallbackConnection : public TCPConnection {
pehrhovey 0:a548a085de55 17 public:
pehrhovey 0:a548a085de55 18 TCPCallbackConnection(struct ip_addr ip_addr, u16_t port,
pehrhovey 0:a548a085de55 19 err_t (*psent)(TCPCallbackConnection *, u16_t),
pehrhovey 0:a548a085de55 20 err_t (*precv)(TCPCallbackConnection *, struct pbuf *, err_t),
pehrhovey 0:a548a085de55 21 err_t (*ppoll)(TCPCallbackConnection *),
pehrhovey 0:a548a085de55 22 err_t (*pconnected)(TCPCallbackConnection *, err_t),
pehrhovey 0:a548a085de55 23 void (*perr )(TCPCallbackConnection *, err_t))
pehrhovey 0:a548a085de55 24 : TCPConnection(ip_addr, port) {
pehrhovey 0:a548a085de55 25 _sent = psent;
pehrhovey 0:a548a085de55 26 _recv = precv;
pehrhovey 0:a548a085de55 27 _poll = ppoll;
pehrhovey 0:a548a085de55 28 _connected = pconnected;
pehrhovey 0:a548a085de55 29 _err = perr;
pehrhovey 0:a548a085de55 30 }
pehrhovey 0:a548a085de55 31
pehrhovey 0:a548a085de55 32 TCPCallbackConnection(TCPListener *parent, struct tcp_pcb *npcb,
pehrhovey 0:a548a085de55 33 err_t (*psent)(TCPCallbackConnection *, u16_t),
pehrhovey 0:a548a085de55 34 err_t (*precv)(TCPCallbackConnection *, struct pbuf *, err_t),
pehrhovey 0:a548a085de55 35 err_t (*ppoll)(TCPCallbackConnection *),
pehrhovey 0:a548a085de55 36 err_t (*pconnected)(TCPCallbackConnection *, err_t),
pehrhovey 0:a548a085de55 37 void (*perr )(TCPCallbackConnection *, err_t))
pehrhovey 0:a548a085de55 38 : TCPConnection(parent, npcb) {
pehrhovey 0:a548a085de55 39 _sent = psent;
pehrhovey 0:a548a085de55 40 _recv = precv;
pehrhovey 0:a548a085de55 41 _poll = ppoll;
pehrhovey 0:a548a085de55 42 _connected = pconnected;
pehrhovey 0:a548a085de55 43 _err = perr;
pehrhovey 0:a548a085de55 44 }
pehrhovey 0:a548a085de55 45
pehrhovey 0:a548a085de55 46 private:
pehrhovey 0:a548a085de55 47 /*
pehrhovey 0:a548a085de55 48 * Function to be called when more send buffer space is available.
pehrhovey 0:a548a085de55 49 * @param space the amount of bytes available
pehrhovey 0:a548a085de55 50 * @return ERR_OK: try to send some data by calling tcp_output
pehrhovey 0:a548a085de55 51 */
pehrhovey 0:a548a085de55 52 virtual err_t sent(u16_t space) {
pehrhovey 0:a548a085de55 53 if(_sent) {
pehrhovey 0:a548a085de55 54 return (_sent)(this, space);
pehrhovey 0:a548a085de55 55 } else {
pehrhovey 0:a548a085de55 56 return ERR_OK;
pehrhovey 0:a548a085de55 57 }
pehrhovey 0:a548a085de55 58 }
pehrhovey 0:a548a085de55 59
pehrhovey 0:a548a085de55 60 /*
pehrhovey 0:a548a085de55 61 * Function to be called when (in-sequence) data has arrived.
pehrhovey 0:a548a085de55 62 * @param p the packet buffer which arrived
pehrhovey 0:a548a085de55 63 * @param err an error argument (TODO: that is current always ERR_OK?)
pehrhovey 0:a548a085de55 64 * @return ERR_OK: try to send some data by calling tcp_output
pehrhovey 0:a548a085de55 65 */
pehrhovey 0:a548a085de55 66 virtual err_t recv(struct pbuf *p, err_t err) {
pehrhovey 0:a548a085de55 67 if(_recv) {
pehrhovey 0:a548a085de55 68 return (_recv)(this, p, err);
pehrhovey 0:a548a085de55 69 } else {
pehrhovey 0:a548a085de55 70 return ERR_OK;
pehrhovey 0:a548a085de55 71 }
pehrhovey 0:a548a085de55 72 }
pehrhovey 0:a548a085de55 73
pehrhovey 0:a548a085de55 74 /*
pehrhovey 0:a548a085de55 75 * Function which is called periodically.
pehrhovey 0:a548a085de55 76 * The period can be adjusted in multiples of the TCP slow timer interval
pehrhovey 0:a548a085de55 77 * by changing tcp_pcb.polltmr.
pehrhovey 0:a548a085de55 78 * @return ERR_OK: try to send some data by calling tcp_output
pehrhovey 0:a548a085de55 79 */
pehrhovey 0:a548a085de55 80 virtual err_t poll() {
pehrhovey 0:a548a085de55 81 if(_poll) {
pehrhovey 0:a548a085de55 82 return (_poll)(this);
pehrhovey 0:a548a085de55 83 } else {
pehrhovey 0:a548a085de55 84 return ERR_OK;
pehrhovey 0:a548a085de55 85 }
pehrhovey 0:a548a085de55 86 }
pehrhovey 0:a548a085de55 87
pehrhovey 0:a548a085de55 88 virtual err_t connected(err_t err) {
pehrhovey 0:a548a085de55 89 err = TCPConnection::connected(err);
pehrhovey 0:a548a085de55 90 if(_connected) {
pehrhovey 0:a548a085de55 91 return (_connected)(this, err);
pehrhovey 0:a548a085de55 92 } else {
pehrhovey 0:a548a085de55 93 return ERR_OK;
pehrhovey 0:a548a085de55 94 }
pehrhovey 0:a548a085de55 95 }
pehrhovey 0:a548a085de55 96
pehrhovey 0:a548a085de55 97 /*
pehrhovey 0:a548a085de55 98 * Function to be called whenever a fatal error occurs.
pehrhovey 0:a548a085de55 99 * There is no pcb parameter since most of the times, the pcb is
pehrhovey 0:a548a085de55 100 * already deallocated (or there is no pcb) when this function is called.
pehrhovey 0:a548a085de55 101 * @param err an indication why the error callback is called:
pehrhovey 0:a548a085de55 102 * ERR_ABRT: aborted through tcp_abort or by a TCP timer
pehrhovey 0:a548a085de55 103 * ERR_RST: the connection was reset by the remote host
pehrhovey 0:a548a085de55 104 */
pehrhovey 0:a548a085de55 105 virtual void err(err_t erra) {
pehrhovey 0:a548a085de55 106 if(_err) {
pehrhovey 0:a548a085de55 107 (_err)(this, erra);
pehrhovey 0:a548a085de55 108 }
pehrhovey 0:a548a085de55 109 }
pehrhovey 0:a548a085de55 110
pehrhovey 0:a548a085de55 111 virtual void dnsreply(const char *hostname, struct ip_addr *addr) {};
pehrhovey 0:a548a085de55 112
pehrhovey 0:a548a085de55 113 err_t (*_sent)(TCPCallbackConnection *, u16_t);
pehrhovey 0:a548a085de55 114 err_t (*_recv)(TCPCallbackConnection *, struct pbuf *p, err_t err);
pehrhovey 0:a548a085de55 115 err_t (*_poll)(TCPCallbackConnection *);
pehrhovey 0:a548a085de55 116 err_t (*_accept)(TCPCallbackConnection *, struct tcp_pcb *newpcb, err_t err);
pehrhovey 0:a548a085de55 117 err_t (*_connected)(TCPCallbackConnection *, err_t err);
pehrhovey 0:a548a085de55 118 void (*_err )(TCPCallbackConnection *, err_t);
pehrhovey 0:a548a085de55 119 };
pehrhovey 0:a548a085de55 120
pehrhovey 0:a548a085de55 121 };
pehrhovey 0:a548a085de55 122
pehrhovey 0:a548a085de55 123 #endif /* TCPCALLBACKCONNECTION_H */