4 * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
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
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.
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.
35 * \brief Scan concentartor module API
40 #ifndef __SCANCNCN_H__
41 #define __SCANCNCN_H__
48 #define SCAN_CNCN_APP_SCAN_TABLE_ENTRIES 64
50 /** \enum EScanCncnClient
51 * \brief Scan Concentrator Client
54 * Enumerates the different possible clients requesting scan from the scan concentrator
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) */
70 /** \enum EScanCncnResultStatus
71 * \brief Scan Concentrator Result Status
74 * Enumerates the possible scan result statuses
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)
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.
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 */
95 } EScanCncnResultStatus;
97 /** \struct TScanFrameInfo
98 * \brief Scan Fram Information
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).
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 */
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).
126 * \brief Scan Result CB
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
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.
141 typedef void (*TScanResultCB) (TI_HANDLE clientObj, EScanCncnResultStatus status,
142 TScanFrameInfo* frameInfo, TI_UINT16 SPSStatus);
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);
153 * \brief Starts a one-shot scan operation
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
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
170 * \sa scanCncn_StopScan
172 EScanCncnResultStatus scanCncn_Start1ShotScan (TI_HANDLE hScanCncn, EScanCncnClient eClient, TScanParams* pScanParams);
174 * \brief Stop an on-going one-shot scan operation
176 * \param hScanCncn - Handle to the scan concentrator object
177 * \param eClient - The client requesting to stop the scan operation
181 * Set necessary flags and send a stop scan event to the client SM
183 * \sa scanCncn_Start1ShotScan
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);
190 * \brief Registers a scan complete object
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
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.
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,
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);
231 #endif /* __SCANCNCN_H__ */