123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- #define INCLUDE_FROM_UIPMANAGEMENT_C
- #include "uIPManagement.h"
- static struct timer ConnectionTimer;
- static struct timer ARPTimer;
- struct uip_eth_addr MACAddress;
- void uIPManagement_Init(void)
- {
-
- clock_init();
- timer_set(&ConnectionTimer, CLOCK_SECOND / 2);
- timer_set(&ARPTimer, CLOCK_SECOND * 10);
-
- uip_init();
- uip_arp_init();
-
- if (USB_CurrentMode == USB_MODE_Device)
- {
- MACAddress.addr[0] = SERVER_MAC_ADDRESS[0];
- MACAddress.addr[1] = SERVER_MAC_ADDRESS[1];
- MACAddress.addr[2] = SERVER_MAC_ADDRESS[2];
- MACAddress.addr[3] = SERVER_MAC_ADDRESS[3];
- MACAddress.addr[4] = SERVER_MAC_ADDRESS[4];
- MACAddress.addr[5] = SERVER_MAC_ADDRESS[5];
- #if defined(ENABLE_DHCP_SERVER)
- DHCPServerApp_Init();
- #endif
- uip_ipaddr_t IPAddress, Netmask, GatewayIPAddress;
- uip_ipaddr(&IPAddress, DEVICE_IP_ADDRESS[0], DEVICE_IP_ADDRESS[1], DEVICE_IP_ADDRESS[2], DEVICE_IP_ADDRESS[3]);
- uip_ipaddr(&Netmask, DEVICE_NETMASK[0], DEVICE_NETMASK[1], DEVICE_NETMASK[2], DEVICE_NETMASK[3]);
- uip_ipaddr(&GatewayIPAddress, DEVICE_GATEWAY[0], DEVICE_GATEWAY[1], DEVICE_GATEWAY[2], DEVICE_GATEWAY[3]);
- uip_sethostaddr(&IPAddress);
- uip_setnetmask(&Netmask);
- uip_setdraddr(&GatewayIPAddress);
- }
- else
- {
- #if defined(ENABLE_DHCP_CLIENT)
- DHCPClientApp_Init();
- #else
- uip_ipaddr_t IPAddress, Netmask, GatewayIPAddress;
- uip_ipaddr(&IPAddress, DEVICE_IP_ADDRESS[0], DEVICE_IP_ADDRESS[1], DEVICE_IP_ADDRESS[2], DEVICE_IP_ADDRESS[3]);
- uip_ipaddr(&Netmask, DEVICE_NETMASK[0], DEVICE_NETMASK[1], DEVICE_NETMASK[2], DEVICE_NETMASK[3]);
- uip_ipaddr(&GatewayIPAddress, DEVICE_GATEWAY[0], DEVICE_GATEWAY[1], DEVICE_GATEWAY[2], DEVICE_GATEWAY[3]);
- uip_sethostaddr(&IPAddress);
- uip_setnetmask(&Netmask);
- uip_setdraddr(&GatewayIPAddress);
- #endif
- }
-
- uip_setethaddr(MACAddress);
-
- HTTPServerApp_Init();
-
- #if defined(ENABLE_TELNET_SERVER)
- TELNETServerApp_Init();
- #endif
- }
- void uIPManagement_ManageNetwork(void)
- {
- if (((USB_CurrentMode == USB_MODE_Host) && (USB_HostState == HOST_STATE_Configured)) ||
- ((USB_CurrentMode == USB_MODE_Device) && (USB_DeviceState == DEVICE_STATE_Configured)))
- {
- uIPManagement_ProcessIncomingPacket();
- uIPManagement_ManageConnections();
- }
- }
- void uIPManagement_TCPCallback(void)
- {
-
- switch (uip_conn->lport)
- {
- case HTONS(HTTP_SERVER_PORT):
- HTTPServerApp_Callback();
- break;
- #if defined(ENABLE_TELNET_SERVER)
- case HTONS(TELNET_SERVER_PORT):
- TELNETServerApp_Callback();
- break;
- #endif
- }
- }
- void uIPManagement_UDPCallback(void)
- {
-
- switch (uip_udp_conn->lport)
- {
- #if defined(ENABLE_DHCP_CLIENT)
- case HTONS(DHCP_CLIENT_PORT):
- DHCPClientApp_Callback();
- break;
- #endif
- #if defined(ENABLE_DHCP_SERVER)
- case HTONS(DHCP_SERVER_PORT):
- DHCPServerApp_Callback();
- break;
- #endif
- }
- }
- static void uIPManagement_ProcessIncomingPacket(void)
- {
-
- if (USB_CurrentMode == USB_MODE_Device)
- {
-
- if (!(RNDIS_Device_IsPacketReceived(&Ethernet_RNDIS_Interface_Device)))
- return;
- LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
-
- RNDIS_Device_ReadPacket(&Ethernet_RNDIS_Interface_Device, uip_buf, &uip_len);
- }
- else
- {
-
- if (!(RNDIS_Host_IsPacketReceived(&Ethernet_RNDIS_Interface_Host)))
- return;
- LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
-
- RNDIS_Host_ReadPacket(&Ethernet_RNDIS_Interface_Host, uip_buf, &uip_len);
- }
-
- if (uip_len > 0)
- {
- switch (((struct uip_eth_hdr*)uip_buf)->type)
- {
- case HTONS(UIP_ETHTYPE_IP):
-
- uip_arp_ipin();
-
- uip_input();
-
- if (uip_len > 0)
- {
-
- uip_arp_out();
- uip_split_output();
- }
- break;
- case HTONS(UIP_ETHTYPE_ARP):
-
- uip_arp_arpin();
-
- if (uip_len > 0)
- uip_split_output();
- break;
- }
- }
- LEDs_SetAllLEDs(LEDMASK_USB_READY);
- }
- static void uIPManagement_ManageConnections(void)
- {
-
- for (uint8_t i = 0; i < UIP_CONNS; i++)
- {
- uip_poll_conn(&uip_conns[i]);
-
- if (uip_len > 0)
- {
-
- uip_arp_out();
-
- uip_split_output();
- }
- }
-
- if (timer_expired(&ConnectionTimer))
- {
- timer_reset(&ConnectionTimer);
- LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
- for (uint8_t i = 0; i < UIP_CONNS; i++)
- {
-
- uip_periodic(i);
-
- if (uip_len > 0)
- {
-
- uip_arp_out();
-
- uip_split_output();
- }
- }
- #if defined(ENABLE_DHCP_CLIENT)
- for (uint8_t i = 0; i < UIP_UDP_CONNS; i++)
- {
-
- uip_udp_periodic(i);
-
- if (uip_len > 0)
- {
-
- uip_arp_out();
-
- uip_split_output();
- }
- }
- #endif
- LEDs_SetAllLEDs(LEDMASK_USB_READY);
- }
-
- if (timer_expired(&ARPTimer))
- {
- timer_reset(&ARPTimer);
- uip_arp_timer();
- }
- }
|