Home | History | Annotate | Download | only in inc
      1 /** \file ScrApi.h
      2  *  \brief This file include public definitions for the SCR module, comprising its API.
      3  *  \author Ronen Kalish
      4  *  \date 01-Dec-2004
      5  */
      6  /****************************************************************************
      7 **+-----------------------------------------------------------------------+**
      8 **|                                                                       |**
      9 **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
     10 **| All rights reserved.                                                  |**
     11 **|                                                                       |**
     12 **| Redistribution and use in source and binary forms, with or without    |**
     13 **| modification, are permitted provided that the following conditions    |**
     14 **| are met:                                                              |**
     15 **|                                                                       |**
     16 **|  * Redistributions of source code must retain the above copyright     |**
     17 **|    notice, this list of conditions and the following disclaimer.      |**
     18 **|  * Redistributions in binary form must reproduce the above copyright  |**
     19 **|    notice, this list of conditions and the following disclaimer in    |**
     20 **|    the documentation and/or other materials provided with the         |**
     21 **|    distribution.                                                      |**
     22 **|  * Neither the name Texas Instruments nor the names of its            |**
     23 **|    contributors may be used to endorse or promote products derived    |**
     24 **|    from this software without specific prior written permission.      |**
     25 **|                                                                       |**
     26 **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
     27 **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
     28 **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
     29 **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
     30 **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
     31 **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
     32 **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
     33 **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
     34 **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
     35 **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
     36 **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
     37 **|                                                                       |**
     38 **+-----------------------------------------------------------------------+**
     39 ****************************************************************************/
     40 
     41 #ifndef __SCRAPI_H__
     42 #define __SCRAPI_H__
     43 
     44 #include "osTIType.h"
     45 
     46 /*
     47  ***********************************************************************
     48  *	Constant definitions.
     49  ***********************************************************************
     50  */
     51 
     52 /*
     53  ***********************************************************************
     54  *	Enums.
     55  ***********************************************************************
     56  */
     57 /** \enum scr_modeId_e
     58  * \brief enumerates the different modes available in the system
     59  */
     60 typedef enum
     61 {
     62 	SCR_MID_NORMAL = 0,			/**< Normal mode	  */
     63 	SCR_MID_SG,					/**< Soft Gemini mode */
     64 	SCR_MID_NUM_OF_MODES
     65 } scr_modeId_e;
     66 
     67 /** \enum scr_groupId_e
     68  * \brief enumerates the different groups available in the system
     69  */
     70 typedef enum
     71 {
     72     SCR_GID_IDLE = 0,           /**< STA is idle */
     73     SCR_GID_INTER_SCAN,         /**< STA is disconnected, SME waits for next scan */
     74     SCR_GID_CONNECT,            /**< STA is trying to conenct */
     75     SCR_GID_CONNECTED,          /**< STA is connected */
     76     SCR_GID_ROAMING,            /**< STA is performing roaming to another AP */
     77     SCR_GID_NUM_OF_GROUPS
     78 } scr_groupId_e;
     79 
     80 
     81 /** \enum scr_clientId_e
     82  * \brief enumerates the different clients available in the system
     83  */
     84 typedef enum
     85 {
     86     SCR_CID_APP_SCAN = 0,    /* lowest priority */
     87     SCR_CID_DRIVER_FG_SCAN,
     88 	SCR_CID_CONT_SCAN,
     89     SCR_CID_EXC_MEASURE,
     90     SCR_CID_BASIC_MEASURE,
     91 	SCR_CID_CONNECT,
     92     SCR_CID_IMMED_SCAN,
     93 	SCR_CID_SWITCH_CHANNEL,		/* highest priority */
     94 	SCR_CID_NUM_OF_CLIENTS,
     95     SCR_CID_NO_CLIENT
     96 } scr_clientId_e;
     97 
     98 /** \enum scr_clientRequestStatus_e
     99  * \brief enumerates the status reports the client may receive
    100  */
    101 typedef enum
    102 {
    103 	SCR_CRS_RUN = 0,            /**< the client can use the channel */
    104     SCR_CRS_PEND,               /**< the channel is in use, The client may wait for it. */
    105     SCR_CRS_ABORT,              /**< client should abort it's use of the channel */
    106     SCR_CRS_FW_RESET            /**< Notification of recovery (client should elect what to do) */
    107 } scr_clientRequestStatus_e;
    108 
    109 /** \enum scr_pendReason_e
    110  * \brief enumerates the different reasons which can cause a client request to return with pend status.
    111  */
    112 typedef enum
    113 {
    114     SCR_PR_OTHER_CLIENT_ABORTING = 0,		/**<
    115 											 * The requesting client is waiting for a client with lower priority
    116 											 * to abort operation
    117 											 */
    118 	SCR_PR_OTHER_CLIENT_RUNNING,				/**<
    119 											 * The requesting client is waiting for a client that cannot be aborted
    120 											 * to finish using the channel.
    121 											 */
    122     SCR_PR_DIFFERENT_GROUP_RUNNING,         /**< The current SCR group is different than the client's group */
    123 	SCR_PR_NONE                             /**< The client is not pending */
    124 } scr_pendReason_e;
    125 
    126 /*
    127  ***********************************************************************
    128  *	Typedefs.
    129  ***********************************************************************
    130  */
    131 
    132  /** \typedef scr_abortReason_e
    133   * \brief Defines the function prototype a client should register as callback.
    134   */
    135 typedef void (*scr_callback_t)( TI_HANDLE hClient,
    136                                 scr_clientRequestStatus_e requestStatus,
    137                                 scr_pendReason_e pendReason );
    138 
    139 /*
    140  ***********************************************************************
    141  *	Structure definitions.
    142  ***********************************************************************
    143  */
    144 
    145 /*
    146  ***********************************************************************
    147  *	External data definitions.
    148  ***********************************************************************
    149  */
    150 
    151 /*
    152  ***********************************************************************
    153  *	External functions definitions
    154  ***********************************************************************
    155  */
    156 
    157 /**
    158  * \author Ronen Kalish\n
    159  * \date 01-Dec-2004\n
    160  * \brief Creates the SCR object
    161  *
    162  * Function Scope \e Public.\n
    163  * \param hOS - handle to the OS object.\n
    164  * \return a handle to the SCR object.\n
    165  */
    166 TI_HANDLE scr_create( TI_HANDLE hOS );
    167 
    168 /**
    169  * \author Ronen Kalish\n
    170  * \date 01-Dec-2004\n
    171  * \brief Finalizes the SCR object (freeing memory)
    172  *
    173  * Function Scope \e Public.\n
    174  * \param hScr - handle to the SCR object.\n
    175  */
    176 void scr_release( TI_HANDLE hScr );
    177 
    178 /**
    179  * \author Ronen Kalish\n
    180  * \date 01-Dec-2004\n
    181  * \brief Initializes the SCR object
    182  *
    183  * Function Scope \e Public.\n
    184  * \param hScr - handle to the SCR object.\n
    185  * \param hReport - handle to the report module.\n
    186  */
    187 void scr_init( TI_HANDLE hScr, TI_HANDLE hReport );
    188 
    189 /**
    190  * \author Ronen Kalish\n
    191  * \date 01-Dec-2004\n
    192  * \brief Registers the callback function to be used per client.
    193  *
    194  * Function Scope \e Public.\n
    195  * \param hScr - handle to the SCR object.\n
    196  * \param client - the client ID.\n
    197  * \param callbackFunc - the address of the callback function to use.\n
    198  * \param callbackObj - the handle of the object to pass to the callback function (the client object).\n
    199  */
    200 void scr_registerClientCB( TI_HANDLE hScr,
    201                            scr_clientId_e client,
    202                            scr_callback_t callbackFunc,
    203                            TI_HANDLE callbackObj );
    204 
    205 /**
    206  * \author Ronen Kalish\n
    207  * \date 01-Dec-2004\n
    208  * \brief Notifies the running process upon a firmware reset.
    209  *
    210  * Function Scope \e Public.\n
    211  * \param hScr - handle to the SCR object.\n
    212  */
    213 void scr_notifyFWReset( TI_HANDLE hScr );
    214 
    215 /**
    216  * \author Ronen Kalish\n
    217  * \date 27-April-2005\n
    218  * \brief Changes the current SCR group.\n
    219  *
    220  * Function Scope \e Public.\n
    221  * \param hScr - handle to the SCR object.\n
    222  * \param newGroup - the new group to use.\n
    223  */
    224 void scr_setGroup( TI_HANDLE hScr, scr_groupId_e newGroup );
    225 
    226 /**
    227  * \author Yuval Adler\n
    228  * \date 23-1l-2005\n
    229  * \brief Changes the current SCR mode. This function is called from Soft Gemini module only \n
    230  *	      when changing mode - clients that are not valid in the new group/mode are aborted	 \n
    231  *
    232  * Function Scope \e Public.\n
    233  * \param hScr - handle to the SCR object.\n
    234  * \param newMode - the new mode to use.\n
    235  */
    236 void scr_setMode( TI_HANDLE hScr, scr_modeId_e newMode );
    237 
    238 /**
    239  * \author Ronen Kalish\n
    240  * \date 01-Dec-2004\n
    241  * \brief Request the channel use by a client
    242  *
    243  * Function Scope \e Public.\n
    244  * \param hScr - handle to the SCR object.\n
    245  * \param client - the client ID requesting the channel.\n
    246  * \param pPendReason - the reason for a pend reply.\n
    247  * \return The request status.\n
    248  * \retval SCR_CRS_REJECT the channel cannot be allocated to this client.
    249  * \retval SCR_CRS_PEND the channel is currently busy, and this client had been placed on the waiting list.
    250  * \retval SCR_CRS_RUN the channel is allocated to this client.
    251  */
    252 scr_clientRequestStatus_e scr_clientRequest( TI_HANDLE hScr, scr_clientId_e client, scr_pendReason_e* pPendReason );
    253 
    254 /**
    255  * \author Ronen Kalish\n
    256  * \date 01-Dec-2004\n
    257  * \brief Notifies the SCR that the client doe not require the channel any longer
    258  *
    259  * This function can be called both by clients that are in possession of the channel, and by
    260  * clients that are pending to use the channel.\n
    261  * Function Scope \e Public.\n
    262  * \param hScr - handle to the SCR object.\n
    263  * \param client - the client releasing the channel.\n
    264  * \return OK if successful, NOK otherwise.\n
    265  */
    266 void scr_clientComplete( TI_HANDLE hScr, scr_clientId_e client );
    267 
    268 #endif /* __SCRAPI_H__ */
    269