/*JSON{ "type":"method", "class" : "WLAN", "name" : "setIP", "generate" : "jswrap_wlan_setIP", "description" : ["Set the current IP address for get an IP from DHCP (if no options object is specified).", "**Note:** Changes are written to non-volatile memory, but will only take effect after calling `wlan.reconnect()`" ], "params" : [ [ "options", "JsVar", "Object containing IP address options `{ ip : '1,2,3,4', subnet, gateway, dns }`, or do not supply an object in otder to force DHCP."] ], "return" : ["bool", "True on success"] }*/ bool jswrap_wlan_setIP(JsVar *wlanObj, JsVar *options) { NOT_USED(wlanObj); if (networkState != NETWORKSTATE_ONLINE) { jsError("Not connected to the internet"); return false; } tNetappIpconfigRetArgs ipconfig; netapp_ipconfig(&ipconfig); if (jsvIsObject(options)) { _wlan_getIP_set_address(options, "ip", &ipconfig.aucIP[0]); _wlan_getIP_set_address(options, "subnet", &ipconfig.aucSubnetMask[0]); _wlan_getIP_set_address(options, "gateway", &ipconfig.aucDefaultGateway[0]); _wlan_getIP_set_address(options, "dns", &ipconfig.aucDNSServer[0]); } else { // DHCP - just set all values to 0 *((unsigned long*)&ipconfig.aucIP[0]) = 0; *((unsigned long*)&ipconfig.aucSubnetMask) = 0; *((unsigned long*)&ipconfig.aucDefaultGateway) = 0; } return netapp_dhcp( (unsigned long *)&ipconfig.aucIP[0], (unsigned long *)&ipconfig.aucSubnetMask[0], (unsigned long *)&ipconfig.aucDefaultGateway[0], (unsigned long *)&ipconfig.aucDNSServer[0]) == 0; }
void tm_net_initialize_dhcp_server (void) { // Added by Hai Ta // // Network mask is assumed to be 255.255.255.0 // uint8_t pucSubnetMask[4], pucIP_Addr[4], pucIP_DefaultGWAddr[4], pucDNS[4]; pucDNS[0] = 0x0; pucDNS[1] = 0x0; pucDNS[2] = 0x0; pucDNS[3] = 0x0; pucSubnetMask[0] = 0; pucSubnetMask[1] = 0; pucSubnetMask[2] = 0; pucSubnetMask[3] = 0; pucIP_Addr[0] = 0; pucIP_Addr[1] = 0; pucIP_Addr[2] = 0; pucIP_Addr[3] = 0; // Use default gateway 192.168.1.1 here pucIP_DefaultGWAddr[0] = 0; pucIP_DefaultGWAddr[1] = 0; pucIP_DefaultGWAddr[2] = 0; pucIP_DefaultGWAddr[3] = 0; // In order for gethostbyname( ) to work, it requires DNS server to be configured prior to its usage // so I am gonna add full static // Netapp_Dhcp is used to configure the network interface, static or dynamic (DHCP). // In order to activate DHCP mode, aucIP, aucSubnetMask, aucDefaultGateway must be 0.The default mode of CC3000 is DHCP mode. netapp_dhcp((unsigned long *)&pucIP_Addr[0], (unsigned long *)&pucSubnetMask[0], (unsigned long *)&pucIP_DefaultGWAddr[0], (unsigned long *)&pucDNS[0]); }
void Clear_NetApp_Dhcp(void) { // Clear out the DHCP settings unsigned long pucSubnetMask = 0; unsigned long pucIP_Addr = 0; unsigned long pucIP_DefaultGWAddr = 0; unsigned long pucDNS = 0; netapp_dhcp(&pucIP_Addr, &pucSubnetMask, &pucIP_DefaultGWAddr, &pucDNS); }
//***************************************************************************** // //! initDriver //! //! \param None //! //! \return none //! //! \brief The function initializes a CC3000 device and triggers it to start operation // //***************************************************************************** int initDriver(void) { pio_init(); // Init GPIO's init_spi(); wlan_init( CC3000_UsynchCallback, sendWLFWPatch, sendDriverPatch, sendBootLoaderPatch, ReadWlanInterruptPin, WlanInterruptEnable, WlanInterruptDisable, WriteWlanPin); wlan_start(0); if (IP_ALLOC_METHOD == USE_STATIC_IP){// The DHCP setting shave been removed. pucSubnetMask[0] = 0xFF;// Subnet mask is assumed to be 255.255.255.0 pucSubnetMask[1] = 0xFF; pucSubnetMask[2] = 0xFF; pucSubnetMask[3] = 0x0; pucIP_Addr[0] = STATIC_IP_OCT1; // CC3000's IP pucIP_Addr[1] = STATIC_IP_OCT2; pucIP_Addr[2] = STATIC_IP_OCT3; pucIP_Addr[3] = STATIC_IP_OCT4; pucIP_DefaultGWAddr[0] = STATIC_IP_OCT1;// Default Gateway/Router IP pucIP_DefaultGWAddr[1] = STATIC_IP_OCT2; pucIP_DefaultGWAddr[2] = STATIC_IP_OCT3; pucIP_DefaultGWAddr[3] = 1; pucDNS[0] = STATIC_IP_OCT1;// We assume the router is also a DNS server pucDNS[1] = STATIC_IP_OCT2; pucDNS[2] = STATIC_IP_OCT3; pucDNS[3] = 1; netapp_dhcp((unsigned long *)pucIP_Addr, (unsigned long *)pucSubnetMask, (unsigned long *)pucIP_DefaultGWAddr, (unsigned long *)pucDNS); // reset the CC3000 to apply Static Setting wlan_stop(); __delay_cycles(6000000); wlan_start(0); } // Mask out all non-required events from CC3000 wlan_set_event_mask(HCI_EVNT_WLAN_KEEPALIVE|HCI_EVNT_WLAN_ASYNC_PING_REPORT); unsolicicted_events_timer_init(); // CC3000 has been initialized setCC3000MachineState(CC3000_INIT); return(0); }
//***************************************************************************** // //! DemoHandleUartCommand //! //! @param buffer //! //! @return none //! //! @brief The function handles commands arrived from CLI // //***************************************************************************** void DemoHandleUartCommand(unsigned char *usBuffer) { char *pcSsid, *pcData, *pcSockAddrAscii; unsigned long ulSsidLen, ulDataLength; volatile signed long iReturnValue; sockaddr tSocketAddr; socklen_t tRxPacketLength; unsigned char pucIP_Addr[4]; unsigned char pucIP_DefaultGWAddr[4]; unsigned char pucSubnetMask[4]; unsigned char pucDNS[4]; // usBuffer[0] contains always 0 // usBuffer[1] maps the command // usBuffer[2..end] optional parameters switch(usBuffer[1]) { // Start a smart configuration process case UART_COMMAND_CC3000_SIMPLE_CONFIG_START: StartSmartConfig(); break; // Start a WLAN Connect process case UART_COMMAND_CC3000_CONNECT: { ulSsidLen = atoc(usBuffer[2]); pcSsid = (char *)&usBuffer[3]; #ifndef CC3000_TINY_DRIVER wlan_connect(WLAN_SEC_UNSEC, pcSsid, ulSsidLen,NULL, NULL, 0); #else wlan_connect(pcSsid,ulSsidLen); #endif } break; // Handle open socket command case UART_COMMAND_SOCKET_OPEN: // wait for DHCP process to finish. if you are using a static IP address // please delete the wait for DHCP event - ulCC3000DHCP while ((ulCC3000DHCP == 0) || (ulCC3000Connected == 0)) { hci_unsolicited_event_handler(); SysCtlDelay(1000); } ulSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); break; // Handle close socket command case UART_COMMAND_SOCKET_CLOSE: closesocket(ulSocket); ulSocket = 0xFFFFFFFF; break; // Handle receive data command case UART_COMMAND_RCV_DATA: iReturnValue = recvfrom(ulSocket, pucCC3000_Rx_Buffer, CC3000_APP_BUFFER_SIZE, 0, &tSocketAddr, &tRxPacketLength); if (iReturnValue <= 0) { // No data received by device DispatcherUartSendPacket((unsigned char*)pucUARTNoDataString, sizeof(pucUARTNoDataString)); } else { // Send data to UART... DispatcherUartSendPacket(pucCC3000_Rx_Buffer, CC3000_APP_BUFFER_SIZE); } break; // Handle send data command case UART_COMMAND_SEND_DATA: // data pointer pcData = (char *)&usBuffer[4]; // data length to send ulDataLength = atoshort(usBuffer[2], usBuffer[3]); pcSockAddrAscii = (pcData + ulDataLength); // the family is always AF_INET tSocketAddr.sa_family = atoshort(pcSockAddrAscii[0], pcSockAddrAscii[1]); // the destination port tSocketAddr.sa_data[0] = ascii_to_char(pcSockAddrAscii[2], pcSockAddrAscii[3]); tSocketAddr.sa_data[1] = ascii_to_char(pcSockAddrAscii[4], pcSockAddrAscii[5]); // the destination IP address tSocketAddr.sa_data[2] = ascii_to_char(pcSockAddrAscii[6], pcSockAddrAscii[7]); tSocketAddr.sa_data[3] = ascii_to_char(pcSockAddrAscii[8], pcSockAddrAscii[9]); tSocketAddr.sa_data[4] = ascii_to_char(pcSockAddrAscii[10], pcSockAddrAscii[11]); tSocketAddr.sa_data[5] = ascii_to_char(pcSockAddrAscii[12], pcSockAddrAscii[13]); sendto(ulSocket, pcData, ulDataLength, 0, &tSocketAddr, sizeof(sockaddr)); break; // Handle bind command case UART_COMMAND_BSD_BIND: tSocketAddr.sa_family = AF_INET; // the source port tSocketAddr.sa_data[0] = ascii_to_char(usBuffer[2], usBuffer[3]); tSocketAddr.sa_data[1] = ascii_to_char(usBuffer[4], usBuffer[5]); // all 0 IP address memset (&tSocketAddr.sa_data[2], 0, 4); bind(ulSocket, &tSocketAddr, sizeof(sockaddr)); break; // Handle IP configuration command case UART_COMMAND_IP_CONFIG: // Network mask is assumed to be 255.255.255.0 pucSubnetMask[0] = 0xFF; pucSubnetMask[1] = 0xFF; pucSubnetMask[2] = 0xFF; pucSubnetMask[3] = 0x0; pucIP_Addr[0] = ascii_to_char(usBuffer[2], usBuffer[3]); pucIP_Addr[1] = ascii_to_char(usBuffer[4], usBuffer[5]); pucIP_Addr[2] = ascii_to_char(usBuffer[6], usBuffer[7]); pucIP_Addr[3] = ascii_to_char(usBuffer[8], usBuffer[9]); pucIP_DefaultGWAddr[0] = ascii_to_char(usBuffer[10], usBuffer[11]); pucIP_DefaultGWAddr[1] = ascii_to_char(usBuffer[12], usBuffer[13]); pucIP_DefaultGWAddr[2] = ascii_to_char(usBuffer[14], usBuffer[15]); pucIP_DefaultGWAddr[3] = ascii_to_char(usBuffer[16], usBuffer[17]); pucDNS[0] = 0; pucDNS[1] = 0; pucDNS[2] = 0; pucDNS[3] = 0; netapp_dhcp((unsigned long *)pucIP_Addr, (unsigned long *)pucSubnetMask, (unsigned long *)pucIP_DefaultGWAddr, (unsigned long *)pucDNS); break; // Handle WLAN disconnect command case UART_COMMAND_CC3000_DISCONNECT: wlan_disconnect(); break; // Handle erase policy command case UART_COMMAND_CC3000_DEL_POLICY: wlan_ioctl_set_connection_policy(DISABLE, DISABLE, DISABLE); break; // Handle send DNS Discovery command case UART_COMMAND_SEND_DNS_ADVERTIZE: if(ulCC3000DHCP) { mdnsAdvertiser(1,device_name,strlen(device_name)); } break; default: DispatcherUartSendPacket((unsigned char*)pucUARTIllegalCommandString, sizeof(pucUARTIllegalCommandString)); break; } // Send a response - the command handling has finished DispatcherUartSendPacket((unsigned char *)(pucUARTCommandDoneString), sizeof(pucUARTCommandDoneString)); }
/* mgmt mutex MUST be locked by caller */ static clarityError clarityMgmtAttemptActivate_mtxext(void) { clarityError rtn = CLARITY_SUCCESS; #if 0 uint32_t ip = 0; uint32_t subnet = 0; uint32_t gateway = 0; uint32_t dns = 0; #endif if (mgmtData.active == true) { return CLARITY_SUCCESS; } #if 0 if (mgmtData.ap->deviceIp.isStatic == true) { ip = htonl(mgmtData.ap->deviceIp.ip); subnet = htonl(mgmtData.ap->deviceIp.subnet); gateway = htonl(mgmtData.ap->deviceIp.gateway); dns = htonl(mgmtData.ap->deviceIp.dns); } #endif clarityCC3000ApiLock(); wlan_start(0); mgmtData.active = true; #if 0 if (netapp_dhcp(&ip, &subnet, &gateway, &dns) != 0) { CLAR_PRINT_ERROR(); rtn = CLARITY_ERROR_CC3000_NETAPP; } wlan_disconnect(); wlan_stop(); chThdSleep(MS2ST(200)); wlan_start(0); #endif clarityCC3000ApiUnlock(); if ((rtn = connectToWifi_mtxext()) != CLARITY_SUCCESS) { CLAR_PRINT_ERROR(); } if (rtn != CLARITY_SUCCESS) { clarityCC3000ApiLock(); wlan_disconnect(); wlan_stop(); clarityCC3000ApiUnlock(); mgmtData.active = false; } return rtn; }
void wifi_connect() { uint8_t cc3000MajorFirmwareVersion, cc3000MinorFirmwareVersion; cc3000_get_firmware_version(&cc3000MajorFirmwareVersion, &cc3000MinorFirmwareVersion); debug_write("?major: 0x"); debug_write_u8(cc3000MajorFirmwareVersion, 16); debug_write_line(""); debug_write("?minor: 0x"); debug_write_u8(cc3000MinorFirmwareVersion, 16); debug_write_line(""); if (cc3000MajorFirmwareVersion != 0x01 || cc3000MinorFirmwareVersion != 0x18) { debug_write_line("?Wrong firmware version!"); while (1); } cc3000_display_mac_address(); debug_write_line("?Deleting old connection profiles"); if (cc3000_delete_profiles() != 0) { debug_write_line("?Failed!"); while (1); } #ifdef STATIC_IP_ADDRESS unsigned long aucIP = STATIC_IP_ADDRESS; unsigned long aucSubnetMask = STATIC_SUBNET_MASK; unsigned long aucDefaultGateway = STATIC_DEFAULT_GATEWAY; unsigned long aucDNSServer = STATIC_DNS_SERVER; if (netapp_dhcp(&aucIP, &aucSubnetMask, &aucDefaultGateway, &aucDNSServer) != 0) { debug_write_line("?netapp_dhcp Failed!"); while (1); } #else unsigned long aucIP = 0; unsigned long aucSubnetMask = 0; unsigned long aucDefaultGateway = 0; unsigned long aucDNSServer = 0; if (netapp_dhcp(&aucIP, &aucSubnetMask, &aucDefaultGateway, &aucDNSServer) != 0) { debug_write_line("?netapp_dhcp Failed!"); while (1); } #endif // Attempt to connect to an access point char *ssid = WLAN_SSID; /* Max 32 chars */ debug_write("?Attempting to connect to "); debug_write_line(ssid); // NOTE: Secure connections are not available in 'Tiny' mode! if (cc3000_connect_to_ap(WLAN_SSID, WLAN_PASS, WLAN_SECURITY) != 0) { debug_write_line("?Connect Failed!"); while (1); } debug_write_line("?Connected!"); #ifndef STATIC_IP_ADDRESS // Wait for DHCP to complete debug_write_line("?Request DHCP"); while (cc3000_check_dhcp() != 0) { delay_ms(100); } #endif while (!cc3000_is_connected()) { delay_ms(100); } cc3000_display_ipconfig(); }