diff src/ui/mfw/mfw_bt_api.c @ 3:67bfe9f274f6

src/ui: import of src/ui3 from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 16 Oct 2020 06:33:10 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ui/mfw/mfw_bt_api.c	Fri Oct 16 06:33:10 2020 +0000
@@ -0,0 +1,255 @@
+/*******************************************************************************\
+*                                                                           	*
+*  TEXAS INSTRUMENTS ISRAEL PROPRIETARY AND CONFIDENTIAL INFORMATION			*
+*																				*
+*  LEGAL NOTE: THE TRANSFER OF THE TECHNICAL INFORMATION IS BEING MADE			*
+*	UNDER AN EXPORT LICENSE ISSUED BY THE ISRAELI GOVERNMENT AND THAT THE		*
+*	APPLICABLE EXPORT LICENSE DOES NOT ALLOW THE TECHNICAL INFORMATION TO		*
+*	BE USED FOR THE MODIFICATION OF THE BT ENCRYPTION OR THE DEVELOPMENT		*
+*	OF ANY NEW ENCRYPTION. THE INFORMATION CAN BE USED FOR THE INTERNAL			*
+*	DESIGN AND MANUFACTURE OF TI PRODUCTS THAT WILL CONTAIN THE BT IC.			*
+*																				*
+\*******************************************************************************/
+/*******************************************************************************\
+*
+*   FILE NAME:      mfw_bt_api.c
+*
+*   DESCRIPTION:	This file implements the API between BMI (MMI) and BT applications
+*
+*   AUTHOR:         Anandhi Ramesh
+*
+*	Rev 0.1
+*
+\*******************************************************************************/
+/* ========================================================== */
+/*===========================================================
+*!
+*! Revision History
+*! ===================================
+
+	Nov 12, 2007 DRT :OMAPS00151698  x0056422
+	Description: MM: Commands that are not recognized by MMI are
+	handled improperly in BMI_NotifyBtEvent function. *!
+*!
+*! 17-Jan-2006 mf: Revisions appear in reverse chronological order;
+*! that is, newest first.  The date format is dd-Mon-yyyy.
+* =========================================================== */
+
+/******************************************************************************  
+                                Include Files
+*******************************************************************************/
+#ifdef FF_MMI_A2DP_AVRCP
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.h"
+#include "pei.h"
+#include "custom.h"
+#include "gsm.h"
+
+#else
+
+#include "STDDEFS.H"
+#include "custom.h"
+#include "gsm.h"
+#include "vsi.h"
+
+#endif 
+
+
+#include "mfw_mfw.h"
+#include "mfw_phb.h"
+#include "mfw_phbi.h"
+#include "mfw_cm.h"
+#include "mfw_cmi.h"
+#include "mfw_kbd.h"
+
+#include "mfw_nm.h"
+#include "mfw_sim.h"
+#include "mfw_sima.h"
+#include "mfw_nmi.h"
+#include "mfw_simi.h"
+#include "mfw_sms.h"
+#include "mfw_smsi.h"
+#include "mfw_win.h"
+
+#include "ksd.h"
+#include "psa.h"
+
+#include "mfw_bt_api.h"
+#include "mfw_bt_private.h"
+
+/*Declaration of Global BT structure for BMI*/
+BMI_BT_STRUCTTYPE tGlobalBmiBtStruct; 
+
+extern BOOL mmi_progress_bar;
+/* temp comment */
+extern T_AS_RET as_bt_cfg(BOOL , const T_RV_RETURN_PATH* );
+/* ========================================================================== */
+/**
+* @fn BMI_SwitchAudioToBtHeadset : Sets BT connection status.
+*     Connect or disconnect the audio output to BT headset.
+*      BT will call this function to let BMI know an A2DP link to a wireless headset
+*      has been connected (and is in Open state), or disconnected. 
+* 
+*      When link is connected, BMI will decide whether it wants to 
+*      direct the audio output to the wireless headset.
+*
+* @param [in] connected
+*        connected [in] - whether the link has just been connected or disconnected:
+*                       TRUE - connected
+*                       FALSE - disconnected
+*
+* @return BOOL
+*      when connect parameter is TRUE:
+*        - return TRUE when BMI approves and will use A2DP headset as the audio output
+*        - return FALSE when BMI rejects using A2DP headset as the audio output
+*
+*      when connect parameter is FALSE - returned value is ignored
+*
+*  @see mfw_bt_api.h
+*/
+/* ========================================================================== */
+
+BOOL BMI_SwitchAudioToBtHeadset(BOOL connected)
+{
+        static U8 first_time = 1;
+	TRACE_FUNCTION("BMI_SwitchAudioToBtHeadset");
+	if(first_time == 1)
+	    {
+	        tGlobalBmiBtStruct.tCmdSrc = BMI_BT_COMMAND_NONE;
+	        first_time = 0;
+	    }
+    if(connected == 0)
+    {
+	TRACE_FUNCTION("BMI_BT_Trace BMI_SwitchAudioToBtHeadset OFF");
+    tGlobalBmiBtStruct.bConnected = BMI_BT_NOTCONNECTED;
+	}
+    else
+	{
+        	TRACE_FUNCTION("BMI_BT_Trace BMI_SwitchAudioToBtHeadset ON");
+    tGlobalBmiBtStruct.bConnected = BMI_BT_CONNECTED;
+	}
+    
+	//send the status to AS layer. 
+    as_bt_cfg(connected, NULL);
+    return connected;
+}
+/* ========================================================================== */
+/**
+* @fn BMI_NotifyBtEvent : Informs BMI of any events triggered by the BT headset.
+* @Description : This function is called by BT to notify MMI of any events in the headset. 
+* MMI translates these events to corresponding keypad events and posts the event to itself. 
+*
+* @param [in] BtAppEvent event
+*     The events that are recognised by MMI are
+*     BT_EVENT_USER_PLAY - user has pressed play on handset, or resume. 
+*     BT_EVENT_USER_STOP - user has pressed stop on handset. 
+*     BT_EVENT_USER_PAUSE - user has pressed pause on handset. 
+*
+* @return none
+*
+*  @see  mfw_bt_api.h
+*/
+/* ========================================================================== */
+
+void BMI_NotifyBtEvent(BtAppEvent event)
+{
+    U8 key_state, key_code;
+    int nPresses;
+   TRACE_FUNCTION("BMI_BT_Trace BMI_NotifyBtEvent Enter");
+    if(tGlobalBmiBtStruct.bConnected != BMI_BT_NOTCONNECTED)
+    {
+    key_state = KEY_STAT_PRS;
+    
+    	TRACE_FUNCTION("BMI_BT_Trace BMI_NotifyBtEvent - BT connected");
+    switch(event)
+    {
+       case BT_EVENT_USER_PLAY:
+		   TRACE_FUNCTION("Play");
+        	if(tGlobalBmiBtStruct.tAudioState == FM_AUD_PAUSE 
+        		&& mmi_progress_bar==1)
+        		  key_code = 0x0D;
+        	else if (tGlobalBmiBtStruct.tAudioState == FM_AUD_STOP || 
+        		      tGlobalBmiBtStruct.tAudioState == FM_AUD_NONE)
+        		key_code = 0x17;   
+        	else 
+        		goto EXIT;
+        break;
+        case BT_EVENT_USER_STOP:
+			TRACE_FUNCTION("Stop");
+        	if(tGlobalBmiBtStruct.tAudioState == FM_AUD_PLAY 
+        		&& mmi_progress_bar==0)
+        		  key_code = 0x17;
+        	else if(tGlobalBmiBtStruct.tAudioState != FM_AUD_NONE
+        		&& mmi_progress_bar==1)
+        		  key_code = 0x0E;
+        	else 
+        		goto EXIT;
+        break;
+        case BT_EVENT_USER_PAUSE:
+			TRACE_FUNCTION("Pause");
+        	if(tGlobalBmiBtStruct.tAudioState == FM_AUD_PLAY 
+        		&& mmi_progress_bar == 1 )
+        		key_code = 0x0D;
+        	else 
+        		goto EXIT;
+        break;  
+
+		/* OMAPS00151698  x0056422 */
+	    default :
+			goto EXIT;
+        break;  
+    }
+
+    //set the indication that this command came from BT and not handset
+    tGlobalBmiBtStruct.tCmdSrc = BMI_BT_HEADSET_COMMAND;
+
+    //<post a keypad indication message to the MMI> 
+	//Add keypress to queue of key presses
+	nPresses = kbd_getNumElements();
+	kbd_putMakeAndKey( (char)key_state, (char)key_code);
+	/*also send a key release indicaiton for the same key. 
+       If this is not done, the key press becomes a long press and is
+       handled differently */
+	key_state = KEY_STAT_REL;
+	kbd_putMakeAndKey( (char)key_state, (char)key_code);
+	if ((!kbd_stillProcessingKeys()) && (nPresses == 0))
+	{	//Only this element present - create and send message.
+
+	    sendKeyInd(key_code, KEY_STAT_PRS, 0);
+	}
+	if ((!kbd_stillProcessingKeys()) && (nPresses == 0))
+	{	//Only this element present - create and send message.
+
+	    sendKeyInd(key_code, KEY_STAT_REL, 0);
+	}
+    }
+EXIT:
+    return;
+}
+
+/* ========================================================================== */
+/**
+* @fn BMI_RegisterEventCallback : BT calls this function to register a callback with MMI
+* Whenever there is a 
+*
+* @param [in] BtAppEvent event
+*     The events that are recognised by MMI are
+*     BT_EVENT_USER_PLAY - user has pressed play on handset, or resume. 
+*     BT_EVENT_USER_STOP - user has pressed stop on handset. 
+*     BT_EVENT_USER_PAUSE - user has pressed pause on handset. 
+*
+* @return none
+*
+*  @see  mfw_bt_api.h
+*/
+/* ========================================================================== */
+void BMI_RegisterEventCallback(BmiEventCallback eventCallback)
+{
+    TRACE_FUNCTION("BMI_RegisterEventCallback");
+    tGlobalBmiBtStruct.BmiEventCallback = eventCallback;
+    return;
+}
+#endif //FF_MMI_A2DP_AVRCP
+