/* User processing time, it is recommended to avoid blocking task for long time.  */
void USBPD_DPM_UserExecute(void const *argument)
/* User processing time, it is recommended to avoid blocking task for long time.  */
void USBPD_DPM_UserExecute(void const *argument)
{
  uint32_t _timing = osWaitForever;
  osMessageQId  queue = *(osMessageQId *)argument;
  do{
    osEvent event = osMessageGet(queue, _timing);
    switch (((DPM_USER_EVENT)event.value.v & 0xF))
    {
    case DPM_USER_EVENT_TIMER:
      if (DPM_TIMER_ENABLE_MSK == DPM_Ports[USBPD_PORT_0].DPM_TimerAME)
      {
        DPM_Ports[USBPD_PORT_0].DPM_TimerAME = 0;
        if (0 == VDM_Mode_On[USBPD_PORT_0])
        {
          USBD_Start(&hUsbDeviceBB[USBPD_PORT_0]);
        }
      }
      break;
    default:
      break;
    }
    _timing = CheckDPMTimers();
  }
  while(1);
}