FreeCalypso > hg > fc-magnetite
diff src/ui3/mfw/mfw_BtipsBmg.c @ 420:e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Jan 2018 03:09:00 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui3/mfw/mfw_BtipsBmg.c Sun Jan 21 03:09:00 2018 +0000 @@ -0,0 +1,1203 @@ +/* ========================================================= +* Texas Instruments OMAP(TM) Platform Software +* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. +* +* Use of this software is controlled by the terms and conditions found +* in the license agreement under which this software has been supplied. +* ========================================================== */ +/* + $Project name: Basic Bluetooth MMI + $Project code: + $Module: Bluetooth BMG MFW + $File: Mfw_Btips.c + $Revision: 1.0 + $Author: Texas Instruments + $Date: 26/06/07 + +******************************************************************************** + + Description: + + This module provides the BTIPS BMG APPlication functionality. + +******************************************************************************** + $History: Mfw_Btips.c + + 26/06/07 Sasken original version + + $End + +*******************************************************************************/ + + + + +/******************************************************************************* + + Include files + +*******************************************************************************/ + +#define ENTITY_MFW +/* includes */ + +#include <string.h> +#ifdef FF_MMI_BTIPS_APP + +/* BTIPS Includes */ +#include "me.h" +#include "osapi.h" +#include "btl_common.h" +#include "bthal_btdrv.h" +#include "bthal_pm.h" +#include "bttypes.h" +#include "goep.h" +#include "bpp.h" +#include "Debug.h" + +/* BTL includes */ +#include "btl_bmg.h" + +#endif +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "pei.h" +#include "custom.h" +#include "gsm.h" +#include "prim.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif + +#include "mfw_mfw.h" +#include "mfw_win.h" +#include "mfw_icn.h" /* included for mfw_mnu.h */ +#include "mfw_mnu.h" +#include "mfw_tim.h" +#include "mfw_kbd.h" +#include "mfw_sat.h" /* included for MmiDummy.h, included for MmiMenu.h */ + +#include "Mfw_Btips.h" +#include "Mfw_BtipsBmg.h" + + +#ifdef FF_MMI_BTIPS_APP + +#define BTL_BMG_MAX_PIN_LEN 16 +#define BTL_BMG_SEARCH_ALL 0 +#define BTL_BMG_SEARCH_AUDIO_MAJOR 1 +#define PME_APP_NAME "Locosto Phone" + + + +//extern BtlA2dpContext *btlA2dpContext ; +//extern BtlFtpsContext *ftpsContext; +/* Internal functions prototypes */ +void btips_bmgCallback (const BtlBmgEvent *); +extern UBYTE g_device_name[BT_MAX_REM_DEV_NAME]; +extern BOOL g_Outgoing; + +static BtlBmgContext *mfwBtipsBmgContext; + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgGetDeviceName + *--------------------------------------------------------------------------- + * + * Synopsis: Send PIN code. + * + * Return: TRUE if name is available. Else convert the BD_ADDR itself to a string. + * + */ +BOOL mfw_btips_bmgGetDeviceName(const BD_ADDR *bdAddr, U8 *name) +{ + BtStatus btStatus; + BtlBmgDeviceRecord record; + TRACE_FUNCTION("mfw_btips_bmgGetDeviceName"); + btStatus = BTL_BMG_FindDeviceRecord(mfwBtipsBmgContext, bdAddr, &record); + if(BT_STATUS_SUCCESS == btStatus) + { + + strcpy(name, record.name); + } + else + { + bdaddr_ntoa(bdAddr, name); + } + return TRUE; +} +//26-07-07 +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSetDeviceRecord + *--------------------------------------------------------------------------- + * + * Synopsis: Send PIN code. + * + * Return: TRUE if name is available. Else convert the BD_ADDR itself to a string. + * + */ +BOOL mfw_btips_bmgSetDeviceNameInRecord(const BD_ADDR *bdAddr, UBYTE *name) +{ + BtStatus btStatus; + BtlBmgDeviceRecord record; + TRACE_FUNCTION("mfw_btips_bmgGetDeviceName"); + btStatus = BTL_BMG_FindDeviceRecord(mfwBtipsBmgContext, bdAddr, &record); + if(BT_STATUS_SUCCESS == btStatus) + { + + OS_MemCopy(record.name, name, BT_MAX_REM_DEV_NAME); + BTL_BMG_SetDeviceRecord(mfwBtipsBmgContext, &record); + + } + else + { + bdaddr_ntoa(bdAddr, name); + } + return TRUE; +} + + +BOOL mfw_btips_bmgGetDeviceState (const BD_ADDR *bdAddr, BtRemDevState *state) +{ + TRACE_FUNCTION("mfw_btips_bmgGetDeviceState"); + BTL_BMG_GetRemDevState (mfwBtipsBmgContext, bdAddr, state); + return TRUE; +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSendPin + *--------------------------------------------------------------------------- + * + * Synopsis: Send PIN code. + * + * Return: TRUE if send PIN code is successful, FALSE otherwise. + * + */ +BOOL mfw_btips_bmgSendPin (const BD_ADDR *bdAddr, + const U8 *pin, + const U8 len) +{ + BtStatus btStatus; + + btStatus = BTL_BMG_PinReply(mfwBtipsBmgContext, bdAddr, pin, len, BPT_SAVE_TRUSTED); + return mfw_btips_checkStatus(btStatus); +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSendHciCommand + *--------------------------------------------------------------------------- + * + * Synopsis: Send an HCI Command. + * + * Return: TRUE if command was sent successfully, FALSE otherwise. + * + */ +BOOL mfw_btips_bmgSendHciCommand (const U16 hciCommand, + const U8 parmsLen, + const U8 *parms, + const U8 event) +{ + BtStatus btStatus; + + TRACE_FUNCTION_P1("mfw_btips_bmgSendHciCommand %x", hciCommand); + btStatus = BTL_BMG_SendHciCommand(mfwBtipsBmgContext, hciCommand, parmsLen, parms, event); + return mfw_btips_checkStatus(btStatus); +} + + +BOOL mfw_btips_bmgBond(const BD_ADDR *bdAddr, + const U8 *pin, + const U8 len) +{ + BtStatus btStatus; + btStatus = BTL_BMG_Bond(mfwBtipsBmgContext, bdAddr, pin, len, BPT_SAVE_TRUSTED); + return mfw_btips_checkStatus(btStatus); +} + +BOOL mfw_btips_bmgCancelBond(const BD_ADDR *bdAddr) +{ + BtStatus btStatus; + TRACE_FUNCTION("mfw_btips_bmgCancelBond"); + btStatus = BTL_BMG_CancelBond(mfwBtipsBmgContext, bdAddr); + return mfw_btips_checkStatus(btStatus); + +} +BOOL mfw_btips_bmgGetCodMajorValue(U8* CODMajorStr, U32 *CODMajor) +{ + BOOL result; + #if 0 + LINE_PARSER_ToLower(CODMajorStr); + + *CODMajor = COD_MAJOR_MISCELLANEOUS; + result = TRUE; + + if (strcmp((const char*)CODMajorStr, "comp") == 0) + { + *CODMajor = COD_MAJOR_COMPUTER; + } + else if (strcmp((const char*)CODMajorStr, "phone") == 0) + { + *CODMajor = COD_MAJOR_PHONE; + } + else if (strcmp((const char*)CODMajorStr, "lan") == 0) + { + *CODMajor = COD_MAJOR_LAN_ACCESS_POINT; + } + else if (strcmp((const char*)CODMajorStr, "audio") == 0) + { + *CODMajor = COD_MAJOR_AUDIO; + } + else if (strcmp((const char*)CODMajorStr, "periph") == 0) + { + *CODMajor = COD_MAJOR_PERIPHERAL; + } + else if (strcmp((const char*)CODMajorStr, "imaging") == 0) + { + *CODMajor = COD_MAJOR_IMAGING; + } + else if (strcmp((const char*)CODMajorStr, "none") == 0) + { + *CODMajor = COD_MAJOR_MISCELLANEOUS; + } + else + { + result = FALSE; + } +#endif + return result; +} + +BOOL mfw_btips_bmgGetLAPValue(U8* lapStr, U32 *lap) +{ + BOOL result; + #if 0 + LINE_PARSER_ToLower(lapStr); + + result = TRUE; + + if (strcmp((const char*)lapStr, "giac") == 0) + { + *lap = BT_IAC_GIAC; + } + if (strcmp((const char*)lapStr, "liac") == 0) + { + *lap = BT_IAC_LIAC; + } + else + { + result = FALSE; + } +#endif + return result; +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSearch + *--------------------------------------------------------------------------- + * + * Synopsis: Starts search process. + * + * Return: TRUE if search process is successfull, FALSE otherwise. + * + */ +BOOL mfw_btips_bmgCancelSearch (void) +{ + BtStatus btStatus = BT_STATUS_FAILED; + + TRACE_FUNCTION ("mfw_btips_bmgCancelSearch()"); + + btStatus = BTL_BMG_CancelSearch(mfwBtipsBmgContext); + TRACE_FUNCTION_P1("MFW_BTIPS_BMG :BTL_BMG_CancelSearch returned btStatus: %s", pBT_Status(btStatus)); + + return mfw_btips_checkStatus(btStatus); +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSearch + *--------------------------------------------------------------------------- + * + * Synopsis: Starts search process. + * + * Return: TRUE if search process is successfull, FALSE otherwise. + * + */ +BOOL mfw_btips_bmgSearch (BOOL searchType) +{ + BtStatus status = BT_STATUS_FAILED; + BtlBmgCodFilter CODFilter; + BtlBmgCodFilter *CODFilterPtr = 0; +// U8 lapStr[11]; + BOOL performNameRequest = TRUE; + U8 maxResp = 0; +// U8 CODMajorStr[21]; +// U32 CODMajor; + + TRACE_FUNCTION_P1 ("mfw_btips_bmgSearch TYPE = %d", searchType); + + switch(searchType) + { + case BTIPS_GENERIC_DEVICE_SEARCH: + status = BTL_BMG_SearchByCod(mfwBtipsBmgContext, + BTL_BMG_SEARCH_REGULAR, + BT_IAC_GIAC, + BT_INQ_TIME_GAP100, + MAX_RESPONSES, + 0, + performNameRequest, + SDP_SERVICE_NONE); + break; + case BTIPS_A2DP_DEVICE_SEARCH: + CODFilter.codFilterMask = BTL_BMG_SEARCH_COD_FILTER_SERVICE_CLS|BTL_BMG_SEARCH_COD_FILTER_SERVICE_CLS; + CODFilter.serviceClass = COD_RENDERING|COD_AUDIO; + CODFilter.majorDeviceClass = COD_MAJOR_AUDIO; + status = BTL_BMG_SearchByCod(mfwBtipsBmgContext, + BTL_BMG_SEARCH_REGULAR, + BT_IAC_GIAC, + BT_INQ_TIME_GAP100, + MAX_RESPONSES, + &CODFilter, + performNameRequest, + SDP_SERVICE_NONE); + break; + + case BTIPS_OPP_DEVICE_SEARCH: + CODFilter.codFilterMask = BTL_BMG_SEARCH_COD_FILTER_SERVICE_CLS; + CODFilter.serviceClass = COD_OBJECT_TRANSFER; + status = BTL_BMG_SearchByCod(mfwBtipsBmgContext, + BTL_BMG_SEARCH_REGULAR, + BT_IAC_GIAC, + BT_INQ_TIME_GAP100, + MAX_RESPONSES, + &CODFilter, + performNameRequest, + SDP_SERVICE_NONE); + + break; + case BTIPS_HSHF_DEVICE_SEARCH: + CODFilter.codFilterMask = BTL_BMG_SEARCH_COD_FILTER_MAJOR_DEV_CLS; + CODFilter.majorDeviceClass = COD_MAJOR_AUDIO; + status = BTL_BMG_SearchByCod(mfwBtipsBmgContext, + BTL_BMG_SEARCH_REGULAR, + BT_IAC_GIAC, + BT_INQ_TIME_GAP100, + MAX_RESPONSES, + &CODFilter, + performNameRequest, + SDP_SERVICE_NONE); + break; + + } + + + mfw_BtipsReport(("MFW_BTIPS_BMG :BTL_BMG_SearchByCod returned status: %s", pBT_Status(status))); + return mfw_btips_checkStatus(status); +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgGetLocalDeviceName + *--------------------------------------------------------------------------- + * + * Synopsis: Extract the currently set local name + * + * Return: + * + */ +BOOL mfw_btips_bmgGetLocalDeviceName(U8 *name) +{ + BtStatus btStatus; + U8 len = 0; + btStatus = BTL_BMG_GetLocalDeviceName(mfwBtipsBmgContext, name, &len); + return mfw_btips_checkStatus(btStatus); + +} + + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSetLocalDeviceName + *--------------------------------------------------------------------------- + * + * Synopsis: Set local name (Send a null terminated string) of our device. + * + * Return: TRUE if setting local name is successfull, FALSE otherwise. + * + */ +BOOL mfw_btips_bmgSetLocalDeviceName (U8 *name) +{ + U8 len = 0; + + BtStatus btStatus = BT_STATUS_FAILED; + len = (U8)(OS_StrLen((const char *)(name))); + name[len]=0; + btStatus = BTL_BMG_SetLocalDeviceName(mfwBtipsBmgContext, (U8 *)(name), len+1); + return mfw_btips_checkStatus(btStatus); +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSetPhoneVisibility + *--------------------------------------------------------------------------- + * + * Synopsis: Set Accessibility of the BT device. + * + * Return: . + * + */ +BOOL mfw_btips_bmgSetPhoneVisibility(BOOL status) +{ + BtStatus btStatus; + + BtAccessibleMode modeNC; + //BtAccessModeInfo infoNC; + BtAccessibleMode modeC; + //BtAccessModeInfo infoC; + + TRACE_FUNCTION("mfw_btips_bmgSetPhoneVisibility"); + + btStatus = BTL_BMG_GetAccessibleMode(mfwBtipsBmgContext, + &modeNC, + 0, + &modeC, + 0); + + TRACE_EVENT_P2("BTL_BMG_GetAccessibleMode %d, %d", modeNC, modeC); + + if(TRUE == status) + { + modeNC = BAM_GENERAL_ACCESSIBLE; + modeC = BAM_GENERAL_ACCESSIBLE; + } + else + { + modeNC = BAM_CONNECTABLE_ONLY; + modeC = BAM_CONNECTABLE_ONLY; + } + + btStatus = BTL_BMG_SetAccessibleMode(mfwBtipsBmgContext, + &modeNC, + 0, + &modeC, + 0); + + TRACE_EVENT_P2("BTL_BMG_SetAccessibleMode %d, %d", modeNC, modeC); + + return mfw_btips_checkStatus(btStatus); + +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgSetPhoneVisibility + *--------------------------------------------------------------------------- + * + * Synopsis: Set Accessibility of the BT device. + * + * Return: . + * + */ +BOOL mfw_btips_bmgGetPhoneVisibility(void) +{ + BtStatus btStatus; + + BtAccessibleMode modeNC; + + BtAccessibleMode modeC; + + + TRACE_FUNCTION("mfw_btips_bmgSetPhoneVisibility"); + + btStatus = BTL_BMG_GetAccessibleMode(mfwBtipsBmgContext, + &modeNC, + 0, + &modeC, + 0); + + if(modeNC == BAM_GENERAL_ACCESSIBLE) + return TRUE; + + return FALSE; + +} +/*--------------------------------------------------------------------------- + * mfw_btips_bmgDeviceDelete + *--------------------------------------------------------------------------- + * + * Synopsis: Delete a record with the given "bdAddr" from the device database. + * + * Return: . + * + */ +BOOL mfw_btips_bmgDeviceDelete(const BD_ADDR *bdAddr) +{ + BtStatus btStatus; + + btStatus = BTL_BMG_DeleteDeviceRecord(mfwBtipsBmgContext, bdAddr); + mfw_BtipsReport(("BTL_BMG_GetNumberOfDeviceRecords() returned %s.\n", pBT_Status(btStatus))); + return mfw_btips_checkStatus(btStatus); +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmg_getPairedDevices + *--------------------------------------------------------------------------- + * + * Synopsis: Enumerate the device database. + * + * Return: . + * + */ +BOOL mfw_btips_bmg_getPairedDevices(Bmg_DeviceList *pairedDeviceList, U32 *count) +{ + BtStatus btStatus; + U32 index, numOfDevicesDB; + BtlBmgDeviceRecord deviceRecord; + *count = 0; + + TRACE_FUNCTION ("mfw_btips_bmg_getPairedDevices()"); + + /* Checks if the DB is empty or not*/ + btStatus= BTL_BMG_GetNumberOfDeviceRecords(mfwBtipsBmgContext, &numOfDevicesDB); + mfw_BtipsReport(("BTL_BMG_GetNumberOfDeviceRecords() returned %s.\n", pBT_Status(btStatus))); + if(numOfDevicesDB!=0) + { + /*Current limitation is to have a display of only BT_MAX_DEVICE_LIST devices*/ + for (index=0;index <numOfDevicesDB && index <= BT_MAX_DEVICE_LIST; index++) + { + btStatus=BTL_BMG_EnumDeviceRecords(mfwBtipsBmgContext, index, &deviceRecord); + mfw_BtipsReport(("BTL_BMG_EnumDeviceRecords() returned %s for %d: %s", pBT_Status(btStatus), index, deviceRecord.name)); + if (btStatus == BT_STATUS_SUCCESS) + { + OS_MemCopy((U8*)&pairedDeviceList[index].bdAddr, (U8*)&deviceRecord.bdAddr, sizeof(BD_ADDR)); + strcpy(pairedDeviceList[index].name, deviceRecord.name); + pairedDeviceList[index].myIndex = index; + } + } + *count = index; + return TRUE; + } + return mfw_btips_checkStatus(btStatus); +} + + + +/*--------------------------------------------------------------------------- + * mfw_btips_bmg_getConnectedDevices + *--------------------------------------------------------------------------- + * + * Synopsis: Enumerate the device database. + * + * Return: . + * + */ +BOOL mfw_btips_bmg_getConnectedDevices(Bmg_ConnectedDeviceList *ConnectedDeviceList, U32 *count) +{ + BtStatus btStatus; + U32 index;//, numOfDevicesDB; +// BtlBmgDeviceRecord deviceRecord; + U32 profile_count=0; + BD_ADDR bdAddr; + + char name[BT_MAX_REM_DEV_NAME]; + U32 ServiceID; + *count = 0; + + TRACE_FUNCTION ("mfw_btips_bmg_getConnectedDevices()"); + + for (index=0;index <BTIPS_MAX_PROFILE_COUNT; index++) + { + btStatus = mfw_btips_bmg_getConnectedDevicesForProfile(index,&bdAddr,name,&ServiceID); + if (btStatus) + { + memset(&ConnectedDeviceList[*count].name,0,BT_MAX_REM_DEV_NAME*sizeof(UBYTE)); + memset(&ConnectedDeviceList[*count].bdAddr,0,sizeof(BD_ADDR)); + OS_MemCopy((U8*)&ConnectedDeviceList[*count].bdAddr,(U8*)&bdAddr, sizeof(BD_ADDR)); + strcpy(ConnectedDeviceList[*count].name, name); + ConnectedDeviceList[*count].myIndex = *count; + ConnectedDeviceList[*count].ServiceId= ServiceID; + ServiceID = 0; + (*count)++; + } + + } + + return mfw_btips_checkStatus(btStatus); +} + +U32 mfw_btips_bmg_getConnectedDevicesCount(void) +{ + BtStatus btStatus; + U32 index, count=0; + BD_ADDR bdAddr; + + char name[BT_MAX_REM_DEV_NAME]; + U32 ServiceID; + + + TRACE_FUNCTION ("mfw_btips_bmg_getConnectedDevicesCount()"); + + for (index=0;index <BTIPS_MAX_PROFILE_COUNT; index++) + { + btStatus = mfw_btips_bmg_getConnectedDevicesForProfile(index,&bdAddr,name,&ServiceID); + + if (btStatus) + { + count++; + } + } + return count; +} + +BOOL mfw_btips_bmg_getConnectedDevicesForProfile(U32 profile_num, BD_ADDR *bdAddr, U8 *name, U32 *ServiceID) +{ + + + BOOL status; + + switch(profile_num) + { + + case BTIPS_SDP_SERVICE_A2DP: + status = mfw_btips_a2dpGetConnectedDevice(bdAddr, name); + if(TRUE ==status) + *ServiceID = BTIPS_SDP_SERVICE_A2DP; + TRACE_EVENT_P1("mfw_btips_bmg_getConnectedDevicesForProfile A2DP name =%s ",name); + break; + + + case BTIPS_SDP_SERVICE_VG: + status=mfw_btips_vgGetConnectedDevice(bdAddr, name); + if(TRUE ==status) + *ServiceID = BTIPS_SDP_SERVICE_VG; + + TRACE_EVENT_P1("mfw_btips_bmg_getConnectedDevicesForProfile OPPC name =%s ",name); + break; + + + + case BTIPS_SDP_SERVICE_OPPC: + status=mfw_btips_oppcGetConnectedDevice(bdAddr, name); + if(TRUE ==status) + *ServiceID = BTIPS_SDP_SERVICE_OPPC; + + TRACE_EVENT_P1("mfw_btips_bmg_getConnectedDevicesForProfile OPPC name =%s ",name); + break; + + case BTIPS_SDP_SERVICE_OPPS: + + status=mfw_btips_oppsGetConnectedDevice(bdAddr, name); + if(TRUE ==status) + *ServiceID = BTIPS_SDP_SERVICE_OPPS; + + TRACE_EVENT_P1("mfw_btips_bmg_getConnectedDevicesForProfile OPPS name =%s ",name); + break; + + + case BTIPS_SDP_SERVICE_FTPS: + + status=mfw_btips_ftpsGetConnectedDevice(bdAddr, name); + if(TRUE ==status) + *ServiceID = BTIPS_SDP_SERVICE_FTPS; + + TRACE_EVENT_P1("mfw_btips_bmg_getConnectedDevicesForProfile FTPS name =%s ",name); + break; + + + default: + break; + } + return status; +} + +#if 0 + +/*--------------------------------------------------------------------------- + * APP_BMG_SetSecurityMode + *--------------------------------------------------------------------------- + * + * Synopsis: Set the security level of our device. + * + * Return: TRUE if setting the security level is successfull, FALSE otherwise. + * + */ +BOOL APP_BMG_SetSecurityMode (void) +{ + BtStatus status = BT_STATUS_FAILED; + U8 SecLevel; + + LINE_PARSER_GetNextU8(&SecLevel, FALSE); + status = BTL_BMG_SetSecurityMode(mfwBtipsBmgContext, (SecLevel+1)); + mfw_BtipsReport(("MFW_BTIPS_BMG :BTL_BMG_SetSecurityMode returned status: %s", pBT_Status(status))); + if (status == BT_STATUS_SUCCESS) + { + return TRUE; + } + return FALSE; +} + + +/*--------------------------------------------------------------------------- + * APP_BMG_SetSecurityMode + *--------------------------------------------------------------------------- + * + * Synopsis: Get the security level of our device. + * + * Return: TRUE if getting the security level is successfull, FALSE otherwise. + * + */ +BOOL APP_BMG_GetSecurityMode (void) +{ + BtStatus status = BT_STATUS_FAILED; + BtSecurityMode CurrentSecLevel; + + status = BTL_BMG_GetSecurityMode(mfwBtipsBmgContext, &CurrentSecLevel); + mfw_BtipsReport(("MFW_BTIPS_BMG :APP_BMG_GetSecurityMode returned status: %s", pBT_Status(status))); + if (status == BT_STATUS_SUCCESS) + { + mfw_BtipsReport(("MFW_BTIPS_BMG : Current security mode is: %d", (CurrentSecLevel-1))); + return TRUE; + } + return FALSE; +} + +#endif + +/*--------------------------------------------------------------------------- + * APP_BMG_AuthorizeDeviceReply + *--------------------------------------------------------------------------- + * + * Synopsis: Reply for authorization request of another device. + * + * Return: TRUE if Autorization reply is successfull, FALSE otherwise. + * + */ +BOOL mfw_btips_bmgAuthorizeDeviceReply (BOOL auth, BD_ADDR *BdAddr) +{ + BtStatus btStatus = BT_STATUS_FAILED; + U8 AuthorizationType;//, BD_array[BDADDR_NTOA_SIZE]; + AuthorizationType = auth? BTL_BMG_AUTHORIZED_NOT_TRUSTED: BTL_BMG_NOT_AUTHORIZED; +// btStatus = BTL_BMG_AuthorizeDeviceReply(mfwBtipsBmgContext, &BdAddr, (BtlBmgAuthorizationType) (AuthorizationType)); + if (btStatus == BT_STATUS_SUCCESS) + { + return TRUE; + } + return FALSE; +} + + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgInit + *--------------------------------------------------------------------------- + * + * Synopsis: BMG application initialization. + * + * Return: NONE. + * + */ +void mfw_btips_bmgInit (void) +{ + BtStatus btStatus = BT_STATUS_FAILED; + + btStatus = BTL_BMG_Create(0, btips_bmgCallback, &mfwBtipsBmgContext); + Assert(btStatus == BT_STATUS_SUCCESS); + + btStatus = BTL_BMG_SetEventForwardingMode(mfwBtipsBmgContext, BTL_BMG_EVENT_FORWARDING_ALL_EVENTS); + Assert(btStatus == BT_STATUS_SUCCESS); + +#if 0 + btStatus = BTL_BMG_SetClassOfDevice(mfwBtipsBmgContext, (COD_MAJOR_PHONE | COD_MINOR_PHONE_CELLULAR)); + Assert(btStatus == BT_STATUS_SUCCESS); +#endif + + mfw_BtipsReport(("BMGA_Init() complete.\n")); +} + +/*--------------------------------------------------------------------------- + * mfw_btips_bmgDeinit + *--------------------------------------------------------------------------- + * + * Synopsis: BMG application deinitialization. + * + * Return: NONE. + * + */ +void mfw_btips_bmgDeinit(void) +{ + BtStatus btStatus = BT_STATUS_FAILED; + + btStatus = BTL_BMG_Destroy(&mfwBtipsBmgContext); + Assert(btStatus == BT_STATUS_SUCCESS); + + mfw_BtipsReport(("BMGA_Deinit() complete.\n")); +} + +/*--------------------------------------------------------------------------- + * btips_bmgCallback + *--------------------------------------------------------------------------- + * + * Synopsis: Callback function to handle BMG profile events invoked in BTS context. + * + * Return: NONE. + * + */ +void btips_bmgCallback (const BtlBmgEvent *bmgEvent) +{ + const BtEvent *event = bmgEvent->event; + BtStatus btStatus = BT_STATUS_FAILED; + char bdAddr[BDADDR_NTOA_SIZE]; + char *name; + T_BTIPS_MMI_IND btips_mmi_ind; + + TRACE_FUNCTION_P1("btips_bmgCallback: %s", pME_Event(event->eType)); + btips_mmi_ind.mfwBtipsEventType = MFW_BTIPS_BMG_EVENT; + btips_mmi_ind.data.bmgBtEvent.eventType = event->eType; + btips_mmi_ind.data.bmgBtEvent.errCode =event->errCode; + + switch (event->eType) + { + + case BTEVENT_LINK_CONNECT_IND: + btStatus = BTL_BMG_GetRemoteDeviceName(mfwBtipsBmgContext, &event->p.remDev->bdAddr); + break; + case BTEVENT_HCI_INITIALIZED: + btStatus = BTL_BMG_SetLocalDeviceName(mfwBtipsBmgContext, (U8 *)PME_APP_NAME, (U8)(sizeof(PME_APP_NAME))); + mfw_BtipsReport(("MFW_BTIPS_BMG :BTL_BMG_SetLocalDeviceName returned status: %s", pBT_Status(btStatus))); + + btStatus = BTL_BMG_SetDefaultLinkPolicy(mfwBtipsBmgContext, ((BLP_MASTER_SLAVE_SWITCH|BLP_HOLD_MODE|BLP_SNIFF_MODE|BLP_PARK_MODE|BLP_SCATTER_MODE)&(~BLP_MASK)), ((BLP_MASTER_SLAVE_SWITCH|BLP_HOLD_MODE|BLP_SNIFF_MODE|BLP_PARK_MODE|BLP_SCATTER_MODE)&(~BLP_MASK))); + mfw_BtipsReport(("MFW_BTIPS_BMG :BTL_BMG_SetDefaultLinkPolicy returned status: %s", pBT_Status(btStatus))); + + btStatus = BTL_BMG_SetSecurityMode(mfwBtipsBmgContext, BSM_SEC_LEVEL_2); + mfw_BtipsReport(("MFW_BTIPS_BMG :BTL_BMG_SetSecurityMode returned status: %s", pBT_Status(btStatus))); + + btipsNotifyMFW(btips_mmi_ind); + break; + + case BTEVENT_HCI_DEINITIALIZED: + btipsNotifyMFW(btips_mmi_ind); + break; + + + case BTEVENT_HCI_FAILED: + btipsNotifyMFW(&btips_mmi_ind); + break; + + case BTEVENT_PAIRING_COMPLETE: + TRACE_EVENT_P2("Pairing with %s complete. status %s.\n", bdaddr_ntoa( &event->p.remDev->bdAddr, bdAddr), pHC_Status(event->errCode)); + OS_MemCopy((U8*)&btips_mmi_ind.data.bmgBtEvent.bdAddr, (U8*)&event->p.remDev->bdAddr, sizeof(BD_ADDR)); + btipsNotifyMFW(&btips_mmi_ind); + break; + + case BTEVENT_BOND_RESULT: + if (event->errCode != BEC_NO_ERROR) + { + TRACE_EVENT_P2("Bond attempt to %s failed. Reason %s.", bdaddr_ntoa(&event->p.bdAddr, bdAddr), pHC_Status(event->errCode)); + } + else + { + TRACE_EVENT_P1("Bond to %s ended successfully", bdaddr_ntoa(&event->p.bdAddr, bdAddr)); + } + + OS_MemCopy((U8*)&btips_mmi_ind.data.bmgBtEvent.bdAddr, (U8*)&event->p.bdAddr, sizeof(BD_ADDR)); + + btipsNotifyMFW(&btips_mmi_ind); + break; + + case BTEVENT_BOND_CANCELLED: + btipsNotifyMFW(&btips_mmi_ind); + break; + + case BTEVENT_PIN_REQ: + if (event->errCode == BT_STATUS_SUCCESS) + { + T_BTIPS_MMI_IND btipsMmiInd = {0}; + BtlBmgDeviceRecord record; + + + btStatus=BTL_BMG_GetRemoteDeviceName(mfwBtipsBmgContext, &event->p.remDev->bdAddr); + TRACE_EVENT_P1("BTEVENT_PIN_REQ btStatus %d",btStatus); + /* Prompt the user for a PIN code */ + mfw_BtipsReport(("Please Enter PIN Code for %s", bdaddr_ntoa(&event->p.remDev->bdAddr, bdAddr))); + } + else + { + /* Cancel the PIN code request */ + mfw_BtipsReport ((("BMG: Pin code couldn't be displayed because of an error"))); + } + OS_MemCopy((U8*)&btips_mmi_ind.data.bmgBtEvent.bdAddr, (U8*)&event->p.remDev->bdAddr, sizeof(BD_ADDR)); + btipsNotifyMFW(&btips_mmi_ind); + break; + + case BTEVENT_AUTHORIZATION_REQ: + TRACE_EVENT_P1("Authorization request received from %s",bdaddr_ntoa(&event->p.remDev->bdAddr, bdAddr)); + break; + + case BTEVENT_INQUIRY_RESULT: + mfw_BtipsReport(("Inquiry result arrived, BD address: %s", bdaddr_ntoa(&event->p.inqResult.bdAddr, bdAddr))); + break; + + case BTEVENT_SEARCH_COMPLETE: + case BTEVENT_SEARCH_CANCELLED: + TRACE_EVENT_P1("Search %s ", ((event->eType == BTEVENT_SEARCH_COMPLETE) ? ("completed") : ("cancelled"))); + btipsNotifyMFW(&btips_mmi_ind); + break; + + case BTEVENT_INQUIRY_COMPLETE: + case BTEVENT_INQUIRY_CANCELED: + TRACE_EVENT_P1("Inquiry %s ", ((event->eType == BTEVENT_INQUIRY_COMPLETE) ? ("completed") : ("cancelled"))); + //btipsNotifyMFW(&btips_mmi_ind); + break; + + case BTEVENT_NAME_RESULT: + + if (event->errCode == BEC_NO_ERROR) + { + OS_MemCopy((U8*)&btips_mmi_ind.data.bmgBtEvent.bdAddr, (U8*)&event->p.meToken->p.name.bdAddr, sizeof(BD_ADDR)); + if (event->p.meToken->p.name.io.out.len == 0) + { + name = "Unknown"; + strcpy(btips_mmi_ind.data.bmgBtEvent.p.deviceName, bdaddr_ntoa(&event->p.meToken->p.name.bdAddr, bdAddr)); + } + else + { + name = (char *)(event->p.meToken->p.name.io.out.name); + if (name) + { + } + else + { + TRACE_EVENT("BTEVENT_NAME_RESULT Name = NULL"); + } + strcpy(btips_mmi_ind.data.bmgBtEvent.p.deviceName, name); + } + TRACE_EVENT_P2("Received name %s for device %s", name, bdaddr_ntoa(&event->p.meToken->p.name.bdAddr, bdAddr)); + btipsNotifyMFW(&btips_mmi_ind); + } + else + { + /* Record that the name request failed. Next time we'll skip it. */ + mfw_BtipsReport(("BMG: Name request for %s failed, status %s.\n", + bdaddr_ntoa(&event->p.meToken->p.name.bdAddr, bdAddr), + pHC_Status(event->errCode))); + } + break; + case BTEVENT_DISCOVER_SERVICES_RESULT : + btips_mmi_ind.data.bmgBtEvent.p.discoveredServicesMask = event->p.discoveredServices.discoveredServicesMask; + bdaddr_ntoa(&event->p.discoveredServices.bdAddr, bdAddr); + OS_MemCopy((U8*)&btips_mmi_ind.data.bmgBtEvent.bdAddr , (U8*)&event->p.discoveredServices.bdAddr, sizeof(BD_ADDR)); + btips_mmi_ind.data.bmgBtEvent.p.discoveredServicesMask = event->p.discoveredServices.discoveredServicesMask; + TRACE_EVENT_P2("Discover Services %x for %s",event->p.discoveredServices.discoveredServicesMask, bdAddr); + btipsNotifyMFW(&btips_mmi_ind); + break; + default: + break; + } +} + + +/************************************************************************ + BMG in ACI Context Module Start +************************************************************************/ +void mfw_btips_bmgCallback( T_BTIPS_MMI_IND * para) +{ + MfwBtBmgEvent bmgBtEvent = para->data.bmgBtEvent; + + TRACE_FUNCTION_P1("mfw_btips_bmgCallback - %s", pME_Event(bmgBtEvent.eventType)); + + switch(bmgBtEvent.eventType) + { + case BTEVENT_HCI_DEINITIALIZED: + break; + + case BTEVENT_HCI_INITIALIZED: + mfw_btips_bmgSetPhoneVisibility(TRUE); + break; + + case BTEVENT_HCI_FAILED: + mfw_btips_signal(E_BTIPS_POWERON_FAILURE, NULL); + break; + + case BTEVENT_PAIRING_COMPLETE: + mfw_btips_signal(E_BTIPS_BMG_PAIRING_COMPLETE, para); + break; + + case BTEVENT_BOND_RESULT: + mfw_btips_signal(E_BTIPS_BMG_BOND_COMPLETE, para); + break; + + case BTEVENT_BOND_CANCELLED: + mfw_btips_signal(E_BTIPS_BMG_BOND_CANCELLED, NULL); + break; + + case BTEVENT_PIN_REQ: + if (bmgBtEvent.errCode == BT_STATUS_SUCCESS) + { + mfw_btips_signal(E_BTIPS_INCOMING_PIN_REQ, para); + } + break; + + case BTEVENT_NAME_RESULT: + + TRACE_EVENT_P1("Received name for device %s", bmgBtEvent.p.deviceName); + mfw_btips_signal(E_BTIPS_BMG_NAME_RESULT, para); + break; + + case BTEVENT_SEARCH_COMPLETE: + mfw_btips_signal(E_BTIPS_BMG_SEARCH_COMPLETE, NULL); + break; + case BTEVENT_SEARCH_CANCELLED: + mfw_btips_signal(E_BTIPS_BMG_SEARCH_CANCELLED, NULL); + break; + + case BTEVENT_INQUIRY_COMPLETE: + break; + + case BTEVENT_INQUIRY_CANCELED: + break; + case BTEVENT_DISCOVER_SERVICES_RESULT: + TRACE_FUNCTION("mfw_btips_bmgCallback BTEVENT_DISCOVER_SERVICES_RESULT"); + mfw_btips_signal(E_BTIPS_BMG_DEVICE_SERVICES, para); + break; + + default: + break; + } +} +BOOL mfw_btips_bmgDeviceSetConnectPermissionAllow(const BD_ADDR *bdAddr,BOOL permission ) +{ + + BtlBmgDeviceRecord record; + + BtStatus btStatus = BT_STATUS_FAILED; + + TRACE_FUNCTION("mfw_btips_bmgDeviceSetConnectPermissionAllow()"); + + btStatus = BTL_BMG_FindDeviceRecord(mfwBtipsBmgContext, bdAddr, &record); + TRACE_EVENT_P1("BTL_BMG_FindDeviceRecord in mfw_btips_bmgDeviceSetConnectPermissionAllow returned - %d", btStatus); + + if(BT_STATUS_SUCCESS == btStatus) + { + record.trusted = TRUE; + record.trustedPerService= SDP_SERVICE_OPP|SDP_SERVICE_DUN|SDP_SERVICE_FTP|SDP_SERVICE_A2DP|SDP_SERVICE_HFP; //Not sure if this is the way to set the bits in the mask field + + btStatus = BTL_BMG_SetDeviceRecord(mfwBtipsBmgContext, &record); + + TRACE_EVENT_P1("BTL_BMG_SetDeviceRecord in mfw_btips_bmgDeviceSetConnectPermissionAllow returned - %d", btStatus); + } + + return mfw_btips_checkStatus(btStatus); + + + +} + +BOOL mfw_btips_bmgDeviceSetConnectPermissionAsk(const BD_ADDR *bdAddr,BOOL permission) +{ + + BtlBmgDeviceRecord record; + + BtStatus btStatus = BT_STATUS_FAILED; + + TRACE_FUNCTION("mfw_btips_bmgDeviceSetConnectPermissionAsk()"); + + + btStatus = BTL_BMG_FindDeviceRecord(mfwBtipsBmgContext, bdAddr,&record); + + TRACE_EVENT_P1("BTL_BMG_FindDeviceRecord in mfw_btips_bmgDeviceSetConnectPermissionAsk returned - %d", btStatus); + + + if(BT_STATUS_SUCCESS == btStatus) + { + record.trusted = FALSE; + + record.trustedPerService= 0; //Not sure if this is the way to set the bits in the mask field + + btStatus = BTL_BMG_SetDeviceRecord(mfwBtipsBmgContext, &record); + + TRACE_EVENT_P1("BTL_BMG_SetDeviceRecord in mfw_btips_bmgDeviceSetConnectPermissionAsk returned - %d", btStatus); + + } + + return mfw_btips_checkStatus(btStatus); + + +} + + +BOOL mfw_btips_bmgSetRemoteDeviceName( const BD_ADDR *bdAddr, U8 *name) +{ + + BtStatus btStatus = BT_STATUS_FAILED; + + BtlBmgDeviceRecord record; + + TRACE_FUNCTION("mfw_btips_bmgSetRemoteDeviceName()"); + + btStatus = BTL_BMG_FindDeviceRecord(mfwBtipsBmgContext, bdAddr,&record); + + if(BT_STATUS_SUCCESS == btStatus) + { + strcpy(record.name, name); + btStatus = BTL_BMG_SetDeviceRecord(mfwBtipsBmgContext, &record); + } + return mfw_btips_checkStatus(btStatus); +} + + //vamsee +/* Get the Services Supported by the Remote Device*/ +U32 mfw_btips_bmgDeviceGetServices(const BD_ADDR *bdAddr) +{ + + BtlBmgDeviceRecord record; + BtStatus btStatus = BT_STATUS_FAILED; + TRACE_FUNCTION("mfw_btips_bmgDeviceGetServices()"); + btStatus = BTL_BMG_FindDeviceRecord(mfwBtipsBmgContext, bdAddr, &record); + TRACE_EVENT_P1("Record Services %x",record.services); + return record.services; +} + +BOOL mfw_btips_bmg_DiscoverServices(const BD_ADDR *bdAddr, SdpServicesMask sdpServicesMask) +{ + BtStatus btStatus; + + TRACE_EVENT_P1("mfw_btips_bmg_DiscoverServices Discover %x",sdpServicesMask); + + btStatus = BTL_BMG_DiscoverServices(mfwBtipsBmgContext, bdAddr, sdpServicesMask); + return mfw_btips_checkStatus(btStatus); +} + +BOOL mfw_btips_bmgSetDeviceRecord( const BD_ADDR *bdAddr, U32 sdpSericesMask) +{ + + + BtStatus btStatus = BT_STATUS_FAILED; + + BtlBmgDeviceRecord record; + + TRACE_FUNCTION("mfw_btips_bmgSetDeviceRecord()"); + + btStatus = BTL_BMG_FindDeviceRecord(mfwBtipsBmgContext, bdAddr,&record); + + if(BT_STATUS_SUCCESS == btStatus) + { + TRACE_EVENT_P1("mfw_btips_bmgSetDeviceRecord() %x",sdpSericesMask); + + record.services = sdpSericesMask; + + TRACE_EVENT_P1("Record Services %x",record.services); + + btStatus = BTL_BMG_SetDeviceRecord(mfwBtipsBmgContext, &record); + } + return mfw_btips_checkStatus(btStatus); +} + +/************************************************************************ + BMG in ACI Context Module End +************************************************************************/ + + + + +#endif +