AG903ライブラリリファレンス
内容インデックスホーム
前へ上へ次へ
Usbh_Api_ControlMsg 関数

コントロール転送を実行

Syntax
C++
uhs_status_t Usbh_Api_ControlMsg(struct usb_control_block* ucb);
引数 
説明 
struct usb_control_block* ucb 
[in] USB コントロールブロック 

コントロール転送の実行結果

返値の詳細 
説明 
正常終了 
状態異常(デバイスが存在しない) 
パラメータ異常 
リソース不足 
USBリクエストの受付に失敗(キューフル等) 

コントロール転送を実行します。(非同期実行) 

ステータスステージまで終了した時点、もしくはエラーが発生した時点で、 登録されたコールバック関数をコールします。 

ucb は適切に設定され、Usbh_Api_OpenPipe が正常終了している必要があります。 

戻り値はUSB Hostが転送要求を受け付けた結果であり、USBバス上の転送結果ではありません。 

USBバス上の転送結果はコールバック関数の引数ucbに格納します。

SUSPEND/RESUME中に呼び出すとエラーリターンします。

1: uhs_status_t Usbh_Api_ControlMsg(struct usb_control_block* ucb) 2: { 3: uhs_status_t retval = UDI_OK; 4: 5: 6: if( Usbh_susres_get_state() != USBH_SUSRES_STS_IDLE ){ 7: uhs_debug_print (DBG_ERR, ("ERROR : Don't Call Current State!!")); 8: CORE_REPORT_ERROR( USBC_ILLEGAL_ERROR ); 9: return UDI_STAT_INVALID_STATE; 10: } 11: 12: if (( ucb == NULL ) || ( ucb->complete_func == NULL ) || ( ucb->data_len > USB_REQ_MAX_LENGTH )) { 13: CORE_REPORT_ERROR( USBC_INVALID_PARAMETER ); 14: return UDI_STAT_DATA_ERROR; 15: } 16: 17: if ( Usbc_Api_GetPipeEpType( ucb->pipe ) != USB_TRANS_CONTROL ) { 18: CORE_REPORT_ERROR( USBC_INVALID_PIPE ); 19: return UDI_STAT_DATA_ERROR; 20: } 21: 22: 29: if( (ucb->setup_data->bmRequestType & USB_DEVICE_REEQUEST_TYPE_TYPE_MASK) == USB_DEVICE_REQUEST_TYPE_STANDARD_TYPE ){ 30: switch ( ucb->setup_data->bRequest ) { 31: case USB_DEVICE_REQUEST_SET_CONFIGURATION: 32: case USB_DEVICE_REQUEST_SET_INTERFACE: 33: CORE_REPORT_ERROR(USBC_INVALID_PARAMETER); 34: return UDI_STAT_DATA_ERROR; 35: default: 36: break; 37: } 38: } 39: 40: 41: retval = Usbh_SendRequest( 42: (void*)ucb, 43: ucb->usbdev->usbdev_DevNum, 44: USBWRAP_MSG_REQUEST_ISSUE, 45: USBWRAP_SUBMSG_CTLREQ ); 46: if( retval != UDI_OK) { 47: CORE_REPORT_ERROR(USBC_ILLEGAL_ERROR); 48: } 49: 50: return retval; 51: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.