FreeCalypso > hg > fc-tourmaline
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); }