Yuuichi Akagawa / SNICInterface_fork

Fork of SNICInterface by muRata

Committer:
kishino
Date:
Fri Mar 14 08:48:12 2014 +0000
Revision:
7:e88ccbe0225f
Parent:
6:70f522934032
Scan handler interface modify

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kishino 0:61c402886fbb 1 #include "YDwifiInterface.h"
kishino 2:0ba43344c814 2 #include "YDwifi_uartmsg.h"
kishino 0:61c402886fbb 3
kishino 2:0ba43344c814 4 using namespace murata_wifi;
kishino 2:0ba43344c814 5
kishino 2:0ba43344c814 6 #define MEMPOOL_BLOCK_SIZE 2048
kishino 2:0ba43344c814 7 typedef struct
kishino 2:0ba43344c814 8 {
kishino 2:0ba43344c814 9 unsigned char buf[MEMPOOL_BLOCK_SIZE];
kishino 2:0ba43344c814 10 }tagMEMPOOL_BLOCK_T;
kishino 2:0ba43344c814 11 #define MEMPOOL_PAYLOAD_NUM 1
kishino 2:0ba43344c814 12 /** MemoryPool for payload of UART response */
kishino 2:0ba43344c814 13 MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_PAYLOAD_NUM> gMEMPOOL_PAYLOAD;
kishino 2:0ba43344c814 14
kishino 3:9f90024d7fb2 15 #define UART_REQUEST_PAYLOAD_MAX 256
kishino 0:61c402886fbb 16
kishino 0:61c402886fbb 17 C_YDwifiInterface::C_YDwifiInterface( PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud):
kishino 0:61c402886fbb 18 C_YDwifi(tx, rx, cts, rts, reset, alarm, baud)
kishino 0:61c402886fbb 19 {
kishino 0:61c402886fbb 20 }
kishino 0:61c402886fbb 21
kishino 0:61c402886fbb 22 int C_YDwifiInterface::init()
kishino 0:61c402886fbb 23 {
kishino 0:61c402886fbb 24 /* Initialize UART */
kishino 0:61c402886fbb 25 initUart();
kishino 0:61c402886fbb 26 return 0;
kishino 2:0ba43344c814 27 }
kishino 2:0ba43344c814 28
kishino 2:0ba43344c814 29 int C_YDwifiInterface::getFWVersion( unsigned char *version_p )
kishino 2:0ba43344c814 30 {
kishino 3:9f90024d7fb2 31 // Get buffer for response payload from MemoryPool
kishino 2:0ba43344c814 32 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 2:0ba43344c814 33 if( payload_buf == NULL )
kishino 2:0ba43344c814 34 {
kishino 2:0ba43344c814 35 printf("getFWVersion payload_buf NULL\r\n");
kishino 2:0ba43344c814 36 return -1;
kishino 2:0ba43344c814 37 }
kishino 2:0ba43344c814 38
kishino 2:0ba43344c814 39 tagGEN_FW_VER_GET_REQ_T req;
kishino 3:9f90024d7fb2 40 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 41 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 2:0ba43344c814 42 unsigned short payload_len;
kishino 2:0ba43344c814 43 unsigned int command_len;
kishino 2:0ba43344c814 44 int ret;
kishino 2:0ba43344c814 45
kishino 2:0ba43344c814 46 // Make request
kishino 2:0ba43344c814 47 req.cmd_sid = UART_CMD_SID_GEN_FW_VER_GET_REQ;
kishino 3:9f90024d7fb2 48 req.seq = mUartRequestSeq++;
kishino 2:0ba43344c814 49
kishino 2:0ba43344c814 50 // Make command payload
kishino 2:0ba43344c814 51 payload_len = C_YD_UartMsg::makePayload( sizeof(tagGEN_FW_VER_GET_REQ_T), (unsigned char *)&req, payload_array );
kishino 2:0ba43344c814 52 // Make all command request
kishino 2:0ba43344c814 53 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_GEN, payload_array, payload_len, command_array );
kishino 2:0ba43344c814 54
kishino 2:0ba43344c814 55 // Set data for response
kishino 2:0ba43344c814 56 mUartCommand.setCommandID( UART_CMD_ID_GEN );
kishino 3:9f90024d7fb2 57 mUartCommand.setCommandSID( req.cmd_sid );
kishino 2:0ba43344c814 58 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 2:0ba43344c814 59
kishino 2:0ba43344c814 60 // Send uart command request
kishino 2:0ba43344c814 61 sendUart( command_len, command_array );
kishino 2:0ba43344c814 62
kishino 2:0ba43344c814 63 // Wait UART response
kishino 2:0ba43344c814 64 ret = mUartCommand.wait();
kishino 2:0ba43344c814 65 if( ret != 0 )
kishino 2:0ba43344c814 66 {
kishino 2:0ba43344c814 67 printf( "getFWversion failed\r\n" );
kishino 2:0ba43344c814 68 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 2:0ba43344c814 69 return -1;
kishino 2:0ba43344c814 70 }
kishino 2:0ba43344c814 71
kishino 2:0ba43344c814 72 if( mUartCommand.getCommandStatus() == 0 )
kishino 2:0ba43344c814 73 {
kishino 2:0ba43344c814 74 unsigned char version_len = payload_buf->buf[3];
kishino 2:0ba43344c814 75 memcpy( version_p, &payload_buf->buf[4], version_len );
kishino 2:0ba43344c814 76 }
kishino 2:0ba43344c814 77 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 2:0ba43344c814 78 return 0;
kishino 2:0ba43344c814 79 }
kishino 3:9f90024d7fb2 80
kishino 3:9f90024d7fb2 81 int C_YDwifiInterface::connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type
kishino 3:9f90024d7fb2 82 , const char *sec_key_p, unsigned char sec_key_len)
kishino 3:9f90024d7fb2 83 {
kishino 3:9f90024d7fb2 84 // Parameter check(SSID)
kishino 3:9f90024d7fb2 85 if( (ssid_p == NULL) || (ssid_len == 0) )
kishino 3:9f90024d7fb2 86 {
kishino 3:9f90024d7fb2 87 printf( "connect failed [ parameter NG:SSID ]\r\n" );
kishino 3:9f90024d7fb2 88 return -1;
kishino 3:9f90024d7fb2 89 }
kishino 3:9f90024d7fb2 90
kishino 3:9f90024d7fb2 91 // Parameter check(Security key)
kishino 3:9f90024d7fb2 92 if( (sec_type != e_SEC_OPEN) && ( (sec_key_len == 0) || (sec_key_p == NULL) ) )
kishino 3:9f90024d7fb2 93 {
kishino 3:9f90024d7fb2 94 printf( "connect failed [ parameter NG:Security key ]\r\n" );
kishino 3:9f90024d7fb2 95 return -1;
kishino 3:9f90024d7fb2 96 }
kishino 3:9f90024d7fb2 97
kishino 3:9f90024d7fb2 98 // Get buffer for response payloadfrom MemoryPool
kishino 3:9f90024d7fb2 99 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 3:9f90024d7fb2 100 if( payload_buf == NULL )
kishino 3:9f90024d7fb2 101 {
kishino 3:9f90024d7fb2 102 printf("connect payload_buf NULL\r\n");
kishino 3:9f90024d7fb2 103 return -1;
kishino 3:9f90024d7fb2 104 }
kishino 3:9f90024d7fb2 105
kishino 3:9f90024d7fb2 106 unsigned char buf[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 107 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 108 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 109 unsigned int buf_len = 0;
kishino 3:9f90024d7fb2 110 unsigned short payload_len;
kishino 3:9f90024d7fb2 111 unsigned int command_len;
kishino 3:9f90024d7fb2 112 int ret;
kishino 3:9f90024d7fb2 113
kishino 3:9f90024d7fb2 114 memset( buf, 0, UART_REQUEST_PAYLOAD_MAX );
kishino 3:9f90024d7fb2 115 // Make request
kishino 3:9f90024d7fb2 116 buf[0] = UART_CMD_SID_WIFI_JOIN_REQ;
kishino 3:9f90024d7fb2 117 buf_len++;
kishino 3:9f90024d7fb2 118 buf[1] = mUartRequestSeq++;
kishino 3:9f90024d7fb2 119 buf_len++;
kishino 3:9f90024d7fb2 120 // SSID
kishino 3:9f90024d7fb2 121 memcpy( &buf[2], ssid_p, ssid_len );
kishino 3:9f90024d7fb2 122 buf_len += ssid_len;
kishino 3:9f90024d7fb2 123 buf_len++;
kishino 3:9f90024d7fb2 124
kishino 3:9f90024d7fb2 125 // Security mode
kishino 3:9f90024d7fb2 126 buf[ buf_len ] = (unsigned char)sec_type;
kishino 3:9f90024d7fb2 127 buf_len++;
kishino 3:9f90024d7fb2 128
kishino 3:9f90024d7fb2 129 // Security key
kishino 3:9f90024d7fb2 130 if( sec_type != e_SEC_OPEN )
kishino 3:9f90024d7fb2 131 {
kishino 3:9f90024d7fb2 132 buf[ buf_len ] = sec_key_len;
kishino 3:9f90024d7fb2 133 buf_len++;
kishino 3:9f90024d7fb2 134 if( sec_key_len > 0 )
kishino 3:9f90024d7fb2 135 {
kishino 3:9f90024d7fb2 136 memcpy( &buf[buf_len], sec_key_p, sec_key_len );
kishino 3:9f90024d7fb2 137 buf_len += sec_key_len;
kishino 3:9f90024d7fb2 138 }
kishino 3:9f90024d7fb2 139 }
kishino 3:9f90024d7fb2 140 // Make command payload
kishino 3:9f90024d7fb2 141 payload_len = C_YD_UartMsg::makePayload( buf_len, (unsigned char *)buf, payload_array );
kishino 3:9f90024d7fb2 142 // Make all command request
kishino 3:9f90024d7fb2 143 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 3:9f90024d7fb2 144 // Set data for response
kishino 3:9f90024d7fb2 145 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 3:9f90024d7fb2 146 mUartCommand.setCommandSID( UART_CMD_SID_WIFI_JOIN_REQ );
kishino 3:9f90024d7fb2 147 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 3:9f90024d7fb2 148
kishino 3:9f90024d7fb2 149 // Send uart command request
kishino 3:9f90024d7fb2 150 sendUart( command_len, command_array );
kishino 3:9f90024d7fb2 151
kishino 3:9f90024d7fb2 152 // Wait UART response
kishino 3:9f90024d7fb2 153 ret = mUartCommand.wait();
kishino 3:9f90024d7fb2 154 if( ret != 0 )
kishino 3:9f90024d7fb2 155 {
kishino 3:9f90024d7fb2 156 printf( "join failed\r\n" );
kishino 3:9f90024d7fb2 157 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 158 return -1;
kishino 3:9f90024d7fb2 159 }
kishino 3:9f90024d7fb2 160
kishino 3:9f90024d7fb2 161 if( mUartCommand.getCommandStatus() != 0 )
kishino 3:9f90024d7fb2 162 {
kishino 3:9f90024d7fb2 163 printf("join status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 3:9f90024d7fb2 164 ret = -1;
kishino 3:9f90024d7fb2 165 }
kishino 3:9f90024d7fb2 166 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 167
kishino 3:9f90024d7fb2 168 return ret;
kishino 3:9f90024d7fb2 169 }
kishino 3:9f90024d7fb2 170
kishino 3:9f90024d7fb2 171 int C_YDwifiInterface::disconnect()
kishino 3:9f90024d7fb2 172 {
kishino 3:9f90024d7fb2 173 // Get buffer for response payloadfrom MemoryPool
kishino 3:9f90024d7fb2 174 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 3:9f90024d7fb2 175 if( payload_buf == NULL )
kishino 3:9f90024d7fb2 176 {
kishino 3:9f90024d7fb2 177 printf("disconnect payload_buf NULL\r\n");
kishino 3:9f90024d7fb2 178 return -1;
kishino 3:9f90024d7fb2 179 }
kishino 3:9f90024d7fb2 180
kishino 3:9f90024d7fb2 181 tagWIFI_DISCONNECT_REQ_T req;
kishino 3:9f90024d7fb2 182 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 183 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 184 unsigned short payload_len;
kishino 3:9f90024d7fb2 185 unsigned int command_len;
kishino 3:9f90024d7fb2 186 int ret;
kishino 3:9f90024d7fb2 187
kishino 3:9f90024d7fb2 188 // Make request
kishino 3:9f90024d7fb2 189 req.cmd_sid = UART_CMD_SID_WIFI_DISCONNECT_REQ;
kishino 3:9f90024d7fb2 190 req.seq = mUartRequestSeq++;
kishino 3:9f90024d7fb2 191
kishino 3:9f90024d7fb2 192 // Make command payload
kishino 3:9f90024d7fb2 193 payload_len = C_YD_UartMsg::makePayload( sizeof(tagWIFI_DISCONNECT_REQ_T), (unsigned char *)&req, payload_array );
kishino 3:9f90024d7fb2 194 // Make all command request
kishino 3:9f90024d7fb2 195 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 3:9f90024d7fb2 196
kishino 3:9f90024d7fb2 197 // Set data for response
kishino 3:9f90024d7fb2 198 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 3:9f90024d7fb2 199 mUartCommand.setCommandSID( req.cmd_sid );
kishino 3:9f90024d7fb2 200 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 3:9f90024d7fb2 201
kishino 3:9f90024d7fb2 202 // Send uart command request
kishino 3:9f90024d7fb2 203 sendUart( command_len, command_array );
kishino 3:9f90024d7fb2 204
kishino 3:9f90024d7fb2 205 // Wait UART response
kishino 3:9f90024d7fb2 206 ret = mUartCommand.wait();
kishino 3:9f90024d7fb2 207 if( ret != 0 )
kishino 3:9f90024d7fb2 208 {
kishino 3:9f90024d7fb2 209 printf( "disconnect failed\r\n" );
kishino 3:9f90024d7fb2 210 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 211 return -1;
kishino 3:9f90024d7fb2 212 }
kishino 3:9f90024d7fb2 213
kishino 3:9f90024d7fb2 214 if( mUartCommand.getCommandStatus() != 0 )
kishino 3:9f90024d7fb2 215 {
kishino 3:9f90024d7fb2 216 printf("disconnect status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 3:9f90024d7fb2 217 ret = -1;
kishino 3:9f90024d7fb2 218 }
kishino 3:9f90024d7fb2 219 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 5:ef3befe3edad 220 return ret;
kishino 3:9f90024d7fb2 221 }
kishino 3:9f90024d7fb2 222
kishino 3:9f90024d7fb2 223 int C_YDwifiInterface::scan( const char *ssid_p, unsigned char *bssid_p
kishino 3:9f90024d7fb2 224 , void (*result_handler_p)(tagSCAN_RESULT_T *scan_result) )
kishino 3:9f90024d7fb2 225 {
kishino 3:9f90024d7fb2 226 // Get buffer for response payloadfrom MemoryPool
kishino 3:9f90024d7fb2 227 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 3:9f90024d7fb2 228 if( payload_buf == NULL )
kishino 3:9f90024d7fb2 229 {
kishino 3:9f90024d7fb2 230 printf("scan payload_buf NULL\r\n");
kishino 3:9f90024d7fb2 231 return -1;
kishino 3:9f90024d7fb2 232 }
kishino 3:9f90024d7fb2 233
kishino 3:9f90024d7fb2 234 tagWIFI_SCAN_REQ_T req;
kishino 3:9f90024d7fb2 235 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 236 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 237 unsigned short payload_len;
kishino 3:9f90024d7fb2 238 unsigned int command_len;
kishino 3:9f90024d7fb2 239 unsigned int buf_len = 0;
kishino 3:9f90024d7fb2 240 int ret;
kishino 3:9f90024d7fb2 241
kishino 3:9f90024d7fb2 242 memset( &req, 0, sizeof(tagWIFI_SCAN_REQ_T) );
kishino 3:9f90024d7fb2 243 // Make request
kishino 3:9f90024d7fb2 244 req.cmd_sid = UART_CMD_SID_WIFI_SCAN_REQ;
kishino 3:9f90024d7fb2 245 buf_len++;
kishino 3:9f90024d7fb2 246 req.seq = mUartRequestSeq++;
kishino 3:9f90024d7fb2 247 buf_len++;
kishino 3:9f90024d7fb2 248
kishino 3:9f90024d7fb2 249 // Set scan type(Active scan)
kishino 3:9f90024d7fb2 250 req.scan_type = 0;
kishino 3:9f90024d7fb2 251 buf_len++;
kishino 3:9f90024d7fb2 252 // Set bss type(any)
kishino 3:9f90024d7fb2 253 req.bss_type = 2;
kishino 3:9f90024d7fb2 254 buf_len++;
kishino 3:9f90024d7fb2 255 // Set BSSID
kishino 3:9f90024d7fb2 256 if( bssid_p != NULL )
kishino 3:9f90024d7fb2 257 {
kishino 3:9f90024d7fb2 258 memcpy( req.bssid, bssid_p, BSSID_MAC_LENTH );
kishino 3:9f90024d7fb2 259 }
kishino 3:9f90024d7fb2 260 buf_len += BSSID_MAC_LENTH;
kishino 3:9f90024d7fb2 261 // Set channel list(0)
kishino 3:9f90024d7fb2 262 req.chan_list = 0;
kishino 3:9f90024d7fb2 263 buf_len++;
kishino 3:9f90024d7fb2 264 //Set SSID
kishino 3:9f90024d7fb2 265 if( ssid_p != NULL )
kishino 3:9f90024d7fb2 266 {
kishino 3:9f90024d7fb2 267 strcpy( (char *)req.ssid, ssid_p );
kishino 3:9f90024d7fb2 268 buf_len += strlen(ssid_p);
kishino 3:9f90024d7fb2 269 }
kishino 7:e88ccbe0225f 270 buf_len++;
kishino 7:e88ccbe0225f 271
kishino 3:9f90024d7fb2 272 // Make command payload
kishino 3:9f90024d7fb2 273 payload_len = C_YD_UartMsg::makePayload( buf_len, (unsigned char *)&req, payload_array );
kishino 7:e88ccbe0225f 274
kishino 3:9f90024d7fb2 275 // Make all command request
kishino 3:9f90024d7fb2 276 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 3:9f90024d7fb2 277
kishino 3:9f90024d7fb2 278 // Set data for response
kishino 3:9f90024d7fb2 279 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 3:9f90024d7fb2 280 mUartCommand.setCommandSID( req.cmd_sid );
kishino 3:9f90024d7fb2 281 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 3:9f90024d7fb2 282 // Set scan result callback
kishino 3:9f90024d7fb2 283 mUartCommand.setScanResultHandler( result_handler_p );
kishino 3:9f90024d7fb2 284
kishino 3:9f90024d7fb2 285 // Send uart command request
kishino 3:9f90024d7fb2 286 sendUart( command_len, command_array );
kishino 7:e88ccbe0225f 287
kishino 3:9f90024d7fb2 288 // Wait UART response
kishino 3:9f90024d7fb2 289 ret = mUartCommand.wait();
kishino 3:9f90024d7fb2 290 printf( "scan wait:%d\r\n", ret );
kishino 3:9f90024d7fb2 291 if( ret != 0 )
kishino 3:9f90024d7fb2 292 {
kishino 3:9f90024d7fb2 293 printf( "scan failed\r\n" );
kishino 3:9f90024d7fb2 294 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 295 return -1;
kishino 3:9f90024d7fb2 296 }
kishino 3:9f90024d7fb2 297
kishino 3:9f90024d7fb2 298 if( mUartCommand.getCommandStatus() != 0 )
kishino 3:9f90024d7fb2 299 {
kishino 3:9f90024d7fb2 300 printf("scan status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 3:9f90024d7fb2 301 ret = -1;
kishino 3:9f90024d7fb2 302 }
kishino 7:e88ccbe0225f 303
kishino 3:9f90024d7fb2 304 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 305
kishino 5:ef3befe3edad 306 return ret;
kishino 5:ef3befe3edad 307 }
kishino 5:ef3befe3edad 308
kishino 5:ef3befe3edad 309 int C_YDwifiInterface::wifi_on( const char *country_p )
kishino 5:ef3befe3edad 310 {
kishino 5:ef3befe3edad 311 // Parameter check
kishino 5:ef3befe3edad 312 if( country_p == NULL )
kishino 5:ef3befe3edad 313 {
kishino 5:ef3befe3edad 314 printf("wifi_on parameter error\r\n");
kishino 5:ef3befe3edad 315 return -1;
kishino 5:ef3befe3edad 316 }
kishino 5:ef3befe3edad 317
kishino 5:ef3befe3edad 318 // Get buffer for response payloadfrom MemoryPool
kishino 5:ef3befe3edad 319 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 5:ef3befe3edad 320 if( payload_buf == NULL )
kishino 5:ef3befe3edad 321 {
kishino 5:ef3befe3edad 322 printf("wifi_on payload_buf NULL\r\n");
kishino 5:ef3befe3edad 323 return -1;
kishino 5:ef3befe3edad 324 }
kishino 5:ef3befe3edad 325
kishino 5:ef3befe3edad 326 tagWIFI_ON_REQ_T req;
kishino 5:ef3befe3edad 327 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 5:ef3befe3edad 328 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 5:ef3befe3edad 329 unsigned short payload_len;
kishino 5:ef3befe3edad 330 unsigned int command_len;
kishino 5:ef3befe3edad 331 int ret;
kishino 5:ef3befe3edad 332
kishino 5:ef3befe3edad 333 // Make request
kishino 5:ef3befe3edad 334 req.cmd_sid = UART_CMD_SID_WIFI_ON_REQ;
kishino 5:ef3befe3edad 335 req.seq = mUartRequestSeq++;
kishino 5:ef3befe3edad 336 memcpy( req.country, country_p, COUNTRYC_CODE_LENTH );
kishino 5:ef3befe3edad 337
kishino 5:ef3befe3edad 338 // Make command payload
kishino 5:ef3befe3edad 339 payload_len = C_YD_UartMsg::makePayload( sizeof(tagWIFI_ON_REQ_T), (unsigned char *)&req, payload_array );
kishino 5:ef3befe3edad 340 // Make all command request
kishino 5:ef3befe3edad 341 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 5:ef3befe3edad 342
kishino 5:ef3befe3edad 343 // Set data for response
kishino 5:ef3befe3edad 344 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 5:ef3befe3edad 345 mUartCommand.setCommandSID( req.cmd_sid );
kishino 5:ef3befe3edad 346 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 5:ef3befe3edad 347
kishino 5:ef3befe3edad 348 // Send uart command request
kishino 5:ef3befe3edad 349 sendUart( command_len, command_array );
kishino 5:ef3befe3edad 350
kishino 5:ef3befe3edad 351 // Wait UART response
kishino 5:ef3befe3edad 352 ret = mUartCommand.wait();
kishino 5:ef3befe3edad 353 if( ret != 0 )
kishino 5:ef3befe3edad 354 {
kishino 5:ef3befe3edad 355 printf( "wifi_on failed\r\n" );
kishino 5:ef3befe3edad 356 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 5:ef3befe3edad 357 return -1;
kishino 5:ef3befe3edad 358 }
kishino 5:ef3befe3edad 359
kishino 5:ef3befe3edad 360 if( mUartCommand.getCommandStatus() != 0 )
kishino 5:ef3befe3edad 361 {
kishino 5:ef3befe3edad 362 printf("wifi_on status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 5:ef3befe3edad 363 ret = -1;
kishino 5:ef3befe3edad 364 }
kishino 5:ef3befe3edad 365 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 5:ef3befe3edad 366
kishino 5:ef3befe3edad 367 return ret;
kishino 5:ef3befe3edad 368 }
kishino 5:ef3befe3edad 369
kishino 5:ef3befe3edad 370 int C_YDwifiInterface::wifi_off()
kishino 5:ef3befe3edad 371 {
kishino 5:ef3befe3edad 372 // Get buffer for response payloadfrom MemoryPool
kishino 5:ef3befe3edad 373 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 5:ef3befe3edad 374 if( payload_buf == NULL )
kishino 5:ef3befe3edad 375 {
kishino 5:ef3befe3edad 376 printf("wifi_off payload_buf NULL\r\n");
kishino 5:ef3befe3edad 377 return -1;
kishino 5:ef3befe3edad 378 }
kishino 5:ef3befe3edad 379
kishino 5:ef3befe3edad 380 tagWIFI_OFF_REQ_T req;
kishino 5:ef3befe3edad 381 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 5:ef3befe3edad 382 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 5:ef3befe3edad 383 unsigned short payload_len;
kishino 5:ef3befe3edad 384 unsigned int command_len;
kishino 5:ef3befe3edad 385 int ret;
kishino 5:ef3befe3edad 386
kishino 5:ef3befe3edad 387 // Make request
kishino 5:ef3befe3edad 388 req.cmd_sid = UART_CMD_SID_WIFI_OFF_REQ;
kishino 5:ef3befe3edad 389 req.seq = mUartRequestSeq++;
kishino 5:ef3befe3edad 390
kishino 5:ef3befe3edad 391 // Make command payload
kishino 5:ef3befe3edad 392 payload_len = C_YD_UartMsg::makePayload( sizeof(tagWIFI_OFF_REQ_T), (unsigned char *)&req, payload_array );
kishino 5:ef3befe3edad 393 // Make all command request
kishino 5:ef3befe3edad 394 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 5:ef3befe3edad 395
kishino 5:ef3befe3edad 396 // Set data for response
kishino 5:ef3befe3edad 397 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 5:ef3befe3edad 398 mUartCommand.setCommandSID( req.cmd_sid );
kishino 5:ef3befe3edad 399 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 5:ef3befe3edad 400
kishino 5:ef3befe3edad 401 // Send uart command request
kishino 5:ef3befe3edad 402 sendUart( command_len, command_array );
kishino 5:ef3befe3edad 403
kishino 5:ef3befe3edad 404 // Wait UART response
kishino 5:ef3befe3edad 405 ret = mUartCommand.wait();
kishino 5:ef3befe3edad 406 if( ret != 0 )
kishino 5:ef3befe3edad 407 {
kishino 5:ef3befe3edad 408 printf( "wifi_off failed\r\n" );
kishino 5:ef3befe3edad 409 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 5:ef3befe3edad 410 return -1;
kishino 5:ef3befe3edad 411 }
kishino 5:ef3befe3edad 412
kishino 5:ef3befe3edad 413 if( mUartCommand.getCommandStatus() != 0 )
kishino 5:ef3befe3edad 414 {
kishino 5:ef3befe3edad 415 printf("wifi_off status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 5:ef3befe3edad 416 ret = -1;
kishino 5:ef3befe3edad 417 }
kishino 5:ef3befe3edad 418 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 5:ef3befe3edad 419
kishino 5:ef3befe3edad 420 return ret;
kishino 5:ef3befe3edad 421 }
kishino 5:ef3befe3edad 422
kishino 5:ef3befe3edad 423 int C_YDwifiInterface::getRssi( signed char *rssi_p )
kishino 5:ef3befe3edad 424 {
kishino 5:ef3befe3edad 425 if( rssi_p == NULL )
kishino 5:ef3befe3edad 426 {
kishino 5:ef3befe3edad 427 printf("getRssi parameter error\r\n");
kishino 5:ef3befe3edad 428 return -1;
kishino 5:ef3befe3edad 429 }
kishino 5:ef3befe3edad 430
kishino 5:ef3befe3edad 431 // Get buffer for response payload from MemoryPool
kishino 5:ef3befe3edad 432 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 5:ef3befe3edad 433 if( payload_buf == NULL )
kishino 5:ef3befe3edad 434 {
kishino 5:ef3befe3edad 435 printf("getRssi payload_buf NULL\r\n");
kishino 5:ef3befe3edad 436 return -1;
kishino 5:ef3befe3edad 437 }
kishino 5:ef3befe3edad 438
kishino 5:ef3befe3edad 439 tagWIFI_GET_STA_RSSI_REQ_T req;
kishino 5:ef3befe3edad 440 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 5:ef3befe3edad 441 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 5:ef3befe3edad 442 unsigned short payload_len;
kishino 5:ef3befe3edad 443 unsigned int command_len;
kishino 5:ef3befe3edad 444 int ret;
kishino 5:ef3befe3edad 445
kishino 5:ef3befe3edad 446 // Make request
kishino 5:ef3befe3edad 447 req.cmd_sid = UART_CMD_SID_WIFI_GET_STA_RSSI_REQ;
kishino 5:ef3befe3edad 448 req.seq = mUartRequestSeq++;
kishino 5:ef3befe3edad 449
kishino 5:ef3befe3edad 450 // Make command payload
kishino 5:ef3befe3edad 451 payload_len = C_YD_UartMsg::makePayload( sizeof(tagWIFI_GET_STA_RSSI_REQ_T), (unsigned char *)&req, payload_array );
kishino 5:ef3befe3edad 452 // Make all command request
kishino 5:ef3befe3edad 453 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 5:ef3befe3edad 454
kishino 5:ef3befe3edad 455 // Set data for response
kishino 5:ef3befe3edad 456 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 5:ef3befe3edad 457 mUartCommand.setCommandSID( req.cmd_sid );
kishino 5:ef3befe3edad 458 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 5:ef3befe3edad 459
kishino 5:ef3befe3edad 460 // Send uart command request
kishino 5:ef3befe3edad 461 sendUart( command_len, command_array );
kishino 5:ef3befe3edad 462
kishino 5:ef3befe3edad 463 // Wait UART response
kishino 5:ef3befe3edad 464 ret = mUartCommand.wait();
kishino 5:ef3befe3edad 465 if( ret != 0 )
kishino 5:ef3befe3edad 466 {
kishino 5:ef3befe3edad 467 printf( "getRssi failed\r\n" );
kishino 5:ef3befe3edad 468 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 5:ef3befe3edad 469 return -1;
kishino 5:ef3befe3edad 470 }
kishino 5:ef3befe3edad 471
kishino 5:ef3befe3edad 472 *rssi_p = (signed char)payload_buf->buf[2];
kishino 5:ef3befe3edad 473
kishino 5:ef3befe3edad 474 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 475 return 0;
kishino 5:ef3befe3edad 476 }
kishino 6:70f522934032 477
kishino 6:70f522934032 478 int C_YDwifiInterface::getWifiStatus( tagWIFI_STATUS_T *status_p)
kishino 6:70f522934032 479 {
kishino 6:70f522934032 480 if( status_p == NULL )
kishino 6:70f522934032 481 {
kishino 6:70f522934032 482 printf("getWifiStatus parameter error\r\n");
kishino 6:70f522934032 483 return -1;
kishino 6:70f522934032 484 }
kishino 6:70f522934032 485
kishino 6:70f522934032 486 // Get buffer for response payload from MemoryPool
kishino 6:70f522934032 487 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 6:70f522934032 488 if( payload_buf == NULL )
kishino 6:70f522934032 489 {
kishino 6:70f522934032 490 printf("getWifiStatus payload_buf NULL\r\n");
kishino 6:70f522934032 491 return -1;
kishino 6:70f522934032 492 }
kishino 6:70f522934032 493
kishino 6:70f522934032 494 tagWIFI_GET_STATUS_REQ_T req;
kishino 6:70f522934032 495 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 6:70f522934032 496 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 6:70f522934032 497 unsigned short payload_len;
kishino 6:70f522934032 498 unsigned int command_len;
kishino 6:70f522934032 499 int ret;
kishino 6:70f522934032 500
kishino 6:70f522934032 501 // Make request
kishino 6:70f522934032 502 req.cmd_sid = UART_CMD_SID_WIFI_GET_STATUS_REQ;
kishino 6:70f522934032 503 req.seq = mUartRequestSeq++;
kishino 6:70f522934032 504 req.interface = 0;
kishino 6:70f522934032 505
kishino 6:70f522934032 506 // Make command payload
kishino 6:70f522934032 507 payload_len = C_YD_UartMsg::makePayload( sizeof(tagWIFI_GET_STATUS_REQ_T), (unsigned char *)&req, payload_array );
kishino 6:70f522934032 508 // Make all command request
kishino 6:70f522934032 509 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 6:70f522934032 510
kishino 6:70f522934032 511 // Set data for response
kishino 6:70f522934032 512 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 6:70f522934032 513 mUartCommand.setCommandSID( req.cmd_sid );
kishino 6:70f522934032 514 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 6:70f522934032 515
kishino 6:70f522934032 516 // Send uart command request
kishino 6:70f522934032 517 sendUart( command_len, command_array );
kishino 6:70f522934032 518
kishino 6:70f522934032 519 // Wait UART response
kishino 6:70f522934032 520 ret = mUartCommand.wait();
kishino 6:70f522934032 521 if( ret != 0 )
kishino 6:70f522934032 522 {
kishino 6:70f522934032 523 printf( "getWifiStatus failed\r\n" );
kishino 6:70f522934032 524 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 6:70f522934032 525 return -1;
kishino 6:70f522934032 526 }
kishino 6:70f522934032 527
kishino 6:70f522934032 528 // set status
kishino 6:70f522934032 529 status_p->status = (E_WIFI_STATUS)payload_buf->buf[2];
kishino 6:70f522934032 530
kishino 6:70f522934032 531 // set Mac address
kishino 6:70f522934032 532 if( status_p->status != e_STATUS_OFF )
kishino 6:70f522934032 533 {
kishino 6:70f522934032 534 memcpy( status_p->mac_address, &payload_buf->buf[3], BSSID_MAC_LENTH );
kishino 6:70f522934032 535 }
kishino 6:70f522934032 536
kishino 6:70f522934032 537 // set SSID
kishino 6:70f522934032 538 if( ( status_p->status == e_STA_JOINED ) == ( status_p->status == e_AP_STARTED ) )
kishino 6:70f522934032 539 {
kishino 6:70f522934032 540 memcpy( status_p->ssid, &payload_buf->buf[9], strlen( (char *)&payload_buf->buf[9]) );
kishino 6:70f522934032 541 }
kishino 6:70f522934032 542
kishino 6:70f522934032 543 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 6:70f522934032 544 return 0;
kishino 6:70f522934032 545 }