TI's MQTT Demo with freertos CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Thu Sep 03 14:07:01 2015 +0000
Revision:
0:1e7b5dd9edb4
First commit, it's been hanging around for a while. Updated SPI mode change 1 to 0.

Who changed what in which revision?

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