For a question in forum this is a working example, there will be the example that is not working
Fork of eth_v13 by
TCPSocket.cpp@2:8f5bacfef390, 2014-03-18 (annotated)
- Committer:
- hggerdd
- Date:
- Tue Mar 18 22:51:18 2014 +0000
- Revision:
- 2:8f5bacfef390
- Child:
- 3:79dc3337d9da
tcp geht auf einfache art und weise
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hggerdd | 2:8f5bacfef390 | 1 | |
hggerdd | 2:8f5bacfef390 | 2 | #include "TCPSocket.h" |
hggerdd | 2:8f5bacfef390 | 3 | #include "ipaddr.h" |
hggerdd | 2:8f5bacfef390 | 4 | #include "w5100.h" |
hggerdd | 2:8f5bacfef390 | 5 | #include "mbed.h" |
hggerdd | 2:8f5bacfef390 | 6 | |
hggerdd | 2:8f5bacfef390 | 7 | extern Serial pc; |
hggerdd | 2:8f5bacfef390 | 8 | |
hggerdd | 2:8f5bacfef390 | 9 | TCPSocket::TCPSocket(int newSocket) |
hggerdd | 2:8f5bacfef390 | 10 | { |
hggerdd | 2:8f5bacfef390 | 11 | _socket = newSocket; |
hggerdd | 2:8f5bacfef390 | 12 | } |
hggerdd | 2:8f5bacfef390 | 13 | |
hggerdd | 2:8f5bacfef390 | 14 | void TCPSocket::bind(int port) |
hggerdd | 2:8f5bacfef390 | 15 | { |
hggerdd | 2:8f5bacfef390 | 16 | _port = port; |
hggerdd | 2:8f5bacfef390 | 17 | W5100.writeSnMR(_socket, SnMR::TCP); // set TCP mode |
hggerdd | 2:8f5bacfef390 | 18 | W5100.writeSnPORT(_socket, _port); |
hggerdd | 2:8f5bacfef390 | 19 | } |
hggerdd | 2:8f5bacfef390 | 20 | |
hggerdd | 2:8f5bacfef390 | 21 | void TCPSocket::listen() |
hggerdd | 2:8f5bacfef390 | 22 | { |
hggerdd | 2:8f5bacfef390 | 23 | W5100.execCmdSn(_socket, Sock_OPEN); // set OPEN command |
hggerdd | 2:8f5bacfef390 | 24 | W5100.execCmdSn(_socket, Sock_LISTEN); // listen |
hggerdd | 2:8f5bacfef390 | 25 | } |
hggerdd | 2:8f5bacfef390 | 26 | |
hggerdd | 2:8f5bacfef390 | 27 | |
hggerdd | 2:8f5bacfef390 | 28 | |
hggerdd | 2:8f5bacfef390 | 29 | int TCPSocket::send(const char* buf, int len) |
hggerdd | 2:8f5bacfef390 | 30 | { |
hggerdd | 2:8f5bacfef390 | 31 | if (len > 0) { |
hggerdd | 2:8f5bacfef390 | 32 | W5100.send_data_processing(_socket, (uint8_t*)buf, len); |
hggerdd | 2:8f5bacfef390 | 33 | W5100.execCmdSn(_socket, Sock_SEND); |
hggerdd | 2:8f5bacfef390 | 34 | } |
hggerdd | 2:8f5bacfef390 | 35 | return len; |
hggerdd | 2:8f5bacfef390 | 36 | } |
hggerdd | 2:8f5bacfef390 | 37 | |
hggerdd | 2:8f5bacfef390 | 38 | int TCPSocket::recv(char* buf, int len) |
hggerdd | 2:8f5bacfef390 | 39 | { |
hggerdd | 2:8f5bacfef390 | 40 | int size = W5100.getRXReceivedSize(_socket); |
hggerdd | 2:8f5bacfef390 | 41 | if (size > len) { |
hggerdd | 2:8f5bacfef390 | 42 | size = len; |
hggerdd | 2:8f5bacfef390 | 43 | } |
hggerdd | 2:8f5bacfef390 | 44 | if (size > 0) { |
hggerdd | 2:8f5bacfef390 | 45 | W5100.recv_data_processing(_socket, (uint8_t*)buf, size); |
hggerdd | 2:8f5bacfef390 | 46 | W5100.execCmdSn(_socket, Sock_RECV); |
hggerdd | 2:8f5bacfef390 | 47 | } |
hggerdd | 2:8f5bacfef390 | 48 | |
hggerdd | 2:8f5bacfef390 | 49 | return size; |
hggerdd | 2:8f5bacfef390 | 50 | } |
hggerdd | 2:8f5bacfef390 | 51 | |
hggerdd | 2:8f5bacfef390 | 52 | void TCPSocket::poll() |
hggerdd | 2:8f5bacfef390 | 53 | { |
hggerdd | 2:8f5bacfef390 | 54 | uint8_t Sn_SR = W5100.readSnSR(_socket); |
hggerdd | 2:8f5bacfef390 | 55 | //pc.printf("SnSR = %x\n", Sn_SR); |
hggerdd | 2:8f5bacfef390 | 56 | |
hggerdd | 2:8f5bacfef390 | 57 | switch(Sn_SR) { |
hggerdd | 2:8f5bacfef390 | 58 | case SnSR::ESTABLISHED: |
hggerdd | 2:8f5bacfef390 | 59 | m_pCb(); |
hggerdd | 2:8f5bacfef390 | 60 | break; |
hggerdd | 2:8f5bacfef390 | 61 | } |
hggerdd | 2:8f5bacfef390 | 62 | |
hggerdd | 2:8f5bacfef390 | 63 | |
hggerdd | 2:8f5bacfef390 | 64 | } |
hggerdd | 2:8f5bacfef390 | 65 | |
hggerdd | 2:8f5bacfef390 | 66 | void TCPSocket::close() |
hggerdd | 2:8f5bacfef390 | 67 | { |
hggerdd | 2:8f5bacfef390 | 68 | if (_socket != (-1)) { |
hggerdd | 2:8f5bacfef390 | 69 | W5100.execCmdSn(_socket, Sock_DISCON); |
hggerdd | 2:8f5bacfef390 | 70 | W5100.execCmdSn(_socket, Sock_CLOSE); |
hggerdd | 2:8f5bacfef390 | 71 | } |
hggerdd | 2:8f5bacfef390 | 72 | } |
hggerdd | 2:8f5bacfef390 | 73 | |
hggerdd | 2:8f5bacfef390 | 74 | void TCPSocket::setOnEvent(void (*pMethod)(void)) |
hggerdd | 2:8f5bacfef390 | 75 | { |
hggerdd | 2:8f5bacfef390 | 76 | m_pCb = pMethod; |
hggerdd | 2:8f5bacfef390 | 77 | } |