TI's CC3100 websocket camera demo with Arducam mini ov5642 and freertos. Should work with other M3's. Work in progress test demo.

Dependencies:   mbed

Committer:
dflet
Date:
Fri Sep 11 15:38:33 2015 +0000
Revision:
1:e448e81c416f
Parent:
0:400d8e75a8d0
Removed some debud.

Who changed what in which revision?

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