1 /* 2 * ScanCncn.h 3 * 4 * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name Texas Instruments nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 /** \file ScanCncn.h 35 * \brief Scan concentartor module API 36 * 37 * \see ScanCncn.c 38 */ 39 40 #ifndef __SCANCNCN_H__ 41 #define __SCANCNCN_H__ 42 43 #include "osTIType.h" 44 #include "TWDriver.h" 45 #include "scrApi.h" 46 #include "mlmeApi.h" 47 48 #define SCAN_CNCN_APP_SCAN_TABLE_ENTRIES 64 49 50 /** \enum EScanCncnClient 51 * \brief Scan Concentrator Client 52 * 53 * \par Description 54 * Enumerates the different possible clients requesting scan from the scan concentrator 55 * 56 * \sa 57 */ 58 typedef enum 59 { 60 /* 0 */ SCAN_SCC_ROAMING_IMMED, /**< Indicates a scan from the immediate scan for a roaming client */ 61 /* 1 */ SCAN_SCC_ROAMING_CONT, /**< Indicates a scan from the continuous scan for a roaming client */ 62 /* 2 */ SCAN_SCC_DRIVER, /**< Indicates a scan from the driver client (SME scan) */ 63 /* 3 */ SCAN_SCC_APP_PERIODIC, /**< Indicates application (user) periodic scan */ 64 /* 4 */ SCAN_SCC_APP_ONE_SHOT, /**< Indicates application (user) one shot scan */ 65 /* 5 */ SCAN_SCC_NUM_OF_CLIENTS, /**< Number of scan clients (used internally) */ 66 /* 6 */ SCAN_SCC_NO_CLIENT /**< No valid scan clients (used internally) */ 67 68 } EScanCncnClient; 69 70 /** \enum EScanCncnResultStatus 71 * \brief Scan Concentrator Result Status 72 * 73 * \par Description 74 * Enumerates the possible scan result statuses 75 * 76 * \sa 77 */ 78 typedef enum 79 { 80 /* 0 */ SCAN_CRS_RECEIVED_FRAME = 0, /**< Scan is still running; management frame information is passed. */ 81 /* 1 */ SCAN_CRS_SCAN_COMPLETE_OK, /**< Scan completed successfully */ 82 /* 2 */ SCAN_CRS_SCAN_RUNNING, /**< Scan started successfully and now is running */ 83 /* 3 */ SCAN_CRS_SCAN_FAILED, /**< 84 * scan failed due to unexpected situation (SCR reject, no 85 * channels available, scan SRV returned TI_NOK, etc) 86 */ 87 /* 4 */ SCAN_CRS_SCAN_STOPPED, /**< scan stopped by user */ 88 /* 5 */ SCAN_CRS_TSF_ERROR, /**< TSF error (AP recovery) occurred (for SPS only): 89 * SPS was not performed because current TSF value is less than designated TSF value. 90 */ 91 /* 6 */ SCAN_CRS_SCAN_ABORTED_FW_RESET, /**< scan aborted due to FW reset */ 92 /* 7 */ SCAN_CRS_SCAN_ABORTED_HIGHER_PRIORITY, /**< Scan was aborted because of a higher priority client request of the channel (switched channel) */ 93 /* 8 */ SCAN_CRS_NUM_OF_RES_STATUS /**< number of possible result status */ 94 95 } EScanCncnResultStatus; 96 97 /** \struct TScanFrameInfo 98 * \brief Scan Fram Information 99 * 100 * \par Description 101 * This structure contains a single frame information, returned by the result CB when a frame is available. 102 * It is used to pass scan results (beacons and probe responses). 103 * 104 * \sa 105 */ 106 typedef struct 107 { 108 TMacAddr* bssId; /* BSSID (MAC address) of the AP from which the frame was received */ 109 mlmeFrameInfo_t* parsedIEs; /* Information elements in the frame, which is parsed */ 110 ERadioBand band; /* Band on which the frame was received */ 111 TI_UINT8 channel; /* Channel on which the frame was received */ 112 TI_UINT32 staTSF; /* TSF of the station when the frame was received */ 113 TI_INT8 rssi; /* RSSI level at which frame was received */ 114 TI_INT8 snr; /* SNR level at which frame was received */ 115 ERate rate; /* Bitrate at which frame was received */ 116 TI_UINT8* buffer; /* Frame information elements, unparsed */ 117 TI_UINT16 bufferLength; /* Length of the frame unparsed information elements */ 118 } TScanFrameInfo; 119 120 /** \typedef TScanResultCB 121 * \brief Defines the function prototype for the scan result callback 122 * (notification by the scan concentrator to a client of either a scan 123 * termination or a result frame received). 124 */ 125 /** 126 * \brief Scan Result CB 127 * 128 * \param clientObj - TWD module object handle 129 * \param status - TID number 130 * \param frameInfo - Policy : Enable / Disable 131 * \param SPSStatus - Mac address of: SA as receiver / RA as initiator 132 * \return void 133 * 134 * \par Description 135 * Defines the function prototype for the scan result callback 136 * (notification by the scan concentrator to a client of either a scan termination or a result frame received) 137 * This CB is egistered by each client and invoked by the scan concentrator, passes scan results to the caller. 138 * 139 * \sa 140 */ 141 typedef void (*TScanResultCB) (TI_HANDLE clientObj, EScanCncnResultStatus status, 142 TScanFrameInfo* frameInfo, TI_UINT16 SPSStatus); 143 144 145 TI_HANDLE scanCncn_Create (TI_HANDLE hOS); 146 void scanCncn_Destroy (TI_HANDLE hScanCncn); 147 void scanCncn_Init (TStadHandlesList *pStadHandles); 148 void scanCncn_SetDefaults (TI_HANDLE hScanCncn, TScanCncnInitParams* pScanCncnInitParams); 149 void scanCncn_SwitchToConnected (TI_HANDLE hScanCncn); 150 void scanCncn_SwitchToNotConnected (TI_HANDLE hScanCncn); 151 void scanCncn_SwitchToIBSS (TI_HANDLE hScanCncn); 152 /** 153 * \brief Starts a one-shot scan operation 154 * 155 * \param hScanCncn - Handle to the scan concentrator object 156 * \param eClient - The client requesting the scan operation 157 * \param pScanParams - Parameters for the requested scan 158 * \return Scan Concentrator Result Status: 159 * SCAN_CRS_SCAN_RUNNING - scan started successfully and is now running 160 * SCAN_CRS_SCAN_FAILED - scan failed to start due to an unexpected error 161 * 162 * \par Description 163 * Starts a one-shot scan operation: 164 * - copies scan params to scan concentrator object 165 * - copies current SSID for roaming scans 166 * - verifies the requested channels with the reg doamin 167 * - if needed, adjust to SG compensation values 168 * - send an event to the client SM 169 * 170 * \sa scanCncn_StopScan 171 */ 172 EScanCncnResultStatus scanCncn_Start1ShotScan (TI_HANDLE hScanCncn, EScanCncnClient eClient, TScanParams* pScanParams); 173 /** 174 * \brief Stop an on-going one-shot scan operation 175 * 176 * \param hScanCncn - Handle to the scan concentrator object 177 * \param eClient - The client requesting to stop the scan operation 178 * \return void 179 * 180 * \par Description 181 * Set necessary flags and send a stop scan event to the client SM 182 * 183 * \sa scanCncn_Start1ShotScan 184 */ 185 void scanCncn_StopScan (TI_HANDLE hScanCncn, EScanCncnClient eClient); 186 EScanCncnResultStatus scanCncn_StartPeriodicScan (TI_HANDLE hScanCncn, EScanCncnClient eClient, 187 TPeriodicScanParams *pScanParams); 188 void scanCncn_StopPeriodicScan (TI_HANDLE hScanCncn, EScanCncnClient eClient); 189 /** 190 * \brief Registers a scan complete object 191 * 192 * \param hScanCncn - Handle to the scan concentrator object 193 * \param eClient - The client requesting to stop the scan operation 194 * \param scanResultCBFunc - Pointer to the resulting callback function 195 * \param scanResultCBObj - Object passed to the scan resulting callback function 196 * \return void 197 * 198 * \par Description 199 * Registers a callback function for a client that is called for every scan result and scan complete event. 200 * It is called by each client one time before issuing a scan request. 201 * 202 * \sa 203 */ 204 void scanCncn_RegisterScanResultCB (TI_HANDLE hScanCncn, EScanCncnClient eClient, 205 TScanResultCB scanResultCBFunc, TI_HANDLE scanResultCBObj); 206 void scanCncn_ScanCompleteNotificationCB (TI_HANDLE hScanCncn, EScanResultTag eTag, 207 TI_UINT32 uResultCount, TI_UINT16 SPSStatus, 208 TI_BOOL bTSFError, TI_STATUS scanStatus, 209 TI_STATUS PSMode); 210 void scanCncn_MlmeResultCB (TI_HANDLE hScanCncn, TMacAddr* bssid, mlmeFrameInfo_t* frameInfo, 211 TRxAttr* pRxAttr, TI_UINT8* buffer, TI_UINT16 bufferLength); 212 void scanCncn_ScrRoamingImmedCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus, 213 EScrResourceId eResource, EScePendReason ePendReason); 214 void scanCncn_ScrRoamingContCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus, 215 EScrResourceId eResource, EScePendReason ePendReason); 216 void scanCncn_ScrAppCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus, 217 EScrResourceId eResource, EScePendReason ePendReason ); 218 void scanCncn_ScrDriverCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus, 219 EScrResourceId eResource, EScePendReason ePendReason); 220 void scanCncn_SGconfigureScanParams (TI_HANDLE hScanCncn, TI_BOOL bUseSGParams, 221 TI_UINT8 probeReqPercent, TI_UINT32 SGcompensationMaxTime, 222 TI_UINT32 SGcompensationPercent); 223 /* Scan concentrator application functions */ 224 TI_STATUS scanCncnApp_SetParam (TI_HANDLE hScanCncn, paramInfo_t *pParam); 225 TI_STATUS scanCncnApp_GetParam (TI_HANDLE hScanCncn, paramInfo_t *pParam); 226 void scanCncn_AppScanResultCB (TI_HANDLE hScanCncn, EScanCncnResultStatus status, 227 TScanFrameInfo* frameInfo, TI_UINT16 SPSStatus); 228 void scanCncn_PeriodicScanCompleteCB (TI_HANDLE hScanCncn, char* str, TI_UINT32 strLen); 229 void scanCncn_PeriodicScanReportCB (TI_HANDLE hScanCncn, char* str, TI_UINT32 strLen); 230 231 #endif /* __SCANCNCN_H__ */ 232 233