summaryrefslogtreecommitdiff
path: root/wl1271/stad/src/Sta_Management/ScanCncn.h
blob: 1c1fe0c230af1fcebaabb07a4ffba68e8b34f794 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
/*
 * ScanCncn.h
 *
 * 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  ScanCncn.h
 *  \brief Scan concentartor module API
 *
 *  \see   ScanCncn.c
 */

#ifndef __SCANCNCN_H__
#define __SCANCNCN_H__

#include "osTIType.h"
#include "TWDriver.h"
#include "scrApi.h"
#include "mlmeApi.h"

#define SCAN_CNCN_APP_SCAN_TABLE_ENTRIES 64

/** \enum EScanCncnClient
 * \brief	Scan Concentrator Client
 * 
 * \par Description
 * Enumerates the different possible clients requesting scan from the scan concentrator
 * 
 * \sa
 */
typedef enum
{
/*	0	*/	SCAN_SCC_ROAMING_IMMED,     	/**< Indicates a scan from the immediate scan for a roaming client */
/*	1	*/	SCAN_SCC_ROAMING_CONT,          /**< Indicates a scan from the continuous scan for a roaming client */
/*	2	*/	SCAN_SCC_DRIVER,                /**< Indicates a scan from the driver client (SME scan) */
/*	3	*/	SCAN_SCC_APP_PERIODIC,          /**< Indicates application (user) periodic scan */
/*	4	*/	SCAN_SCC_APP_ONE_SHOT,          /**< Indicates application (user) one shot scan */
/*	5	*/	SCAN_SCC_NUM_OF_CLIENTS,        /**< Number of scan clients (used internally) */
/*	6	*/	SCAN_SCC_NO_CLIENT              /**< No valid scan clients (used internally) */

} EScanCncnClient;

/** \enum EScanCncnResultStatus
 * \brief	Scan Concentrator Result Status
 * 
 * \par Description
 * Enumerates the possible scan result statuses
 * 
 * \sa
 */
typedef enum 
{
/*	0	*/	SCAN_CRS_RECEIVED_FRAME = 0,            /**< Scan is still running; management frame information is passed. */
/*	1	*/	SCAN_CRS_SCAN_COMPLETE_OK,              /**< Scan completed successfully */
/*	2	*/	SCAN_CRS_SCAN_RUNNING,                  /**< Scan started successfully and now is running */
/*	3	*/	SCAN_CRS_SCAN_FAILED,                   /**< 
													* scan failed due to unexpected situation (SCR reject, no 
													* channels available, scan SRV returned TI_NOK, etc)
													*/
/*	4	*/	SCAN_CRS_SCAN_STOPPED,                  /**< scan stopped by user */
/*	5	*/	SCAN_CRS_TSF_ERROR,                     /**< TSF error (AP recovery) occurred (for SPS only): 
													* SPS was not performed because current TSF value is less than designated TSF value.
													*/
/*	6	*/	SCAN_CRS_SCAN_ABORTED_FW_RESET,         /**< scan aborted due to FW reset */
/*	7	*/	SCAN_CRS_SCAN_ABORTED_HIGHER_PRIORITY,  /**< Scan was aborted because of a higher priority client request of the channel (switched channel) */
/*	8	*/	SCAN_CRS_NUM_OF_RES_STATUS              /**< number of possible result status */

} EScanCncnResultStatus;

/** \struct TScanFrameInfo
 * \brief Scan Fram Information
 * 
 * \par Description
 * This structure contains a single frame information, returned by the result CB when a frame is available.
 * It is used to pass scan results (beacons and probe responses).
 * 
 * \sa
 */ 
typedef struct
{
    TMacAddr*           bssId;              /* BSSID (MAC address) of the AP from which the frame was received */
    mlmeFrameInfo_t*    parsedIEs;          /* Information elements in the frame, which is parsed */
    ERadioBand          band;               /* Band on which the frame was received */
    TI_UINT8            channel;            /* Channel on which the frame was received */
    TI_UINT32           staTSF;             /* TSF of the station when the frame was received */
    TI_INT8             rssi;               /* RSSI level at which frame was received */
    TI_INT8             snr;                /* SNR level at which frame was received */
    ERate               rate;               /* Bitrate at which frame was received */
    TI_UINT8*           buffer;             /* Frame information elements, unparsed */
    TI_UINT16           bufferLength;       /* Length of the frame unparsed information elements */
} TScanFrameInfo;

 /** \typedef TScanResultCB
  * \brief Defines the function prototype for the scan result callback
  * (notification by the scan concentrator to a client of either a scan
  * termination or a result frame received).
  */
/**
 * \brief	Scan Result CB  
 * 
 * \param  clientObj    				- TWD module object handle
 * \param  status 				- TID number
 * \param  frameInfo 				- Policy : Enable / Disable 
 * \param  SPSStatus 					- Mac address of: SA as receiver / RA as initiator
 * \return void
 * 
 * \par Description
 * Defines the function prototype for the scan result callback
 * (notification by the scan concentrator to a client of either a scan termination or a result frame received)
 * This CB is egistered by each client and invoked by the scan concentrator, passes scan results to the caller.
 * 
 * \sa
 */
typedef void (*TScanResultCB) (TI_HANDLE clientObj, EScanCncnResultStatus status,
                               TScanFrameInfo* frameInfo, TI_UINT16 SPSStatus);


TI_HANDLE               scanCncn_Create (TI_HANDLE hOS);
void                    scanCncn_Destroy (TI_HANDLE hScanCncn);
void                    scanCncn_Init (TStadHandlesList *pStadHandles);
void                    scanCncn_SetDefaults (TI_HANDLE hScanCncn, TScanCncnInitParams* pScanCncnInitParams);
void                    scanCncn_SwitchToConnected (TI_HANDLE hScanCncn);
void                    scanCncn_SwitchToNotConnected (TI_HANDLE hScanCncn);
void                    scanCncn_SwitchToIBSS (TI_HANDLE hScanCncn);
/**
 * \brief Starts a one-shot scan operation
 * 
 * \param  hScanCncn 	- Handle to the scan concentrator object
 * \param  eClient 		- The client requesting the scan operation
 * \param  pScanParams 	- Parameters for the requested scan
 * \return Scan Concentrator Result Status: 
 * SCAN_CRS_SCAN_RUNNING - scan started successfully and is now running
 * SCAN_CRS_SCAN_FAILED - scan failed to start due to an unexpected error
 *
 * \par Description
 * Starts a one-shot scan operation:
 *  - copies scan params to scan concentrator object
 *  - copies current SSID for roaming scans
 *  - verifies the requested channels with the reg doamin
 *  - if needed, adjust to SG compensation values
 *  - send an event to the client SM
 * 
 * \sa	scanCncn_StopScan
 */ 
EScanCncnResultStatus   scanCncn_Start1ShotScan (TI_HANDLE hScanCncn, EScanCncnClient eClient, TScanParams* pScanParams);
/**
 * \brief Stop an on-going one-shot scan operation
 * 
 * \param  hScanCncn 	- Handle to the scan concentrator object
 * \param  eClient 		- The client requesting to stop the scan operation
 * \return void
 * 
 * \par Description
 * Set necessary flags and send a stop scan event to the client SM
 * 
 * \sa	scanCncn_Start1ShotScan
 */ 
void                    scanCncn_StopScan (TI_HANDLE hScanCncn, EScanCncnClient eClient);
EScanCncnResultStatus   scanCncn_StartPeriodicScan (TI_HANDLE hScanCncn, EScanCncnClient eClient,
                                                    TPeriodicScanParams *pScanParams);
void                    scanCncn_StopPeriodicScan (TI_HANDLE hScanCncn, EScanCncnClient eClient);
/**
 * \brief Registers a scan complete object
 * 
 * \param  hScanCncn 		- Handle to the scan concentrator object
 * \param  eClient 			- The client requesting to stop the scan operation
 * \param  scanResultCBFunc - Pointer to the resulting callback function
 * \param  scanResultCBObj 	- Object passed to the scan resulting callback function
 * \return void
 * 
 * \par Description
 * Registers a callback function for a client that is called for every scan result and scan complete event. 
 * It is called by each client one time before issuing a scan request.
 * 
 * \sa	
 */ 
void                    scanCncn_RegisterScanResultCB (TI_HANDLE hScanCncn, EScanCncnClient eClient,
                                                       TScanResultCB scanResultCBFunc, TI_HANDLE scanResultCBObj);
void                    scanCncn_ScanCompleteNotificationCB (TI_HANDLE hScanCncn, EScanResultTag eTag,
                                                             TI_UINT32 uResultCount, TI_UINT16 SPSStatus,
                                                             TI_BOOL bTSFError, TI_STATUS scanStatus,
                                                             TI_STATUS PSMode);
void                    scanCncn_MlmeResultCB (TI_HANDLE hScanCncn, TMacAddr* bssid, mlmeFrameInfo_t* frameInfo, 
                                               TRxAttr* pRxAttr, TI_UINT8* buffer, TI_UINT16 bufferLength);
void                    scanCncn_ScrRoamingImmedCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus,
                                                    EScrResourceId eResource, EScePendReason ePendReason);
void                    scanCncn_ScrRoamingContCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus,
                                                   EScrResourceId eResource, EScePendReason ePendReason);
void                    scanCncn_ScrAppCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus,
                                           EScrResourceId eResource, EScePendReason ePendReason );
void                    scanCncn_ScrDriverCB (TI_HANDLE hScanCncn, EScrClientRequestStatus eRequestStatus,
                                              EScrResourceId eResource, EScePendReason ePendReason);
void                    scanCncn_SGconfigureScanParams (TI_HANDLE hScanCncn, TI_BOOL bUseSGParams,
                                                        TI_UINT8 probeReqPercent, TI_UINT32 SGcompensationMaxTime,
                                                        TI_UINT32 SGcompensationPercent);
/* Scan concentrator application functions */
TI_STATUS               scanCncnApp_SetParam (TI_HANDLE hScanCncn, paramInfo_t *pParam);
TI_STATUS               scanCncnApp_GetParam (TI_HANDLE hScanCncn, paramInfo_t *pParam);
void                    scanCncn_AppScanResultCB (TI_HANDLE hScanCncn, EScanCncnResultStatus status,
                                                  TScanFrameInfo* frameInfo, TI_UINT16 SPSStatus);
void                    scanCncn_PeriodicScanCompleteCB (TI_HANDLE hScanCncn, char* str, TI_UINT32 strLen);
void                    scanCncn_PeriodicScanReportCB (TI_HANDLE hScanCncn, char* str, TI_UINT32 strLen);

#endif /* __SCANCNCN_H__ */