tw_cli_task.c
上传用户:hujq123
上传日期:2016-04-10
资源大小:153k
文件大小:8k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* 
  2.  * Copyright (C) 2002 Koninklijke Philips Electronics N.V., 
  3.  * All Rights Reserved. 
  4.  *
  5.  * This source code and any compilation or derivative thereof is the 
  6.  * proprietary information of Koninklijke Philips Electronics N.V. 
  7.  * and is confidential in nature. 
  8.  * Under no circumstances is this software to be exposed to or placed 
  9.  * under an Open Source License of any type without the expressed 
  10.  * written permission of Koninklijke Philips Electronics N.V. 
  11.  * 
  12.  *###########################################################
  13.  */ 
  14. /*! 
  15.  *      file           tw_cli_task.c 
  16.  * 
  17.  *      brief          - 
  18.  * 
  19.  */ 
  20. /*-----------------------------------------------------------*
  21.  * 
  22.  *      %version:       4 % 
  23.  *      instance:       DS_6 
  24.  *      %date_created:  Fri Feb 21 08:04:45 2003 % 
  25.  *
  26.  *###########################################################
  27.  */ 
  28. /****************************************************************************
  29. *
  30. * Filename   : tw_cli_task.c
  31. * Purpose    : CLI command objects and functions to support TASK commands. 
  32. *
  33. *
  34. *****************************************************************************/
  35. #include <stdio.h>
  36. #include <stdlib.h>
  37. #include "tw_cli.h"
  38. /*** 3rd level CLI Command Option - task profile "start"
  39. ***/
  40. static int CliCoVoproc_TaskProfileStart(Cli_cmdSession_t *pSess, 
  41.                                   char *CmdStr, int Ptr);
  42. Cli_CmdStruct_t  CliCo_TaskProfileStart =
  43. {
  44.     "start",
  45.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  46.     NULL,
  47.     "start profiling tasks",
  48.     NULL_HELP_FUNC,
  49.     CliCoVoproc_TaskProfileStart,
  50.     NULL_VAR_OPT_FUNC,
  51. };
  52. /*** 3rd level CLI Command Option - task profile "stop"
  53. ***/
  54. static int CliCoVoproc_TaskProfileStop(Cli_cmdSession_t *pSess, 
  55.                                   char *CmdStr, int Ptr);
  56. Cli_CmdStruct_t  CliCo_TaskProfileStop =
  57. {
  58.     "stop",
  59.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  60.     NULL,
  61.     "stop profiling tasks and dump result",
  62.     NULL_HELP_FUNC,
  63.     CliCoVoproc_TaskProfileStop,
  64.     NULL_VAR_OPT_FUNC,
  65. };
  66. /*** 3rd level CLI Command Option - task profile "freq"
  67. ***/
  68. static int CliCoVoproc_TaskProfileFreq(Cli_cmdSession_t *pSess, 
  69.                                   char *CmdStr, int Ptr);
  70. Cli_CmdStruct_t  CliCo_TaskProfileFreq =
  71. {
  72.     "freq",
  73.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  74.     NULL,
  75.     "set task profile reporting frequency (in seconds)",
  76.     NULL,
  77.     NULL,
  78.     CliCoVoproc_TaskProfileFreq
  79. };
  80. /*** 2nd level CLI Command Option - task "threshold"
  81. ***/
  82. static int CliCoVoProc_TaskLogThreshold(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  83. Cli_CmdStruct_t  CliCo_TaskLogThreshold =
  84. {
  85.     "log_threshold",
  86.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  87.     NULL,
  88.     "Set logging threshold for unpreempted CPU usage.",
  89.     NULL,
  90.     NULL,
  91.     CliCoVoProc_TaskLogThreshold
  92. };
  93. /*** 2nd level CLI Command Option - task "clr"
  94. ***/
  95. static int CliCoVoproc_TaskClr(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  96. Cli_CmdStruct_t  CliCo_TaskClr =
  97. {
  98.     "clr",
  99.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  100.     NULL,
  101.     "Clear Max cycles counters",
  102.     NULL,
  103.     CliCoVoproc_TaskClr,
  104.     NULL
  105. };
  106. /*** 2nd level CLI Command Option - task "max"
  107. ***/
  108. static int CliCoVoproc_TaskMax(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  109. Cli_CmdStruct_t  CliCo_TaskMax =
  110. {
  111.     "max",
  112.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  113.     NULL,
  114.     "Max cycles and max interrupts off Intervals per task",
  115.     NULL,
  116.     CliCoVoproc_TaskMax,
  117.     NULL
  118. };
  119. /*** 2nd level CLI Command Option - task "list"
  120. ***/
  121. static int CliCoVoproc_TaskList(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  122. Cli_CmdStruct_t  CliCo_TaskList =
  123. {
  124.     "list",
  125.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  126.     NULL,
  127.     "List tasks started in system",
  128.     NULL,
  129.     CliCoVoproc_TaskList,
  130.     NULL
  131. };
  132. /*** 2nd level CLI Command Option - task "calls"
  133. ***/
  134. static int CliCoVoproc_TaskCalls(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  135. Cli_CmdStruct_t  CliCo_TaskCalls =
  136. {
  137.     "calls",
  138.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  139.     NULL,
  140.     "Trace of pSOS calls",
  141.     NULL,
  142.     CliCoVoproc_TaskCalls,
  143.     NULL
  144. };
  145. /*** 2nd level CLI Command Option - task "switches"
  146. ***/
  147. static int CliCoVoproc_TaskSwitches(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  148. Cli_CmdStruct_t  CliCo_TaskSwitches =
  149. {
  150.     "switches",
  151.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  152.     NULL,
  153.     "Trace of task switches",
  154.     NULL,
  155.     CliCoVoproc_TaskSwitches,
  156.     NULL
  157. };
  158. /*** 2nd level CLI Command Option - task "stacks"
  159. ***/
  160. static int CliCoVoproc_TaskStacks(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr);
  161. Cli_CmdStruct_t  CliCo_TaskStacks =
  162. {
  163.     "stacks",
  164.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  165.     NULL,
  166.     "Trace of task stack",
  167.     NULL,
  168.     CliCoVoproc_TaskStacks,
  169.     NULL
  170. };
  171. /*** 2nd level CLI Command Option - task "profile"
  172. ***/
  173. Cli_CmdStruct_t *CliCoOptionList_TaskProfile[] =
  174. {
  175.     &CliCo_TaskProfileStart,
  176.     &CliCo_TaskProfileStop,
  177.     &CliCo_TaskProfileFreq,
  178.     NULL
  179. };
  180. Cli_CmdStruct_t CliCo_TaskProfile =
  181. {
  182.     "profile",
  183.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  184.     CliCoOptionList_TaskProfile,
  185.     "Task profile information",
  186.     NULL,
  187.     NULL,
  188.     NULL
  189. };
  190. /*** 1st level CLI Command Option - "task" 
  191. ***/
  192. Cli_CmdStruct_t *CliRcoOptionList_Task[] = 
  193. {
  194.     &CliCo_TaskLogThreshold,
  195.     &CliCo_TaskCalls,
  196.     &CliCo_TaskClr,
  197.     &CliCo_TaskMax,
  198.     &CliCo_TaskList,
  199.     &CliCo_TaskProfile,
  200.     &CliCo_TaskSwitches,
  201.     &CliCo_TaskStacks,
  202.     NULL
  203. };
  204. Cli_CmdStruct_t  CliRco_Task = 
  205. {
  206.     "task",
  207.     ALL_ACCESS_MODE | ALL_PRODUCT_TYPE,
  208.     CliRcoOptionList_Task,
  209.     "Task display commands",
  210.     NULL,
  211.     NULL,
  212.     NULL
  213. };                       
  214. /*****************************************************************************
  215. * CliCoVoProc_TaskLogThreshold - Set logging threshold for unpreempted CPU usage. 
  216. *
  217. * Returns:
  218. *   int - 0 on success, -1 on failure.
  219. *
  220. * Description:
  221. *   
  222. *
  223. * History:
  224. *   1/3/00     BM  Adapted MA's original version for Ints Threshold command.
  225. *
  226. *****************************************************************************/
  227. int CliCoVoProc_TaskLogThreshold(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  228. {
  229.     #ifdef TW_TASK_MAX_CYCLES_PROFILING                                    
  230.         int NewThreshold;
  231.     
  232.         if (sscanf(CmdStr + Ptr, "%lu", &NewThreshold) != 1) 
  233.         {
  234.             return Cli_Printf(pSess, badParamStr);
  235.         }
  236.     
  237.         TwTask_LogThreshold = NewThreshold;
  238.     #else
  239.         return Cli_Printf(pSess, "Task profiling not enabledn");
  240.     #endif
  241.     
  242.     return 0;
  243. }
  244. static int CliCoVoproc_TaskClr(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  245. {
  246.     TwTask_ClearMax ((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  247.     return 0;
  248. }
  249.                            
  250. static int CliCoVoproc_TaskMax(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  251. {
  252.     TwTask_PrintMax ((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  253.     return 0;
  254. }
  255. static int CliCoVoproc_TaskList(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  256. {
  257.     TwTask_Print((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  258.     return 0;
  259. }
  260. static int CliCoVoproc_TaskCalls(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  261. {
  262.     TwTask_PrintCallTrace((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  263.     return 0;
  264. }
  265. static int CliCoVoproc_TaskSwitches(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  266. {
  267.     TwTask_PrintSwitchTrace((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  268.     return 0;
  269. }
  270. static int CliCoVoproc_TaskStacks(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  271. {
  272.     TwTask_PrintStacks((Cli_Printf_t) Cli_Printf, (void *) pSess) ;
  273.     return 0;
  274. }
  275. static int CliCoVoproc_TaskProfileStart(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  276. {
  277.     TwTask_ProfileBegin(NULL, 0, 0) ;
  278.     return 0;
  279. }
  280. static int CliCoVoproc_TaskProfileStop(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  281. {
  282.     TwTask_ProfileEnd() ;
  283.     return 0;
  284. }
  285. static int CliCoVoproc_TaskProfileFreq(Cli_cmdSession_t *pSess, char *CmdStr, int Ptr)
  286. {
  287.     int  reportEveryNseconds;
  288.     if (sscanf(CmdStr + Ptr, "%d", &reportEveryNseconds) != 1)
  289.         goto BadParamError;
  290.     if (reportEveryNseconds < 1)
  291.         goto BadParamError;
  292.     TwTask_ProfileFreq((Cli_Printf_t) Cli_Printf, (void *) pSess, reportEveryNseconds);
  293.     return 0;
  294. BadParamError:
  295.     Cli_Printf(pSess, badParamStr);
  296.     return 0;
  297. }