TaskInit.c
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:12k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  * TaskInit.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Initilize the task structure for the entire application. Functions to allocate task resources, 
  48.  *   create task communication interfaces and synchronization mechanism for common resource sharing.
  49.  *
  50.  * Author:
  51.  * -------
  52.  * -------
  53.  *
  54.  *============================================================================
  55.  *             HISTORY
  56.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  57.  *------------------------------------------------------------------------------
  58.  * removed!
  59.  *
  60.  * removed!
  61.  * removed!
  62.  * removed!
  63.  *
  64.  *------------------------------------------------------------------------------
  65.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  66.  *============================================================================
  67.  ****************************************************************************/
  68. #include "GlobalConstants.h"
  69. #ifdef MMI_ON_WIN32
  70. #include "stdC.h"
  71. #include "ThrdOsInterface.h"
  72. #include "DebugInitDef.h"
  73. #include "EventsGprot.h"
  74. #include "WrapperGprot.h"
  75. #include "AllAppGprot.h"
  76. #include "WrapperGprot.h"
  77. #include "DebugInitProt.h"
  78. #include "OslGexdcl.h"
  79. #include "taskinit.h"
  80. #include "queuegprot.h"
  81. #include "MMItaskProt.h"
  82. /***************************************************************************** 
  83. * Define
  84. *****************************************************************************/
  85. /***************************************************************************** 
  86. * Typedef 
  87. *****************************************************************************/
  88. /***************************************************************************** 
  89. * Local Variable
  90. *****************************************************************************/
  91. /***************************************************************************** 
  92. * Local Function
  93. *****************************************************************************/
  94. /***************************************************************************** 
  95. * Global Variable
  96. *****************************************************************************/
  97. osl_task_info task_info_g1[TOTAL_TASKS];
  98. oslTimerid TimerCallBackHdlr;
  99. CRITICAL_SECTION TimerCS;
  100. oslSoftTimerid TimerId[MAX_TIMERS];
  101. const osl_task_create_info task_create_tbl[TOTAL_TASKS] = 
  102. {
  103.     {"DUM1 TASK", "DUM1 Q", 127, 128, 0, Dummy_task},
  104.     {"DUM2 TASK", "DUM2 Q", 127, 128, MAX_PRT_NODES, Dummy_task},
  105.     {"MMI TASK", "MMI Q", 127, 4096, MAX_PRT_NODES, MMI_task},
  106.     {"DUM3 TASK", "DUM3 Q", 127, 128, 0, Dummy_task},
  107. };
  108. /***************************************************************************** 
  109. * Global Function
  110. *****************************************************************************/
  111. extern void TimerCallBack(void *param);
  112. /*****************************************************************************
  113.  * FUNCTION
  114.  *  Dummy_task
  115.  * DESCRIPTION
  116.  *  read a messages & diapatche it to proper handler
  117.  *  
  118.  *  This is used to read a messages & diapatche it to proper handler
  119.  * PARAMETERS
  120.  *  entry_param     [?]     
  121.  * RETURNS
  122.  *  void
  123.  *****************************************************************************/
  124. void Dummy_task(oslEntryType *entry_param)
  125. {
  126.     /*----------------------------------------------------------------*/
  127.     /* Local Variables                                                */
  128.     /*----------------------------------------------------------------*/
  129.     /*----------------------------------------------------------------*/
  130.     /* Code Body                                                      */
  131.     /*----------------------------------------------------------------*/
  132. }
  133. /*****************************************************************************
  134.  * FUNCTION
  135.  *  InitApplication
  136.  * DESCRIPTION
  137.  *  Create/Inititialize trace mechanism,task queues, semaphores,Threads etc..
  138.  * PARAMETERS
  139.  *  void
  140.  * RETURNS
  141.  *  void
  142.  *****************************************************************************/
  143. void InitApplication()
  144. {
  145. #ifdef MMI_ON_WIN32
  146.     /*----------------------------------------------------------------*/
  147.     /* Local Variables                                                */
  148.     /*----------------------------------------------------------------*/
  149.     int i;
  150.     /*----------------------------------------------------------------*/
  151.     /* Code Body                                                      */
  152.     /*----------------------------------------------------------------*/
  153.     DebugInit();
  154.     for (i = 0; i < MAX_TIMERS; i++)
  155.     {
  156.         TimerId[i] = NULL;
  157.     }
  158.     InitializeCriticalSection(&TimerCS);
  159.     TimerCallBackHdlr = OslCreateTimer("TIMER");
  160.     OslSetTimer(TimerCallBackHdlr, TimerCallBack, 0, TIMER_CALLBACK_RESOLUTION);        /* 100 msec soft timer */
  161.     for (i = 0; i < TOTAL_TASKS - 9; i++)
  162.     {
  163.         task_info_g1[i + 9].task_ext_qid = OslCreateMsgQ(
  164.                                             task_create_tbl[i].task_qname,
  165.                                             sizeof(MYQUEUE),
  166.                                             task_create_tbl[i].task_ext_qsize);
  167.         task_info_g1[i + 9].task_id = osl_create_task(
  168.                                         task_create_tbl[i].task_name,
  169.                                         task_create_tbl[i].task_priority,
  170.                                         task_create_tbl[i].task_stack_size,
  171.                                         task_create_tbl[i].task_entry_func,
  172.                                         (void*)(i + 9),
  173.                                         0);
  174.         task_info_g1[i + 9].task_name = task_create_tbl[i].task_name;
  175.         task_info_g1[i + 9].task_priority = task_create_tbl[i].task_priority;
  176.         task_info_g1[i + 9].task_stack_size = task_create_tbl[i].task_stack_size;
  177.         task_info_g1[i + 9].task_entry_func = task_create_tbl[i].task_entry_func;
  178.         task_info_g1[i + 9].task_qname = task_create_tbl[i].task_qname;
  179.         task_info_g1[i + 9].task_ext_qsize = task_create_tbl[i].task_ext_qsize;
  180.     }
  181. #endif /* MMI_ON_WIN32 */ 
  182. }
  183. /*****************************************************************************
  184.  * FUNCTION
  185.  *  TimerCallBack
  186.  * DESCRIPTION
  187.  *  Soft Timer Handler for Windows.
  188.  * PARAMETERS
  189.  *  param       [?]     
  190.  * RETURNS
  191.  *  void
  192.  *****************************************************************************/
  193. void TimerCallBack(void *param)
  194. {
  195.     /*----------------------------------------------------------------*/
  196.     /* Local Variables                                                */
  197.     /*----------------------------------------------------------------*/
  198.     U16 i;
  199.     void *tmr_callback_arg = NULL;
  200.     oslTaskFuncPtr tmr_callback = NULL;
  201.     /*----------------------------------------------------------------*/
  202.     /* Code Body                                                      */
  203.     /*----------------------------------------------------------------*/
  204.     EnterCriticalSection(&TimerCS);
  205.     for (i = 0; i < MAX_TIMERS; i++)
  206.     {
  207.         if (TimerId[i] != NULL)
  208.         {
  209.             TimerId[i]->tmr_count -= TIMER_CALLBACK_RESOLUTION;
  210.             if (TimerId[i]->tmr_count == 0)
  211.             {
  212.                 tmr_callback_arg = TimerId[i]->tmr_callback_arg;
  213.                 tmr_callback = TimerId[i]->tmr_callback;
  214.                 OslMfree(TimerId[i]);
  215.                 TimerId[i] = NULL;
  216.                 LeaveCriticalSection(&TimerCS);
  217.                 /* 
  218.                  * Before execute timer_expiry_callback, leave the 
  219.                  * criticalsection first. It avoids the deadlock that
  220.                  * if start/stop the timer in tmr_callback().
  221.                  */
  222.                 if (tmr_callback != NULL)
  223.                 {
  224.                     tmr_callback(tmr_callback_arg);
  225.                 }
  226.                 /*
  227.                  * Before continuing search the next 
  228.                  * timer_expiry_callback, enter the critical section first.
  229.                  */
  230.                 EnterCriticalSection(&TimerCS);
  231.             }
  232.         }
  233.     }
  234.     LeaveCriticalSection(&TimerCS);
  235. }
  236. #endif /* MMI_ON_WIN32 */ 
  237. #ifndef MMI_ON_WIN32
  238. /*************************************************************************
  239.  * Include Statements
  240.  *************************************************************************/
  241. #include "kal_release.h"
  242. #include "stack_types.h"
  243. #include "syscomp_config.h"
  244. #include "taskinit.h"
  245. #include "stack_buff_pool.h"
  246. #include "ctrl_buff_pool.h"
  247. #include "PixtelDataTypes.h"
  248. /***************************************************************************** 
  249. * Global Function
  250. *****************************************************************************/
  251. extern void MMI_task(oslEntryType *entry_param);
  252. extern MMI_BOOL MMI_Init(task_indx_type task_indx);
  253. /*****************************************************************************
  254.  * FUNCTION
  255.  *  mmi_create
  256.  * DESCRIPTION
  257.  *  MMI task create function for system service.
  258.  * PARAMETERS
  259.  *  handle      [IN]            
  260.  *  a(?)        [IN/OUT]        Handle: provide the create task related routine function.
  261.  * RETURNS
  262.  *  The result is ok or not.
  263.  *****************************************************************************/
  264. kal_bool mmi_create(comptask_handler_struct **handle)
  265. {
  266.     /*----------------------------------------------------------------*/
  267.     /* Local Variables                                                */
  268.     /*----------------------------------------------------------------*/
  269.     static comptask_handler_struct mmi_handler_info = 
  270.     {
  271.         MMI_task,   /* task entry function */
  272.         MMI_Init,   /* task initialization function */
  273.         NULL,
  274.         NULL,       /* task reset handler */
  275.         NULL,       /* task termination handler */
  276.     };
  277.     /*----------------------------------------------------------------*/
  278.     /* Code Body                                                      */
  279.     /*----------------------------------------------------------------*/
  280.     *handle = &mmi_handler_info;
  281.     return KAL_TRUE;
  282. }
  283. #endif /* MMI_ON_WIN32 */