thg_glue.c
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:13k
源码类别:

DVD

开发平台:

Others

  1. /*******************************************************************************
  2. * Copyright(c) Philips Consumer Electronics B.V. 2001
  3. * The attached material and the information contained therein is proprietary
  4. * to Philips and is issued only under strict confidentiality arrangements.
  5. * It shall not be used, reproduced, copied in whole or in part, adapted,
  6. * modified, or disseminated without a written license of Philips.
  7. * It must be returned to Philips upon its first request.
  8. *
  9. *  Project:        SA-MP ( Super Audio Media Player )
  10. *  File %name:     thg_glue.c %
  11. *  %version:       17 %
  12. *  %date_modified: Fri Nov 15 09:39:38 2002 %
  13. *  %derived_by:    klerxm %
  14. *  Creation date:  Thu Jun 14 16:08:55 2001
  15. *  First author:   klerxm
  16. *
  17. *  Advanced Systems and Applications Lab - Eindhoven
  18. *
  19. *  Continuus %full_filespec: thg_glue.c~17:csrc:1 %
  20. *
  21. *  Description:    Test harness of the Glue layer
  22. *
  23. * Change history:
  24. *
  25. * Rev  Date       Who      Comments
  26. * ---- ---------- -------- -----------------------------------------------------
  27. *   1  2001-06-06 klerxm   Dummy version
  28. *   2  2001-06-14 klerxm   Template update
  29. *   3  2001-07-30 klerxm   Initial version
  30. *   4  2001-09-04 klerxm   Changes required for new global header files
  31. *   5  2001-09-10 klerxm   Added DBG_SetMask
  32. *   6  2001-12-17 kokh     Added interrupt installation
  33. *   7  2002-02-19 klerxm   See CRPR154: Added all required interface functions
  34. *                          for testing purposes
  35. *   8  2002-02-27 kokh     TH_Send -> SAMP(TH_Send)
  36. *   9  2002-03-14 kokh     Additions for tests on OSA interface
  37. *  10  2002-03-26 klerxm   Added some #ifdef THG_GLUE 's
  38. *  11  2002-04-05 potm     Extended DAC_SetMode with parameters for stereo DAC
  39. *                          and moved parameter conversion to glue layer (PR393)
  40. *  12  2002-04-19 klerxm   Removed OS_Disable/EnableInterrupts (CRPR391)
  41. *  13  2002-05-15 klerxm   Added time measurement for BE command (CRPR389)
  42. *  14  2002-05-24 klerxm   Include OSA test functions only if DEVELOPMENT defined
  43. *  15  2002-10-14 potm     Fixed some warnings
  44. *  16  2002-11-06 potm     Replaced UInt16* with UInt32* in call to TH_GetParam
  45. *  17  2002-11-15 klerxm   Solved implicit narrowing cast compiler warning
  46. *
  47. *******************************************************************************/
  48. #define COMP_PREFIX "GLUE"
  49. /*******************************************************************************
  50. *                                Include Files
  51. *******************************************************************************/
  52. #include "config.h"
  53. #ifdef TEST_HARNASS
  54. #include <samp_gen.h>
  55. #include <samp_sdm.h>
  56. #include <glue_be.h>
  57. #include <glue_dbg.h>
  58. #include <glue_test.h>
  59. #include <testharn.h>
  60. #include <stdlib.h>
  61. /*******************************************************************************
  62. *                               Macro Definitions
  63. *******************************************************************************/
  64. /*******************************************************************************
  65. *                               Data Definitions
  66. *******************************************************************************/
  67. #ifdef THGGLUE
  68. #ifdef DEVELOPMENT
  69. static char osaBuffer[2][1024];
  70. static int  osaFill[2] = { 0, 0 };
  71. static int  osaInt = 0;
  72. #endif
  73. #endif
  74. /*******************************************************************************
  75. *                              Function prototype
  76. *******************************************************************************/
  77. DECLARE_GROUPFUNC(THG_GLUE)
  78. /*******************************************************************************
  79. *                                Local Functions
  80. *******************************************************************************/
  81. #ifdef THGGLUE
  82. #ifdef DEVELOPMENT
  83. void TaskSpawn(int buf)
  84. {
  85.   int i = 0;
  86.   SAMP(TH_Send)(COMP_PREFIX, "TaskStarted", "%u", buf);
  87.   while (i<osaFill[buf])
  88.   {
  89.     /* find the comma */
  90.     int j = i;
  91.     while (j < osaFill[buf])
  92.     {
  93.       if (osaBuffer[buf][j] == ',')
  94.       {
  95.         osaBuffer[buf][j] = '';
  96.         j++;
  97.         break;
  98.       }
  99.       j++;
  100.     }
  101.     THG_GLUE(&osaBuffer[buf][i], &osaBuffer[buf][j]);
  102.     i += j + strlen(&osaBuffer[buf][j]) + 1;
  103.   }
  104.   osaBuffer[buf][0] = 0;
  105.   osaFill[buf]      = 0;
  106.   SAMP(TH_Send)(COMP_PREFIX, "TaskEnded", "%u", buf);
  107. }
  108. void TaskSpawn0(void)
  109. {
  110.   TaskSpawn(0);
  111. }
  112. void TaskSpawn1(void)
  113. {
  114.   TaskSpawn(1);
  115. }
  116. void TaskSpawn2(void)
  117. {
  118.   int i, j, prod;
  119.   SAMP(UInt32) tm, tm2;
  120.   SAMP(TH_Send)(COMP_PREFIX, "TaskStarted", "%u", 2);
  121.   osaInt = 0;
  122.   /* Just occupy CPU for a while! */
  123.   i = 0;
  124.   SAMP(OS_GetTime)(&tm);
  125.   do {
  126.     for (j=0; j<100000; j++)
  127.     {
  128.       prod = i*j + i + j;
  129.     }
  130.     SAMP(OS_GetTime)(&tm2);
  131.   } while (tm2 < tm+10);
  132.   i = i*20;
  133.   while (i > 0)
  134.   {
  135.     for (j=0; j<100000; j++)
  136.     {
  137.       prod = i*j + i + j;
  138.     }
  139.   }
  140.   SAMP(TH_Send)(COMP_PREFIX, "NotInterrupted", "%u", osaInt);
  141.   SAMP(TH_Send)(COMP_PREFIX, "TaskEnded", "%u", 2);
  142. }
  143. void TaskSpawn3(void)
  144. {
  145.   int i, j, prod;
  146.   SAMP(UInt32) tm, tm2;
  147.   SAMP(TH_Send)(COMP_PREFIX, "TaskStarted", "%u", 3);
  148.   /* Just occupy CPU for a while! */
  149.   i = 0;
  150.   SAMP(OS_GetTime)(&tm);
  151.   do {
  152.     for (j=0; j<100000; j++)
  153.     {
  154.       prod = i*j + i + j;
  155.     }
  156.     osaInt = 1;
  157.     SAMP(OS_GetTime)(&tm2);
  158.   } while (tm2 < tm+200);
  159.   SAMP(TH_Send)(COMP_PREFIX, "TaskEnded", "%u", 3);
  160. }
  161. #endif
  162. #endif
  163. /*******************************************************************************
  164. *                          Global test-harness function
  165. *******************************************************************************/
  166. DEFINE_GROUPFUNC(THG_GLUE)
  167. #ifdef THGGLUE
  168.   GROUP_SWITCH
  169. #ifdef DEVELOPMENT
  170.   CASE_CMD( "DBG_SetMask" )
  171.     SAMP(UInt32) lMask;
  172.     char         lPrefix[8];
  173.     TH_GetParam (OPTIONS, "%s%u", lPrefix, &lMask);
  174.     SAMP(DBG_SetMask)( lPrefix, (SAMP(Int16))lMask );
  175.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", 0);
  176.   END_CASE
  177. #endif
  178.   CASE_CMD ("BE_Init")
  179.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  180.     lErr = SAMP(BE_Init)();
  181.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  182.   END_CASE
  183.   CASE_CMD ("BE_Term")
  184.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  185.     lErr = SAMP(BE_Term)();
  186.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  187.   END_CASE
  188.   CASE_CMD( "BE_Seek" )
  189.     SAMP(ErrCode) lErr;
  190.     SAMP(UInt32)  lPos;
  191.     SAMP(UInt32)  lT0,lT1;
  192.     TH_GetParam (OPTIONS, "%u", &lPos);
  193.     SAMP(OS_GetTime)(&lT0);
  194.     lErr = SAMP(BE_Seek)( lPos&~0xF );
  195.     SAMP(OS_GetTime)(&lT1);
  196.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", (SAMP(UInt32))lErr, lT1-lT0);
  197.   END_CASE
  198.   CASE_CMD( "BE_SetTransferRate" )
  199.     SAMP(ErrCode) lErr;
  200.     SAMP(UInt32)  lRate;
  201.     SAMP(UInt32)  lT0,lT1;
  202.     TH_GetParam (OPTIONS, "%u", &lRate);
  203.     SAMP(OS_GetTime)(&lT0);
  204.     lErr = SAMP(BE_SetTransferRate)( lRate );
  205.     SAMP(OS_GetTime)(&lT1);
  206.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", (SAMP(UInt32))lErr, lT1-lT0);
  207.   END_CASE
  208.   CASE_CMD( "BE_GetDataArea" )
  209.     SAMP(ErrCode) lErr;
  210.     SAMP(UInt32)  lStart = 0, lEnd = 0, lLayer0 = 0;
  211.     SAMP(UInt32)  lT0,lT1;
  212.     SAMP(OS_GetTime)(&lT0);
  213.     lErr = SAMP(BE_GetDataArea)( &lStart, &lEnd, &lLayer0 );
  214.     SAMP(OS_GetTime)(&lT1);
  215.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u%u%u%u", lStart, lEnd, lLayer0, (SAMP(UInt32))lErr, lT1-lT0);
  216.   END_CASE
  217.   CASE_CMD ("BE_TrayOpen")
  218.     SAMP(ErrCode) lErr;
  219.     lErr = SAMP(BE_TrayOpen)();
  220.     SAMP(TH_Send) (COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  221.   END_CASE
  222.   CASE_CMD ("BE_TrayClose")
  223.     SAMP(ErrCode) lErr;
  224.     lErr = SAMP(BE_TrayClose)();
  225.     SAMP(TH_Send) (COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  226.   END_CASE
  227.   CASE_CMD ("BE_ReadToc")
  228.     SAMP(ErrCode) lErr;
  229.     SAMP(UInt32)  lT0,lT1;
  230.     SAMP(OS_GetTime)(&lT0);
  231.     lErr = SAMP(BE_ReadToc)();
  232.     SAMP(OS_GetTime)(&lT1);
  233.     SAMP(TH_Send) (COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr, lT1-lT0);
  234.   END_CASE
  235. #ifdef THGSDM
  236.   CASE_CMD( "ISR_Install" )
  237.     void (*lFuroreISR)(void);
  238.     SAMP(ErrCode)  lErr = SAMP(ERR_OK);
  239.     SAMP(SDM_GetHandler)( &lFuroreISR );
  240.     lErr = SAMP(ISR_Install)( lFuroreISR );
  241.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  242.   END_CASE
  243. #endif
  244.   CASE_CMD ("DAC_Init")
  245.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  246.     lErr = SAMP(DAC_Init)();
  247.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  248.   END_CASE
  249.   CASE_CMD ("DAC_Term")
  250.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  251.     lErr = SAMP(DAC_Init)();
  252.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  253.   END_CASE
  254.   CASE_CMD ("DAC_SetMode")
  255.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  256.     SAMP(UInt32) lStream6ch, lStream2ch, lBaseFrequency, lPcmUpsampling6ch, lPcmUpsampling2ch;
  257.     TH_GetParam(OPTIONS, "%u%u%u%u%u", &lStream6ch, &lPcmUpsampling6ch, &lStream2ch, &lPcmUpsampling2ch, &lBaseFrequency);
  258.     lErr = SAMP(DAC_SetMode)(lStream6ch, lPcmUpsampling6ch, lStream2ch, lPcmUpsampling2ch, lBaseFrequency);
  259.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  260.   END_CASE
  261. #ifdef DEVELOPMENT
  262.   CASE_CMD ("StoreCmd")
  263.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  264.     int buf = atoi(OPTIONS);
  265.     if (buf >= 0 && buf < 2)
  266.     {
  267.       if (osaFill[buf] + strlen(OPTIONS) > 1024)
  268.       {
  269.         lErr = SAMP(ERR_INVALID_PARAM);
  270.       } else
  271.       {
  272.         /* find a comma */
  273.         unsigned int i=0;
  274.         while (i<strlen(OPTIONS))
  275.         {
  276.           if (OPTIONS[i] == ',')
  277.           {
  278.             i++;
  279.             break;
  280.           }
  281.           i++;
  282.         }
  283.         /* copy the command */
  284.         strcpy(&osaBuffer[buf][osaFill[buf]], &OPTIONS[i]);
  285.         osaFill[buf] += strlen(OPTIONS) - i + 1;
  286.       }
  287.     } else
  288.     {
  289.       lErr = SAMP(ERR_INVALID_PARAM);
  290.     }
  291.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  292.   END_CASE
  293.   CASE_CMD ("OS_TaskCreate")
  294.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  295.     SAMP(UInt32)  prio;
  296.     size_t        stacksize;
  297.     SAMP(UInt32)  tasknum;
  298.     SAMP(UInt32)  id = 0;
  299.     TH_GetParam (OPTIONS, "%u%u%u", &prio, &stacksize, &tasknum);
  300.     if (tasknum == 0)
  301.     {
  302.       lErr = SAMP(OS_TaskCreate)(prio, stacksize, TaskSpawn0, &id);
  303.     } else if (tasknum == 1)
  304.     {
  305.       lErr = SAMP(OS_TaskCreate)(prio, stacksize, TaskSpawn1, &id);
  306.     } else if (tasknum == 2)
  307.     {
  308.       lErr = SAMP(OS_TaskCreate)(prio, stacksize, TaskSpawn2, &id);
  309.     } else if (tasknum == 3)
  310.     {
  311.       lErr = SAMP(OS_TaskCreate)(prio, stacksize, TaskSpawn3, &id);
  312.     } else
  313.     {
  314.       lErr = SAMP(ERR_INVALID_PARAM);
  315.     }
  316.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, id);
  317.   END_CASE
  318.   CASE_CMD ("OS_TaskDelete")
  319.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  320.     SAMP(UInt32)  id;
  321.     TH_GetParam (OPTIONS, "%u", &id);
  322.     lErr = SAMP(OS_TaskDelete)(id);
  323.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  324.   END_CASE
  325.   CASE_CMD ("OS_SemCreate")
  326.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  327.     SAMP(UInt32)  units;
  328.     SAMP(UInt32)  id;
  329.     TH_GetParam (OPTIONS, "%u", &units);
  330.     lErr = SAMP(OS_SemCreate)(units, &id);
  331.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, id);
  332.   END_CASE
  333.   CASE_CMD ("OS_SemDelete")
  334.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  335.     SAMP(UInt32)  id;
  336.     TH_GetParam (OPTIONS, "%u", &id);
  337.     lErr = SAMP(OS_SemDelete)(id);
  338.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  339.   END_CASE
  340.   CASE_CMD ("OS_SemP")
  341.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  342.     SAMP(UInt32)  id;
  343.     SAMP(UInt32)  timeout;
  344.     TH_GetParam (OPTIONS, "%u%u", &id, &timeout);
  345.     lErr = SAMP(OS_SemP)(id, timeout);
  346.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  347.   END_CASE
  348.   CASE_CMD ("OS_SemV")
  349.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  350.     SAMP(UInt32)  id;
  351.     TH_GetParam (OPTIONS, "%u", &id);
  352.     lErr = SAMP(OS_SemV)(id);
  353.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  354.   END_CASE
  355.   CASE_CMD ("OS_TimerEvery")
  356.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  357.     SAMP(UInt32)  ticks;
  358.     SAMP(UInt32)  task;
  359.     SAMP(UInt32)  id=0;
  360.     TH_GetParam (OPTIONS, "%u%u", &ticks, &task);
  361.     if (task == 0)
  362.     {
  363.       lErr = SAMP(OS_TimerEvery)(ticks, TaskSpawn0, &id);
  364.     } else if (task == 1)
  365.     {
  366.       lErr = SAMP(OS_TimerEvery)(ticks, TaskSpawn1, &id);
  367.     } else
  368.     {
  369.       lErr = SAMP(ERR_INVALID_PARAM);
  370.     }
  371.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, id);
  372.   END_CASE
  373.   CASE_CMD ("OS_TimerCancel")
  374.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  375.     SAMP(UInt32)  id;
  376.     TH_GetParam (OPTIONS, "%u", &id);
  377.     lErr = SAMP(OS_TimerCancel)(id);
  378.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  379.   END_CASE
  380.   CASE_CMD ("OS_GetTime")
  381.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  382.     SAMP(UInt32)  ticks;
  383.     lErr = SAMP(OS_GetTime)(&ticks);
  384.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, ticks);
  385.   END_CASE
  386. #endif
  387.   DEFAULT
  388.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%s", "Unknown command");
  389.   END_CASE
  390. #endif
  391. END_GROUPFUNC
  392. /*******************************************************************************
  393. *                                 End of File
  394. *******************************************************************************/
  395. #endif