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

クラスドライバ登録API

Syntax
C++
uhs_status_t Usbh_Api_DriverRegister(struct class_driver_reginfo * driver_info);
引数 
説明 
struct class_driver_reginfo * driver_info 
[in] ドライバ登録情報ブロック 

クラスドライバ登録API結果

返値の詳細 
説明 
正常終了 
状態異常 
パラメータ異常 

クラスドライバをUSB Hostに登録します。 

デバイス接続後に本APIを使用してクラスドライバの登録を行っても、 登録以前の接続はクラスドライバに通知できないことに注意して下さい。 

クラスドライバの登録はUSB Hostの初期化時に行って下さい。 driver_info は、USB HOSTスタック内部で保持するので、本関数での登録完了後も開放しないで下さい。

本構造体で登録するクラスドライバのデバイス接続時のコールバック関数、 デバイス切断時のコールバック関数は、必要最低限の処理を行ってすぐに終了して下さい。 

接続・切断コールバック関数内から本USB HostのAPIを呼び出すことは禁止です。 

接続コールバック関数が呼び出されたタスクとは別のタスクで行って下さい。 

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

1: uhs_status_t Usbh_Api_DriverRegister(struct class_driver_reginfo * driver_info) 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 ( driver_info == NULL ) { 13: CORE_REPORT_ERROR(USBC_INVALID_PARAMETER); 14: return UDI_STAT_DATA_ERROR; 15: } 16: 17: 18: retval = kernel_acquisition_semaphore( 19: &(g_apiwrap_info.drvinfo_semid), 20: USB_HOST_SEMTIMEOUT, 21: in_interrupt()); 22: if ( retval != UDI_OK ) { 23: 24: 25: 26: CORE_REPORT_ERROR( USBC_ILLEGAL_ERROR ); 27: 28: return UDI_STAT_INVALID_STATE; 29: } 30: 31: if ( g_apiwrap_info.apiwrap_stat != USBWRAP_STAT_USBD_INITCOMP ) { 32: 35: 36: 37: lists_addition_ListTail( 38: &g_apiwrap_info.tmp_drvlist, 39: driver_info ); 40: 41: } else { 42: 45: retval = Usbh_DriverRegister( driver_info ); 46: if ( retval != UDI_OK ) { 47: CORE_REPORT_ERROR( USBC_ILLEGAL_ERROR ); 48: 49: 50: retval = kernel_release_semaphore(&(g_apiwrap_info.drvinfo_semid), in_interrupt()); 51: if( retval !=UDI_OK ) { 52: CORE_REPORT_ERROR(USBC_ILLEGAL_ERROR); 53: } 54: 55: return UDI_STAT_INVALID_STATE; 56: } 57: } 58: 59: 60: retval = kernel_release_semaphore(&(g_apiwrap_info.drvinfo_semid), in_interrupt()); 61: if( retval !=UDI_OK ) { 62: CORE_REPORT_ERROR(USBC_ILLEGAL_ERROR); 63: return UDI_STAT_INVALID_STATE; 64: } 65: 66: return UDI_OK; 67: }
Copyright (c) 2017-2025 Axell Corporation. All rights reserved.