David Fletcher
/
cc3100_test
TI's CC3100 host driver and demo. Experimental and a work in progress.
Embed:
(wiki syntax)
Show/hide line numbers
cc3100_wlan.cpp
00001 /* 00002 * wlan.c - CC31xx/CC32xx Host Driver Implementation 00003 * 00004 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ 00005 * 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * 00014 * Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in the 00016 * documentation and/or other materials provided with the 00017 * distribution. 00018 * 00019 * Neither the name of Texas Instruments Incorporated nor the names of 00020 * its contributors may be used to endorse or promote products derived 00021 * from this software without specific prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00026 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00027 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00028 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00029 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00030 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00031 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00032 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00033 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 * 00035 */ 00036 00037 00038 00039 /*****************************************************************************/ 00040 /* Include files */ 00041 /*****************************************************************************/ 00042 #include "cc3100_simplelink.h" 00043 #include "cc3100_protocol.h" 00044 #include "cc3100_driver.h" 00045 00046 /*****************************************************************************/ 00047 /* Macro declarations */ 00048 /*****************************************************************************/ 00049 #define MAX_SSID_LEN (32) 00050 #define MAX_KEY_LEN (63) 00051 #define MAX_USER_LEN (32) 00052 #define MAX_ANON_USER_LEN (32) 00053 #define MAX_SMART_CONFIG_KEY (16) 00054 00055 00056 /***************************************************************************** 00057 sl_WlanConnect 00058 *****************************************************************************/ 00059 typedef struct 00060 { 00061 _WlanConnectEapCommand_t Args; 00062 _i8 Strings[MAX_SSID_LEN + MAX_KEY_LEN + MAX_USER_LEN + MAX_ANON_USER_LEN]; 00063 }_WlanConnectCmd_t; 00064 00065 typedef union 00066 { 00067 _WlanConnectCmd_t Cmd; 00068 _BasicResponse_t Rsp; 00069 }_SlWlanConnectMsg_u; 00070 00071 00072 #if _SL_INCLUDE_FUNC(sl_WlanConnect) 00073 _i16 sl_WlanConnect(_i8* pName, _i16 NameLen, _u8 *pMacAddr, SlSecParams_t* pSecParams , SlSecParamsExt_t* pSecExtParams) 00074 { 00075 _SlWlanConnectMsg_u Msg = {0}; 00076 _SlCmdCtrl_t CmdCtrl = {0}; 00077 00078 CmdCtrl.TxDescLen = 0;/* init */ 00079 CmdCtrl.RxDescLen = sizeof(_BasicResponse_t); 00080 00081 /* verify SSID length */ 00082 VERIFY_PROTOCOL(NameLen <= MAX_SSID_LEN); 00083 /* update SSID length */ 00084 Msg.Cmd.Args.Common.SsidLen = (_u8)NameLen; 00085 00086 /* Profile with no security */ 00087 /* Enterprise security profile */ 00088 if (NULL != pSecExtParams) 00089 { 00090 /* Update command opcode */ 00091 CmdCtrl.Opcode = SL_OPCODE_WLAN_WLANCONNECTEAPCOMMAND; 00092 CmdCtrl.TxDescLen += sizeof(_WlanConnectEapCommand_t); 00093 /* copy SSID */ 00094 sl_Memcpy(EAP_SSID_STRING(&Msg), pName, NameLen); 00095 CmdCtrl.TxDescLen += NameLen; 00096 /* Copy password if supplied */ 00097 if ((NULL != pSecParams) && (pSecParams->KeyLen > 0)) 00098 { 00099 /* update security type */ 00100 Msg.Cmd.Args.Common.SecType = pSecParams->Type; 00101 /* verify key length */ 00102 if (pSecParams->KeyLen > MAX_KEY_LEN) 00103 { 00104 return SL_INVALPARAM; 00105 } 00106 /* update key length */ 00107 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen; 00108 ARG_CHECK_PTR(pSecParams->Key); 00109 /* copy key */ 00110 sl_Memcpy(EAP_PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen); 00111 CmdCtrl.TxDescLen += pSecParams->KeyLen; 00112 } 00113 else 00114 { 00115 Msg.Cmd.Args.Common.PasswordLen = 0; 00116 } 00117 00118 ARG_CHECK_PTR(pSecExtParams); 00119 /* Update Eap bitmask */ 00120 Msg.Cmd.Args.EapBitmask = pSecExtParams->EapMethod; 00121 /* Update Certificate file ID index - currently not supported */ 00122 Msg.Cmd.Args.CertIndex = pSecExtParams->CertIndex; 00123 /* verify user length */ 00124 if (pSecExtParams->UserLen > MAX_USER_LEN) 00125 { 00126 return SL_INVALPARAM; 00127 } 00128 Msg.Cmd.Args.UserLen = pSecExtParams->UserLen; 00129 /* copy user name (identity) */ 00130 if(pSecExtParams->UserLen > 0) 00131 { 00132 sl_Memcpy(EAP_USER_STRING(&Msg), pSecExtParams->User, pSecExtParams->UserLen); 00133 CmdCtrl.TxDescLen += pSecExtParams->UserLen; 00134 } 00135 /* verify Anonymous user length */ 00136 if (pSecExtParams->AnonUserLen > MAX_ANON_USER_LEN) 00137 { 00138 return SL_INVALPARAM; 00139 } 00140 Msg.Cmd.Args.AnonUserLen = pSecExtParams->AnonUserLen; 00141 /* copy Anonymous user */ 00142 if(pSecExtParams->AnonUserLen > 0) 00143 { 00144 sl_Memcpy(EAP_ANON_USER_STRING(&Msg), pSecExtParams->AnonUser, pSecExtParams->AnonUserLen); 00145 CmdCtrl.TxDescLen += pSecExtParams->AnonUserLen; 00146 } 00147 00148 } 00149 00150 /* Regular or open security profile */ 00151 else 00152 { 00153 /* Update command opcode */ 00154 CmdCtrl.Opcode = SL_OPCODE_WLAN_WLANCONNECTCOMMAND; 00155 CmdCtrl.TxDescLen += sizeof(_WlanConnectCommon_t); 00156 /* copy SSID */ 00157 sl_Memcpy(SSID_STRING(&Msg), pName, NameLen); 00158 CmdCtrl.TxDescLen += NameLen; 00159 /* Copy password if supplied */ 00160 if( NULL != pSecParams ) 00161 { 00162 /* update security type */ 00163 Msg.Cmd.Args.Common.SecType = pSecParams->Type; 00164 /* verify key length is valid */ 00165 if (pSecParams->KeyLen > MAX_KEY_LEN) 00166 { 00167 return SL_INVALPARAM; 00168 } 00169 /* update key length */ 00170 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen; 00171 CmdCtrl.TxDescLen += pSecParams->KeyLen; 00172 /* copy key (could be no key in case of WPS pin) */ 00173 if( NULL != pSecParams->Key ) 00174 { 00175 sl_Memcpy(PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen); 00176 } 00177 } 00178 /* Profile with no security */ 00179 else 00180 { 00181 Msg.Cmd.Args.Common.PasswordLen = 0; 00182 Msg.Cmd.Args.Common.SecType = SL_SEC_TYPE_OPEN; 00183 } 00184 } 00185 /* If BSSID is not null, copy to buffer, otherwise set to 0 */ 00186 if(NULL != pMacAddr) 00187 { 00188 sl_Memcpy(Msg.Cmd.Args.Common.Bssid, pMacAddr, sizeof(Msg.Cmd.Args.Common.Bssid)); 00189 } 00190 else 00191 { 00192 sl_Memset(Msg.Cmd.Args.Common.Bssid, 0, sizeof(Msg.Cmd.Args.Common.Bssid)); 00193 } 00194 00195 00196 VERIFY_RET_OK ( _SlDrvCmdOp(&CmdCtrl, &Msg, NULL)); 00197 00198 return (_i16)Msg.Rsp.status; 00199 } 00200 #endif 00201 00202 /*******************************************************************************/ 00203 /* sl_Disconnect */ 00204 /* ******************************************************************************/ 00205 #if _SL_INCLUDE_FUNC(sl_WlanDisconnect) 00206 _i16 sl_WlanDisconnect(void) 00207 { 00208 return _SlDrvBasicCmd(SL_OPCODE_WLAN_WLANDISCONNECTCOMMAND); 00209 } 00210 #endif 00211 00212 /******************************************************************************/ 00213 /* sl_PolicySet */ 00214 /******************************************************************************/ 00215 typedef union 00216 { 00217 _WlanPoliciySetGet_t Cmd; 00218 _BasicResponse_t Rsp; 00219 }_SlPolicyMsg_u; 00220 00221 const _SlCmdCtrl_t _SlPolicySetCmdCtrl = 00222 { 00223 SL_OPCODE_WLAN_POLICYSETCOMMAND, 00224 sizeof(_WlanPoliciySetGet_t), 00225 sizeof(_BasicResponse_t) 00226 }; 00227 00228 #if _SL_INCLUDE_FUNC(sl_WlanPolicySet) 00229 _i16 sl_WlanPolicySet(_u8 Type , const _u8 Policy, _u8 *pVal,_u8 ValLen) 00230 { 00231 _SlPolicyMsg_u Msg; 00232 _SlCmdExt_t CmdExt; 00233 00234 CmdExt.TxPayloadLen = ValLen; 00235 CmdExt.RxPayloadLen = 0; 00236 CmdExt.pTxPayload = (_u8 *)pVal; 00237 CmdExt.pRxPayload = NULL; 00238 00239 00240 Msg.Cmd.PolicyType = Type; 00241 Msg.Cmd.PolicyOption = Policy; 00242 Msg.Cmd.PolicyOptionLen = ValLen; 00243 00244 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlPolicySetCmdCtrl, &Msg, &CmdExt)); 00245 00246 return (_i16)Msg.Rsp.status; 00247 } 00248 #endif 00249 00250 00251 /******************************************************************************/ 00252 /* sl_PolicyGet */ 00253 /******************************************************************************/ 00254 typedef union 00255 { 00256 _WlanPoliciySetGet_t Cmd; 00257 _WlanPoliciySetGet_t Rsp; 00258 }_SlPolicyGetMsg_u; 00259 00260 const _SlCmdCtrl_t _SlPolicyGetCmdCtrl = 00261 { 00262 SL_OPCODE_WLAN_POLICYGETCOMMAND, 00263 sizeof(_WlanPoliciySetGet_t), 00264 sizeof(_WlanPoliciySetGet_t) 00265 }; 00266 00267 #if _SL_INCLUDE_FUNC(sl_WlanPolicyGet) 00268 _i16 sl_WlanPolicyGet(_u8 Type , _u8 Policy,_u8 *pVal,_u8 *pValLen) 00269 { 00270 _SlPolicyGetMsg_u Msg; 00271 _SlCmdExt_t CmdExt; 00272 00273 if (*pValLen == 0) 00274 { 00275 return SL_EZEROLEN; 00276 } 00277 CmdExt.TxPayloadLen = 0; 00278 CmdExt.RxPayloadLen = *pValLen; 00279 CmdExt.pTxPayload = NULL; 00280 CmdExt.pRxPayload = pVal; 00281 CmdExt.ActualRxPayloadLen = 0; 00282 00283 00284 Msg.Cmd.PolicyType = Type; 00285 Msg.Cmd.PolicyOption = Policy; 00286 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlPolicyGetCmdCtrl, &Msg, &CmdExt)); 00287 00288 00289 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen) 00290 { 00291 *pValLen = Msg.Rsp.PolicyOptionLen; 00292 return SL_ESMALLBUF; 00293 } 00294 else 00295 { 00296 /* no pointer valus, fill the results into _i8 */ 00297 *pValLen = (_u8)CmdExt.ActualRxPayloadLen; 00298 if( 0 == CmdExt.ActualRxPayloadLen ) 00299 { 00300 *pValLen = 1; 00301 pVal[0] = Msg.Rsp.PolicyOption; 00302 } 00303 } 00304 return (_i16)SL_OS_RET_CODE_OK; 00305 } 00306 #endif 00307 00308 00309 /*******************************************************************************/ 00310 /* sl_ProfileAdd */ 00311 /*******************************************************************************/ 00312 typedef struct 00313 { 00314 _WlanAddGetEapProfile_t Args; 00315 _i8 Strings[MAX_SSID_LEN + MAX_KEY_LEN + MAX_USER_LEN + MAX_ANON_USER_LEN]; 00316 }_SlProfileParams_t; 00317 00318 typedef union 00319 { 00320 _SlProfileParams_t Cmd; 00321 _BasicResponse_t Rsp; 00322 }_SlProfileAddMsg_u; 00323 00324 00325 00326 #if _SL_INCLUDE_FUNC(sl_WlanProfileAdd) 00327 _i16 sl_WlanProfileAdd(_i8* pName, _i16 NameLen, _u8 *pMacAddr, SlSecParams_t* pSecParams , SlSecParamsExt_t* pSecExtParams, _u32 Priority, _u32 Options) 00328 { 00329 _SlProfileAddMsg_u Msg; 00330 _SlCmdCtrl_t CmdCtrl = {0}; 00331 CmdCtrl.TxDescLen = 0;/* init */ 00332 CmdCtrl.RxDescLen = sizeof(_BasicResponse_t); 00333 00334 /* update priority */ 00335 Msg.Cmd.Args.Common.Priority = (_u8)Priority; 00336 /* verify SSID length */ 00337 VERIFY_PROTOCOL(NameLen <= MAX_SSID_LEN); 00338 /* update SSID length */ 00339 Msg.Cmd.Args.Common.SsidLen = (_u8)NameLen; 00340 00341 00342 /* Enterprise security profile */ 00343 if (NULL != pSecExtParams) 00344 { 00345 /* Update command opcode */ 00346 CmdCtrl.Opcode = SL_OPCODE_WLAN_EAP_PROFILEADDCOMMAND; 00347 CmdCtrl.TxDescLen += sizeof(_WlanAddGetEapProfile_t); 00348 00349 /* copy SSID */ 00350 sl_Memcpy(EAP_PROFILE_SSID_STRING(&Msg), pName, NameLen); 00351 CmdCtrl.TxDescLen += NameLen; 00352 00353 /* Copy password if supplied */ 00354 if ((NULL != pSecParams) && (pSecParams->KeyLen > 0)) 00355 { 00356 /* update security type */ 00357 Msg.Cmd.Args.Common.SecType = pSecParams->Type; 00358 00359 if( SL_SEC_TYPE_WEP == Msg.Cmd.Args.Common.SecType ) 00360 { 00361 Msg.Cmd.Args.Common.WepKeyId = 0; 00362 } 00363 00364 /* verify key length */ 00365 if (pSecParams->KeyLen > MAX_KEY_LEN) 00366 { 00367 return SL_INVALPARAM; 00368 } 00369 VERIFY_PROTOCOL(pSecParams->KeyLen <= MAX_KEY_LEN); 00370 /* update key length */ 00371 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen; 00372 CmdCtrl.TxDescLen += pSecParams->KeyLen; 00373 ARG_CHECK_PTR(pSecParams->Key); 00374 /* copy key */ 00375 sl_Memcpy(EAP_PROFILE_PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen); 00376 } 00377 else 00378 { 00379 Msg.Cmd.Args.Common.PasswordLen = 0; 00380 } 00381 00382 ARG_CHECK_PTR(pSecExtParams); 00383 /* Update Eap bitmask */ 00384 Msg.Cmd.Args.EapBitmask = pSecExtParams->EapMethod; 00385 /* Update Certificate file ID index - currently not supported */ 00386 Msg.Cmd.Args.CertIndex = pSecExtParams->CertIndex; 00387 /* verify user length */ 00388 if (pSecExtParams->UserLen > MAX_USER_LEN) 00389 { 00390 return SL_INVALPARAM; 00391 } 00392 Msg.Cmd.Args.UserLen = pSecExtParams->UserLen; 00393 /* copy user name (identity) */ 00394 if(pSecExtParams->UserLen > 0) 00395 { 00396 sl_Memcpy(EAP_PROFILE_USER_STRING(&Msg), pSecExtParams->User, pSecExtParams->UserLen); 00397 CmdCtrl.TxDescLen += pSecExtParams->UserLen; 00398 } 00399 00400 /* verify Anonymous user length (for tunneled) */ 00401 if (pSecExtParams->AnonUserLen > MAX_ANON_USER_LEN) 00402 { 00403 return SL_INVALPARAM; 00404 } 00405 Msg.Cmd.Args.AnonUserLen = pSecExtParams->AnonUserLen; 00406 00407 /* copy Anonymous user */ 00408 if(pSecExtParams->AnonUserLen > 0) 00409 { 00410 sl_Memcpy(EAP_PROFILE_ANON_USER_STRING(&Msg), pSecExtParams->AnonUser, pSecExtParams->AnonUserLen); 00411 CmdCtrl.TxDescLen += pSecExtParams->AnonUserLen; 00412 } 00413 00414 } 00415 /* Regular or open security profile */ 00416 else 00417 { 00418 /* Update command opcode */ 00419 CmdCtrl.Opcode = SL_OPCODE_WLAN_PROFILEADDCOMMAND; 00420 /* update commnad length */ 00421 CmdCtrl.TxDescLen += sizeof(_WlanAddGetProfile_t); 00422 00423 if (NULL != pName) 00424 { 00425 /* copy SSID */ 00426 sl_Memcpy(PROFILE_SSID_STRING(&Msg), pName, NameLen); 00427 CmdCtrl.TxDescLen += NameLen; 00428 } 00429 00430 /* Copy password if supplied */ 00431 if( NULL != pSecParams ) 00432 { 00433 /* update security type */ 00434 Msg.Cmd.Args.Common.SecType = pSecParams->Type; 00435 00436 if( SL_SEC_TYPE_WEP == Msg.Cmd.Args.Common.SecType ) 00437 { 00438 Msg.Cmd.Args.Common.WepKeyId = 0; 00439 } 00440 00441 /* verify key length */ 00442 if (pSecParams->KeyLen > MAX_KEY_LEN) 00443 { 00444 return SL_INVALPARAM; 00445 } 00446 /* update key length */ 00447 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen; 00448 CmdCtrl.TxDescLen += pSecParams->KeyLen; 00449 /* copy key (could be no key in case of WPS pin) */ 00450 if( NULL != pSecParams->Key ) 00451 { 00452 sl_Memcpy(PROFILE_PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen); 00453 } 00454 } 00455 else 00456 { 00457 Msg.Cmd.Args.Common.SecType = SL_SEC_TYPE_OPEN; 00458 Msg.Cmd.Args.Common.PasswordLen = 0; 00459 } 00460 00461 } 00462 00463 00464 /* If BSSID is not null, copy to buffer, otherwise set to 0 */ 00465 if(NULL != pMacAddr) 00466 { 00467 sl_Memcpy(Msg.Cmd.Args.Common.Bssid, pMacAddr, sizeof(Msg.Cmd.Args.Common.Bssid)); 00468 } 00469 else 00470 { 00471 sl_Memset(Msg.Cmd.Args.Common.Bssid, 0, sizeof(Msg.Cmd.Args.Common.Bssid)); 00472 } 00473 00474 VERIFY_RET_OK(_SlDrvCmdOp(&CmdCtrl, &Msg, NULL)); 00475 00476 return (_i16)Msg.Rsp.status; 00477 } 00478 #endif 00479 /*******************************************************************************/ 00480 /* sl_ProfileGet */ 00481 /*******************************************************************************/ 00482 typedef union 00483 { 00484 _WlanProfileDelGetCommand_t Cmd; 00485 _SlProfileParams_t Rsp; 00486 }_SlProfileGetMsg_u; 00487 00488 const _SlCmdCtrl_t _SlProfileGetCmdCtrl = 00489 { 00490 SL_OPCODE_WLAN_PROFILEGETCOMMAND, 00491 sizeof(_WlanProfileDelGetCommand_t), 00492 sizeof(_SlProfileParams_t) 00493 }; 00494 00495 #if _SL_INCLUDE_FUNC(sl_WlanProfileGet) 00496 _i16 sl_WlanProfileGet(_i16 Index,_i8* pName, _i16 *pNameLen, _u8 *pMacAddr, SlSecParams_t* pSecParams, SlGetSecParamsExt_t* pEntParams, _u32 *pPriority) 00497 { 00498 _SlProfileGetMsg_u Msg; 00499 Msg.Cmd.index = (_u8)Index; 00500 00501 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlProfileGetCmdCtrl, &Msg, NULL)); 00502 00503 pSecParams->Type = Msg.Rsp.Args.Common.SecType; 00504 /* since password is not transferred in getprofile, password length should always be zero */ 00505 pSecParams->KeyLen = Msg.Rsp.Args.Common.PasswordLen; 00506 if (NULL != pEntParams) 00507 { 00508 pEntParams->UserLen = Msg.Rsp.Args.UserLen; 00509 /* copy user name */ 00510 if (pEntParams->UserLen > 0) 00511 { 00512 sl_Memcpy(pEntParams->User, EAP_PROFILE_USER_STRING(&Msg), pEntParams->UserLen); 00513 } 00514 pEntParams->AnonUserLen = Msg.Rsp.Args.AnonUserLen; 00515 /* copy anonymous user name */ 00516 if (pEntParams->AnonUserLen > 0) 00517 { 00518 sl_Memcpy(pEntParams->AnonUser, EAP_PROFILE_ANON_USER_STRING(&Msg), pEntParams->AnonUserLen); 00519 } 00520 } 00521 00522 *pNameLen = Msg.Rsp.Args.Common.SsidLen; 00523 *pPriority = Msg.Rsp.Args.Common.Priority; 00524 00525 if (NULL != Msg.Rsp.Args.Common.Bssid) 00526 { 00527 sl_Memcpy(pMacAddr, Msg.Rsp.Args.Common.Bssid, sizeof(Msg.Rsp.Args.Common.Bssid)); 00528 } 00529 00530 sl_Memcpy(pName, EAP_PROFILE_SSID_STRING(&Msg), *pNameLen); 00531 00532 return (_i16)Msg.Rsp.Args.Common.SecType; 00533 00534 } 00535 #endif 00536 /*******************************************************************************/ 00537 /* sl_ProfileDel */ 00538 /*******************************************************************************/ 00539 typedef union 00540 { 00541 _WlanProfileDelGetCommand_t Cmd; 00542 _BasicResponse_t Rsp; 00543 }_SlProfileDelMsg_u; 00544 00545 const _SlCmdCtrl_t _SlProfileDelCmdCtrl = 00546 { 00547 SL_OPCODE_WLAN_PROFILEDELCOMMAND, 00548 sizeof(_WlanProfileDelGetCommand_t), 00549 sizeof(_BasicResponse_t) 00550 }; 00551 00552 #if _SL_INCLUDE_FUNC(sl_WlanProfileDel) 00553 _i16 sl_WlanProfileDel(_i16 Index) 00554 { 00555 _SlProfileDelMsg_u Msg; 00556 00557 Msg.Cmd.index = (_u8)Index; 00558 00559 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlProfileDelCmdCtrl, &Msg, NULL)); 00560 00561 return (_i16)Msg.Rsp.status; 00562 } 00563 #endif 00564 00565 00566 /******************************************************************************/ 00567 /* sl_WlanGetNetworkList */ 00568 /******************************************************************************/ 00569 typedef union 00570 { 00571 _WlanGetNetworkListCommand_t Cmd; 00572 _WlanGetNetworkListResponse_t Rsp; 00573 }_SlWlanGetNetworkListMsg_u; 00574 00575 const _SlCmdCtrl_t _SlWlanGetNetworkListCtrl = 00576 { 00577 SL_OPCODE_WLAN_SCANRESULTSGETCOMMAND, 00578 sizeof(_WlanGetNetworkListCommand_t), 00579 sizeof(_WlanGetNetworkListResponse_t) 00580 }; 00581 00582 00583 #if _SL_INCLUDE_FUNC(sl_WlanGetNetworkList) 00584 _i16 sl_WlanGetNetworkList(_u8 Index, _u8 Count, Sl_WlanNetworkEntry_t *pEntries) 00585 { 00586 _i16 retVal = 0; 00587 _SlWlanGetNetworkListMsg_u Msg; 00588 _SlCmdExt_t CmdExt; 00589 00590 if (Count == 0) 00591 { 00592 return SL_EZEROLEN; 00593 } 00594 CmdExt.TxPayloadLen = 0; 00595 CmdExt.RxPayloadLen = sizeof(Sl_WlanNetworkEntry_t)*(Count); 00596 CmdExt.pTxPayload = NULL; 00597 CmdExt.pRxPayload = (_u8 *)pEntries; 00598 00599 Msg.Cmd.index = Index; 00600 Msg.Cmd.count = Count; 00601 00602 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanGetNetworkListCtrl, &Msg, &CmdExt)); 00603 retVal = Msg.Rsp.status; 00604 00605 return (_i16)retVal; 00606 } 00607 #endif 00608 00609 00610 00611 00612 00613 /******************************************************************************/ 00614 /* RX filters message command response structures */ 00615 /******************************************************************************/ 00616 00617 /* Set command */ 00618 typedef union 00619 { 00620 _WlanRxFilterAddCommand_t Cmd; 00621 _WlanRxFilterAddCommandReponse_t Rsp; 00622 }_SlrxFilterAddMsg_u; 00623 00624 const _SlCmdCtrl_t _SlRxFilterAddtCmdCtrl = 00625 { 00626 SL_OPCODE_WLAN_WLANRXFILTERADDCOMMAND, 00627 sizeof(_WlanRxFilterAddCommand_t), 00628 sizeof(_WlanRxFilterAddCommandReponse_t) 00629 }; 00630 00631 00632 /* Set command */ 00633 typedef union _SlRxFilterSetMsg_u 00634 { 00635 _WlanRxFilterSetCommand_t Cmd; 00636 _WlanRxFilterSetCommandReponse_t Rsp; 00637 }_SlRxFilterSetMsg_u; 00638 00639 00640 const _SlCmdCtrl_t _SlRxFilterSetCmdCtrl = 00641 { 00642 SL_OPCODE_WLAN_WLANRXFILTERSETCOMMAND, 00643 sizeof(_WlanRxFilterSetCommand_t), 00644 sizeof(_WlanRxFilterSetCommandReponse_t) 00645 }; 00646 00647 /* Get command */ 00648 typedef union _SlRxFilterGetMsg_u 00649 { 00650 _WlanRxFilterGetCommand_t Cmd; 00651 _WlanRxFilterGetCommandReponse_t Rsp; 00652 }_SlRxFilterGetMsg_u; 00653 00654 00655 const _SlCmdCtrl_t _SlRxFilterGetCmdCtrl = 00656 { 00657 SL_OPCODE_WLAN_WLANRXFILTERGETCOMMAND, 00658 sizeof(_WlanRxFilterGetCommand_t), 00659 sizeof(_WlanRxFilterGetCommandReponse_t) 00660 }; 00661 00662 00663 /*******************************************************************************/ 00664 /* RX filters */ 00665 /*******************************************************************************/ 00666 00667 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterAdd) 00668 SlrxFilterID_t sl_WlanRxFilterAdd( SlrxFilterRuleType_t RuleType, 00669 SlrxFilterFlags_t FilterFlags, 00670 const SlrxFilterRule_t* const Rule, 00671 const SlrxFilterTrigger_t* const Trigger, 00672 const SlrxFilterAction_t* const Action, 00673 SlrxFilterID_t* pFilterId) 00674 { 00675 00676 00677 _SlrxFilterAddMsg_u Msg; 00678 Msg.Cmd.RuleType = RuleType; 00679 /* filterId is zero */ 00680 Msg.Cmd.FilterId = 0; 00681 Msg.Cmd.FilterFlags = FilterFlags; 00682 sl_Memcpy( &(Msg.Cmd.Rule), Rule, sizeof(SlrxFilterRule_t) ); 00683 sl_Memcpy( &(Msg.Cmd.Trigger), Trigger, sizeof(SlrxFilterTrigger_t) ); 00684 sl_Memcpy( &(Msg.Cmd.Action), Action, sizeof(SlrxFilterAction_t) ); 00685 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlRxFilterAddtCmdCtrl, &Msg, NULL) ); 00686 *pFilterId = Msg.Rsp.FilterId; 00687 return (_i16)Msg.Rsp.Status; 00688 00689 } 00690 #endif 00691 00692 00693 00694 /*******************************************************************************/ 00695 /* RX filters */ 00696 /*******************************************************************************/ 00697 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterSet) 00698 _i16 sl_WlanRxFilterSet(const SLrxFilterOperation_t RxFilterOperation, 00699 const _u8* const pInputBuffer, 00700 _u16 InputbufferLength) 00701 { 00702 _SlRxFilterSetMsg_u Msg; 00703 _SlCmdExt_t CmdExt; 00704 00705 CmdExt.TxPayloadLen = InputbufferLength; 00706 CmdExt.pTxPayload = (_u8 *)pInputBuffer; 00707 CmdExt.RxPayloadLen = 0; 00708 CmdExt.pRxPayload = (_u8 *)NULL; 00709 00710 Msg.Cmd.RxFilterOperation = RxFilterOperation; 00711 Msg.Cmd.InputBufferLength = InputbufferLength; 00712 00713 00714 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlRxFilterSetCmdCtrl, &Msg, &CmdExt) ); 00715 00716 00717 return (_i16)Msg.Rsp.Status; 00718 } 00719 #endif 00720 00721 /******************************************************************************/ 00722 /* RX filters */ 00723 /******************************************************************************/ 00724 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterGet) 00725 _i16 sl_WlanRxFilterGet(const SLrxFilterOperation_t RxFilterOperation, 00726 _u8* pOutputBuffer, 00727 _u16 OutputbufferLength) 00728 { 00729 _SlRxFilterGetMsg_u Msg; 00730 _SlCmdExt_t CmdExt; 00731 00732 if (OutputbufferLength == 0) 00733 { 00734 return SL_EZEROLEN; 00735 } 00736 CmdExt.TxPayloadLen = 0; 00737 CmdExt.pTxPayload = NULL; 00738 CmdExt.RxPayloadLen = OutputbufferLength; 00739 CmdExt.pRxPayload = (_u8 *)pOutputBuffer; 00740 CmdExt.ActualRxPayloadLen = 0; 00741 00742 Msg.Cmd.RxFilterOperation = RxFilterOperation; 00743 Msg.Cmd.OutputBufferLength = OutputbufferLength; 00744 00745 00746 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlRxFilterGetCmdCtrl, &Msg, &CmdExt) ); 00747 00748 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen) 00749 { 00750 return SL_ESMALLBUF; 00751 } 00752 00753 return (_i16)Msg.Rsp.Status; 00754 } 00755 #endif 00756 00757 /*******************************************************************************/ 00758 /* sl_WlanRxStatStart */ 00759 /*******************************************************************************/ 00760 #if _SL_INCLUDE_FUNC(sl_WlanRxStatStart) 00761 _i16 sl_WlanRxStatStart(void) 00762 { 00763 return _SlDrvBasicCmd(SL_OPCODE_WLAN_STARTRXSTATCOMMAND); 00764 } 00765 #endif 00766 00767 #if _SL_INCLUDE_FUNC(sl_WlanRxStatStop) 00768 _i16 sl_WlanRxStatStop(void) 00769 { 00770 return _SlDrvBasicCmd(SL_OPCODE_WLAN_STOPRXSTATCOMMAND); 00771 } 00772 #endif 00773 00774 #if _SL_INCLUDE_FUNC(sl_WlanRxStatGet) 00775 _i16 sl_WlanRxStatGet(SlGetRxStatResponse_t *pRxStat,_u32 Flags) 00776 { 00777 _SlCmdCtrl_t CmdCtrl = {SL_OPCODE_WLAN_GETRXSTATCOMMAND, 0, sizeof(SlGetRxStatResponse_t)}; 00778 sl_Memset(pRxStat,0,sizeof(SlGetRxStatResponse_t)); 00779 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&CmdCtrl, pRxStat, NULL)); 00780 00781 return 0; 00782 } 00783 #endif 00784 00785 00786 00787 /******************************************************************************/ 00788 /* sl_WlanSmartConfigStop */ 00789 /******************************************************************************/ 00790 #if _SL_INCLUDE_FUNC(sl_WlanSmartConfigStop) 00791 _i16 sl_WlanSmartConfigStop(void) 00792 { 00793 return _SlDrvBasicCmd(SL_OPCODE_WLAN_SMART_CONFIG_STOP_COMMAND); 00794 } 00795 #endif 00796 00797 00798 /******************************************************************************/ 00799 /* sl_WlanSmartConfigStart */ 00800 /******************************************************************************/ 00801 00802 00803 typedef struct 00804 { 00805 _WlanSmartConfigStartCommand_t Args; 00806 _i8 Strings[3 * MAX_SMART_CONFIG_KEY]; /* public key + groupId1 key + groupId2 key */ 00807 }_SlSmartConfigStart_t; 00808 00809 typedef union 00810 { 00811 _SlSmartConfigStart_t Cmd; 00812 _BasicResponse_t Rsp; 00813 }_SlSmartConfigStartMsg_u; 00814 00815 const _SlCmdCtrl_t _SlSmartConfigStartCmdCtrl = 00816 { 00817 SL_OPCODE_WLAN_SMART_CONFIG_START_COMMAND, 00818 sizeof(_SlSmartConfigStart_t), 00819 sizeof(_BasicResponse_t) 00820 }; 00821 00822 #if _SL_INCLUDE_FUNC(sl_WlanSmartConfigStart) 00823 _i16 sl_WlanSmartConfigStart( const _u32 groupIdBitmask, 00824 const _u8 cipher, 00825 const _u8 publicKeyLen, 00826 const _u8 group1KeyLen, 00827 const _u8 group2KeyLen, 00828 const _u8* pPublicKey, 00829 const _u8* pGroup1Key, 00830 const _u8* pGroup2Key) 00831 { 00832 _SlSmartConfigStartMsg_u Msg; 00833 00834 Msg.Cmd.Args.groupIdBitmask = (_u8)groupIdBitmask; 00835 Msg.Cmd.Args.cipher = (_u8)cipher; 00836 Msg.Cmd.Args.publicKeyLen = (_u8)publicKeyLen; 00837 Msg.Cmd.Args.group1KeyLen = (_u8)group1KeyLen; 00838 Msg.Cmd.Args.group2KeyLen = (_u8)group2KeyLen; 00839 00840 /* copy keys (if exist) after command (one after another) */ 00841 sl_Memcpy(SMART_CONFIG_START_PUBLIC_KEY_STRING(&Msg), pPublicKey, publicKeyLen); 00842 sl_Memcpy(SMART_CONFIG_START_GROUP1_KEY_STRING(&Msg), pGroup1Key, group1KeyLen); 00843 sl_Memcpy(SMART_CONFIG_START_GROUP2_KEY_STRING(&Msg), pGroup2Key, group2KeyLen); 00844 00845 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlSmartConfigStartCmdCtrl , &Msg, NULL)); 00846 00847 return (_i16)Msg.Rsp.status; 00848 00849 00850 } 00851 #endif 00852 00853 00854 /*******************************************************************************/ 00855 /* sl_WlanSetMode */ 00856 /*******************************************************************************/ 00857 typedef union 00858 { 00859 _WlanSetMode_t Cmd; 00860 _BasicResponse_t Rsp; 00861 }_SlwlanSetModeMsg_u; 00862 00863 const _SlCmdCtrl_t _SlWlanSetModeCmdCtrl = 00864 { 00865 SL_OPCODE_WLAN_SET_MODE, 00866 sizeof(_WlanSetMode_t), 00867 sizeof(_BasicResponse_t) 00868 }; 00869 00870 /* possible values are: 00871 WLAN_SET_STA_MODE = 1 00872 WLAN_SET_AP_MODE = 2 00873 WLAN_SET_P2P_MODE = 3 */ 00874 00875 #if _SL_INCLUDE_FUNC(sl_WlanSetMode) 00876 _i16 sl_WlanSetMode(const _u8 mode) 00877 { 00878 _SlwlanSetModeMsg_u Msg; 00879 00880 Msg.Cmd.mode = mode; 00881 00882 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanSetModeCmdCtrl , &Msg, NULL)); 00883 00884 return (_i16)Msg.Rsp.status; 00885 00886 } 00887 #endif 00888 00889 00890 00891 00892 /*******************************************************************************/ 00893 /* sl_WlanSet */ 00894 /* ******************************************************************************/ 00895 typedef union 00896 { 00897 _WlanCfgSetGet_t Cmd; 00898 _BasicResponse_t Rsp; 00899 }_SlWlanCfgSetMsg_u; 00900 00901 const _SlCmdCtrl_t _SlWlanCfgSetCmdCtrl = 00902 { 00903 SL_OPCODE_WLAN_CFG_SET, 00904 sizeof(_WlanCfgSetGet_t), 00905 sizeof(_BasicResponse_t) 00906 }; 00907 00908 00909 #if _SL_INCLUDE_FUNC(sl_WlanSet) 00910 _i16 sl_WlanSet(_u16 ConfigId ,_u16 ConfigOpt,_u16 ConfigLen, _u8 *pValues) 00911 { 00912 _SlWlanCfgSetMsg_u Msg; 00913 _SlCmdExt_t CmdExt; 00914 00915 CmdExt.TxPayloadLen = (ConfigLen+3) & (~3); 00916 CmdExt.RxPayloadLen = 0; 00917 CmdExt.pTxPayload = (_u8 *)pValues; 00918 CmdExt.pRxPayload = NULL; 00919 00920 00921 Msg.Cmd.ConfigId = ConfigId; 00922 Msg.Cmd.ConfigLen = ConfigLen; 00923 Msg.Cmd.ConfigOpt = ConfigOpt; 00924 00925 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanCfgSetCmdCtrl, &Msg, &CmdExt)); 00926 00927 return (_i16)Msg.Rsp.status; 00928 } 00929 #endif 00930 00931 00932 /******************************************************************************/ 00933 /* sl_WlanGet */ 00934 /******************************************************************************/ 00935 typedef union 00936 { 00937 _WlanCfgSetGet_t Cmd; 00938 _WlanCfgSetGet_t Rsp; 00939 }_SlWlanCfgMsgGet_u; 00940 00941 const _SlCmdCtrl_t _SlWlanCfgGetCmdCtrl = 00942 { 00943 SL_OPCODE_WLAN_CFG_GET, 00944 sizeof(_WlanCfgSetGet_t), 00945 sizeof(_WlanCfgSetGet_t) 00946 }; 00947 00948 #if _SL_INCLUDE_FUNC(sl_WlanGet) 00949 _i16 sl_WlanGet(_u16 ConfigId, _u16 *pConfigOpt,_u16 *pConfigLen, _u8 *pValues) 00950 { 00951 _SlWlanCfgMsgGet_u Msg; 00952 _SlCmdExt_t CmdExt; 00953 00954 if (*pConfigLen == 0) 00955 { 00956 return SL_EZEROLEN; 00957 } 00958 CmdExt.TxPayloadLen = 0; 00959 CmdExt.RxPayloadLen = *pConfigLen; 00960 CmdExt.pTxPayload = NULL; 00961 CmdExt.pRxPayload = (_u8 *)pValues; 00962 CmdExt.ActualRxPayloadLen = 0; 00963 00964 Msg.Cmd.ConfigId = ConfigId; 00965 if( pConfigOpt ) 00966 { 00967 Msg.Cmd.ConfigOpt = (_u16)*pConfigOpt; 00968 } 00969 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanCfgGetCmdCtrl, &Msg, &CmdExt)); 00970 00971 if( pConfigOpt ) 00972 { 00973 *pConfigOpt = (_u8)Msg.Rsp.ConfigOpt; 00974 } 00975 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen) 00976 { 00977 *pConfigLen = (_u8)CmdExt.RxPayloadLen; 00978 return SL_ESMALLBUF; 00979 } 00980 else 00981 { 00982 *pConfigLen = (_u8)CmdExt.ActualRxPayloadLen; 00983 } 00984 00985 00986 return (_i16)Msg.Rsp.Status; 00987 } 00988 #endif 00989
Generated on Tue Jul 12 2022 22:55:20 by 1.7.2