コード例 #1
0
/*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

}
コード例 #2
0
ファイル: usb_dev.c プロジェクト: BillyZhangZ/wifi
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);
    }
}