Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface mbed-rtos
EtherTcp.cpp
00001 #include "mbed.h" 00002 #define RTNO_SUBMODULE_DEFINE 00003 #include "RTno.h" 00004 00005 #ifdef USE_ETHERNET_CONNECTION 00006 00007 #include "EtherTcp.h" 00008 #include "EthernetInterface.h" 00009 00010 00011 #include "ip_addr.h" 00012 /** 00013 #include <../SPI/SPI.h> 00014 #include <../Ethernet/Ethernet.h> 00015 00016 static EthernetServer *m_pServer; 00017 static EthernetClient *m_pClient; 00018 */ 00019 //static EthernetInterface* m_pInterface; 00020 static TCPSocketServer* m_pServerSocket; 00021 static TCPSocketConnection m_ClientSocket; 00022 00023 00024 #define ETCP_RX_BUFFER_SIZE 128 00025 uint8_t etcp_rx_buffer[ETCP_RX_BUFFER_SIZE]; 00026 int etcp_rx_buffer_pointer_head = 0; 00027 int etcp_rx_buffer_pointer_tail = 0; 00028 ///Host m_Client; 00029 00030 Serial *pSerial; 00031 00032 /** 00033 * Push data to ring buffer. 00034 */ 00035 int etcp_rx_buffer_push(unsigned char c) { 00036 etcp_rx_buffer[etcp_rx_buffer_pointer_tail] = c; 00037 etcp_rx_buffer_pointer_tail++; 00038 if(etcp_rx_buffer_pointer_tail >= ETCP_RX_BUFFER_SIZE) { 00039 etcp_rx_buffer_pointer_tail = 0; 00040 } 00041 return 0; 00042 } 00043 00044 /** 00045 * Pop data fron ring buffer 00046 */ 00047 int etcp_rx_buffer_pop(unsigned char *c) { 00048 *c = etcp_rx_buffer[etcp_rx_buffer_pointer_head]; 00049 etcp_rx_buffer_pointer_head++; 00050 if(etcp_rx_buffer_pointer_head >= ETCP_RX_BUFFER_SIZE) { 00051 etcp_rx_buffer_pointer_head = 0; 00052 } 00053 return 0; 00054 } 00055 00056 int etcp_rx_buffer_get_size() { 00057 int size = etcp_rx_buffer_pointer_tail - etcp_rx_buffer_pointer_head; 00058 if(size < 0) { 00059 size += ETCP_RX_BUFFER_SIZE; 00060 } 00061 return size; 00062 } 00063 00064 /* 00065 static void EtherTcp_onClientEvent(TCPSocketEvent e) { 00066 switch (e) { 00067 // If the socket is readable, do stuff 00068 case TCPSOCKET_READABLE: 00069 while(1) { 00070 char buf; 00071 int ret = m_pClientSocket->recv(&buf, 1); 00072 if (ret == 0) break; 00073 etcp_rx_buffer_push(buf); 00074 } 00075 00076 break; 00077 case TCPSOCKET_CONTIMEOUT: 00078 case TCPSOCKET_CONRST: 00079 case TCPSOCKET_CONABRT: 00080 case TCPSOCKET_ERROR: 00081 case TCPSOCKET_DISCONNECTED: 00082 delete m_pClientSocket; 00083 m_pClientSocket = NULL; 00084 break; 00085 } 00086 } 00087 00088 static void EtherTcp_onServerEvent(TCPSocketEvent e) { 00089 if(e == TCPSOCKET_ACCEPT ) { 00090 if ( m_pServerSocket->accept(&m_Client, &m_pClientSocket) ) { 00091 return; //Error in accept, discard connection 00092 } 00093 00094 m_pClientSocket->setOnEvent(EtherTcp_onClientEvent); 00095 } 00096 } 00097 */ 00098 00099 void EtherTcp_init(/*const char* mac, */const char* ip, 00100 const char* gateway, const char* subnet, 00101 uint16_t port) 00102 00103 { 00104 pSerial = new Serial(USBTX, USBRX); 00105 EthernetInterface::init( 00106 ip, subnet, gateway); 00107 //printf("Hello %d %d %d %d\r\n", ip[0], ip[1], ip[2], ip[3]); 00108 //EthernetErr ethErr = m_pInterface->setup(); 00109 //if (ethErr) { 00110 // return; 00111 // } 00112 00113 m_pServerSocket = new TCPSocketServer(); 00114 //m_pServerSocket->setOnEvent(EtherTcp_onServerEvent); 00115 m_pServerSocket->bind(port); 00116 m_pServerSocket->listen(); 00117 m_pServerSocket->accept(m_ClientSocket); 00118 SerialDevice_available = EtherTcp_available; 00119 SerialDevice_getc = EtherTcp_getc; 00120 SerialDevice_putc = EtherTcp_putc; 00121 } 00122 00123 uint8_t EtherTcp_available() 00124 { 00125 //Net::poll(); 00126 return etcp_rx_buffer_get_size(); 00127 } 00128 00129 00130 void EtherTcp_putc(const char c) { 00131 char d = c; 00132 m_ClientSocket.send(&d, 1); 00133 } 00134 00135 uint8_t EtherTcp_getc() 00136 { 00137 uint8_t c; 00138 m_ClientSocket.receive((char*)&c, 1); 00139 //etcp_rx_buffer_pop(&c); 00140 return c; 00141 } 00142 00143 #endif
Generated on Fri Jul 22 2022 21:22:49 by
1.7.2