/*
* MacServices.c
*
* Copyright(c) 1998 - 2009 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 MacServices.c
* \brief This file include public definitions for the scan SRV module, comprising its API.
* \author Yuval Adler
* \date 6-Oct-2005
*/
#define __FILE_ID__ FILE_ID_109
#include "report.h"
#include "ScanSrv.h"
#include "MeasurementSrv.h"
#include "MacServices.h"
#include "PowerSrv_API.h"
/****************************************************************************************
* MacServices_create *
*****************************************************************************************
DESCRIPTION: Creates MacServices module
INPUT: hOS - handle to the OS object.
OUTPUT:
RETURN: handle to MacServices Object, NULL on failure .
****************************************************************************************/
TI_HANDLE MacServices_create( TI_HANDLE hOS)
{
MacServices_t *pMacServices = (MacServices_t*)os_memoryAlloc( hOS, sizeof(MacServices_t) );
if ( NULL == pMacServices )
{
WLAN_OS_REPORT( ("ERROR: Failed to create Mac SRV module") );
return NULL;
}
/* nullify all handles, so that only handles in existence will be released */
pMacServices->hScanSRV = NULL;
pMacServices->hPowerSrv = NULL;
/* create the scanSRV handle */
pMacServices->hScanSRV = MacServices_scanSRV_create(hOS);
if ( NULL == pMacServices->hScanSRV )
{
MacServices_destroy( pMacServices );
return NULL;
}
/* create the measurment handle */
pMacServices->hMeasurementSRV = MacServices_measurementSRV_create( hOS );
if ( NULL == pMacServices->hMeasurementSRV )
{
MacServices_destroy(pMacServices);
return NULL;
}
pMacServices->hPowerSrv = powerSrv_create(hOS);
if (NULL == pMacServices->hPowerSrv )
{
MacServices_destroy(pMacServices);
return NULL;
}
/* store OS handle */
pMacServices->hOS = hOS;
return pMacServices;
}
/****************************************************************************************
* MacServices_destroy *
*****************************************************************************************
DESCRIPTION: destroys MacServices module
INPUT: hMacServices - handle to the Mac Services object.
OUTPUT:
RETURN:
****************************************************************************************/
void MacServices_destroy( TI_HANDLE hMacServices )
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
/* destroy all SRV modules */
if ( NULL != pMacServices->hScanSRV )
{
MacServices_scanSRV_destroy( pMacServices->hScanSRV );
}
if ( NULL != pMacServices->hMeasurementSRV )
{
MacServices_measurementSRV_destroy( pMacServices->hMeasurementSRV );
}
if(pMacServices->hPowerSrv)
powerSrv_destroy(pMacServices->hPowerSrv);
/* free the Mac services allocated context */
os_memoryFree( pMacServices->hOS, (TI_HANDLE)pMacServices , sizeof(MacServices_t) );
}
/****************************************************************************************
* MacServices_init *
*****************************************************************************************
DESCRIPTION: Initializes the MacServices module
INPUT: hMacServices - handle to the Mac Services object.\n
hReport - handle to the report object.\n
hHalCtrl - handle to the HAL ctrl object.\n
OUTPUT:
RETURN:
****************************************************************************************/
void MacServices_init (TI_HANDLE hMacServices,
TI_HANDLE hReport,
TI_HANDLE hTWD,
TI_HANDLE hCmdBld,
TI_HANDLE hEventMbox,
TI_HANDLE hTimer)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
MacServices_scanSRV_init (hMacServices, hReport, hTWD, hTimer, hEventMbox, hCmdBld);
MacServices_measurementSRV_init (pMacServices->hMeasurementSRV,
hReport,
hCmdBld,
hEventMbox,
pMacServices->hPowerSrv,
hTimer);
if (powerSrv_init (pMacServices->hPowerSrv,
hReport,
hEventMbox,
hCmdBld,
hTimer) != TI_OK)
{
WLAN_OS_REPORT(("\n.....PowerSRV_init configuration failure \n"));
/*return TI_NOK;*/
}
}
/****************************************************************************************
* MacServices_config *
*****************************************************************************************
DESCRIPTION: config the MacServices moduleand sub modules
INPUT: hMacServices - handle to the Mac Services object.\n
pInitParams - pointer to the init params
OUTPUT:
RETURN:
****************************************************************************************/
void MacServices_config( TI_HANDLE hMacServices, TTwdInitParams *pInitParams)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
if (powerSrv_config(pMacServices->hPowerSrv,&pInitParams->tPowerSrv) != TI_OK)
{
WLAN_OS_REPORT(("\n.....PowerSRV_config failure \n"));
}
MacServices_scanSrv_config (pMacServices, &pInitParams->tScanSrv);
}
/****************************************************************************************
* MacServices_restart *
*****************************************************************************************
DESCRIPTION: restart the MacServices moduleand sub modules upon recovery
INPUT: hMacServices - handle to the Mac Services object.\n
OUTPUT:
RETURN:
****************************************************************************************/
void MacServices_restart (TI_HANDLE hMacServices)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
scanSRV_restart (pMacServices->hScanSRV);
measurementSRV_restart (pMacServices->hMeasurementSRV);
powerSrv_restart (pMacServices->hPowerSrv);
}
/****************************************************************************************
* MacServices_registerFailureEventCB *
*****************************************************************************************
DESCRIPTION: register the centeral error function from the health monitor to the MacService's sub modules
INPUT: hMacServices - handle to the Mac Services object.
failureEventCB - pointer ro the call back
hFailureEventObj -handle of the Callback Object
OUTPUT:
RETURN:
****************************************************************************************/
void MacServices_registerFailureEventCB (TI_HANDLE hMacServices,
void * failureEventCB,
TI_HANDLE hFailureEventObj)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
powerSrvRegisterFailureEventCB (pMacServices->hPowerSrv,
failureEventCB,
hFailureEventObj);
measurementSRVRegisterFailureEventCB (pMacServices->hMeasurementSRV,
failureEventCB,
hFailureEventObj);
scanSRV_registerFailureEventCB (pMacServices->hScanSRV,
failureEventCB,
hFailureEventObj);
}
/****************************************************************************************
* MacServices_powerSrv_SetPsMode *
****************************************************************************************
DESCRIPTION: This function is a wrapper for the power server's powerSrv_SetPsMode function
INPUT: - hMacServices - handle to the Mac services object.
- psMode - Power save/Active request
- sendNullDataOnExit -
- powerSaveCBObject - handle to the Callback function module.
- powerSaveCompleteCB - Callback function - for success/faild notification.
OUTPUT:
RETURN: TI_STATUS - TI_OK / PENDING / TI_NOK.
****************************************************************************************/
TI_STATUS MacServices_powerSrv_SetPsMode (TI_HANDLE hMacServices,
E80211PsMode psMode,
TI_BOOL sendNullDataOnExit,
void * powerSaveCompleteCBObject,
TPowerSaveCompleteCb powerSaveCompleteCB,
TPowerSaveResponseCb powerSavecmdResponseCB)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
return powerSrv_SetPsMode (pMacServices->hPowerSrv,
psMode,
sendNullDataOnExit,
powerSaveCompleteCBObject,
powerSaveCompleteCB,
powerSavecmdResponseCB);
}
/****************************************************************************************
* MacServices_powerSrv_ReservePS *
****************************************************************************************
DESCRIPTION: This function is a wrapper for the power server's powerSrv_ReservePS function
INPUT: - hMacServices - handle to the Mac services object.
- psMode - Power save/Active request
- sendNullDataOnExit -
- powerSaveCBObject - handle to the Callback function module.
- powerSaveCompleteCB - Callback function - for success/faild notification.
OUTPUT:
RETURN: TI_STATUS - TI_OK / PENDING / TI_NOK.
****************************************************************************************/
TI_STATUS MacServices_powerSrv_ReservePS( TI_HANDLE hMacServices,
E80211PsMode psMode,
TI_BOOL sendNullDataOnExit,
void * powerSaveCBObject,
TPowerSaveCompleteCb powerSaveCompleteCB)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
return powerSrv_ReservePS(pMacServices->hPowerSrv,psMode,sendNullDataOnExit,powerSaveCBObject,powerSaveCompleteCB);
}
/****************************************************************************************
* MacServices_powerSrv_ReleasePS *
****************************************************************************************
DESCRIPTION: This function is a wrapper for the power server's powerSrv_ReleasePS function
INPUT: - hPowerSrv - handle to the PowerSrv object.
- sendNullDataOnExit -
- powerSaveCBObject - handle to the Callback function module.
- powerSaveCompleteCB - Callback function - for success/faild notification.
OUTPUT:
RETURN: TI_STATUS - TI_OK / PENDING / TI_NOK.
****************************************************************************************/
TI_STATUS MacServices_powerSrv_ReleasePS( TI_HANDLE hMacServices,
TI_BOOL sendNullDataOnExit,
void * powerSaveCBObject,
TPowerSaveCompleteCb powerSaveCompleteCB)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
return powerSrv_ReleasePS(pMacServices->hPowerSrv,sendNullDataOnExit,powerSaveCBObject,powerSaveCompleteCB);
}
/****************************************************************************************
* MacServices_powerSrv_getPsStatus *
*****************************************************************************************
DESCRIPTION: This function is a wrapper for the power server's powerSrv_getPsStatus function
INPUT: - hPowerSrv - handle to the PowerSrv object.
OUTPUT:
RETURN: TI_BOOL - true if the SM is in PS state - false otherwise
****************************************************************************************/
TI_BOOL MacServices_powerSrv_getPsStatus(TI_HANDLE hMacServices)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
return powerSrv_getPsStatus( pMacServices->hPowerSrv);
}
/****************************************************************************************
* MacServices_powerSrv_SetRateModulation *
*****************************************************************************************
DESCRIPTION: This function is a wrapper for the power server's powerSrv_SetRateModulation function
INPUT: - hPowerSrv - handle to the PowerSrv object.
- dot11mode_e - The current radio mode (A or G)
OUTPUT:
RETURN: TI_BOOL - true if the SM is in PS state - false otherwise
****************************************************************************************/
void MacServices_powerSrv_SetRateModulation(TI_HANDLE hMacServices, TI_UINT16 rate)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
powerSrv_SetRateModulation( pMacServices->hPowerSrv, rate);
}
TI_UINT32 MacServices_powerSrv_GetRateModulation(TI_HANDLE hMacServices)
{
MacServices_t *pMacServices = (MacServices_t*)hMacServices;
return powerSrv_GetRateModulation( pMacServices->hPowerSrv);
}