Ethernetwebsoc

Dependencies:   C12832_lcd LM75B WebSocketClient mbed-rtos mbed Socket lwip-eth lwip-sys lwip

Committer:
GordonSin
Date:
Fri May 31 04:09:54 2013 +0000
Revision:
0:0ed2a7c7190c
31/5/2013;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
GordonSin 0:0ed2a7c7190c 1 /**
GordonSin 0:0ed2a7c7190c 2 * @file
GordonSin 0:0ed2a7c7190c 3 * Network Interface Sequential API module
GordonSin 0:0ed2a7c7190c 4 *
GordonSin 0:0ed2a7c7190c 5 */
GordonSin 0:0ed2a7c7190c 6
GordonSin 0:0ed2a7c7190c 7 /*
GordonSin 0:0ed2a7c7190c 8 * Redistribution and use in source and binary forms, with or without modification,
GordonSin 0:0ed2a7c7190c 9 * are permitted provided that the following conditions are met:
GordonSin 0:0ed2a7c7190c 10 *
GordonSin 0:0ed2a7c7190c 11 * 1. Redistributions of source code must retain the above copyright notice,
GordonSin 0:0ed2a7c7190c 12 * this list of conditions and the following disclaimer.
GordonSin 0:0ed2a7c7190c 13 * 2. Redistributions in binary form must reproduce the above copyright notice,
GordonSin 0:0ed2a7c7190c 14 * this list of conditions and the following disclaimer in the documentation
GordonSin 0:0ed2a7c7190c 15 * and/or other materials provided with the distribution.
GordonSin 0:0ed2a7c7190c 16 * 3. The name of the author may not be used to endorse or promote products
GordonSin 0:0ed2a7c7190c 17 * derived from this software without specific prior written permission.
GordonSin 0:0ed2a7c7190c 18 *
GordonSin 0:0ed2a7c7190c 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
GordonSin 0:0ed2a7c7190c 20 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
GordonSin 0:0ed2a7c7190c 21 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
GordonSin 0:0ed2a7c7190c 22 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
GordonSin 0:0ed2a7c7190c 23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
GordonSin 0:0ed2a7c7190c 24 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
GordonSin 0:0ed2a7c7190c 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
GordonSin 0:0ed2a7c7190c 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
GordonSin 0:0ed2a7c7190c 27 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
GordonSin 0:0ed2a7c7190c 28 * OF SUCH DAMAGE.
GordonSin 0:0ed2a7c7190c 29 *
GordonSin 0:0ed2a7c7190c 30 * This file is part of the lwIP TCP/IP stack.
GordonSin 0:0ed2a7c7190c 31 *
GordonSin 0:0ed2a7c7190c 32 */
GordonSin 0:0ed2a7c7190c 33
GordonSin 0:0ed2a7c7190c 34 #include "lwip/opt.h"
GordonSin 0:0ed2a7c7190c 35
GordonSin 0:0ed2a7c7190c 36 #if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */
GordonSin 0:0ed2a7c7190c 37
GordonSin 0:0ed2a7c7190c 38 #include "lwip/netifapi.h"
GordonSin 0:0ed2a7c7190c 39 #include "lwip/tcpip.h"
GordonSin 0:0ed2a7c7190c 40
GordonSin 0:0ed2a7c7190c 41 /**
GordonSin 0:0ed2a7c7190c 42 * Call netif_add() inside the tcpip_thread context.
GordonSin 0:0ed2a7c7190c 43 */
GordonSin 0:0ed2a7c7190c 44 void
GordonSin 0:0ed2a7c7190c 45 do_netifapi_netif_add(struct netifapi_msg_msg *msg)
GordonSin 0:0ed2a7c7190c 46 {
GordonSin 0:0ed2a7c7190c 47 if (!netif_add( msg->netif,
GordonSin 0:0ed2a7c7190c 48 msg->msg.add.ipaddr,
GordonSin 0:0ed2a7c7190c 49 msg->msg.add.netmask,
GordonSin 0:0ed2a7c7190c 50 msg->msg.add.gw,
GordonSin 0:0ed2a7c7190c 51 msg->msg.add.state,
GordonSin 0:0ed2a7c7190c 52 msg->msg.add.init,
GordonSin 0:0ed2a7c7190c 53 msg->msg.add.input)) {
GordonSin 0:0ed2a7c7190c 54 msg->err = ERR_IF;
GordonSin 0:0ed2a7c7190c 55 } else {
GordonSin 0:0ed2a7c7190c 56 msg->err = ERR_OK;
GordonSin 0:0ed2a7c7190c 57 }
GordonSin 0:0ed2a7c7190c 58 TCPIP_NETIFAPI_ACK(msg);
GordonSin 0:0ed2a7c7190c 59 }
GordonSin 0:0ed2a7c7190c 60
GordonSin 0:0ed2a7c7190c 61 /**
GordonSin 0:0ed2a7c7190c 62 * Call netif_set_addr() inside the tcpip_thread context.
GordonSin 0:0ed2a7c7190c 63 */
GordonSin 0:0ed2a7c7190c 64 void
GordonSin 0:0ed2a7c7190c 65 do_netifapi_netif_set_addr(struct netifapi_msg_msg *msg)
GordonSin 0:0ed2a7c7190c 66 {
GordonSin 0:0ed2a7c7190c 67 netif_set_addr( msg->netif,
GordonSin 0:0ed2a7c7190c 68 msg->msg.add.ipaddr,
GordonSin 0:0ed2a7c7190c 69 msg->msg.add.netmask,
GordonSin 0:0ed2a7c7190c 70 msg->msg.add.gw);
GordonSin 0:0ed2a7c7190c 71 msg->err = ERR_OK;
GordonSin 0:0ed2a7c7190c 72 TCPIP_NETIFAPI_ACK(msg);
GordonSin 0:0ed2a7c7190c 73 }
GordonSin 0:0ed2a7c7190c 74
GordonSin 0:0ed2a7c7190c 75 /**
GordonSin 0:0ed2a7c7190c 76 * Call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) inside the
GordonSin 0:0ed2a7c7190c 77 * tcpip_thread context.
GordonSin 0:0ed2a7c7190c 78 */
GordonSin 0:0ed2a7c7190c 79 void
GordonSin 0:0ed2a7c7190c 80 do_netifapi_netif_common(struct netifapi_msg_msg *msg)
GordonSin 0:0ed2a7c7190c 81 {
GordonSin 0:0ed2a7c7190c 82 if (msg->msg.common.errtfunc != NULL) {
GordonSin 0:0ed2a7c7190c 83 msg->err = msg->msg.common.errtfunc(msg->netif);
GordonSin 0:0ed2a7c7190c 84 } else {
GordonSin 0:0ed2a7c7190c 85 msg->err = ERR_OK;
GordonSin 0:0ed2a7c7190c 86 msg->msg.common.voidfunc(msg->netif);
GordonSin 0:0ed2a7c7190c 87 }
GordonSin 0:0ed2a7c7190c 88 TCPIP_NETIFAPI_ACK(msg);
GordonSin 0:0ed2a7c7190c 89 }
GordonSin 0:0ed2a7c7190c 90
GordonSin 0:0ed2a7c7190c 91 /**
GordonSin 0:0ed2a7c7190c 92 * Call netif_add() in a thread-safe way by running that function inside the
GordonSin 0:0ed2a7c7190c 93 * tcpip_thread context.
GordonSin 0:0ed2a7c7190c 94 *
GordonSin 0:0ed2a7c7190c 95 * @note for params @see netif_add()
GordonSin 0:0ed2a7c7190c 96 */
GordonSin 0:0ed2a7c7190c 97 err_t
GordonSin 0:0ed2a7c7190c 98 netifapi_netif_add(struct netif *netif,
GordonSin 0:0ed2a7c7190c 99 ip_addr_t *ipaddr,
GordonSin 0:0ed2a7c7190c 100 ip_addr_t *netmask,
GordonSin 0:0ed2a7c7190c 101 ip_addr_t *gw,
GordonSin 0:0ed2a7c7190c 102 void *state,
GordonSin 0:0ed2a7c7190c 103 netif_init_fn init,
GordonSin 0:0ed2a7c7190c 104 netif_input_fn input)
GordonSin 0:0ed2a7c7190c 105 {
GordonSin 0:0ed2a7c7190c 106 struct netifapi_msg msg;
GordonSin 0:0ed2a7c7190c 107 msg.function = do_netifapi_netif_add;
GordonSin 0:0ed2a7c7190c 108 msg.msg.netif = netif;
GordonSin 0:0ed2a7c7190c 109 msg.msg.msg.add.ipaddr = ipaddr;
GordonSin 0:0ed2a7c7190c 110 msg.msg.msg.add.netmask = netmask;
GordonSin 0:0ed2a7c7190c 111 msg.msg.msg.add.gw = gw;
GordonSin 0:0ed2a7c7190c 112 msg.msg.msg.add.state = state;
GordonSin 0:0ed2a7c7190c 113 msg.msg.msg.add.init = init;
GordonSin 0:0ed2a7c7190c 114 msg.msg.msg.add.input = input;
GordonSin 0:0ed2a7c7190c 115 TCPIP_NETIFAPI(&msg);
GordonSin 0:0ed2a7c7190c 116 return msg.msg.err;
GordonSin 0:0ed2a7c7190c 117 }
GordonSin 0:0ed2a7c7190c 118
GordonSin 0:0ed2a7c7190c 119 /**
GordonSin 0:0ed2a7c7190c 120 * Call netif_set_addr() in a thread-safe way by running that function inside the
GordonSin 0:0ed2a7c7190c 121 * tcpip_thread context.
GordonSin 0:0ed2a7c7190c 122 *
GordonSin 0:0ed2a7c7190c 123 * @note for params @see netif_set_addr()
GordonSin 0:0ed2a7c7190c 124 */
GordonSin 0:0ed2a7c7190c 125 err_t
GordonSin 0:0ed2a7c7190c 126 netifapi_netif_set_addr(struct netif *netif,
GordonSin 0:0ed2a7c7190c 127 ip_addr_t *ipaddr,
GordonSin 0:0ed2a7c7190c 128 ip_addr_t *netmask,
GordonSin 0:0ed2a7c7190c 129 ip_addr_t *gw)
GordonSin 0:0ed2a7c7190c 130 {
GordonSin 0:0ed2a7c7190c 131 struct netifapi_msg msg;
GordonSin 0:0ed2a7c7190c 132 msg.function = do_netifapi_netif_set_addr;
GordonSin 0:0ed2a7c7190c 133 msg.msg.netif = netif;
GordonSin 0:0ed2a7c7190c 134 msg.msg.msg.add.ipaddr = ipaddr;
GordonSin 0:0ed2a7c7190c 135 msg.msg.msg.add.netmask = netmask;
GordonSin 0:0ed2a7c7190c 136 msg.msg.msg.add.gw = gw;
GordonSin 0:0ed2a7c7190c 137 TCPIP_NETIFAPI(&msg);
GordonSin 0:0ed2a7c7190c 138 return msg.msg.err;
GordonSin 0:0ed2a7c7190c 139 }
GordonSin 0:0ed2a7c7190c 140
GordonSin 0:0ed2a7c7190c 141 /**
GordonSin 0:0ed2a7c7190c 142 * call the "errtfunc" (or the "voidfunc" if "errtfunc" is NULL) in a thread-safe
GordonSin 0:0ed2a7c7190c 143 * way by running that function inside the tcpip_thread context.
GordonSin 0:0ed2a7c7190c 144 *
GordonSin 0:0ed2a7c7190c 145 * @note use only for functions where there is only "netif" parameter.
GordonSin 0:0ed2a7c7190c 146 */
GordonSin 0:0ed2a7c7190c 147 err_t
GordonSin 0:0ed2a7c7190c 148 netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc,
GordonSin 0:0ed2a7c7190c 149 netifapi_errt_fn errtfunc)
GordonSin 0:0ed2a7c7190c 150 {
GordonSin 0:0ed2a7c7190c 151 struct netifapi_msg msg;
GordonSin 0:0ed2a7c7190c 152 msg.function = do_netifapi_netif_common;
GordonSin 0:0ed2a7c7190c 153 msg.msg.netif = netif;
GordonSin 0:0ed2a7c7190c 154 msg.msg.msg.common.voidfunc = voidfunc;
GordonSin 0:0ed2a7c7190c 155 msg.msg.msg.common.errtfunc = errtfunc;
GordonSin 0:0ed2a7c7190c 156 TCPIP_NETIFAPI(&msg);
GordonSin 0:0ed2a7c7190c 157 return msg.msg.err;
GordonSin 0:0ed2a7c7190c 158 }
GordonSin 0:0ed2a7c7190c 159
GordonSin 0:0ed2a7c7190c 160 #endif /* LWIP_NETIF_API */