A version of LWIP, provided for backwards compatibility.

Dependents:   AA_DemoBoard DemoBoard HelloServerDemo DemoBoard_RangeIndicator ... more

Committer:
root@mbed.org
Date:
Tue May 08 15:32:10 2012 +0100
Revision:
0:5e1631496985
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
root@mbed.org 0:5e1631496985 1 #include "lwip/opt.h"
root@mbed.org 0:5e1631496985 2 #include "lwip/stats.h"
root@mbed.org 0:5e1631496985 3 #include "lwip/sys.h"
root@mbed.org 0:5e1631496985 4 #include "lwip/pbuf.h"
root@mbed.org 0:5e1631496985 5 #include "lwip/udp.h"
root@mbed.org 0:5e1631496985 6 #include "lwip/tcp.h"
root@mbed.org 0:5e1631496985 7 #include "lwip/dns.h"
root@mbed.org 0:5e1631496985 8 #include "lwip/dhcp.h"
root@mbed.org 0:5e1631496985 9 #include "lwip/init.h"
root@mbed.org 0:5e1631496985 10 #include "lwip/netif.h"
root@mbed.org 0:5e1631496985 11 #include "netif/etharp.h"
root@mbed.org 0:5e1631496985 12 #include "netif/loopif.h"
root@mbed.org 0:5e1631496985 13 #include "device.h"
root@mbed.org 0:5e1631496985 14 #include "Ethernet.h"
root@mbed.org 0:5e1631496985 15
root@mbed.org 0:5e1631496985 16 #include "NetServer.h"
root@mbed.org 0:5e1631496985 17 #include "TCPListener.h"
root@mbed.org 0:5e1631496985 18 #include "TCPCallbackListener.h"
root@mbed.org 0:5e1631496985 19 #include "TCPConnection.h"
root@mbed.org 0:5e1631496985 20
root@mbed.org 0:5e1631496985 21 using namespace std;
root@mbed.org 0:5e1631496985 22 using namespace mbed;
root@mbed.org 0:5e1631496985 23
root@mbed.org 0:5e1631496985 24 NetServer *NetServer::singleton = NULL;
root@mbed.org 0:5e1631496985 25
root@mbed.org 0:5e1631496985 26 NetServer::NetServer() : netif(&netif_data), dhcp(true), hostname(HOSTNAME) {
root@mbed.org 0:5e1631496985 27 _time.start();
root@mbed.org 0:5e1631496985 28 IP4_ADDR(&netmask, 255,255,255,255);
root@mbed.org 0:5e1631496985 29 IP4_ADDR(&gateway, 0,0,0,0);
root@mbed.org 0:5e1631496985 30 IP4_ADDR(&ipaddr, 0,0,0,0);
root@mbed.org 0:5e1631496985 31 netif->hwaddr_len = 0;
root@mbed.org 0:5e1631496985 32 del = new list<TCPItem *>();
root@mbed.org 0:5e1631496985 33 }
root@mbed.org 0:5e1631496985 34
root@mbed.org 0:5e1631496985 35 NetServer::NetServer(struct ip_addr ip, struct ip_addr nm, struct ip_addr gw)
root@mbed.org 0:5e1631496985 36 : netif(&netif_data), ipaddr(ip), netmask(nm), gateway(gw), dhcp(false), hostname(HOSTNAME) {
root@mbed.org 0:5e1631496985 37 _time.start();
root@mbed.org 0:5e1631496985 38 netif->hwaddr_len = 0;
root@mbed.org 0:5e1631496985 39 del = new list<TCPItem *>();
root@mbed.org 0:5e1631496985 40 }
root@mbed.org 0:5e1631496985 41
root@mbed.org 0:5e1631496985 42 NetServer::~NetServer() {
root@mbed.org 0:5e1631496985 43
root@mbed.org 0:5e1631496985 44 }
root@mbed.org 0:5e1631496985 45
root@mbed.org 0:5e1631496985 46 void NetServer::_poll() const {
root@mbed.org 0:5e1631496985 47 while(!del->empty()) {
root@mbed.org 0:5e1631496985 48 TCPItem *item = del->front();
root@mbed.org 0:5e1631496985 49 del->pop_front();
root@mbed.org 0:5e1631496985 50 delete item;
root@mbed.org 0:5e1631496985 51 }
root@mbed.org 0:5e1631496985 52 device_poll();
root@mbed.org 0:5e1631496985 53 tcp_tmr();
root@mbed.org 0:5e1631496985 54 }
root@mbed.org 0:5e1631496985 55
root@mbed.org 0:5e1631496985 56 void NetServer::init() {
root@mbed.org 0:5e1631496985 57 lwip_init();
root@mbed.org 0:5e1631496985 58
root@mbed.org 0:5e1631496985 59 netif->hwaddr_len = ETHARP_HWADDR_LEN;
root@mbed.org 0:5e1631496985 60 device_address((char *)netif->hwaddr);
root@mbed.org 0:5e1631496985 61
root@mbed.org 0:5e1631496985 62 netif = netif_add(netif, &ipaddr, &netmask, &gateway, NULL, device_init, ip_input);
root@mbed.org 0:5e1631496985 63 netif->hostname = (char *)this->hostname;
root@mbed.org 0:5e1631496985 64 netif_set_default(netif);
root@mbed.org 0:5e1631496985 65 if(!dhcp) {
root@mbed.org 0:5e1631496985 66 netif_set_up(netif);
root@mbed.org 0:5e1631496985 67 } else {
root@mbed.org 0:5e1631496985 68 dhcp_start(netif);
root@mbed.org 0:5e1631496985 69 }
root@mbed.org 0:5e1631496985 70
root@mbed.org 0:5e1631496985 71 tickARP.attach_us( &etharp_tmr, ARP_TMR_INTERVAL * 1000);
root@mbed.org 0:5e1631496985 72 //eth_tick.attach_us<NetServer>(this,&emac_tmr, TCP_FAST_INTERVAL * 1000);
root@mbed.org 0:5e1631496985 73 dns_tick.attach_us(&dns_tmr, DNS_TMR_INTERVAL * 1000);
root@mbed.org 0:5e1631496985 74 if(dhcp) {
root@mbed.org 0:5e1631496985 75 dhcp_coarse.attach_us(&dhcp_coarse_tmr, DHCP_COARSE_TIMER_MSECS * 1000);
root@mbed.org 0:5e1631496985 76 dhcp_fine.attach_us(&dhcp_fine_tmr, DHCP_FINE_TIMER_MSECS * 1000);
root@mbed.org 0:5e1631496985 77 }
root@mbed.org 0:5e1631496985 78 }
root@mbed.org 0:5e1631496985 79
root@mbed.org 0:5e1631496985 80 void NetServer::setUp() const {
root@mbed.org 0:5e1631496985 81 netif_set_up(netif);
root@mbed.org 0:5e1631496985 82 }
root@mbed.org 0:5e1631496985 83
root@mbed.org 0:5e1631496985 84 void NetServer::setDown() const {
root@mbed.org 0:5e1631496985 85 netif_set_down(netif);
root@mbed.org 0:5e1631496985 86 }
root@mbed.org 0:5e1631496985 87
root@mbed.org 0:5e1631496985 88 int NetServer::isUp() const {
root@mbed.org 0:5e1631496985 89 return netif_is_up(netif);
root@mbed.org 0:5e1631496985 90 }
root@mbed.org 0:5e1631496985 91
root@mbed.org 0:5e1631496985 92 void NetServer::waitUntilReady() {
root@mbed.org 0:5e1631496985 93 while(!netif_is_up(netif)) {
root@mbed.org 0:5e1631496985 94 _poll();
root@mbed.org 0:5e1631496985 95 wait_ms(1);
root@mbed.org 0:5e1631496985 96 }
root@mbed.org 0:5e1631496985 97 ipaddr = netif->ip_addr;
root@mbed.org 0:5e1631496985 98 printf("IP: %hhu.%hhu.%hhu.%hhu\n", (ipaddr.addr)&0xFF, (ipaddr.addr>>8)&0xFF, (ipaddr.addr>>16)&0xFF, (ipaddr.addr>>24)&0xFF);
root@mbed.org 0:5e1631496985 99 }
root@mbed.org 0:5e1631496985 100
root@mbed.org 0:5e1631496985 101 TCPCallbackListener *NetServer::bindTCPPort(u16_t port, err_t (*accept)(TCPCallbackListener *, struct tcp_pcb *, err_t)) const {
root@mbed.org 0:5e1631496985 102 TCPCallbackListener *listener = new TCPCallbackListener(port, accept);
root@mbed.org 0:5e1631496985 103 listener->bind();
root@mbed.org 0:5e1631496985 104 return listener;
root@mbed.org 0:5e1631496985 105 }
root@mbed.org 0:5e1631496985 106
root@mbed.org 0:5e1631496985 107 void NetServer::free(TCPItem *item) const {
root@mbed.org 0:5e1631496985 108 del->push_back(item);
root@mbed.org 0:5e1631496985 109 }
root@mbed.org 0:5e1631496985 110
root@mbed.org 0:5e1631496985 111 int NetServer::time() {
root@mbed.org 0:5e1631496985 112 return NetServer::get()->_time.read_ms();
root@mbed.org 0:5e1631496985 113 }