diff src/aci2/mfw/mfw_mme.c @ 3:93999a60b835

src/aci2, src/condat2: import of g23m/condat source pieces from TCS211
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Sep 2016 00:29:36 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/aci2/mfw/mfw_mme.c	Mon Sep 26 00:29:36 2016 +0000
@@ -0,0 +1,1127 @@
+/*
++--------------------------------------------------------------------+
+| PROJECT: MMI-Framework (8417)         $Workfile:: mfw_mme.c       $|
+| $Author:: Kk  $ CONDAT GmbH           $Revision:: 5               $|
+| CREATED: 11.02.99                     $Modtime:: 3.03.00 17:40    $|
+| STATE  : code                                                      |
++--------------------------------------------------------------------+
+
+   MODULE  : MFW_MME
+
+   PURPOSE : Miscelleaneous Mobile Equipment functions
+
+   EXPORT  :
+
+   TO DO   :
+
+   $History:: mfw_mme.c                                             $
+ ************************************************************************
+ *   	nekkareb - OMAPS00057367: 8 Dec 2005
+ * 	Description: Fix build problems for fix of OMAPS00057367
+ *	Solution: Included OMAPS00057367 changes under a flag ISAMPLE
+ *
+ *  	nekkareb - OMAPS00057367: 3 Dec 2005
+ * 	Description: Locosto: TTY MT call does not work
+ *	Solution: Extra TTY command added so as to initiate the AUDIO entity to send the 
+ *	              TTY_START request to L1 only after the Vocoder enable is sent.
+ *                  Current audio device is read from audio service entity functions.
+ *
+ *  	xpradipg - LOCOSTO-ENH-31895 : 23 June 2005
+ * 	Description:	Support for various audio profiles
+ *	Solution:	The support for audio device's carkit/headset/loudspeaker/handheld.
+ *			The audio device is enabled as per the user actions.
+ *
+ * *****************  Version 5  ********************************************
+ * User: Kk           Date: 3.03.00    Time: 17:52
+ * Updated in $/GSM/Condat/MS/SRC/MFW
+ *
+ * *****************  Version 4  *****************
+ * User: Es           Date: 2.03.00    Time: 16:48
+ * Updated in $/GSM/Condat/MS/SRC/MFW
+ * generate battery/signal primitives with more info from driver
+ * callbacks. Catch the primitives on reception and call MMI event
+ * handler. Don't use ACI any longer for this purpose.
+ *
+ * *****************  Version 3  *****************
+ * User: Es           Date: 14.04.99   Time: 17:34
+ * Updated in $/GSM/DEV/MS/SRC/MFW
+ * moved to CST
+|
+| *****************  Version 2  *****************
+| User: Le           Date: 14.04.99   Time: 9:51
+| Updated in $/GSM/DEV/MS/SRC/MFW
+ *
+ * *****************  Version 1  *****************
+ * User: Es           Date: 20.02.99   Time: 11:54
+ * Created in $/GSM/DEV/MS/SRC/MFW
+ * mobile equipment
+*/
+
+#define ENTITY_MFW
+
+#include <stdio.h>
+
+#if defined (NEW_FRAME)
+
+#include "typedefs.h"
+#include "vsi.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_sys.h"
+#include "prim.h"
+#include "message.h"
+#include "prim.h"
+#include "aci_cmh.h"
+#include "gdi.h"
+#include "audio.h"
+#include "pwr.h"
+#include "rx.h"
+#include "light.h"
+#include "mfw_acie.h"
+#include "mfw_mme.h"
+#include "mfw_win.h"
+
+/* OMAPS00057367, 8 Dec 2005, nekkare, build fix */
+#if (BOARD == 71)
+#define ISAMPLE
+#endif
+
+#define hCommPL _ENTITY_PREFIXED(hCommPL)
+#define hCommACI _ENTITY_PREFIXED(hCommACI)
+
+#if defined (NEW_FRAME)
+EXTERN T_HANDLE hCommPL;
+EXTERN T_HANDLE hCommACI;
+#else
+EXTERN T_VSI_CHANDLE hCommPL;
+EXTERN T_VSI_CHANDLE hCommACI;
+#endif
+
+EXTERN MfwHdr * current_mfw_elem;
+
+                                        /* FLAG DRIVER CALLBACKS    */
+#define MmeFlagRtcAlarm         1       /* rtc alarm                */
+#define MmeFlagHdsDetect        2       /* headset detection        */
+#define MmeFlagIrdaMsg          4       /* IRDA event               */
+U16 mfwMmeDrvFlag = 0;                  /* hold driver CB flags     */
+
+static U8 battLevel = 0;                /* battery level            */
+static U8 battState = 0;                /* state of power supply    */
+static U16 hdsPresence = 0;				/* headset presence         */
+static U16 irdaMsg = 0;                 /* IRDA message             */
+
+static int mmeCommand (U32 cmd, void *h);
+
+                                        /* driver callbacks         */
+static void pwrCb (drv_SignalID_Type *signal_params);
+static void rxCb (drv_SignalID_Type *signal_params);
+static void rtcCb (drv_SignalID_Type *signal_params);
+
+static BOOL mmePrimHandler (USHORT opc, void *data);
+static int pSlot;                       /* primitive handler slot   */
+
+static void hdsCb (drv_SignalID_Type *signal_params);
+//  	xpradipg - LOCOSTO-ENH-31895 : 23 June 2005
+#ifdef FF_MMI_AUDIO_PROFILE
+#define HANDHELD		"handheld" //0
+#define LOUDSPEAKER		"handfree" // 1
+#define HEADSET			"headset"    // 2
+#define CARKIT			"carkit"   // 3
+static UBYTE currAudioDevice = MFW_AUD_HANDHELD;
+static UBYTE prevAudioDevice = MFW_AUD_HANDHELD;
+UBYTE headsetInserted = FALSE;	//indicates if the headset is inserted or not
+UBYTE carkitInserted = FALSE;		//indicates if the carkit is inserted or not
+UBYTE mfwAudPlay = FALSE;		//indicates if any other audio media is being played or not
+extern audio_set_device(char* mode);
+void mfw_audio_headSet_indication ( T_AUDIO_ACCESSORY_NOTIFICATION notify, 
+ACCESSORY_CALLBACK_PARAM callbackparam );
+void mfw_audio_carKit_indication ( T_AUDIO_ACCESSORY_NOTIFICATION notify, 
+ACCESSORY_CALLBACK_PARAM callbackparam );
+#endif
+
+void mfw_audio_set_device(int type);
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeInit            |
++--------------------------------------------------------------------+
+
+  PURPOSE : initialize equipment handler
+
+*/
+
+MfwRes mmeInit (void)
+{
+//	int i;  // RAVI
+//	 xpradipg - LOCOSTO-ENH-31895 : 23 June 2005
+//	the callback registeration variables are populated here and passed as 
+//	argument to audio_init
+#ifdef FF_MMI_AUDIO_PROFILE
+	T_ACCESSORY_CALLBACK audio_device_config[MAX_EXT_AUD_DEVICE];
+	
+	audio_device_config[CALLBACK_HEADSET].callbackFunc = mfw_audio_headSet_indication;
+	audio_device_config[CALLBACK_HEADSET].callbackVal = NULL;
+	audio_device_config[CALLBACK_CARKIT].callbackFunc = mfw_audio_carKit_indication;
+	audio_device_config[CALLBACK_CARKIT].callbackVal = NULL;
+#endif
+
+    mfwCommand[MfwTypMme] = (MfwCb) mmeCommand;
+
+    mfwMmeDrvFlag = 0;
+
+    battLevel = 0;
+    battState = 0;
+    hdsPresence = 0;
+    irdaMsg = 0;
+
+    pwr_Init(pwrCb); //power driver
+    rx_Init(rxCb);   //fieldstrength driver
+    light_Init();    //light emitting driver
+//  	xpradipg - LOCOSTO-ENH-31895 : 23 June 2005
+#ifdef FF_MMI_AUDIO_PROFILE
+    audio_Init(audio_device_config);
+#else
+    audio_Init(hdsCb); //audio driver
+#endif    
+
+    mmeBattInfo ( 10, 0);
+
+    mmeRxInfo(5,0);
+
+                                        /* install prim handler     */
+    pSlot = aci_create((T_PRIM_HANDLER)mmePrimHandler,NULL);
+
+	return MfwResOk;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeExit            |
++--------------------------------------------------------------------+
+
+  PURPOSE : finalize equipment handler
+
+*/
+
+MfwRes mmeExit (void)
+{
+    aci_delete(pSlot);                  /* remove prim handler      */
+    mfwCommand[MfwTypMme] = 0;
+
+    return MfwResOk;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeCreate          |
++--------------------------------------------------------------------+
+
+  PURPOSE : create equipment control
+
+*/
+
+MfwHnd mmeCreate (MfwHnd w, MfwEvt e, MfwCb f)
+{
+    MfwHdr *hdr = (MfwHdr *) mfwAlloc(sizeof(MfwHdr));
+    MfwMme *mme = (MfwMme *) mfwAlloc(sizeof(MfwMme));
+	MfwHdr *insert_status =0;
+	
+    if (!hdr || !mme)
+    {
+    	TRACE_ERROR("ERROR: mmeCreate() Mem Alloc Failed.");
+			
+	   	if(hdr)
+   			mfwFree((U8*)hdr,sizeof(MfwHdr));
+   		if(mme)
+   			mfwFree((U8*)mme,sizeof(MfwMme));	
+   		
+	   	return 0;
+  	}
+
+    mme->map = e;
+    mme->handler = f;
+    mme->value = 0;
+
+    hdr->data = mme;
+    hdr->type = MfwTypMme;
+
+    insert_status = mfwInsert(w,hdr);
+    
+    if(!insert_status)
+	{
+  		TRACE_ERROR("ERROR: mmeCreate() Failed to Install Handler. ");
+   		mfwFree((U8*)hdr,sizeof(MfwHdr));
+   		mfwFree((U8*)mme ,sizeof(MfwMme));
+		return 0;
+  	}
+    return insert_status;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeDelete          |
++--------------------------------------------------------------------+
+
+  PURPOSE : delete equipment control
+
+*/
+
+MfwRes mmeDelete (MfwHnd h)
+{
+    MfwRes res;
+
+    if (!h)
+        return MfwResIllHnd;
+
+    res = (mfwRemove(h)) ? MfwResOk : MfwResIllHnd;
+
+    mfwFree(((MfwHdr *) h)->data,sizeof(MfwMme));
+    mfwFree(h,sizeof(MfwHdr));
+
+    return res;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeHdsInit         |
++--------------------------------------------------------------------+
+
+  PURPOSE : init the Headset detection and setup callback handler
+
+*/
+
+MfwRes mmeHdsInit (void (*hds_init) ())
+{
+    mfwMmeDrvFlag &= ~MmeFlagHdsDetect;
+
+    return 1;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeRtcInit         |
++--------------------------------------------------------------------+
+
+  PURPOSE : init the RTC and setup the alarm callback handler
+
+extern UBYTE		clk_Init						(USHORT, drv_SignalCB_Type, UBYTE*);
+*/
+
+MfwRes mmeRtcInit (USHORT drvHandle, UBYTE *info)
+{
+    mfwMmeDrvFlag &= ~MmeFlagRtcAlarm;
+
+   return 0;  // RAVI
+}
+
+
+static int mme_backlightStatus[BL_LAST_OPTION];
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mme_setBacklightIdle   |
++--------------------------------------------------------------------+
+
+  PURPOSE : called when an event may change the backlight level/status
+
+*/
+void mme_backlightEvent(int event)
+{
+	int light;
+	if ((event >=BL_INIT) && (event <BL_LAST_OPTION))
+	{
+		light  = mme_backlightStatus[event];
+		if (light == BL_SET_IDLE)
+		{
+			light_setBacklightIdle();
+		}
+		else if (light == BL_NO_CHANGE)
+		{
+			//No change
+		}
+		else if ((light >=BL_NO_LIGHT) && (light <=BL_MAX_LIGHT))
+		{
+			mmeBackLight ((U8)light);
+		}	
+	
+	}
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mme_setBacklightIdle   |
++--------------------------------------------------------------------+
+
+  PURPOSE : called to initialise backlight events
+
+*/
+void mme_setBacklightEvent(int event, int lightLevel)
+{
+	if ((event >=BL_INIT) && (event <BL_LAST_OPTION))
+	{
+		mme_backlightStatus[event] = lightLevel;
+	}
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeBackLight       |
++--------------------------------------------------------------------+
+
+  PURPOSE : set display backlight
+
+*/
+void mmeBackLight (U8 level)
+{
+    light_SetStatus(LIGHT_DEVICE_BACKLIGHT,level);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeAudioTone       |
++--------------------------------------------------------------------+
+
+  PURPOSE : configure the buzzer
+
+*/
+
+void mmeAudioTone (U8 callTone, U8 volume, U8 toneStat)
+{
+    if (toneStat EQ TONE_SWT_OFF)
+#ifdef FF_MMI_RINGTONE /* Stop MSL Play */
+        audio_StopSoundbyID(AUDIO_SPEAKER, CALLTONE_SELECT);
+#else
+        audio_StopSoundbyID(AUDIO_SPEAKER,callTone);
+#endif
+    else
+#ifdef FF_MMI_RINGTONE /* Play MSL Ring tone */
+        audio_PlaySoundID(AUDIO_SPEAKER,CALLTONE_SELECT,volume,toneStat);
+#else
+        audio_PlaySoundID(AUDIO_SPEAKER,callTone,volume,toneStat);
+#endif
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeSetVolume       |
++--------------------------------------------------------------------+
+
+  PURPOSE : configure mic and speaker volume
+
+*/
+
+MfwRes mmeSetVolume (U16 audioIn, U16 audioOut)
+{
+    if (audioIn > 255) audioIn = 255;
+    if (audioOut > 255) audioOut = 255;
+
+	audio_SetAmplf(AUDIO_MICROPHONE,(U8) audioIn);
+    audio_SetAmplf(AUDIO_SPEAKER,(U8) audioOut);
+
+    return MfwResOk;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeRxInfo          |
++--------------------------------------------------------------------+
+
+  PURPOSE : configure signal quality information:
+            request from the PS an indication on change of the
+            rx level with n intervalls.
+            Parameters mode and level are not used in the moment.
+
+*/
+
+void mmeRxInfo (U8 intervalls, U16 level)
+{
+    rx_DCB_Type rx_DCB;
+
+    rx_DCB.Steps = intervalls;
+    rx_SetConfig(&rx_DCB);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeBattInfo        |
++--------------------------------------------------------------------+
+
+  PURPOSE : configure battery level information
+            
+
+*/
+
+void mmeBattInfo ( U8 intervalls, U16 level)
+{
+    pwr_DCB_Type pwr_DCB;
+
+    if (level > 255) level = 255;
+
+    pwr_DCB.RangeMin = (U8) level;      /* low level threshold      */
+    pwr_DCB.RangeMax = 100;             /* 100 Percent              */
+    pwr_DCB.Steps = intervalls;         /* n Steps                  */
+    pwr_SetConfig(&pwr_DCB);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : sigExec            |
++--------------------------------------------------------------------+
+
+  PURPOSE : execute equipment signal
+
+*/
+
+static int sigExec (MfwHdr *curElem, U32 evt, U32 val)
+{
+    MfwMme *ec;
+
+    while (curElem)
+    {
+        if (curElem->type == MfwTypMme)
+        {
+            ec = curElem->data;
+            if (ec->map & evt)
+            {                           /* events match             */
+                ec->value = val;
+                if (ec->handler)        /* handler valid            */
+                {
+                  // PATCH LE 06.06.00
+                  // store current mfw elem
+                  current_mfw_elem = curElem;
+                  // END PATCH LE 06.06.00
+                  if ((*(ec->handler))(evt,ec))
+                    return 1;       /* event consumed           */
+                }
+            }
+        }
+        curElem = curElem->next;
+    }
+
+    return 0;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeSignal          |
++--------------------------------------------------------------------+
+
+  PURPOSE : equipment event (called by driver/PEI)
+
+*/
+
+void mmeSignal (U32 evt, U32 value)
+{
+UBYTE temp;
+
+temp = dspl_Enable(0);
+if (mfwSignallingMethod EQ 0)
+  {
+    if (mfwFocus)
+        if (sigExec(mfwFocus,evt,value))
+		{
+			dspl_Enable(temp);            
+			return;
+		}
+    if (mfwRoot)
+        sigExec(mfwRoot,evt,value);
+  }
+  else
+    {
+      MfwHdr * h = 0;
+
+      /*
+       * Focus set, then start here
+       */
+      if (mfwFocus)
+        h = mfwFocus;
+      /*
+       * Focus not set, then start root
+       */
+      if (!h)
+        h = mfwRoot;
+
+      /*
+       * No elements available, return
+       */
+
+      while (h)
+
+
+      {
+        /*
+         * Signal consumed, then return
+         */
+        if (sigExec (h, evt, value))
+		{
+			dspl_Enable(temp);            
+			return;
+		}
+
+        /*
+         * All windows tried inclusive root
+         */
+        if (h == mfwRoot)
+		{
+			dspl_Enable(temp);            
+			return;
+		}
+
+        /*
+         * get parent window
+         */
+        h = mfwParent(mfwParent(h));
+		if(h)
+			h = ((MfwWin * )(h->data))->elems;
+      }
+      sigExec (mfwRoot, evt, value);
+      sigExec (mfwRoot, evt, value);
+
+  }
+dspl_Enable(temp);            
+return;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeCommand         |
++--------------------------------------------------------------------+
+
+  PURPOSE : handle mfw windows command
+
+*/
+
+static int mmeCommand (U32 cmd, void *h)
+{
+    switch (cmd)
+    {
+        case MfwCmdDelete:              /* delete me                */
+            if (!h)
+                return 0;
+            mmeDelete(h);
+            return 1;
+        default:
+            break;
+    }
+
+    return 0;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : rAT_PercentSQ      |
++--------------------------------------------------------------------+
+
+  PURPOSE : called by ACI on change of signal quality
+
+*/
+
+void rAT_PercentSQ (BYTE val)
+{
+    TRACE_FUNCTION("rAT_PercentSQ()");
+
+//ES!! no longer needed    mmeSignal(MfwMmeSignal,val);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : rAT_PercentBC      |
++--------------------------------------------------------------------+
+
+  PURPOSE : called by ACI on change of battery status
+
+*/
+
+void rAT_PercentBC (BYTE val)
+{
+    TRACE_FUNCTION("rAT_PercentBC()");
+
+//ES!! no longer needed    mmeSignal(MfwMmeBattery,val);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmePrimHandler     |
++--------------------------------------------------------------------+
+
+  PURPOSE : MME primitive handler
+
+*/
+
+static BOOL mmePrimHandler (USHORT opc, void *data)
+{
+    U8 level;
+    U8 state;
+//  	xpradipg - LOCOSTO-ENH-31895 : 23 June 2005
+#ifdef FF_MMI_AUDIO_PROFILE
+    U8 hdsData;
+    U8 cktData;
+#endif
+	
+
+//    TRACE_FUNCTION ("mmePrimHandler()");
+
+    switch (opc)
+    {
+        case MMI_RXLEV_IND:
+            level = ((T_MMI_RXLEV_IND *) data)->rxlev;
+            mmeSignal(MfwMmeSignal,level);
+            return TRUE;                /* processed by MME, delete */
+        case MMI_BATTERY_IND:
+            level = ((T_MMI_BATTERY_IND *) data)->volt;
+            state = ((T_MMI_BATTERY_IND *) data)->temp;
+            if (battLevel != level)
+            {
+                battLevel = level;
+                mmeSignal(MfwMmeBattery,level);
+            }
+            if (battState != state)
+            {
+                battState = state;
+                mmeSignal(MfwMmeBaState,state);
+            }
+            return TRUE;                /* processed by MME, delete */
+//  	xpradipg - LOCOSTO-ENH-31895 : 23 June 2005			
+//	the corresponding callback function is called in MMI context
+//	this comment will be removed once the sap for this is available
+#ifdef FF_MMI_AUDIO_PROFILE
+       case MMI_HEADSET_IND:
+	   	TRACE_EVENT("MMI_HEADSET_IND");
+           hdsData = ((T_MMI_HEADSET_IND *) data)->headset_status;
+           mmeSignal(MfwMmeHeadset,hdsData);
+           return TRUE;                
+       case MMI_CARKIT_IND:
+	   	TRACE_EVENT("MMI_CARKIT_IND");
+           cktData = ((T_MMI_CARKIT_IND *) data)->carkit_status;
+	    mmeSignal(MfwMmeCarkit, cktData);
+           return TRUE;  
+#endif
+    }
+
+    return FALSE;                       /* not processed, forward   */
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mmeFlagHandler     |
++--------------------------------------------------------------------+
+
+  PURPOSE : MME driver flag handler
+
+*/
+
+void mmeFlagHandler (void)
+{
+    TRACE_FUNCTION ("mmeFlagHandler()");
+
+    while (mfwMmeDrvFlag)
+    {
+        if (mfwMmeDrvFlag & MmeFlagRtcAlarm)
+        {
+            mfwMmeDrvFlag &= ~MmeFlagRtcAlarm;
+            mmeSignal(MfwMmeRtcAlarm,0);
+        }
+        else if (mfwMmeDrvFlag & MmeFlagHdsDetect)
+        {
+            mfwMmeDrvFlag &= ~MmeFlagHdsDetect;
+            mmeSignal(MfwMmeHdsDetect,hdsPresence);
+        }
+        else if (mfwMmeDrvFlag & MmeFlagIrdaMsg)
+		{
+		}
+        else
+        {
+            mfwMmeDrvFlag = 0;
+        }
+    }
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : pwr_callback       |
++--------------------------------------------------------------------+
+
+  PURPOSE : Called by battery driver
+
+*/
+
+static void pwrCb (drv_SignalID_Type *signal_params)
+{
+    pwr_Status_Type *para;
+    PALLOC(battery_ind, MMI_BATTERY_IND);
+
+    para = (pwr_Status_Type *) signal_params->UserData;
+    battery_ind->volt = para->BatteryLevel;
+    battery_ind->temp = para->Status;
+
+    PSENDX(ACI,battery_ind);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : rx_callback        |
++--------------------------------------------------------------------+
+
+  PURPOSE : Called by fieldstrength driver
+
+*/
+
+static void rxCb (drv_SignalID_Type *signal_params)
+{
+    rx_Status_Type *para;
+    PALLOC(rxlevel_ind,MMI_RXLEV_IND);
+
+    para = (rx_Status_Type *) signal_params->UserData;
+    rxlevel_ind->rxlev = para->actLevel;
+
+    PSENDX(ACI,rxlevel_ind);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : rtcCb              |
++--------------------------------------------------------------------+
+
+  PURPOSE : alarm callback from RTC
+
+*/
+
+static void rtcCb (drv_SignalID_Type *signal_params)
+{
+    mfwMmeDrvFlag |= MmeFlagRtcAlarm;
+    vsi_c_awake(VSI_CALLER_SINGLE);
+}
+
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : hdsCb              |
++--------------------------------------------------------------------+
+
+  PURPOSE : callback from headset detection
+
+*/
+
+static void hdsCb (drv_SignalID_Type *signal_params)
+{
+	if (signal_params->SignalType == 1)
+	{
+		hdsPresence = (U16)signal_params->UserData;
+	    mfwMmeDrvFlag |= MmeFlagHdsDetect;
+		vsi_c_awake(VSI_CALLER_SINGLE);
+	}
+}
+#ifdef FF_MMI_AUDIO_PROFILE
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mfw_set_stereo_path              |
++--------------------------------------------------------------------+
+
+  PURPOSE : This sets the stereo path for the current audio profile
+
+*/
+
+void mfw_set_stereo_path(int device)
+{
+	TRACE_FUNCTION("mfw_set_stereo_path()");
+
+	TRACE_EVENT_P1("Device === %d", device);
+	 switch(device)
+	 {
+	  case MFW_AUD_HEADSET:
+	  	audio_set_path(AUDIO_STEREO_SPEAKER_HEADPHONE, TRUE);
+	   	break;
+	  case MFW_AUD_HANDHELD:
+	   	audio_set_path(AUDIO_STEREO_SPEAKER_HANDHELD, TRUE);
+	   	break;
+	  case MFW_AUD_CARKIT:
+	   	audio_set_path(AUDIO_STEREO_SPEAKER_CARKIT, TRUE);
+		break;
+	  case MFW_AUD_LOUDSPEAKER:
+		audio_set_path(AUDIO_STEREO_SPEAKER_HANDFREE, TRUE);
+	   	break;
+	  }
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mfw_unset_stereo_path              |
++--------------------------------------------------------------------+
+
+  PURPOSE : This resets the voice path for the current audio profile
+
+*/
+void mfw_unset_stereo_path(int device)
+{
+	TRACE_FUNCTION("mfw_unset_stereo_path()");
+
+	TRACE_EVENT_P1("Device === %d", device);
+	switch(device)
+	 {
+	  case MFW_AUD_HEADSET:
+	   	audio_set_path(AUDIO_SPEAKER_HEADSET, FALSE);
+	   	break;
+	  case MFW_AUD_HANDHELD:
+	   	audio_set_path(AUDIO_SPEAKER_HANDHELD, FALSE);
+	   	break;
+	  case MFW_AUD_CARKIT:
+	   	audio_set_path(AUDIO_SPEAKER_CARKIT, FALSE);
+		break;
+	  case MFW_AUD_LOUDSPEAKER:
+		audio_set_path(AUDIO_SPEAKER_HANDFREE, FALSE);
+	   	break;
+	  }
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mfw_audio_headSet_indication              |
++--------------------------------------------------------------------+
+
+  PURPOSE :Callback function for the events related to headset  and create and post a primitive
+
+*/
+void mfw_audio_headSet_indication ( T_AUDIO_ACCESSORY_NOTIFICATION notify, 
+ACCESSORY_CALLBACK_PARAM callbackparam )
+{
+
+	PALLOC(hdsData,MMI_HEADSET_IND);
+	hdsData->headset_status = (U8)notify;
+	PSENDX(ACI,hdsData);
+
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mfw_audio_headSet_indication              |
++--------------------------------------------------------------------+
+
+  PURPOSE :Callback function for the events related to carkit and create and post a primitive
+
+*/
+void mfw_audio_carKit_indication ( T_AUDIO_ACCESSORY_NOTIFICATION notify, 
+	ACCESSORY_CALLBACK_PARAM callback_param )
+{
+	PALLOC(cktData,MMI_CARKIT_IND);
+	cktData->carkit_status = (U8)notify;
+	PSENDX(ACI,cktData);
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mfw_audio_headSet_indication              |
++--------------------------------------------------------------------+
+
+  PURPOSE :handles the request to switch to the respective device from the 
+		    Bmi when the indications of insert and removal are received
+
+*/
+void mfw_audio_device_indication( U8 notify)
+{	
+	TRACE_FUNCTION("mfw_audio_device_indication()");
+
+	TRACE_EVENT_P1(" Indication Type == %d",notify);
+	switch(notify)
+	{	
+		case AUDIO_HEADSET_PLUGGED:
+			if(currAudioDevice != MFW_AUD_HEADSET)
+			{
+				mfw_audio_set_device(MFW_AUD_HEADSET);
+					headsetInserted = TRUE;
+			}
+			break;
+		case AUDIO_HEADSET_UNPLUGGED:
+			if( currAudioDevice == MFW_AUD_HEADSET)
+			{
+				mfw_audio_set_device(MFW_AUD_HANDHELD );
+	
+			}
+			headsetInserted = FALSE;
+			break;
+		case AUDIO_HEADSET_HOOK_DETECT:
+				break;
+		case AUDIO_CARKIT_PLUGGED:
+			if(currAudioDevice != MFW_AUD_CARKIT)
+			{
+				mfw_audio_set_device(MFW_AUD_CARKIT);
+				carkitInserted = TRUE;
+			}
+			break;
+		case AUDIO_CARKIT_UNPLUGGED:
+			if( currAudioDevice == MFW_AUD_CARKIT)
+			{
+				if(headsetInserted == TRUE)
+				{
+					mfw_audio_set_device (MFW_AUD_HEADSET);
+				}
+				else
+				{
+					mfw_audio_set_device (MFW_AUD_HANDHELD);
+				}
+			}
+			carkitInserted = FALSE;
+			break;
+		default:
+			break;
+	}
+}
+/*
++--------------------------------------------------------------------+
+| PROJECT : MMI-Framework (8417)        MODULE  : MFW_MME            |
+| STATE   : code                        ROUTINE : mfw_audio_headSet_indication              |
++--------------------------------------------------------------------+
+
+  PURPOSE :This function handles the switch between the handheld and loudspeaker. 
+		    The type of device to be loaded will be posted from the menu selection
+		    When the profile changes if there is any other media played then the 
+		    speaker should be set to stereo speaker
+
+*/
+void mfw_audio_set_device(int type)
+{
+/*Description: this array holds the file names on the ffs in which the audio profiles are stored.
+The file names are yet to be confirmed from the audio services group*/
+	//char aud_cg_file[4][15] = {"handheld","loudspeaker","headset","carkit"};
+	TRACE_FUNCTION("mfw_audio_set_device()");
+
+	TRACE_EVENT_P1("type of device = %d",type);
+	switch(type)
+	{
+		case MFW_AUD_HANDHELD:
+			audio_set_device((char*)HANDHELD);// (aud_cg_file[HANDHELD] );
+			currAudioDevice = MFW_AUD_HANDHELD;
+			break;
+		case MFW_AUD_LOUDSPEAKER:
+			audio_set_device((char*) LOUDSPEAKER);//(aud_cg_file[LOUDSPEAKER]);
+			currAudioDevice = MFW_AUD_LOUDSPEAKER;
+			break;
+		case MFW_AUD_HEADSET:
+			audio_set_device((char*)HEADSET);//(aud_cg_file[HEADSET]);
+			currAudioDevice = MFW_AUD_HEADSET;
+			break;
+		case MFW_AUD_CARKIT:
+			audio_set_device((char*)CARKIT);//(aud_cg_file[CARKIT]);
+			currAudioDevice = MFW_AUD_CARKIT;
+		default:
+			break;
+	}
+	if(TRUE == mfwAudPlay)
+  		mfw_set_stereo_path(currAudioDevice);
+
+}
+
+#ifdef ISAMPLE
+/* OMAPS00057367, 3 Dec 2005, nekkareb : start */
+/* Function mfw_get_current_audioDevice modified to read the
+     current audio device using the audio service entity function
+     audio_full_access_read. This solves some synchronisation
+     problems b/n Audio & MMI for the DR OMAPS00057367 */
+/*returns the current active audio device*/     
+int mfw_get_current_audioDevice()
+{
+	T_AUDIO_FULL_ACCESS_READ read;
+	INT8 speaker;
+
+	read.variable_indentifier = AUDIO_SPEAKER_MODE;
+	read.data = &speaker;
+	
+	TRACE_FUNCTION("mfw_get_current_audioDevice()");
+	audio_full_access_read(&read );
+
+	switch(speaker)
+	{
+	case AUDIO_SPEAKER_NONE:
+		TRACE_EVENT("mfw_get_current_audioDevice() - SPEAKER PATH NOT CONFIGURED");
+		currAudioDevice = MFW_AUD_HANDHELD; //Need to check the mapping
+		break;
+	case AUDIO_SPEAKER_HANDHELD:
+		currAudioDevice = MFW_AUD_HANDHELD;
+		break;
+	case AUDIO_SPEAKER_HEADSET:
+		currAudioDevice = MFW_AUD_HEADSET;
+		break;
+	case AUDIO_SPEAKER_AUX:
+		currAudioDevice = MFW_AUD_LOUDSPEAKER; //Need to check the mapping
+		break;
+	case AUDIO_SPEAKER_CARKIT:
+		currAudioDevice = MFW_AUD_CARKIT;
+		break;
+	case AUDIO_SPEAKER_HANDFREE:
+	case AUDIO_SPEAKER_HANDFREE_CLASS_D:
+		currAudioDevice = MFW_AUD_LOUDSPEAKER;
+		break;
+	case AUDIO_SPEAKER_INVERTED_VOICE:
+		currAudioDevice = MFW_AUD_HEADSET; //Need to check the mapping
+		break;
+	}
+
+	return currAudioDevice;
+}
+/* OMAPS00057367, 3 Dec 2005, nekkareb : end */
+#else
+/*returns the current active audio device*/
+int mfw_get_current_audioDevice()
+{
+	TRACE_FUNCTION("mfw_get_current_audioDevice()");
+	return currAudioDevice;
+}
+#endif //ISAMPLE
+#endif
+
+