Home | History | Annotate | Download | only in Export_Inc
      1 /*
      2  * MacServices_api.h
      3  *
      4  * Copyright(c) 1998 - 2009 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 MacServicesApi.h
     35  *  \brief This file include public definitions for the MacServices module, comprising its API.
     36  *  \author Yuval Adler
     37  *  \date 6-Oct-2005
     38  */
     39 
     40 #ifndef __MACSERVICESAPI_H__
     41 #define __MACSERVICESAPI_H__
     42 
     43 #include "osApi.h"
     44 
     45 /*
     46  ***********************************************************************
     47  *	Constant definitions.
     48  ***********************************************************************
     49  */
     50 
     51 /*
     52  ***********************************************************************
     53  *	Enums.
     54  ***********************************************************************
     55  */
     56 
     57 /*
     58  ***********************************************************************
     59  *	Typedefs.
     60  ***********************************************************************
     61  */
     62 
     63 
     64 
     65 /*
     66  ***********************************************************************
     67  *	Structure definitions.
     68  ***********************************************************************
     69  */
     70 
     71 /*
     72  ***********************************************************************
     73  *	External data definitions.
     74  ***********************************************************************
     75  */
     76 
     77 /*
     78  ***********************************************************************
     79  *	External functions definitions
     80  ***********************************************************************
     81  */
     82 /**
     83  * \author Yuval Adler\n
     84  * \date 6-Oct-2004\n
     85  * \brief Creates MacServices module
     86  *
     87  * Function Scope \e Public.\n
     88  * \param hOS - handle to the OS object.\n
     89  */
     90 TI_HANDLE MacServices_create( TI_HANDLE hOS );
     91 
     92 /**
     93  * \author Yuval Adler\n
     94  * \date 6-Oct-2004\n
     95  * \brief Destroys MacServices module
     96  *
     97  * Function Scope \e Public.\n
     98  * \param hMacServices - handle to the MacServices object.\n
     99  */
    100 void MacServices_destroy( TI_HANDLE hMacServices );
    101 
    102 /**
    103  * \author Yuval Adler\n
    104  * \date  6-Oct-2004\n
    105  * \brief Initializes the MacServices module
    106  *
    107  * Function Scope \e Public.\n
    108  * \param hMacServices - handle to the Mac Services object.\n
    109  * \param hReport - handle to the report object.\n
    110  * \param hTWD - handle to the HAL ctrl object.\n
    111  * \param hCmdBld - handle to the HAL ctrl object.\n
    112  * \param hEventMbpx - handle to the HAL ctrl object.\n
    113  */
    114 void MacServices_init (TI_HANDLE hMacServices,
    115                        TI_HANDLE hReport,
    116                        TI_HANDLE hTWD,
    117                        TI_HANDLE hCmdBld,
    118                        TI_HANDLE hEventMbox,
    119                        TI_HANDLE hTimer);
    120 void MacServices_config (TI_HANDLE hMacServices, TTwdInitParams *pInitParams);
    121 void MacServices_restart (TI_HANDLE hMacServices);
    122 
    123 void MacServices_registerFailureEventCB (TI_HANDLE hMacServices, void * failureEventCB, TI_HANDLE hFailureEventObj);
    124 
    125 
    126 /***********************************************************************
    127  *	Scan SRV API functions
    128  ***********************************************************************/
    129 
    130 
    131 /**
    132  * \author Ronen Kalish\n
    133  * \date 29-Dec-2004\n
    134  * \brief Registers a complete callback for scan complete notifications.
    135  *
    136  * Function Scope \e Public.\n
    137  * \param hMacServices - handle to the MacServices object.\n
    138  * \param scanCompleteCB - the complete callback function.\n
    139  * \param hScanCompleteObj - handle to the object passed to the scan complete callback function.\n
    140  */
    141 void MacServices_scanSRV_registerScanCompleteCB( TI_HANDLE hMacServices,
    142                                      TScanSrvCompleteCb scanCompleteCB, TI_HANDLE hScanCompleteObj );
    143 
    144 
    145 
    146 /**
    147  * \author Ronen Kalish\n
    148  * \date 29-Dec-2004\n
    149  * \brief Performs a scan
    150  *
    151  * Function Scope \e Public.\n
    152  * \param hMacServices - handle to the MacServices object.\n
    153  * \param scanParams - the scan specific parameters.\n
    154  * \param eScanTag - tag used for result and scan complete tracking
    155  * \param bHighPriority - whether to perform a high priority (overlaps DTIM) scan.\n
    156  * \param bDriverMode - whether to try to enter driver mode (with PS on) before issuing the scan command.\n
    157  * \param bScanOnDriverModeError - whether to proceed with the scan if requested to enter driver mode and failed.\n
    158  * \param bSendNullData - whether to send Null data when exiting driver mode on scan complete.\n
    159  * \param psRequest - Parameter sent to PowerSaveServer on PS request to indicate PS on or "keep current"
    160  * \param commandResponseFunc - CB function which called after downloading the command. \n
    161  * \param commandResponseObj -  The CB function Obj (Notice : last 2 params are NULL in Legacy run). \n
    162   * \return TI_OK if successful (various, TBD codes if not).\n
    163  */
    164 TI_STATUS MacServices_scanSRV_scan( TI_HANDLE hMacServices, TScanParams *scanParams, EScanResultTag eScanTag,
    165                                     TI_BOOL bHighPriority, TI_BOOL bDriverMode, TI_BOOL bScanOnDriverModeError,
    166 						E80211PsMode psRequest, TI_BOOL bSendNullData,
    167 						TCmdResponseCb commandResponseFunc, TI_HANDLE commandResponseObj );
    168 
    169 /**
    170  * \author Ronen Kalish\n
    171  * \date 29-Dec-2004\n
    172  * \brief Stops a scan in progress
    173  *
    174  * Function Scope \e Public.\n
    175  * \param hMacServices - handle to the MacServices object.\n
    176  * \param eScanTag - scan tag, used for scan complete and result tracking
    177  * \param bSendNullData - indicates whether to send Null data when exiting driver mode.\n
    178  * \param commandResponseFunc - CB function which called after downloading the command. \n
    179  * \param commandResponseObj -  The CB function Obj (Notice : last 2 params are NULL in Legacy run). \n
    180  * \return TI_OK if successful (various, TBD codes if not).\n
    181  */
    182 TI_STATUS MacServices_scanSRV_stopScan( TI_HANDLE hMacServices, EScanResultTag eScanTag, TI_BOOL bSendNullData,
    183                                         TCmdResponseCb commandResponseFunc, TI_HANDLE commandResponseObj );
    184 
    185 /**
    186  * \author Ronen Kalish\n
    187  * \date 17-Jan-2005\n
    188  * \brief Notifies the scan SRV of a FW reset (that had originally been reported by a different module).\n
    189  *
    190  * Function Scope \e Public.\n
    191  * \param hMacServices - handle to the MacServices object.\n
    192  * \return TI_OK if successful (various, TBD codes if not).\n
    193  */
    194 TI_STATUS MacServices_scanSRV_stopOnFWReset( TI_HANDLE hMacServices );
    195 
    196 /**
    197  * \author Ronen Kalish\n
    198  * \date 29-Dec-2004\n
    199  * \brief callback function used by the power manager to notify driver mode result
    200  *
    201  * Function Scope \e Public.\n
    202  * \param hScanSRV - handle to the scan SRV object.\n
    203  * \param psStatus - the power save request status.\n
    204  */
    205 void MacServices_scanSRV_powerSaveCB( TI_HANDLE hScanSRV, TI_UINT8 PSMode,TI_UINT8 psStatus );
    206 
    207 /**
    208  * \author Ronen Kalish\n
    209  * \date 29-Dec-2004\n
    210  * \brief Callback function used by the HAL ctrl to notify scan complete
    211  *
    212  * Function Scope \e Public.\n
    213  * \param hScanSRV - handle to the scan SRV object.\n
    214  * \param str - pointer to scan result buffer (holding SPS status for SPS scan only!).\n
    215  * \param strLen - scan result buffer length (should ALWAYS be 2, even for non SPS scans).\n
    216  */
    217 void MacServices_scanSRV_scanCompleteCB( TI_HANDLE hScanSRV, char* str, TI_UINT32 strLen );
    218 
    219 /**
    220  * \author Ronen Kalish\n
    221  * \date 29-Dec-2004\n
    222  * \brief called when a scan timer expires. Completes the scan and starts a recovery process.
    223  *
    224  * Function Scope \e Public.\n
    225  * \param hScanSRV - handle to the scan SRV object.\n
    226  */
    227 void MacServices_scanSRV_scanTimerExpired (TI_HANDLE hScanSRV, TI_BOOL bTwdInitOccured);
    228 
    229 void MacServices_scanSrv_UpdateDtimTbtt (TI_HANDLE hMacServices,
    230                                          TI_UINT8  uDtimPeriod,
    231                                          TI_UINT16 uBeaconInterval);
    232 
    233 #ifdef TI_DBG
    234 /**
    235  * \author Shirit Brook\n
    236  * \date God knows when...\n
    237  * \brief Prints Scan Server SM status.\n
    238  *
    239  * Function Scope \e Public.\n
    240  * \param hMacServices - handle to the Mac Services object.\n
    241  */
    242 void MacServices_scanSrv_printDebugStatus(TI_HANDLE hMacServices);
    243 #endif
    244 
    245 /*Power server API*/
    246 
    247 
    248 /**
    249   * \author Assaf Azulay
    250  * \date 24-Oct-2005\n
    251  * \brief request PS by User
    252  *
    253  * Function Scope \e Public.\n
    254  * Parameters:\n
    255  * 1) hPowerSrv 						- handle to the PowerSrv object.\n
    256  * 2) psMode							- Power save/Active request.\n
    257  * 3) sendNullDataOnExit				- \n
    258  * 4) powerSaveCompleteCBObject		- handle to the Callback functin module.\n
    259  * 5) powerSaveCompleteCB				- Calback function - for success/faild notification.\n
    260  * 6) powerSavecmdResponseCB			- Calback function - for GWSI success/faild notification.\n
    261  * Return Value: TI_STATUS - TI_OK / PENDING / TI_NOK.\n
    262  * \b Description:\n
    263  * This function is a user mode request from the Power Save Server./n
    264  * it will create a Request from typ "USER_REQUEST" and will try to perform the user request for PS/Active./n
    265  * this will be done in respect of priority to Driver request./n
    266  */
    267 TI_STATUS MacServices_powerSrv_SetPsMode(TI_HANDLE 	                hMacServices,
    268                                 		 E80211PsMode	            psMode,
    269  									     TI_BOOL  						sendNullDataOnExit,
    270  						        		 void * 					powerSaveCompleteCBObject,
    271  						        		 TPowerSaveCompleteCb  		powerSaveCompleteCB,
    272  						        		 TPowerSaveResponseCb	    powerSavecmdResponseCB);
    273 
    274 
    275 /**
    276   * \author Assaf Azulay
    277  * \date 24-Oct-2005\n
    278  * \brief SW configure, use to override the current PowerMode (what ever it will be) to
    279  *        active/PS combined with awake/power-down. use for temporary change the system policy.
    280  *
    281  * Function Scope \e Public.\n
    282  * Parameters:\n
    283  * 1) TI_HANDLE - handle to the powerSrv object.\n
    284  * 2) powerSrv_RequestFor_802_11_PS_e - the driver mode obliged to be in 802.11 PS or not change.\n
    285  * 3) PowerCtrl_PowerLevel_e - the desired driver power level (allowed: AWAKE or POWER DOWN).\n
    286  * 4) TI_HANDLE theObjectHandle - the handle the object that need the PS success/fail notification.\n
    287  * 5) ps802_11_NotificationCB_t - the callback function.\n
    288  * 6) char* - the clinet name that ask for driver mode.\n
    289  * Return Value: TI_STATUS - if success (already in power save) then TI_OK,\n
    290  *                           if pend (wait to ACK form AP for the null data frame) then PENDING\n
    291  *                           if PS isn't enabled then POWER_SAVE_802_11_NOT_ALLOWED\n
    292  *                           else TI_NOK.\n
    293  * \b Description:\n
    294  * enter in to configuration of the driver that in higher priority from the user.\n
    295  * the configuration is:\n
    296  *  - to enter to802.11 PS or not (if not this isn't a request to get out from 802.11 PS).\n
    297  *  - to change the HW power level to awake or power-down if not already there.
    298  *    this is a must request.\n
    299 */
    300 TI_STATUS MacServices_powerSrv_ReservePS(	TI_HANDLE 	                hMacServices,
    301                                             E80211PsMode 	            psMode,
    302                                             TI_BOOL  						sendNullDataOnExit,
    303                                             void * 						powerSaveCBObject,
    304                                             TPowerSaveCompleteCb 		powerSaveCompleteCB);
    305 
    306 
    307 /**
    308  * \author Assaf Azulay
    309  * \date 24-Oct-2005\n
    310  * \brief end the temporary change of system policy, and returns to the user system policy.
    311  *
    312  * Function Scope \e Public.\n
    313  * Parameters:\n
    314  * 1) TI_HANDLE - handle to the powerSrv object.\n
    315  * 2) char* - the clinet name that ask for driver mode.\n
    316  * Return Value: TI_STATUS - TI_OK on success else TI_NOK.\n
    317  * \b Description:\n
    318  * enter in to configuration of the driver that in higher priority from the user.\n
    319  * the configuration is:\n
    320  * end the user mode configuration (driver mode priority) and returns the user configuration
    321  * (user mode priority).
    322 */
    323 TI_STATUS MacServices_powerSrv_ReleasePS( 	TI_HANDLE 	hMacServices,
    324 									TI_BOOL  						sendNullDataOnExit,
    325  						 			void *  						powerSaveCBObject,
    326  									TPowerSaveCompleteCb  			powerSaveCompleteCB);
    327 
    328 
    329 /**
    330  * \author Assaf Azulay
    331  * \date 24-Oct-2005\n
    332  * \brief reflects the actual state of the state machine
    333  *
    334  * Function Scope \e Public.\n
    335  * Parameters:\n
    336  * 1) TI_HANDLE - handle to the powerSrv object.\n
    337  * Return Value:\n
    338  * TI_BOOL - thre is in PS false otherwise.\n
    339 */
    340 TI_BOOL MacServices_powerSrv_getPsStatus(TI_HANDLE hMacServices);
    341 
    342 
    343 /**
    344  * \author Assaf Azulay
    345  * \date 24-Oct-2005\n
    346  * \sets the rate as got from user else sets default value.\n
    347  *
    348  * Function Scope \e Public.\n
    349  * Parameters:\n
    350  * 1) TI_HANDLE 	- handle to the powerSrv object.\n
    351  * 2) TI_UINT16		- desierd rate .\n
    352  * Return Value:\n
    353  * void.\n
    354 */
    355 void MacServices_powerSrv_SetRateModulation(TI_HANDLE hMacServices, TI_UINT16  rate);
    356 /**
    357  * \Return the alrweady seted rate.\n
    358  *
    359  * Function Scope \e Public.\n
    360  * Parameters:\n
    361  * TI_HANDLE 	- handle to the powerSrv object.\n
    362  * Return Value: TI_UINT16		- desierd rate .\n
    363  * void.\n
    364 */
    365 TI_UINT32 MacServices_powerSrv_GetRateModulation(TI_HANDLE hMacServices);
    366 
    367 
    368 
    369 
    370 /***********************************************************************
    371  *	Measurement SRV API functions
    372  ***********************************************************************/
    373 
    374 /**
    375  * \author Ronen Kalish\n
    376  * \date 09-November-2005\n
    377  * \brief Starts a measurement operation.\n
    378  *
    379  * Function Scope \e Public.\n
    380  * \param hMacServices - handle to the MacServices object.\n
    381  * \param pMsrRequest - a structure containing measurement parameters.\n
    382  * \param timeToRequestExpiryMs - the time (in milliseconds) the measurement SRV has to start the request.\n
    383  * \param cmdResponseCBFunc - callback function to used for command response.\n
    384  * \param cmdResponseCBObj - handle to pass to command response CB.\n
    385  * \param cmdCompleteCBFunc - callback function to be used for command complete.\n
    386  * \param cmdCompleteCBObj - handle to pass to command complete CB.\n
    387  * \return TI_OK if successful (various, TBD codes if not).\n
    388  */
    389 TI_STATUS MacServices_measurementSRV_startMeasurement( TI_HANDLE hMacServices,
    390                                                        TMeasurementRequest* pMsrRequest,
    391 													   TI_UINT32 timeToRequestExpiryMs,
    392                                                        TCmdResponseCb cmdResponseCBFunc,
    393                                                        TI_HANDLE cmdResponseCBObj,
    394                                                        TMeasurementSrvCompleteCb cmdCompleteCBFunc,
    395                                                        TI_HANDLE cmdCompleteCBObj );
    396 
    397 /**
    398  * \author Ronen Kalish\n
    399  * \date 09-November-2005\n
    400  * \brief Stops a measurement operation in progress.\n
    401  *
    402  * Function Scope \e Public.\n
    403  * \param hMacServices - handle to the MacServices object.\n
    404  * \param bSendNullData - whether to send NULL data when exiting driver mode.\n
    405  * \param cmdResponseCBFunc - callback function to used for command response.\n
    406  * \param cmdResponseCBObj - handle to pass to command response CB.\n
    407  * \return TI_OK if successful (various, TBD codes if not).\n
    408  */
    409 TI_STATUS MacServices_measurementSRV_stopMeasurement( TI_HANDLE hMacServices,
    410 													  TI_BOOL bSendNullData,
    411                                                       TCmdResponseCb cmdResponseCBFunc,
    412                                                       TI_HANDLE cmdResponseCBObj );
    413 
    414 /**
    415  * \author Ronen Kalish\n
    416  * \date 09-November-2005\n
    417  * \brief Notifies the measurement SRV of a FW reset (recovery).\n
    418  *
    419  * Function Scope \e Public.\n
    420  * \param hMacServices - handle to the MacServices object.\n
    421  */
    422 void MacServices_measurementSRV_FWReset( TI_HANDLE hMacServices );
    423 
    424 /**
    425  * \author Ronen Kalish\n
    426  * \date 09-November-2005\n
    427  * \brief callback function used by the power manager to notify driver mode result
    428  *
    429  * Function Scope \e Public.\n
    430  * \param hMeasurementSRV - handle to the measurement SRV object.\n
    431  * \param PSMode - the power save mode the STA is currently in.\n
    432  * \param psStatus - the power save request status.\n
    433  */
    434 void MacServices_measurementSRV_powerSaveCB( TI_HANDLE hMeasurementSRV, TI_UINT8 PSMode,TI_UINT8 psStatus );
    435 
    436 /**
    437  * \author Ronen Kalish\n
    438  * \date 14-November-2005\n
    439  * \brief callback function used by the HAL for measure start event (sent when the FW
    440  * has started measurement operation, i.e. switched channel and changed RX filters).\n
    441  *
    442  * Function Scope \e Public.\n
    443  * \param hMeasurementSRV - handle to the measurement SRV object.\n
    444  */
    445 void MacServices_measurementSRV_measureStartCB( TI_HANDLE hMeasurementSRV );
    446 
    447 /**
    448  * \author Ronen Kalish\n
    449  * \date 14-November-2005\n
    450  * \brief callback function used by the HAL for measure stop event (sent when the FW
    451  * has finished measurement operation, i.e. switched channel to serving channel and changed back RX filters).\n
    452  *
    453  * Function Scope \e Public.\n
    454  * \param hMeasurementSRV - handle to the measurement SRV object.\n
    455  */
    456 void MacServices_measurementSRV_measureCompleteCB( TI_HANDLE hMeasurementSRV );
    457 
    458 /**
    459  * \author Ronen Kalish\n
    460  * \date 14-November-2005\n
    461  * \brief callback function used by the HAL for AP discovery stop event (sent when the FW
    462  * has finished AP discovery operation).\n
    463  *
    464  * Function Scope \e Public.\n
    465  * \param hMeasurementSRV - handle to the measurement SRV object.\n
    466  */
    467 void MacServices_measurementSRV_apDiscoveryCompleteCB( TI_HANDLE hMeasurementSRV );
    468 
    469 /**
    470  * \author Ronen Kalish\n
    471  * \date 16-November-2005\n
    472  * \brief Callback for channel load get param call.\n
    473  *
    474  * Function Scope \e Public.\n
    475  * \param hMeasurementSRV - handle to the measurement SRV object.\n
    476  * \param status - the get_param call status.\n
    477  * \param CB_buf - pointer to the results buffer (already on the measurement SRV object)
    478  */
    479 void MacServices_measurementSRV_channelLoadParamCB( TI_HANDLE hMeasurementSRV, TI_STATUS status, TI_UINT8* CB_buf );
    480 
    481 /**
    482  * \date 03-January-2005\n
    483  * \brief Dummy callback for channel load get param call. Used to clear the channel load tracker.\n
    484  *
    485  * Function Scope \e Public.\n
    486  * \param hMeasurementSRV - handle to the measurement SRV object.\n
    487  * \param status - the get_param call status.\n
    488  * \param CB_buf - pointer to the results buffer (already on the measurement SRV object)
    489  */
    490 void MacServices_measurementSRV_dummyChannelLoadParamCB( TI_HANDLE hMeasurementSRV, TI_STATUS status, TI_UINT8* CB_buf );
    491 
    492 /**
    493  * \author Ronen Kalish\n
    494  * \date 16-November-2005\n
    495  * \brief Callback for noise histogram get param call.\n
    496  *
    497  * Function Scope \e Public.\n
    498  * \param hMeasurementSRV - handle to the measurement SRV object.\n
    499  * \param status - the get_param call status.\n
    500  * \param CB_buf - pointer to the results buffer (already on the measurement SRV object)
    501  */
    502 void MacServices_measurementSRV_noiseHistCallBack(TI_HANDLE hMeasurementSRV, TI_STATUS status, TI_UINT8* CB_buf);
    503 
    504 /**
    505  * \author Ronen Kalish\n
    506  * \date 14-November-2005\n
    507  * \brief called when a measurement FW guard timer expires.
    508  *
    509  * Function Scope \e Public.\n
    510  * \param hMeasuremntSRV - handle to the measurement SRV object.\n
    511  */
    512 void MacServices_measurementSRV_startStopTimerExpired (TI_HANDLE hMeasurementSRV, TI_BOOL bTwdInitOccured);
    513 
    514 /**
    515  * \author Ronen Kalish\n
    516  * \date 15-November-2005\n
    517  * \brief called when a measurement type timer expires.\n
    518  *
    519  * Function Scope \e Public.\n
    520  * \param hMeasuremntSRV - handle to the measurement SRV object.\n
    521  */
    522 void MacServices_measurementSRV_requestTimerExpired (TI_HANDLE hMeasurementSRV, TI_BOOL bTwdInitOccured);
    523 
    524 #endif /* __MACSERVICESAPI_H__ */
    525