Exemple #1
0
static MetaWindow *
get_window_for_event (MetaDisplay        *display,
                      const ClutterEvent *event)
{
  switch (display->event_route)
    {
    case META_EVENT_ROUTE_NORMAL:
      {
        ClutterActor *source;

        /* Always use the key focused window for key events. */
        if (IS_KEY_EVENT (event))
            return stage_has_key_focus () ? display->focus_window : NULL;

        source = clutter_event_get_source (event);
        if (META_IS_SURFACE_ACTOR (source))
          return meta_surface_actor_get_window (META_SURFACE_ACTOR (source));
        else
          return NULL;
      }
    case META_EVENT_ROUTE_WINDOW_OP:
    case META_EVENT_ROUTE_COMPOSITOR_GRAB:
    case META_EVENT_ROUTE_WAYLAND_POPUP:
    case META_EVENT_ROUTE_FRAME_BUTTON:
      return display->grab_window;
    default:
      g_assert_not_reached ();
    }
}
Exemple #2
0
void UserMainProc(void)
{
    NVTEVT evt;
    UINT32 paramNum;
    UINT32 paramArray[MAX_MESSAGE_PARAM_NUM];
    CHAR buffer[8]={0};	
    debug_msg("event loop - begin!\r\n");

//jacky lan for ACC power on detetion*********************
    //memcpy((void *)buffer, (void *)BLINFO_ACCPOWERON_FLAG, 8);
    if (rtc_getPWROnSource()==RTC_PWRON_SRC_PWR_SW4)
    {
        gbACCPowerOn=TRUE;
    }
    else if(rtc_getPWROnSource()==RTC_PWRON_SRC_PWR_SW)
    {
        gbACCPowerOn=FALSE;
    }
    else
    {
        gbACCPowerOn=FALSE;
    }		
    debug_msg("ACC FLAG :%d..\r\n",rtc_getPWROnSource());
//*************************************************	
#if (POWERON_TESTFLOW == ENABLE)
    //System_OnPowerPreInit();
    System_InstallMode();
    System_OnTimerInit();
    System_OnOutputInit();
    GxSystem_BootStart();

    if(GxSystem_GetPowerOnSource() == GX_PWRON_SRC_PWR_VBUS)
    {
        GxUSB_Init(TRUE);
    }
    if(gIsUSBChargePreCheck)
    {
        UINT32 uiChargeCurrent = USB_CHARGE_CURRENT_2P5MA;
        System_OnUsbInit();
        System_OnStrgInit_INMEM();
        System_OnStrgInit_EXMEM();
        Install_AppObj(); //must install before any event dispatch
        UI_UnlockEvent();
        debug_msg("wait USB - begin\r\n");
        do
        {
            UserWaitEvent(NVTEVT_USB_CHARGE_CURRENT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin
            uiChargeCurrent = paramArray[0];
            debug_msg("USB charging current(%d)\r\n",paramArray[0]);
        }
        while(uiChargeCurrent < USB_CHARGE_CURRENT_500MA);
        debug_msg("wait USB - end\r\n");
        //SxCmd_DoCommand("dma eclk");
        GxLED_SetCtrl(KEYSCAN_LED_FCS,TURNON_LED,TRUE);
    }
    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin

    //////////////////////////////////////////////////////////////
    // Direct boot flow

    //Init Device & Lib
    SysDbgUtCmd_Init(); //Init Once DbgUt
    System_OnVideoInit();
    System_OnAudioInit();
    if(!gIsUSBChargePreCheck)
    {
    System_OnStrgInit_INMEM();
    System_OnStrgInit_EXMEM();
    System_OnStrgInit_FWS();
    System_OnStrgInit_PS();
    System_OnStrgInit_FS();
    System_OnUsbInit();
    }
    System_OnLensInit();
    System_OnSensorInit();
    System_OnPowerInit();
    System_OnInputInit();

    //////////////////////////////////////////////////////////////

    //Init object list for UIControl event process
    if(!gIsUSBChargePreCheck)
        Install_AppObj(); //must install before any event dispatch

    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin
    Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1);

#else

    System_OnStrgInit_INMEM();
    System_OnStrgInit_FWS();
    System_OnStrg_DownloadFW(UserSection_Order_full, UserSection_LoadCb);
    System_OnPowerPreInit();
    System_InstallMode();
    System_OnTimerInit();
    System_OnOutputInit();
    GxSystem_BootStart();
    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin

    //////////////////////////////////////////////////////////////
    // Direct boot flow

    //Init Device & Lib
    //#NT#2013/2/20#Philex Lin - begin
    // for pressing longer to power up system
    #if (UI_STYLE==UI_STYLE_DRIVER)
      #if (LONG_STARTUP == ENABLE)
       SysInit_ResetShutDownTimer();
       while (guiResetSDTimerCount < RESET_SHUTDOWN_TIMER_COUNT)
        ;
       System_OnVideoInit();
      #else
       System_OnVideoInit();
      #endif
    #else
    System_OnVideoInit();
    #endif
    //#NT#2013/2/20#Philex Lin - end
    System_OnAudioInit();    
    System_OnStrgInit_EXMEM();
    System_OnStrgInit_PS();
    System_OnStrgInit_FS();
    System_OnUsbInit();
    #if (UI_STYLE==UI_STYLE_DRIVER)
    usb_setConfig(USB_CONFIG_ID_STANDARD_CHARGER, FALSE);
    #endif

    #if 1//(LENS_FUNCTION == ENABLE)
    System_OnLensInit();
    #endif
    System_OnSensorInit();
    System_OnPowerInit();
    System_OnInputInit();

    //////////////////////////////////////////////////////////////

    //Init object list for UIControl event process
    Install_AppObj(); //must install before any event dispatch

    #if (UI_STYLE==UI_STYLE_DRIVER)
        aud_setTotalVolLevel(AUDIO_VOL_LEVEL8);
        #if (UPDATE_CFG == UPDATE_CFG_YES)
        // Do UI_LoadCfgFile() function
        UI_LoadCfgFile();
        #endif
    #endif
    DscMovie_SetFDB_ROFolder("RO");	
    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin
    Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1);
#endif

    while(!bUI_Quit)
    {
        Ux_WaitEvent(&evt, &paramNum, paramArray);
        if(evt)
        {
            INT32 result = NVTEVT_PASS;
            DBG_IND("^YMSG: get event %08x!\r\n", evt);

            if(IS_KEY_EVENT(evt))
                result = System_UserKeyFilter(evt, paramNum, paramArray);
            #if (TOUCH_FUNCTION == ENABLE)
            if(result != NVTEVT_CONSUME)
            {
                if(IS_TOUCH_EVENT(evt))
                    result = System_UserTouchFilter(evt, paramNum, paramArray);
            }
            #endif
            if(result != NVTEVT_CONSUME)
            {
                if(IS_APP_EVENT(evt))
                    result = Ux_AppDispatchMessage(evt, paramNum, paramArray);
            }
            if(result != NVTEVT_CONSUME)
                result = Ux_WndDispatchMessage(evt, paramNum, paramArray);

            Ux_Redraw();
#if 0 //background task wait done flag,need to remove
            // A special case.
            // UI background is busy until finishing the event handler of BACKGROUND_DONE
            if (evt == NVTEVT_BACKGROUND_DONE)
            {
                BKG_Done();
            }
#endif
            //return result;
        }
    }

    //////////////////////////////////////////////////////////////
    //System_PowerOff(SYS_POWEROFF_NORMAL);

    //Exit Lib & Device
    System_OnVideoExit();
    System_OnAudioExit();
    System_OnStrgExit_FS();
    System_OnStrgExit_PS();
    System_OnStrgExit_FWS();
    System_OnStrgExit_EXMEM();
    System_OnStrgExit_INMEM();
    System_OnUsbExit();
    System_OnLensExit();
    System_OnSensorExit();
    System_OnPowerExit();
    System_OnInputExit();
    System_OnOutputExit();
    System_OnTimerExit();

    //////////////////////////////////////////////////////////////
    GxSystem_ShutDownEnd();
    GxSystem_PowerOff();
    debug_msg("event loop - end!\r\n");
}
Exemple #3
0
static gboolean
meta_display_handle_event (MetaDisplay        *display,
                           const ClutterEvent *event)
{
  MetaWindow *window;
  gboolean bypass_clutter = FALSE;
  G_GNUC_UNUSED gboolean bypass_wayland = FALSE;
  MetaGestureTracker *tracker;
  ClutterEventSequence *sequence;
  ClutterInputDevice *source;

  sequence = clutter_event_get_event_sequence (event);

  /* Set the pointer emulating sequence on touch begin, if eligible */
  if (event->type == CLUTTER_TOUCH_BEGIN)
    {
      if (sequence_is_pointer_emulated (display, event))
        {
          /* This is the new pointer emulating sequence */
          display->pointer_emulating_sequence = sequence;
        }
      else if (display->pointer_emulating_sequence == sequence)
        {
          /* This sequence was "pointer emulating" in a prior incarnation,
           * but now it isn't. We unset the pointer emulating sequence at
           * this point so the current sequence is not mistaken as pointer
           * emulating, while we've ensured that it's been deemed
           * "pointer emulating" throughout all of the event processing
           * of the previous incarnation.
           */
          display->pointer_emulating_sequence = NULL;
        }
    }

#ifdef HAVE_WAYLAND
  MetaWaylandCompositor *compositor = NULL;
  if (meta_is_wayland_compositor ())
    {
      compositor = meta_wayland_compositor_get_default ();
      meta_wayland_compositor_update (compositor, event);
    }
#endif

  if (!display->current_pad_osd &&
      (event->type == CLUTTER_PAD_BUTTON_PRESS ||
       event->type == CLUTTER_PAD_BUTTON_RELEASE))
    {
      MetaBackend *backend = meta_get_backend ();

      if (meta_input_settings_handle_pad_button (meta_backend_get_input_settings (backend),
                                                 clutter_event_get_source_device (event),
                                                 event->type == CLUTTER_PAD_BUTTON_PRESS,
                                                 event->pad_button.button))
        {
          bypass_wayland = bypass_clutter = TRUE;
          goto out;
        }
    }

  source = clutter_event_get_source_device (event);

  if (source)
    {
      meta_backend_update_last_device (meta_get_backend (),
                                       clutter_input_device_get_device_id (source));
    }

#ifdef HAVE_WAYLAND
  if (meta_is_wayland_compositor () && event->type == CLUTTER_MOTION)
    {
      MetaWaylandCompositor *compositor;

      compositor = meta_wayland_compositor_get_default ();

      if (meta_wayland_tablet_manager_consumes_event (compositor->tablet_manager, event))
        {
          meta_wayland_tablet_manager_update_cursor_position (compositor->tablet_manager, event);
        }
      else
        {
          MetaCursorTracker *tracker = meta_cursor_tracker_get_for_screen (NULL);
          meta_cursor_tracker_update_position (tracker, event->motion.x, event->motion.y);
        }

      display->monitor_cache_invalidated = TRUE;
    }
#endif

  handle_idletime_for_event (event);

  window = get_window_for_event (display, event);

  display->current_time = event->any.time;

  if (window && !window->override_redirect &&
      (event->type == CLUTTER_KEY_PRESS ||
       event->type == CLUTTER_BUTTON_PRESS ||
       event->type == CLUTTER_TOUCH_BEGIN))
    {
      if (CurrentTime == display->current_time)
        {
          /* We can't use missing (i.e. invalid) timestamps to set user time,
           * nor do we want to use them to sanity check other timestamps.
           * See bug 313490 for more details.
           */
          meta_warning ("Event has no timestamp! You may be using a broken "
                        "program such as xse.  Please ask the authors of that "
                        "program to fix it.\n");
        }
      else
        {
          meta_window_set_user_time (window, display->current_time);
          meta_display_sanity_check_timestamps (display, display->current_time);
        }
    }

  tracker = meta_display_get_gesture_tracker (display);

  if (meta_gesture_tracker_handle_event (tracker, event))
    {
      bypass_wayland = bypass_clutter = TRUE;
      goto out;
    }

  if (display->event_route == META_EVENT_ROUTE_WINDOW_OP)
    {
      if (meta_window_handle_mouse_grab_op_event (window, event))
        {
          bypass_clutter = TRUE;
          bypass_wayland = TRUE;
          goto out;
        }
    }

  /* For key events, it's important to enforce single-handling, or
   * we can get into a confused state. So if a keybinding is
   * handled (because it's one of our hot-keys, or because we are
   * in a keyboard-grabbed mode like moving a window, we don't
   * want to pass the key event to the compositor or Wayland at all.
   */
  if (meta_keybindings_process_event (display, window, event))
    {
      bypass_clutter = TRUE;
      bypass_wayland = TRUE;
      goto out;
    }

  /* Do not pass keyboard events to Wayland if key focus is not on the
   * stage in normal mode (e.g. during keynav in the panel)
   */
  if (display->event_route == META_EVENT_ROUTE_NORMAL)
    {
      if (IS_KEY_EVENT (event) && !stage_has_key_focus ())
        {
          bypass_wayland = TRUE;
          goto out;
        }
    }

  if (display->current_pad_osd)
    {
      bypass_wayland = TRUE;
      goto out;
    }

  if (window)
    {
      /* Events that are likely to trigger compositor gestures should
       * be known to clutter so they can propagate along the hierarchy.
       * Gesture-wise, there's two groups of events we should be getting
       * here:
       * - CLUTTER_TOUCH_* with a touch sequence that's not yet accepted
       *   by the gesture tracker, these might trigger gesture actions
       *   into recognition. Already accepted touch sequences are handled
       *   directly by meta_gesture_tracker_handle_event().
       * - CLUTTER_TOUCHPAD_* events over windows. These can likewise
       *   trigger ::captured-event handlers along the way.
       */
      bypass_clutter = !IS_GESTURE_EVENT (event);

      meta_window_handle_ungrabbed_event (window, event);

      /* This might start a grab op. If it does, then filter out the
       * event, and if it doesn't, replay the event to release our
       * own sync grab. */

      if (display->event_route == META_EVENT_ROUTE_WINDOW_OP ||
          display->event_route == META_EVENT_ROUTE_FRAME_BUTTON)
        {
          bypass_clutter = TRUE;
          bypass_wayland = TRUE;
        }
      else
        {
          /* Only replay button press events, since that's where we
           * have the synchronous grab. */
          if (event->type == CLUTTER_BUTTON_PRESS)
            {
              MetaBackend *backend = meta_get_backend ();
              if (META_IS_BACKEND_X11 (backend))
                {
                  Display *xdisplay = meta_backend_x11_get_xdisplay (META_BACKEND_X11 (backend));
                  meta_verbose ("Allowing events time %u\n",
                                (unsigned int)event->button.time);
                  XIAllowEvents (xdisplay, clutter_event_get_device_id (event),
                                 XIReplayDevice, event->button.time);
                }
            }
        }

      goto out;
    }

 out:
  /* If the compositor has a grab, don't pass that through to Wayland */
  if (display->event_route == META_EVENT_ROUTE_COMPOSITOR_GRAB)
    bypass_wayland = TRUE;

  /* If a Wayland client has a grab, don't pass that through to Clutter */
  if (display->event_route == META_EVENT_ROUTE_WAYLAND_POPUP)
    bypass_clutter = TRUE;

#ifdef HAVE_WAYLAND
  if (compositor && !bypass_wayland)
    {
      if (meta_wayland_compositor_handle_event (compositor, event))
        bypass_clutter = TRUE;
    }
#endif

  display->current_time = CurrentTime;
  return bypass_clutter;
}
Exemple #4
0
void UserMainProc(void)
{
    NVTEVT evt;
    UINT32 paramNum;
    UINT32 paramArray[MAX_MESSAGE_PARAM_NUM];
    debug_msg("event loop - begin!\r\n");

#if (POWERON_TESTFLOW == ENABLE)
    //System_OnPowerPreInit();
    System_InstallMode();
    System_OnTimerInit();
    System_OnOutputInit();
    GxSystem_BootStart();
    if(GxSystem_GetPowerOnSource() == GX_PWRON_SRC_PWR_VBUS)
    {
        GxUSB_Init(TRUE);
    }
    if(gIsUSBChargePreCheck)
    {
        UINT32 uiChargeCurrent = USB_CHARGE_CURRENT_2P5MA;
        System_OnUsbInit();
        System_OnStrgInit_INMEM();
        System_OnStrgInit_EXMEM();
        Install_AppObj(); //must install before any event dispatch
        UI_UnlockEvent();
        debug_msg("wait USB - begin\r\n");
        do
        {
            UserWaitEvent(NVTEVT_USB_CHARGE_CURRENT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin
            uiChargeCurrent = paramArray[0];
            debug_msg("USB charging current(%d)\r\n",paramArray[0]);
        }
        while(uiChargeCurrent < USB_CHARGE_CURRENT_500MA);
        debug_msg("wait USB - end\r\n");
        //SxCmd_DoCommand("dma eclk");
        GxLED_SetCtrl(KEYSCAN_LED_FCS,TURNON_LED,TRUE);
    }
    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin

    //////////////////////////////////////////////////////////////
    // Direct boot flow

    //Init Device & Lib
    SysDbgUtCmd_Init(); //Init Once DbgUt  
    System_OnVideoInit();
    System_OnAudioInit();
    if(!gIsUSBChargePreCheck)
    {
    System_OnStrgInit_INMEM();
    System_OnStrgInit_EXMEM();
    System_OnStrgInit_FWS();
    System_OnStrgInit_PS();
    System_OnStrgInit_FS();
    System_OnUsbInit();
    }
    System_OnLensInit();
    System_OnSensorInit();
    System_OnPowerInit();
    System_OnInputInit();

    //////////////////////////////////////////////////////////////

    //Init object list for UIControl event process
    if(!gIsUSBChargePreCheck)
        Install_AppObj(); //must install before any event dispatch

    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin
    Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1);

#else

    System_OnStrgInit_INMEM();
    System_OnStrgInit_FWS();
    System_OnStrg_DownloadFW(UserSection_Order_full, UserSection_LoadCb);
    System_OnPowerPreInit();
    System_InstallMode();
    System_OnTimerInit();
    System_OnOutputInit();
    GxSystem_BootStart();
#if 1
//-------jacky lan --------------	
    System_OnStrgInit_PS();
    Load_MenuInfo();	
//-------jacky lan --------------
#endif
    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin

    //////////////////////////////////////////////////////////////
    // Direct boot flow
    //#NT#2014/11/26#KS Hung -begin
    GSensor_open();
    //#NT#2014/11/26#KS Hung -end
    //Init Device & Lib
    //#NT#2013/2/20#Philex Lin - begin
    // for pressing longer to power up system
    #if (UI_STYLE==UI_STYLE_DRIVER)
      #if(LONG_STARTUP == ENABLE)
      usb_open();    
      debug_msg("usb_StateChange :%d--->power source :%d--->updateFW :%d\r\n",usb_StateChange(),GxSystem_GetPowerOnSource(),gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW);	  
#if((_MODEL_DSC_ == _MODEL_DUAL_BMWCABLE_)||(_MODEL_DSC_==_MODEL_DUAL_G2800_)||(_MODEL_DSC_ == _MODEL_DUAL_JIACHANGLING_)||(_MODEL_DSC_ == _MODEL_DUAL_QIZHENG_M1_)\
	||(_MODEL_DSC_ == _MODEL_DUAL_XWH_)||(_MODEL_DSC_ == _MODEL_DUAL_SAIBOSHI_))	     
	if(((GxSystem_GetPowerOnSource() == USB_SOURCE_POWERON)&&(usb_StateChange()==TRUE))||(gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW)||(GxSystem_GetPowerOnSource() == GSENSOR_TRIGGER_SOURCE_POWERON)\
		||((GxSystem_GetPowerOnSource() == ACC_SOURCE_POWERON)&&(usb_StateChange()==TRUE)))
#elif(_MODEL_DSC_ == _MODEL_KERNAL_BOARD_880_)	     
	if(((GxSystem_GetPowerOnSource() == USB_SOURCE_POWERON)&&(usb_StateChange()==TRUE))||(gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW)||(GxSystem_GetPowerOnSource() == GSENSOR_TRIGGER_SOURCE_POWERON)\
		||((GxSystem_GetPowerOnSource() == ACC_SOURCE_POWERON)&&(usb_StateChange()==TRUE)))		
#else
	if(((GxSystem_GetPowerOnSource() == USB_SOURCE_POWERON)&&(usb_StateChange()==TRUE))||(gBinInfo.ld.LdCtrl2 & LDCF_UPDATE_FW)||(GxSystem_GetPowerOnSource() == GSENSOR_TRIGGER_SOURCE_POWERON))
#endif	
	{	   
		usb_close();		 
	       System_OnVideoInit();
	}
	else
	{
	usb_close();		
       SysInit_ResetShutDownTimer();
       while (guiResetSDTimerCount < RESET_SHUTDOWN_TIMER_COUNT)
        ;
       System_OnVideoInit();
	}
      #else
       System_OnVideoInit();
      #endif
    #else
    System_OnVideoInit();
    #endif
    //#NT#2013/2/20#Philex Lin - end
    System_OnAudioInit();
    System_OnStrgInit_EXMEM();
    //System_OnStrgInit_PS();//jacky lan 

    //#NT#2015/01/21#KS Hung -begin
    //#NT#Fast boot recording.
    #if ((_DUAL_CARD_FUNC_ == ENABLE)||(_FAST_BOOT_REC_FUNC_))
    Load_MenuInfo();
    #endif
    //#NT#2015/01/21#KS Hung -end
    #if ((_DUAL_CARD_FUNC_ == ENABLE) && (_CHIP_ == _CHIP_650_))
    System_OnStrgExit_PS();
    System_OnStrgExit_FWS();
    #endif
    System_OnStrgInit_FS();
    System_OnUsbInit();
    #if (UI_STYLE==UI_STYLE_DRIVER)
    usb_setConfig(USB_CONFIG_ID_STANDARD_CHARGER, FALSE);
    #endif

    #if 1//(LENS_FUNCTION == ENABLE)
    System_OnLensInit();
    #endif
    System_OnSensorInit();
    System_OnPowerInit();
    System_OnInputInit();

    //////////////////////////////////////////////////////////////

    //Init object list for UIControl event process
    Install_AppObj(); //must install before any event dispatch

    #if (UI_STYLE==UI_STYLE_DRIVER)
        aud_setTotalVolLevel(AUDIO_VOL_LEVEL8);
        #if (UPDATE_CFG == UPDATE_CFG_YES)
        // Do UI_LoadCfgFile() function
        UI_LoadCfgFile();
        #endif
    #endif
    //UserWaitEvent(NVTEVT_SYSTEM_BOOT, &paramNum, paramArray); //(paramNum == 1 && paramArray[0] == 0) //power-on begin
    Ux_SendEvent(0, NVTEVT_SYSTEM_BOOT, 1, 1);
#endif

    while(!bUI_Quit)
    {
        Ux_WaitEvent(&evt, &paramNum, paramArray);
        if(evt)
        {
            INT32 result = NVTEVT_PASS;
            DBG_IND("^YMSG: get event %08x!\r\n", evt);

            if(IS_KEY_EVENT(evt))
                result = System_UserKeyFilter(evt, paramNum, paramArray);
            #if (TOUCH_FUNCTION == ENABLE)
            if(result != NVTEVT_CONSUME)
            {
                if(IS_TOUCH_EVENT(evt))
                    result = System_UserTouchFilter(evt, paramNum, paramArray);
            }
            #endif
            if(result != NVTEVT_CONSUME)
            {
                if(IS_APP_EVENT(evt))
                    result = Ux_AppDispatchMessage(evt, paramNum, paramArray);
            }
            //#NT#2015/01/21#KS Hung -begin
            //#NT#Fast boot recording.
            #if (_FAST_BOOT_REC_FUNC_)
            if (g_bUIWndDispatchMessage)
            #endif
            {
                if(result != NVTEVT_CONSUME)
                    result = Ux_WndDispatchMessage(evt, paramNum, paramArray);

                Ux_Redraw();
            }
            //#NT#2015/01/21#KS Hung -end
#if 0 //background task wait done flag,need to remove
            // A special case.
            // UI background is busy until finishing the event handler of BACKGROUND_DONE
            if (evt == NVTEVT_BACKGROUND_DONE)
            {
                BKG_Done();
            }
#endif
            //return result;
        }
    }

    //////////////////////////////////////////////////////////////
    //System_PowerOff(SYS_POWEROFF_NORMAL);

    //Exit Lib & Device
    System_OnVideoExit();
    System_OnAudioExit();
    System_OnStrgExit_FS();
    System_OnStrgExit_PS();
    System_OnStrgExit_FWS();
    System_OnStrgExit_EXMEM();
    System_OnStrgExit_INMEM();
    System_OnUsbExit();
    System_OnLensExit();
    System_OnSensorExit();
    System_OnPowerExit();
    System_OnInputExit();
    System_OnOutputExit();
    System_OnTimerExit();

    //////////////////////////////////////////////////////////////
    GxSystem_ShutDownEnd();
    GxSystem_PowerOff();
    debug_msg("event loop - end!\r\n");
}