zoukankan      html  css  js  c++  java
  • MTK6261 11C之Init Analysis【手记】

     

    初始化流程

    • Application_Initialize
      • systemInitialization();
      • HWDInitialization();
        • USC_Start();
        • OSTD_Init();
        • RM_Init();
        • L1SM_Init();
        • HW_Divider_Initialization();
        • Drv_Init_Phase1();
          • DclPMU_Initialize();
          • drv_hisr_init();
          • lpwr_init();
          • DclPWM_Initialize();
          • DclSADC_Initialize();
          • custom_drv_init();
          • DclAUX_Initialize();
      • Drv_Init_Phase2();
      • stack_init_comp_info();

    Task初始化

    • config/src/hal/syscomp_config.c
      [...省略]
      #define task_index(p1)
      #define task_module_map(task, mod)
      #define compatible_code(p1)
      #define MODULE_ID_MAP_TO_NULL_TASK_CAN_ALLOCATE_ILM(p1)
      #define MODULE_ID_FOR_PRINT_TRACE(p1)
      
      #define task_name(p1)                       {p1,
      #define task_queue_name(p1)                  p1,   
      #define task_priority(p1)                    p1,
      #define task_stack_size(p1)                  (p1 + TASK_STACK_COMMON_PLUS),
      #define null_task_create_entry(p1)          (kal_create_func_ptr)TASK_NO_CREATE_PATTERN,
      #define task_create_function(p1)             p1,
      #define task_stack_internalRAM(p1)           p1,
      #define task_external_queue_size(p1)         p1,
      #define task_internal_queue_size(p1)         p1,
      #define task_boot_mode(p1)                   p1},
      
      /**
       * typedef struct {
       *    kal_char             *comp_name_ptr;
       *    kal_char             *comp_qname_ptr;
       *    kal_uint32           comp_priority;
       *    kal_uint32           comp_stack_size;
       *    kal_create_func_ptr  comp_create_func;
       *    kal_bool             comp_internal_ram_stack;
       *    kal_uint8            comp_ext_qsize;
       *    kal_uint8            comp_int_qsize;
       *    kal_uint8            comp_boot_mode;
       * } comptask_info_struct;
       */
      
      const comptask_info_struct sys_comp_config_tbl[RPS_TOTAL_STACK_TASKS] =
      {
          #include "hal_task_config.h"
          #include "app_task_config.h"
      };
      [...省略]
    • config/include/hal/hal_task_config.h
      /*************************Task CFG Begin****************/
      /*task_indx_type*/
      task_index(INDX_IPERF2)  
      /*module_type and mod_task_g*/
      task_module_map(INDX_IPERF2, MOD_IPERF2)
      
      /*task's parameters*/
      task_name("IPERF2")                      //< {"IPERF2",
      task_queue_name("IPERF2 Q")              //<     "IPERF2 Q",
      task_priority(TASK_PRIORITY_IPERF4)      //<    TASK_PRIORITY_IPERF2,
      task_stack_size(4096)                    //<     4096 + TASK_STACK_COMMON_PLUS,
      task_create_function(iperf4_create)      //<     iperf4_create,
      task_stack_internalRAM(KAL_FALSE)        //<     KAL_FALSE,
      task_external_queue_size(20)             //<      20,
      task_internal_queue_size(0)              //<      0,
      task_boot_mode(NORMAL_M)                 //<   NORMAL_M},
      
      /*************************Task CFG END******************/

      注意: 1 添加在文件app_task_config.h 的后面      

        2 不要在INDX_TST_FTRANS 之前添加任务否则你会得到运行时错误,            

    /*************************Task CFG Begin******************/
    #ifdef __TST_MODULE__ 
     /*task_indx_type*/
    task_index(INDX_TST_FTRANS) 
    /*module_type and mod_task_g*/
    
    task_module_map(INDX_TST_FTRANS, MOD_TST_FTRANS)
    
    //task's parameters
    task_name("TFT")
    task_queue_name("TFile Q")
    task_priority(TASK_PRIORITY_TST_FTRANS)
    task_stack_size(2048)
    #ifdef  __TST_WRITE_TO_FILE__
    task_create_function(tst_file_transferrer_create)
    #else
    null_task_create_entry(NULL)
    #endif
    task_stack_internalRAM(KAL_FALSE)
    task_external_queue_size(10)
    task_internal_queue_size(0)
    task_boot_mode(NORMAL_M)
    #endif /*__TST_MODULE__*/
    /*************************Task CFG END******************/
    
    /******!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!****/
    /******!!!!DON NOT add new task before this line !!*****/
    /******!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!****/
    View Code
    • config/include/app/app_task_config.h
      /*************************Task CFG Begin****************/
      /*task_indx_type*/
      task_index(INDX_VRT)
      /*module_type and mod_task_g*/
      task_module_map(INDX_VRT, MOD_VRT)
      
      /*task's parameters*/
      task_name("VRT")
      task_queue_name("VRT Q")
      task_priority(TASK_PRIORITY_VRT)
      #ifdef __VENUS_3D_UI_ENGINE__
      task_stack_size(4096+1024*6)
      #else
      task_stack_size(4096)
      #endif
      #ifdef __VENUS_UI_ENGINE__
      task_create_function(vrt_create)
      #else
      null_task_create_entry(NULL)
      #endif
      task_stack_internalRAM(KAL_FALSE)
      task_external_queue_size(30)
      task_internal_queue_size(0)
      task_boot_mode(NORMAL_M | USB_M)
      /*************************Task CFG END******************/
    • config/src/hal/task_config.c
          kal_bool
          stack_init_comp_info(void)
          {
             kal_uint32 task_indx, module_id;
             kal_uint8 boot_flag;
      
             kal_bool result = KAL_TRUE;
             comptask_handler_struct *comp_handler = NULL;
          #ifdef SPLIT_SYS
             kal_uint8 mask_offset;
             kal_uint8 mask_pos;
             kal_uint32 i;
          #endif /* SPLIT_SYS */
      
             KALTotalTasks = RPS_TOTAL_STACK_TASKS;
             KALTotalModules = RPS_TOTAL_STACK_MODULES;
      
             task_info_g = (task_info_struct *)kal_sys_mem_alloc(sizeof(task_info_struct) * KALTotalTasks);
             ASSERT(task_info_g != NULL);
      
             /* Initialize global task info structure array */
      
             for (task_indx = 0; task_indx < KALTotalTasks; task_indx++)
             {
      
                task_info_g[ task_indx ].task_name_ptr   =  RPS_NO_TASK_NAME;
                task_info_g[ task_indx ].task_qname_ptr  =  RPS_QNAME_NIL;
                task_info_g[ task_indx ].task_priority   = RPS_TASK_PRIORITY_NIL;
                task_info_g[ task_indx ].task_stack_size = RPS_STACK_SIZE_NIL;
                task_info_g[ task_indx ].task_id         = KAL_NILTASK_ID;
                task_info_g[ task_indx ].task_ext_qid    = KAL_NILQ_ID;
                task_info_g[ task_indx ].task_int_qid_ptr= NULL;
                task_info_g[ task_indx ].task_entry_func = NULL;
                task_info_g[ task_indx ].task_init_func  = NULL;
                task_info_g[ task_indx ].task_ext_qsize  = RPS_QSIZE_NIL;
             }
      
             /* assume that the normal mode is the default setting */
      
          #ifdef SPLIT_SYS
             /* Transfer tst routing table module id to task id */
             for (i=MOD_NIL+1; i<LAST_MOD_ID; i++)
             {
                mask_offset = i / 8;
                mask_pos = i % 8;
      
                if (tst_routing_table[mask_offset] & (0x1 << mask_pos)) {
                   /* On MNT PC side */
                   mask_offset = mod_task_g[i] / 32;
                   mask_pos = mod_task_g[i] % 32;
      
                   utonmnt_task_mask_g[mask_offset] |= (0x1 << mask_pos);
                } else {
                   /* On Target side */
                   mask_offset = mod_task_g[i] / 32;
                   mask_pos = mod_task_g[i] % 32;
      
                   utontarget_task_mask_g[mask_offset] |= (0x1 << mask_pos);
                }
             }
      
             /* Both MNT, Target side need TST/TST Reader Tasks */
             i = INDX_TST;
             mask_offset = mod_task_g[i] / 32;
             mask_pos = mod_task_g[i] % 32;
             utonmnt_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
             utontarget_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
      
             i = INDX_TST_READER;
             mask_offset = mod_task_g[i] / 32;
             mask_pos = mod_task_g[i] % 32;
             utonmnt_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
             utontarget_task_mask_g[mask_offset] &= ~(0x1 << mask_pos);
      
          #ifdef __MTK_TARGET__
             redirect_task_mask_g = (kal_uint32*)&utonmnt_task_mask_g;
          #else
             redirect_task_mask_g = (kal_uint32*)&utontarget_task_mask_g;
          #endif /* __MTK_TARGET__ */
      
          #endif /* SPLIT_SYS */
      
             /* Initialize global task info structure array according to component info */
             for (task_indx = 0; task_indx < KALTotalTasks; task_indx++)
             {
                 task_info_g[ task_indx ].task_name_ptr   = sys_comp_config_tbl[task_indx].comp_name_ptr;
                 task_info_g[ task_indx ].task_qname_ptr  = sys_comp_config_tbl[task_indx].comp_qname_ptr;
                 task_info_g[ task_indx ].task_priority   = sys_comp_config_tbl[task_indx].comp_priority;
                 task_info_g[ task_indx ].task_stack_size = sys_comp_config_tbl[task_indx].comp_stack_size;
          #ifdef __SYS_INTERN_RAM__
                 task_info_g[ task_indx ].task_internal_ram_stack = sys_comp_config_tbl[task_indx].comp_internal_ram_stack;
          #endif /* __SYS_INTERN_RAM__ */
      
                 task_info_g[ task_indx ].task_stack_size = sys_comp_config_tbl[task_indx].comp_stack_size;
                     task_info_g[ task_indx].task_ext_qsize = sys_comp_config_tbl[task_indx].comp_ext_qsize;
      
                 task_info_g[ task_indx ].task_int_qsize = sys_comp_config_tbl[task_indx].comp_int_qsize;
      
                 /*Check whether the task should be created or mis-configured*/
                 if ((sys_comp_config_tbl[task_indx].comp_create_func == (kal_create_func_ptr)TASK_NO_CREATE_PATTERN )
          #ifdef SPLIT_SYS
                         || (*(redirect_task_mask_g + (task_indx >> 5)) & (0x1 << (task_indx & 31)))
          #endif /* SPLIT_SYS */
                    )
                 {
                     continue;
                 }
                 else if((sys_comp_config_tbl[task_indx].comp_create_func == (kal_create_func_ptr)KAL_FALSE) ||
                         (sys_comp_config_tbl[task_indx].comp_create_func == (kal_create_func_ptr)KAL_TRUE))
                 {/*
                     This is task mis-configured case. This occurs code like
                      #ifdef xxx
                          task_create_function(yyy)
                      #endif
                     missing the null_task_create_entry as the else branch.
      
                     The assumption is that task_stack_internalRAM(KAL_FALSE or KAL_TRUE)
                     following task create function
                 */
                      kal_fatal_error_handler(KAL_ERROR_KALINIT_INIT_FAILED, task_indx);
                 }
                 else if (sys_comp_config_tbl[task_indx].comp_create_func(&comp_handler) != KAL_TRUE)
                 {
                     continue;
                 }
      
                 /* component task entry function */
                 /*Null task_entry_func indicates the task will not create*/
                 task_info_g[ task_indx ].task_entry_func =
                     comp_handler->comp_entry_func;
      
                 /* component task initialization handler */
                 task_info_g[ task_indx ].task_init_func =
                     comp_handler->comp_init_func;
      
                 /* component task configuration handler */
                 task_info_g[ task_indx ].task_cfg_func =
                     comp_handler->comp_cfg_func;
      
                 /* component task reset handler */
                 task_info_g[ task_indx ].task_reset_func =
                     comp_handler->comp_reset_func;
      
                 /* component task termination handler */
                 task_info_g[ task_indx ].task_end_func =
                     comp_handler->comp_end_func;
      
          #ifdef __MULTI_BOOT__
                 if (INT_BootMode() == MTK_FACTORY_MODE)
                 {
                        boot_flag = sys_comp_config_tbl[task_indx].comp_boot_mode & FACTORY_M;
                        if(0 == boot_flag)
                        {
                            task_info_g[ task_indx ].task_entry_func = NULL;
                            for(module_id = 0; module_id < KALTotalModules; module_id++)
                            {
                              if(task_indx == mod_task_g[module_id])
                              {
                                  mod_task_g[module_id] = INDX_NIL;
                              }
                            }
                        }
                 }
          #ifdef __USB_ENABLE__
                 else if( INT_USBBoot() )
                 {
                     boot_flag = sys_comp_config_tbl[task_indx].comp_boot_mode & USB_M;
                     if(0 == boot_flag)
                     {
                         task_info_g[ task_indx ].task_entry_func = NULL;
                         for(module_id = 0; module_id < KALTotalModules; module_id++)
                         {
                             if(task_indx == mod_task_g[module_id])
                             {
                                 mod_task_g[module_id] = INDX_NIL;
                             }
                         }
                     }
                 }
          #endif /* __MULTI_BOOT__ */
                else
          #endif /* __USB_ENABLE__ */
                 {
                     boot_flag = sys_comp_config_tbl[task_indx].comp_boot_mode & NORMAL_M;
                     if(boot_flag == 0)
                     {
                         task_info_g[ task_indx ].task_entry_func = NULL;
                         for(module_id = 0; module_id < KALTotalModules; module_id++)
                         {
                             if(task_indx == mod_task_g[module_id])
                             {
                                 mod_task_g[module_id] = INDX_NIL;
                             }
                         }
                     }
                 }
                 /*
                 mask_offset = task_indx / 32;
                 mask_pos = task_indx % 32;    */
             }
      
             result = stack_init_module_info();
      
             return result;
          }
      
       

     

    IdleClassic Hacking

    • plutommi/mmi/Idle/IdleSrc/IdleFactory.c
      [...省略]
      /* This table registers the idle object. */
      /*
       * <Factory>
       *
       * DESCRIPTION
       *  factory configuration table structure
       * ELEMENTS
       *  type                                    : [IN] object type ID
       *  size                                    : [IN] object size
       *  mmi_factory_on_want_to_run_cb       : [IN] want to run function
       *  mmi_factory_on_init_cb              : [IN] init function
       *  mmi_factory_on_deinit_cb            : [IN] deinit function
       *
       * typedef struct
       * {
       *     S16                                 type;
       *     U16                                 size;
       *     mmi_factory_on_want_to_run_cb       on_want_to_run;
       *     mmi_factory_on_init_cb              on_init;
       *     mmi_factory_on_deinit_cb            on_deinit;
       * } mmi_factory_cfg_struct;
       */
      const static mmi_factory_cfg_struct g_mmi_idle_cfg_tbl[] =
      {
          [...省略]
      
      #if defined(__MMI_VUI_LAUNCHER__)
          MMI_FACTORY_CFG_ADD(
              MMI_IDLE_TYPE_LAUNCHER,
              sizeof(mmi_idle_launcher_struct),
              mmi_idle_obj_on_want_to_run,
              (mmi_factory_on_init_cb)mmi_idle_launcher_on_init,
              (mmi_factory_on_deinit_cb)mmi_idle_obj_on_deinit),
      #endif /* defined(__MMI_VUI_LAUNCHER__) */
      
          /**
           * {
           *  MMI_IDLE_TYPE_LAUNCHER,
           *  sizeof(mmi_idle_launcher_struct),
           *  mmi_idle_obj_on_want_to_run,
           *  (mmi_factory_on_init_cb)mmi_idle_launcher_on_init,
           *  (mmi_factory_on_deinit_cb)mmi_idle_obj_on_deinit
           * },
           */
      #ifdef __MMI_IDLE_CLASSIC_AND_MAINMENU_SUPPORT__
          MMI_FACTORY_CFG_ADD(
              MMI_IDLE_TYPE_CLASSIC,
              sizeof(mmi_idle_classic_struct),
              mmi_idle_obj_on_want_to_run,
              (mmi_factory_on_init_cb)mmi_idle_classic_on_init,
              (mmi_factory_on_deinit_cb)mmi_idle_obj_on_deinit),
      #endif
      
          MMI_FACTORY_CFG_END()
      };
      [...省略]
    • plutommi/mmi/Idle/IdleSrc/IdleFactory.c
      [...省略]
      /*****************************************************************************
       * FUNCTION
       *  mmi_idle_get_cfg_table
       * DESCRIPTION
       *  This function gets the idle configure table.
       * PARAMETERS
       *  void
       * RETURNS
       *  Idle type.
       *****************************************************************************/
      const mmi_factory_cfg_struct *mmi_idle_get_cfg_table(void)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          return g_mmi_idle_cfg_tbl;
      }
      [...省略]
    • plutommi/mmi/Idle/IdleSrc/IdleMain.c
      mmi_idle_obj_struct * mmi_idle_launch_new_obj(void)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                         */
          /*----------------------------------------------------------------*/
          mmi_idle_obj_struct *obj;
      
          /*----------------------------------------------------------------*/
          /* Code Body                                              */
          /*----------------------------------------------------------------*/
          MMI_IDLE_LOG((TRC_MMI_IDLE_LAUNCH, 300));
          /*
           * New the object.
           */
          obj = (mmi_idle_obj_struct *)mmi_factory_new_obj(
                                          mmi_idle_get_cfg_table(),
                                          mmi_idle_buffer_malloc);
          MMI_ASSERT(obj);
      
          /*
          * Run the idle object.
          */
          MMI_ASSERT(obj->on_create);
          obj->on_create(obj, GRP_ID_IDLE_MAIN);
      
          MMI_ASSERT(obj->on_run);
          obj->on_run(obj);
      
          g_mmi_idle_cntx.obj = obj;
          return obj;
      }
      
      [...省略]
      /*
      * lauch idle internal
      */
      static void mmi_idle_launch_internal(mmi_id base_group_id)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
          mmi_idle_obj_struct *obj;
      //    mmi_frm_node_struct group_info;
          mmi_id this_gid;
      //    mmi_ret ret;
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          MMI_IDLE_LOG((TRC_MMI_IDLE_LAUNCH, 200));
      
          /*
           * Create.
           */
          this_gid = mmi_frm_group_create(
                      base_group_id,
                      GRP_ID_IDLE_MAIN,
                      mmi_idle_main_evt_hdlr,
                      NULL);
      
          MMI_ASSERT(this_gid != GRP_ID_INVALID);
          mmi_frm_group_enter(this_gid, MMI_FRM_NODE_NONE_FLAG);
      
          obj = mmi_idle_launch_new_obj();
      
          /*
           * Emit the event.
           */
          mmi_idle_emit_launched(obj);
      }
      
      [...省略]
      /* idle app proc*/
      static MMI_RET mmi_idle_app_proc(mmi_event_struct *evt)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          switch(evt->evt_id)
          {
          #ifdef __MMI_IDLE_APP_NOT_USE_ASMv2__
              case EVT_ID_GROUP_ENTER:
          #else
              case EVT_ID_APP_ENTER:
          #endif
                      {
                              mmi_idle_launch_internal(APP_IDLE);
                              break;
                      }
      
              default:
                  break;
              }
              return MMI_RET_OK;
      }
      
      [...省略]
      /* For the detail information, please refer to the IdleGprot.h */
      void mmi_idle_launch(mmi_id base_group_id)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
      #ifdef __MMI_IDLE_APP_NOT_USE_ASMv2__
          mmi_id this_gid;
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          MMI_IDLE_LOG((TRC_MMI_IDLE_LAUNCH, 201));
          this_gid = mmi_frm_group_create(
                      GRP_ID_ROOT,
                      APP_IDLE,
                      mmi_idle_app_proc,
                      NULL);
      
          mmi_frm_group_enter(this_gid, MMI_FRM_NODE_NONE_FLAG);
      #else
          MMI_IDLE_LOG((TRC_MMI_IDLE_LAUNCH, 200));
          mmi_frm_app_launch(APP_IDLE, 0, base_group_id, mmi_idle_app_proc,
                              0,MMI_FRM_APP_LAUNCH_AFTER_BASE | MMI_FRM_APP_USE_SEND_WAY);
      #endif
      }
    • plutommi/mmi/Factory/FactorySrc/Factory.c
      [...省略]
      /* For the detail information, please refer to the FactoryGprot.h */
      mmi_factory_obj_struct *mmi_factory_new_obj_ex(
          U16 type,
          const mmi_factory_cfg_struct *cfg_table,
          mmi_factory_malloc_func_ptr alloc_func)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
          const mmi_factory_cfg_struct *cfg;
          mmi_factory_obj_struct *obj;
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          cfg = mmi_factory_get_cfg(type, cfg_table);
          if (!cfg)
          {
              return NULL;
          }
      
          obj = (mmi_factory_obj_struct *)alloc_func(cfg->size);
      
          kal_mem_set(obj, 0, cfg->size);
      
          obj->type = type;
      
          if (cfg->on_init)
          {
              cfg->on_init(obj);
          }
      
          return obj;
      }
      
      /* For the detail information, please refer to the FactoryGprot.h */
      mmi_factory_obj_struct *mmi_factory_new_obj(
          const mmi_factory_cfg_struct *cfg_table,
          mmi_factory_malloc_func_ptr alloc)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
          U16 type;
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          type = mmi_factory_get_favorite_type(cfg_table);
      
          if (type == MMI_FACTORY_TYPE_INVALID)
          {
              return NULL;
          }
      
          return mmi_factory_new_obj_ex(type, cfg_table, alloc);
      }
      [...省略]
    • plutommi/mmi/Idle/IdleSrc/IdleClassic.c
      void mmi_idle_classic_on_init(mmi_idle_obj_struct *obj)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
          mmi_idle_classic_struct *p;
      #if defined(__MMI_TOUCH_IDLESCREEN_SHORTCUTS__) || defined(__MMI_BT_BOX_IDLE_SHORTCUTS__)
          U32 *capability;
      #endif
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          mmi_idle_obj_on_init(obj);
      
          p = (mmi_idle_classic_struct *)obj;
      
          /* Member variable. */
          p->type = MMI_IDLE_TYPE_CLASSIC;
      
          /* Member function. */
          p->on_enter = mmi_idle_classic_on_enter;
          p->on_update_service_area = mmi_idle_classic_on_update_service_indication;
      
              /*for __MMI_TOUCH_IDLESCREEN_SHORTCUTS__, the softkey area is owned by shortcut */
      #if defined(__MMI_TOUCH_IDLESCREEN_SHORTCUTS__) || defined(__MMI_BT_BOX_IDLE_SHORTCUTS__)
       #if !defined(__MMI_BT_DIALER_SUPPORT__)
          /* Change the capabilities. */
          capability = &obj->capability;
      
          *capability &= ~ENABLE_CENTER_SOFT_KEY;
          *capability &= ~ENABLE_SOFT_KEY_AREA;
       #endif
       #if defined(__MMI_BT_BOX_IDLE_SHORTCUTS__)
          capability = &obj->capability;
          *capability &= ~ENABLE_NAVIGATION_KEY;
          *capability &= ~ENABLE_LEFT_SOFT_KEY;
          *capability &= ~ENABLE_RIGHT_SOFT_KEY;
       #endif
      #endif
      }
      [...省略]
      
      /*****************************************************************************
       * FUNCTION
       *  mmi_idle_classic_on_enter
       * DESCRIPTION
       *  This function enters the idle screen.
       * PARAMETERS
       *  obj             : [IN]          Idle object
       * RETURNS
       *  void
       *****************************************************************************/
      static void mmi_idle_classic_on_enter(mmi_idle_obj_struct *obj)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
          mmi_idle_classic_struct *p;
      #if defined(__MMI_SEARCH_WEB_GOOGLE__)
          const U8 *image;
          const WCHAR *string;
      #endif
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          MMI_ASSERT(obj);
      
          p = (mmi_idle_classic_struct *)obj;
      
      #if defined(MMI_IDLE_CLASSIC_CSK_SUPPORT)
          EnableCenterSoftkey(0, IMG_GLOBAL_DIAL_PAD_CSK);
      #endif
      
      #if 0//defined(__MMI_CALENDAR_ON_IDLE_SCREEN__)
      /* under construction !*/
      /* under construction !*/
      /* under construction !*/
      /* under construction !*/
      #endif /* defined(__MMI_CALENDAR_ON_IDLE_SCREEN__) */
      
      #if 0
      #ifdef __MMI_OP01_DCD__
      /* under construction !*/
      /* under construction !*/
      /* under construction !*/
      /* under construction !*/
      #endif /* __MMI_OP01_DCD__ */
      #endif
      
      #if defined(__MMI_IDLE_SCREEN_ICON_SHORTCUT__)
          mmi_idle_classic_init_icon_shct(p);
      #endif
      
      #if defined(__MMI_SEARCH_WEB_GOOGLE__)
          if(mmi_search_web_get_idle_hint(&image, &string))
          {
              idle_screen_enable_search_bar(image, string, mmi_idle_classic_search_bar_trigger_by_touch_hdlr);
          }
      #endif
      
          gui_sse_setup_scenario(GUI_SSE_SCENARIO_ENTER_IDLE);
      
          ShowCategory33Screen(
              STR_ID_IDLE_MAIN_MENU,
              0,
              STR_ID_IDLE_CONTACT,
              0,
              NULL);
      
          mmi_idle_set_handler((mmi_idle_obj_struct *)p);
      
      #ifndef __MMI_PHNSET_SLIM__
          mmi_phnset_save_wallpaper_to_speedup();
      #endif
      
          ClearKeyEvents();
      
          mmi_idle_sublcd_display();
      
      #if !defined(__MMI_TOUCH_IDLESCREEN_SHORTCUTS__) || defined(__MMI_BT_DIALER_SUPPORT__)
          if(mmi_scr_locker_is_locked())
          {
              // softkey needs to update after show category
              // TODO: framework should emit the event after show category
              // then update can be done by scrlocker self.
            #ifndef __MMI_BTD_BOX_UI_STYLE__
              wgui_softkey_update();
            #endif /*__MMI_BTD_BOX_UI_STYLE__*/
          }
      #endif
      }
       
    • plutommi/mmi/Bootup/BootupSrc/BootupFlow.c
      [...省略]
      /*****************************************************************************
       * FUNCTION
       *  mmi_bootup_flow_completed
       * DESCRIPTION
       *  Query if current screen is interruptable. Only ultra-high priority events
       *  can interrupt booting screens; such as incoming call.
       * PARAMETERS
       *  evt     [IN] mmi_frm_proc_completed_evt_struct *
       * RETURNS
       *  void
       *****************************************************************************/
      static mmi_ret mmi_bootup_flow_completed(mmi_event_struct *evt)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          mmi_frm_proc_seq_destroy(g_mmi_bootup_flow_cntx.main_flow);
          g_mmi_bootup_flow_cntx.main_flow = NULL;
      
          if (srv_shutdown_is_running())
          {
              return MMI_RET_OK;
          }
      
          /*
           * [MAUI_02288699]
           * We should close waiting first, otherwise it may be shown during
           * accessing NVRAM on BEFORE_IDLE event.
           */
          mmi_bootup_waiting_screen_close(GRP_ID_BOOTUP);
      
          mmi_bootup_notify_before_idle();
      
          mmi_idle_launch(GRP_ID_BOOTUP);
      
          /* Clear leave proc of the base screen, to allow being closed */
          mmi_frm_scrn_set_leave_proc(GRP_ID_BOOTUP, SCR_ID_BOOTUP_BASE, NULL);
      
          mmi_frm_group_close(GRP_ID_BOOTUP);
      
          /* Change service status first */
          srv_bootup_notify_completed();
          /* Notify application finally */
          mmi_bootup_notify_completed();
      
          return MMI_RET_OK;
      }
      [...省略]
      /*****************************************************************************
       * FUNCTION
       *  mmi_bootup_flow_start
       * DESCRIPTION
       *  Start booting flow.
       *  This function is the handler of EVT_ID_BOOTUP_START.
       * PARAMETERS
       *  evt     [IN] srv_bootup_start_evt_struct*
       * RETURNS
       *  Always MMI_RET_OK
       *****************************************************************************/
      mmi_ret mmi_bootup_flow_start(mmi_event_struct *evt)
      {
          /*----------------------------------------------------------------*/
          /* Local Variables                                                */
          /*----------------------------------------------------------------*/
      
          /*----------------------------------------------------------------*/
          /* Code Body                                                      */
          /*----------------------------------------------------------------*/
          MMI_ASSERT(evt->evt_id == EVT_ID_SRV_BOOTUP_START);
      
          MMI_TRACE(MMI_BOOTUP_TRC_GROUP, TRC_MMI_BOOTUP_FLOW_START);
      
          g_mmi_bootup_flow_cntx.interrupt.disabled_count = 0;
      
          g_mmi_bootup_flow_cntx.main_flow = mmi_frm_proc_seq_create(
              mmi_frm_proc_allocate_id(),
              g_mmi_bootup_main_flow,
              sizeof(g_mmi_bootup_main_flow) / sizeof(g_mmi_bootup_main_flow[0]));
      
          mmi_frm_proc_seq_set_status_callback(
              g_mmi_bootup_flow_cntx.main_flow,
              mmi_bootup_flow_stop_check,
              &(g_mmi_bootup_flow_cntx));
      
          mmi_frm_proc_post_complete_execute(
              MMI_FRM_PROC_ID_BOOTUP_MAIN,
              mmi_bootup_flow_completed,
              &(g_mmi_bootup_flow_cntx),
              g_mmi_bootup_flow_cntx.main_flow);
      
          return MMI_RET_OK;
      }
      [...省略]
    • plutommi/Customer/CustomerInc/mmi_rp_callback_mgr_config.h
      MMI_FRM_CB_REG_BEGIN(EVT_ID_SRV_BOOTUP_START)
      MMI_FRM_CB_REG(mmi_bootup_flow_start)
      MMI_FRM_CB_REG_END(EVT_ID_SRV_BOOTUP_START)

      Task Management & Identification

      module_type and task_indx_type
      ƒ Defined in “Stack_config.h”
      ƒ Used to define index of all modules and all tasks
      mod_task_g [RPS_TOTAL_STACK_MODULES] ƒ Defined
      in “syscomp_config.c” ƒ Used to map MODULE-ID to TASK-ID
      sys_comp_config_tbl [RPS_TOTAL_STACK_TASKS
      + 1] ƒ Defined in “syscomp_config.c” ƒ Used to define information of all tasks, e.g., task’s name, task queue’s name, priority, siz external/internal queue, task creation function, whether to use internal ram.
      custom_comp_config_tbl [MAX_CUSTOM_TASKS] ƒ Used
      for customer defined modules or tasks.
      task_info_g [RPS_TOTAL_STACK_TASKS
      + 1] ƒ Global array containing component task information, which will be filled in while calling stack_init_comp_info().
      module_info_g [MAX_MULTIMOD_TASK_NUM] ƒ Global array containing component task information, which will be filled
      in while calling stack_init_module_info().
       
  • 相关阅读:
    Android : iperf-2.0.4 网络测试工具
    Android : SELinux 简析&修改
    Android : 修改内核源码 and 编译、打包成新的boot.img
    Bluedroid: 音频数据的传输流程
    Bluedroid: 蓝牙协议栈源码剖析
    【Java】 剑指offer(54) 二叉搜索树的第k个结点
    【Java】 剑指offer(53-3) 数组中数值和下标相等的元素
    【Java】 剑指offer(53-2) 0到n-1中缺失的数字
    【Java】 剑指offer(53-1) 数字在排序数组中出现的次数
    【Java】 剑指offer(52) 两个链表的第一个公共结点
  • 原文地址:https://www.cnblogs.com/libra13179/p/10761709.html
Copyright © 2011-2022 走看看