找回密码
 注册
搜索
查看: 805|回复: 6

[讨论] 请教关于日程表流程。

[复制链接]
发表于 2010-6-10 10:30:58 | 显示全部楼层 |阅读模式
MTK平台 ,当设定了约会等事件,到达日期时,会自动调用相应函数mmi_tdl_entry_reminder。
我想知道该机制,是什么东西在控制调用。
简单看了下 ,好像有个timer在控制,这个是啥timer,设置回调的地方我也没找到。
请高手解惑 。谢谢。
发表于 2010-6-10 10:47:41 | 显示全部楼层
闹钟机制
void TDLFCBInit(void)
{
    mmi_alm_set_start_index(ALM_TYPE_TDL, ALM_TDL_START);
    AlmSetExpiryTimeCB(ALM_TYPE_TDL, TDLExpiryTimeCBH);
    AlmSetExpiryHandlerCB(ALM_TYPE_TDL, TDLExpiryHandler);
    AlmSetInitHandlerCB(ALM_TYPE_TDL, InitToDoListApp, TDLReInitQueueCBH);
    AlmSetStopAlarmCB(ALM_TYPE_TDL, mmi_tdl_snooze_handler);
}

AlmSetExpiryTimeCB()设置闹钟时间
AlmSetExpiryHandlerCB() 到点执行函数
点评回复

使用道具 举报

 楼主| 发表于 2010-6-10 11:11:46 | 显示全部楼层
谢谢楼上回答。很不错。
再补充一问:
打算实现整点报时功能。但是使用闹钟机制,则时间被设定死了。我希望每到整点时,则调用XXX函数,如何实现比较方便一点。
点评回复

使用道具 举报

发表于 2010-6-10 11:29:09 | 显示全部楼层
不会,那个只是设置第一次闹钟的时间,函数里有个参数
*freq = ALM_FREQ_HOURLY 即可
实现整点报时大体上只需要这4个函数
    mmi_alm_set_start_index();
    AlmSetExpiryTimeCB();
    AlmSetExpiryHandlerCB();
    AlmSetInitHandlerCB();
第一个是激活你的闹钟,第四个是重置用于当你修改时间后重新入列
点评回复

使用道具 举报

 楼主| 发表于 2010-6-10 13:26:11 | 显示全部楼层
mmi_alm_set_start_index(ALM_TYPE_TDL, ALM_TDL_START);
    AlmSetExpiryTimeCB(ALM_TYPE_TDL, TDLExpiryTimeCBH);
    AlmSetExpiryHandlerCB(ALM_TYPE_TDL, TDLExpiryHandler);
    AlmSetInitHandlerCB(ALM_TYPE_TDL, InitToDoListApp, TDLReInitQueueCBH);
以上是日程表的。
假如我实现整点报时。
mmi_alm_set_start_index(ALM_TYPE_TIMEKEEPING, ALM_TIMEKEEPING_START);
   以上两个参数需要定义一下。对么?
AlmSetExpiryTimeCB(ALM_TYPE_TIMEKEEPING, TimekeepingExpiryTimeCBH);
TimekeepingExpiryTimeCBH此函数内部设置第一次响铃时间么?此时间设置给谁?假如此时设置的时间比当前时间还有往前。是不是永远没有第一次响铃了?
AlmSetExpiryHandler(XXX)到点函数xxx执行后,需要手动调用下一次闹铃的相关信息么?
AlmSetInitHandler()此函数第二参数里做什么?何时会被调用。第三参数更新队列里的事件,是使用AlmInsertIntoQueue进行插入么,是否需要移除已经响铃过的报时事件?第三参数设置的函数何时会被调用?
点评回复

使用道具 举报

发表于 2010-6-10 21:20:22 | 显示全部楼层
你可以对比闹钟和日程表一起看,函数里的参数都要自己来定义的,索引值按定义的先后顺序来划分优先级(有2个闹钟一起到点的那种),当你开机的时候闹钟被触发,按照你设置的时间来算,你在设置时间的函数里将
*freq = ALM_FREQ_HOURLY
一个小时后自然会报,
AlmSetInitHandler()第二个参数可以为空,要的只是重置时间后重新入队,
种种你自己去看看源码,做过了才理解得深刻一些
点评回复

使用道具 举报

 楼主| 发表于 2010-6-11 09:23:10 | 显示全部楼层
void LCT_TTSTimeKeepingSet(void)
{
    mmi_alm_set_start_index(ALM_TYPE_TKP, ALM_LCTTTSPLAY_TKP);
    AlmSetExpiryTimeCB(ALM_TYPE_TKP,TKPExpiryTimeCBH);
    AlmSetExpiryHandlerCB(ALM_TYPE_TKP, TKPExpiryHandler);
    AlmSetInitHandlerCB(ALM_TYPE_TKP, InitTKPApp, TKPReInitQueueCBH);
    AlmSetStopAlarmCB(ALM_TYPE_TKP, mmi_TKP_snooze_handler);
}
//设置起始时间
static void TKPExpiryTimeCBH(U8 index, MYTIME *alarmTime, U8 *Freq, U8 *WeekDays, MYTIME *preReminder)
{

    MYTIME currTime, incTime;
   

    DTGetRTCTime(&currTime);

    alarmTime->nYear = currTime.nYear;
    alarmTime->nMonth = currTime.nMonth;
    alarmTime->nDay = currTime.nDay;
    alarmTime->nHour = 0;
    alarmTime->nMin = 0;
    alarmTime->nSec = 0;
    *Freq = ALM_FREQ_HOURLY;
    *WeekDays = 0;
   

}

static U8 TKPExpiryHandler(U8 index, U16 *period, BOOL power_on)
{  
        if (!LCT_TTSCanPlay(LCT_TTS_TIMEKEEPING))
        {
                *period = ALM_WITHOUD_EXPIRY_PERIOD;
        }
        else
        {
                *period = ALM_DEFAULT_EXPIRY_PERIOD;
                //mmi_tdl_entry_birthday_reminder();
                DisplayPopup((PU8) GetString(STR_GLOBAL_OK),
                        IMG_GLOBAL_WARNING,
                        1,
                        4000,
                        WARNING_TONE );
        }       

    if (!power_on)
    {
        g_pwr_context.PowerOnMMIStatus = MMI_POWER_ON_IDLE; /* 0x80: Alarm idle screen */
    #ifdef __MMI_DUAL_SIM_MASTER__
            g_pwr_context_2.PowerOnMMIStatus = MMI_POWER_ON_IDLE;
        #endif
    }
       
    return ALM_HAS_IND;
}

static void InitTKPApp(void)
{
     
}

static void TKPReInitQueueCBH(void)
{
    AlmInsertIntoQueue(ALM_LCTTTSPLAY_TKP, FALSE);
}

static void mmi_TKP_snooze_handler(void)
{
}

附上我的代码如上,我将 AlmSetAlarm(ALM_LCTTTSPLAY_TKP);放置在开机初始化函数里,目前已实现整点弹出popup。
现在还需要在手机运行后通过手选进行关闭和开启。使用哪两个接口? AlmSetAlarm是否就是开启的接口?remove是否是关闭的接口?
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-2-26 06:29 , Processed in 0.045640 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表