This is LWIPBP3595Interface class library. The base library is LWIPInterface.

Dependents:   LWIPBP3595Interface_STA

Committer:
tousaki
Date:
Tue May 31 05:56:27 2016 +0000
Revision:
1:abb17eced903
Parent:
0:a933851e5d22
Fixed the return type of connect()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tousaki 0:a933851e5d22 1 #include "lwip/opt.h"
tousaki 0:a933851e5d22 2 #include "lwip/def.h"
tousaki 0:a933851e5d22 3 #include "lwip/mem.h"
tousaki 0:a933851e5d22 4 #include "lwip/pbuf.h"
tousaki 0:a933851e5d22 5 #include "lwip/sys.h"
tousaki 0:a933851e5d22 6 #include "lwip/stats.h"
tousaki 0:a933851e5d22 7 #include "lwip/snmp.h"
tousaki 0:a933851e5d22 8 #include "lwip/tcpip.h"
tousaki 0:a933851e5d22 9 #include "netif/etharp.h"
tousaki 0:a933851e5d22 10 #include "netif/ppp_oe.h"
tousaki 0:a933851e5d22 11 #include "mbed_interface.h"
tousaki 0:a933851e5d22 12
tousaki 0:a933851e5d22 13 #include <string.h>
tousaki 0:a933851e5d22 14 #include "rza1_bp3595_emac.h"
tousaki 0:a933851e5d22 15 #include "WlanBP3595.h"
tousaki 0:a933851e5d22 16
tousaki 0:a933851e5d22 17 /* Static variable */
tousaki 0:a933851e5d22 18 static struct netif * volatile target_netif = NULL;
tousaki 0:a933851e5d22 19 static volatile int init_sts = 0; /* 0: not initialized, 1:initialized */
tousaki 0:a933851e5d22 20 static int connect_sts = 0; /* 0: disconnected, 1:connected */
tousaki 0:a933851e5d22 21
tousaki 0:a933851e5d22 22 /* Static function */
tousaki 0:a933851e5d22 23 static err_t rza1_bp3595_etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr);
tousaki 0:a933851e5d22 24 static err_t rza1_bp3595_low_level_output(struct netif *netif, struct pbuf *p);
tousaki 0:a933851e5d22 25
tousaki 0:a933851e5d22 26 /* This function is called from the receiving thread of WlanBP3595 library. */
tousaki 0:a933851e5d22 27 void rza1_bp3595_input(void *buff, u16_t recv_size) {
tousaki 0:a933851e5d22 28 struct eth_hdr *ethhdr;
tousaki 0:a933851e5d22 29 struct pbuf *p;
tousaki 0:a933851e5d22 30
tousaki 0:a933851e5d22 31 if (recv_size != 0) {
tousaki 0:a933851e5d22 32 p = pbuf_alloc(PBUF_RAW, recv_size, PBUF_RAM);
tousaki 0:a933851e5d22 33 if (p != NULL) {
tousaki 0:a933851e5d22 34 /* Copy data */
tousaki 0:a933851e5d22 35 memcpy(p->payload, buff, recv_size);
tousaki 0:a933851e5d22 36 /* Check Ethernet frame type */
tousaki 0:a933851e5d22 37 ethhdr = p->payload;
tousaki 0:a933851e5d22 38 switch (htons(ethhdr->type)) {
tousaki 0:a933851e5d22 39 case ETHTYPE_IP:
tousaki 0:a933851e5d22 40 case ETHTYPE_ARP:
tousaki 0:a933851e5d22 41 #if PPPOE_SUPPORT
tousaki 0:a933851e5d22 42 case ETHTYPE_PPPOEDISC:
tousaki 0:a933851e5d22 43 case ETHTYPE_PPPOE:
tousaki 0:a933851e5d22 44 #endif /* PPPOE_SUPPORT */
tousaki 0:a933851e5d22 45 /* full packet send to tcpip_thread to process */
tousaki 0:a933851e5d22 46 if (target_netif->input(p, target_netif) != ERR_OK) {
tousaki 0:a933851e5d22 47 /* Free buffer */
tousaki 0:a933851e5d22 48 pbuf_free(p);
tousaki 0:a933851e5d22 49 }
tousaki 0:a933851e5d22 50 break;
tousaki 0:a933851e5d22 51 default:
tousaki 0:a933851e5d22 52 /* Free buffer */
tousaki 0:a933851e5d22 53 pbuf_free(p);
tousaki 0:a933851e5d22 54 break;
tousaki 0:a933851e5d22 55 }
tousaki 0:a933851e5d22 56 }
tousaki 0:a933851e5d22 57 }
tousaki 0:a933851e5d22 58 }
tousaki 0:a933851e5d22 59
tousaki 0:a933851e5d22 60 void rza1_bp3595_connected(void) {
tousaki 0:a933851e5d22 61 /* 0: not initialized, 1:initialized */
tousaki 0:a933851e5d22 62 if (init_sts == 1) {
tousaki 0:a933851e5d22 63 /* 0: disconnected, 1:connected */
tousaki 0:a933851e5d22 64 if (connect_sts == 0) {
tousaki 0:a933851e5d22 65 tcpip_callback_with_block((tcpip_callback_fn)netif_set_link_up, (void*)target_netif, 1);
tousaki 0:a933851e5d22 66 connect_sts = 1;
tousaki 0:a933851e5d22 67 }
tousaki 0:a933851e5d22 68 }
tousaki 0:a933851e5d22 69 }
tousaki 0:a933851e5d22 70
tousaki 0:a933851e5d22 71 void rza1_bp3595_disconnected(void) {
tousaki 0:a933851e5d22 72 /* 0: not initialized, 1:initialized */
tousaki 0:a933851e5d22 73 if (init_sts == 1) {
tousaki 0:a933851e5d22 74 /* 0: disconnected, 1:connected */
tousaki 0:a933851e5d22 75 if (connect_sts == 1) {
tousaki 0:a933851e5d22 76 tcpip_callback_with_block((tcpip_callback_fn)netif_set_link_down, (void*)target_netif, 1);
tousaki 0:a933851e5d22 77 connect_sts = 0;
tousaki 0:a933851e5d22 78 }
tousaki 0:a933851e5d22 79 }
tousaki 0:a933851e5d22 80 }
tousaki 0:a933851e5d22 81
tousaki 0:a933851e5d22 82 static err_t rza1_bp3595_etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr) {
tousaki 0:a933851e5d22 83 if (netif->flags & NETIF_FLAG_LINK_UP) {
tousaki 0:a933851e5d22 84 return etharp_output(netif, q, ipaddr);
tousaki 0:a933851e5d22 85 }
tousaki 0:a933851e5d22 86
tousaki 0:a933851e5d22 87 return ERR_CONN;
tousaki 0:a933851e5d22 88 }
tousaki 0:a933851e5d22 89
tousaki 0:a933851e5d22 90 static err_t rza1_bp3595_low_level_output(struct netif *netif, struct pbuf *p) {
tousaki 0:a933851e5d22 91 err_t err = ERR_MEM;
tousaki 0:a933851e5d22 92 int ret;
tousaki 0:a933851e5d22 93
tousaki 0:a933851e5d22 94 ret = WlanBP3595_Output(p);
tousaki 0:a933851e5d22 95 if (ret == 0) {
tousaki 0:a933851e5d22 96 err = ERR_OK;
tousaki 0:a933851e5d22 97 }
tousaki 0:a933851e5d22 98
tousaki 0:a933851e5d22 99 return err;
tousaki 0:a933851e5d22 100 }
tousaki 0:a933851e5d22 101
tousaki 0:a933851e5d22 102 err_t wifi_arch_enetif_init(struct netif *netif) {
tousaki 0:a933851e5d22 103 grp_wld_byte_array tBAWidData; /* byte array wid data */
tousaki 0:a933851e5d22 104 int ret;
tousaki 0:a933851e5d22 105
tousaki 0:a933851e5d22 106 /* Set MAC hardware address */
tousaki 0:a933851e5d22 107 tBAWidData.pucData = (grp_u8 *)netif->hwaddr;
tousaki 0:a933851e5d22 108 tBAWidData.ulSize = 6;
tousaki 0:a933851e5d22 109
tousaki 0:a933851e5d22 110 ret = WlanBP3595_Ioctl(GRP_WLD_IOCTL_GET_MAC_ADDRESS, &tBAWidData);
tousaki 0:a933851e5d22 111 if (ret != 0) {
tousaki 0:a933851e5d22 112 /* error(return a default MAC hardware address) */
tousaki 0:a933851e5d22 113 netif->hwaddr[0] = 0x00;
tousaki 0:a933851e5d22 114 netif->hwaddr[1] = 0x02;
tousaki 0:a933851e5d22 115 netif->hwaddr[2] = 0xF7;
tousaki 0:a933851e5d22 116 netif->hwaddr[3] = 0xF0;
tousaki 0:a933851e5d22 117 netif->hwaddr[4] = 0x00;
tousaki 0:a933851e5d22 118 netif->hwaddr[5] = 0x00;
tousaki 0:a933851e5d22 119 }
tousaki 0:a933851e5d22 120
tousaki 0:a933851e5d22 121 /* Set MAC hardware address length */
tousaki 0:a933851e5d22 122 netif->hwaddr_len = ETHARP_HWADDR_LEN;
tousaki 0:a933851e5d22 123
tousaki 0:a933851e5d22 124 /* Set maximum transfer unit */
tousaki 0:a933851e5d22 125 netif->mtu = 1500;
tousaki 0:a933851e5d22 126
tousaki 0:a933851e5d22 127 /* Set device capabilities */
tousaki 0:a933851e5d22 128 netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_ETHERNET | NETIF_FLAG_IGMP;
tousaki 0:a933851e5d22 129
tousaki 0:a933851e5d22 130 #if LWIP_NETIF_HOSTNAME
tousaki 0:a933851e5d22 131 /* Initialize interface hostname */
tousaki 0:a933851e5d22 132 netif->hostname = "lwiprza1";
tousaki 0:a933851e5d22 133 #endif /* LWIP_NETIF_HOSTNAME */
tousaki 0:a933851e5d22 134
tousaki 0:a933851e5d22 135 netif->name[0] = 'e';
tousaki 0:a933851e5d22 136 netif->name[1] = 'n';
tousaki 0:a933851e5d22 137
tousaki 0:a933851e5d22 138 netif->output = rza1_bp3595_etharp_output;
tousaki 0:a933851e5d22 139 netif->linkoutput = rza1_bp3595_low_level_output;
tousaki 0:a933851e5d22 140
tousaki 0:a933851e5d22 141 target_netif = netif;
tousaki 0:a933851e5d22 142
tousaki 0:a933851e5d22 143 init_sts = 1; /* 0: not initialized, 1:initialized */
tousaki 0:a933851e5d22 144
tousaki 0:a933851e5d22 145 return ERR_OK;
tousaki 0:a933851e5d22 146 }
tousaki 0:a933851e5d22 147
tousaki 0:a933851e5d22 148 void wifi_arch_enable_interrupts(void) {
tousaki 0:a933851e5d22 149 WlanBP3595_RecvEnable();
tousaki 0:a933851e5d22 150 }
tousaki 0:a933851e5d22 151
tousaki 0:a933851e5d22 152 void wifi_arch_disable_interrupts(void) {
tousaki 0:a933851e5d22 153 WlanBP3595_RecvDisable();
tousaki 0:a933851e5d22 154 }
tousaki 0:a933851e5d22 155