Websocket_Sample for MurataTypeYD

Dependencies:   mbed picojson

Committer:
komoritan
Date:
Thu Mar 12 12:14:38 2015 +0000
Revision:
0:14bd24b5a77f
fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
komoritan 0:14bd24b5a77f 1 /* Copyright (C) 2014 Murata Manufacturing Co.,Ltd., MIT License
komoritan 0:14bd24b5a77f 2 * muRata, SWITCH SCIENCE Wi-FI module TypeYD-SNIC UART.
komoritan 0:14bd24b5a77f 3 *
komoritan 0:14bd24b5a77f 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
komoritan 0:14bd24b5a77f 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
komoritan 0:14bd24b5a77f 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
komoritan 0:14bd24b5a77f 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
komoritan 0:14bd24b5a77f 8 * furnished to do so, subject to the following conditions:
komoritan 0:14bd24b5a77f 9 *
komoritan 0:14bd24b5a77f 10 * The above copyright notice and this permission notice shall be included in all copies or
komoritan 0:14bd24b5a77f 11 * substantial portions of the Software.
komoritan 0:14bd24b5a77f 12 *
komoritan 0:14bd24b5a77f 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
komoritan 0:14bd24b5a77f 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
komoritan 0:14bd24b5a77f 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
komoritan 0:14bd24b5a77f 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
komoritan 0:14bd24b5a77f 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
komoritan 0:14bd24b5a77f 18 */
komoritan 0:14bd24b5a77f 19 #include "SNIC_WifiInterface.h"
komoritan 0:14bd24b5a77f 20 #include "SNIC_UartMsgUtil.h"
komoritan 0:14bd24b5a77f 21
komoritan 0:14bd24b5a77f 22 #define UART_CONNECT_BUF_SIZE 512
komoritan 0:14bd24b5a77f 23 unsigned char gCONNECT_BUF[UART_CONNECT_BUF_SIZE];
komoritan 0:14bd24b5a77f 24 static char ip_addr[17] = "\0";
komoritan 0:14bd24b5a77f 25
komoritan 0:14bd24b5a77f 26 C_SNIC_WifiInterface::C_SNIC_WifiInterface( PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud)
komoritan 0:14bd24b5a77f 27 {
komoritan 0:14bd24b5a77f 28 mUART_tx = tx;
komoritan 0:14bd24b5a77f 29 mUART_rx = rx;
komoritan 0:14bd24b5a77f 30 mUART_cts = cts;
komoritan 0:14bd24b5a77f 31 mUART_rts = rts;;
komoritan 0:14bd24b5a77f 32 mUART_baud = baud;
komoritan 0:14bd24b5a77f 33 mModuleReset = reset;
komoritan 0:14bd24b5a77f 34 }
komoritan 0:14bd24b5a77f 35
komoritan 0:14bd24b5a77f 36 C_SNIC_WifiInterface::~C_SNIC_WifiInterface()
komoritan 0:14bd24b5a77f 37 {
komoritan 0:14bd24b5a77f 38 }
komoritan 0:14bd24b5a77f 39
komoritan 0:14bd24b5a77f 40 int C_SNIC_WifiInterface::init()
komoritan 0:14bd24b5a77f 41 {
komoritan 0:14bd24b5a77f 42 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 43 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 44
komoritan 0:14bd24b5a77f 45 /* Initialize UART */
komoritan 0:14bd24b5a77f 46 snic_core_p->initUart( mUART_tx, mUART_rx, mUART_baud );
komoritan 0:14bd24b5a77f 47
komoritan 0:14bd24b5a77f 48 /* Module reset */
komoritan 0:14bd24b5a77f 49 snic_core_p->resetModule( mModuleReset );
komoritan 0:14bd24b5a77f 50
komoritan 0:14bd24b5a77f 51 wait(1);
komoritan 0:14bd24b5a77f 52 /* Initialize SNIC API */
komoritan 0:14bd24b5a77f 53 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 54 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 55 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 56 {
komoritan 0:14bd24b5a77f 57 DEBUG_PRINT("snic_init payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 58 return -1;
komoritan 0:14bd24b5a77f 59 }
komoritan 0:14bd24b5a77f 60
komoritan 0:14bd24b5a77f 61 C_SNIC_Core::tagSNIC_INIT_REQ_T req;
komoritan 0:14bd24b5a77f 62 // Make request
komoritan 0:14bd24b5a77f 63 req.cmd_sid = UART_CMD_SID_SNIC_INIT_REQ;
komoritan 0:14bd24b5a77f 64 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 65 req.buf_size[0] = 0x08;
komoritan 0:14bd24b5a77f 66 req.buf_size[1] = 0x00;
komoritan 0:14bd24b5a77f 67
komoritan 0:14bd24b5a77f 68 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 69 unsigned int command_len;
komoritan 0:14bd24b5a77f 70 // Preparation of command
komoritan 0:14bd24b5a77f 71 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 72 , sizeof(C_SNIC_Core::tagSNIC_INIT_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 73
komoritan 0:14bd24b5a77f 74 // Send uart command request
komoritan 0:14bd24b5a77f 75 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 76
komoritan 0:14bd24b5a77f 77 int ret;
komoritan 0:14bd24b5a77f 78 // Wait UART response
komoritan 0:14bd24b5a77f 79 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 80 if( ret != 0 )
komoritan 0:14bd24b5a77f 81 {
komoritan 0:14bd24b5a77f 82 DEBUG_PRINT( "snic_init failed\r\n" );
komoritan 0:14bd24b5a77f 83 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 84 return -1;
komoritan 0:14bd24b5a77f 85 }
komoritan 0:14bd24b5a77f 86
komoritan 0:14bd24b5a77f 87 if( uartCmdMgr_p->getCommandStatus() != 0 )
komoritan 0:14bd24b5a77f 88 {
komoritan 0:14bd24b5a77f 89 DEBUG_PRINT("snic_init status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
komoritan 0:14bd24b5a77f 90 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 91 return -1;
komoritan 0:14bd24b5a77f 92 }
komoritan 0:14bd24b5a77f 93 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 94
komoritan 0:14bd24b5a77f 95 return ret;
komoritan 0:14bd24b5a77f 96 }
komoritan 0:14bd24b5a77f 97
komoritan 0:14bd24b5a77f 98 int C_SNIC_WifiInterface::getFWVersion( unsigned char *version_p )
komoritan 0:14bd24b5a77f 99 {
komoritan 0:14bd24b5a77f 100 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 101 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 102
komoritan 0:14bd24b5a77f 103 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 104 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 105 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 106 {
komoritan 0:14bd24b5a77f 107 DEBUG_PRINT("getFWVersion payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 108 return -1;
komoritan 0:14bd24b5a77f 109 }
komoritan 0:14bd24b5a77f 110
komoritan 0:14bd24b5a77f 111 C_SNIC_Core::tagGEN_FW_VER_GET_REQ_T req;
komoritan 0:14bd24b5a77f 112 // Make request
komoritan 0:14bd24b5a77f 113 req.cmd_sid = UART_CMD_SID_GEN_FW_VER_GET_REQ;
komoritan 0:14bd24b5a77f 114 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 115
komoritan 0:14bd24b5a77f 116 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 117 unsigned int command_len;
komoritan 0:14bd24b5a77f 118 // Preparation of command
komoritan 0:14bd24b5a77f 119 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_GEN, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 120 , sizeof(C_SNIC_Core::tagGEN_FW_VER_GET_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 121
komoritan 0:14bd24b5a77f 122 int ret;
komoritan 0:14bd24b5a77f 123
komoritan 0:14bd24b5a77f 124 // Send uart command request
komoritan 0:14bd24b5a77f 125 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 126
komoritan 0:14bd24b5a77f 127 // Wait UART response
komoritan 0:14bd24b5a77f 128 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 129 if( ret != 0 )
komoritan 0:14bd24b5a77f 130 {
komoritan 0:14bd24b5a77f 131 DEBUG_PRINT( "getFWversion failed\r\n" );
komoritan 0:14bd24b5a77f 132 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 133 return -1;
komoritan 0:14bd24b5a77f 134 }
komoritan 0:14bd24b5a77f 135
komoritan 0:14bd24b5a77f 136 if( uartCmdMgr_p->getCommandStatus() == 0 )
komoritan 0:14bd24b5a77f 137 {
komoritan 0:14bd24b5a77f 138 unsigned char version_len = payload_buf_p->buf[3];
komoritan 0:14bd24b5a77f 139 memcpy( version_p, &payload_buf_p->buf[4], version_len );
komoritan 0:14bd24b5a77f 140 }
komoritan 0:14bd24b5a77f 141 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 142 return 0;
komoritan 0:14bd24b5a77f 143 }
komoritan 0:14bd24b5a77f 144
komoritan 0:14bd24b5a77f 145 int C_SNIC_WifiInterface::connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type
komoritan 0:14bd24b5a77f 146 , const char *sec_key_p, unsigned char sec_key_len)
komoritan 0:14bd24b5a77f 147 {
komoritan 0:14bd24b5a77f 148 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 149 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 150
komoritan 0:14bd24b5a77f 151 // Parameter check(SSID)
komoritan 0:14bd24b5a77f 152 if( (ssid_p == NULL) || (ssid_len == 0) )
komoritan 0:14bd24b5a77f 153 {
komoritan 0:14bd24b5a77f 154 DEBUG_PRINT( "connect failed [ parameter NG:SSID ]\r\n" );
komoritan 0:14bd24b5a77f 155 return -1;
komoritan 0:14bd24b5a77f 156 }
komoritan 0:14bd24b5a77f 157
komoritan 0:14bd24b5a77f 158 // Parameter check(Security key)
komoritan 0:14bd24b5a77f 159 if( (sec_type != e_SEC_OPEN) && ( (sec_key_len == 0) || (sec_key_p == NULL) ) )
komoritan 0:14bd24b5a77f 160 {
komoritan 0:14bd24b5a77f 161 DEBUG_PRINT( "connect failed [ parameter NG:Security key ]\r\n" );
komoritan 0:14bd24b5a77f 162 return -1;
komoritan 0:14bd24b5a77f 163 }
komoritan 0:14bd24b5a77f 164
komoritan 0:14bd24b5a77f 165 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 166 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 167 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 168 {
komoritan 0:14bd24b5a77f 169 DEBUG_PRINT("connect payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 170 return -1;
komoritan 0:14bd24b5a77f 171 }
komoritan 0:14bd24b5a77f 172
komoritan 0:14bd24b5a77f 173 unsigned char *buf = &gCONNECT_BUF[0];
komoritan 0:14bd24b5a77f 174 unsigned int buf_len = 0;
komoritan 0:14bd24b5a77f 175 unsigned int command_len;
komoritan 0:14bd24b5a77f 176
komoritan 0:14bd24b5a77f 177 memset( buf, 0, UART_CONNECT_BUF_SIZE );
komoritan 0:14bd24b5a77f 178 // Make request
komoritan 0:14bd24b5a77f 179 buf[0] = UART_CMD_SID_WIFI_JOIN_REQ;
komoritan 0:14bd24b5a77f 180 buf_len++;
komoritan 0:14bd24b5a77f 181 buf[1] = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 182 buf_len++;
komoritan 0:14bd24b5a77f 183 // SSID
komoritan 0:14bd24b5a77f 184 memcpy( &buf[2], ssid_p, ssid_len );
komoritan 0:14bd24b5a77f 185 buf_len += ssid_len;
komoritan 0:14bd24b5a77f 186 buf_len++;
komoritan 0:14bd24b5a77f 187
komoritan 0:14bd24b5a77f 188 // Security mode
komoritan 0:14bd24b5a77f 189 buf[ buf_len ] = (unsigned char)sec_type;
komoritan 0:14bd24b5a77f 190 buf_len++;
komoritan 0:14bd24b5a77f 191
komoritan 0:14bd24b5a77f 192 // Security key
komoritan 0:14bd24b5a77f 193 if( sec_type != e_SEC_OPEN )
komoritan 0:14bd24b5a77f 194 {
komoritan 0:14bd24b5a77f 195 buf[ buf_len ] = sec_key_len;
komoritan 0:14bd24b5a77f 196 buf_len++;
komoritan 0:14bd24b5a77f 197 if( sec_key_len > 0 )
komoritan 0:14bd24b5a77f 198 {
komoritan 0:14bd24b5a77f 199 memcpy( &buf[buf_len], sec_key_p, sec_key_len );
komoritan 0:14bd24b5a77f 200 buf_len += sec_key_len;
komoritan 0:14bd24b5a77f 201 }
komoritan 0:14bd24b5a77f 202 }
komoritan 0:14bd24b5a77f 203
komoritan 0:14bd24b5a77f 204 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 205 // Preparation of command
komoritan 0:14bd24b5a77f 206 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_WIFI, UART_CMD_SID_WIFI_JOIN_REQ, buf
komoritan 0:14bd24b5a77f 207 , buf_len, payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 208
komoritan 0:14bd24b5a77f 209 // Send uart command request
komoritan 0:14bd24b5a77f 210 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 211
komoritan 0:14bd24b5a77f 212 int ret;
komoritan 0:14bd24b5a77f 213 // Wait UART response
komoritan 0:14bd24b5a77f 214 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 215 if(uartCmdMgr_p->getCommandStatus() != UART_CMD_RES_WIFI_ERR_ALREADY_JOINED)
komoritan 0:14bd24b5a77f 216 {
komoritan 0:14bd24b5a77f 217 DEBUG_PRINT( "Already connected\r\n" );
komoritan 0:14bd24b5a77f 218 }
komoritan 0:14bd24b5a77f 219 else
komoritan 0:14bd24b5a77f 220 {
komoritan 0:14bd24b5a77f 221 if( ret != 0 )
komoritan 0:14bd24b5a77f 222 {
komoritan 0:14bd24b5a77f 223 DEBUG_PRINT( "join failed\r\n" );
komoritan 0:14bd24b5a77f 224 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 225 return -1;
komoritan 0:14bd24b5a77f 226 }
komoritan 0:14bd24b5a77f 227 }
komoritan 0:14bd24b5a77f 228
komoritan 0:14bd24b5a77f 229 if(uartCmdMgr_p->getCommandStatus() != 0)
komoritan 0:14bd24b5a77f 230 {
komoritan 0:14bd24b5a77f 231 DEBUG_PRINT("join status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
komoritan 0:14bd24b5a77f 232 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 233 return -1;
komoritan 0:14bd24b5a77f 234 }
komoritan 0:14bd24b5a77f 235 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 236
komoritan 0:14bd24b5a77f 237 return ret;
komoritan 0:14bd24b5a77f 238 }
komoritan 0:14bd24b5a77f 239
komoritan 0:14bd24b5a77f 240 int C_SNIC_WifiInterface::disconnect()
komoritan 0:14bd24b5a77f 241 {
komoritan 0:14bd24b5a77f 242 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 243 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 244
komoritan 0:14bd24b5a77f 245 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 246 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 247 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 248 {
komoritan 0:14bd24b5a77f 249 DEBUG_PRINT("disconnect payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 250 return -1;
komoritan 0:14bd24b5a77f 251 }
komoritan 0:14bd24b5a77f 252
komoritan 0:14bd24b5a77f 253 C_SNIC_Core::tagWIFI_DISCONNECT_REQ_T req;
komoritan 0:14bd24b5a77f 254 // Make request
komoritan 0:14bd24b5a77f 255 req.cmd_sid = UART_CMD_SID_WIFI_DISCONNECT_REQ;
komoritan 0:14bd24b5a77f 256 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 257
komoritan 0:14bd24b5a77f 258 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 259 unsigned int command_len;
komoritan 0:14bd24b5a77f 260 // Preparation of command
komoritan 0:14bd24b5a77f 261 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 262 , sizeof(C_SNIC_Core::tagWIFI_DISCONNECT_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 263
komoritan 0:14bd24b5a77f 264 // Send uart command request
komoritan 0:14bd24b5a77f 265 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 266
komoritan 0:14bd24b5a77f 267 int ret;
komoritan 0:14bd24b5a77f 268 // Wait UART response
komoritan 0:14bd24b5a77f 269 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 270 if( ret != 0 )
komoritan 0:14bd24b5a77f 271 {
komoritan 0:14bd24b5a77f 272 DEBUG_PRINT( "disconnect failed\r\n" );
komoritan 0:14bd24b5a77f 273 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 274 return -1;
komoritan 0:14bd24b5a77f 275 }
komoritan 0:14bd24b5a77f 276
komoritan 0:14bd24b5a77f 277 if( uartCmdMgr_p->getCommandStatus() != 0 )
komoritan 0:14bd24b5a77f 278 {
komoritan 0:14bd24b5a77f 279 DEBUG_PRINT("disconnect status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
komoritan 0:14bd24b5a77f 280 ret = -1;
komoritan 0:14bd24b5a77f 281 }
komoritan 0:14bd24b5a77f 282 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 283 return ret;
komoritan 0:14bd24b5a77f 284 }
komoritan 0:14bd24b5a77f 285
komoritan 0:14bd24b5a77f 286 int C_SNIC_WifiInterface::scan( const char *ssid_p, unsigned char *bssid_p
komoritan 0:14bd24b5a77f 287 , void (*result_handler_p)(tagSCAN_RESULT_T *scan_result) )
komoritan 0:14bd24b5a77f 288 {
komoritan 0:14bd24b5a77f 289 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 290 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 291
komoritan 0:14bd24b5a77f 292 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 293 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 294 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 295 {
komoritan 0:14bd24b5a77f 296 DEBUG_PRINT("scan payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 297 return -1;
komoritan 0:14bd24b5a77f 298 }
komoritan 0:14bd24b5a77f 299
komoritan 0:14bd24b5a77f 300 C_SNIC_Core::tagWIFI_SCAN_REQ_T req;
komoritan 0:14bd24b5a77f 301 unsigned int buf_len = 0;
komoritan 0:14bd24b5a77f 302
komoritan 0:14bd24b5a77f 303 memset( &req, 0, sizeof(C_SNIC_Core::tagWIFI_SCAN_REQ_T) );
komoritan 0:14bd24b5a77f 304 // Make request
komoritan 0:14bd24b5a77f 305 req.cmd_sid = UART_CMD_SID_WIFI_SCAN_REQ;
komoritan 0:14bd24b5a77f 306 buf_len++;
komoritan 0:14bd24b5a77f 307 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 308 buf_len++;
komoritan 0:14bd24b5a77f 309
komoritan 0:14bd24b5a77f 310 // Set scan type(Active scan)
komoritan 0:14bd24b5a77f 311 req.scan_type = 0;
komoritan 0:14bd24b5a77f 312 buf_len++;
komoritan 0:14bd24b5a77f 313 // Set bss type(any)
komoritan 0:14bd24b5a77f 314 req.bss_type = 2;
komoritan 0:14bd24b5a77f 315 buf_len++;
komoritan 0:14bd24b5a77f 316 // Set BSSID
komoritan 0:14bd24b5a77f 317 if( bssid_p != NULL )
komoritan 0:14bd24b5a77f 318 {
komoritan 0:14bd24b5a77f 319 memcpy( req.bssid, bssid_p, BSSID_MAC_LENTH );
komoritan 0:14bd24b5a77f 320 }
komoritan 0:14bd24b5a77f 321 buf_len += BSSID_MAC_LENTH;
komoritan 0:14bd24b5a77f 322 // Set channel list(0)
komoritan 0:14bd24b5a77f 323 req.chan_list = 0;
komoritan 0:14bd24b5a77f 324 buf_len++;
komoritan 0:14bd24b5a77f 325 //Set SSID
komoritan 0:14bd24b5a77f 326 if( ssid_p != NULL )
komoritan 0:14bd24b5a77f 327 {
komoritan 0:14bd24b5a77f 328 strcpy( (char *)req.ssid, ssid_p );
komoritan 0:14bd24b5a77f 329 buf_len += strlen(ssid_p);
komoritan 0:14bd24b5a77f 330 }
komoritan 0:14bd24b5a77f 331 buf_len++;
komoritan 0:14bd24b5a77f 332
komoritan 0:14bd24b5a77f 333 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 334 unsigned int command_len;
komoritan 0:14bd24b5a77f 335 // Preparation of command
komoritan 0:14bd24b5a77f 336 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 337 , buf_len, payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 338
komoritan 0:14bd24b5a77f 339 // Set scan result callback
komoritan 0:14bd24b5a77f 340 uartCmdMgr_p->setScanResultHandler( result_handler_p );
komoritan 0:14bd24b5a77f 341
komoritan 0:14bd24b5a77f 342 // Send uart command request
komoritan 0:14bd24b5a77f 343 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 344
komoritan 0:14bd24b5a77f 345 int ret;
komoritan 0:14bd24b5a77f 346 // Wait UART response
komoritan 0:14bd24b5a77f 347 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 348 DEBUG_PRINT( "scan wait:%d\r\n", ret );
komoritan 0:14bd24b5a77f 349 if( ret != 0 )
komoritan 0:14bd24b5a77f 350 {
komoritan 0:14bd24b5a77f 351 DEBUG_PRINT( "scan failed\r\n" );
komoritan 0:14bd24b5a77f 352 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 353 return -1;
komoritan 0:14bd24b5a77f 354 }
komoritan 0:14bd24b5a77f 355
komoritan 0:14bd24b5a77f 356 if( uartCmdMgr_p->getCommandStatus() != 0 )
komoritan 0:14bd24b5a77f 357 {
komoritan 0:14bd24b5a77f 358 DEBUG_PRINT("scan status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
komoritan 0:14bd24b5a77f 359 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 360 return -1;
komoritan 0:14bd24b5a77f 361 }
komoritan 0:14bd24b5a77f 362
komoritan 0:14bd24b5a77f 363 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 364
komoritan 0:14bd24b5a77f 365 return ret;
komoritan 0:14bd24b5a77f 366 }
komoritan 0:14bd24b5a77f 367
komoritan 0:14bd24b5a77f 368 int C_SNIC_WifiInterface::wifi_on( const char *country_p )
komoritan 0:14bd24b5a77f 369 {
komoritan 0:14bd24b5a77f 370 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 371 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 372
komoritan 0:14bd24b5a77f 373 // Parameter check
komoritan 0:14bd24b5a77f 374 if( country_p == NULL )
komoritan 0:14bd24b5a77f 375 {
komoritan 0:14bd24b5a77f 376 DEBUG_PRINT("wifi_on parameter error\r\n");
komoritan 0:14bd24b5a77f 377 return -1;
komoritan 0:14bd24b5a77f 378 }
komoritan 0:14bd24b5a77f 379
komoritan 0:14bd24b5a77f 380 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 381 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 382 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 383 {
komoritan 0:14bd24b5a77f 384 DEBUG_PRINT("wifi_on payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 385 return -1;
komoritan 0:14bd24b5a77f 386 }
komoritan 0:14bd24b5a77f 387
komoritan 0:14bd24b5a77f 388 C_SNIC_Core::tagWIFI_ON_REQ_T req;
komoritan 0:14bd24b5a77f 389 // Make request
komoritan 0:14bd24b5a77f 390 req.cmd_sid = UART_CMD_SID_WIFI_ON_REQ;
komoritan 0:14bd24b5a77f 391 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 392 memcpy( req.country, country_p, COUNTRYC_CODE_LENTH );
komoritan 0:14bd24b5a77f 393
komoritan 0:14bd24b5a77f 394 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 395 unsigned int command_len;
komoritan 0:14bd24b5a77f 396 // Preparation of command
komoritan 0:14bd24b5a77f 397 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 398 , sizeof(C_SNIC_Core::tagWIFI_ON_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 399
komoritan 0:14bd24b5a77f 400 // Send uart command request
komoritan 0:14bd24b5a77f 401 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 402
komoritan 0:14bd24b5a77f 403 int ret;
komoritan 0:14bd24b5a77f 404 // Wait UART response
komoritan 0:14bd24b5a77f 405 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 406 if( ret != 0 )
komoritan 0:14bd24b5a77f 407 {
komoritan 0:14bd24b5a77f 408 DEBUG_PRINT( "wifi_on failed\r\n" );
komoritan 0:14bd24b5a77f 409 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 410 return -1;
komoritan 0:14bd24b5a77f 411 }
komoritan 0:14bd24b5a77f 412
komoritan 0:14bd24b5a77f 413 if( uartCmdMgr_p->getCommandStatus() != 0 )
komoritan 0:14bd24b5a77f 414 {
komoritan 0:14bd24b5a77f 415 DEBUG_PRINT("wifi_on status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
komoritan 0:14bd24b5a77f 416 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 417 return -1;
komoritan 0:14bd24b5a77f 418 }
komoritan 0:14bd24b5a77f 419 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 420
komoritan 0:14bd24b5a77f 421 return ret;
komoritan 0:14bd24b5a77f 422 }
komoritan 0:14bd24b5a77f 423
komoritan 0:14bd24b5a77f 424 int C_SNIC_WifiInterface::wifi_off()
komoritan 0:14bd24b5a77f 425 {
komoritan 0:14bd24b5a77f 426 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 427 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 428
komoritan 0:14bd24b5a77f 429 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 430 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 431 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 432 {
komoritan 0:14bd24b5a77f 433 DEBUG_PRINT("wifi_off payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 434 return -1;
komoritan 0:14bd24b5a77f 435 }
komoritan 0:14bd24b5a77f 436
komoritan 0:14bd24b5a77f 437 C_SNIC_Core::tagWIFI_OFF_REQ_T req;
komoritan 0:14bd24b5a77f 438 // Make request
komoritan 0:14bd24b5a77f 439 req.cmd_sid = UART_CMD_SID_WIFI_OFF_REQ;
komoritan 0:14bd24b5a77f 440 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 441
komoritan 0:14bd24b5a77f 442 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 443 unsigned int command_len;
komoritan 0:14bd24b5a77f 444 // Preparation of command
komoritan 0:14bd24b5a77f 445 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 446 , sizeof(C_SNIC_Core::tagWIFI_OFF_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 447
komoritan 0:14bd24b5a77f 448 // Send uart command request
komoritan 0:14bd24b5a77f 449 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 450
komoritan 0:14bd24b5a77f 451 int ret;
komoritan 0:14bd24b5a77f 452 // Wait UART response
komoritan 0:14bd24b5a77f 453 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 454 if( ret != 0 )
komoritan 0:14bd24b5a77f 455 {
komoritan 0:14bd24b5a77f 456 DEBUG_PRINT( "wifi_off failed\r\n" );
komoritan 0:14bd24b5a77f 457 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 458 return -1;
komoritan 0:14bd24b5a77f 459 }
komoritan 0:14bd24b5a77f 460
komoritan 0:14bd24b5a77f 461 if( uartCmdMgr_p->getCommandStatus() != 0 )
komoritan 0:14bd24b5a77f 462 {
komoritan 0:14bd24b5a77f 463 DEBUG_PRINT("wifi_off status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
komoritan 0:14bd24b5a77f 464 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 465 return -1;
komoritan 0:14bd24b5a77f 466 }
komoritan 0:14bd24b5a77f 467 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 468
komoritan 0:14bd24b5a77f 469 return ret;
komoritan 0:14bd24b5a77f 470 }
komoritan 0:14bd24b5a77f 471
komoritan 0:14bd24b5a77f 472 int C_SNIC_WifiInterface::getRssi( signed char *rssi_p )
komoritan 0:14bd24b5a77f 473 {
komoritan 0:14bd24b5a77f 474 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 475 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 476 if( rssi_p == NULL )
komoritan 0:14bd24b5a77f 477 {
komoritan 0:14bd24b5a77f 478 DEBUG_PRINT("getRssi parameter error\r\n");
komoritan 0:14bd24b5a77f 479 return -1;
komoritan 0:14bd24b5a77f 480 }
komoritan 0:14bd24b5a77f 481
komoritan 0:14bd24b5a77f 482 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 483 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 484 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 485 {
komoritan 0:14bd24b5a77f 486 DEBUG_PRINT("getRssi payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 487 return -1;
komoritan 0:14bd24b5a77f 488 }
komoritan 0:14bd24b5a77f 489
komoritan 0:14bd24b5a77f 490 C_SNIC_Core::tagWIFI_GET_STA_RSSI_REQ_T req;
komoritan 0:14bd24b5a77f 491
komoritan 0:14bd24b5a77f 492 // Make request
komoritan 0:14bd24b5a77f 493 req.cmd_sid = UART_CMD_SID_WIFI_GET_STA_RSSI_REQ;
komoritan 0:14bd24b5a77f 494 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 495
komoritan 0:14bd24b5a77f 496 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 497 unsigned int command_len;
komoritan 0:14bd24b5a77f 498 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 499 , sizeof(C_SNIC_Core::tagWIFI_GET_STA_RSSI_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 500
komoritan 0:14bd24b5a77f 501 int ret;
komoritan 0:14bd24b5a77f 502 // Send uart command request
komoritan 0:14bd24b5a77f 503 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 504
komoritan 0:14bd24b5a77f 505 // Wait UART response
komoritan 0:14bd24b5a77f 506 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 507 if( ret != 0 )
komoritan 0:14bd24b5a77f 508 {
komoritan 0:14bd24b5a77f 509 DEBUG_PRINT( "getRssi failed\r\n" );
komoritan 0:14bd24b5a77f 510 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 511 return -1;
komoritan 0:14bd24b5a77f 512 }
komoritan 0:14bd24b5a77f 513
komoritan 0:14bd24b5a77f 514 *rssi_p = (signed char)payload_buf_p->buf[2];
komoritan 0:14bd24b5a77f 515
komoritan 0:14bd24b5a77f 516 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 517 return 0;
komoritan 0:14bd24b5a77f 518 }
komoritan 0:14bd24b5a77f 519
komoritan 0:14bd24b5a77f 520 int C_SNIC_WifiInterface::getWifiStatus( tagWIFI_STATUS_T *status_p)
komoritan 0:14bd24b5a77f 521 {
komoritan 0:14bd24b5a77f 522 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 523 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 524
komoritan 0:14bd24b5a77f 525 if( status_p == NULL )
komoritan 0:14bd24b5a77f 526 {
komoritan 0:14bd24b5a77f 527 DEBUG_PRINT("getWifiStatus parameter error\r\n");
komoritan 0:14bd24b5a77f 528 return -1;
komoritan 0:14bd24b5a77f 529 }
komoritan 0:14bd24b5a77f 530
komoritan 0:14bd24b5a77f 531 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 532 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 533 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 534 {
komoritan 0:14bd24b5a77f 535 DEBUG_PRINT("getWifiStatus payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 536 return -1;
komoritan 0:14bd24b5a77f 537 }
komoritan 0:14bd24b5a77f 538
komoritan 0:14bd24b5a77f 539 C_SNIC_Core::tagWIFI_GET_STATUS_REQ_T req;
komoritan 0:14bd24b5a77f 540 // Make request
komoritan 0:14bd24b5a77f 541 req.cmd_sid = UART_CMD_SID_WIFI_GET_STATUS_REQ;
komoritan 0:14bd24b5a77f 542 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 543 req.interface = 0;
komoritan 0:14bd24b5a77f 544
komoritan 0:14bd24b5a77f 545 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 546 unsigned int command_len;
komoritan 0:14bd24b5a77f 547 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_WIFI, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 548 , sizeof(C_SNIC_Core::tagWIFI_GET_STATUS_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 549
komoritan 0:14bd24b5a77f 550 // Send uart command request
komoritan 0:14bd24b5a77f 551 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 552
komoritan 0:14bd24b5a77f 553 int ret;
komoritan 0:14bd24b5a77f 554 // Wait UART response
komoritan 0:14bd24b5a77f 555 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 556 if( ret != 0 )
komoritan 0:14bd24b5a77f 557 {
komoritan 0:14bd24b5a77f 558 DEBUG_PRINT( "getWifiStatus failed\r\n" );
komoritan 0:14bd24b5a77f 559 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 560 return -1;
komoritan 0:14bd24b5a77f 561 }
komoritan 0:14bd24b5a77f 562
komoritan 0:14bd24b5a77f 563 // set status
komoritan 0:14bd24b5a77f 564 status_p->status = (E_WIFI_STATUS)payload_buf_p->buf[2];
komoritan 0:14bd24b5a77f 565
komoritan 0:14bd24b5a77f 566 // set Mac address
komoritan 0:14bd24b5a77f 567 if( status_p->status != e_STATUS_OFF )
komoritan 0:14bd24b5a77f 568 {
komoritan 0:14bd24b5a77f 569 memcpy( status_p->mac_address, &payload_buf_p->buf[3], BSSID_MAC_LENTH );
komoritan 0:14bd24b5a77f 570 }
komoritan 0:14bd24b5a77f 571
komoritan 0:14bd24b5a77f 572 // set SSID
komoritan 0:14bd24b5a77f 573 if( ( status_p->status == e_STA_JOINED ) || ( status_p->status == e_AP_STARTED ) )
komoritan 0:14bd24b5a77f 574 {
komoritan 0:14bd24b5a77f 575 memcpy( status_p->ssid, &payload_buf_p->buf[9], strlen( (char *)&payload_buf_p->buf[9]) );
komoritan 0:14bd24b5a77f 576 }
komoritan 0:14bd24b5a77f 577
komoritan 0:14bd24b5a77f 578 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 579 return 0;
komoritan 0:14bd24b5a77f 580 }
komoritan 0:14bd24b5a77f 581
komoritan 0:14bd24b5a77f 582 int C_SNIC_WifiInterface::setIPConfig( bool is_DHCP
komoritan 0:14bd24b5a77f 583 , const char *ip_p, const char *mask_p, const char *gateway_p )
komoritan 0:14bd24b5a77f 584 {
komoritan 0:14bd24b5a77f 585 // Parameter check
komoritan 0:14bd24b5a77f 586 if( is_DHCP == false )
komoritan 0:14bd24b5a77f 587 {
komoritan 0:14bd24b5a77f 588 if( (ip_p == NULL) || (mask_p == NULL) ||(gateway_p == NULL) )
komoritan 0:14bd24b5a77f 589 {
komoritan 0:14bd24b5a77f 590 DEBUG_PRINT("setIPConfig parameter error\r\n");
komoritan 0:14bd24b5a77f 591 return -1;
komoritan 0:14bd24b5a77f 592 }
komoritan 0:14bd24b5a77f 593 }
komoritan 0:14bd24b5a77f 594
komoritan 0:14bd24b5a77f 595 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 596 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 597
komoritan 0:14bd24b5a77f 598 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 599 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 600 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 601 {
komoritan 0:14bd24b5a77f 602 DEBUG_PRINT("setIPConfig payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 603 return -1;
komoritan 0:14bd24b5a77f 604 }
komoritan 0:14bd24b5a77f 605
komoritan 0:14bd24b5a77f 606 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 607 unsigned int command_len;
komoritan 0:14bd24b5a77f 608 if( is_DHCP == true )
komoritan 0:14bd24b5a77f 609 {
komoritan 0:14bd24b5a77f 610 C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_DHCP_T req;
komoritan 0:14bd24b5a77f 611 // Make request
komoritan 0:14bd24b5a77f 612 req.cmd_sid = UART_CMD_SID_SNIC_IP_CONFIG_REQ;
komoritan 0:14bd24b5a77f 613 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 614 req.interface = 0;
komoritan 0:14bd24b5a77f 615 req.dhcp = 1;
komoritan 0:14bd24b5a77f 616
komoritan 0:14bd24b5a77f 617 // Preparation of command
komoritan 0:14bd24b5a77f 618 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 619 , sizeof(C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_DHCP_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 620 }
komoritan 0:14bd24b5a77f 621 else
komoritan 0:14bd24b5a77f 622 {
komoritan 0:14bd24b5a77f 623 C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_STATIC_T req;
komoritan 0:14bd24b5a77f 624 // Make request
komoritan 0:14bd24b5a77f 625 req.cmd_sid = UART_CMD_SID_SNIC_IP_CONFIG_REQ;
komoritan 0:14bd24b5a77f 626 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 627 req.interface = 0;
komoritan 0:14bd24b5a77f 628 req.dhcp = 0;
komoritan 0:14bd24b5a77f 629
komoritan 0:14bd24b5a77f 630 // Set paramter of address
komoritan 0:14bd24b5a77f 631 int addr_temp;
komoritan 0:14bd24b5a77f 632 addr_temp = C_SNIC_UartMsgUtil::addrToInteger( ip_p );
komoritan 0:14bd24b5a77f 633 C_SNIC_UartMsgUtil::convertIntToByteAdday( addr_temp, (char *)req.ip_addr );
komoritan 0:14bd24b5a77f 634 addr_temp = C_SNIC_UartMsgUtil::addrToInteger( mask_p );
komoritan 0:14bd24b5a77f 635 C_SNIC_UartMsgUtil::convertIntToByteAdday( addr_temp, (char *)req.netmask );
komoritan 0:14bd24b5a77f 636 addr_temp = C_SNIC_UartMsgUtil::addrToInteger( gateway_p );
komoritan 0:14bd24b5a77f 637 C_SNIC_UartMsgUtil::convertIntToByteAdday( addr_temp, (char *)req.gateway );
komoritan 0:14bd24b5a77f 638
komoritan 0:14bd24b5a77f 639 // Preparation of command
komoritan 0:14bd24b5a77f 640 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 641 , sizeof(C_SNIC_Core::tagSNIC_IP_CONFIG_REQ_STATIC_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 642 }
komoritan 0:14bd24b5a77f 643 // Send uart command request
komoritan 0:14bd24b5a77f 644 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 645
komoritan 0:14bd24b5a77f 646 int ret;
komoritan 0:14bd24b5a77f 647 // Wait UART response
komoritan 0:14bd24b5a77f 648 ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 649 if( ret != 0 )
komoritan 0:14bd24b5a77f 650 {
komoritan 0:14bd24b5a77f 651 DEBUG_PRINT( "setIPConfig failed\r\n" );
komoritan 0:14bd24b5a77f 652 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 653 return -1;
komoritan 0:14bd24b5a77f 654 }
komoritan 0:14bd24b5a77f 655
komoritan 0:14bd24b5a77f 656 if( uartCmdMgr_p->getCommandStatus() != 0 )
komoritan 0:14bd24b5a77f 657 {
komoritan 0:14bd24b5a77f 658 DEBUG_PRINT("setIPConfig status:%02x\r\n", uartCmdMgr_p->getCommandStatus());
komoritan 0:14bd24b5a77f 659 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 660 return -1;
komoritan 0:14bd24b5a77f 661 }
komoritan 0:14bd24b5a77f 662
komoritan 0:14bd24b5a77f 663 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 664 return ret;
komoritan 0:14bd24b5a77f 665 }
komoritan 0:14bd24b5a77f 666
komoritan 0:14bd24b5a77f 667 char* C_SNIC_WifiInterface::getIPAddress() {
komoritan 0:14bd24b5a77f 668 C_SNIC_Core *snic_core_p = C_SNIC_Core::getInstance();
komoritan 0:14bd24b5a77f 669 C_SNIC_UartCommandManager *uartCmdMgr_p = snic_core_p->getUartCommand();
komoritan 0:14bd24b5a77f 670
komoritan 0:14bd24b5a77f 671 snic_core_p->lockAPI();
komoritan 0:14bd24b5a77f 672 // Get local ip address.
komoritan 0:14bd24b5a77f 673 // Get buffer for response payload from MemoryPool
komoritan 0:14bd24b5a77f 674 tagMEMPOOL_BLOCK_T *payload_buf_p = snic_core_p->allocCmdBuf();
komoritan 0:14bd24b5a77f 675 if( payload_buf_p == NULL )
komoritan 0:14bd24b5a77f 676 {
komoritan 0:14bd24b5a77f 677 DEBUG_PRINT("getIPAddress payload_buf_p NULL\r\n");
komoritan 0:14bd24b5a77f 678 snic_core_p->unlockAPI();
komoritan 0:14bd24b5a77f 679 return 0;
komoritan 0:14bd24b5a77f 680 }
komoritan 0:14bd24b5a77f 681
komoritan 0:14bd24b5a77f 682 C_SNIC_Core::tagSNIC_GET_DHCP_INFO_REQ_T req;
komoritan 0:14bd24b5a77f 683 // Make request
komoritan 0:14bd24b5a77f 684 req.cmd_sid = UART_CMD_SID_SNIC_GET_DHCP_INFO_REQ;
komoritan 0:14bd24b5a77f 685 req.seq = mUartRequestSeq++;
komoritan 0:14bd24b5a77f 686 req.interface = 0;
komoritan 0:14bd24b5a77f 687
komoritan 0:14bd24b5a77f 688 unsigned char *command_array_p = snic_core_p->getCommandBuf();
komoritan 0:14bd24b5a77f 689 unsigned int command_len;
komoritan 0:14bd24b5a77f 690 // Preparation of command
komoritan 0:14bd24b5a77f 691 command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
komoritan 0:14bd24b5a77f 692 , sizeof(C_SNIC_Core::tagSNIC_GET_DHCP_INFO_REQ_T), payload_buf_p->buf, command_array_p );
komoritan 0:14bd24b5a77f 693 // Send uart command request
komoritan 0:14bd24b5a77f 694 snic_core_p->sendUart( command_len, command_array_p );
komoritan 0:14bd24b5a77f 695 // Wait UART response
komoritan 0:14bd24b5a77f 696 int ret = uartCmdMgr_p->wait();
komoritan 0:14bd24b5a77f 697 if( ret != 0 )
komoritan 0:14bd24b5a77f 698 {
komoritan 0:14bd24b5a77f 699 DEBUG_PRINT( "getIPAddress failed\r\n" );
komoritan 0:14bd24b5a77f 700 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 701 snic_core_p->unlockAPI();
komoritan 0:14bd24b5a77f 702 return 0;
komoritan 0:14bd24b5a77f 703 }
komoritan 0:14bd24b5a77f 704
komoritan 0:14bd24b5a77f 705 if( uartCmdMgr_p->getCommandStatus() != UART_CMD_RES_SNIC_SUCCESS )
komoritan 0:14bd24b5a77f 706 {
komoritan 0:14bd24b5a77f 707 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 708 snic_core_p->unlockAPI();
komoritan 0:14bd24b5a77f 709 return 0;
komoritan 0:14bd24b5a77f 710 }
komoritan 0:14bd24b5a77f 711
komoritan 0:14bd24b5a77f 712 snic_core_p->freeCmdBuf( payload_buf_p );
komoritan 0:14bd24b5a77f 713 snic_core_p->unlockAPI();
komoritan 0:14bd24b5a77f 714
komoritan 0:14bd24b5a77f 715 sprintf(ip_addr, "%d.%d.%d.%d\0", payload_buf_p->buf[9], payload_buf_p->buf[10], payload_buf_p->buf[11], payload_buf_p->buf[12]);
komoritan 0:14bd24b5a77f 716
komoritan 0:14bd24b5a77f 717 return ip_addr;
komoritan 0:14bd24b5a77f 718 }
komoritan 0:14bd24b5a77f 719