void WiFiTask(void) { #if defined (WF_USE_POWER_SAVE_FUNCTIONS) //-------------------------------------------------------------------------- // if not waiting for a mgmt response and the application wants PS-Poll Mode //-------------------------------------------------------------------------- if ((!g_WaitingForMgmtResponse) && (GetAppPowerSaveMode() == TRUE)) { // else if changed from connected to disconnected, or vice-versa if (g_WiFiConnectionChanged == TRUE) { g_WiFiConnectionChanged = FALSE; // if lost connection if (g_WiFiConnection == FALSE) { WFConfigureLowPowerMode(WF_LOW_POWER_MODE_OFF); } // else connected (or reconnected) else { // if not using DHCP if (!DHCPIsEnabled(0)) { WF_PsPollEnable(g_rxDtim); WFConfigureLowPowerMode(WF_LOW_POWER_MODE_ON); } // note: if using DHCP, another case will reenable PS-Poll mode } } // else if app is using DHCP and we just got an IP address via DHCP else if (DHCPIsEnabled(0) && (g_DhcpSuccessful == TRUE)) { g_DhcpSuccessful = FALSE; WF_PsPollEnable(g_rxDtim); WFConfigureLowPowerMode(WF_LOW_POWER_MODE_ON); } // if application wants PS-Poll, but the driver disabled it to send a message (and not waiting for DHCP) else if ( g_WiFiConnection == TRUE && isSleepNeeded() && !isDhcpInProgress() ) { ClearSleepNeeded(); WFConfigureLowPowerMode(WF_LOW_POWER_MODE_ON); } } #endif /* WF_USE_POWER_SAVE_FUNCTIONS */ }
/***************************************************************************** * FUNCTION: IfconfigDisplayStatus * * RETURNS: None * * PARAMS: None * * NOTES: Responds to the user invoking ifconfig with no parameters *****************************************************************************/ static void IfconfigDisplayStatus(void) { NET_CONFIG *p_netConfig; p_netConfig = GetNetworkConfig(); sprintf( (char *) g_ConsoleContext.txBuf, "\tIP addr: %d.%d.%d.%d", p_netConfig->MyIPAddr.v[0], p_netConfig->MyIPAddr.v[1], p_netConfig->MyIPAddr.v[2], p_netConfig->MyIPAddr.v[3] ); WFConsolePrintStr( (char *) g_ConsoleContext.txBuf , true); sprintf( (char *) g_ConsoleContext.txBuf, "\tMAC addr: %02X:%02X:%02X:%02X:%02X:%02X", p_netConfig->MyMACAddr.v[0], p_netConfig->MyMACAddr.v[1], p_netConfig->MyMACAddr.v[2], p_netConfig->MyMACAddr.v[3], p_netConfig->MyMACAddr.v[4], p_netConfig->MyMACAddr.v[5]); WFConsolePrintStr( (char *) g_ConsoleContext.txBuf , true); sprintf( (char *) g_ConsoleContext.txBuf, "\tNetmask: %d.%d.%d.%d", p_netConfig->MyMask.v[0], p_netConfig->MyMask.v[1], p_netConfig->MyMask.v[2], p_netConfig->MyMask.v[3] ); WFConsolePrintStr( (char *) g_ConsoleContext.txBuf , true); sprintf( (char *) g_ConsoleContext.txBuf, "\tGateway: %d.%d.%d.%d", p_netConfig->MyGateway.v[0], p_netConfig->MyGateway.v[1], p_netConfig->MyGateway.v[2], p_netConfig->MyGateway.v[3] ); WFConsolePrintStr( (char *) g_ConsoleContext.txBuf , true); #if defined(TCPIP_STACK_USE_DHCP_CLIENT) if ( DHCPIsEnabled(0) ) WFConsolePrintStr("\tDHCP: Started", true); else WFConsolePrintStr("\tDHCP: Stopped", true); #endif }
/***************************************************************************** * FUNCTION: IfconfigDisplayStatus * * RETURNS: None * * PARAMS: None * * NOTES: Responds to the user invoking ifconfig with no parameters *****************************************************************************/ static void IfconfigDisplayStatus(void) { UINT8 p_mac[6]; sprintf( (char *) g_ConsoleContext.txBuf, "\tIP addr: %d.%d.%d.%d", AppConfig.MyIPAddr.v[0], AppConfig.MyIPAddr.v[1], AppConfig.MyIPAddr.v[2], AppConfig.MyIPAddr.v[3] ); WFConsolePrintRamStr( (char *) g_ConsoleContext.txBuf , TRUE); WF_GetMacAddress(p_mac); sprintf( (char *) g_ConsoleContext.txBuf, "\tMAC addr: %02X:%02X:%02X:%02X:%02X:%02X", p_mac[0], p_mac[1], p_mac[2], p_mac[3], p_mac[4], p_mac[5]); WFConsolePrintRamStr( (char *) g_ConsoleContext.txBuf , TRUE); sprintf( (char *) g_ConsoleContext.txBuf, "\tNetmask: %d.%d.%d.%d", AppConfig.MyMask.v[0], AppConfig.MyMask.v[1], AppConfig.MyMask.v[2], AppConfig.MyMask.v[3] ); WFConsolePrintRamStr( (char *) g_ConsoleContext.txBuf , TRUE); sprintf( (char *) g_ConsoleContext.txBuf, "\tGateway: %d.%d.%d.%d", AppConfig.MyGateway.v[0], AppConfig.MyGateway.v[1], AppConfig.MyGateway.v[2], AppConfig.MyGateway.v[3] ); WFConsolePrintRamStr( (char *) g_ConsoleContext.txBuf , TRUE); #if defined(STACK_USE_DHCP_CLIENT) if ( DHCPIsEnabled(0) ) WFConsolePrintRomStr("\tDHCP: Started", TRUE); else WFConsolePrintRomStr("\tDHCP: Stopped", TRUE); #endif }
/***************************************************************************** * FUNCTION: WF_Init * * RETURNS: None * * PARAMS: * N/A. * * * NOTES: This function must be called once prior to calling any other WF... * functions. This function initializes the Wifi Driver internal State. * It also verifies functionality of the lower level SPI driver and * connected hardware. *****************************************************************************/ void WF_Init(void) { tWFDeviceInfo deviceInfo; WFHardwareInit(); RawInit(); WFEnableMRF24WB0MMode(); WF_GetDeviceInfo(&deviceInfo); // if MRF24WB #if !defined(MRF24WG) WF_ASSERT(deviceInfo.romVersion == 0x12); WF_ASSERT(deviceInfo.patchVersion >= 0x02); if (deviceInfo.romVersion == 0x12 && deviceInfo.patchVersion >= 0x09) { gRFModuleVer1209orLater = TRUE; } #else // must be a MRF24WG WF_ASSERT(deviceInfo.romVersion == 0x30 || deviceInfo.romVersion == 0x31); #endif /* send init messages to MRF24W */ WF_LibInitialize(); #if defined(WF_CONSOLE) WFConsoleInit(); #if defined(WF_CONSOLE_DEMO) IperfAppInit(); #endif #endif if(DHCPIsEnabled(0)) { SetDhcpProgressState(); } }
/***************************************************************************** * FUNCTION: do_ifconfig_cmd * * RETURNS: None * * PARAMS: None * * NOTES: Responds to the user invoking ifconfig *****************************************************************************/ void do_ifconfig_cmd(void) { uint8_t macAddress[6]; uint8_t conState, cpId; IP_ADDR ipAddress; // if user only typed in ifconfig with no other parameters if (ARGC == 1u) { IfconfigDisplayStatus(); return; } if (WF_hibernate.state) { WFConsolePrintRomStr("The Wi-Fi module is in hibernate mode - command failed.", true); return; } #if defined(WF_CM_DEBUG) else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "info") ) { uint8_t i; tWFCMInfoFSMStats cm_stats; WF_CMInfoGetFSMStats(&cm_stats); for (i = 0; i < 12; i++) { sprintf( (char *) g_ConsoleContext.txBuf, "[%02X]: %02X%02X %02X%02X", i, cm_stats.byte[i*4 + 0], cm_stats.byte[i*4 + 1], cm_stats.byte[i*4 + 2], cm_stats.byte[i*4 + 3] ); WFConsolePrintRamStr( (char *) g_ConsoleContext.txBuf , true); } } else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "scan") ) { if (WF_Scan(1) != WF_SUCCESS) // scan, using CP 1 WFConsolePrintRomStr("Scan failed", true); } else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "scanget") ) //"scangetresult" { tWFScanResult pScanResult[1]; WF_ScanGetResult(0, pScanResult); } else if ( (ARGC == 2u) && !strcmp((char *) ARGV[1], "cpgete") ) //"cpgetelements" { tWFCPElements pCPElements[1]; WF_CPGetElements(1, pCPElements); } #endif // else if 2 arguments and the second arg is IP address else if ( (ARGC == 2u) && (StringToIPAddress((uint8_t*)ARGV[1], &ipAddress)) ) { #if defined(STACK_USE_DHCP_CLIENT) if (DHCPIsEnabled(0)) { WFConsolePrintRomStr("Static IP address should not be set with DHCP enabled", true); return; } #endif AppConfig.MyIPAddr.v[0] = ipAddress.v[0]; AppConfig.MyIPAddr.v[1] = ipAddress.v[1]; AppConfig.MyIPAddr.v[2] = ipAddress.v[2]; AppConfig.MyIPAddr.v[3] = ipAddress.v[3]; /* Microchip DHCP client clobbers static ip on every iteration of loop, even if dhcp is turned off*/ AppConfig.DefaultIPAddr.v[0] = ipAddress.v[0]; AppConfig.DefaultIPAddr.v[1] = ipAddress.v[1]; AppConfig.DefaultIPAddr.v[2] = ipAddress.v[2]; AppConfig.DefaultIPAddr.v[3] = ipAddress.v[3]; LCDDisplayIPValue(AppConfig.MyIPAddr); } // else if 2 args and second arg is MAC address else if ( (ARGC == 2u) && isMacAddress(ARGV[1], macAddress)) { /* Can only set MAC address in idle state */ WF_CMGetConnectionState(&conState, &cpId); if ( conState != WF_CSTATE_NOT_CONNECTED ) { WFConsolePrintRomStr("HW MAC address can only be set in idle mode", true); return; } WF_SetMacAddress( macAddress ); AppConfig.MyMACAddr.v[0] = macAddress[0]; AppConfig.MyMACAddr.v[1] = macAddress[1]; AppConfig.MyMACAddr.v[2] = macAddress[2]; AppConfig.MyMACAddr.v[3] = macAddress[3]; AppConfig.MyMACAddr.v[4] = macAddress[4]; AppConfig.MyMACAddr.v[5] = macAddress[5]; } else if ( (2u <= ARGC) && (strcmppgm2ram((char *)ARGV[1], (ROM FAR char *)"netmask") == 0) ) { if (ARGC != 3u) { missingValue(); return; } #if defined(STACK_USE_DHCP_CLIENT) if ( DHCPIsEnabled(0) ) { WFConsolePrintRomStr( "The Netmask should not be set with DHCP enabled", true); return; } #endif if ( !StringToIPAddress((uint8_t*)ARGV[2], &ipAddress) ) { WFConsolePrintRomStr("Invalid netmask value", true); return; } AppConfig.MyMask.v[0] = ipAddress.v[0]; AppConfig.MyMask.v[1] = ipAddress.v[1]; AppConfig.MyMask.v[2] = ipAddress.v[2]; AppConfig.MyMask.v[3] = ipAddress.v[3]; /* Microchip DHCP client clobbers static netmask on every iteration of loop, even if dhcp is turned off*/ AppConfig.DefaultMask.v[0] = ipAddress.v[0]; AppConfig.DefaultMask.v[1] = ipAddress.v[1]; AppConfig.DefaultMask.v[2] = ipAddress.v[2]; AppConfig.DefaultMask.v[3] = ipAddress.v[3]; } else if ( (2u <= ARGC) && (strcmppgm2ram((char *)ARGV[1], (ROM FAR char *)"gateway") == 0) ) { if (ARGC != 3u) { missingValue(); return; } if ( !StringToIPAddress((uint8_t*)ARGV[2], &ipAddress) ) { WFConsolePrintRomStr("Invalid gateway value", true); return; } AppConfig.MyGateway.v[0] = ipAddress.v[0]; AppConfig.MyGateway.v[1] = ipAddress.v[1]; AppConfig.MyGateway.v[2] = ipAddress.v[2]; AppConfig.MyGateway.v[3] = ipAddress.v[3]; } else if ( (2u <= ARGC) && (strcmppgm2ram((char*)ARGV[1], "auto-dhcp") == 0) ) { if (ARGC != 3u) { missingValue(); return; } #if defined(STACK_USE_DHCP_CLIENT) if (strcmppgm2ram((char*)ARGV[2], "start") == 0) { setDHCPState(true); } else if (strcmppgm2ram((char*)ARGV[2], "stop") == 0) { setDHCPState(false); } else #endif { WFConsolePrintRomStr(" Invalid dhcp param", true); return; } } else { notHandledParam(1); } }
static int CommandNetInfo(_CMDIO_DEV_NODE* pCmdIO, int argc, char** argv) { int i; TCPIP_NET_HANDLE netH; IPV4_ADDR ipAddr; const MAC_ADDR* pMac; TCPIP_NET_IF* pNetIf; TCPIP_STACK_MODULE macID; const char *hostName, *msgAdd; const void* cmdIoParam = pCmdIO->cmdIoParam; #if defined(TCPIP_STACK_USE_IPV6) IPV6_ADDR_STRUCT currIpv6Add; IPV6_ADDR_HANDLE prevHandle, nextHandle; char addrBuff[44]; #else char addrBuff[20]; #endif // defined(TCPIP_STACK_USE_IPV6) if (argc > 2) { (*pCmdIO->pCmdApi->msg)(cmdIoParam, "Usage: netinfo\r\n"); (*pCmdIO->pCmdApi->msg)(cmdIoParam, "Ex: netinfo\r\n"); return false; } for (i=0; i<initialNetIfs; i++) { netH = TCPIP_STACK_IxToNet(i); pNetIf = _TCPIPStackHandleToNet(netH); macID = _TCPIPStackNetMacId(pNetIf); (*pCmdIO->pCmdApi->print)(cmdIoParam, "---------- Interface <%s> ---------- \r\n", _TCPIPStackMACIdToString(macID)); if(!TCPIP_STACK_IsNetUp(netH)) { (*pCmdIO->pCmdApi->msg)(cmdIoParam, "Interface is down\r\n"); continue; } hostName = TCPIP_STACK_NetBIOSName(netH); #if defined(TCPIP_STACK_USE_NBNS) (*pCmdIO->pCmdApi->print)(cmdIoParam, "Host Name: %s - NBNS enabled\r\n", hostName); #else (*pCmdIO->pCmdApi->print)(cmdIoParam, "Host Name: %s - NBNS disabled \r\n", hostName); #endif // defined(TCPIP_STACK_USE_NBNS) ipAddr.Val = TCPIP_STACK_NetAddress(netH); TCPIP_HELPER_IPAddressToString(&ipAddr, addrBuff, sizeof(addrBuff)); (*pCmdIO->pCmdApi->print)(cmdIoParam, "IPv4 Address: %s\r\n", addrBuff); ipAddr.Val = TCPIP_STACK_NetMask(netH); TCPIP_HELPER_IPAddressToString(&ipAddr, addrBuff, sizeof(addrBuff)); (*pCmdIO->pCmdApi->print)(cmdIoParam, "Mask: %s\r\n", addrBuff); ipAddr.Val = TCPIP_STACK_NetGatewayAddress(netH); TCPIP_HELPER_IPAddressToString(&ipAddr, addrBuff, sizeof(addrBuff)); (*pCmdIO->pCmdApi->print)(cmdIoParam, "Gateway: %s\r\n", addrBuff); ipAddr.Val = TCPIP_STACK_NetPriDNSAddress(netH); TCPIP_HELPER_IPAddressToString(&ipAddr, addrBuff, sizeof(addrBuff)); (*pCmdIO->pCmdApi->print)(cmdIoParam, "DNS: %s\r\n", addrBuff); pMac = (const MAC_ADDR*)TCPIP_STACK_NetMacAddress(netH); TCPIP_HELPER_MACAddressToString(pMac, addrBuff, sizeof(addrBuff)); (*pCmdIO->pCmdApi->print)(cmdIoParam, "MAC Address: %s\r\n", addrBuff); // display IPv6 addresses #if defined(TCPIP_STACK_USE_IPV6) (*pCmdIO->pCmdApi->msg)(cmdIoParam, "IPv6 Unicast addresses:\r\n"); prevHandle = 0; do { nextHandle = TCPIP_STACK_NetIPv6AddressGet(netH, IPV6_ADDR_TYPE_UNICAST, &currIpv6Add, prevHandle); if(nextHandle) { // have a valid address; display it TCPIP_HELPER_IPv6AddressToString(&currIpv6Add.address, addrBuff, sizeof(addrBuff)); (*pCmdIO->pCmdApi->print)(cmdIoParam, " %s\r\n", addrBuff); prevHandle = nextHandle; } }while(nextHandle != 0); if(prevHandle == 0) { // no valid address (*pCmdIO->pCmdApi->msg)(cmdIoParam, " Unknown\r\n"); } (*pCmdIO->pCmdApi->msg)(cmdIoParam, "IPv6 Multicast addresses:\r\n"); prevHandle = 0; do { nextHandle = TCPIP_STACK_NetIPv6AddressGet(netH, IPV6_ADDR_TYPE_MULTICAST, &currIpv6Add, prevHandle); if(nextHandle) { // have a valid address; display it TCPIP_HELPER_IPv6AddressToString(&currIpv6Add.address, addrBuff, sizeof(addrBuff)); (*pCmdIO->pCmdApi->print)(cmdIoParam, " %s\r\n", addrBuff); prevHandle = nextHandle; } }while(nextHandle != 0); if(prevHandle == 0) { // no valid address (*pCmdIO->pCmdApi->msg)(cmdIoParam, " Unknown\r\n"); } #endif // defined(TCPIP_STACK_USE_IPV6) if(DHCPIsEnabled(netH)) { msgAdd = "dhcp"; } else if(ZCLLIsEnabled(netH)) { msgAdd = "zcll"; } else if(DHCPServerIsEnabled(netH)) { msgAdd = "dhcps"; } else { msgAdd = "default IP address"; } (*pCmdIO->pCmdApi->print)(cmdIoParam, "%s is ON\r\n", msgAdd); } return true; }