在MTK中添加TASK与常用函数分析

声明TASK的ID和MOD类型
在custom_config.h中custom_task_indx_type添加ID

如:

typedef enum {
   INDX_CUSTOM1 = RPS_CUSTOM_TASKS_BEGIN,
   INDX_CUSTOM2,
   #if defined(__MIIPTS_TASK_SUPPORT__)
   INDX_MIIPTS,
   #endif
#if defined(__ELIVE_SUPPORT__)
   INDX_ELIVE,
#if defined(__ELIVE_IPTV_SUPPORT__) || defined(__ELIVE_RDO_SUPPORT__)       
   INDX_ELIVECORE,
#endif
#endif
#if defined(__MOTION_SENSOR_SUPPORT_MMI_NEW__)
   INDX_GSENSOR,
#endif
#if defined(FLASHLIGHT_LED_SUPPORT)
   INDX_FLASHLIGHT,
#endif
#if defined(BCT3288_SUPPORT)
   INDX_BCT3288LED,
#endif

#if  defined(__OPEN_PLATFORM_SUPPORT__)
    INDX_CUSTOM_OPEN,
  #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
    INDX_MQQ,
  #endif  // #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
#endif  // #if  defined(__OPEN_PLATFORM_SUPPORT__)

   RPS_CUSTOM_TASKS_END
} custom_task_indx_type;

中的

#if defined(FLASHLIGHT_LED_SUPPORT)
   INDX_FLASHLIGHT,
#endif
为 新加ID;

在custom_module_type中添加模块类型

如:

typedef enum {
   MOD_CUSTOM1 = MOD_CUSTOM_BEGIN,
   MOD_CUSTOM2,
   #if defined(__MIIPTS_TASK_SUPPORT__)
   MOD_MIIPTS,
   #endif
#if defined(__ELIVE_SUPPORT__)
   MOD_ELIVE,
#if defined(__ELIVE_IPTV_SUPPORT__) || defined(__ELIVE_RDO_SUPPORT__) 
   MOD_ELIVECORE,
#endif
#endif
#if defined(__MOTION_SENSOR_SUPPORT_MMI_NEW__)
   MOD_SC_GSENSOR,
#endif
#if defined(FLASHLIGHT_LED_SUPPORT)
   MOD_FLASHLIGHT,
#endif
#if defined(BCT3288_SUPPORT)
   MOD_BCT3288LED,
#endif

#if defined(__OPEN_PLATFORM_SUPPORT__)
    MOD_CUSTOM_OPEN,
  #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
    MOD_MQQ,
  #endif  // #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
#endif  // #if defined(__OPEN_PLATFORM_SUPPORT__)

   MOD_CUSTOM_END
} custom_module_type;

#if defined(FLASHLIGHT_LED_SUPPORT)
   MOD_FLASHLIGHT,
#endif
为 新加MOD的类型;

在custom_config.c中的数组custom_mod_task_g中把声明的ID加入:

如:

custom_task_indx_type custom_mod_task_g[ MAX_CUSTOM_MODS ] =
{
   INDX_CUSTOM1,        /* MOD_CUSTOM1 */
   INDX_CUSTOM2,        /* MOD_CUSTOM2 */
   #if defined(__MIIPTS_TASK_SUPPORT__)
   INDX_MIIPTS,         // MOD_MIIPTS
   #endif
#if defined(__ELIVE_SUPPORT__)
   INDX_ELIVE,
#if defined(__ELIVE_IPTV_SUPPORT__) || defined(__ELIVE_RDO_SUPPORT__)       
   INDX_ELIVECORE,
#endif
#endif
#if defined(__MOTION_SENSOR_SUPPORT_MMI_NEW__)
   INDX_GSENSOR,
#endif
#if defined(FLASHLIGHT_LED_SUPPORT)
   INDX_FLASHLIGHT,
#endif
#if defined(BCT3288_SUPPORT)
   INDX_BCT3288LED,
#endif

#if  defined(__OPEN_PLATFORM_SUPPORT__)
    INDX_CUSTOM_OPEN,            /* MOD_CUSTOM_OPEN */
  #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
    INDX_MQQ,            /* MOD_QQ */
  #endif  // #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
#endif  // #if  defined(__OPEN_PLATFORM_SUPPORT__)

   INDX_NIL             /* Please end with INDX_NIL element */
};
在 函数custom_comp_config_tbl中添加TASK的实现函数和TASK的信息声明

如:

{
   /* INDX_CUSTOM1 */
   {"CUST1", "CUST1 Q", 210, 1024, 10, 0,
#ifdef CUSTOM1_EXIST
   custom1_create, KAL_FALSE
#else  
   NULL, KAL_FALSE
#endif
   },

   /* INDX_CUSTOM2 */
   {"CUST2", "CUST2 Q", 211, 1024, 10, 0,
#ifdef CUSTOM2_EXIST
   custom2_create, KAL_FALSE
#else
   NULL, KAL_FALSE
#endif
   },
   #if defined(__MIIPTS_TASK_SUPPORT__)
   {"MiiPTS", "MiiPTS Q", 212, 1024*4, 10, 0, miipts_task_create, KAL_FALSE},
   #endif
#if defined(__ELIVE_SUPPORT__)
    {"ELIVE", "ELIVE Q", KAL_PRIORITY_CLASS17+2, 1024*3, 80, 0,
    Elive_create, KAL_FALSE} ,
#if defined(__ELIVE_IPTV_SUPPORT__) || defined(__ELIVE_RDO_SUPPORT__) 
    {"ELIVECORE", "ELIVECORE Q", KAL_PRIORITY_CLASS17+4, 1024*3, 20, 10,
    EliveCoreTask, KAL_FALSE} , 
#endif
#endif

#if defined(__MOTION_SENSOR_SUPPORT_MMI_NEW__)
   /* INDX_GSENSOR */
   {"Gsensor", "Gsensor Q", 195, 1024, 20, 10,
   SC_gsensor_create, KAL_FALSE},  
#endif 
#if defined(FLASHLIGHT_LED_SUPPORT)
   /* INDX_FLASHLIGHT */
   {"FLHLT", "FLHLT Q", 200, 1024, 10, 0,
   SC_flashlight_create, KAL_FALSE},
#endif
#if defined(BCT3288_SUPPORT)
   /* INDX_BCT3288LED */
   {"BCT3288", "BCT3288 Q", 200, 1024, 20, 0,
   SC_BCT3288Flashlight_create, KAL_FALSE},
#endif


#if  defined(__OPEN_PLATFORM_SUPPORT__)
    { "CUSTOPEN", "CUSTOPEN Q", 220, 4096, 64, 0, Open_TaskCreate, KAL_FALSE },
  #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
    { "MQQ", "MQQ Q", 212, 4096, 100, 10, mqq_create, KAL_FALSE },
  #endif  // #if  defined(OPEN_CUSTOM_PRODUCT_QQ_DOWN_07A) && !defined(WIN32)
#endif  // #if  defined(__OPEN_PLATFORM_SUPPORT__)

}

中的

#if defined(FLASHLIGHT_LED_SUPPORT)
   /* INDX_FLASHLIGHT */
   {"FLHLT", "FLHLT Q", 200, 1024, 10, 0,
   SC_flashlight_create, KAL_FALSE},
#endif
如果TASK需要与别的TASK交互,要使用消息,消息ID在文件custom_sap.h中定义, 该头文件被包含在文件stack_msgs.h中,最终合并入msg_type枚举中。

如:

MSG_ID_CUSTOM1_CUSTOM2  =  CUSTOM_MSG_CODE_BEGIN,
MSG_ID_CUSTOM2_CUSTOM1,
#if defined(__MIIPTS_TASK_SUPPORT__)
MSG_ID_MIIPTS_ENCODE_REQ,
MSG_ID_MIIPTS_ENCODE_CNF,
MSG_ID_MIIPTS_DECODE_REQ,
MSG_ID_MIIPTS_DECODE_CNF,
#endif // __MIIPTS_TASK_SUPPORT__
#ifdef __ELIVE_SUPPORT__
MSG_ID_ELIVE_BASE,
MSG_ID_ELIVE_END  = MSG_ID_ELIVE_BASE + 50,
#endif
#if defined(__ALLKEY_EINT_FOR_KEYBOARD__)
MSG_ID_ALLKEYBOARD,
#endif
#if defined(__MOTION_SENSOR_SUPPORT_MMI_NEW__)
MSG_ID_GSENSOR_CHECK_START_REQ,
MSG_ID_GSENSOR_CHECK_STOP_REQ,
MSG_ID_GSENSOR_CHECK_ROTATE_IND,
#endif
#if defined(FLASHLIGHT_LED_SUPPORT)
MSG_ID_FLASHLIGHT_PLAY_REQ,
MSG_ID_FLASHLIGHT_STOP_REQ,
#endif
#ifdef __MMI_IMAP__
MSG_ID_IMAP,
#endif
#if defined(FIVE_CLAM_SUPPORT)
MSG_ID_FIVE_CLAM_SUPPORT,
#endif
#if defined(FOUR_CLAM_SUPPORT)
MSG_ID_FOUR_CLAM_SUPPORT,
#endif
#if defined(E73_TWO_CLAM_SUPPORT)
MSG_ID_TWO_CLAM_SUPPORT,
#endif
#if defined(BCT3288_SUPPORT)
MSG_ID_BCT3288FLASHLIGHT_LEFTKEY_PRESS,
MSG_ID_BCT3288FLASHLIGHT_RIGHTKEY_PRESS,
MSG_ID_BCT3288FLASHLIGHT_UPKEY_PRESS,
MSG_ID_BCT3288FLASHLIGHT_DOWNKEY_PRESS,
MSG_ID_BCT3288FLASHLIGHT_RIGHT_ROTATE,
MSG_ID_BCT3288FLASHLIGHT_LEFT_ROTATE,
MSG_ID_BCT3288FLASHLIGHT_MP3_EFFECT,
MSG_ID_BCT3288FLASHLIGHT_STOP_REQ,
MSG_ID_BCT3288FLASHLIGHT_ROTATE_CNF,
#endif
中 的

#if defined(FLASHLIGHT_LED_SUPPORT)
MSG_ID_FLASHLIGHT_PLAY_REQ,
MSG_ID_FLASHLIGHT_STOP_REQ,
#endif
再 看TASK函数的实现和调用:

kal_bool SC_flashlight_create(comptask_handler_struct **handle)
{
 static const comptask_handler_struct custom_handler_info =
 {
  SC_flashlight_task_main, /* task entry function */
  SC_flashlight_init, /* task initialization function */
  NULL,  /* task configuration function */
  NULL,  /* task reset handler */
  NULL,  /* task termination handler */
 };

 *handle = (comptask_handler_struct *)&custom_handler_info;
 return KAL_TRUE;
}

task的处理函数,主要是获取TASK的ID函数kal_get_my_task_index和获取消息内容函数 receive_msg_ext_q:
void SC_flashlight_task_main(task_entry_struct * task_entry_ptr)
{
 ilm_struct current_ilm;
 kal_uint32 my_index;

 kal_get_my_task_index(&my_index);

 while(1)
 {
  receive_msg_ext_q( task_info_g[task_entry_ptr->task_indx].task_ext_qid,
         &current_ilm);
  stack_set_active_module_id( my_index, current_ilm.dest_mod_id);
   if(current_ilm.msg_id==MSG_ID_FLASHLIGHT_PLAY_REQ)
  {
   //ET6204_init();
   SC_et6204_play(&current_ilm);
  }
  else if(current_ilm.msg_id==MSG_ID_FLASHLIGHT_STOP_REQ)
  {
   StopTimer(LED_FLASH_TIMER); 
   ET6204_ALL_OFF();
   Poweroff_ET6204();
  }
  free_ilm( &current_ilm);
 }
}

初始化函数,进入该TASK里需要初始化的全局变量等:

kal_bool SC_flashlight_init(task_indx_type indx)
{
 ET6204_init();
 return KAL_TRUE;
}

消息处理函数,主要是收到消息的处理函数,掌握 et6204_light_play_ind的定义与使用:

void SC_et6204_play(ilm_struct *ilm_ptr)
{
 kal_uint16 et6204_display[7];
 int i;
 et6204_light_play_ind *play_data = (et6204_light_play_ind *)(ilm_ptr->local_para_ptr);

 ET6204_POWER_HIGH;
 ET6204_ALL_OFF();
 if (get_phnset_led_setting() == 0)
 {
  ET6204_ALL_OFF();
  Poweroff_ET6204();
  return;
 }

 if(play_data->type == 0xf0) 
 {
  et6204_incoming_flag=TRUE;
  flash_count = 0;
  et6204_incoming_number[et6204_incoming_length] = 0x30+10; //jacky added
  et6204_incoming_length ++;  
  mmi_incoming_start_et6204_ind_nubmer();
  return;
 } 
/* else if(play_data->type == 0x02) 
 {
  et6204_audioplayer_flag = TRUE;
  mmi_audioplayer_start_et6204_ind();
  return;
 }*/  
 else
 {
  g_led_count = 0;
  g_ec6204_type = play_data->type;
  g_ec6204_play_num = play_data->play_num;
  mmi_start_et6204();
 }
}
  消息发送,主要是如何填充消息和发送函数OslMsgSendExtQueue:

void  mmi_et6204_stop_display()
{
 MYQUEUE Message;
 et6204_light_play_ind *et6204_play_req;

 ET6204_POWER_LOW;
 et6204_incoming_flag = FALSE;
 et6204_poweron_flag = FALSE;
 et6204_audioplayer_flag = FALSE; 
 /*----------------------------------------------------------------*/
 /* Code Body                                                      */
 /*----------------------------------------------------------------*/
 Message.oslMsgId = MSG_ID_FLASHLIGHT_STOP_REQ;
 et6204_play_req = OslConstructDataPtr(sizeof(et6204_light_play_ind));
 et6204_play_req->type= 1;

 Message.oslDataPtr = (oslParaType*) et6204_play_req;
 Message.oslPeerBuffPtr = NULL;
 Message.oslSrcId = MOD_MMI;
 Message.oslDestId = MOD_FLASHLIGHT;
 OslMsgSendExtQueue(&Message);
 return;
}
void mmi_et6204_start_display(kal_uint8 type,kal_uint8 play_num)
{
 MYQUEUE Message;
 et6204_light_play_ind *et6204_play_req;
 //kal_prompt_trace(MOD_BMT,"mmi_et6204_start_display::");
 /*----------------------------------------------------------------*/
 /* Code Body                                                      */
 /*----------------------------------------------------------------*/
 StopTimer(LED_FLASH_TIMER); 
 Message.oslMsgId = MSG_ID_FLASHLIGHT_PLAY_REQ;
 et6204_play_req = OslConstructDataPtr(sizeof(et6204_light_play_ind));
 et6204_play_req->type= type;
 et6204_play_req->play_num= play_num;
 
 Message.oslDataPtr = (oslParaType*) et6204_play_req;
 Message.oslPeerBuffPtr = NULL;
 Message.oslSrcId = MOD_MMI;
 Message.oslDestId = MOD_FLASHLIGHT;
 OslMsgSendExtQueue(&Message);
 return;
}

数据结构:

typedef struct  __et6204_light_play_ind
{
 LOCAL_PARA_HDR
 kal_uint8 type;
 kal_uint8 play_num;  
}et6204_light_play_ind;

typedef enum
{
 ET6204_POWER_ON,
 ET6204_INCOMING_IND, 
 ET6204_POWER_OFF,
 ET6204_AUDIOPLAYER, 
 ET6204_NEW_MESSAGE, 
 ET6204_END 
}ET6204_LIGHT_ID;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值