diff options
| author | Cristian Maglie <c.maglie@bug.st> | 2012-10-18 15:50:09 +0200 | 
|---|---|---|
| committer | Cristian Maglie <c.maglie@bug.st> | 2012-10-18 15:50:09 +0200 | 
| commit | 6a45ba48ab1f2d0a168373a02ba7fded40a3470e (patch) | |
| tree | 163448869b4dfcbce95dc877ffff61a709fba6b6 /firmwares/wifishield/wifiHD/src/lwip_setup.c | |
| parent | c313b54c00635f1be14a1b09617dc9b8b562e589 (diff) | |
| parent | 6d296e0faba5b9910084c307a3f93cb2653bf7f8 (diff) | |
Merged upstream arduino branch
Diffstat (limited to 'firmwares/wifishield/wifiHD/src/lwip_setup.c')
| -rw-r--r-- | firmwares/wifishield/wifiHD/src/lwip_setup.c | 145 | 
1 files changed, 145 insertions, 0 deletions
diff --git a/firmwares/wifishield/wifiHD/src/lwip_setup.c b/firmwares/wifishield/wifiHD/src/lwip_setup.c new file mode 100644 index 0000000..bfa8c09 --- /dev/null +++ b/firmwares/wifishield/wifiHD/src/lwip_setup.c @@ -0,0 +1,145 @@ +/*! \page License + * Copyright (C) 2009, H&D Wireless AB All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The name of H&D Wireless AB may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY H&D WIRELESS AB ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND + * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/*! + * \file lwIP setup code + * + * \brief Collects the lwIP setup code that an application has to + *        execute in a standalone environment. + * + * \author               H&D Wireless AB \n + * + */ + +#include <lwip/init.h> +#include <lwip/dhcp.h> +#include <lwip/tcp.h> +#include <ipv4/lwip/ip_frag.h> +#include <netif/etharp.h> +#include <netif/wlif.h> +#include <timer.h> + +#include "lwip_setup.h" +#include "lwip/dns.h" + + +/** + * + */ +static void +tcp_tmr_cb(void *ctx) +{ +        tcp_tmr(); +} + +/** + * + */ +static void +ip_tmr_cb(void *ctx) +{ +        ip_reass_tmr(); +} + +/** + * + */ +static void +dns_tmr_cb(void *ctx) +{ +	dns_tmr(); +} + +/** + * + */ +static void +etharp_tmr_cb(void *ctx) +{ +        etharp_tmr(); +} + + +/** + * + */ +static void +dhcp_fine_tmr_cb(void *ctx) +{ +    dhcp_fine_tmr(); +} + +/** + * + */ +static void +dhcp_coarse_tmr_cb(void *ctx) +{ +        dhcp_coarse_tmr(); +} + +int start_ip_stack(struct net_cfg *cfg,  +                   struct ip_addr ipaddr,  +                   struct ip_addr netmask, +                   struct ip_addr gw) { + +        if (cfg->dhcp_enabled) { +                IP4_ADDR(&gw, 0,0,0,0); +                IP4_ADDR(&ipaddr, 0,0,0,0); +                IP4_ADDR(&netmask, 0,0,0,0); +        } +         +        /* add wl to lwip interface list and set as default */ +        cfg->netif = netif_add(cfg->netif,  +                               &ipaddr,  +                               &netmask,  +                               &gw,  +                               NULL, +                               wlif_init, /* init */ +                               ethernet_input /* handles ARP and IP packets */); + +        if (cfg->netif == NULL) +            return -1; +        netif_set_default(cfg->netif); + +        /* register lwip timer callbacks for tcp, arp and dhcp protocols */ +        timer_sched_timeout_cb(5000, TIMEOUT_PERIODIC,  +                               etharp_tmr_cb, NULL); +        timer_sched_timeout_cb(TCP_TMR_INTERVAL, TIMEOUT_PERIODIC,  +                               tcp_tmr_cb, NULL); +        timer_sched_timeout_cb(DHCP_FINE_TIMER_MSECS, TIMEOUT_PERIODIC,  +                               dhcp_fine_tmr_cb, NULL); +        timer_sched_timeout_cb(DHCP_COARSE_TIMER_MSECS, TIMEOUT_PERIODIC, +                               dhcp_coarse_tmr_cb, NULL); +        timer_sched_timeout_cb(IP_TMR_INTERVAL, TIMEOUT_PERIODIC, +                               ip_tmr_cb, NULL); +        timer_sched_timeout_cb(DNS_TMR_INTERVAL, TIMEOUT_PERIODIC, +                                      dns_tmr_cb, NULL); + +        return 1; +}  | 
