iframe.c
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:20k
- /* Includes ---------------------------------------------------------------- */
- #include <time.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <task.h>
- /* STAPI header------------------------------------------------------------- */
- #include "stddefs.h"
- #include "stlite.h"
- #include "stcommon.h"
- #include "stdevice.h"
- #include "sttbx.h"
- #include "testtool.h"
- #include "section.h"
- #include "errors.h"
- #include "vid.h"
- #include "vtg.h"
- #include "avslot.h"
- #include "stpti_hal.h"
- #include "debug.h"
- //#include "viddbg.h"
- #include "regevent.h" /* SLSL */
- #define I_FRAME_DATA 0
- #if (I_FRAME_DATA == 1)
- #include "mwaudio.h"
- #define I_FRAME_DATA_POINTER (unsigned char*)MPEG1_DATA
- #define I_FRAME_DATA_SIZE sizeof(MPEG1_DATA)
- #endif
- #if (I_FRAME_DATA == 2)
- #include "test.h"
- #define I_FRAME_DATA_POINTER (unsigned char*)ucBitMap
- #define I_FRAME_DATA_SIZE sizeof(ucBitMap)
- #endif
- #if (I_FRAME_DATA == 3)
- #include "ggbmpeg.h"
- #define I_FRAME_DATA_POINTER (unsigned char*)GoldenGateBridge
- #define I_FRAME_DATA_SIZE sizeof(GoldenGateBridge)
- #endif
- #define VD_FEED_SIZE (1024*5)
- #define DUMMY_BUF_SIZE (4096)
- static U8 *VID_Mem_p, *VID_Buffer_p;
- static U32 VID_BufferSize;
- /* Parameters required for video injection */
- static void *UserBufferStart_p;
- static void *UserBufferStop_p;
- static void *UserBufferCurrent_P;
- static void *VideoInputBuffWptr;
- static void *VideoInputBuffRptr;
- static void *VideoInputBuffStart;
- static void *VideoInputBuffStop;
- static semaphore_t * iframeStopDecodeLock ;
- static semaphore_t * iframePicDecodeLock ;
- /*-------------------------------------------------------------------------
- * Function : BackGround_VID_StartDecode
- Start the video decoding for the input parameters passed by the user.
- * Input :
- * Output :
- * Return : TRUE if fails, else FALSE.
- * ----------------------------------------------------------------------*/
- ST_ErrorCode_t BackGround_VID_StartDecode( void )
- {
- ST_ErrorCode_t ErrCode = ST_NO_ERROR;
- STVID_Freeze_t Freeze;
- STVID_StartParams_t VIDStartParams;
- STVID_Stop_t VID_StopMode = STVID_STOP_NOW;
- STVID_WindowParams_t WinParams = { STVID_WIN_ALIGN_VCENTRE_HCENTRE, STVID_WIN_SIZE_DONT_CARE };
- S32 InputWinPositionX;
- S32 InputWinPositionY;
- U32 InputWinWidth;
- U32 InputWinHeight;
- S32 OutputWinPositionX;
- S32 OutputWinPositionY;
- U32 OutputWinWidth;
- U32 OutputWinHeight;
-
- /*Primary decode is in auto mode whereas secondary decode is in manual mode which is required for resizing*/
- ErrCode = STVID_SetDisplayAspectRatioConversion(VID_ViewPortHandle_Multiple[0], STVID_DISPLAY_AR_CONVERSION_LETTER_BOX/*STVID_DISPLAY_AR_CONVERSION_LETTER_BOX STVID_DISPLAY_AR_CONVERSION_IGNORE*/);
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("STVID_SetDisplayAspectRatioConversion()Failed 0x%08Xn", ErrCode ));
- //return ErrCode;
- }
- ErrCode = STVID_GetIOWindows( VID_ViewPortHandle_Multiple[0],
- &InputWinPositionX, &InputWinPositionY,
- &InputWinWidth, &InputWinHeight,
- &OutputWinPositionX, &OutputWinPositionY,
- &OutputWinWidth, &OutputWinHeight );
-
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("GetIOWindows=%sn", KB_ErrorGetText(ErrCode)));
- STTBX_Print(("Input %d,%d,%d,%dnOutput %d,%d,%d,%dn",
- InputWinPositionX, InputWinPositionY, InputWinWidth, InputWinHeight,
- OutputWinPositionX, OutputWinPositionY, OutputWinWidth, OutputWinHeight ));
- }
- ErrCode = STVID_SetOutputWindowMode(VID_ViewPortHandle_Multiple[0], FALSE, &WinParams);
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("STVID_SetOutputWindowMode()Failed 0x%08Xn", ErrCode ));
- }
- ErrCode = STVID_SetIOWindows(VID_ViewPortHandle_Multiple[0], InputWinPositionX, InputWinPositionY,
- InputWinWidth, InputWinHeight,
- OutputWinPositionX, OutputWinPositionY,
- OutputWinWidth, OutputWinHeight );
-
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("STVID_SetIOWindows()Failed 0x%08Xn", ErrCode ));
- //return ErrCode;
- }
-
- /* stop video */
- Freeze.Field = STVID_FREEZE_FIELD_TOP;
- Freeze.Mode = STVID_FREEZE_MODE_NO_FLICKER;
- ErrCode = STVID_Stop(VID_Handle_Multiple[0], VID_StopMode, &Freeze);
- STTBX_Print(("IFRAME_BackGround_VID_StartDecode:: STVID_STOPn"));
-
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("BackGround: STVID_Stop()=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
- /* start video */
- VIDStartParams.StreamType = STVID_STREAM_TYPE_ES;
- VIDStartParams.BrdCstProfile = STVID_BROADCAST_DVB;
- VIDStartParams.RealTime = FALSE;//TRUE;
- VIDStartParams.UpdateDisplay = TRUE;
- VIDStartParams.StreamID = STVID_IGNORE_ID;
- VIDStartParams.DecodeOnce = FALSE;
-
- ErrCode = STVID_Start(VID_Handle_Multiple[0], &VIDStartParams);
- STTBX_Print(("IFRAME:: STVID_STARTn"));
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("BackGround: STVID_Start()=%sn", KB_ErrorGetText(ErrCode) ));
-
- Freeze.Field = STVID_FREEZE_FIELD_TOP;
- Freeze.Mode = STVID_FREEZE_MODE_NO_FLICKER;
- ErrCode = STVID_Stop(VID_Handle_Multiple[0], VID_StopMode, &Freeze); /*Stop again*/
- STTBX_Print(("IFRAME_BackGround_VID_StartDecode:: STVID_STOPn"));
-
- ErrCode = STVID_Start(VID_Handle_Multiple[0], &VIDStartParams); /*Restart*/
- STTBX_Print(("IFRAME:: STVID_STARTn"));
- if ( ErrCode != ST_NO_ERROR )
- STTBX_Print(("BackGround: STVID_Start()=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
- ErrCode = STVID_DisableSynchronisation(VID_Handle_Multiple[0]);
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("STVID_DisableSyncronisation()=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
-
- return ErrCode;
- }
- static ST_ErrorCode_t GetWritePtrPTIFctLive(void * const Handle_p, void ** const Address_p)
- {
- ST_ErrorCode_t ErrCode = ST_NO_ERROR;
- ErrCode = STPTI_BufferGetWritePointer((STPTI_Buffer_t)Handle_p,Address_p);
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("GetWritePtrPTIFctLive()=%sn", KB_ErrorGetText(ErrCode) ));
- }
- return ErrCode;
- }
- static void SetReadPtrPTIFctLive(void * const Handle_p, void * const Address_p)
- {
- ST_ErrorCode_t ErrCode = ST_NO_ERROR;
- ErrCode = STPTI_BufferSetReadPointer((STPTI_Buffer_t)Handle_p,Address_p);
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("SetReadPtrPTIFctLive()=%sn", KB_ErrorGetText(ErrCode) ));
- }
- }
- static ST_ErrorCode_t GetWritePtrFctIframe(void * const Handle_p, void ** const Address_p)
- {
- *Address_p = VideoInputBuffWptr;
- return(0);
- }
- static void SetReadPtrFctIframe(void * const Handle_p, void * const Address_p)
- {
- VideoInputBuffRptr = Address_p;
- return;
- }
- /* Start I frame decode */
- ST_ErrorCode_t IFrameDecodeStart(void)
- {
- ST_ErrorCode_t ErrCode = ST_NO_ERROR;
- STVID_StartParams_t VIDStartParams;
- //STVID_DecodedPictures_t DecodedPictures;
-
- VIDStartParams.StreamType = STVID_STREAM_TYPE_ES;
- VIDStartParams.BrdCstProfile = STVID_BROADCAST_DVB;
- VIDStartParams.RealTime = FALSE;
- VIDStartParams.DecodeOnce =TRUE;
- VIDStartParams.StreamID = STVID_IGNORE_ID;
-
- VIDStartParams.UpdateDisplay = TRUE; /* SLSL */
-
- ErrCode = STVID_Start(VID_Handle, &VIDStartParams);
- if (ErrCode != ST_NO_ERROR)
- {
- STTBX_Print(("vid start=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
-
- return ErrCode;
- }
- ST_ErrorCode_t testvideo(void)
- {
- STVID_Freeze_t Freeparam;
- ST_ErrorCode_t ErrCode = ST_NO_ERROR;
-
- Freeparam.Mode = STVID_FREEZE_MODE_NO_FLICKER ;
- Freeparam.Field = STVID_FREEZE_FIELD_CURRENT;
- ErrCode=STVID_Freeze(VID_Handle_Multiple[0],&Freeparam);
- if ( ErrCode != ST_NO_ERROR )
- {
- STTBX_Print(("STVID_Freeze()=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
- return ErrCode;
- }
- /* Stop I frame decode */
- ST_ErrorCode_t IFrameStop( void )
- {
- ST_ErrorCode_t ErrCode = ST_NO_ERROR;
- STVID_Stop_t VID_StopMode = STVID_STOP_NOW;
- STVID_Freeze_t VID_Freeze;
- STVID_ClearParams_t ClearParams;
-
- VID_Freeze.Field = STVID_FREEZE_FIELD_TOP;
- VID_Freeze.Mode = STVID_FREEZE_MODE_NO_FLICKER;
-
- #if 1
- ErrCode = STVID_Stop(VID_Handle, VID_StopMode, &VID_Freeze);
- //STTBX_Print(("IFRAME_IFrameStop:: STVID_STOPn"));
- #else
- ErrCode = STVID_Freeze(VID_Handle_Multiple[0], &VID_Freeze);
- #endif
- if (ErrCode != ST_NO_ERROR)
- {
- STTBX_Print(("vid stop1=%sn", KB_ErrorGetText(ErrCode) ));
- }
- ErrCode = STVID_DisableOutputWindow(VID_ViewPortHandle);
- if (ErrCode != ST_NO_ERROR)
- {
- STTBX_Print(("STVID_DisableOutputWindow()=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
- return ErrCode;
- }
- static BOOL LiveVideoStart( void )
- {
- STVID_StartParams_t VIDStartParams;
- STVID_DecodedPictures_t DecodedPictures;
- #if 1
- STVID_SetDataInputInterface( VID_Handle,
- GetWritePtrPTIFctLive, SetReadPtrPTIFctLive,
- (void * const)PTI_VideoBufferHandle_Multiple[0]);
- #endif
- STVID_EnableSynchronisation(VID_Handle);
- #if 1
- DecodedPictures = STVID_DECODED_PICTURES_ALL;
- STVID_SetDecodedPictures(VID_Handle, DecodedPictures);
- #endif
- VIDStartParams.StreamType = STVID_STREAM_TYPE_ES;
- VIDStartParams.BrdCstProfile = STVID_BROADCAST_DVB;
- VIDStartParams.RealTime = (BOOL)FALSE;
- VIDStartParams.UpdateDisplay = (BOOL)TRUE;
- VIDStartParams.DecodeOnce = (BOOL)FALSE;
- VIDStartParams.StreamID = STVID_IGNORE_ID;
-
- STVID_EnableSynchronisation(VID_Handle_Multiple[0]);
- return TRUE;
- }
- ST_ErrorCode_t LiveVideoStop( void )
- {
- /*STVID_Stop_t VID_StopMode = STVID_STOP_WHEN_END_OF_DATA; */
- STVID_Stop_t VID_StopMode = STVID_STOP_NOW;
- STVID_Freeze_t VID_Freeze;
- //STVID_ClearParams_t ClearParams;
- ST_ErrorCode_t ErrCode = ST_NO_ERROR;
- VID_Freeze.Field = STVID_FREEZE_FIELD_TOP;
- VID_Freeze.Mode = STVID_FREEZE_MODE_NO_FLICKER;
- ErrCode=STVID_Stop(VID_Handle, VID_StopMode, &VID_Freeze);
- if (ErrCode != ST_NO_ERROR)
- {
- STTBX_Print(("vid stop2=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
- ErrCode = STVID_DisableOutputWindow(VID_ViewPortHandle);
- if (ErrCode != ST_NO_ERROR)
- {
- STTBX_Print(("STVID_DisableOutputWindow()=%sn", KB_ErrorGetText(ErrCode) ));
- }
-
- return ErrCode;
- }
- static BOOL LoadIframe(unsigned char *buffer,int number )
- {
- VID_BufferSize = number;
- VID_Mem_p = buffer;
- VID_Buffer_p = buffer;
- return 0;
- } /* end VID_MemLoad */
- /* why can not 100% display I frame with 1 time injection?? */
- static void InjectIframe(int loop)
- {
- U32 MaxDmaTransferSize = 128*1024;
- U32 DmaTransferSize = 0,
- InputBufferFreeSize,
- RemainingSourceDataSize,
- BitBufferThreshold,
- BitBufferFreeSize,
- /*BitBufferSize = 370 * 1024;*//*378800*/
- BitBufferSize = 380928;/*CHENG modify-05/20/2006*/
- U32 SnapInputRead = 0,
- SnapInputWrite = 0;
- BOOL OneRound = FALSE;
-
- STVID_GetDataInputBufferParams(VID_Handle, &VideoInputBuffStart, &InputBufferFreeSize);
- VideoInputBuffWptr = VideoInputBuffStart;
- VideoInputBuffRptr = VideoInputBuffStart;
- VideoInputBuffStop = (void*)((U32)VideoInputBuffStart+InputBufferFreeSize-1);
- STVID_SetDataInputInterface(VID_Handle,GetWritePtrFctIframe,SetReadPtrFctIframe,(void*)1);
- UserBufferStart_p = (void*)VID_Buffer_p;
- UserBufferCurrent_P = UserBufferStart_p;
- UserBufferStop_p = (void*)((U32)UserBufferStart_p+VID_BufferSize-1);
-
- #if 1 /*LYNN COMMENT OFF*/
- /*STVID_GetBitBufferFreeSize(VID_Handle_Multiple[0], &BitBufferSize);*/
- #endif
-
- for( ; (loop > 0) ; loop-- )
- {
- while(OneRound == FALSE)
- {
- STVID_GetBitBufferFreeSize(VID_Handle, &BitBufferFreeSize);
- DmaTransferSize = BitBufferFreeSize;
- /* Compute threshold to avoid an overflow */
- BitBufferThreshold = (3*BitBufferSize/4) & (~3);/*284160*/
-
- /* prevent for data pending in input-buffer */
- if(BitBufferThreshold > ((U32)VideoInputBuffStop - (U32)VideoInputBuffStart + 1))
- {
- BitBufferThreshold = BitBufferThreshold - ((U32)VideoInputBuffStop - (U32)VideoInputBuffStart + 1);
- }
-
- if (BitBufferSize-BitBufferFreeSize > BitBufferThreshold)
- {
- DmaTransferSize = 0;
- task_reschedule();
- }
- else
- {
- DmaTransferSize = BitBufferThreshold-(BitBufferSize-BitBufferFreeSize);
- }
-
- /* Control data size to be injected */
- /* - enough data to fill the bit buffer until Threshold limit */
- /* - 128k bytes maximum */
- /* - remaining source data maximum */
- RemainingSourceDataSize = (U32)VID_BufferSize - (U32)((U32)UserBufferCurrent_P - (U32)UserBufferStart_p);
-
- if (DmaTransferSize > MaxDmaTransferSize)
- DmaTransferSize = MaxDmaTransferSize;
- /*cheng delete-05/20/2006*/
- #if 0
- if (DmaTransferSize >= RemainingSourceDataSize)
- {
- DmaTransferSize = RemainingSourceDataSize;
- OneRound = TRUE; /* completed the first round of injection */
- }
- #endif
- /*cheng delete-05/20/2006*/
-
- if (DmaTransferSize > 0)
- {
- /* store shared pointers in private values */
- SnapInputRead = (U32)VideoInputBuffRptr;
- SnapInputWrite = (U32)VideoInputBuffWptr;
-
- if( SnapInputWrite < SnapInputRead )
- {
- InputBufferFreeSize = SnapInputRead - SnapInputWrite - 10;
- }
- else
- {
- InputBufferFreeSize = (U32)VideoInputBuffStop - SnapInputWrite + 1;
- }
-
- if(DmaTransferSize > InputBufferFreeSize)
- {
- DmaTransferSize = InputBufferFreeSize;
- }
- if(DmaTransferSize > 0x4000)
- {
- DmaTransferSize=0x4000;
- }
-
- /*cheng add for right DmaTransferSize-05/20/2006*/
- if (DmaTransferSize >= RemainingSourceDataSize)
- {
- DmaTransferSize = RemainingSourceDataSize;
- OneRound = TRUE; /* completed the first round of injection */
- }
- /*cheng add end*/
-
- /* INJECTION BY CPU */
- memcpy(/* dest */ (void*)SnapInputWrite,
- /* src */ UserBufferCurrent_P,
- DmaTransferSize);
- /* INJECTION DONE */
-
- /* Push the W pointer in video input */
- if(( SnapInputWrite+ DmaTransferSize) > (U32)VideoInputBuffStop)
- {
- SnapInputWrite= (U32)VideoInputBuffStart;
- }
- else
- {
- SnapInputWrite= SnapInputWrite + DmaTransferSize;
- }
- /* Share the new input ptr */
- VideoInputBuffWptr = (void*)SnapInputWrite;
- #if 1
- task_delay((30*DmaTransferSize/1024)/8/*(30*DmaTransferSize/1024)/8*/);
-
- task_delay(15625); /* temp delay, to be removed*/
- #endif
-
- /* push our injection ptr */
- UserBufferCurrent_P = (void*)((U32)UserBufferCurrent_P + DmaTransferSize);
- if((U32)UserBufferCurrent_P > (U32)UserBufferStop_p)
- {
- /*STTBX_Print(("injection loops the streamn"));*/
- UserBufferCurrent_P = UserBufferStart_p;
- }
- }
- #if 1 /*LYNN COMMENT OFF*/
- }
- OneRound = FALSE; /* initialise for the next round of injection */
- }
- #endif
- }
-
-
- /**************************
- * ST_ErrorCode_t Switch2Iframe
- *
- *
- *
- *
- ***************************/
- ST_ErrorCode_t Switch2Iframe(unsigned char *buffer,int number)
- {
- ST_ErrorCode_t ErrCode;
-
-
- //STTBX_Print(("nnn ======== Switch2Iframe ( ) =========n"));
-
- /*IFrameStop();*/
-
- /*ErrCode = IFrameDecodeStart();
- if(ErrCode != ST_NO_ERROR)
- {
- STTBX_Print((" Switch2Iframe ( ) -> IFrameDecodeStart() Err = %sn", KB_ErrorGetText(ErrCode)));
- } */
-
- ErrCode = BackGround_VID_StartDecode();
- if(ErrCode != ST_NO_ERROR)
- {
- STTBX_Print((" Switch2Iframe ( ) -> BackGround_VID_StartDecode() Err = %sn", KB_ErrorGetText(ErrCode)));
- }
-
- LoadIframe(buffer,number);
- InjectIframe(4);
- //STTBX_Print(("zxqCHK ---------> InjectIframe success; InjectIframe successnn"));
-
- #if 1
- //STVID_DisableOutputWindow(VID_ViewPortHandle_Multiple[0]);
- //ErrCode = STVID_EnableOutputWindow(VID_ViewPortHandle_Multiple[0]);
- #else
- STVID_DisableOutputWindow(VID_ViewPortHandle);
- #endif
-
- if(ErrCode != ST_NO_ERROR)
- {
- STTBX_Print((" Switch2Iframe ( ) -> STVID_EnableOutputWindow() Err = %sn", KB_ErrorGetText(ErrCode)));
- }
- #if 0
- gnAvVideoEnabled = FALSE;
- gnAvVideoIframeEnabled = TRUE;
- #endif
-
- //STTBX_Print(("n ==========================nnn"));
- return ErrCode;
- }
-
-
- /**************************
- * ST_ErrorCode_t Switch2Live
- *
- *
- *
- *
- ***************************/
- ST_ErrorCode_t Switch2Live(void)
- {
- ST_ErrorCode_t ErrCode;
- //STVID_ClearParams_t ClearParams;
-
- //STTBX_Print(("nnn ======== Switch2Live ( ) =========n"));
-
-
- IFrameStop();
-
- ErrCode = LiveVideoStart();
- if(ErrCode != TRUE)
- {
- STTBX_Print((" Switch2Live ( ) -> LiveVideoStart() Err = %sn", KB_ErrorGetText(ErrCode)));
- }
-
- //STTBX_Print(("n ==========================nnn"));
- return ErrCode;
- }
- static void NewVideoFrameEvent(STEVT_CallReason_t Reason, const ST_DeviceName_t RegistrantName, STEVT_EventConstant_t Event, const void *EventData, const void *SubscriberData_p )
- {
- ST_ErrorCode_t ErrCode;
- ErrCode = ST_NO_ERROR;
-
- switch (Event)
- {
- case STVID_NEW_PICTURE_DECODED_EVT:
- semaphore_signal(iframePicDecodeLock);
- #if 1
- STVID_EnableOutputWindow(VID_ViewPortHandle_Multiple[0]);
- #endif
- break;
- case STVID_DISPLAY_NEW_FRAME_EVT:
- STVID_EnableOutputWindow(VID_ViewPortHandle_Multiple[0]);
- break;
- case STVID_STOPPED_EVT:
- semaphore_signal(iframeStopDecodeLock);
- break;
- }
- return;
- }
- extern ST_DeviceName_t g_KB_EVTDeviceName[];
- extern STEVT_Handle_t g_KB_EVTHandle[1];
- void NewFrameEventSubsvribe( void )
- {
- STEVT_DeviceSubscribeParams_t SubscribeParams;
- memset(&SubscribeParams, 0, sizeof(STEVT_DeviceSubscribeParams_t));
- SubscribeParams.NotifyCallback = NewVideoFrameEvent;
- STEVT_SubscribeDeviceEvent(g_KB_EVTHandle[0], VID_DeviceName_Multiple[0], (U32)STVID_NEW_PICTURE_TO_BE_DISPLAYED_EVT, &SubscribeParams);
- }
- void NewFrameEventSubscribe( void )
- {
- STEVT_DeviceSubscribeParams_t SubscribeParams;
-
- iframePicDecodeLock = semaphore_create_fifo_timeout(0);
- iframeStopDecodeLock = semaphore_create_fifo_timeout(0);
-
- memset(&SubscribeParams, 0, sizeof(STEVT_DeviceSubscribeParams_t));
- SubscribeParams.NotifyCallback = NewVideoFrameEvent;
- STEVT_SubscribeDeviceEvent(g_KB_EVTHandle[0], VID_DeviceName_Multiple[0], (U32)STVID_NEW_PICTURE_DECODED_EVT, &SubscribeParams);
- #if 1
- STEVT_SubscribeDeviceEvent(g_KB_EVTHandle[0], VID_DeviceName_Multiple[0], (U32)STVID_STOPPED_EVT, &SubscribeParams);
- #endif
-
- }
- /* EOF */