| /* |
| * CmdBldCfgIE.c |
| * |
| * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name Texas Instruments nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| |
| /** \file CmdBldCfgIE.c |
| * \brief Command builder. Configuration commands information elements |
| * |
| * \see CmdBld.h |
| */ |
| #define __FILE_ID__ FILE_ID_92 |
| #include "osApi.h" |
| #include "report.h" |
| #include "CmdBld.h" |
| #include "CmdQueue_api.h" |
| #include "rate.h" |
| #include "TwIf.h" |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeConfigMemory() |
| **************************************************************************** |
| * DESCRIPTION: Configure wlan hardware memory |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeConfigMemory (TI_HANDLE hCmdBld, TDmaParams *pDmaParams, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXConfigMemory_t AcxElm_ConfigMemory; |
| ACXConfigMemory_t *pCfg = &AcxElm_ConfigMemory; |
| |
| os_memoryZero(pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); |
| |
| /* |
| * Set information element header |
| */ |
| pCfg->EleHdr.id = ACX_MEM_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* |
| * Set configuration fields |
| */ |
| pCfg->numStations = pDmaParams->NumStations; |
| pCfg->rxMemblockNumber = pDmaParams->NumRxBlocks; |
| pCfg->txMinimumMemblockNumber = TWD_TX_MIN_MEM_BLKS_NUM; |
| pCfg->numSsidProfiles = 1; |
| pCfg->totalTxDescriptors = ENDIAN_HANDLE_LONG(NUM_TX_DESCRIPTORS); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /* WoneIndex value when running as station */ |
| #define STATION_WONE_INDEX 0 |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeSlotTime() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the Slot Time |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeSlotTime (TI_HANDLE hCmdBld, TI_UINT8 apSlotTime, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXSlot_t AcxElm_SlotTime; |
| ACXSlot_t *pCfg = &AcxElm_SlotTime; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_SLOT; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* Set configuration fields */ |
| /* woneIndex is not relevant to station implementation */ |
| pCfg->woneIndex = STATION_WONE_INDEX; |
| pCfg->slotTime = apSlotTime; |
| |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, Slot Time = %d\n", (TI_UINT8)pCfg->slotTime); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIePreamble() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the Preamble |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIePreamble (TI_HANDLE hCmdBld, TI_UINT8 preamble, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXPreamble_t AcxElm_Preamble; |
| ACXPreamble_t *pCfg = &AcxElm_Preamble; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_PREAMBLE_TYPE; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* Set configuration fields */ |
| /* woneIndex is not relevant to station implementation */ |
| pCfg->preamble = preamble; |
| |
| TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: preamble=%u\n", pCfg->EleHdr.id, preamble); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRx() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate RxConfig information element |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeRx (TI_HANDLE hCmdBld, TI_UINT32 apRxConfigOption, TI_UINT32 apRxFilterOption, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXRxConfig_t AcxElm_RxConfig; |
| ACXRxConfig_t *pCfg = &AcxElm_RxConfig; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_RX_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* Set configuration fields */ |
| pCfg->ConfigOptions = ENDIAN_HANDLE_LONG(apRxConfigOption); |
| pCfg->FilterOptions = ENDIAN_HANDLE_LONG(apRxFilterOption); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeEnableRxDataFilter() |
| ***************************************************************************** |
| * DESCRIPTION: Enables or disables Rx data filtering. |
| * |
| * INPUTS: enabled - 0 to disable data filtering, any other value to enable |
| * defaultAction - The default action to take on non-matching packets. |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeEnableRxDataFilter (TI_HANDLE hCmdBld, TI_BOOL enabled, filter_e defaultAction, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| DataFilterDefault_t dataFilterDefault; |
| DataFilterDefault_t * pCfg = &dataFilterDefault; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_ENABLE_RX_DATA_FILTER; |
| pCfg->EleHdr.len = 0; |
| |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Rx Data Filter configuration:\n"); |
| TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": enabled = %d, defaultAction = %d\n", enabled, defaultAction); |
| |
| /* Set information element configuration fields */ |
| pCfg->enable = enabled; |
| pCfg->action = defaultAction; |
| pCfg->EleHdr.len += sizeof(pCfg->enable) + sizeof(pCfg->action); |
| |
| TRACE_INFO_HEX(pCmdBld->hReport, (TI_UINT8 *) pCfg, sizeof(dataFilterDefault)); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRxDataFilter() |
| ***************************************************************************** |
| * DESCRIPTION: Add/remove Rx Data filter information element. |
| * |
| * INPUTS: index - Index of the Rx Data filter |
| * command - Add or remove the filter |
| * action - Action to take on packets matching the pattern |
| * numFieldPatterns - Number of field patterns in the filter |
| * lenFieldPatterns - Length of the field pattern series |
| * fieldPatterns - Series of field patterns |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeRxDataFilter (TI_HANDLE hCmdBld, |
| TI_UINT8 index, |
| TI_UINT8 command, |
| filter_e action, |
| TI_UINT8 numFieldPatterns, |
| TI_UINT8 lenFieldPatterns, |
| TI_UINT8 *pFieldPatterns, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TI_UINT8 dataFilterConfig[sizeof(DataFilterConfig_t) + MAX_DATA_FILTER_SIZE]; |
| DataFilterConfig_t * pCfg = (DataFilterConfig_t *) &dataFilterConfig; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_SET_RX_DATA_FILTER; |
| pCfg->EleHdr.len = 0; |
| |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Rx Data Filter configuration:\n"); |
| TRACE5(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": command = %d, index = %d, action = %d, numFieldPatterns = %d, lenFieldPatterns = %d\n", command, index, action, numFieldPatterns, lenFieldPatterns); |
| |
| /* Set information element configuration fields */ |
| pCfg->command = command; |
| pCfg->index = index; |
| pCfg->EleHdr.len += sizeof(pCfg->command) + sizeof(pCfg->index); |
| |
| /* When removing a filter only the index and command are to be sent */ |
| if (command == ADD_FILTER) |
| { |
| pCfg->action = action; |
| pCfg->numOfFields = numFieldPatterns; |
| pCfg->EleHdr.len += sizeof(pCfg->action) + sizeof(pCfg->numOfFields); |
| |
| if (pFieldPatterns == NULL) |
| { |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, ": Null pattern table argument received!\n"); |
| |
| return PARAM_VALUE_NOT_VALID; |
| } |
| |
| os_memoryCopy(pCmdBld->hOs, &pCfg->FPTable, pFieldPatterns, lenFieldPatterns); |
| pCfg->EleHdr.len += lenFieldPatterns; |
| } |
| |
| TRACE_INFO_HEX(pCmdBld->hReport, (TI_UINT8 *) pCfg, sizeof(dataFilterConfig)); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(dataFilterConfig), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeArpIpFilter() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate ARP addr table information element for |
| * ipV4 only |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeArpIpFilter (TI_HANDLE hCmdBld, |
| TIpAddr tIpAddr, |
| EArpFilterType filterType, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXConfigureIP_t AcxElm_CmdConfigureIP; |
| ACXConfigureIP_t *pCfg = &AcxElm_CmdConfigureIP; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_ARP_IP_FILTER; |
| pCfg->EleHdr.len = sizeof(ACXConfigureIP_t) - sizeof(EleHdrStruct); |
| |
| pCfg->arpFilterEnable = (TI_UINT8)filterType; |
| |
| /* IP address */ |
| /* Note that in the case of IPv4 it is assumed that the extra two bytes are zero */ |
| IP_COPY (pCfg->address, tIpAddr); |
| |
| TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: ip=%x, enable=%u\n", pCfg->EleHdr.id, *((TI_UINT32*)pCfg->address), filterType); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXConfigureIP_t), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeGroupAdressTable() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate Group addr table information element |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeGroupAdressTable (TI_HANDLE hCmdBld, |
| TI_UINT8 numGroupAddrs, |
| TMacAddr *pGroupAddr, |
| TI_BOOL bEnabled, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TI_UINT32 i = 0; |
| TI_UINT8 *tmpLoc = NULL; |
| dot11MulticastGroupAddrStart_t AcxElm_CmdConfigureMulticastIp; |
| dot11MulticastGroupAddrStart_t* pCfg = &AcxElm_CmdConfigureMulticastIp; |
| |
| os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(dot11MulticastGroupAddrStart_t)); |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = DOT11_GROUP_ADDRESS_TBL; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->numOfGroups = numGroupAddrs; |
| pCfg->fltrState = bEnabled; |
| tmpLoc = pCfg->dataLocation; |
| |
| if (NULL != pGroupAddr) |
| { |
| for (i = 0; i < numGroupAddrs; i++) |
| { |
| MAC_COPY (&tmpLoc[MAC_ADDR_LEN * i], *(pGroupAddr + i)); |
| |
| TRACE7(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeGroupAdressTable: MAC %x: %x:%x:%x:%x:%x:%x\n", i, tmpLoc[MAC_ADDR_LEN*i+0] , tmpLoc[MAC_ADDR_LEN*i+1] , tmpLoc[MAC_ADDR_LEN*i+2] , tmpLoc[MAC_ADDR_LEN*i+3] , tmpLoc[MAC_ADDR_LEN*i+4] , tmpLoc[MAC_ADDR_LEN*i+5]); |
| } |
| } |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(dot11MulticastGroupAddrStart_t), fCb, hCb, NULL); |
| |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeSgEnable() |
| **************************************************************************** |
| * DESCRIPTION: Enable/Disable the BTH-WLAN |
| * |
| * INPUTS: Enable flag |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeSgEnable (TI_HANDLE hCmdBld, ESoftGeminiEnableModes SoftGeminiEnableModes, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXBluetoothWlanCoEnableStruct AcxElm_BluetoothWlanEnable; |
| ACXBluetoothWlanCoEnableStruct* pCfg = &AcxElm_BluetoothWlanEnable; |
| |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSgEnable: Enable flag = %d\n", SoftGeminiEnableModes); |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_SG_ENABLE; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* Set enable field */ |
| pCfg->coexOperationMode = (TI_UINT8)SoftGeminiEnableModes; |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeSg() |
| **************************************************************************** |
| * DESCRIPTION: Configure the BTH-WLAN co-exsistance |
| * |
| * INPUTS: Configuration structure pointer |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeSg (TI_HANDLE hCmdBld, TSoftGeminiParams *pSoftGeminiParam, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXBluetoothWlanCoParamsStruct AcxElm_BluetoothWlanEnable; |
| ACXBluetoothWlanCoParamsStruct *pCfg = &AcxElm_BluetoothWlanEnable; |
| int i=0; |
| |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSg. \n"); |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_SG_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->softGeminiParams.paramIdx = pSoftGeminiParam->paramIdx; |
| |
| |
| for (i=0; i< SOFT_GEMINI_PARAMS_MAX ; i++) |
| { |
| pCfg->softGeminiParams.coexParams[i] = pSoftGeminiParam->coexParams[i]; |
| } |
| |
| /* Rate conversion is done in the HAL */ |
| pCfg->softGeminiParams.coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH] = rateNumberToBitmap((TI_UINT8)pSoftGeminiParam->coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH]); |
| |
| if (pCfg->softGeminiParams.coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH] == 0) |
| { |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "coexAPRateAdapationThr is 0, convert to 1MBPS. \n"); |
| pCfg->softGeminiParams.coexParams[SOFT_GEMINI_RATE_ADAPT_THRESH] = HW_BIT_RATE_1MBPS; |
| } |
| |
| /* Send the configuration command */ |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeFmCoex() |
| **************************************************************************** |
| * DESCRIPTION: Configure the FM-WLAN co-exsistance parameters |
| * |
| * INPUTS: Configuration structure pointer |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeFmCoex (TI_HANDLE hCmdBld, TFmCoexParams *pFmCoexParams, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXWlanFmCoexStruct tFmWlanCoex; |
| ACXWlanFmCoexStruct *pCfg = &tFmWlanCoex; |
| |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeFmCoex\n"); |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_FM_COEX_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* Set parameters with endianess handling */ |
| pCfg->enable = pFmCoexParams->uEnable; |
| pCfg->swallowPeriod = pFmCoexParams->uSwallowPeriod; |
| pCfg->nDividerFrefSet1 = pFmCoexParams->uNDividerFrefSet1; |
| pCfg->nDividerFrefSet2 = pFmCoexParams->uNDividerFrefSet2; |
| pCfg->mDividerFrefSet1 = ENDIAN_HANDLE_WORD(pFmCoexParams->uMDividerFrefSet1); |
| pCfg->mDividerFrefSet2 = ENDIAN_HANDLE_WORD(pFmCoexParams->uMDividerFrefSet2); |
| pCfg->coexPllStabilizationTime = ENDIAN_HANDLE_LONG(pFmCoexParams->uCoexPllStabilizationTime); |
| pCfg->ldoStabilizationTime = ENDIAN_HANDLE_WORD(pFmCoexParams->uLdoStabilizationTime); |
| pCfg->fmDisturbedBandMargin = pFmCoexParams->uFmDisturbedBandMargin; |
| pCfg->swallowClkDif = pFmCoexParams->uSwallowClkDif; |
| |
| /* Send the configuration command */ |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeMemoryMap () |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate MemoryMap information element |
| * |
| * INPUTS: |
| * AcxElm_MemoryMap_T *apMap pointer to the memory map structure |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeMemoryMap (TI_HANDLE hCmdBld, MemoryMap_t *apMap, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| MemoryMap_t SwapMap; |
| TI_UINT32 *pSwap, *pOrig, i, uMemMapNumFields; |
| |
| /* Set information element header */ |
| SwapMap.EleHdr.id = ACX_MEM_MAP; |
| SwapMap.EleHdr.len = sizeof(MemoryMap_t) - sizeof(EleHdrStruct); |
| |
| /* Solve endian problem (all fields are 32 bit) */ |
| pOrig = (TI_UINT32* )&apMap->codeStart; |
| pSwap = (TI_UINT32* )&SwapMap.codeStart; |
| uMemMapNumFields = (sizeof(MemoryMap_t) - sizeof(EleHdrStruct)) % 4; |
| for (i = 0; i < uMemMapNumFields; i++) |
| pSwap[i] = ENDIAN_HANDLE_LONG(pOrig[i]); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, &SwapMap, sizeof(SwapMap), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeAid() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the AID info element |
| * |
| * INPUTS: |
| * TI_UINT16* apAidVal The AID value |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeAid (TI_HANDLE hCmdBld, TI_UINT16 apAidVal, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXAid_t WlanElm_AID; |
| ACXAid_t *pCfg = &WlanElm_AID; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_AID; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->Aid = ENDIAN_HANDLE_WORD(apAidVal); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeWakeUpCondition() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the power management option |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeWakeUpCondition (TI_HANDLE hCmdBld, TPowerMgmtConfig *pPMConfig, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| WakeUpCondition_t WakeUpCondition; |
| WakeUpCondition_t *pCfg = &WakeUpCondition; |
| |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "WakeUpCondition :\n listenInterval = 0x%X\n", pPMConfig->listenInterval); |
| |
| switch (pPMConfig->tnetWakeupOn) |
| { |
| case TNET_WAKE_ON_BEACON: |
| pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_BEACON_BITMAP; |
| break; |
| case TNET_WAKE_ON_DTIM: |
| pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_DTIM_BITMAP; |
| break; |
| case TNET_WAKE_ON_N_BEACON: |
| pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_N_BEACONS_BITMAP; |
| break; |
| case TNET_WAKE_ON_N_DTIM: |
| pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_N_DTIM_BITMAP; |
| break; |
| default: |
| pCfg->wakeUpConditionBitmap = WAKE_UP_EVENT_BEACON_BITMAP; |
| break; |
| } |
| |
| pCfg->listenInterval = pPMConfig->listenInterval; |
| |
| TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " cmdBld_wakeUpCondition tnetWakeupOn=0x%x listenInterval=%d\n",pCfg->wakeUpConditionBitmap,pCfg->listenInterval); |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_WAKE_UP_CONDITIONS; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeSleepAuth() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the power management option |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeSleepAuth (TI_HANDLE hCmdBld, EPowerPolicy eMinPowerLevel, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXSleepAuth_t ACXSleepAuth; |
| ACXSleepAuth_t *pCfg = &ACXSleepAuth; |
| EElpCtrlMode eElpCtrlMode; |
| |
| /* Set the ELP control according to the new power policy */ |
| switch (eMinPowerLevel) |
| { |
| case POWERAUTHO_POLICY_AWAKE: eElpCtrlMode = ELPCTRL_MODE_KEEP_AWAKE; break; |
| case POWERAUTHO_POLICY_PD: eElpCtrlMode = ELPCTRL_MODE_KEEP_AWAKE; break; |
| case POWERAUTHO_POLICY_ELP: eElpCtrlMode = ELPCTRL_MODE_NORMAL; break; |
| default: |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, " - Param value is not supported, %d\n", eMinPowerLevel); |
| return TI_NOK; |
| |
| } |
| |
| /* Set the ELP mode only if there is a change */ |
| if (pCmdBld->uLastElpCtrlMode != eElpCtrlMode) |
| { |
| pCmdBld->uLastElpCtrlMode = eElpCtrlMode; |
| if (eElpCtrlMode == ELPCTRL_MODE_KEEP_AWAKE) |
| { |
| twIf_Awake(pCmdBld->hTwIf); |
| } |
| else |
| { |
| twIf_Sleep(pCmdBld->hTwIf); |
| } |
| } |
| |
| /* In the info element the enums are in reverse */ |
| switch (eMinPowerLevel) |
| { |
| case POWERAUTHO_POLICY_ELP: |
| pCfg->sleepAuth = 2; |
| break; |
| case POWERAUTHO_POLICY_AWAKE: |
| pCfg->sleepAuth = 0; |
| break; |
| default: |
| pCfg->sleepAuth = eMinPowerLevel; |
| } |
| |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " cmdBld_MinPowerLevelSet sleepAuth=%d\n", eMinPowerLevel); |
| |
| /* Set information element header*/ |
| pCfg->EleHdr.id = ACX_SLEEP_AUTH; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeBcnBrcOptions() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the power management option |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeBcnBrcOptions (TI_HANDLE hCmdBld, TPowerMgmtConfig *pPMConfig, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXBeaconAndBroadcastOptions_t ACXBeaconAndBroadcastOptions; |
| ACXBeaconAndBroadcastOptions_t *pCfg = &ACXBeaconAndBroadcastOptions; |
| |
| pCfg->beaconRxTimeOut = pPMConfig->BcnBrcOptions.BeaconRxTimeout; |
| pCfg->broadcastTimeOut = pPMConfig->BcnBrcOptions.BroadcastRxTimeout; |
| pCfg->rxBroadcastInPS = pPMConfig->BcnBrcOptions.RxBroadcastInPs; |
| pCfg->consecutivePsPollDeliveryFailureThr = pPMConfig->ConsecutivePsPollDeliveryFailureThreshold; |
| |
| |
| TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " cmdBld_BcnBrcOptions BeaconRxTimeout=%d BroadcastRxTimeout=%d RxBroadcastInPs=0x%x, consecutivePsPollDeliveryFailureThr=%d\n", pCfg->beaconRxTimeOut,pCfg->broadcastTimeOut, pCfg->rxBroadcastInPS, pCfg->consecutivePsPollDeliveryFailureThr); |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_BCN_DTIM_OPTIONS; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeFeatureConfig() |
| ACXBeaconAndBroadcastOptions_t* pWlanElm_BcnBrcOptions, |
| **************************************************************************** |
| * DESCRIPTION: Configure the feature config info element |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeFeatureConfig (TI_HANDLE hCmdBld, TI_UINT32 options, TI_UINT32 uDataFlowOptions, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXFeatureConfig_t WlanElm_FeatureConfig; |
| ACXFeatureConfig_t *pCfg = &WlanElm_FeatureConfig; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_FEATURE_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* Set fields */ |
| pCfg->Options = ENDIAN_HANDLE_LONG(options); |
| pCfg->dataflowOptions = ENDIAN_HANDLE_LONG(uDataFlowOptions); |
| |
| TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: option=0x%x, def.option=0x%x\n", pCfg->EleHdr.id, options, uDataFlowOptions); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeTxPowerDbm () |
| **************************************************************************** |
| * DESCRIPTION: Set the Tx power in Dbm units. |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeTxPowerDbm (TI_HANDLE hCmdBld, TI_UINT8 uTxPowerDbm , void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| dot11CurrentTxPowerStruct dot11CurrentTxPower; |
| dot11CurrentTxPowerStruct *pCfg = &dot11CurrentTxPower; |
| |
| TRACE1( pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, " uTxPowerDbm = %d\n", uTxPowerDbm); |
| |
| |
| /* Set information element header*/ |
| pCfg->EleHdr.id = DOT11_CUR_TX_PWR; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->dot11CurrentTxPower = uTxPowerDbm; |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeStatisitics () |
| **************************************************************************** |
| * DESCRIPTION: Set the ACX statistics counters to zero. |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeStatisitics (TI_HANDLE hCmdBld, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TI_STATUS status = TI_NOK; |
| ACXStatistics_t *pCfg; |
| |
| pCfg = os_memoryAlloc(pCmdBld->hOs, sizeof(ACXStatistics_t)); |
| if (!pCfg) |
| { |
| return status; |
| } |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_STATISTICS; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| os_memoryFree(pCmdBld->hOs, pCfg, sizeof(ACXStatistics_t)); |
| return status; |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeTid() |
| **************************************************************************** |
| * DESCRIPTION: Write the Queue configuration (For Quality Of Service) |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeTid (TI_HANDLE hCmdBld, TQueueTrafficParams* pQtrafficParams, void *fCb, TI_HANDLE hCb) |
| |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXTIDConfig_t TrafficCategoryCfg; |
| ACXTIDConfig_t *pCfg = &TrafficCategoryCfg; |
| |
| os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); |
| |
| /* |
| * Set information element header |
| * ============================== |
| */ |
| pCfg->EleHdr.id = ACX_TID_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* |
| * Set information element Data |
| * ============================== |
| */ |
| pCfg->queueID = pQtrafficParams->queueID; |
| pCfg->channelType = pQtrafficParams->channelType; |
| pCfg->tsid = pQtrafficParams->tsid; |
| pCfg->psScheme = pQtrafficParams->psScheme; |
| pCfg->APSDConf[0] = pQtrafficParams->APSDConf[0]; |
| pCfg->APSDConf[1] = pQtrafficParams->APSDConf[1]; |
| |
| TRACE7(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: queue-id=%u, chan-type=%u, tsid=%u, ps-scheme=%u, apsd-1=0x%x, apsd-2=0x%x\n", pCfg->EleHdr.id, pCfg->queueID, pCfg->channelType, pCfg->tsid, pCfg->psScheme, pCfg->APSDConf[0], pCfg->APSDConf[1]); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeAcParams() |
| **************************************************************************** |
| * DESCRIPTION: Write the AC configuration (For Quality Of Service) |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeAcParams (TI_HANDLE hCmdBld, TAcQosParams *pAcQosParams, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXAcCfg_t AcCfg; |
| ACXAcCfg_t *pCfg = &AcCfg; |
| |
| os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); |
| |
| /* |
| * Set information element header |
| * ============================== |
| */ |
| pCfg->EleHdr.id = ACX_AC_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* |
| * Set information element Data |
| * ============================== |
| */ |
| |
| pCfg->ac = pAcQosParams->ac; |
| pCfg->aifsn = pAcQosParams->aifsn; |
| pCfg->cwMax = ENDIAN_HANDLE_WORD(pAcQosParams->cwMax); |
| pCfg->cwMin = pAcQosParams->cwMin; |
| pCfg->txopLimit = ENDIAN_HANDLE_WORD(pAcQosParams->txopLimit); |
| |
| TRACE6(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: ac= %u, aifsn=%u, cw-max=%u, cw-min=%u, txop=%u\n", pCfg->EleHdr.id, pAcQosParams->ac, pAcQosParams->aifsn, pAcQosParams->cwMax, pAcQosParams->cwMin, pAcQosParams->txopLimit); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIePsRxStreaming() |
| **************************************************************************** |
| * DESCRIPTION: Write the AC PS-Rx-Streaming |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIePsRxStreaming (TI_HANDLE hCmdBld, TPsRxStreaming *pPsRxStreaming, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXPsRxStreaming_t tStreamingCfg; |
| ACXPsRxStreaming_t *pCfg = &tStreamingCfg; |
| |
| os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); |
| |
| /* |
| * Set information element header |
| * ============================== |
| */ |
| pCfg->EleHdr.id = ACX_PS_RX_STREAMING; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* |
| * Set information element Data |
| * ============================ |
| */ |
| pCfg->TID = (TI_UINT8)pPsRxStreaming->uTid; |
| pCfg->rxPSDEnabled = (TI_UINT8)pPsRxStreaming->bEnabled; |
| pCfg->streamPeriod = (TI_UINT8)pPsRxStreaming->uStreamPeriod; |
| pCfg->txTimeout = (TI_UINT8)pPsRxStreaming->uTxTimeout; |
| |
| TRACE5(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "ID=%u: tid= %u, enable=%u, streamPeriod=%u, txTimeout=%u\n", pCfg->EleHdr.id, pCfg->TID, pCfg->rxPSDEnabled, pCfg->streamPeriod, pCfg->txTimeout); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIePacketDetectionThreshold() |
| **************************************************************************** |
| * DESCRIPTION: Set the PacketDetection threshold |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIePacketDetectionThreshold (TI_HANDLE hCmdBld, TI_UINT32 pdThreshold, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXPacketDetection_t PacketDetectionThresholdCfg; |
| ACXPacketDetection_t *pCfg = &PacketDetectionThresholdCfg; |
| |
| /* |
| * Set information element header |
| * ============================== |
| */ |
| pCfg->EleHdr.id = ACX_PD_THRESHOLD; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* |
| * Set information element Data |
| * ============================== |
| */ |
| pCfg->pdThreshold = ENDIAN_HANDLE_LONG(pdThreshold); |
| |
| TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": pdThreshold = 0x%x , len = 0x%x \n",pCfg->pdThreshold,pCfg->EleHdr.len); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeBeaconFilterOpt() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the beacon filtering option |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeBeaconFilterOpt (TI_HANDLE hCmdBld, TI_UINT8 beaconFilteringStatus, TI_UINT8 numOfBeaconsToBuffer, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXBeaconFilterOptions_t ACXBeaconFilterOptions; |
| ACXBeaconFilterOptions_t *pCfg = &ACXBeaconFilterOptions; |
| |
| pCfg->enable = beaconFilteringStatus; |
| pCfg->maxNumOfBeaconsStored = numOfBeaconsToBuffer; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_BEACON_FILTER_OPT; |
| pCfg->EleHdr.len = sizeof(ACXBeaconFilterOptions_t) - sizeof(EleHdrStruct); |
| |
| TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: enable=%u, num-stored=%u\n", pCfg->EleHdr.id, beaconFilteringStatus, numOfBeaconsToBuffer); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXBeaconFilterOptions_t), fCb, hCb, NULL); |
| } |
| /**************************************************************************** |
| * cmdBld_CfgIeRateMngDbg() |
| **************************************************************************** |
| * DESCRIPTION: Configure the rate managment params |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| |
| TI_STATUS cmdBld_CfgIeRateMngDbg (TI_HANDLE hCmdBld, RateMangeParams_t *pRateMngParams, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| AcxRateMangeParams RateMng; |
| AcxRateMangeParams *pCfg = &RateMng; |
| int i; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_SET_RATE_MAMAGEMENT_PARAMS; |
| pCfg->EleHdr.len = sizeof(AcxRateMangeParams) - sizeof(EleHdrStruct); |
| |
| |
| TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u, index=%d \n",pCfg->EleHdr.id,pRateMngParams->paramIndex); |
| |
| pCfg->paramIndex = pRateMngParams->paramIndex; |
| |
| pCfg->InverseCuriosityFactor = pRateMngParams->InverseCuriosityFactor; |
| pCfg->MaxPer = pRateMngParams->MaxPer; |
| pCfg->PerAdd = pRateMngParams->PerAdd; |
| pCfg->PerAddShift = pRateMngParams->PerAddShift; |
| pCfg->PerAlphaShift = pRateMngParams->PerAlphaShift; |
| pCfg->PerBeta1Shift = pRateMngParams->PerBeta1Shift; |
| pCfg->PerBeta2Shift = pRateMngParams->PerBeta2Shift; |
| pCfg->PerTh1 = pRateMngParams->PerTh1; |
| pCfg->PerTh2 = pRateMngParams->PerTh2; |
| pCfg->RateCheckDown = pRateMngParams->RateCheckDown; |
| pCfg->RateCheckUp = pRateMngParams->RateCheckUp; |
| pCfg->RateRetryScore = pRateMngParams->RateRetryScore; |
| pCfg->TxFailHighTh = pRateMngParams->TxFailHighTh; |
| pCfg->TxFailLowTh = pRateMngParams->TxFailLowTh; |
| |
| for (i=0 ; i< 13 ; i++) |
| { |
| pCfg->RateRetryPolicy[i] = pRateMngParams->RateRetryPolicy[i]; |
| } |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(AcxRateMangeParams), fCb, hCb, NULL); |
| } |
| |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeBeaconFilterTable |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the beacon filter IE table |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeBeaconFilterTable (TI_HANDLE hCmdBld, |
| TI_UINT8 uNumberOfIEs, |
| TI_UINT8 *pIETable, |
| TI_UINT8 uIETableSize, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXBeaconFilterIETable_t beaconFilterIETableStruct; |
| ACXBeaconFilterIETable_t *pCfg = &beaconFilterIETableStruct; |
| TI_UINT32 counter; |
| |
| if (NULL == pIETable) |
| { |
| return PARAM_VALUE_NOT_VALID; |
| } |
| |
| pCfg->EleHdr.id = ACX_BEACON_FILTER_TABLE; |
| pCfg->EleHdr.len = uIETableSize + 1; |
| pCfg->NumberOfIEs = uNumberOfIEs; |
| |
| os_memoryZero (pCmdBld->hOs, (void *)pCfg->IETable, BEACON_FILTER_TABLE_MAX_SIZE); |
| os_memoryCopy (pCmdBld->hOs, (void *)pCfg->IETable, (void *)pIETable, uIETableSize); |
| |
| TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: num-ie=%u, table-size=%u\n", pCfg->EleHdr.id, uNumberOfIEs, uIETableSize); |
| |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "Beacon IE Table:\n"); |
| for (counter = 0; counter < uIETableSize; counter++) |
| { |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "%2x ", pIETable[counter]); |
| } |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "\n"); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXBeaconFilterIETable_t), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CfgCoexActivity |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the Coex activity IE |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeCoexActivity (TI_HANDLE hCmdBld, |
| TCoexActivity *pCoexActivity, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXCoexActivityIE_t coexActivityIEStruct; |
| ACXCoexActivityIE_t *pCfg = &coexActivityIEStruct; |
| |
| if (NULL == pCoexActivity) |
| { |
| return PARAM_VALUE_NOT_VALID; |
| } |
| |
| pCfg->EleHdr.id = ACX_COEX_ACTIVITY; |
| pCfg->EleHdr.len = sizeof(ACXCoexActivityIE_t) - sizeof(EleHdrStruct); |
| |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "CoexActivity: ID=0x%x\n", pCfg->EleHdr.id); |
| |
| pCfg->coexIp = pCoexActivity->coexIp; |
| pCfg->activityId = pCoexActivity->activityId; |
| pCfg->defaultPriority = pCoexActivity->defaultPriority; |
| pCfg->raisedPriority = pCoexActivity->raisedPriority; |
| pCfg->minService = ENDIAN_HANDLE_WORD(pCoexActivity->minService); |
| pCfg->maxService = ENDIAN_HANDLE_WORD(pCoexActivity->maxService); |
| |
| TRACE6(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "CoexActivity: 0x%02x 0x%02x - 0x%02x 0x%02x 0x%04x 0x%04x\n", |
| pCfg->coexIp, |
| pCfg->activityId, |
| pCfg->defaultPriority, |
| pCfg->raisedPriority, |
| pCfg->minService, |
| pCfg->maxService); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeCcaThreshold() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the Slot Time |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeCcaThreshold (TI_HANDLE hCmdBld, TI_UINT16 ccaThreshold, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXEnergyDetection_t AcxElm_CcaThreshold; |
| ACXEnergyDetection_t *pCfg = &AcxElm_CcaThreshold; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_CCA_THRESHOLD; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->rxCCAThreshold = ENDIAN_HANDLE_WORD(ccaThreshold); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeEventMask() |
| **************************************************************************** |
| * DESCRIPTION: Change the Event Vector Mask in the FW |
| * |
| * INPUTS: MaskVector The Updated Vector Mask |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeEventMask (TI_HANDLE hCmdBld, TI_UINT32 mask, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| |
| ACXEventMboxMask_t EventMboxData; |
| ACXEventMboxMask_t *pCfg = &EventMboxData; |
| |
| /* Set information element header*/ |
| pCfg->EleHdr.id = ACX_EVENT_MBOX_MASK; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| pCfg->lowEventMask = ENDIAN_HANDLE_LONG(mask); |
| pCfg->highEventMask = ENDIAN_HANDLE_LONG(0xffffffff); /* Not in Use */ |
| |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "cmdBld_CfgIeEventMask:\n"); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeMaxTxRetry() |
| **************************************************************************** |
| * DESCRIPTION: Configure the Max Tx Retry parameters |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeMaxTxRetry (TI_HANDLE hCmdBld, |
| TRroamingTriggerParams *pRoamingTriggerCmd, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXConsTxFailureTriggerParameters_t AcxElm_SetMaxTxRetry; |
| ACXConsTxFailureTriggerParameters_t* pCfg = &AcxElm_SetMaxTxRetry; |
| |
| pCfg->maxTxRetry = pRoamingTriggerCmd->maxTxRetry; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_CONS_TX_FAILURE; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeConnMonitParams() |
| **************************************************************************** |
| * DESCRIPTION: Configure the Bss Lost Timeout & TSF miss threshold |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeConnMonitParams (TI_HANDLE hCmdBld, TRroamingTriggerParams *pRoamingTriggerCmd, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| AcxConnectionMonitorOptions AcxElm_SetBssLossTsfThreshold; |
| AcxConnectionMonitorOptions* pCfg = &AcxElm_SetBssLossTsfThreshold; |
| |
| pCfg->BSSLossTimeout = ENDIAN_HANDLE_LONG(pRoamingTriggerCmd->BssLossTimeout); |
| pCfg->TSFMissedThreshold = ENDIAN_HANDLE_LONG(pRoamingTriggerCmd->TsfMissThreshold); |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_CONN_MONIT_PARAMS; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeTxRatePolicy() |
| **************************************************************************** |
| * DESCRIPTION: Write the TxRateClass configuration |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeTxRatePolicy (TI_HANDLE hCmdBld, TTxRatePolicy *pTxRatePolicy, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXTxAttrClasses_t TxClassCfg; |
| ACXTxAttrClasses_t *pCfg = &TxClassCfg; |
| TI_UINT8 PolicyId; |
| |
| os_memoryZero (pCmdBld->hOs, (void *)pCfg, sizeof(*pCfg)); |
| |
| /* |
| * Set information element header |
| * ============================== |
| */ |
| pCfg->EleHdr.id = ACX_RATE_POLICY; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| pCfg->numOfClasses = pTxRatePolicy->numOfRateClasses; |
| |
| for (PolicyId = 0; PolicyId < pTxRatePolicy->numOfRateClasses; PolicyId++) |
| { |
| os_memoryCopy (pCmdBld->hOs, |
| (void *)&(pCfg->rateClasses[PolicyId]), |
| (void *)&(pTxRatePolicy->rateClass[PolicyId]), |
| sizeof(TTxRateClass)); |
| } |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRtsThreshold() |
| **************************************************************************** |
| * DESCRIPTION: Configure the RTS threshold |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeRtsThreshold (TI_HANDLE hCmdBld, TI_UINT16 uRtsThreshold, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| dot11RTSThreshold_t AcxElm_RtsThreshold; |
| dot11RTSThreshold_t *pCfg = &AcxElm_RtsThreshold; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = DOT11_RTS_THRESHOLD; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->RTSThreshold = ENDIAN_HANDLE_WORD(uRtsThreshold); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRtsThreshold() |
| **************************************************************************** |
| * DESCRIPTION: Configure the tx fragmentation threshold |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeFragmentThreshold (TI_HANDLE hCmdBld, TI_UINT16 uFragmentThreshold, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXFRAGThreshold_t AcxElm_FragmentThreshold; |
| ACXFRAGThreshold_t *pCfg = &AcxElm_FragmentThreshold; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_FRAG_CFG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->fragThreshold = ENDIAN_HANDLE_WORD(uFragmentThreshold); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIePmConfig() |
| **************************************************************************** |
| * DESCRIPTION: Configure PM parameters |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIePmConfig (TI_HANDLE hCmdBld, |
| TI_UINT32 uHostClkSettlingTime, |
| TI_UINT8 uHostFastWakeupSupport, |
| void * fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXPMConfig_t tPmConfig; |
| ACXPMConfig_t *pCfg = &tPmConfig; |
| |
| /* Set information element header*/ |
| pCfg->EleHdr.id = ACX_PM_CONFIG; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->hostClkSettlingTime = uHostClkSettlingTime; |
| pCfg->hostFastWakeupSupport = uHostFastWakeupSupport; |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeTxCmpltPacing() |
| **************************************************************************** |
| * DESCRIPTION: Configure Tx-Complete interrupt pacing to FW |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeTxCmpltPacing (TI_HANDLE hCmdBld, |
| TI_UINT16 uTxCompletePacingThreshold, |
| TI_UINT16 uTxCompletePacingTimeout, |
| void * fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXTxConfigOptions_t tTxCmpltPacing; |
| ACXTxConfigOptions_t *pCfg = &tTxCmpltPacing; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_TX_CONFIG_OPT; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->txCompleteThreshold = ENDIAN_HANDLE_WORD(uTxCompletePacingThreshold); |
| pCfg->txCompleteTimeout = ENDIAN_HANDLE_WORD(uTxCompletePacingTimeout); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRxIntrPacing() |
| **************************************************************************** |
| * DESCRIPTION: Configure Rx-Complete interrupt pacing to FW |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeRxIntrPacing (TI_HANDLE hCmdBld, |
| TI_UINT16 uRxIntrPacingThreshold, |
| TI_UINT16 uRxIntrPacingTimeout, |
| void * fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXRxBufferingConfig_t tRxIntrPacing; |
| ACXRxBufferingConfig_t *pCfg = &tRxIntrPacing; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_RX_CONFIG_OPT; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->rxPktThreshold = ENDIAN_HANDLE_WORD(uRxIntrPacingThreshold); |
| pCfg->rxCompleteTimeout = ENDIAN_HANDLE_WORD(uRxIntrPacingTimeout); |
| pCfg->rxMblkThreshold = ENDIAN_HANDLE_WORD(0xFFFF); /* Set to maximum so it has no effect (only the PktThreshold is used) */ |
| pCfg->rxQueueType = RX_QUEUE_TYPE_RX_LOW_PRIORITY; /* Only low priority data packets are buffered */ |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeCtsProtection() |
| **************************************************************************** |
| * DESCRIPTION: Configure The Cts to self feature |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeCtsProtection (TI_HANDLE hCmdBld, TI_UINT8 ctsProtection, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXCtsProtection_t AcxElm_CtsToSelf; |
| ACXCtsProtection_t *pCfg = &AcxElm_CtsToSelf; |
| |
| /* Set information element header*/ |
| pCfg->EleHdr.id = ACX_CTS_PROTECTION; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->ctsProtectMode = ctsProtection; |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRxMsduLifeTime() |
| **************************************************************************** |
| * DESCRIPTION: Configure The Cts to self feature |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeRxMsduLifeTime (TI_HANDLE hCmdBld, TI_UINT32 RxMsduLifeTime, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| dot11RxMsduLifeTime_t AcxElm_RxMsduLifeTime; |
| dot11RxMsduLifeTime_t *pCfg = &AcxElm_RxMsduLifeTime; |
| |
| /* Set information element header*/ |
| pCfg->EleHdr.id = DOT11_RX_MSDU_LIFE_TIME; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| pCfg->RxMsduLifeTime = RxMsduLifeTime; |
| |
| TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": RxMsduLifeTime = 0x%x, len = 0x%x\n",pCfg->RxMsduLifeTime,pCfg->EleHdr.len); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeServicePeriodTimeout() |
| **************************************************************************** |
| * DESCRIPTION: Configure The Rx Time Out |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeServicePeriodTimeout (TI_HANDLE hCmdBld, TRxTimeOut* pRxTimeOut, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXRxTimeout_t AcxElm_rxTimeOut; |
| ACXRxTimeout_t *pCfg = &AcxElm_rxTimeOut; |
| |
| /* Set information element header*/ |
| pCfg->EleHdr.id = ACX_SERVICE_PERIOD_TIMEOUT; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->PsPollTimeout = pRxTimeOut->psPoll; |
| pCfg->UpsdTimeout = pRxTimeOut->UPSD; |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIePsWmm() |
| **************************************************************************** |
| * DESCRIPTION: Configure The PS for WMM |
| * |
| * INPUTS: TI_TRUE - Configure PS to work on WMM mode - do not send the NULL/PS_POLL |
| * packets even if TIM is set. |
| * TI_FALSE - Configure PS to work on Non-WMM mode - work according to the |
| * standard |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIePsWmm (TI_HANDLE hCmdBld, TI_BOOL enableWA, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXConfigPsWmm_t ConfigPsWmm; |
| ACXConfigPsWmm_t *pCfg = &ConfigPsWmm; |
| |
| /* |
| * Set information element header |
| */ |
| pCfg->EleHdr.id = ACX_CONFIG_PS_WMM; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| pCfg->ConfigPsOnWmmMode = enableWA; |
| |
| /* Report the meesage only if we are using the WiFi patch */ |
| if (enableWA) |
| { |
| TRACE0(pCmdBld->hReport, REPORT_SEVERITY_CONSOLE, "cmdBld_CfgIePsWmm: PS is on WMM mode\n"); |
| WLAN_OS_REPORT(("%s PS is on WMM mode\n",__FUNCTION__)); |
| } |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRssiSnrTrigger() |
| **************************************************************************** |
| * DESCRIPTION: Configure the RSSI/SNR Trigger parameters |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: OK or NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeRssiSnrTrigger (TI_HANDLE hCmdBld, RssiSnrTriggerCfg_t *pTriggerParam, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXRssiSnrTriggerCfg_t tAcxTriggerParameters; |
| ACXRssiSnrTriggerCfg_t *pCfg = &tAcxTriggerParameters; |
| |
| pCfg->param.index = pTriggerParam->index ; |
| pCfg->param.threshold = pTriggerParam->threshold; |
| pCfg->param.pacing = pTriggerParam->pacing ; |
| pCfg->param.metric = pTriggerParam->metric ; |
| pCfg->param.type = pTriggerParam->type ; |
| pCfg->param.direction = pTriggerParam->direction; |
| pCfg->param.hystersis = pTriggerParam->hystersis; |
| pCfg->param.enable = pTriggerParam->enable ; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_RSSI_SNR_TRIGGER; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| TRACE8(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: threshold=%u, pacing=%u, metric=%u, type=%u, dir=%u, hyst=%u, enable=%u\n", pTriggerParam->index, pTriggerParam->threshold, pTriggerParam->pacing, pTriggerParam->metric, pTriggerParam->type, pTriggerParam->direction, pTriggerParam->hystersis, pTriggerParam->enable); |
| |
| /* Send the configuration command */ |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeRssiSnrWeights() |
| **************************************************************************** |
| * DESCRIPTION: Configure the RSSI/SNR Trigger parameters |
| * |
| * INPUTS: None |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: OK or NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeRssiSnrWeights (TI_HANDLE hCmdBld, RssiSnrAverageWeights_t *pWeightsParam, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXRssiSnrAverageWeights_t tAcxAverageWeights; |
| ACXRssiSnrAverageWeights_t *pCfg = &tAcxAverageWeights; |
| |
| pCfg->param.rssiBeaconAverageWeight = pWeightsParam->rssiBeaconAverageWeight; |
| pCfg->param.rssiPacketAverageWeight = pWeightsParam->rssiPacketAverageWeight; |
| pCfg->param.snrBeaconAverageWeight = pWeightsParam->snrBeaconAverageWeight ; |
| pCfg->param.snrPacketAverageWeight = pWeightsParam->snrPacketAverageWeight ; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_RSSI_SNR_WEIGHTS; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "rssi-beacon-avg-weight=%u, rssi-packet-avg-weight=%u, snr-beacon-avg-weight=%u, snr-packet-avg-weight=%u", pWeightsParam->rssiBeaconAverageWeight, pWeightsParam->rssiPacketAverageWeight, pWeightsParam->snrBeaconAverageWeight, pWeightsParam->snrPacketAverageWeight); |
| |
| /* Send the configuration command */ |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /* |
| * ---------------------------------------------------------------------------- |
| * Function : cmdBld_CfgIeBet |
| * |
| * Input : enabled - 0 to disable BET, 0 to disable BET |
| * MaximumConsecutiveET - Max number of consecutive beacons |
| * that may be early terminated. |
| * Output : TI_STATUS |
| * Process : Configures Beacon Early Termination information element. |
| * Note(s) : None |
| * ----------------------------------------------------------------------------- |
| */ |
| TI_STATUS cmdBld_CfgIeBet (TI_HANDLE hCmdBld, TI_UINT8 Enable, TI_UINT8 MaximumConsecutiveET, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| |
| ACXBet_Enable_t ACXBet_Enable; |
| ACXBet_Enable_t* pCfg = &ACXBet_Enable; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_BET_ENABLE; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* Set configuration fields */ |
| pCfg->Enable = Enable; |
| pCfg->MaximumConsecutiveET = MaximumConsecutiveET; |
| |
| TRACE2(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, Enable=%d, MaximumConsecutiveET=%d\n", (TI_UINT32)pCfg->Enable, (TI_UINT32)pCfg->MaximumConsecutiveET); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CmdIeConfigureKeepAliveParams() |
| **************************************************************************** |
| * DESCRIPTION: Configure keep-alive parameters for a single template |
| * |
| * INPUTS: hCmdBld - handle to command builder object |
| * uIndex - keep-alive index |
| * uEnaDisFlag - whether keep-alive is enabled or disables |
| * trigType - send keep alive when TX is idle or always |
| * interval - keep-alive interval |
| * fCB - callback function for command complete |
| * hCb - handle to be apssed to callback function |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: OK or NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CmdIeConfigureKeepAliveParams (TI_HANDLE hCmdBld, TI_UINT8 uIndex, |
| TI_UINT8 uEnaDisFlag, TI_UINT8 trigType, |
| TI_UINT32 interval, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| AcxSetKeepAliveConfig_t ACXKeepAlive; |
| |
| /* set IE header */ |
| ACXKeepAlive.EleHdr.id = ACX_SET_KEEP_ALIVE_CONFIG; |
| ACXKeepAlive.EleHdr.len = sizeof (AcxSetKeepAliveConfig_t) - sizeof (EleHdrStruct); |
| |
| /* set Keep-Alive values */ |
| ACXKeepAlive.index = uIndex; |
| ACXKeepAlive.period = interval; |
| ACXKeepAlive.trigger = trigType; |
| ACXKeepAlive.valid = uEnaDisFlag; |
| |
| TRACE4(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, index=%d, enaDis=%d, trigType=%d, interval=%d\n", (TI_UINT32)ACXKeepAlive.index, (TI_UINT32)ACXKeepAlive.valid, (TI_UINT32)ACXKeepAlive.trigger, (TI_UINT32)ACXKeepAlive.period); |
| |
| /* send the command to the FW */ |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, &ACXKeepAlive, sizeof(AcxSetKeepAliveConfig_t), fCb, hCb, NULL); |
| } |
| |
| /**************************************************************************** |
| * cmdBld_CmdIeConfigureKeepAliveParams() |
| **************************************************************************** |
| * DESCRIPTION: Configure keep-alive global enable / disable flag |
| * |
| * INPUTS: enable / disable flag |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: OK or NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CmdIeConfigureKeepAliveEnaDis (TI_HANDLE hCmdBld, TI_UINT8 enaDisFlag, |
| void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| AcxKeepAliveMode ACXKeepAliveMode; |
| |
| /* set IE header */ |
| ACXKeepAliveMode.EleHdr.id = ACX_KEEP_ALIVE_MODE; |
| ACXKeepAliveMode.EleHdr.len = sizeof (AcxKeepAliveMode) - sizeof (EleHdrStruct); |
| |
| /* set Keep-Alive mode */ |
| ACXKeepAliveMode.modeEnabled = enaDisFlag; |
| |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, ": Sending info elem to firmware, enaDis=%d\n", (TI_UINT32)ACXKeepAliveMode.modeEnabled); |
| |
| /* send the command to the FW */ |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, &ACXKeepAliveMode, sizeof(AcxKeepAliveMode), fCb, hCb, NULL); |
| } |
| |
| /** |
| * \fn cmdBld_CfgIeSetFwHtCapabilities |
| * \brief set the current AP HT Capabilities to the FW. |
| * |
| * \note |
| * \return TI_OK on success or TI_NOK on failure |
| * \sa |
| */ |
| TI_STATUS cmdBld_CfgIeSetFwHtCapabilities (TI_HANDLE hCmdBld, |
| TI_UINT32 uHtCapabilites, |
| TMacAddr tMacAddress, |
| TI_UINT8 uAmpduMaxLeng, |
| TI_UINT8 uAmpduMinSpac, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TAxcHtCapabilitiesIeFwInterface tAcxFwHtCap; |
| TAxcHtCapabilitiesIeFwInterface *pCfg = &tAcxFwHtCap; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_PEER_HT_CAP; |
| pCfg->EleHdr.len = sizeof(tAcxFwHtCap) - sizeof(EleHdrStruct); |
| |
| MAC_COPY (pCfg->aMacAddress, tMacAddress); |
| pCfg->uHtCapabilites = uHtCapabilites; |
| pCfg->uAmpduMaxLength = uAmpduMaxLeng; |
| pCfg->uAmpduMinSpacing = uAmpduMinSpac; |
| |
| TRACE9(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSetFwHtCapabilities: HtCapabilites=0x%x, AmpduMaxLength=%d, AmpduMinSpac=%d, MAC: %x:%x:%x:%x:%x:%x\n", uHtCapabilites, uAmpduMaxLeng, uAmpduMinSpac, pCfg->aMacAddress[0], pCfg->aMacAddress[1], pCfg->aMacAddress[2], pCfg->aMacAddress[3], pCfg->aMacAddress[4], pCfg->aMacAddress[5]); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(TAxcHtCapabilitiesIeFwInterface), fCb, hCb, NULL); |
| |
| } |
| |
| /** |
| * \fn cmdBld_CfgIeSetFwHtInformation |
| * \brief set the current AP HT Information to the FW. |
| * |
| * \note |
| * \return TI_OK on success or TI_NOK on failure |
| * \sa |
| */ |
| TI_STATUS cmdBld_CfgIeSetFwHtInformation (TI_HANDLE hCmdBld, |
| TI_UINT8 uRifsMode, |
| TI_UINT8 uHtProtection, |
| TI_UINT8 uGfProtection, |
| TI_UINT8 uHtTxBurstLimit, |
| TI_UINT8 uDualCtsProtection, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TAxcHtInformationIeFwInterface tAcxFwHtInf; |
| TAxcHtInformationIeFwInterface *pCfg = &tAcxFwHtInf; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_HT_BSS_OPERATION; |
| pCfg->EleHdr.len = sizeof(tAcxFwHtInf) - sizeof(EleHdrStruct); |
| |
| pCfg->uRifsMode = uRifsMode; |
| pCfg->uHtProtection = uHtProtection; |
| pCfg->uGfProtection = uGfProtection; |
| pCfg->uHtTxBurstLimit = uHtTxBurstLimit; |
| pCfg->uDualCtsProtection = uDualCtsProtection; |
| |
| TRACE5(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSetFwHtInformation: RifsMode=0x%x, HtProtection=0x%x, GfProtection=0x%x, HtTxBurstLimit=0x%x, DualCtsProtection=0x%x\n", uRifsMode, uHtProtection, uGfProtection, uHtTxBurstLimit, uDualCtsProtection); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(TAxcHtInformationIeFwInterface), fCb, hCb, NULL); |
| } |
| |
| /** |
| * \fn cmdBld_CfgIeSetBaSession |
| * \brief configure BA session initiator\receiver parameters setting in the FW. |
| * |
| * \note |
| * \return TI_OK on success or TI_NOK on failure |
| * \sa |
| */ |
| TI_STATUS cmdBld_CfgIeSetBaSession (TI_HANDLE hCmdBld, |
| InfoElement_e eBaType, |
| TI_UINT8 uTid, |
| TI_UINT8 uState, |
| TMacAddr tRa, |
| TI_UINT16 uWinSize, |
| TI_UINT16 uInactivityTimeout, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TAxcBaSessionInitiatorResponderPolicy tAcxBaSessionPrm; |
| TAxcBaSessionInitiatorResponderPolicy *pCfg = &tAcxBaSessionPrm; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = eBaType; |
| pCfg->EleHdr.len = sizeof(tAcxBaSessionPrm) - sizeof(EleHdrStruct); |
| |
| MAC_COPY (pCfg->aMacAddress, tRa); |
| pCfg->uTid = uTid; |
| pCfg->uPolicy = uState; |
| pCfg->uWinSize = uWinSize; |
| |
| if (eBaType == ACX_BA_SESSION_INITIATOR_POLICY) |
| { |
| pCfg->uInactivityTimeout = uInactivityTimeout; |
| } |
| else |
| { |
| if (eBaType == ACX_BA_SESSION_RESPONDER_POLICY) |
| { |
| pCfg->uInactivityTimeout = 0; |
| } |
| else |
| { |
| TRACE1(pCmdBld->hReport, REPORT_SEVERITY_ERROR, "cmdBld_CfgIeSetBaSession: error ID=%u\n", pCfg->EleHdr.id); |
| return TI_NOK; |
| } |
| } |
| |
| TRACE10(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION, "cmdBld_CfgIeSetBaSession: ID=, TID=%u, Policy=%u, MAC: %x:%x:%x:%x:%x:%x, uWinSize=%u, Timeout=%u\n", pCfg->uTid, pCfg->uPolicy, pCfg->aMacAddress[0], pCfg->aMacAddress[1], pCfg->aMacAddress[2], pCfg->aMacAddress[3], pCfg->aMacAddress[4], pCfg->aMacAddress[5], pCfg->uWinSize, pCfg->uInactivityTimeout); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(TAxcBaSessionInitiatorResponderPolicy), fCb, hCb, NULL); |
| } |
| |
| /** |
| * \fn cmdBld_CfgIeRadioParams |
| * \brief configure radio parameters setting in the FW. |
| * |
| * \note |
| * \return TI_OK on success or TI_NOK on failure |
| * \sa |
| */ |
| TI_STATUS cmdBld_CfgIeRadioParams (TI_HANDLE hCmdBld, IniFileRadioParam *pIniFileRadioParams, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TI_STATUS status = TI_NOK; |
| TTestCmd *pTestCmd; |
| |
| pTestCmd = os_memoryAlloc(pCmdBld->hOs, sizeof(TTestCmd)); |
| if (!pTestCmd) |
| { |
| return status; |
| } |
| |
| pTestCmd->testCmdId = TEST_CMD_INI_FILE_RADIO_PARAM; |
| |
| os_memoryCopy(pCmdBld->hOs, &pTestCmd->testCmd_u.IniFileRadioParams, pIniFileRadioParams, sizeof(IniFileRadioParam)); |
| |
| status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, |
| CMD_TEST, |
| (void *)pTestCmd, |
| sizeof(IniFileRadioParam) + 4, |
| fCb, |
| hCb, |
| NULL); |
| os_memoryFree(pCmdBld->hOs, pTestCmd, sizeof(TTestCmd)); |
| return status; |
| } |
| |
| |
| /** |
| * \fn cmdBld_CfgIeExtendedRadioParams |
| * \brief configure extended radio parameters setting in the |
| * FW. |
| * |
| * \note |
| * \return TI_OK on success or TI_NOK on failure |
| * \sa |
| */ |
| TI_STATUS cmdBld_CfgIeExtendedRadioParams (TI_HANDLE hCmdBld, |
| IniFileExtendedRadioParam *pIniFileExtRadioParams, |
| void *fCb, |
| TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TI_STATUS status = TI_NOK; |
| TTestCmd *pTestCmd; |
| |
| pTestCmd = os_memoryAlloc(pCmdBld->hOs, sizeof(TTestCmd)); |
| if (!pTestCmd) |
| { |
| return status; |
| } |
| |
| pTestCmd->testCmdId = TEST_CMD_INI_FILE_RF_EXTENDED_PARAM; |
| |
| os_memoryCopy(pCmdBld->hOs, &pTestCmd->testCmd_u.IniFileExtendedRadioParams, |
| pIniFileExtRadioParams, sizeof(IniFileExtendedRadioParam)); |
| |
| status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, |
| CMD_TEST, |
| (void *)pTestCmd, |
| sizeof(IniFileExtendedRadioParam) + 4, |
| fCb, |
| hCb, |
| NULL); |
| os_memoryFree(pCmdBld->hOs, pTestCmd, sizeof(TTestCmd)); |
| return status; |
| } |
| |
| |
| TI_STATUS cmdBld_CfgPlatformGenParams (TI_HANDLE hCmdBld, IniFileGeneralParam *pGenParams, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| TI_STATUS status = TI_NOK; |
| TTestCmd *pTestCmd; |
| |
| pTestCmd = os_memoryAlloc(pCmdBld->hOs, sizeof(TTestCmd)); |
| if (!pTestCmd) |
| { |
| return status; |
| } |
| |
| pTestCmd->testCmdId = TEST_CMD_INI_FILE_GENERAL_PARAM; |
| |
| os_memoryCopy(pCmdBld->hOs, &pTestCmd->testCmd_u.IniFileGeneralParams, pGenParams, sizeof(IniFileGeneralParam)); |
| |
| status = cmdQueue_SendCommand (pCmdBld->hCmdQueue, |
| CMD_TEST, |
| (void *)pTestCmd, |
| sizeof(IniFileGeneralParam), |
| fCb, |
| hCb, |
| NULL); |
| os_memoryFree(pCmdBld->hOs, pTestCmd, sizeof(TTestCmd)); |
| return status; |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeBurstMode() |
| **************************************************************************** |
| * DESCRIPTION: Configure burst mode |
| * |
| * INPUTS: hCmdBld - handle to command builder object |
| * bEnabled - is enabled flag |
| * fCB - callback function for command complete |
| * hCb - handle to be apssed to callback function |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: OK or NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeBurstMode (TI_HANDLE hCmdBld, TI_BOOL bEnabled, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| AcxBurstMode tAcxBurstMode; |
| AcxBurstMode *pCfg = &tAcxBurstMode; |
| |
| /* set IE header */ |
| pCfg->EleHdr.id = ACX_BURST_MODE; |
| pCfg->EleHdr.len = sizeof(*pCfg) - sizeof(EleHdrStruct); |
| |
| /* set burst mode value */ |
| pCfg->enable = (uint8)bEnabled; |
| |
| /* send the command to the FW */ |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(*pCfg), fCb, hCb, NULL); |
| } |
| |
| |
| /**************************************************************************** |
| * cmdBld_CfgIeDcoItrimParams() |
| **************************************************************************** |
| * DESCRIPTION: Configure/Interrogate the DCO Itrim parameters |
| * |
| * INPUTS: |
| * |
| * OUTPUT: None |
| * |
| * RETURNS: TI_OK or TI_NOK |
| ****************************************************************************/ |
| TI_STATUS cmdBld_CfgIeDcoItrimParams (TI_HANDLE hCmdBld, TI_BOOL enable, TI_UINT32 moderationTimeoutUsec, void *fCb, TI_HANDLE hCb) |
| { |
| TCmdBld *pCmdBld = (TCmdBld *)hCmdBld; |
| ACXDCOItrimParams_t ACXBeaconFilterOptions; |
| ACXDCOItrimParams_t *pCfg = &ACXBeaconFilterOptions; |
| |
| pCfg->enable = enable; |
| pCfg->moderation_timeout_usec = moderationTimeoutUsec; |
| |
| /* Set information element header */ |
| pCfg->EleHdr.id = ACX_SET_DCO_ITRIM_PARAMS; |
| pCfg->EleHdr.len = sizeof(ACXDCOItrimParams_t) - sizeof(EleHdrStruct); |
| |
| TRACE3(pCmdBld->hReport, REPORT_SEVERITY_INFORMATION , "ID=%u: enable=%u, moderation_timeout_usec=%u\n", pCfg->EleHdr.id, enable, moderationTimeoutUsec); |
| |
| return cmdQueue_SendCommand (pCmdBld->hCmdQueue, CMD_CONFIGURE, pCfg, sizeof(ACXDCOItrimParams_t), fCb, hCb, NULL); |
| } |