Difference between revisions of "USB Stack"
Lone Rifle (talk | contribs) (→Source code template) |
PurpleGurl (talk | contribs) m (Minor grammar fixes) |
||
(18 intermediate revisions by 10 users not shown) | |||
Line 1: | Line 1: | ||
− | The USB stack is the component | + | The [[USB]] stack is the component that provides the communication between [[USB]] devices and their respective drivers and applications. It consists of multiple files, each with a distinct function. The [[USB]] stack in [[ReactOS]] is currently limited. This page documents the development of the new [[USB]] stack. Development work on a [[USB]] 3 stack is in progress. |
+ | '''NOTE: There is a known issue with booting [[ReactOS]] from the internal HDD with a [[USB]] storage device connected which causes ROS to lose the boot device. Until this problem is fixed or a workaround is developed, please unplug any [[USB]] storage devices during boot!''' | ||
== Overview == | == Overview == | ||
− | + | The goal is to develop a [[USB]] stack which: | |
− | The goal is to develop a USB stack which: | + | * is USB 1.1 – 2.0 compliant |
− | * is USB 1.1 | ||
* uses WDM (NT 5) API | * uses WDM (NT 5) API | ||
* is compatible with all USB devices and drivers (which adhere to the standard) | * is compatible with all USB devices and drivers (which adhere to the standard) | ||
The entire stack will be fully documented and the implementation progress detailed on this page. | The entire stack will be fully documented and the implementation progress detailed on this page. | ||
− | |||
== Goals == | == Goals == | ||
− | + | * Primary Goal: USBHID (human input devices) and storage functionality working (Alpha). | |
− | * Primary Goal: | ||
* Secondary Goal: Audio and other support added. | * Secondary Goal: Audio and other support added. | ||
* Beyond: testing and debugging. | * Beyond: testing and debugging. | ||
Line 21: | Line 19: | ||
== Status == | == Status == | ||
+ | === USB Core Status === | ||
+ | * There are 2 USB specifications for the USB 1.1 standard. Devices that are used in this standard are mice, keyboards, etc. | ||
+ | ** [[OHCI]] (Open Host Controller Interface Standard) – All transfers types are implemented (bulk, iso, control, interrupt) | ||
+ | ** [[UHCI]] (Universal Host Controller Interface Standard) – Totally missing. Though it should be do-able to use OHCI driver as a base and use [http://cgit.haiku-os.org/haiku/tree/src/add-ons/kernel/busses/usb/uhci.cpp Haiku driver] | ||
+ | * [[EHCI]] (Enhanced Host Controller Interface) – Implemented transfer types: bulk & control. Interrupt & Isochronous transfers are not implemented. Due to the missing transfer types, devices who utilize those transfer types will not be available. | ||
+ | * USBHUB – driver for managing port and hubs – Implementation state is unknown – Michel Martin has more information on that | ||
− | + | === USB Mass Storage Support Status === | |
+ | [http://www.eltima.com/share-usb-drive-over-network/ USB Mass Storage] is implemented in [[USBSTOR]] driver and is fully working. Tested in WinXP + [[EHCI|USBEHCI]] + [[USBSTOR]]. Mass storage support requires bulk and control transfers, which are implemented in [[EHCI|USBEHCI]]. | ||
− | == | + | === HID Status === |
− | + | The HID framework is built on 5 drivers | |
+ | |||
+ | * HIDUSB – this is the interface driver for the USB bus. Currently supported devices are mice. Basic keyboard support should also work currently. | ||
+ | * HIDCLASS – this is the class driver for HIDUSB and others. Functionality for mice & keyboard is implemented, though support for sending output reports is not implemented. | ||
+ | * [[MOUHID]] – mouse function driver for USB hid standard – Fully implemented and working. | ||
+ | * [[KBDHID]] – keyboard function driver for the hid standard – 90% implemented, needs KbdHid_InsertScanCodes implemented for keyboard scan code dispatching to kbdclass and led status indicator support (which requires sending output reports). | ||
+ | * HIDPARSE – driver for parsing report descriptors – functionality implemented for mice, keyboard support needs HidParser_TranslateUsage fully implemented for modifier state (caps lock, num lock, scroll lock). | ||
+ | |||
+ | === What already works === | ||
+ | * Mouse support has been tested in WinXP with ReactOS [[OHCI|USBOHCI]] + HIDUSB + HIDCLASS + [[MOUHID]] + HIDPARSE and is working. The USB + HID stack also works in ReactOS. | ||
+ | * Basic Keyboard support is nearly ready. | ||
+ | * USB Mass storage support – Needs mountmgr / partmgr driver implemented. Will also need mountvol and other missing PnP stuff. - needs a few more issues to be resolved | ||
== See Also == | == See Also == | ||
− | [[USB | + | |
+ | *[[Supported USB Devices]] | ||
+ | |||
+ | *[[USB Todo]] List | ||
== References == | == References == | ||
+ | * [http://www.usb.org/developers/docs/ USB.org specifications] | ||
+ | * [http://xenbits.xensource.com/ext/win-pvdrivers.hg XEN PV USB Drivers] | ||
+ | * [http://msdn.microsoft.com/en-us/library/ff537858.aspx Roadmap for Developing USB Drivers] | ||
+ | * Windows Driver Kit (Driver Development Kit) | ||
+ | * [http://www.microsoft.com/whdc/archive/USB2support.mspx?pf=true USB Driver Stack for Windows XP and later] | ||
+ | * [http://msdn.microsoft.com/en-us/library/ff539301.aspx USB Device Stack for Windows XP and later] | ||
+ | * [http://www.intel.com/technology/USB/download/xHCI_Specification_for_USB.pdf USB 3.0 xHCI specifications] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
[[Category:Documentation]] | [[Category:Documentation]] | ||
+ | [[Category:ReactOS Components]] |
Revision as of 07:59, 29 December 2019
The USB stack is the component that provides the communication between USB devices and their respective drivers and applications. It consists of multiple files, each with a distinct function. The USB stack in ReactOS is currently limited. This page documents the development of the new USB stack. Development work on a USB 3 stack is in progress.
NOTE: There is a known issue with booting ReactOS from the internal HDD with a USB storage device connected which causes ROS to lose the boot device. Until this problem is fixed or a workaround is developed, please unplug any USB storage devices during boot!
Contents
Overview
The goal is to develop a USB stack which:
- is USB 1.1 – 2.0 compliant
- uses WDM (NT 5) API
- is compatible with all USB devices and drivers (which adhere to the standard)
The entire stack will be fully documented and the implementation progress detailed on this page.
Goals
- Primary Goal: USBHID (human input devices) and storage functionality working (Alpha).
- Secondary Goal: Audio and other support added.
- Beyond: testing and debugging.
Due to the complexity and size, no release dates will be provided as of now.
Status
USB Core Status
- There are 2 USB specifications for the USB 1.1 standard. Devices that are used in this standard are mice, keyboards, etc.
- OHCI (Open Host Controller Interface Standard) – All transfers types are implemented (bulk, iso, control, interrupt)
- UHCI (Universal Host Controller Interface Standard) – Totally missing. Though it should be do-able to use OHCI driver as a base and use Haiku driver
- EHCI (Enhanced Host Controller Interface) – Implemented transfer types: bulk & control. Interrupt & Isochronous transfers are not implemented. Due to the missing transfer types, devices who utilize those transfer types will not be available.
- USBHUB – driver for managing port and hubs – Implementation state is unknown – Michel Martin has more information on that
USB Mass Storage Support Status
USB Mass Storage is implemented in USBSTOR driver and is fully working. Tested in WinXP + USBEHCI + USBSTOR. Mass storage support requires bulk and control transfers, which are implemented in USBEHCI.
HID Status
The HID framework is built on 5 drivers
- HIDUSB – this is the interface driver for the USB bus. Currently supported devices are mice. Basic keyboard support should also work currently.
- HIDCLASS – this is the class driver for HIDUSB and others. Functionality for mice & keyboard is implemented, though support for sending output reports is not implemented.
- MOUHID – mouse function driver for USB hid standard – Fully implemented and working.
- KBDHID – keyboard function driver for the hid standard – 90% implemented, needs KbdHid_InsertScanCodes implemented for keyboard scan code dispatching to kbdclass and led status indicator support (which requires sending output reports).
- HIDPARSE – driver for parsing report descriptors – functionality implemented for mice, keyboard support needs HidParser_TranslateUsage fully implemented for modifier state (caps lock, num lock, scroll lock).
What already works
- Mouse support has been tested in WinXP with ReactOS USBOHCI + HIDUSB + HIDCLASS + MOUHID + HIDPARSE and is working. The USB + HID stack also works in ReactOS.
- Basic Keyboard support is nearly ready.
- USB Mass storage support – Needs mountmgr / partmgr driver implemented. Will also need mountvol and other missing PnP stuff. - needs a few more issues to be resolved
See Also
- USB Todo List
References
- USB.org specifications
- XEN PV USB Drivers
- Roadmap for Developing USB Drivers
- Windows Driver Kit (Driver Development Kit)
- USB Driver Stack for Windows XP and later
- USB Device Stack for Windows XP and later
- USB 3.0 xHCI specifications