SNICInterface for ThingPlug Example
Dependents: ThingPlug_WiFi_Example ThingPlug_WiFi_Example_2
Fork of SNICInterface by
Diff: SNIC_WifiInterface.cpp
- Revision:
- 31:15c22824cc46
- Parent:
- 29:6a0ba999597d
- Child:
- 36:f33fcf5975ab
--- a/SNIC_WifiInterface.cpp Tue May 27 01:33:04 2014 +0000 +++ b/SNIC_WifiInterface.cpp Thu May 29 03:23:21 2014 +0000 @@ -559,3 +559,87 @@ snic_core_p->freeCmdBuf( payload_buf ); return 0; } + +int C_SNIC_WifiInterface::setIPConfig( bool is_DHCP + , const char *ip_p, const char *mask_p, const char *gateway_p ) +{ + // Parameter check + if( is_DHCP == false ) + { + if( (ip_p == NULL) || (mask_p == NULL) ||(gateway_p == NULL) ) + { + printf("setIPConfig parameter error\r\n"); + return -1; + } + } + + C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance(); + C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand(); + + // Get buffer for response payload from MemoryPool + tagMEMPOOL_BLOCK_T *payload_buf = snic_core_p->allocCmdBuf(); + if( payload_buf == NULL ) + { + printf("setIPConfig payload_buf NULL\r\n"); + return -1; + } + + unsigned char *command_array = snic_core_p->getCommandBuf(); + unsigned int command_len; + if( is_DHCP == true ) + { + C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_DHCP_T req; + // Make request + req.cmd_sid = UART_CMD_SID_SNIC_IP_CONFIG_REQ; + req.seq = mUartRequestSeq++; + req.interface = 0; + req.dhcp = 1; + + // Preparation of command + command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req + , sizeof(C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_DHCP_T), payload_buf->buf, command_array ); + } + else + { + C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_STATIC_T req; + // Make request + req.cmd_sid = UART_CMD_SID_SNIC_IP_CONFIG_REQ; + req.seq = mUartRequestSeq++; + req.interface = 0; + req.dhcp = 0; + + // Set paramter of address + int addr_temp; + addr_temp = C_SNIC_UartMsgUtil::addrToInteger( ip_p ); + C_SNIC_UartMsgUtil::convertIntToByteAdday( addr_temp, (char *)req.ip_addr ); + addr_temp = C_SNIC_UartMsgUtil::addrToInteger( mask_p ); + C_SNIC_UartMsgUtil::convertIntToByteAdday( addr_temp, (char *)req.netmask ); + addr_temp = C_SNIC_UartMsgUtil::addrToInteger( gateway_p ); + C_SNIC_UartMsgUtil::convertIntToByteAdday( addr_temp, (char *)req.gateway ); + + // Preparation of command + command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req + , sizeof(C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_STATIC_T), payload_buf->buf, command_array ); + } + // Send uart command request + snic_core_p->sendUart( command_len, command_array ); + + int ret; + // Wait UART response + ret = uartCmdMgr_p->wait(); + if( ret != 0 ) + { + printf( "setIPConfig failed\r\n" ); + snic_core_p->freeCmdBuf( payload_buf ); + return -1; + } + + if( uartCmdMgr_p->getCommandStatus() != 0 ) + { + printf("setIPConfig status:%02x\r\n", uartCmdMgr_p->getCommandStatus()); + ret = -1; + } + + snic_core_p->freeCmdBuf( payload_buf ); + return 0; +}