This is a non working version of my ethernet with sd card, i do not know why

Dependencies:   SDFileSystem mbed

Fork of eth_v13 by Heiko Greiner

Committer:
hggerdd
Date:
Thu Mar 27 21:58:15 2014 +0000
Revision:
4:01cb86c138d8
Parent:
3:79dc3337d9da
a

Who changed what in which revision?

UserRevisionLine numberNew 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 3:79dc3337d9da 14 TCPSocket::TCPSocket()
hggerdd 3:79dc3337d9da 15 {
hggerdd 3:79dc3337d9da 16 }
hggerdd 3:79dc3337d9da 17
hggerdd 3:79dc3337d9da 18 void TCPSocket::setSocket(int socket)
hggerdd 3:79dc3337d9da 19 {
hggerdd 3:79dc3337d9da 20 pc.printf("setSocket() = %d \n", _socket);
hggerdd 3:79dc3337d9da 21 _socket = socket;
hggerdd 3:79dc3337d9da 22 }
hggerdd 3:79dc3337d9da 23
hggerdd 2:8f5bacfef390 24 void TCPSocket::bind(int port)
hggerdd 2:8f5bacfef390 25 {
hggerdd 3:79dc3337d9da 26 pc.printf("bind()= %d \n", _socket);
hggerdd 2:8f5bacfef390 27 _port = port;
hggerdd 2:8f5bacfef390 28 W5100.writeSnMR(_socket, SnMR::TCP); // set TCP mode
hggerdd 2:8f5bacfef390 29 W5100.writeSnPORT(_socket, _port);
hggerdd 2:8f5bacfef390 30 }
hggerdd 2:8f5bacfef390 31
hggerdd 2:8f5bacfef390 32 void TCPSocket::listen()
hggerdd 2:8f5bacfef390 33 {
hggerdd 3:79dc3337d9da 34 pc.printf("listen()= %d \n", _socket);
hggerdd 2:8f5bacfef390 35 W5100.execCmdSn(_socket, Sock_OPEN); // set OPEN command
hggerdd 2:8f5bacfef390 36 W5100.execCmdSn(_socket, Sock_LISTEN); // listen
hggerdd 2:8f5bacfef390 37 }
hggerdd 2:8f5bacfef390 38
hggerdd 2:8f5bacfef390 39
hggerdd 2:8f5bacfef390 40
hggerdd 2:8f5bacfef390 41 int TCPSocket::send(const char* buf, int len)
hggerdd 2:8f5bacfef390 42 {
hggerdd 2:8f5bacfef390 43 if (len > 0) {
hggerdd 2:8f5bacfef390 44 W5100.send_data_processing(_socket, (uint8_t*)buf, len);
hggerdd 2:8f5bacfef390 45 W5100.execCmdSn(_socket, Sock_SEND);
hggerdd 2:8f5bacfef390 46 }
hggerdd 2:8f5bacfef390 47 return len;
hggerdd 2:8f5bacfef390 48 }
hggerdd 2:8f5bacfef390 49
hggerdd 2:8f5bacfef390 50 int TCPSocket::recv(char* buf, int len)
hggerdd 2:8f5bacfef390 51 {
hggerdd 2:8f5bacfef390 52 int size = W5100.getRXReceivedSize(_socket);
hggerdd 2:8f5bacfef390 53 if (size > len) {
hggerdd 2:8f5bacfef390 54 size = len;
hggerdd 2:8f5bacfef390 55 }
hggerdd 3:79dc3337d9da 56
hggerdd 2:8f5bacfef390 57 if (size > 0) {
hggerdd 2:8f5bacfef390 58 W5100.recv_data_processing(_socket, (uint8_t*)buf, size);
hggerdd 2:8f5bacfef390 59 W5100.execCmdSn(_socket, Sock_RECV);
hggerdd 2:8f5bacfef390 60 }
hggerdd 2:8f5bacfef390 61
hggerdd 2:8f5bacfef390 62 return size;
hggerdd 2:8f5bacfef390 63 }
hggerdd 2:8f5bacfef390 64
hggerdd 2:8f5bacfef390 65 void TCPSocket::poll()
hggerdd 2:8f5bacfef390 66 {
hggerdd 3:79dc3337d9da 67 // status abfragen
hggerdd 2:8f5bacfef390 68 uint8_t Sn_SR = W5100.readSnSR(_socket);
hggerdd 3:79dc3337d9da 69 pc.printf("(sock) SnSR = 0x%x\n", Sn_SR);
hggerdd 2:8f5bacfef390 70
hggerdd 2:8f5bacfef390 71 switch(Sn_SR) {
hggerdd 3:79dc3337d9da 72 case SnSR::CLOSED:
hggerdd 3:79dc3337d9da 73 listen(); // wenn Socket geschlossen, dann öffnen
hggerdd 3:79dc3337d9da 74 break;
hggerdd 3:79dc3337d9da 75
hggerdd 3:79dc3337d9da 76 case SnSR::LISTEN: // weiter warten
hggerdd 3:79dc3337d9da 77 break;
hggerdd 3:79dc3337d9da 78
hggerdd 3:79dc3337d9da 79 case SnSR::ESTABLISHED: // Kontrolle, und App abarbeiten
hggerdd 3:79dc3337d9da 80 _callbackHandler.call();
hggerdd 3:79dc3337d9da 81 break;
hggerdd 3:79dc3337d9da 82
hggerdd 3:79dc3337d9da 83 case SnSR::FIN_WAIT: // für die folgenden Fälle den Port schließen
hggerdd 3:79dc3337d9da 84 case SnSR::CLOSING:
hggerdd 3:79dc3337d9da 85 case SnSR::TIME_WAIT:
hggerdd 3:79dc3337d9da 86 case SnSR::CLOSE_WAIT:
hggerdd 3:79dc3337d9da 87 case SnSR::LAST_ACK:
hggerdd 3:79dc3337d9da 88 close();
hggerdd 3:79dc3337d9da 89 break;
hggerdd 3:79dc3337d9da 90
hggerdd 3:79dc3337d9da 91 default: // Sonst --> nichts machen
hggerdd 2:8f5bacfef390 92 break;
hggerdd 2:8f5bacfef390 93 }
hggerdd 2:8f5bacfef390 94 }
hggerdd 2:8f5bacfef390 95
hggerdd 2:8f5bacfef390 96 void TCPSocket::close()
hggerdd 2:8f5bacfef390 97 {
hggerdd 2:8f5bacfef390 98 if (_socket != (-1)) {
hggerdd 2:8f5bacfef390 99 W5100.execCmdSn(_socket, Sock_DISCON);
hggerdd 2:8f5bacfef390 100 W5100.execCmdSn(_socket, Sock_CLOSE);
hggerdd 2:8f5bacfef390 101 }
hggerdd 2:8f5bacfef390 102 }
hggerdd 2:8f5bacfef390 103
hggerdd 2:8f5bacfef390 104 void TCPSocket::setOnEvent(void (*pMethod)(void))
hggerdd 2:8f5bacfef390 105 {
hggerdd 2:8f5bacfef390 106 m_pCb = pMethod;
hggerdd 3:79dc3337d9da 107 pointertype = 0;
hggerdd 2:8f5bacfef390 108 }
hggerdd 3:79dc3337d9da 109
hggerdd 3:79dc3337d9da 110 int TCPSocket::getRxSize()
hggerdd 3:79dc3337d9da 111 {
hggerdd 3:79dc3337d9da 112 return W5100.readSnRX_RSR(_socket);
hggerdd 3:79dc3337d9da 113 }