/*FUNCTION*---------------------------------------------------------------- * * Function Name : usb_device_call_service * Returned Value : USB_OK or error code * Comments : * Calls the appropriate service for the specified type, if one is * registered. Used internally only. * *END*--------------------------------------------------------------------*/ usb_status _usb_device_call_service ( /* [IN] Type of service or endpoint */ uint8_t type, /* [IN] pointer to event structure */ usb_event_struct_t* event ) { usb_dev_state_struct_t* usb_dev_ptr; usb_dev_ptr = (usb_dev_state_struct_t*)event->handle; event->type = type; if((type & 0x7F) && ((type & 0x7F) < 0x10)) { event->type = (uint8_t)(((uint8_t)(event->direction << 7)) | (uint8_t)(type & 0x7F)); } #if USBCFG_DEV_USE_TASK if (0 != OS_MsgQ_send(usb_dev_ptr->usb_dev_service_que, (void *)event, 0)) { return USBERR_ALLOC_STATE; } return USB_OK; #else return _usb_device_call_service_internal(usb_dev_ptr, event); #endif }
static void _usb_dev_task ( void* dev_inst_ptr ) { usb_dev_state_struct_t* usb_dev_ptr = (usb_dev_state_struct_t*)dev_inst_ptr; static usb_event_struct_t msg = {0}; //if (!OS_MsgQ_Is_Empty(usb_device_ptr->isr_que,&msg)) while (!OS_MsgQ_recv(usb_dev_ptr->usb_dev_service_que, (uint32_t *) &msg, OS_MSGQ_RECEIVE_BLOCK_ON_EMPTY, 10)) { _usb_device_call_service_internal(usb_dev_ptr, &msg); } }