/***************************************************************************** * FUNCTION: do_ifconfig_cmd * * RETURNS: None * * PARAMS: None * * NOTES: Responds to the user invoking ifconfig *****************************************************************************/ tZGVoidReturn do_ifconfig_cmd(tZGVoidInput) { tZGU8 i; tZGU8 address[6]; #if defined(ZG_CONFIG_DHCP) && defined(STACK_USE_DHCP_CLIENT) tZGU16 tmp[4]; // uip requires these be 2-byte words. #endif gLineParseState = kZGWaitingForParamKeyword; // if user only typed in ifconfig with no other parameters if (ARGC == 1u) { IfconfigDisplayStatus(); } // else if 2 arguments and the second arg is IP address else if ( (ARGC == 2u) && (isIPAddress(ARGV[1], address)) ) { if ( ZG_GET_DHCP_STATE() == DHCP_ENABLED ) { sprintf( (char *) g_ConsoleContext.txBuf, "Static IP address should not be set with DHCP enabled.\n\r"); ZG_PUTSUART( (char *) g_ConsoleContext.txBuf ); return; } AppConfig.MyIPAddr.v[0] = address[0]; AppConfig.MyIPAddr.v[1] = address[1]; AppConfig.MyIPAddr.v[2] = address[2]; AppConfig.MyIPAddr.v[3] = address[3]; /* Microchip DHCP client clobbers static ip on every iteration of loop, even if dhcp is turned off*/ AppConfig.DefaultIPAddr.v[0] = address[0]; AppConfig.DefaultIPAddr.v[1] = address[1]; AppConfig.DefaultIPAddr.v[2] = address[2]; AppConfig.DefaultIPAddr.v[3] = address[3]; #ifdef USE_LCD LCDDisplayIPValue(AppConfig.MyIPAddr); #endif } // else if 2 args and second arg is MAC address else if ( (ARGC == 2u) && isMacAddress(ARGV[1], address)) { /* Can only set MAC address in idle state */ if ( ZG_IS_CONNECTED() == kZGBoolTrue ) { sprintf( (char *) g_ConsoleContext.txBuf, "HW MAC address can only be set in idle mode"); ZG_PUTSUART( (char *) g_ConsoleContext.txBuf ); return; } /* update G2100 */ ZG_SET_MAC_ADDR( address ); } // else loop through each parameter else { // parse each param and set state variables for (i = 1; i < ARGC; ++i) { switch (gLineParseState) { case kZGWaitingForParamKeyword: if ( !getParam(i) ) { return; } break; case kZGWaitingForNetmaskValue: if ( ZG_GET_DHCP_STATE() == DHCP_ENABLED ) { sprintf( (char *) g_ConsoleContext.txBuf, "The Netmask should not be set with DHCP enabled.\n\r"); ZG_PUTSUART( (char *) g_ConsoleContext.txBuf ); return; } if ( !isIPAddress(ARGV[i], address) ) { sprintf( (char *) g_ConsoleContext.txBuf, "Invalid netmask value"); ZG_PUTSUART( (char *) g_ConsoleContext.txBuf ); return; } AppConfig.MyMask.v[0] = address[0]; AppConfig.MyMask.v[1] = address[1]; AppConfig.MyMask.v[2] = address[2]; AppConfig.MyMask.v[3] = address[3]; /* Microchip DHCP client clobbers static netmask on every iteration of loop, even if dhcp is turned off*/ AppConfig.DefaultMask.v[0] = address[0]; AppConfig.DefaultMask.v[1] = address[1]; AppConfig.DefaultMask.v[2] = address[2]; AppConfig.DefaultMask.v[3] = address[3]; gLineParseState = kZGWaitingForParamKeyword; break; #if defined(ZG_CONFIG_DHCP) && defined(STACK_USE_DHCP_CLIENT) case kZGWaitingForDHCP: /* buf[4] contains DHCP enable/disable enum */ if ( !ExtractandValidateDHCP(ARGV[i], (tZGU8 *) &tmp[0]) ) { return; } ZG_SET_DHCP_STATE( (tZGBool) tmp[0] ); gLineParseState = kZGWaitingForParamKeyword; break; #endif case kZGWaitingForGateway: if ( !isIPAddress(ARGV[i], address) ) { sprintf( (char *) g_ConsoleContext.txBuf, "Invalid gateway value"); ZG_PUTSUART( (char *) g_ConsoleContext.txBuf ); return; } AppConfig.MyGateway.v[0] = address[0]; AppConfig.MyGateway.v[1] = address[1]; AppConfig.MyGateway.v[2] = address[2]; AppConfig.MyGateway.v[3] = address[3]; // There is no such thing as AppConfig.DefaultGateway gLineParseState = kZGWaitingForParamKeyword; break; } // end switch // ZGConsolePrintf("%s ", ARGV[i]); } // end for } if (gLineParseState != (tZGU8)kZGWaitingForParamKeyword) { sprintf( (char *) g_ConsoleContext.txBuf, "Missing value after last parameter"); ZG_PUTSUART( (char *) g_ConsoleContext.txBuf ); } }
/***************************************************************************** * 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); } }