diff src/ui/mfw/mfw_mme.c @ 84:7160f0d005d2

first stage of actual FreeCalypso backlight rework
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 26 Oct 2020 23:46:55 +0000
parents 77321341946c
children b7421cdea22b
line wrap: on
line diff
--- a/src/ui/mfw/mfw_mme.c	Mon Oct 26 21:51:55 2020 +0000
+++ b/src/ui/mfw/mfw_mme.c	Mon Oct 26 23:46:55 2020 +0000
@@ -129,6 +129,7 @@
 
 #include "mfw_mfw.h"
 #include "mfw_sys.h"
+#include "mfw_tim.h"
 #include "prim.h"
 #include "message.h"
 #include "prim.h"
@@ -181,6 +182,20 @@
 static U8 battState = 0;                /* state of power supply    */
 static U16 hdsPresence = 0;             /* headset presence         */
 
+/* backlight control internals */
+#define	LIGHT_LEVEL_OFF	0
+#define	LIGHT_LEVEL_LOW	50
+#define	LIGHT_LEVEL_MAX	255
+
+UBYTE mme_backlight_incall;
+static U8 current_backlight_level;
+
+static MfwHdr bltimIdleH;	/* backlight timer for idle state */
+static MfwTim bltimIdle;
+static MfwHdr bltimCallH;	/* backlight timer for in-call state */
+static MfwTim bltimCall;
+static int bl_timeout_idle (U32 t, void *h);
+static int bl_timeout_call (U32 t, void *h);
 
 static int mmeCommand (U32 cmd, void *h);
 
@@ -426,6 +441,15 @@
     battState = 0;
     hdsPresence = 0;
 
+    /* init FreeCalypso backlight control infrastructure */
+    bltimIdle.handler = bl_timeout_idle;
+    bltimIdle.time = 30000;
+    bltimIdleH.data = &bltimIdle;
+    bltimIdleH.type = MfwTypTim;
+    bltimCall.handler = bl_timeout_call;
+    bltimCall.time = 10000;
+    bltimCallH.data = &bltimCall;
+    bltimCallH.type = MfwTypTim;
 
     fchg_register_event_handler(pwrCb);	/* battery driver */
     rx_Init(rxCb);	//fieldstrength driver
@@ -630,56 +654,6 @@
 }
 
 
-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            |
@@ -689,9 +663,46 @@
   PURPOSE : set display backlight
 
 */
-void mmeBackLight (U8 level)
+static void mmeBackLight (U8 level)
+{
+    if (level != current_backlight_level) {
+	light_SetStatus(LIGHT_DEVICE_BACKLIGHT, level);
+	current_backlight_level = level;
+    }
+}
+
+/* new FreeCalypso backlight control functions */
+
+void mme_backlightOnEvent (void)
 {
-    light_SetStatus(LIGHT_DEVICE_BACKLIGHT,level);
+	timStop(&bltimIdleH);
+	timStop(&bltimCallH);
+	mmeBackLight(LIGHT_LEVEL_MAX);
+	if (mme_backlight_incall)
+		timStart(&bltimCallH);
+	else
+		timStart(&bltimIdleH);
+}
+
+int mme_backlightKeyPress (void)
+{
+	int ret;
+
+	ret = (current_backlight_level == LIGHT_LEVEL_OFF);
+	timStop(&bltimIdleH);
+	timStop(&bltimCallH);
+	mmeBackLight(LIGHT_LEVEL_MAX);
+	return ret;
+}
+
+static int bl_timeout_idle (U32 t, void *h)
+{
+	mmeBackLight(LIGHT_LEVEL_OFF);
+}
+
+static int bl_timeout_call (U32 t, void *h)
+{
+	mmeBackLight(LIGHT_LEVEL_LOW);
 }