Ryo Iizuka / NySNICInterface

Dependents:   MurataTypeYD_Ping

Fork of NySNICInterface by Ryo Iizuka

Committer:
kishino
Date:
Thu Mar 13 01:34:56 2014 +0000
Revision:
3:9f90024d7fb2
Parent:
2:0ba43344c814
Child:
5:ef3befe3edad
The following API was created.;  =>Connect to AP.;  =>Disconnect from AP.;  =>Scan AP.

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 printf( "getFWversion wait:%d\r\n", ret );
kishino 2:0ba43344c814 66 if( ret != 0 )
kishino 2:0ba43344c814 67 {
kishino 2:0ba43344c814 68 printf( "getFWversion failed\r\n" );
kishino 2:0ba43344c814 69 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 2:0ba43344c814 70 return -1;
kishino 2:0ba43344c814 71 }
kishino 2:0ba43344c814 72
kishino 2:0ba43344c814 73 if( mUartCommand.getCommandStatus() == 0 )
kishino 2:0ba43344c814 74 {
kishino 2:0ba43344c814 75 unsigned char version_len = payload_buf->buf[3];
kishino 2:0ba43344c814 76 memcpy( version_p, &payload_buf->buf[4], version_len );
kishino 2:0ba43344c814 77 }
kishino 2:0ba43344c814 78 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 2:0ba43344c814 79 return 0;
kishino 2:0ba43344c814 80 }
kishino 3:9f90024d7fb2 81
kishino 3:9f90024d7fb2 82 int C_YDwifiInterface::connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type
kishino 3:9f90024d7fb2 83 , const char *sec_key_p, unsigned char sec_key_len)
kishino 3:9f90024d7fb2 84 {
kishino 3:9f90024d7fb2 85 // Parameter check(SSID)
kishino 3:9f90024d7fb2 86 if( (ssid_p == NULL) || (ssid_len == 0) )
kishino 3:9f90024d7fb2 87 {
kishino 3:9f90024d7fb2 88 printf( "connect failed [ parameter NG:SSID ]\r\n" );
kishino 3:9f90024d7fb2 89 return -1;
kishino 3:9f90024d7fb2 90 }
kishino 3:9f90024d7fb2 91
kishino 3:9f90024d7fb2 92 // Parameter check(Security key)
kishino 3:9f90024d7fb2 93 if( (sec_type != e_SEC_OPEN) && ( (sec_key_len == 0) || (sec_key_p == NULL) ) )
kishino 3:9f90024d7fb2 94 {
kishino 3:9f90024d7fb2 95 printf( "connect failed [ parameter NG:Security key ]\r\n" );
kishino 3:9f90024d7fb2 96 return -1;
kishino 3:9f90024d7fb2 97 }
kishino 3:9f90024d7fb2 98
kishino 3:9f90024d7fb2 99 // Get buffer for response payloadfrom MemoryPool
kishino 3:9f90024d7fb2 100 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 3:9f90024d7fb2 101 if( payload_buf == NULL )
kishino 3:9f90024d7fb2 102 {
kishino 3:9f90024d7fb2 103 printf("connect payload_buf NULL\r\n");
kishino 3:9f90024d7fb2 104 return -1;
kishino 3:9f90024d7fb2 105 }
kishino 3:9f90024d7fb2 106
kishino 3:9f90024d7fb2 107 unsigned char buf[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 108 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 109 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 110 unsigned int buf_len = 0;
kishino 3:9f90024d7fb2 111 unsigned short payload_len;
kishino 3:9f90024d7fb2 112 unsigned int command_len;
kishino 3:9f90024d7fb2 113 int ret;
kishino 3:9f90024d7fb2 114
kishino 3:9f90024d7fb2 115 memset( buf, 0, UART_REQUEST_PAYLOAD_MAX );
kishino 3:9f90024d7fb2 116 // Make request
kishino 3:9f90024d7fb2 117 buf[0] = UART_CMD_SID_WIFI_JOIN_REQ;
kishino 3:9f90024d7fb2 118 buf_len++;
kishino 3:9f90024d7fb2 119 buf[1] = mUartRequestSeq++;
kishino 3:9f90024d7fb2 120 buf_len++;
kishino 3:9f90024d7fb2 121 // SSID
kishino 3:9f90024d7fb2 122 memcpy( &buf[2], ssid_p, ssid_len );
kishino 3:9f90024d7fb2 123 buf_len += ssid_len;
kishino 3:9f90024d7fb2 124 buf_len++;
kishino 3:9f90024d7fb2 125
kishino 3:9f90024d7fb2 126 // Security mode
kishino 3:9f90024d7fb2 127 buf[ buf_len ] = (unsigned char)sec_type;
kishino 3:9f90024d7fb2 128 buf_len++;
kishino 3:9f90024d7fb2 129
kishino 3:9f90024d7fb2 130 // Security key
kishino 3:9f90024d7fb2 131 if( sec_type != e_SEC_OPEN )
kishino 3:9f90024d7fb2 132 {
kishino 3:9f90024d7fb2 133 buf[ buf_len ] = sec_key_len;
kishino 3:9f90024d7fb2 134 buf_len++;
kishino 3:9f90024d7fb2 135 if( sec_key_len > 0 )
kishino 3:9f90024d7fb2 136 {
kishino 3:9f90024d7fb2 137 memcpy( &buf[buf_len], sec_key_p, sec_key_len );
kishino 3:9f90024d7fb2 138 buf_len += sec_key_len;
kishino 3:9f90024d7fb2 139 }
kishino 3:9f90024d7fb2 140 }
kishino 3:9f90024d7fb2 141 // Make command payload
kishino 3:9f90024d7fb2 142 payload_len = C_YD_UartMsg::makePayload( buf_len, (unsigned char *)buf, payload_array );
kishino 3:9f90024d7fb2 143 // Make all command request
kishino 3:9f90024d7fb2 144 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 3:9f90024d7fb2 145 // Set data for response
kishino 3:9f90024d7fb2 146 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 3:9f90024d7fb2 147 mUartCommand.setCommandSID( UART_CMD_SID_WIFI_JOIN_REQ );
kishino 3:9f90024d7fb2 148 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 3:9f90024d7fb2 149
kishino 3:9f90024d7fb2 150 // Send uart command request
kishino 3:9f90024d7fb2 151 sendUart( command_len, command_array );
kishino 3:9f90024d7fb2 152
kishino 3:9f90024d7fb2 153 // Wait UART response
kishino 3:9f90024d7fb2 154 ret = mUartCommand.wait();
kishino 3:9f90024d7fb2 155 if( ret != 0 )
kishino 3:9f90024d7fb2 156 {
kishino 3:9f90024d7fb2 157 printf( "join failed\r\n" );
kishino 3:9f90024d7fb2 158 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 159 return -1;
kishino 3:9f90024d7fb2 160 }
kishino 3:9f90024d7fb2 161
kishino 3:9f90024d7fb2 162 if( mUartCommand.getCommandStatus() != 0 )
kishino 3:9f90024d7fb2 163 {
kishino 3:9f90024d7fb2 164 printf("join status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 3:9f90024d7fb2 165 ret = -1;
kishino 3:9f90024d7fb2 166 }
kishino 3:9f90024d7fb2 167 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 168
kishino 3:9f90024d7fb2 169 return ret;
kishino 3:9f90024d7fb2 170 }
kishino 3:9f90024d7fb2 171
kishino 3:9f90024d7fb2 172 int C_YDwifiInterface::disconnect()
kishino 3:9f90024d7fb2 173 {
kishino 3:9f90024d7fb2 174 // Get buffer for response payloadfrom MemoryPool
kishino 3:9f90024d7fb2 175 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 3:9f90024d7fb2 176 if( payload_buf == NULL )
kishino 3:9f90024d7fb2 177 {
kishino 3:9f90024d7fb2 178 printf("disconnect payload_buf NULL\r\n");
kishino 3:9f90024d7fb2 179 return -1;
kishino 3:9f90024d7fb2 180 }
kishino 3:9f90024d7fb2 181
kishino 3:9f90024d7fb2 182 tagWIFI_DISCONNECT_REQ_T req;
kishino 3:9f90024d7fb2 183 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 184 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 185 unsigned short payload_len;
kishino 3:9f90024d7fb2 186 unsigned int command_len;
kishino 3:9f90024d7fb2 187 int ret;
kishino 3:9f90024d7fb2 188
kishino 3:9f90024d7fb2 189 // Make request
kishino 3:9f90024d7fb2 190 req.cmd_sid = UART_CMD_SID_WIFI_DISCONNECT_REQ;
kishino 3:9f90024d7fb2 191 req.seq = mUartRequestSeq++;
kishino 3:9f90024d7fb2 192
kishino 3:9f90024d7fb2 193 // Make command payload
kishino 3:9f90024d7fb2 194 payload_len = C_YD_UartMsg::makePayload( sizeof(tagWIFI_DISCONNECT_REQ_T), (unsigned char *)&req, payload_array );
kishino 3:9f90024d7fb2 195 // Make all command request
kishino 3:9f90024d7fb2 196 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 3:9f90024d7fb2 197
kishino 3:9f90024d7fb2 198 // Set data for response
kishino 3:9f90024d7fb2 199 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 3:9f90024d7fb2 200 mUartCommand.setCommandSID( req.cmd_sid );
kishino 3:9f90024d7fb2 201 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 3:9f90024d7fb2 202
kishino 3:9f90024d7fb2 203 // Send uart command request
kishino 3:9f90024d7fb2 204 sendUart( command_len, command_array );
kishino 3:9f90024d7fb2 205
kishino 3:9f90024d7fb2 206 // Wait UART response
kishino 3:9f90024d7fb2 207 ret = mUartCommand.wait();
kishino 3:9f90024d7fb2 208 if( ret != 0 )
kishino 3:9f90024d7fb2 209 {
kishino 3:9f90024d7fb2 210 printf( "disconnect failed\r\n" );
kishino 3:9f90024d7fb2 211 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 212 return -1;
kishino 3:9f90024d7fb2 213 }
kishino 3:9f90024d7fb2 214
kishino 3:9f90024d7fb2 215 if( mUartCommand.getCommandStatus() != 0 )
kishino 3:9f90024d7fb2 216 {
kishino 3:9f90024d7fb2 217 printf("disconnect status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 3:9f90024d7fb2 218 ret = -1;
kishino 3:9f90024d7fb2 219 }
kishino 3:9f90024d7fb2 220 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 221 return 0;
kishino 3:9f90024d7fb2 222 }
kishino 3:9f90024d7fb2 223
kishino 3:9f90024d7fb2 224 int C_YDwifiInterface::scan( const char *ssid_p, unsigned char *bssid_p
kishino 3:9f90024d7fb2 225 , void (*result_handler_p)(tagSCAN_RESULT_T *scan_result) )
kishino 3:9f90024d7fb2 226 {
kishino 3:9f90024d7fb2 227 // Get buffer for response payloadfrom MemoryPool
kishino 3:9f90024d7fb2 228 tagMEMPOOL_BLOCK_T *payload_buf = gMEMPOOL_PAYLOAD.alloc();
kishino 3:9f90024d7fb2 229 if( payload_buf == NULL )
kishino 3:9f90024d7fb2 230 {
kishino 3:9f90024d7fb2 231 printf("scan payload_buf NULL\r\n");
kishino 3:9f90024d7fb2 232 return -1;
kishino 3:9f90024d7fb2 233 }
kishino 3:9f90024d7fb2 234
kishino 3:9f90024d7fb2 235 tagWIFI_SCAN_REQ_T req;
kishino 3:9f90024d7fb2 236 unsigned char payload_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 237 unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
kishino 3:9f90024d7fb2 238 unsigned short payload_len;
kishino 3:9f90024d7fb2 239 unsigned int command_len;
kishino 3:9f90024d7fb2 240 unsigned int buf_len = 0;
kishino 3:9f90024d7fb2 241 int ret;
kishino 3:9f90024d7fb2 242
kishino 3:9f90024d7fb2 243 memset( &req, 0, sizeof(tagWIFI_SCAN_REQ_T) );
kishino 3:9f90024d7fb2 244 // Make request
kishino 3:9f90024d7fb2 245 req.cmd_sid = UART_CMD_SID_WIFI_SCAN_REQ;
kishino 3:9f90024d7fb2 246 buf_len++;
kishino 3:9f90024d7fb2 247 req.seq = mUartRequestSeq++;
kishino 3:9f90024d7fb2 248 buf_len++;
kishino 3:9f90024d7fb2 249
kishino 3:9f90024d7fb2 250 // Set scan type(Active scan)
kishino 3:9f90024d7fb2 251 req.scan_type = 0;
kishino 3:9f90024d7fb2 252 buf_len++;
kishino 3:9f90024d7fb2 253 // Set bss type(any)
kishino 3:9f90024d7fb2 254 req.bss_type = 2;
kishino 3:9f90024d7fb2 255 buf_len++;
kishino 3:9f90024d7fb2 256 // Set BSSID
kishino 3:9f90024d7fb2 257 if( bssid_p != NULL )
kishino 3:9f90024d7fb2 258 {
kishino 3:9f90024d7fb2 259 memcpy( req.bssid, bssid_p, BSSID_MAC_LENTH );
kishino 3:9f90024d7fb2 260 }
kishino 3:9f90024d7fb2 261 buf_len += BSSID_MAC_LENTH;
kishino 3:9f90024d7fb2 262 // Set channel list(0)
kishino 3:9f90024d7fb2 263 req.chan_list = 0;
kishino 3:9f90024d7fb2 264 buf_len++;
kishino 3:9f90024d7fb2 265 //Set SSID
kishino 3:9f90024d7fb2 266 if( ssid_p != NULL )
kishino 3:9f90024d7fb2 267 {
kishino 3:9f90024d7fb2 268 strcpy( (char *)req.ssid, ssid_p );
kishino 3:9f90024d7fb2 269 buf_len += strlen(ssid_p);
kishino 3:9f90024d7fb2 270 }
kishino 3:9f90024d7fb2 271 else
kishino 3:9f90024d7fb2 272 {
kishino 3:9f90024d7fb2 273 buf_len++;
kishino 3:9f90024d7fb2 274 }
kishino 3:9f90024d7fb2 275
kishino 3:9f90024d7fb2 276 // Make command payload
kishino 3:9f90024d7fb2 277 payload_len = C_YD_UartMsg::makePayload( buf_len, (unsigned char *)&req, payload_array );
kishino 3:9f90024d7fb2 278 // Make all command request
kishino 3:9f90024d7fb2 279 command_len = C_YD_UartMsg::makeRequest( UART_CMD_ID_WIFI, payload_array, payload_len, command_array );
kishino 3:9f90024d7fb2 280
kishino 3:9f90024d7fb2 281 // Set data for response
kishino 3:9f90024d7fb2 282 mUartCommand.setCommandID( UART_CMD_ID_WIFI );
kishino 3:9f90024d7fb2 283 mUartCommand.setCommandSID( req.cmd_sid );
kishino 3:9f90024d7fb2 284 mUartCommand.setResponseBuf( payload_buf->buf );
kishino 3:9f90024d7fb2 285 // Set scan result callback
kishino 3:9f90024d7fb2 286 mUartCommand.setScanResultHandler( result_handler_p );
kishino 3:9f90024d7fb2 287
kishino 3:9f90024d7fb2 288 // Send uart command request
kishino 3:9f90024d7fb2 289 sendUart( command_len, command_array );
kishino 3:9f90024d7fb2 290
kishino 3:9f90024d7fb2 291 // Wait UART response
kishino 3:9f90024d7fb2 292 ret = mUartCommand.wait();
kishino 3:9f90024d7fb2 293 printf( "scan wait:%d\r\n", ret );
kishino 3:9f90024d7fb2 294 if( ret != 0 )
kishino 3:9f90024d7fb2 295 {
kishino 3:9f90024d7fb2 296 printf( "scan failed\r\n" );
kishino 3:9f90024d7fb2 297 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 298 return -1;
kishino 3:9f90024d7fb2 299 }
kishino 3:9f90024d7fb2 300
kishino 3:9f90024d7fb2 301 if( mUartCommand.getCommandStatus() != 0 )
kishino 3:9f90024d7fb2 302 {
kishino 3:9f90024d7fb2 303 printf("scan status:%02x\r\n", mUartCommand.getCommandStatus());
kishino 3:9f90024d7fb2 304 ret = -1;
kishino 3:9f90024d7fb2 305 }
kishino 3:9f90024d7fb2 306 gMEMPOOL_PAYLOAD.free( payload_buf );
kishino 3:9f90024d7fb2 307
kishino 3:9f90024d7fb2 308 return 0;
kishino 3:9f90024d7fb2 309 }