TI's CC3100 host driver and demo. Experimental and a work in progress.

Dependencies:   mbed

Committer:
dflet
Date:
Wed Nov 19 23:04:04 2014 +0000
Revision:
2:a3e52cf86086
Parent:
0:bbe98578d4c0
Added more boards!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:bbe98578d4c0 1 /*
dflet 0:bbe98578d4c0 2 * wlan.c - CC31xx/CC32xx Host Driver Implementation
dflet 0:bbe98578d4c0 3 *
dflet 0:bbe98578d4c0 4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:bbe98578d4c0 5 *
dflet 0:bbe98578d4c0 6 *
dflet 0:bbe98578d4c0 7 * Redistribution and use in source and binary forms, with or without
dflet 0:bbe98578d4c0 8 * modification, are permitted provided that the following conditions
dflet 0:bbe98578d4c0 9 * are met:
dflet 0:bbe98578d4c0 10 *
dflet 0:bbe98578d4c0 11 * Redistributions of source code must retain the above copyright
dflet 0:bbe98578d4c0 12 * notice, this list of conditions and the following disclaimer.
dflet 0:bbe98578d4c0 13 *
dflet 0:bbe98578d4c0 14 * Redistributions in binary form must reproduce the above copyright
dflet 0:bbe98578d4c0 15 * notice, this list of conditions and the following disclaimer in the
dflet 0:bbe98578d4c0 16 * documentation and/or other materials provided with the
dflet 0:bbe98578d4c0 17 * distribution.
dflet 0:bbe98578d4c0 18 *
dflet 0:bbe98578d4c0 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:bbe98578d4c0 20 * its contributors may be used to endorse or promote products derived
dflet 0:bbe98578d4c0 21 * from this software without specific prior written permission.
dflet 0:bbe98578d4c0 22 *
dflet 0:bbe98578d4c0 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:bbe98578d4c0 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:bbe98578d4c0 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:bbe98578d4c0 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:bbe98578d4c0 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:bbe98578d4c0 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:bbe98578d4c0 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:bbe98578d4c0 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:bbe98578d4c0 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:bbe98578d4c0 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:bbe98578d4c0 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:bbe98578d4c0 34 *
dflet 0:bbe98578d4c0 35 */
dflet 0:bbe98578d4c0 36
dflet 0:bbe98578d4c0 37
dflet 0:bbe98578d4c0 38
dflet 0:bbe98578d4c0 39 /*****************************************************************************/
dflet 0:bbe98578d4c0 40 /* Include files */
dflet 0:bbe98578d4c0 41 /*****************************************************************************/
dflet 0:bbe98578d4c0 42 #include "cc3100_simplelink.h"
dflet 0:bbe98578d4c0 43 #include "cc3100_protocol.h"
dflet 0:bbe98578d4c0 44 #include "cc3100_driver.h"
dflet 0:bbe98578d4c0 45
dflet 0:bbe98578d4c0 46 /*****************************************************************************/
dflet 0:bbe98578d4c0 47 /* Macro declarations */
dflet 0:bbe98578d4c0 48 /*****************************************************************************/
dflet 0:bbe98578d4c0 49 #define MAX_SSID_LEN (32)
dflet 0:bbe98578d4c0 50 #define MAX_KEY_LEN (63)
dflet 0:bbe98578d4c0 51 #define MAX_USER_LEN (32)
dflet 0:bbe98578d4c0 52 #define MAX_ANON_USER_LEN (32)
dflet 0:bbe98578d4c0 53 #define MAX_SMART_CONFIG_KEY (16)
dflet 0:bbe98578d4c0 54
dflet 0:bbe98578d4c0 55
dflet 0:bbe98578d4c0 56 /*****************************************************************************
dflet 0:bbe98578d4c0 57 sl_WlanConnect
dflet 0:bbe98578d4c0 58 *****************************************************************************/
dflet 0:bbe98578d4c0 59 typedef struct
dflet 0:bbe98578d4c0 60 {
dflet 0:bbe98578d4c0 61 _WlanConnectEapCommand_t Args;
dflet 0:bbe98578d4c0 62 _i8 Strings[MAX_SSID_LEN + MAX_KEY_LEN + MAX_USER_LEN + MAX_ANON_USER_LEN];
dflet 0:bbe98578d4c0 63 }_WlanConnectCmd_t;
dflet 0:bbe98578d4c0 64
dflet 0:bbe98578d4c0 65 typedef union
dflet 0:bbe98578d4c0 66 {
dflet 0:bbe98578d4c0 67 _WlanConnectCmd_t Cmd;
dflet 0:bbe98578d4c0 68 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 69 }_SlWlanConnectMsg_u;
dflet 0:bbe98578d4c0 70
dflet 0:bbe98578d4c0 71
dflet 0:bbe98578d4c0 72 #if _SL_INCLUDE_FUNC(sl_WlanConnect)
dflet 0:bbe98578d4c0 73 _i16 sl_WlanConnect(_i8* pName, _i16 NameLen, _u8 *pMacAddr, SlSecParams_t* pSecParams , SlSecParamsExt_t* pSecExtParams)
dflet 0:bbe98578d4c0 74 {
dflet 0:bbe98578d4c0 75 _SlWlanConnectMsg_u Msg = {0};
dflet 0:bbe98578d4c0 76 _SlCmdCtrl_t CmdCtrl = {0};
dflet 0:bbe98578d4c0 77
dflet 0:bbe98578d4c0 78 CmdCtrl.TxDescLen = 0;/* init */
dflet 0:bbe98578d4c0 79 CmdCtrl.RxDescLen = sizeof(_BasicResponse_t);
dflet 0:bbe98578d4c0 80
dflet 0:bbe98578d4c0 81 /* verify SSID length */
dflet 0:bbe98578d4c0 82 VERIFY_PROTOCOL(NameLen <= MAX_SSID_LEN);
dflet 0:bbe98578d4c0 83 /* update SSID length */
dflet 0:bbe98578d4c0 84 Msg.Cmd.Args.Common.SsidLen = (_u8)NameLen;
dflet 0:bbe98578d4c0 85
dflet 0:bbe98578d4c0 86 /* Profile with no security */
dflet 0:bbe98578d4c0 87 /* Enterprise security profile */
dflet 0:bbe98578d4c0 88 if (NULL != pSecExtParams)
dflet 0:bbe98578d4c0 89 {
dflet 0:bbe98578d4c0 90 /* Update command opcode */
dflet 0:bbe98578d4c0 91 CmdCtrl.Opcode = SL_OPCODE_WLAN_WLANCONNECTEAPCOMMAND;
dflet 0:bbe98578d4c0 92 CmdCtrl.TxDescLen += sizeof(_WlanConnectEapCommand_t);
dflet 0:bbe98578d4c0 93 /* copy SSID */
dflet 0:bbe98578d4c0 94 sl_Memcpy(EAP_SSID_STRING(&Msg), pName, NameLen);
dflet 0:bbe98578d4c0 95 CmdCtrl.TxDescLen += NameLen;
dflet 0:bbe98578d4c0 96 /* Copy password if supplied */
dflet 0:bbe98578d4c0 97 if ((NULL != pSecParams) && (pSecParams->KeyLen > 0))
dflet 0:bbe98578d4c0 98 {
dflet 0:bbe98578d4c0 99 /* update security type */
dflet 0:bbe98578d4c0 100 Msg.Cmd.Args.Common.SecType = pSecParams->Type;
dflet 0:bbe98578d4c0 101 /* verify key length */
dflet 0:bbe98578d4c0 102 if (pSecParams->KeyLen > MAX_KEY_LEN)
dflet 0:bbe98578d4c0 103 {
dflet 0:bbe98578d4c0 104 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 105 }
dflet 0:bbe98578d4c0 106 /* update key length */
dflet 0:bbe98578d4c0 107 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen;
dflet 0:bbe98578d4c0 108 ARG_CHECK_PTR(pSecParams->Key);
dflet 0:bbe98578d4c0 109 /* copy key */
dflet 0:bbe98578d4c0 110 sl_Memcpy(EAP_PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen);
dflet 0:bbe98578d4c0 111 CmdCtrl.TxDescLen += pSecParams->KeyLen;
dflet 0:bbe98578d4c0 112 }
dflet 0:bbe98578d4c0 113 else
dflet 0:bbe98578d4c0 114 {
dflet 0:bbe98578d4c0 115 Msg.Cmd.Args.Common.PasswordLen = 0;
dflet 0:bbe98578d4c0 116 }
dflet 0:bbe98578d4c0 117
dflet 0:bbe98578d4c0 118 ARG_CHECK_PTR(pSecExtParams);
dflet 0:bbe98578d4c0 119 /* Update Eap bitmask */
dflet 0:bbe98578d4c0 120 Msg.Cmd.Args.EapBitmask = pSecExtParams->EapMethod;
dflet 0:bbe98578d4c0 121 /* Update Certificate file ID index - currently not supported */
dflet 0:bbe98578d4c0 122 Msg.Cmd.Args.CertIndex = pSecExtParams->CertIndex;
dflet 0:bbe98578d4c0 123 /* verify user length */
dflet 0:bbe98578d4c0 124 if (pSecExtParams->UserLen > MAX_USER_LEN)
dflet 0:bbe98578d4c0 125 {
dflet 0:bbe98578d4c0 126 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 127 }
dflet 0:bbe98578d4c0 128 Msg.Cmd.Args.UserLen = pSecExtParams->UserLen;
dflet 0:bbe98578d4c0 129 /* copy user name (identity) */
dflet 0:bbe98578d4c0 130 if(pSecExtParams->UserLen > 0)
dflet 0:bbe98578d4c0 131 {
dflet 0:bbe98578d4c0 132 sl_Memcpy(EAP_USER_STRING(&Msg), pSecExtParams->User, pSecExtParams->UserLen);
dflet 0:bbe98578d4c0 133 CmdCtrl.TxDescLen += pSecExtParams->UserLen;
dflet 0:bbe98578d4c0 134 }
dflet 0:bbe98578d4c0 135 /* verify Anonymous user length */
dflet 0:bbe98578d4c0 136 if (pSecExtParams->AnonUserLen > MAX_ANON_USER_LEN)
dflet 0:bbe98578d4c0 137 {
dflet 0:bbe98578d4c0 138 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 139 }
dflet 0:bbe98578d4c0 140 Msg.Cmd.Args.AnonUserLen = pSecExtParams->AnonUserLen;
dflet 0:bbe98578d4c0 141 /* copy Anonymous user */
dflet 0:bbe98578d4c0 142 if(pSecExtParams->AnonUserLen > 0)
dflet 0:bbe98578d4c0 143 {
dflet 0:bbe98578d4c0 144 sl_Memcpy(EAP_ANON_USER_STRING(&Msg), pSecExtParams->AnonUser, pSecExtParams->AnonUserLen);
dflet 0:bbe98578d4c0 145 CmdCtrl.TxDescLen += pSecExtParams->AnonUserLen;
dflet 0:bbe98578d4c0 146 }
dflet 0:bbe98578d4c0 147
dflet 0:bbe98578d4c0 148 }
dflet 0:bbe98578d4c0 149
dflet 0:bbe98578d4c0 150 /* Regular or open security profile */
dflet 0:bbe98578d4c0 151 else
dflet 0:bbe98578d4c0 152 {
dflet 0:bbe98578d4c0 153 /* Update command opcode */
dflet 0:bbe98578d4c0 154 CmdCtrl.Opcode = SL_OPCODE_WLAN_WLANCONNECTCOMMAND;
dflet 0:bbe98578d4c0 155 CmdCtrl.TxDescLen += sizeof(_WlanConnectCommon_t);
dflet 0:bbe98578d4c0 156 /* copy SSID */
dflet 0:bbe98578d4c0 157 sl_Memcpy(SSID_STRING(&Msg), pName, NameLen);
dflet 0:bbe98578d4c0 158 CmdCtrl.TxDescLen += NameLen;
dflet 0:bbe98578d4c0 159 /* Copy password if supplied */
dflet 0:bbe98578d4c0 160 if( NULL != pSecParams )
dflet 0:bbe98578d4c0 161 {
dflet 0:bbe98578d4c0 162 /* update security type */
dflet 0:bbe98578d4c0 163 Msg.Cmd.Args.Common.SecType = pSecParams->Type;
dflet 0:bbe98578d4c0 164 /* verify key length is valid */
dflet 0:bbe98578d4c0 165 if (pSecParams->KeyLen > MAX_KEY_LEN)
dflet 0:bbe98578d4c0 166 {
dflet 0:bbe98578d4c0 167 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 168 }
dflet 0:bbe98578d4c0 169 /* update key length */
dflet 0:bbe98578d4c0 170 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen;
dflet 0:bbe98578d4c0 171 CmdCtrl.TxDescLen += pSecParams->KeyLen;
dflet 0:bbe98578d4c0 172 /* copy key (could be no key in case of WPS pin) */
dflet 0:bbe98578d4c0 173 if( NULL != pSecParams->Key )
dflet 0:bbe98578d4c0 174 {
dflet 0:bbe98578d4c0 175 sl_Memcpy(PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen);
dflet 0:bbe98578d4c0 176 }
dflet 0:bbe98578d4c0 177 }
dflet 0:bbe98578d4c0 178 /* Profile with no security */
dflet 0:bbe98578d4c0 179 else
dflet 0:bbe98578d4c0 180 {
dflet 0:bbe98578d4c0 181 Msg.Cmd.Args.Common.PasswordLen = 0;
dflet 0:bbe98578d4c0 182 Msg.Cmd.Args.Common.SecType = SL_SEC_TYPE_OPEN;
dflet 0:bbe98578d4c0 183 }
dflet 0:bbe98578d4c0 184 }
dflet 0:bbe98578d4c0 185 /* If BSSID is not null, copy to buffer, otherwise set to 0 */
dflet 0:bbe98578d4c0 186 if(NULL != pMacAddr)
dflet 0:bbe98578d4c0 187 {
dflet 0:bbe98578d4c0 188 sl_Memcpy(Msg.Cmd.Args.Common.Bssid, pMacAddr, sizeof(Msg.Cmd.Args.Common.Bssid));
dflet 0:bbe98578d4c0 189 }
dflet 0:bbe98578d4c0 190 else
dflet 0:bbe98578d4c0 191 {
dflet 0:bbe98578d4c0 192 sl_Memset(Msg.Cmd.Args.Common.Bssid, 0, sizeof(Msg.Cmd.Args.Common.Bssid));
dflet 0:bbe98578d4c0 193 }
dflet 0:bbe98578d4c0 194
dflet 0:bbe98578d4c0 195
dflet 0:bbe98578d4c0 196 VERIFY_RET_OK ( _SlDrvCmdOp(&CmdCtrl, &Msg, NULL));
dflet 0:bbe98578d4c0 197
dflet 0:bbe98578d4c0 198 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 199 }
dflet 0:bbe98578d4c0 200 #endif
dflet 0:bbe98578d4c0 201
dflet 0:bbe98578d4c0 202 /*******************************************************************************/
dflet 0:bbe98578d4c0 203 /* sl_Disconnect */
dflet 0:bbe98578d4c0 204 /* ******************************************************************************/
dflet 0:bbe98578d4c0 205 #if _SL_INCLUDE_FUNC(sl_WlanDisconnect)
dflet 0:bbe98578d4c0 206 _i16 sl_WlanDisconnect(void)
dflet 0:bbe98578d4c0 207 {
dflet 0:bbe98578d4c0 208 return _SlDrvBasicCmd(SL_OPCODE_WLAN_WLANDISCONNECTCOMMAND);
dflet 0:bbe98578d4c0 209 }
dflet 0:bbe98578d4c0 210 #endif
dflet 0:bbe98578d4c0 211
dflet 0:bbe98578d4c0 212 /******************************************************************************/
dflet 0:bbe98578d4c0 213 /* sl_PolicySet */
dflet 0:bbe98578d4c0 214 /******************************************************************************/
dflet 0:bbe98578d4c0 215 typedef union
dflet 0:bbe98578d4c0 216 {
dflet 0:bbe98578d4c0 217 _WlanPoliciySetGet_t Cmd;
dflet 0:bbe98578d4c0 218 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 219 }_SlPolicyMsg_u;
dflet 0:bbe98578d4c0 220
dflet 0:bbe98578d4c0 221 const _SlCmdCtrl_t _SlPolicySetCmdCtrl =
dflet 0:bbe98578d4c0 222 {
dflet 0:bbe98578d4c0 223 SL_OPCODE_WLAN_POLICYSETCOMMAND,
dflet 0:bbe98578d4c0 224 sizeof(_WlanPoliciySetGet_t),
dflet 0:bbe98578d4c0 225 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 226 };
dflet 0:bbe98578d4c0 227
dflet 0:bbe98578d4c0 228 #if _SL_INCLUDE_FUNC(sl_WlanPolicySet)
dflet 0:bbe98578d4c0 229 _i16 sl_WlanPolicySet(_u8 Type , const _u8 Policy, _u8 *pVal,_u8 ValLen)
dflet 0:bbe98578d4c0 230 {
dflet 0:bbe98578d4c0 231 _SlPolicyMsg_u Msg;
dflet 0:bbe98578d4c0 232 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 233
dflet 0:bbe98578d4c0 234 CmdExt.TxPayloadLen = ValLen;
dflet 0:bbe98578d4c0 235 CmdExt.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 236 CmdExt.pTxPayload = (_u8 *)pVal;
dflet 0:bbe98578d4c0 237 CmdExt.pRxPayload = NULL;
dflet 0:bbe98578d4c0 238
dflet 0:bbe98578d4c0 239
dflet 0:bbe98578d4c0 240 Msg.Cmd.PolicyType = Type;
dflet 0:bbe98578d4c0 241 Msg.Cmd.PolicyOption = Policy;
dflet 0:bbe98578d4c0 242 Msg.Cmd.PolicyOptionLen = ValLen;
dflet 0:bbe98578d4c0 243
dflet 0:bbe98578d4c0 244 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlPolicySetCmdCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 245
dflet 0:bbe98578d4c0 246 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 247 }
dflet 0:bbe98578d4c0 248 #endif
dflet 0:bbe98578d4c0 249
dflet 0:bbe98578d4c0 250
dflet 0:bbe98578d4c0 251 /******************************************************************************/
dflet 0:bbe98578d4c0 252 /* sl_PolicyGet */
dflet 0:bbe98578d4c0 253 /******************************************************************************/
dflet 0:bbe98578d4c0 254 typedef union
dflet 0:bbe98578d4c0 255 {
dflet 0:bbe98578d4c0 256 _WlanPoliciySetGet_t Cmd;
dflet 0:bbe98578d4c0 257 _WlanPoliciySetGet_t Rsp;
dflet 0:bbe98578d4c0 258 }_SlPolicyGetMsg_u;
dflet 0:bbe98578d4c0 259
dflet 0:bbe98578d4c0 260 const _SlCmdCtrl_t _SlPolicyGetCmdCtrl =
dflet 0:bbe98578d4c0 261 {
dflet 0:bbe98578d4c0 262 SL_OPCODE_WLAN_POLICYGETCOMMAND,
dflet 0:bbe98578d4c0 263 sizeof(_WlanPoliciySetGet_t),
dflet 0:bbe98578d4c0 264 sizeof(_WlanPoliciySetGet_t)
dflet 0:bbe98578d4c0 265 };
dflet 0:bbe98578d4c0 266
dflet 0:bbe98578d4c0 267 #if _SL_INCLUDE_FUNC(sl_WlanPolicyGet)
dflet 0:bbe98578d4c0 268 _i16 sl_WlanPolicyGet(_u8 Type , _u8 Policy,_u8 *pVal,_u8 *pValLen)
dflet 0:bbe98578d4c0 269 {
dflet 0:bbe98578d4c0 270 _SlPolicyGetMsg_u Msg;
dflet 0:bbe98578d4c0 271 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 272
dflet 0:bbe98578d4c0 273 if (*pValLen == 0)
dflet 0:bbe98578d4c0 274 {
dflet 0:bbe98578d4c0 275 return SL_EZEROLEN;
dflet 0:bbe98578d4c0 276 }
dflet 0:bbe98578d4c0 277 CmdExt.TxPayloadLen = 0;
dflet 0:bbe98578d4c0 278 CmdExt.RxPayloadLen = *pValLen;
dflet 0:bbe98578d4c0 279 CmdExt.pTxPayload = NULL;
dflet 0:bbe98578d4c0 280 CmdExt.pRxPayload = pVal;
dflet 0:bbe98578d4c0 281 CmdExt.ActualRxPayloadLen = 0;
dflet 0:bbe98578d4c0 282
dflet 0:bbe98578d4c0 283
dflet 0:bbe98578d4c0 284 Msg.Cmd.PolicyType = Type;
dflet 0:bbe98578d4c0 285 Msg.Cmd.PolicyOption = Policy;
dflet 0:bbe98578d4c0 286 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlPolicyGetCmdCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 287
dflet 0:bbe98578d4c0 288
dflet 0:bbe98578d4c0 289 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen)
dflet 0:bbe98578d4c0 290 {
dflet 0:bbe98578d4c0 291 *pValLen = Msg.Rsp.PolicyOptionLen;
dflet 0:bbe98578d4c0 292 return SL_ESMALLBUF;
dflet 0:bbe98578d4c0 293 }
dflet 0:bbe98578d4c0 294 else
dflet 0:bbe98578d4c0 295 {
dflet 0:bbe98578d4c0 296 /* no pointer valus, fill the results into _i8 */
dflet 0:bbe98578d4c0 297 *pValLen = (_u8)CmdExt.ActualRxPayloadLen;
dflet 0:bbe98578d4c0 298 if( 0 == CmdExt.ActualRxPayloadLen )
dflet 0:bbe98578d4c0 299 {
dflet 0:bbe98578d4c0 300 *pValLen = 1;
dflet 0:bbe98578d4c0 301 pVal[0] = Msg.Rsp.PolicyOption;
dflet 0:bbe98578d4c0 302 }
dflet 0:bbe98578d4c0 303 }
dflet 0:bbe98578d4c0 304 return (_i16)SL_OS_RET_CODE_OK;
dflet 0:bbe98578d4c0 305 }
dflet 0:bbe98578d4c0 306 #endif
dflet 0:bbe98578d4c0 307
dflet 0:bbe98578d4c0 308
dflet 0:bbe98578d4c0 309 /*******************************************************************************/
dflet 0:bbe98578d4c0 310 /* sl_ProfileAdd */
dflet 0:bbe98578d4c0 311 /*******************************************************************************/
dflet 0:bbe98578d4c0 312 typedef struct
dflet 0:bbe98578d4c0 313 {
dflet 0:bbe98578d4c0 314 _WlanAddGetEapProfile_t Args;
dflet 0:bbe98578d4c0 315 _i8 Strings[MAX_SSID_LEN + MAX_KEY_LEN + MAX_USER_LEN + MAX_ANON_USER_LEN];
dflet 0:bbe98578d4c0 316 }_SlProfileParams_t;
dflet 0:bbe98578d4c0 317
dflet 0:bbe98578d4c0 318 typedef union
dflet 0:bbe98578d4c0 319 {
dflet 0:bbe98578d4c0 320 _SlProfileParams_t Cmd;
dflet 0:bbe98578d4c0 321 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 322 }_SlProfileAddMsg_u;
dflet 0:bbe98578d4c0 323
dflet 0:bbe98578d4c0 324
dflet 0:bbe98578d4c0 325
dflet 0:bbe98578d4c0 326 #if _SL_INCLUDE_FUNC(sl_WlanProfileAdd)
dflet 0:bbe98578d4c0 327 _i16 sl_WlanProfileAdd(_i8* pName, _i16 NameLen, _u8 *pMacAddr, SlSecParams_t* pSecParams , SlSecParamsExt_t* pSecExtParams, _u32 Priority, _u32 Options)
dflet 0:bbe98578d4c0 328 {
dflet 0:bbe98578d4c0 329 _SlProfileAddMsg_u Msg;
dflet 0:bbe98578d4c0 330 _SlCmdCtrl_t CmdCtrl = {0};
dflet 0:bbe98578d4c0 331 CmdCtrl.TxDescLen = 0;/* init */
dflet 0:bbe98578d4c0 332 CmdCtrl.RxDescLen = sizeof(_BasicResponse_t);
dflet 0:bbe98578d4c0 333
dflet 0:bbe98578d4c0 334 /* update priority */
dflet 0:bbe98578d4c0 335 Msg.Cmd.Args.Common.Priority = (_u8)Priority;
dflet 0:bbe98578d4c0 336 /* verify SSID length */
dflet 0:bbe98578d4c0 337 VERIFY_PROTOCOL(NameLen <= MAX_SSID_LEN);
dflet 0:bbe98578d4c0 338 /* update SSID length */
dflet 0:bbe98578d4c0 339 Msg.Cmd.Args.Common.SsidLen = (_u8)NameLen;
dflet 0:bbe98578d4c0 340
dflet 0:bbe98578d4c0 341
dflet 0:bbe98578d4c0 342 /* Enterprise security profile */
dflet 0:bbe98578d4c0 343 if (NULL != pSecExtParams)
dflet 0:bbe98578d4c0 344 {
dflet 0:bbe98578d4c0 345 /* Update command opcode */
dflet 0:bbe98578d4c0 346 CmdCtrl.Opcode = SL_OPCODE_WLAN_EAP_PROFILEADDCOMMAND;
dflet 0:bbe98578d4c0 347 CmdCtrl.TxDescLen += sizeof(_WlanAddGetEapProfile_t);
dflet 0:bbe98578d4c0 348
dflet 0:bbe98578d4c0 349 /* copy SSID */
dflet 0:bbe98578d4c0 350 sl_Memcpy(EAP_PROFILE_SSID_STRING(&Msg), pName, NameLen);
dflet 0:bbe98578d4c0 351 CmdCtrl.TxDescLen += NameLen;
dflet 0:bbe98578d4c0 352
dflet 0:bbe98578d4c0 353 /* Copy password if supplied */
dflet 0:bbe98578d4c0 354 if ((NULL != pSecParams) && (pSecParams->KeyLen > 0))
dflet 0:bbe98578d4c0 355 {
dflet 0:bbe98578d4c0 356 /* update security type */
dflet 0:bbe98578d4c0 357 Msg.Cmd.Args.Common.SecType = pSecParams->Type;
dflet 0:bbe98578d4c0 358
dflet 0:bbe98578d4c0 359 if( SL_SEC_TYPE_WEP == Msg.Cmd.Args.Common.SecType )
dflet 0:bbe98578d4c0 360 {
dflet 0:bbe98578d4c0 361 Msg.Cmd.Args.Common.WepKeyId = 0;
dflet 0:bbe98578d4c0 362 }
dflet 0:bbe98578d4c0 363
dflet 0:bbe98578d4c0 364 /* verify key length */
dflet 0:bbe98578d4c0 365 if (pSecParams->KeyLen > MAX_KEY_LEN)
dflet 0:bbe98578d4c0 366 {
dflet 0:bbe98578d4c0 367 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 368 }
dflet 0:bbe98578d4c0 369 VERIFY_PROTOCOL(pSecParams->KeyLen <= MAX_KEY_LEN);
dflet 0:bbe98578d4c0 370 /* update key length */
dflet 0:bbe98578d4c0 371 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen;
dflet 0:bbe98578d4c0 372 CmdCtrl.TxDescLen += pSecParams->KeyLen;
dflet 0:bbe98578d4c0 373 ARG_CHECK_PTR(pSecParams->Key);
dflet 0:bbe98578d4c0 374 /* copy key */
dflet 0:bbe98578d4c0 375 sl_Memcpy(EAP_PROFILE_PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen);
dflet 0:bbe98578d4c0 376 }
dflet 0:bbe98578d4c0 377 else
dflet 0:bbe98578d4c0 378 {
dflet 0:bbe98578d4c0 379 Msg.Cmd.Args.Common.PasswordLen = 0;
dflet 0:bbe98578d4c0 380 }
dflet 0:bbe98578d4c0 381
dflet 0:bbe98578d4c0 382 ARG_CHECK_PTR(pSecExtParams);
dflet 0:bbe98578d4c0 383 /* Update Eap bitmask */
dflet 0:bbe98578d4c0 384 Msg.Cmd.Args.EapBitmask = pSecExtParams->EapMethod;
dflet 0:bbe98578d4c0 385 /* Update Certificate file ID index - currently not supported */
dflet 0:bbe98578d4c0 386 Msg.Cmd.Args.CertIndex = pSecExtParams->CertIndex;
dflet 0:bbe98578d4c0 387 /* verify user length */
dflet 0:bbe98578d4c0 388 if (pSecExtParams->UserLen > MAX_USER_LEN)
dflet 0:bbe98578d4c0 389 {
dflet 0:bbe98578d4c0 390 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 391 }
dflet 0:bbe98578d4c0 392 Msg.Cmd.Args.UserLen = pSecExtParams->UserLen;
dflet 0:bbe98578d4c0 393 /* copy user name (identity) */
dflet 0:bbe98578d4c0 394 if(pSecExtParams->UserLen > 0)
dflet 0:bbe98578d4c0 395 {
dflet 0:bbe98578d4c0 396 sl_Memcpy(EAP_PROFILE_USER_STRING(&Msg), pSecExtParams->User, pSecExtParams->UserLen);
dflet 0:bbe98578d4c0 397 CmdCtrl.TxDescLen += pSecExtParams->UserLen;
dflet 0:bbe98578d4c0 398 }
dflet 0:bbe98578d4c0 399
dflet 0:bbe98578d4c0 400 /* verify Anonymous user length (for tunneled) */
dflet 0:bbe98578d4c0 401 if (pSecExtParams->AnonUserLen > MAX_ANON_USER_LEN)
dflet 0:bbe98578d4c0 402 {
dflet 0:bbe98578d4c0 403 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 404 }
dflet 0:bbe98578d4c0 405 Msg.Cmd.Args.AnonUserLen = pSecExtParams->AnonUserLen;
dflet 0:bbe98578d4c0 406
dflet 0:bbe98578d4c0 407 /* copy Anonymous user */
dflet 0:bbe98578d4c0 408 if(pSecExtParams->AnonUserLen > 0)
dflet 0:bbe98578d4c0 409 {
dflet 0:bbe98578d4c0 410 sl_Memcpy(EAP_PROFILE_ANON_USER_STRING(&Msg), pSecExtParams->AnonUser, pSecExtParams->AnonUserLen);
dflet 0:bbe98578d4c0 411 CmdCtrl.TxDescLen += pSecExtParams->AnonUserLen;
dflet 0:bbe98578d4c0 412 }
dflet 0:bbe98578d4c0 413
dflet 0:bbe98578d4c0 414 }
dflet 0:bbe98578d4c0 415 /* Regular or open security profile */
dflet 0:bbe98578d4c0 416 else
dflet 0:bbe98578d4c0 417 {
dflet 0:bbe98578d4c0 418 /* Update command opcode */
dflet 0:bbe98578d4c0 419 CmdCtrl.Opcode = SL_OPCODE_WLAN_PROFILEADDCOMMAND;
dflet 0:bbe98578d4c0 420 /* update commnad length */
dflet 0:bbe98578d4c0 421 CmdCtrl.TxDescLen += sizeof(_WlanAddGetProfile_t);
dflet 0:bbe98578d4c0 422
dflet 0:bbe98578d4c0 423 if (NULL != pName)
dflet 0:bbe98578d4c0 424 {
dflet 0:bbe98578d4c0 425 /* copy SSID */
dflet 0:bbe98578d4c0 426 sl_Memcpy(PROFILE_SSID_STRING(&Msg), pName, NameLen);
dflet 0:bbe98578d4c0 427 CmdCtrl.TxDescLen += NameLen;
dflet 0:bbe98578d4c0 428 }
dflet 0:bbe98578d4c0 429
dflet 0:bbe98578d4c0 430 /* Copy password if supplied */
dflet 0:bbe98578d4c0 431 if( NULL != pSecParams )
dflet 0:bbe98578d4c0 432 {
dflet 0:bbe98578d4c0 433 /* update security type */
dflet 0:bbe98578d4c0 434 Msg.Cmd.Args.Common.SecType = pSecParams->Type;
dflet 0:bbe98578d4c0 435
dflet 0:bbe98578d4c0 436 if( SL_SEC_TYPE_WEP == Msg.Cmd.Args.Common.SecType )
dflet 0:bbe98578d4c0 437 {
dflet 0:bbe98578d4c0 438 Msg.Cmd.Args.Common.WepKeyId = 0;
dflet 0:bbe98578d4c0 439 }
dflet 0:bbe98578d4c0 440
dflet 0:bbe98578d4c0 441 /* verify key length */
dflet 0:bbe98578d4c0 442 if (pSecParams->KeyLen > MAX_KEY_LEN)
dflet 0:bbe98578d4c0 443 {
dflet 0:bbe98578d4c0 444 return SL_INVALPARAM;
dflet 0:bbe98578d4c0 445 }
dflet 0:bbe98578d4c0 446 /* update key length */
dflet 0:bbe98578d4c0 447 Msg.Cmd.Args.Common.PasswordLen = pSecParams->KeyLen;
dflet 0:bbe98578d4c0 448 CmdCtrl.TxDescLen += pSecParams->KeyLen;
dflet 0:bbe98578d4c0 449 /* copy key (could be no key in case of WPS pin) */
dflet 0:bbe98578d4c0 450 if( NULL != pSecParams->Key )
dflet 0:bbe98578d4c0 451 {
dflet 0:bbe98578d4c0 452 sl_Memcpy(PROFILE_PASSWORD_STRING(&Msg), pSecParams->Key, pSecParams->KeyLen);
dflet 0:bbe98578d4c0 453 }
dflet 0:bbe98578d4c0 454 }
dflet 0:bbe98578d4c0 455 else
dflet 0:bbe98578d4c0 456 {
dflet 0:bbe98578d4c0 457 Msg.Cmd.Args.Common.SecType = SL_SEC_TYPE_OPEN;
dflet 0:bbe98578d4c0 458 Msg.Cmd.Args.Common.PasswordLen = 0;
dflet 0:bbe98578d4c0 459 }
dflet 0:bbe98578d4c0 460
dflet 0:bbe98578d4c0 461 }
dflet 0:bbe98578d4c0 462
dflet 0:bbe98578d4c0 463
dflet 0:bbe98578d4c0 464 /* If BSSID is not null, copy to buffer, otherwise set to 0 */
dflet 0:bbe98578d4c0 465 if(NULL != pMacAddr)
dflet 0:bbe98578d4c0 466 {
dflet 0:bbe98578d4c0 467 sl_Memcpy(Msg.Cmd.Args.Common.Bssid, pMacAddr, sizeof(Msg.Cmd.Args.Common.Bssid));
dflet 0:bbe98578d4c0 468 }
dflet 0:bbe98578d4c0 469 else
dflet 0:bbe98578d4c0 470 {
dflet 0:bbe98578d4c0 471 sl_Memset(Msg.Cmd.Args.Common.Bssid, 0, sizeof(Msg.Cmd.Args.Common.Bssid));
dflet 0:bbe98578d4c0 472 }
dflet 0:bbe98578d4c0 473
dflet 0:bbe98578d4c0 474 VERIFY_RET_OK(_SlDrvCmdOp(&CmdCtrl, &Msg, NULL));
dflet 0:bbe98578d4c0 475
dflet 0:bbe98578d4c0 476 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 477 }
dflet 0:bbe98578d4c0 478 #endif
dflet 0:bbe98578d4c0 479 /*******************************************************************************/
dflet 0:bbe98578d4c0 480 /* sl_ProfileGet */
dflet 0:bbe98578d4c0 481 /*******************************************************************************/
dflet 0:bbe98578d4c0 482 typedef union
dflet 0:bbe98578d4c0 483 {
dflet 0:bbe98578d4c0 484 _WlanProfileDelGetCommand_t Cmd;
dflet 0:bbe98578d4c0 485 _SlProfileParams_t Rsp;
dflet 0:bbe98578d4c0 486 }_SlProfileGetMsg_u;
dflet 0:bbe98578d4c0 487
dflet 0:bbe98578d4c0 488 const _SlCmdCtrl_t _SlProfileGetCmdCtrl =
dflet 0:bbe98578d4c0 489 {
dflet 0:bbe98578d4c0 490 SL_OPCODE_WLAN_PROFILEGETCOMMAND,
dflet 0:bbe98578d4c0 491 sizeof(_WlanProfileDelGetCommand_t),
dflet 0:bbe98578d4c0 492 sizeof(_SlProfileParams_t)
dflet 0:bbe98578d4c0 493 };
dflet 0:bbe98578d4c0 494
dflet 0:bbe98578d4c0 495 #if _SL_INCLUDE_FUNC(sl_WlanProfileGet)
dflet 0:bbe98578d4c0 496 _i16 sl_WlanProfileGet(_i16 Index,_i8* pName, _i16 *pNameLen, _u8 *pMacAddr, SlSecParams_t* pSecParams, SlGetSecParamsExt_t* pEntParams, _u32 *pPriority)
dflet 0:bbe98578d4c0 497 {
dflet 0:bbe98578d4c0 498 _SlProfileGetMsg_u Msg;
dflet 0:bbe98578d4c0 499 Msg.Cmd.index = (_u8)Index;
dflet 0:bbe98578d4c0 500
dflet 0:bbe98578d4c0 501 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlProfileGetCmdCtrl, &Msg, NULL));
dflet 0:bbe98578d4c0 502
dflet 0:bbe98578d4c0 503 pSecParams->Type = Msg.Rsp.Args.Common.SecType;
dflet 0:bbe98578d4c0 504 /* since password is not transferred in getprofile, password length should always be zero */
dflet 0:bbe98578d4c0 505 pSecParams->KeyLen = Msg.Rsp.Args.Common.PasswordLen;
dflet 0:bbe98578d4c0 506 if (NULL != pEntParams)
dflet 0:bbe98578d4c0 507 {
dflet 0:bbe98578d4c0 508 pEntParams->UserLen = Msg.Rsp.Args.UserLen;
dflet 0:bbe98578d4c0 509 /* copy user name */
dflet 0:bbe98578d4c0 510 if (pEntParams->UserLen > 0)
dflet 0:bbe98578d4c0 511 {
dflet 0:bbe98578d4c0 512 sl_Memcpy(pEntParams->User, EAP_PROFILE_USER_STRING(&Msg), pEntParams->UserLen);
dflet 0:bbe98578d4c0 513 }
dflet 0:bbe98578d4c0 514 pEntParams->AnonUserLen = Msg.Rsp.Args.AnonUserLen;
dflet 0:bbe98578d4c0 515 /* copy anonymous user name */
dflet 0:bbe98578d4c0 516 if (pEntParams->AnonUserLen > 0)
dflet 0:bbe98578d4c0 517 {
dflet 0:bbe98578d4c0 518 sl_Memcpy(pEntParams->AnonUser, EAP_PROFILE_ANON_USER_STRING(&Msg), pEntParams->AnonUserLen);
dflet 0:bbe98578d4c0 519 }
dflet 0:bbe98578d4c0 520 }
dflet 0:bbe98578d4c0 521
dflet 0:bbe98578d4c0 522 *pNameLen = Msg.Rsp.Args.Common.SsidLen;
dflet 0:bbe98578d4c0 523 *pPriority = Msg.Rsp.Args.Common.Priority;
dflet 0:bbe98578d4c0 524
dflet 0:bbe98578d4c0 525 if (NULL != Msg.Rsp.Args.Common.Bssid)
dflet 0:bbe98578d4c0 526 {
dflet 0:bbe98578d4c0 527 sl_Memcpy(pMacAddr, Msg.Rsp.Args.Common.Bssid, sizeof(Msg.Rsp.Args.Common.Bssid));
dflet 0:bbe98578d4c0 528 }
dflet 0:bbe98578d4c0 529
dflet 0:bbe98578d4c0 530 sl_Memcpy(pName, EAP_PROFILE_SSID_STRING(&Msg), *pNameLen);
dflet 0:bbe98578d4c0 531
dflet 0:bbe98578d4c0 532 return (_i16)Msg.Rsp.Args.Common.SecType;
dflet 0:bbe98578d4c0 533
dflet 0:bbe98578d4c0 534 }
dflet 0:bbe98578d4c0 535 #endif
dflet 0:bbe98578d4c0 536 /*******************************************************************************/
dflet 0:bbe98578d4c0 537 /* sl_ProfileDel */
dflet 0:bbe98578d4c0 538 /*******************************************************************************/
dflet 0:bbe98578d4c0 539 typedef union
dflet 0:bbe98578d4c0 540 {
dflet 0:bbe98578d4c0 541 _WlanProfileDelGetCommand_t Cmd;
dflet 0:bbe98578d4c0 542 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 543 }_SlProfileDelMsg_u;
dflet 0:bbe98578d4c0 544
dflet 0:bbe98578d4c0 545 const _SlCmdCtrl_t _SlProfileDelCmdCtrl =
dflet 0:bbe98578d4c0 546 {
dflet 0:bbe98578d4c0 547 SL_OPCODE_WLAN_PROFILEDELCOMMAND,
dflet 0:bbe98578d4c0 548 sizeof(_WlanProfileDelGetCommand_t),
dflet 0:bbe98578d4c0 549 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 550 };
dflet 0:bbe98578d4c0 551
dflet 0:bbe98578d4c0 552 #if _SL_INCLUDE_FUNC(sl_WlanProfileDel)
dflet 0:bbe98578d4c0 553 _i16 sl_WlanProfileDel(_i16 Index)
dflet 0:bbe98578d4c0 554 {
dflet 0:bbe98578d4c0 555 _SlProfileDelMsg_u Msg;
dflet 0:bbe98578d4c0 556
dflet 0:bbe98578d4c0 557 Msg.Cmd.index = (_u8)Index;
dflet 0:bbe98578d4c0 558
dflet 0:bbe98578d4c0 559 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlProfileDelCmdCtrl, &Msg, NULL));
dflet 0:bbe98578d4c0 560
dflet 0:bbe98578d4c0 561 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 562 }
dflet 0:bbe98578d4c0 563 #endif
dflet 0:bbe98578d4c0 564
dflet 0:bbe98578d4c0 565
dflet 0:bbe98578d4c0 566 /******************************************************************************/
dflet 0:bbe98578d4c0 567 /* sl_WlanGetNetworkList */
dflet 0:bbe98578d4c0 568 /******************************************************************************/
dflet 0:bbe98578d4c0 569 typedef union
dflet 0:bbe98578d4c0 570 {
dflet 0:bbe98578d4c0 571 _WlanGetNetworkListCommand_t Cmd;
dflet 0:bbe98578d4c0 572 _WlanGetNetworkListResponse_t Rsp;
dflet 0:bbe98578d4c0 573 }_SlWlanGetNetworkListMsg_u;
dflet 0:bbe98578d4c0 574
dflet 0:bbe98578d4c0 575 const _SlCmdCtrl_t _SlWlanGetNetworkListCtrl =
dflet 0:bbe98578d4c0 576 {
dflet 0:bbe98578d4c0 577 SL_OPCODE_WLAN_SCANRESULTSGETCOMMAND,
dflet 0:bbe98578d4c0 578 sizeof(_WlanGetNetworkListCommand_t),
dflet 0:bbe98578d4c0 579 sizeof(_WlanGetNetworkListResponse_t)
dflet 0:bbe98578d4c0 580 };
dflet 0:bbe98578d4c0 581
dflet 0:bbe98578d4c0 582
dflet 0:bbe98578d4c0 583 #if _SL_INCLUDE_FUNC(sl_WlanGetNetworkList)
dflet 0:bbe98578d4c0 584 _i16 sl_WlanGetNetworkList(_u8 Index, _u8 Count, Sl_WlanNetworkEntry_t *pEntries)
dflet 0:bbe98578d4c0 585 {
dflet 0:bbe98578d4c0 586 _i16 retVal = 0;
dflet 0:bbe98578d4c0 587 _SlWlanGetNetworkListMsg_u Msg;
dflet 0:bbe98578d4c0 588 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 589
dflet 0:bbe98578d4c0 590 if (Count == 0)
dflet 0:bbe98578d4c0 591 {
dflet 0:bbe98578d4c0 592 return SL_EZEROLEN;
dflet 0:bbe98578d4c0 593 }
dflet 0:bbe98578d4c0 594 CmdExt.TxPayloadLen = 0;
dflet 0:bbe98578d4c0 595 CmdExt.RxPayloadLen = sizeof(Sl_WlanNetworkEntry_t)*(Count);
dflet 0:bbe98578d4c0 596 CmdExt.pTxPayload = NULL;
dflet 0:bbe98578d4c0 597 CmdExt.pRxPayload = (_u8 *)pEntries;
dflet 0:bbe98578d4c0 598
dflet 0:bbe98578d4c0 599 Msg.Cmd.index = Index;
dflet 0:bbe98578d4c0 600 Msg.Cmd.count = Count;
dflet 0:bbe98578d4c0 601
dflet 0:bbe98578d4c0 602 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanGetNetworkListCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 603 retVal = Msg.Rsp.status;
dflet 0:bbe98578d4c0 604
dflet 0:bbe98578d4c0 605 return (_i16)retVal;
dflet 0:bbe98578d4c0 606 }
dflet 0:bbe98578d4c0 607 #endif
dflet 0:bbe98578d4c0 608
dflet 0:bbe98578d4c0 609
dflet 0:bbe98578d4c0 610
dflet 0:bbe98578d4c0 611
dflet 0:bbe98578d4c0 612
dflet 0:bbe98578d4c0 613 /******************************************************************************/
dflet 0:bbe98578d4c0 614 /* RX filters message command response structures */
dflet 0:bbe98578d4c0 615 /******************************************************************************/
dflet 0:bbe98578d4c0 616
dflet 0:bbe98578d4c0 617 /* Set command */
dflet 0:bbe98578d4c0 618 typedef union
dflet 0:bbe98578d4c0 619 {
dflet 0:bbe98578d4c0 620 _WlanRxFilterAddCommand_t Cmd;
dflet 0:bbe98578d4c0 621 _WlanRxFilterAddCommandReponse_t Rsp;
dflet 0:bbe98578d4c0 622 }_SlrxFilterAddMsg_u;
dflet 0:bbe98578d4c0 623
dflet 0:bbe98578d4c0 624 const _SlCmdCtrl_t _SlRxFilterAddtCmdCtrl =
dflet 0:bbe98578d4c0 625 {
dflet 0:bbe98578d4c0 626 SL_OPCODE_WLAN_WLANRXFILTERADDCOMMAND,
dflet 0:bbe98578d4c0 627 sizeof(_WlanRxFilterAddCommand_t),
dflet 0:bbe98578d4c0 628 sizeof(_WlanRxFilterAddCommandReponse_t)
dflet 0:bbe98578d4c0 629 };
dflet 0:bbe98578d4c0 630
dflet 0:bbe98578d4c0 631
dflet 0:bbe98578d4c0 632 /* Set command */
dflet 0:bbe98578d4c0 633 typedef union _SlRxFilterSetMsg_u
dflet 0:bbe98578d4c0 634 {
dflet 0:bbe98578d4c0 635 _WlanRxFilterSetCommand_t Cmd;
dflet 0:bbe98578d4c0 636 _WlanRxFilterSetCommandReponse_t Rsp;
dflet 0:bbe98578d4c0 637 }_SlRxFilterSetMsg_u;
dflet 0:bbe98578d4c0 638
dflet 0:bbe98578d4c0 639
dflet 0:bbe98578d4c0 640 const _SlCmdCtrl_t _SlRxFilterSetCmdCtrl =
dflet 0:bbe98578d4c0 641 {
dflet 0:bbe98578d4c0 642 SL_OPCODE_WLAN_WLANRXFILTERSETCOMMAND,
dflet 0:bbe98578d4c0 643 sizeof(_WlanRxFilterSetCommand_t),
dflet 0:bbe98578d4c0 644 sizeof(_WlanRxFilterSetCommandReponse_t)
dflet 0:bbe98578d4c0 645 };
dflet 0:bbe98578d4c0 646
dflet 0:bbe98578d4c0 647 /* Get command */
dflet 0:bbe98578d4c0 648 typedef union _SlRxFilterGetMsg_u
dflet 0:bbe98578d4c0 649 {
dflet 0:bbe98578d4c0 650 _WlanRxFilterGetCommand_t Cmd;
dflet 0:bbe98578d4c0 651 _WlanRxFilterGetCommandReponse_t Rsp;
dflet 0:bbe98578d4c0 652 }_SlRxFilterGetMsg_u;
dflet 0:bbe98578d4c0 653
dflet 0:bbe98578d4c0 654
dflet 0:bbe98578d4c0 655 const _SlCmdCtrl_t _SlRxFilterGetCmdCtrl =
dflet 0:bbe98578d4c0 656 {
dflet 0:bbe98578d4c0 657 SL_OPCODE_WLAN_WLANRXFILTERGETCOMMAND,
dflet 0:bbe98578d4c0 658 sizeof(_WlanRxFilterGetCommand_t),
dflet 0:bbe98578d4c0 659 sizeof(_WlanRxFilterGetCommandReponse_t)
dflet 0:bbe98578d4c0 660 };
dflet 0:bbe98578d4c0 661
dflet 0:bbe98578d4c0 662
dflet 0:bbe98578d4c0 663 /*******************************************************************************/
dflet 0:bbe98578d4c0 664 /* RX filters */
dflet 0:bbe98578d4c0 665 /*******************************************************************************/
dflet 0:bbe98578d4c0 666
dflet 0:bbe98578d4c0 667 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterAdd)
dflet 0:bbe98578d4c0 668 SlrxFilterID_t sl_WlanRxFilterAdd( SlrxFilterRuleType_t RuleType,
dflet 0:bbe98578d4c0 669 SlrxFilterFlags_t FilterFlags,
dflet 0:bbe98578d4c0 670 const SlrxFilterRule_t* const Rule,
dflet 0:bbe98578d4c0 671 const SlrxFilterTrigger_t* const Trigger,
dflet 0:bbe98578d4c0 672 const SlrxFilterAction_t* const Action,
dflet 0:bbe98578d4c0 673 SlrxFilterID_t* pFilterId)
dflet 0:bbe98578d4c0 674 {
dflet 0:bbe98578d4c0 675
dflet 0:bbe98578d4c0 676
dflet 0:bbe98578d4c0 677 _SlrxFilterAddMsg_u Msg;
dflet 0:bbe98578d4c0 678 Msg.Cmd.RuleType = RuleType;
dflet 0:bbe98578d4c0 679 /* filterId is zero */
dflet 0:bbe98578d4c0 680 Msg.Cmd.FilterId = 0;
dflet 0:bbe98578d4c0 681 Msg.Cmd.FilterFlags = FilterFlags;
dflet 0:bbe98578d4c0 682 sl_Memcpy( &(Msg.Cmd.Rule), Rule, sizeof(SlrxFilterRule_t) );
dflet 0:bbe98578d4c0 683 sl_Memcpy( &(Msg.Cmd.Trigger), Trigger, sizeof(SlrxFilterTrigger_t) );
dflet 0:bbe98578d4c0 684 sl_Memcpy( &(Msg.Cmd.Action), Action, sizeof(SlrxFilterAction_t) );
dflet 0:bbe98578d4c0 685 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlRxFilterAddtCmdCtrl, &Msg, NULL) );
dflet 0:bbe98578d4c0 686 *pFilterId = Msg.Rsp.FilterId;
dflet 0:bbe98578d4c0 687 return (_i16)Msg.Rsp.Status;
dflet 0:bbe98578d4c0 688
dflet 0:bbe98578d4c0 689 }
dflet 0:bbe98578d4c0 690 #endif
dflet 0:bbe98578d4c0 691
dflet 0:bbe98578d4c0 692
dflet 0:bbe98578d4c0 693
dflet 0:bbe98578d4c0 694 /*******************************************************************************/
dflet 0:bbe98578d4c0 695 /* RX filters */
dflet 0:bbe98578d4c0 696 /*******************************************************************************/
dflet 0:bbe98578d4c0 697 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterSet)
dflet 0:bbe98578d4c0 698 _i16 sl_WlanRxFilterSet(const SLrxFilterOperation_t RxFilterOperation,
dflet 0:bbe98578d4c0 699 const _u8* const pInputBuffer,
dflet 0:bbe98578d4c0 700 _u16 InputbufferLength)
dflet 0:bbe98578d4c0 701 {
dflet 0:bbe98578d4c0 702 _SlRxFilterSetMsg_u Msg;
dflet 0:bbe98578d4c0 703 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 704
dflet 0:bbe98578d4c0 705 CmdExt.TxPayloadLen = InputbufferLength;
dflet 0:bbe98578d4c0 706 CmdExt.pTxPayload = (_u8 *)pInputBuffer;
dflet 0:bbe98578d4c0 707 CmdExt.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 708 CmdExt.pRxPayload = (_u8 *)NULL;
dflet 0:bbe98578d4c0 709
dflet 0:bbe98578d4c0 710 Msg.Cmd.RxFilterOperation = RxFilterOperation;
dflet 0:bbe98578d4c0 711 Msg.Cmd.InputBufferLength = InputbufferLength;
dflet 0:bbe98578d4c0 712
dflet 0:bbe98578d4c0 713
dflet 0:bbe98578d4c0 714 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlRxFilterSetCmdCtrl, &Msg, &CmdExt) );
dflet 0:bbe98578d4c0 715
dflet 0:bbe98578d4c0 716
dflet 0:bbe98578d4c0 717 return (_i16)Msg.Rsp.Status;
dflet 0:bbe98578d4c0 718 }
dflet 0:bbe98578d4c0 719 #endif
dflet 0:bbe98578d4c0 720
dflet 0:bbe98578d4c0 721 /******************************************************************************/
dflet 0:bbe98578d4c0 722 /* RX filters */
dflet 0:bbe98578d4c0 723 /******************************************************************************/
dflet 0:bbe98578d4c0 724 #if _SL_INCLUDE_FUNC(sl_WlanRxFilterGet)
dflet 0:bbe98578d4c0 725 _i16 sl_WlanRxFilterGet(const SLrxFilterOperation_t RxFilterOperation,
dflet 0:bbe98578d4c0 726 _u8* pOutputBuffer,
dflet 0:bbe98578d4c0 727 _u16 OutputbufferLength)
dflet 0:bbe98578d4c0 728 {
dflet 0:bbe98578d4c0 729 _SlRxFilterGetMsg_u Msg;
dflet 0:bbe98578d4c0 730 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 731
dflet 0:bbe98578d4c0 732 if (OutputbufferLength == 0)
dflet 0:bbe98578d4c0 733 {
dflet 0:bbe98578d4c0 734 return SL_EZEROLEN;
dflet 0:bbe98578d4c0 735 }
dflet 0:bbe98578d4c0 736 CmdExt.TxPayloadLen = 0;
dflet 0:bbe98578d4c0 737 CmdExt.pTxPayload = NULL;
dflet 0:bbe98578d4c0 738 CmdExt.RxPayloadLen = OutputbufferLength;
dflet 0:bbe98578d4c0 739 CmdExt.pRxPayload = (_u8 *)pOutputBuffer;
dflet 0:bbe98578d4c0 740 CmdExt.ActualRxPayloadLen = 0;
dflet 0:bbe98578d4c0 741
dflet 0:bbe98578d4c0 742 Msg.Cmd.RxFilterOperation = RxFilterOperation;
dflet 0:bbe98578d4c0 743 Msg.Cmd.OutputBufferLength = OutputbufferLength;
dflet 0:bbe98578d4c0 744
dflet 0:bbe98578d4c0 745
dflet 0:bbe98578d4c0 746 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlRxFilterGetCmdCtrl, &Msg, &CmdExt) );
dflet 0:bbe98578d4c0 747
dflet 0:bbe98578d4c0 748 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen)
dflet 0:bbe98578d4c0 749 {
dflet 0:bbe98578d4c0 750 return SL_ESMALLBUF;
dflet 0:bbe98578d4c0 751 }
dflet 0:bbe98578d4c0 752
dflet 0:bbe98578d4c0 753 return (_i16)Msg.Rsp.Status;
dflet 0:bbe98578d4c0 754 }
dflet 0:bbe98578d4c0 755 #endif
dflet 0:bbe98578d4c0 756
dflet 0:bbe98578d4c0 757 /*******************************************************************************/
dflet 0:bbe98578d4c0 758 /* sl_WlanRxStatStart */
dflet 0:bbe98578d4c0 759 /*******************************************************************************/
dflet 0:bbe98578d4c0 760 #if _SL_INCLUDE_FUNC(sl_WlanRxStatStart)
dflet 0:bbe98578d4c0 761 _i16 sl_WlanRxStatStart(void)
dflet 0:bbe98578d4c0 762 {
dflet 0:bbe98578d4c0 763 return _SlDrvBasicCmd(SL_OPCODE_WLAN_STARTRXSTATCOMMAND);
dflet 0:bbe98578d4c0 764 }
dflet 0:bbe98578d4c0 765 #endif
dflet 0:bbe98578d4c0 766
dflet 0:bbe98578d4c0 767 #if _SL_INCLUDE_FUNC(sl_WlanRxStatStop)
dflet 0:bbe98578d4c0 768 _i16 sl_WlanRxStatStop(void)
dflet 0:bbe98578d4c0 769 {
dflet 0:bbe98578d4c0 770 return _SlDrvBasicCmd(SL_OPCODE_WLAN_STOPRXSTATCOMMAND);
dflet 0:bbe98578d4c0 771 }
dflet 0:bbe98578d4c0 772 #endif
dflet 0:bbe98578d4c0 773
dflet 0:bbe98578d4c0 774 #if _SL_INCLUDE_FUNC(sl_WlanRxStatGet)
dflet 0:bbe98578d4c0 775 _i16 sl_WlanRxStatGet(SlGetRxStatResponse_t *pRxStat,_u32 Flags)
dflet 0:bbe98578d4c0 776 {
dflet 0:bbe98578d4c0 777 _SlCmdCtrl_t CmdCtrl = {SL_OPCODE_WLAN_GETRXSTATCOMMAND, 0, sizeof(SlGetRxStatResponse_t)};
dflet 0:bbe98578d4c0 778 sl_Memset(pRxStat,0,sizeof(SlGetRxStatResponse_t));
dflet 0:bbe98578d4c0 779 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&CmdCtrl, pRxStat, NULL));
dflet 0:bbe98578d4c0 780
dflet 0:bbe98578d4c0 781 return 0;
dflet 0:bbe98578d4c0 782 }
dflet 0:bbe98578d4c0 783 #endif
dflet 0:bbe98578d4c0 784
dflet 0:bbe98578d4c0 785
dflet 0:bbe98578d4c0 786
dflet 0:bbe98578d4c0 787 /******************************************************************************/
dflet 0:bbe98578d4c0 788 /* sl_WlanSmartConfigStop */
dflet 0:bbe98578d4c0 789 /******************************************************************************/
dflet 0:bbe98578d4c0 790 #if _SL_INCLUDE_FUNC(sl_WlanSmartConfigStop)
dflet 0:bbe98578d4c0 791 _i16 sl_WlanSmartConfigStop(void)
dflet 0:bbe98578d4c0 792 {
dflet 0:bbe98578d4c0 793 return _SlDrvBasicCmd(SL_OPCODE_WLAN_SMART_CONFIG_STOP_COMMAND);
dflet 0:bbe98578d4c0 794 }
dflet 0:bbe98578d4c0 795 #endif
dflet 0:bbe98578d4c0 796
dflet 0:bbe98578d4c0 797
dflet 0:bbe98578d4c0 798 /******************************************************************************/
dflet 0:bbe98578d4c0 799 /* sl_WlanSmartConfigStart */
dflet 0:bbe98578d4c0 800 /******************************************************************************/
dflet 0:bbe98578d4c0 801
dflet 0:bbe98578d4c0 802
dflet 0:bbe98578d4c0 803 typedef struct
dflet 0:bbe98578d4c0 804 {
dflet 0:bbe98578d4c0 805 _WlanSmartConfigStartCommand_t Args;
dflet 0:bbe98578d4c0 806 _i8 Strings[3 * MAX_SMART_CONFIG_KEY]; /* public key + groupId1 key + groupId2 key */
dflet 0:bbe98578d4c0 807 }_SlSmartConfigStart_t;
dflet 0:bbe98578d4c0 808
dflet 0:bbe98578d4c0 809 typedef union
dflet 0:bbe98578d4c0 810 {
dflet 0:bbe98578d4c0 811 _SlSmartConfigStart_t Cmd;
dflet 0:bbe98578d4c0 812 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 813 }_SlSmartConfigStartMsg_u;
dflet 0:bbe98578d4c0 814
dflet 0:bbe98578d4c0 815 const _SlCmdCtrl_t _SlSmartConfigStartCmdCtrl =
dflet 0:bbe98578d4c0 816 {
dflet 0:bbe98578d4c0 817 SL_OPCODE_WLAN_SMART_CONFIG_START_COMMAND,
dflet 0:bbe98578d4c0 818 sizeof(_SlSmartConfigStart_t),
dflet 0:bbe98578d4c0 819 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 820 };
dflet 0:bbe98578d4c0 821
dflet 0:bbe98578d4c0 822 #if _SL_INCLUDE_FUNC(sl_WlanSmartConfigStart)
dflet 0:bbe98578d4c0 823 _i16 sl_WlanSmartConfigStart( const _u32 groupIdBitmask,
dflet 0:bbe98578d4c0 824 const _u8 cipher,
dflet 0:bbe98578d4c0 825 const _u8 publicKeyLen,
dflet 0:bbe98578d4c0 826 const _u8 group1KeyLen,
dflet 0:bbe98578d4c0 827 const _u8 group2KeyLen,
dflet 0:bbe98578d4c0 828 const _u8* pPublicKey,
dflet 0:bbe98578d4c0 829 const _u8* pGroup1Key,
dflet 0:bbe98578d4c0 830 const _u8* pGroup2Key)
dflet 0:bbe98578d4c0 831 {
dflet 0:bbe98578d4c0 832 _SlSmartConfigStartMsg_u Msg;
dflet 0:bbe98578d4c0 833
dflet 0:bbe98578d4c0 834 Msg.Cmd.Args.groupIdBitmask = (_u8)groupIdBitmask;
dflet 0:bbe98578d4c0 835 Msg.Cmd.Args.cipher = (_u8)cipher;
dflet 0:bbe98578d4c0 836 Msg.Cmd.Args.publicKeyLen = (_u8)publicKeyLen;
dflet 0:bbe98578d4c0 837 Msg.Cmd.Args.group1KeyLen = (_u8)group1KeyLen;
dflet 0:bbe98578d4c0 838 Msg.Cmd.Args.group2KeyLen = (_u8)group2KeyLen;
dflet 0:bbe98578d4c0 839
dflet 0:bbe98578d4c0 840 /* copy keys (if exist) after command (one after another) */
dflet 0:bbe98578d4c0 841 sl_Memcpy(SMART_CONFIG_START_PUBLIC_KEY_STRING(&Msg), pPublicKey, publicKeyLen);
dflet 0:bbe98578d4c0 842 sl_Memcpy(SMART_CONFIG_START_GROUP1_KEY_STRING(&Msg), pGroup1Key, group1KeyLen);
dflet 0:bbe98578d4c0 843 sl_Memcpy(SMART_CONFIG_START_GROUP2_KEY_STRING(&Msg), pGroup2Key, group2KeyLen);
dflet 0:bbe98578d4c0 844
dflet 0:bbe98578d4c0 845 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlSmartConfigStartCmdCtrl , &Msg, NULL));
dflet 0:bbe98578d4c0 846
dflet 0:bbe98578d4c0 847 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 848
dflet 0:bbe98578d4c0 849
dflet 0:bbe98578d4c0 850 }
dflet 0:bbe98578d4c0 851 #endif
dflet 0:bbe98578d4c0 852
dflet 0:bbe98578d4c0 853
dflet 0:bbe98578d4c0 854 /*******************************************************************************/
dflet 0:bbe98578d4c0 855 /* sl_WlanSetMode */
dflet 0:bbe98578d4c0 856 /*******************************************************************************/
dflet 0:bbe98578d4c0 857 typedef union
dflet 0:bbe98578d4c0 858 {
dflet 0:bbe98578d4c0 859 _WlanSetMode_t Cmd;
dflet 0:bbe98578d4c0 860 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 861 }_SlwlanSetModeMsg_u;
dflet 0:bbe98578d4c0 862
dflet 0:bbe98578d4c0 863 const _SlCmdCtrl_t _SlWlanSetModeCmdCtrl =
dflet 0:bbe98578d4c0 864 {
dflet 0:bbe98578d4c0 865 SL_OPCODE_WLAN_SET_MODE,
dflet 0:bbe98578d4c0 866 sizeof(_WlanSetMode_t),
dflet 0:bbe98578d4c0 867 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 868 };
dflet 0:bbe98578d4c0 869
dflet 0:bbe98578d4c0 870 /* possible values are:
dflet 0:bbe98578d4c0 871 WLAN_SET_STA_MODE = 1
dflet 0:bbe98578d4c0 872 WLAN_SET_AP_MODE = 2
dflet 0:bbe98578d4c0 873 WLAN_SET_P2P_MODE = 3 */
dflet 0:bbe98578d4c0 874
dflet 0:bbe98578d4c0 875 #if _SL_INCLUDE_FUNC(sl_WlanSetMode)
dflet 0:bbe98578d4c0 876 _i16 sl_WlanSetMode(const _u8 mode)
dflet 0:bbe98578d4c0 877 {
dflet 0:bbe98578d4c0 878 _SlwlanSetModeMsg_u Msg;
dflet 0:bbe98578d4c0 879
dflet 0:bbe98578d4c0 880 Msg.Cmd.mode = mode;
dflet 0:bbe98578d4c0 881
dflet 0:bbe98578d4c0 882 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanSetModeCmdCtrl , &Msg, NULL));
dflet 0:bbe98578d4c0 883
dflet 0:bbe98578d4c0 884 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 885
dflet 0:bbe98578d4c0 886 }
dflet 0:bbe98578d4c0 887 #endif
dflet 0:bbe98578d4c0 888
dflet 0:bbe98578d4c0 889
dflet 0:bbe98578d4c0 890
dflet 0:bbe98578d4c0 891
dflet 0:bbe98578d4c0 892 /*******************************************************************************/
dflet 0:bbe98578d4c0 893 /* sl_WlanSet */
dflet 0:bbe98578d4c0 894 /* ******************************************************************************/
dflet 0:bbe98578d4c0 895 typedef union
dflet 0:bbe98578d4c0 896 {
dflet 0:bbe98578d4c0 897 _WlanCfgSetGet_t Cmd;
dflet 0:bbe98578d4c0 898 _BasicResponse_t Rsp;
dflet 0:bbe98578d4c0 899 }_SlWlanCfgSetMsg_u;
dflet 0:bbe98578d4c0 900
dflet 0:bbe98578d4c0 901 const _SlCmdCtrl_t _SlWlanCfgSetCmdCtrl =
dflet 0:bbe98578d4c0 902 {
dflet 0:bbe98578d4c0 903 SL_OPCODE_WLAN_CFG_SET,
dflet 0:bbe98578d4c0 904 sizeof(_WlanCfgSetGet_t),
dflet 0:bbe98578d4c0 905 sizeof(_BasicResponse_t)
dflet 0:bbe98578d4c0 906 };
dflet 0:bbe98578d4c0 907
dflet 0:bbe98578d4c0 908
dflet 0:bbe98578d4c0 909 #if _SL_INCLUDE_FUNC(sl_WlanSet)
dflet 0:bbe98578d4c0 910 _i16 sl_WlanSet(_u16 ConfigId ,_u16 ConfigOpt,_u16 ConfigLen, _u8 *pValues)
dflet 0:bbe98578d4c0 911 {
dflet 0:bbe98578d4c0 912 _SlWlanCfgSetMsg_u Msg;
dflet 0:bbe98578d4c0 913 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 914
dflet 0:bbe98578d4c0 915 CmdExt.TxPayloadLen = (ConfigLen+3) & (~3);
dflet 0:bbe98578d4c0 916 CmdExt.RxPayloadLen = 0;
dflet 0:bbe98578d4c0 917 CmdExt.pTxPayload = (_u8 *)pValues;
dflet 0:bbe98578d4c0 918 CmdExt.pRxPayload = NULL;
dflet 0:bbe98578d4c0 919
dflet 0:bbe98578d4c0 920
dflet 0:bbe98578d4c0 921 Msg.Cmd.ConfigId = ConfigId;
dflet 0:bbe98578d4c0 922 Msg.Cmd.ConfigLen = ConfigLen;
dflet 0:bbe98578d4c0 923 Msg.Cmd.ConfigOpt = ConfigOpt;
dflet 0:bbe98578d4c0 924
dflet 0:bbe98578d4c0 925 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanCfgSetCmdCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 926
dflet 0:bbe98578d4c0 927 return (_i16)Msg.Rsp.status;
dflet 0:bbe98578d4c0 928 }
dflet 0:bbe98578d4c0 929 #endif
dflet 0:bbe98578d4c0 930
dflet 0:bbe98578d4c0 931
dflet 0:bbe98578d4c0 932 /******************************************************************************/
dflet 0:bbe98578d4c0 933 /* sl_WlanGet */
dflet 0:bbe98578d4c0 934 /******************************************************************************/
dflet 0:bbe98578d4c0 935 typedef union
dflet 0:bbe98578d4c0 936 {
dflet 0:bbe98578d4c0 937 _WlanCfgSetGet_t Cmd;
dflet 0:bbe98578d4c0 938 _WlanCfgSetGet_t Rsp;
dflet 0:bbe98578d4c0 939 }_SlWlanCfgMsgGet_u;
dflet 0:bbe98578d4c0 940
dflet 0:bbe98578d4c0 941 const _SlCmdCtrl_t _SlWlanCfgGetCmdCtrl =
dflet 0:bbe98578d4c0 942 {
dflet 0:bbe98578d4c0 943 SL_OPCODE_WLAN_CFG_GET,
dflet 0:bbe98578d4c0 944 sizeof(_WlanCfgSetGet_t),
dflet 0:bbe98578d4c0 945 sizeof(_WlanCfgSetGet_t)
dflet 0:bbe98578d4c0 946 };
dflet 0:bbe98578d4c0 947
dflet 0:bbe98578d4c0 948 #if _SL_INCLUDE_FUNC(sl_WlanGet)
dflet 0:bbe98578d4c0 949 _i16 sl_WlanGet(_u16 ConfigId, _u16 *pConfigOpt,_u16 *pConfigLen, _u8 *pValues)
dflet 0:bbe98578d4c0 950 {
dflet 0:bbe98578d4c0 951 _SlWlanCfgMsgGet_u Msg;
dflet 0:bbe98578d4c0 952 _SlCmdExt_t CmdExt;
dflet 0:bbe98578d4c0 953
dflet 0:bbe98578d4c0 954 if (*pConfigLen == 0)
dflet 0:bbe98578d4c0 955 {
dflet 0:bbe98578d4c0 956 return SL_EZEROLEN;
dflet 0:bbe98578d4c0 957 }
dflet 0:bbe98578d4c0 958 CmdExt.TxPayloadLen = 0;
dflet 0:bbe98578d4c0 959 CmdExt.RxPayloadLen = *pConfigLen;
dflet 0:bbe98578d4c0 960 CmdExt.pTxPayload = NULL;
dflet 0:bbe98578d4c0 961 CmdExt.pRxPayload = (_u8 *)pValues;
dflet 0:bbe98578d4c0 962 CmdExt.ActualRxPayloadLen = 0;
dflet 0:bbe98578d4c0 963
dflet 0:bbe98578d4c0 964 Msg.Cmd.ConfigId = ConfigId;
dflet 0:bbe98578d4c0 965 if( pConfigOpt )
dflet 0:bbe98578d4c0 966 {
dflet 0:bbe98578d4c0 967 Msg.Cmd.ConfigOpt = (_u16)*pConfigOpt;
dflet 0:bbe98578d4c0 968 }
dflet 0:bbe98578d4c0 969 VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlWlanCfgGetCmdCtrl, &Msg, &CmdExt));
dflet 0:bbe98578d4c0 970
dflet 0:bbe98578d4c0 971 if( pConfigOpt )
dflet 0:bbe98578d4c0 972 {
dflet 0:bbe98578d4c0 973 *pConfigOpt = (_u8)Msg.Rsp.ConfigOpt;
dflet 0:bbe98578d4c0 974 }
dflet 0:bbe98578d4c0 975 if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen)
dflet 0:bbe98578d4c0 976 {
dflet 0:bbe98578d4c0 977 *pConfigLen = (_u8)CmdExt.RxPayloadLen;
dflet 0:bbe98578d4c0 978 return SL_ESMALLBUF;
dflet 0:bbe98578d4c0 979 }
dflet 0:bbe98578d4c0 980 else
dflet 0:bbe98578d4c0 981 {
dflet 0:bbe98578d4c0 982 *pConfigLen = (_u8)CmdExt.ActualRxPayloadLen;
dflet 0:bbe98578d4c0 983 }
dflet 0:bbe98578d4c0 984
dflet 0:bbe98578d4c0 985
dflet 0:bbe98578d4c0 986 return (_i16)Msg.Rsp.Status;
dflet 0:bbe98578d4c0 987 }
dflet 0:bbe98578d4c0 988 #endif
dflet 0:bbe98578d4c0 989