More Related Content Similar to USB3 host driver program structure (20) USB3 host driver program structure4. 参考資料
●
カーネル/VM探検隊@関西 8回目
– 3:05 – 3:25 @liva_jy
xHCI(USB3.0 HC)デバドラを自作してみよう
– https://www.youtube.com/watch?v=dKUSUv2cxhg
●
『USB3.0ホストドライバ自作入門』
– https://uchan.booth.pm/items/1056355
●
『eXtensible Host Controller Interface for Universal Serial Bus』
●
『Universal Serial Bus 3.1 Specification』
●
『Device Class Definition for Human Interface Devices (HID)』
27. usb::Device
- buf_: uint8_t[256]
+ ControlIn(int, SetupData, void*, int)
+ ControlOut(int, SetupData, const void*, int)
+ InterruptIn(int, void*, int)
+ InterruptOut(int, const void*, int)
+ StartInitialize()
+ IsInitialized(): bool
+ OnEndpointsConfigured()
# OnControlInCompleted(SetupData, const void*, int)
# OnControlOutCompleted(SetupData, const void*, int)
# OnInterruptInCompleted(const void*, int)
# OnInterruptOutCompleted(const void*, int)
- InitializePhase1
- InitializePhase2
- InitializePhase3
usb::xhci::Device
- slot_id_: uint8_t
+ ControlIn(int, SetupData, void*, int)
+ ControlOut(int, SetupData, const void*, int)
+ InterruptIn(int, void*, int)
+ InterruptOut(int, const void*, int)
+ AllocTransferRing(DeviceContextIndex, size_t)
+ OnTransferEventReceived(const TransferEventTRB&)
usb::ClassDriver
+ SetEndpoint(const EndpointConfig&)
+ OnEndpointsConfigured()
+ OnControlInCompleted(SetupData, const void*, int)
+ OnControlOutCompleted(SetupData, const void*, int)
+ OnInterruptInCompleted(const void*, int)
+ OnInterruptOutCompleted(const void*, int)
16
dev_
usb::HIDKeyboardDriver
- ep_interrupt_in_: int
+ SetEndpoint(const EndpointConfig&)
+ OnEndpointsConfigured()
+ OnControlInCompleted(SetupData, const void*, int)
+ OnControlOutCompleted(SetupData, const void*, int)
+ OnInterruptInCompleted(const void*, int)
+ OnInterruptOutCompleted(const void*, int)
+ SubscribeKeyPush(std::function<void (uint8_t)>)
usb::xhci::Ring
- buf_: TRB*
- cycle_bit_: bool
- write_index_: size_t
+ Initialize(size_t)
+ Push(const TRB&): TRB*
31
transfer_rings_
class_drivers_
28. main usb::Device
InitializePhase1
StartInitialize
usb::xhci::Device
OnTransferEventReceived
ControlIn[GET_DESC, DEVICE]
return
return
xHC
Wait<br>CommandCompletionEvent
Push[Setup, Data, Status]
OnControlInCompleted
ControlIn[GET_DESC, CONFIG]
return
Push[Setup, Data, Status]
return
return
InitializePhase2
OnTransferEventReceived
OnControlInCompleted
ControlOut[SET_CONFIG]
return
Push[Setup, Status]
return
return
DEVICEディスクリプタの処理
CONFIGディスクリプタの処理
InitializePhase3
OnTransferEventReceived
OnControlOutCompleted
SetEndpoint
return
return
return
SET_CONFIG<br>完了後の処理
usb::<br>HIDKeyboardDriver
<span>new HIDKeyboardDriver</span>
IsInitialized
true
AllocTransferRing
Push[ConfigureEndpointCommand]
return
OnEndpointsConfigured
return
OnEndpointsConfigured
return
ControlIn[GET_REPORT, Input Report]
Push[Setup, Data, Stage]
OnTransferEventReceived
OnControlInCompleted
OnControlInCompleted
InterruptIn
Push[Normal]
NotifyKeyPush
OnTransferEventReceived
OnInterruptInCompleted
OnInterruptInCompleted
Key Pushed
キー入力の初期状態取得
エンドポイント有効化