/** * @brief main routine for example_lwip_tcpecho_sa_18xx43xx * @return Function should not exit. */ int main(void) { uint32_t physts; ip_addr_t ipaddr, netmask, gw; prvSetupHardware(); /* Initialize LWIP */ lwip_init(); LWIP_DEBUGF(LWIP_DBG_ON, ("Starting LWIP TCP echo server...\n")); /* Static IP assignment */ #if LWIP_DHCP IP4_ADDR(&gw, 0, 0, 0, 0); IP4_ADDR(&ipaddr, 0, 0, 0, 0); IP4_ADDR(&netmask, 0, 0, 0, 0); #else IP4_ADDR(&gw, 10, 1, 10, 1); IP4_ADDR(&ipaddr, 10, 1, 10, 234); IP4_ADDR(&netmask, 255, 255, 255, 0); APP_PRINT_IP(&ipaddr); #endif /* Add netif interface for lpc17xx_8x */ netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init, ethernet_input); netif_set_default(&lpc_netif); netif_set_up(&lpc_netif); #if LWIP_DHCP dhcp_start(&lpc_netif); #endif /* Initialize and start application */ echo_init(); /* This could be done in the sysTick ISR, but may stay in IRQ context too long, so do this stuff with a background loop. */ while (1) { /* Handle packets as part of this loop, not in the IRQ handler */ lpc_enetif_input(&lpc_netif); /* lpc_rx_queue will re-qeueu receive buffers. This normally occurs automatically, but in systems were memory is constrained, pbufs may not always be able to get allocated, so this function can be optionally enabled to re-queue receive buffers. */ #if 0 while (lpc_rx_queue(&lpc_netif)) {} #endif /* Free TX buffers that are done sending */ lpc_tx_reclaim(&lpc_netif); /* LWIP timers - ARP, DHCP, TCP, etc. */ sys_check_timeouts(); /* Call the PHY status update state machine once in a while to keep the link status up-to-date */ physts = lpcPHYStsPoll(); /* Only check for connection state when the PHY status has changed */ if (physts & PHY_LINK_CHANGED) { if (physts & PHY_LINK_CONNECTED) { Board_LED_Set(0, true); /* Set interface speed and duplex */ if (physts & PHY_LINK_SPEED100) { Chip_ENET_SetSpeed(LPC_ETHERNET, 1); NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 100000000); } else { Chip_ENET_SetSpeed(LPC_ETHERNET, 0); NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 10000000); } if (physts & PHY_LINK_FULLDUPLX) { Chip_ENET_SetDuplex(LPC_ETHERNET, true); } else { Chip_ENET_SetDuplex(LPC_ETHERNET, false); } netif_set_link_up(&lpc_netif); } else { Board_LED_Set(0, false); netif_set_link_down(&lpc_netif); } DEBUGOUT("Link connect status: %d\r\n", ((physts & PHY_LINK_CONNECTED) != 0)); } } /* Never returns, for warning only */ return 0; }
/** * Network interface setup function * (Only used in case of FreeRTOS/uCOS-III configuration) */ static void vSetupIFTask(void *pvParameters) { ip_addr_t ipaddr, netmask, gw; volatile s32_t tcpipdone = 0; uint32_t physts; static int prt_ip = 0; /* Wait until the TCP/IP thread is finished before continuing or wierd things may happen */ DEBUGSTR("Waiting for TCPIP thread to initialize...\r\n"); tcpip_init(tcpip_init_done_signal, (void *) &tcpipdone); while (!tcpipdone) ; DEBUGSTR("Starting LWIP HTTP server...\r\n"); /* Static IP assignment */ #if LWIP_DHCP IP4_ADDR(&gw, 0, 0, 0, 0); IP4_ADDR(&ipaddr, 0, 0, 0, 0); IP4_ADDR(&netmask, 0, 0, 0, 0); #else IP4_ADDR(&gw, 192, 168, 200, 1); IP4_ADDR(&ipaddr, 192, 168, 200, 99); IP4_ADDR(&netmask, 255, 255, 255, 0); #endif /* Add netif interface for lpc17xx_8x */ memset(&lpc_netif, 0, sizeof(lpc_netif)); if (!netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init, tcpip_input)) { DEBUGSTR("Net interface failed to initialize ..\r\n"); while (1) ; } netif_set_default(&lpc_netif); netif_set_up(&lpc_netif); /* Enable MAC interrupts only after LWIP is ready */ NVIC_SetPriority(ETHERNET_IRQn, IRQ_PRIO_ETHERNET); NVIC_EnableIRQ(ETHERNET_IRQn); #if LWIP_DHCP dhcp_start(&lpc_netif); #endif /* Initialize and start application */ //http_server_netconn_init(); /* This loop monitors the PHY link and will handle cable events via the PHY driver. */ while (1) { /* Call the PHY status update state machine once in a while to keep the link status up-to-date */ physts = lpcPHYStsPoll(); /* Only check for connection state when the PHY status has changed */ if (physts & PHY_LINK_CHANGED) { if (physts & PHY_LINK_CONNECTED) { /* Set interface speed and duplex */ if (physts & PHY_LINK_SPEED100) { NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 100000000); } else { NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 10000000); } if (physts & PHY_LINK_FULLDUPLX) { Chip_ENET_SetDuplex(LPC_ETHERNET, true); } else { Chip_ENET_SetDuplex(LPC_ETHERNET, false); } tcpip_callback_with_block((tcpip_callback_fn) netif_set_link_up, (void *) &lpc_netif, 1); } else { tcpip_callback_with_block((tcpip_callback_fn) netif_set_link_down, (void *) &lpc_netif, 1); } } // DEBUGOUT("Link connect status: %d\n", ((physts & PHY_LINK_CONNECTED) != 0)); /* Delay for link detection */ msDelay(250); if (!prt_ip && lpc_netif.ip_addr.addr) { prt_ip = 1; ip_addr_changed(&lpc_netif); } } }
/* LWIP kickoff and PHY link monitor thread */ static void vSetupIFTask(void *pvParameters) { ip_addr_t ipaddr, netmask, gw; volatile s32_t tcpipdone = 0; uint32_t physts; static int prt_ip = 0; DEBUGSTR("LWIP HTTP Web Server FreeRTOS Demo...\r\n"); /* Wait until the TCP/IP thread is finished before continuing or wierd things may happen */ DEBUGSTR("Waiting for TCPIP thread to initialize...\r\n"); tcpip_init(tcpip_init_done_signal, (void *) &tcpipdone); while (!tcpipdone) { msDelay(1); } DEBUGSTR("Starting LWIP HTTP server...\r\n"); /* Static IP assignment */ #if LWIP_DHCP IP4_ADDR(&gw, 0, 0, 0, 0); IP4_ADDR(&ipaddr, 0, 0, 0, 0); IP4_ADDR(&netmask, 0, 0, 0, 0); #else IP4_ADDR(&gw, 10, 1, 10, 1); IP4_ADDR(&ipaddr, 10, 1, 10, 234); IP4_ADDR(&netmask, 255, 255, 255, 0); #endif /* Add netif interface for lpc17xx_8x */ memset(&lpc_netif, 0, sizeof(lpc_netif)); if (!netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init, tcpip_input)) { DEBUGSTR("Net interface failed to initialize\r\n"); while(1); } netif_set_default(&lpc_netif); netif_set_up(&lpc_netif); /* Enable MAC interrupts only after LWIP is ready */ NVIC_SetPriority(ETHERNET_IRQn, config_ETHERNET_INTERRUPT_PRIORITY); NVIC_EnableIRQ(ETHERNET_IRQn); #if LWIP_DHCP dhcp_start(&lpc_netif); #endif /* Initialize and start application */ http_server_netconn_init(); /* This loop monitors the PHY link and will handle cable events via the PHY driver. */ while (1) { /* Call the PHY status update state machine once in a while to keep the link status up-to-date */ physts = lpcPHYStsPoll(); /* Only check for connection state when the PHY status has changed */ if (physts & PHY_LINK_CHANGED) { if (physts & PHY_LINK_CONNECTED) { Board_LED_Set(0, true); prt_ip = 0; /* Set interface speed and duplex */ if (physts & PHY_LINK_SPEED100) { Chip_ENET_Set100Mbps(LPC_ETHERNET); NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 100000000); } else { Chip_ENET_Set10Mbps(LPC_ETHERNET); NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 10000000); } if (physts & PHY_LINK_FULLDUPLX) { Chip_ENET_SetFullDuplex(LPC_ETHERNET); } else { Chip_ENET_SetHalfDuplex(LPC_ETHERNET); } tcpip_callback_with_block((tcpip_callback_fn) netif_set_link_up, (void *) &lpc_netif, 1); } else { Board_LED_Set(0, false); tcpip_callback_with_block((tcpip_callback_fn) netif_set_link_down, (void *) &lpc_netif, 1); } /* Delay for link detection (250mS) */ vTaskDelay(configTICK_RATE_HZ / 4); } /* Print IP address info */ if (!prt_ip) { if (lpc_netif.ip_addr.addr) { static char tmp_buff[16]; DEBUGOUT("IP_ADDR : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.ip_addr, tmp_buff, 16)); DEBUGOUT("NET_MASK : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.netmask, tmp_buff, 16)); DEBUGOUT("GATEWAY_IP : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.gw, tmp_buff, 16)); prt_ip = 1; } } } }
/** * @brief main routine for example_lwip_tcpecho_sa_17xx40xx * @return Function should not exit. */ int main(void) { uint32_t physts; ip_addr_t ipaddr, netmask, gw; static int prt_ip = 0; prvSetupHardware(); /* Initialize LWIP */ lwip_init(); ///LWIP_DEBUGF(LWIP_DBG_ON, ("Starting LWIP TCP echo server...\n")); /* Static IP assignment */ IP4_ADDR(&gw, 0, 0, 0, 0); IP4_ADDR(&ipaddr, 0, 0, 0, 0); IP4_ADDR(&netmask, 0, 0, 0, 0); /* Add netif interface for lpc17xx_8x */ netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init, ethernet_input); netif_set_default(&lpc_netif); netif_set_up(&lpc_netif); dhcp_start(&lpc_netif); uint8_t fl = 0 ; while (1) { /* Handle packets as part of this loop, not in the IRQ handler */ lpc_enetif_input(&lpc_netif); /* lpc_rx_queue will re-qeueu receive buffers. This normally occurs automatically, but in systems were memory is constrained, pbufs may not always be able to get allocated, so this function can be optionally enabled to re-queue receive buffers. */ #if 0 while (lpc_rx_queue(&lpc_netif)) {} #endif /* Free TX buffers that are done sending */ lpc_tx_reclaim(&lpc_netif); /* LWIP timers - ARP, DHCP, TCP, etc. */ sys_check_timeouts(); /* Call the PHY status update state machine once in a while to keep the link status up-to-date */ physts = lpcPHYStsPoll(); /* Only check for connection state when the PHY status has changed */ if (physts & PHY_LINK_CHANGED) { if (physts & PHY_LINK_CONNECTED) { prt_ip = 0; /* Set interface speed and duplex */ if (physts & PHY_LINK_SPEED100) { Chip_ENET_Set100Mbps(LPC_ETHERNET); NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 100000000); } else { Chip_ENET_Set10Mbps(LPC_ETHERNET); NETIF_INIT_SNMP(&lpc_netif, snmp_ifType_ethernet_csmacd, 10000000); } if (physts & PHY_LINK_FULLDUPLX) { Chip_ENET_SetFullDuplex(LPC_ETHERNET); } else { Chip_ENET_SetHalfDuplex(LPC_ETHERNET); } netif_set_link_up(&lpc_netif); } else { netif_set_link_down(&lpc_netif); } DEBUGOUT("Link connect status: %d\r\n", ((physts & PHY_LINK_CONNECTED) != 0)); } /* Print IP address info */ if (!prt_ip) { if (lpc_netif.ip_addr.addr) { static char tmp_buff[16]; DEBUGOUT("IP_ADDR : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.ip_addr, tmp_buff, 16)); DEBUGOUT("NET_MASK : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.netmask, tmp_buff, 16)); DEBUGOUT("GATEWAY_IP : %s\r\n", ipaddr_ntoa_r((const ip_addr_t *) &lpc_netif.gw, tmp_buff, 16)); prt_ip = 1; mqttAppInit(); mqttAppConnect(); ////// mqttAppDisconnect(); } } if(mqttIsConnected()==1) { mqttAppHandle(); if (fl == 0) { mqttAppSubscribe("lpc/#"); mqttAppSubscribe("lpc/teste"); fl = 1; } } } return 0; }