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

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_nav.c %
  11. *  %version:       23 %
  12. *  %date_modified: Wed Nov 20 17:28:08 2002 %
  13. *  %derived_by:    hooydona %
  14. *  Creation date:  Thu Jun 14 16:09:03 2001
  15. *  First author:   klerxm
  16. *
  17. *  Advanced Systems and Applications Lab - Eindhoven
  18. *
  19. *  Continuus %full_filespec: thg_nav.c~23:csrc:1 %
  20. *
  21. *  Description:    Test harness of the Navigator
  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-09-04 klerxm   Changes required for new global header files
  30. *   7  2001-12-04 kasterej Retrieve event data in NavCallback 
  31. *   8  2001-12-07 kasterej Remove unsubscribe in Term() 
  32. *   9  2001-12-11 kasterej Change NAV_NOF_CHANNELS to NAV_CHANNELS_CONFIG 
  33. *  10  2001-12-14 kasterej Change debug output EventNofChannnels to
  34. *                          EventChannelsConfig 
  35. *  11  2001-12-19 kasterej Add GetState function
  36. *  12  2002-01-11 novosadt pointer in NAV_SetProgramList (PR277)
  37. *  13  2002-01-11 kasterej Change EventData of NAV_EVENT_STARTED (Int8 to Int16)
  38. *  14  2002-01-15 kasterej Make programList global variable
  39. *  15  2002-01-30 kasterej Add GetPlayList function and NAV_CHANGE_MODE event
  40. *  16  2002-02-13 kasterej Add performance feedback to PlayTrack/PlayAtTimecode
  41. *  17  2002-02-22 potm     Replaced SACD_ChannelsDef with 
  42. *                          SACD_ChannelsConfigDef (CR260)
  43. *  18  2002-02-26 kasterej Add NAV_EVENT_WARNING and (more) performance feedback
  44. *  19  2002-02-27 kokh     TH_Send -> SAMP(TH_Send)
  45. *  20  2002-09-23 klerxm   Use only UInt32 type parameters with TH_GetParam
  46. *  21  2002-11-20 novosadt Added PLAY_SEQ_TRACK
  47. *  22  2003-07-01 potm     Added 1394 subscription functions
  48. *
  49. *******************************************************************************/
  50. #define COMP_PREFIX "NAV"
  51. /*******************************************************************************
  52. *                                Include Files
  53. *******************************************************************************/
  54. #include "config.h"
  55. #ifdef TEST_HARNASS
  56. #include <samp_gen.h>
  57. #include <samp_nav.h>
  58. #include <samp_nav_exp.h>
  59. #if 0
  60. #include <nav.h>
  61. #endif
  62. #include <testharn.h>
  63. #include <glue_osa.h>
  64. #include "samp_osa_exp.h"
  65. #include "samp_apm.h"
  66. #include "samp_sdm.h"
  67. /*******************************************************************************
  68. *                               Macro Definitions
  69. *******************************************************************************/
  70. #ifdef THGNAV
  71. /*******************************************************************************
  72. *                               Data Definitions
  73. *******************************************************************************/
  74. SAMP(NAV_ProgramListDef) SAMP(programList);
  75. SAMP(UInt32) semId1394;
  76. /*******************************************************************************
  77. *                              Function prototype
  78. *******************************************************************************/
  79. static SAMP(SACD_TimeCode) totc( SAMP(UInt32) min, SAMP(UInt32) sec, SAMP(UInt32) fr)
  80. {
  81.   SAMP(SACD_TimeCode) t;
  82.   t.min = (unsigned char) ( min );
  83.   t.sec = (unsigned char) ( sec );
  84.   t.fr  = (unsigned char) ( fr );
  85.   return t;
  86. }
  87. static void NavCallback(SAMP(BitSet32) Event, void * EventData)
  88. {
  89.   switch( Event )
  90.   {
  91.   case NAV_ACTIVATED:
  92.     DAC_Initialize_For_SACD(); //todo: check later.
  93.     DAC_Set_DSD_Mode(1); //back to pcm mode.
  94.     SAMP(APM_SetOutputMode)(SAMP(APM_OUT_DSD), SAMP(APM_OUT_DSD));
  95.     SAMP(SDM_SetDacPinning)(0,  0,
  96.                                    0,  0,
  97.                                    0,  0,
  98.                                    0,  0,
  99.                                    0,  0,
  100.                                    0,  0,
  101.                                    SAMP(SDM_DSD_CLOCK), 0, 0);
  102.     SAMP(TH_Send)( "NAV" , "EventActivated", "" );
  103.     break;
  104.   case NAV_NOT_ACTIVATED:
  105.     SAMP(TH_Send)( "NAV" , "EventNotActivated", "" );
  106.     break; 
  107.   case NAV_STARTED:
  108.     {
  109.     SAMP(Int32) speed = *((SAMP(Int16) *) EventData);
  110.     SAMP(TH_Send)( "NAV" , "EventStarted", "%d", speed );
  111.     }
  112.     break; 
  113.   case NAV_PAUSED:
  114.     SAMP(TH_Send)( "NAV" , "EventPaused", "" );
  115.     break; 
  116.   case NAV_STOPPED:
  117.     SAMP(TH_Send)( "NAV" , "EventStopped", "" );
  118.     break; 
  119.   case NAV_FINISHED:
  120.     SAMP(TH_Send)( "NAV" , "EventFinished", "" );
  121.     break; 
  122.   case NAV_PROGRESS_INFO:
  123.     {
  124.     SAMP(NAV_ProgressInfoDef) *info = (SAMP(NAV_ProgressInfoDef) *) EventData;
  125.     SAMP(TH_Send)("NAV" , "ProgressInfo", "%u%u%u%u%u%u%u%u%u", (SAMP(UInt32))info->track, (SAMP(UInt32))info->index,
  126.                                                           (SAMP(UInt32))info->abs_time.min, (SAMP(UInt32))info->abs_time.sec,
  127.                                                           (SAMP(UInt32))info->abs_time.fr, (SAMP(UInt32))info->rel_time.min,
  128.                                                           (SAMP(UInt32))info->rel_time.sec, (SAMP(UInt32))info->rel_time.fr,
  129.                                                           (SAMP(UInt32))info->pause);
  130.     }
  131.     break;
  132.   case NAV_MODE_CHANGE:
  133.     {
  134.     SAMP(NAV_ModeChangeDef) mode = *(SAMP(NAV_ModeChangeDef) *) EventData;
  135.     SAMP(TH_Send)("NAV" , "EventModeChange", "%u%u", mode.reshuffled, mode.repeat_ab_canceled);
  136.     }
  137.     break; 
  138.   case NAV_WARNING:
  139.     {
  140.     SAMP(NAV_WarningCodeDef) warningCode = *(SAMP(NAV_WarningCodeDef) *) EventData;
  141.     SAMP(TH_Send)( "NAV" , "EventWarning", "%u", warningCode );
  142.     }
  143.     break;
  144.   case NAV_ERROR:
  145.     {
  146.     SAMP(NAV_ErrorCodeDef) errorCode = *(SAMP(NAV_ErrorCodeDef) *) EventData;
  147.     SAMP(TH_Send)( "NAV" , "EventError", "%u", errorCode );
  148.     }
  149.     break; 
  150.   case NAV_CHANNELS_CONFIG:
  151.     {
  152.     SAMP(SACD_ChannelsConfigDef) channels = *((SAMP(SACD_ChannelsConfigDef) *)EventData);
  153.     SAMP(TH_Send)( "NAV" , "EventChannelsConfig", "%u", (SAMP(UInt32))channels );
  154.     }
  155.     break; 
  156.   break; 
  157.   default:
  158.     SAMP(TH_Send)( "TESTH" , "***ERROR***", "Unknown event received" );
  159.   break;
  160.   }
  161. }
  162. static void NavCallback1394(SAMP(BitSet32) Event, void * EventData)
  163. {
  164.   switch( Event )
  165.   {
  166.   case NAV_1394_CHANNELS_CONFIG:
  167.     {
  168.     SAMP(SACD_ChannelsConfigDef) channels = *((SAMP(SACD_ChannelsConfigDef) *)EventData);
  169.     SAMP(TH_Send)( "NAV" , "Event1394ChannelsConfig", "%u", channels );
  170.     SAMP(OS_SemP)( semId1394, OS_FOREVER );
  171.     }
  172.     break; 
  173.   break; 
  174.   default:
  175.     SAMP(TH_Send)( "TESTH" , "***ERROR***", "Unknown event received" );
  176.   break;
  177.   }
  178. }
  179. #endif
  180. DECLARE_GROUPFUNC(THG_NAV)
  181. /*******************************************************************************
  182. *                          Global test-harness function
  183. *******************************************************************************/
  184. DEFINE_GROUPFUNC(THG_NAV)
  185. #ifdef THGNAV
  186.   GROUP_SWITCH
  187. #if 0
  188.   CASE_CMD( "Init" )
  189.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  190.     lErr = SAMP_EXP(NAV_Init)();
  191.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);          
  192.   END_CASE
  193.   CASE_CMD( "Term" )
  194.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  195.     lErr = SAMP_EXP(NAV_Term)();
  196.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  197.   END_CASE
  198.   CASE_CMD( "Activate" )
  199.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  200.     lErr = SAMP_EXP(NAV_Activate)();
  201.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  202.   END_CASE
  203.   CASE_CMD( "Reactivate" )
  204.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  205.     lErr = SAMP_EXP(NAV_Reactivate)();
  206.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  207.   END_CASE
  208.   CASE_CMD( "Deactivate" )
  209.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  210.     lErr = SAMP_EXP(NAV_Deactivate)();
  211.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  212.   END_CASE
  213. #endif
  214.   CASE_CMD( "AreaSwitch" )
  215.     SAMP(UInt32) lArea;
  216.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  217.  
  218.     TH_GetParam (OPTIONS, "%u", &lArea);
  219.     lErr = SAMP_EXP(NAV_AreaSwitch)(lArea);
  220.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  221.   END_CASE
  222.   CASE_CMD( "PlayAtTimecode" )
  223.     SAMP(UInt32) lStartMin;
  224.     SAMP(UInt32) lStartSec;
  225.     SAMP(UInt32) lStartFrame;
  226.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  227.     SAMP(UInt32) startTime, endTime;
  228.  
  229.     TH_GetParam (OPTIONS, "%u%u%u", &lStartMin, &lStartSec, &lStartFrame);
  230.     SAMP(OS_GetTime)(&startTime);
  231.     lErr = SAMP_EXP(NAV_PlayAtTimecode)( totc(lStartMin, lStartSec, lStartFrame) );
  232.     SAMP(OS_GetTime)(&endTime);
  233.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, endTime-startTime);
  234.   END_CASE
  235.   CASE_CMD( "PlayTrack" )
  236.     SAMP(UInt32) lTrack;
  237.     SAMP(UInt32) lIndex;
  238.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  239.     SAMP(UInt32) startTime, endTime;
  240.  
  241.     TH_GetParam (OPTIONS, "%u%u", &lTrack, &lIndex);
  242.     SAMP(OS_GetTime)(&startTime);
  243.     lErr = SAMP_EXP(NAV_PlayTrack)((SAMP(UInt16))lTrack, (SAMP(UInt16))lIndex);
  244.     SAMP(OS_GetTime)(&endTime);
  245.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", (SAMP(UInt32))lErr, (SAMP(UInt32))(endTime-startTime));
  246.   END_CASE
  247.   CASE_CMD( "Stop" )
  248.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  249.     SAMP(UInt32) startTime, endTime;
  250.     SAMP(OS_GetTime)(&startTime);
  251.     lErr = SAMP_EXP(NAV_Stop)();
  252.     SAMP(OS_GetTime)(&endTime);
  253.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, endTime-startTime);
  254.   END_CASE
  255.   CASE_CMD( "Pause" )
  256.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  257.     SAMP(UInt32) startTime, endTime;
  258.     SAMP(OS_GetTime)(&startTime);
  259.     lErr = SAMP_EXP(NAV_Pause)();
  260.     SAMP(OS_GetTime)(&endTime);
  261.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr,  endTime-startTime);
  262.   END_CASE
  263.   CASE_CMD( "ResumePlay" )
  264.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  265.     SAMP(UInt32) startTime, endTime;
  266.     SAMP(OS_GetTime)(&startTime);
  267.     lErr = SAMP_EXP(NAV_ResumePlay)();
  268.     SAMP(OS_GetTime)(&endTime);
  269.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, endTime-startTime);
  270.   END_CASE
  271.   CASE_CMD( "NextTrack" )
  272.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  273.     SAMP(UInt32) startTime, endTime;
  274.     SAMP(OS_GetTime)(&startTime);
  275.     lErr = SAMP_EXP(NAV_NextTrack)();
  276.     SAMP(OS_GetTime)(&endTime);
  277.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, endTime-startTime);
  278.   END_CASE
  279.   CASE_CMD( "PreviousTrack" )
  280.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  281.     SAMP(UInt32) startTime, endTime;
  282.     SAMP(OS_GetTime)(&startTime);
  283.     lErr = SAMP_EXP(NAV_PreviousTrack)();
  284.     SAMP(OS_GetTime)(&endTime);
  285.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, endTime-startTime);
  286.   END_CASE
  287.   CASE_CMD( "ForwardScan" )
  288.     SAMP(UInt32) lSpeed;
  289.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  290.     SAMP(UInt32) startTime, endTime;
  291.     TH_GetParam (OPTIONS, "%u", &lSpeed);
  292.     SAMP(OS_GetTime)(&startTime);
  293.     lErr = SAMP_EXP(NAV_ForwardScan)((SAMP(UInt8))lSpeed);
  294.     SAMP(OS_GetTime)(&endTime);
  295.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, endTime-startTime);
  296.   END_CASE
  297.   CASE_CMD( "BackwardScan" )
  298.     SAMP(UInt32) lSpeed;
  299.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  300.     SAMP(UInt32) startTime, endTime;
  301.     TH_GetParam (OPTIONS, "%u", &lSpeed);
  302.     SAMP(OS_GetTime)(&startTime);
  303.     lErr = SAMP_EXP(NAV_BackwardScan)((SAMP(UInt8))lSpeed);
  304.     SAMP(OS_GetTime)(&endTime);
  305.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, endTime-startTime);
  306.   END_CASE
  307.   CASE_CMD( "Repeat" )
  308.     SAMP(UInt32) lRepeatMode;
  309.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  310.     TH_GetParam (OPTIONS, "%u", &lRepeatMode);
  311.     switch ( lRepeatMode )
  312.     {
  313.     case 0 :
  314.       lErr = SAMP_EXP(NAV_Repeat)(SAMP(NAV_REPEAT_OFF));
  315.       break;
  316.     case 1 :
  317.       lErr = SAMP_EXP(NAV_Repeat)(SAMP(NAV_REPEAT_TRACK));
  318.       break;
  319.     case 2 :
  320.       lErr = SAMP_EXP(NAV_Repeat)(SAMP(NAV_REPEAT_ALL));
  321.       break;
  322.     default :
  323.       break;
  324.     }
  325.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  326.   END_CASE
  327.   CASE_CMD( "RepeatAB" )
  328.     SAMP(UInt32) lRepeatABMode;
  329.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  330.     TH_GetParam (OPTIONS, "%u", &lRepeatABMode);
  331.     switch ( lRepeatABMode )
  332.     {
  333.     case 0 :
  334.       lErr = SAMP_EXP(NAV_RepeatAB)(SAMP(NAV_REPEAT_AB_OFF));
  335.       break;
  336.     case 1 :
  337.       lErr = SAMP_EXP(NAV_RepeatAB)(SAMP(NAV_REPEAT_AB_A));
  338.       break;
  339.     case 2 :
  340.       lErr = SAMP_EXP(NAV_RepeatAB)(SAMP(NAV_REPEAT_AB_AB));
  341.       break;
  342.     default :
  343.       break;
  344.     }
  345.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  346.   END_CASE
  347.   CASE_CMD( "Shuffle" )
  348.     SAMP(UInt32) lShuffleMode;
  349.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  350.     TH_GetParam (OPTIONS, "%u", &lShuffleMode);
  351.     switch ( lShuffleMode )
  352.     {
  353.     case 0 :
  354.       lErr = SAMP_EXP(NAV_Shuffle)(FALSE);
  355.       break;
  356.     case 1 :
  357.       lErr = SAMP_EXP(NAV_Shuffle)(TRUE);
  358.       break;
  359.     default :
  360.       break;
  361.     }
  362.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  363.   END_CASE
  364.   CASE_CMD( "IntroScan" )
  365.     SAMP(UInt32) lDuration;
  366.     SAMP(UInt32) lIntroScanMode;
  367.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  368.     TH_GetParam (OPTIONS, "%u%u", &lIntroScanMode, &lDuration);
  369.     switch ( lIntroScanMode )
  370.     {
  371.     case 0 :
  372.       lErr = SAMP_EXP(NAV_IntroScan)(FALSE, (SAMP(UInt8)) lDuration);
  373.       break;
  374.     case 1 :
  375.       lErr = SAMP_EXP(NAV_IntroScan)(TRUE, (SAMP(UInt8)) lDuration);
  376.       break;
  377.     default :
  378.       break;
  379.     }
  380.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  381.   END_CASE
  382.   CASE_CMD( "SetPlaySequence" )
  383.     SAMP(UInt32) lPlaySequence;
  384.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  385.     TH_GetParam (OPTIONS, "%u", &lPlaySequence);
  386.     switch ( lPlaySequence )
  387.     {
  388.     case 0 :
  389.       lErr = SAMP_EXP(NAV_SetPlaySequence)(SAMP(NAV_PLAY_SEQ_ALL));
  390.       break;
  391.     case 1 :
  392.       lErr = SAMP_EXP(NAV_SetPlaySequence)(SAMP(NAV_PLAY_SEQ_PROGRAM));
  393.       break;
  394.     case 2 :
  395.       lErr = SAMP_EXP(NAV_SetPlaySequence)(SAMP(NAV_PLAY_SEQ_TRACK));
  396.       break;
  397.     default :
  398.       break;
  399.     }
  400.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  401.   END_CASE
  402.   CASE_CMD( "SetProgramList" )
  403.   
  404.   /* This can be called only after tracks have been set by 'SetProgramListTrack' */
  405.     SAMP(UInt32) number;
  406.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  407.     TH_GetParam (OPTIONS, "%u", &number);
  408.     SAMP(programList.NumberOfTracks) = (SAMP(UInt8))number;  
  409.     lErr = SAMP_EXP(NAV_SetProgramList)(&SAMP(programList));
  410.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  411.   END_CASE
  412.   CASE_CMD( "SetProgramListTrack" )
  413.     SAMP(UInt32) index, value;
  414.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  415.     TH_GetParam (OPTIONS, "%u%u", &index, &value);
  416.     SAMP(programList.tracks[index]) = (SAMP(UInt8))value;
  417.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  418.   END_CASE
  419.   CASE_CMD( "GetState" )
  420.     SAMP(NAV_StateDef) stateDef;
  421.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  422.     lErr = SAMP_EXP(NAV_GetState)(&stateDef);
  423.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u%u%u%u%u%u%d", lErr, stateDef.PlayState,
  424.             stateDef.PlaySequence, stateDef.RepeatMode, stateDef.RepeatABMode,
  425.             (SAMP(UInt32))stateDef.IntroOn, (SAMP(UInt32))stateDef.ShuffleOn,
  426.             (SAMP(Int32))stateDef.PlaySpeed);
  427.   END_CASE
  428.   CASE_CMD( "GetPlayList" )
  429.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  430.     SAMP(UInt8) i;
  431.     SAMP(NAV_ProgramListDef) playList;
  432.  
  433.     lErr = SAMP_EXP(NAV_GetPlayList)(&playList);
  434.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u%u", lErr, playList.NumberOfTracks);
  435.     for(i=0; i < playList.NumberOfTracks; i++)
  436.     {
  437.       SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", playList.tracks[i]);
  438.     }
  439.   END_CASE
  440.   CASE_CMD( "Subscribe" )
  441.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  442.     lErr = SAMP_EXP(NAV_Subscribe)( NavCallback
  443.                               , ( NAV_ACTIVATED
  444.                                 | NAV_NOT_ACTIVATED
  445.                                 | NAV_STARTED
  446.                                 | NAV_PAUSED
  447.                                 | NAV_STOPPED
  448.                                 | NAV_FINISHED
  449.                                 | NAV_PROGRESS_INFO
  450.                                 | NAV_MODE_CHANGE
  451.                                 | NAV_WARNING
  452.                                 | NAV_ERROR
  453.                                 | NAV_CHANNELS_CONFIG) );
  454.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", (SAMP(UInt32))lErr);
  455.   END_CASE
  456.   CASE_CMD( "Unsubscribe" )
  457.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  458.     lErr = SAMP_EXP(NAV_Subscribe)( NavCallback, 0);
  459.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  460.   END_CASE
  461.   CASE_CMD( "Subscribe1394" )
  462.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  463.     lErr = SAMP_EXP(OS_SemCreate)(0, &semId1394);
  464.     lErr |= SAMP_EXP(NAV_Subscribe_1394)( NavCallback1394, NAV_1394_CHANNELS_CONFIG );
  465.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  466.   END_CASE
  467.   CASE_CMD( "Unsubscribe1394" )
  468.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  469.     lErr = SAMP_EXP(NAV_Subscribe_1394)( NavCallback1394, 0);
  470.     lErr |= SAMP_EXP(OS_SemDelete)(semId1394);
  471.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  472.   END_CASE
  473.   CASE_CMD( "Continue1394" )
  474.     SAMP(ErrCode) lErr = SAMP(ERR_OK);
  475.     lErr = SAMP_EXP(OS_SemV)(semId1394);
  476.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%u", lErr);
  477.   END_CASE
  478.   DEFAULT
  479.     SAMP(TH_Send)(COMP_PREFIX, cmd, "%s", "Unknown command");
  480.   END_CASE
  481. #endif
  482. END_GROUPFUNC
  483. /*******************************************************************************
  484. *                                 End of File
  485. *******************************************************************************/
  486. #endif