summaryrefslogtreecommitdiff
path: root/static/plan9-4e/man3/usb.3
diff options
context:
space:
mode:
Diffstat (limited to 'static/plan9-4e/man3/usb.3')
-rw-r--r--static/plan9-4e/man3/usb.3235
1 files changed, 235 insertions, 0 deletions
diff --git a/static/plan9-4e/man3/usb.3 b/static/plan9-4e/man3/usb.3
new file mode 100644
index 00000000..587b7a30
--- /dev/null
+++ b/static/plan9-4e/man3/usb.3
@@ -0,0 +1,235 @@
+.TH USB 3
+.SH NAME
+usb \- USB Host Controller Interface
+.SH SYNOPSIS
+.nf
+.B bind -a #U /dev
+
+.BI /dev/usb m
+.BI /dev/usb m /new
+.BI /dev/usb m /port
+.BI /dev/usb m / n
+.BI /dev/usb m / n /ctl
+.BI /dev/usb m / n /status
+.BI /dev/usb m / n /setup
+.BI /dev/usb m / n /ep k\fLdata
+\&...
+
+.fi
+.SH DESCRIPTION
+The Universal Serial Bus is a popular bus for connecting slow and medium speed
+devices, such as mice, keyboards, printers, and scanners to a PC. It is
+a four-wire tree-shaped bus that provides both communication and (limited)
+power to devices. Branching points in the tree are provided by devices
+called
+.IR hubs .
+.PP
+Most PCs have a two-slot hub built in, accommodating two USB devices. To
+attach more devices, one or more hubs have to be plugged in to the USB
+slots of the PC. The topology of the network is a tree with at most
+127 nodes, counting both internal and leaf nodes.
+.PP
+The USB bus is fully controlled by the host; all devices are polled.
+Hubs are passive in the sense that they do not poll the devices attached
+to them. The host polls those devices and the hubs merely route the
+messages.
+.PP
+When a device is attached, the host queries it to determine its type
+and its speed. The querying process is standardized. The first level
+of querying is the same for all devices, the next is somewhat specialized
+for particular classes of devices (such as mice, keyboards, or audio devices).
+Specialization continues as subclasses and subsubclasses are explored.
+.PP
+For each connected device there is a directory in
+.BI #U/usb n\fR.
+Reading
+.BI #U/usb n /*/status
+yields the state, class, subclass and proto of each device in the
+first line. The remaining lines give the state of each of the
+interfaces.
+.PP
+To find a mouse, for example, scan the status files for the line
+.IP
+.EX
+.BR "Enabled 0x020103"
+.EE
+.PP
+A mouse belongs to class 3 (in the least significant byte),
+.IR "human interface device" ,
+subclass 1,
+.IR boot ,
+proto 2,
+.I mouse
+(proto 1 would be the keyboard).
+USB class, subclass and proto codes can be found on
+.BR www.usb.org .
+.PP
+The control interface for each device is
+.I "``endpoint 0''"
+and is named
+.BI #U/usb n /*/setup \fR.
+The control interface of the device is accessed by reading and writing
+this file.
+.PP
+There is a separate
+.I "control interface
+named
+.BI #U/usb n /*/ctl
+which is used to configure the USB device
+.IR driver .
+By writing to this
+file, driver endpoints can be created and configured for communication with a
+device's data streams. A mouse, for example, has one control interface
+and one data interface. By communicating with the control interface,
+one can find out the device type (i.e., `mouse'), power consumption, number
+on interfaces, etc.
+.IR Usbd (4)
+will extract all this information and, in verbose mode, print it.
+.PP
+By sending an `endpoint message' to the
+.I ctl
+file, new driver endpoints can be created. The syntax of these messages
+is
+.PP
+.B ep
+.I n
+.B bulk
+.I "mode maxpkt nbuf
+.PP
+or
+.PP
+.B ep
+.I "n period mode samplesize hz
+.PP
+The first form configures a non-real-time stream, the second an
+.I isochronous
+(real-time) stream.
+In both forms,
+.I n
+is the endpoint to be configured, and
+.I mode
+is
+.B r
+for read only, or
+.B w
+for reading and writing.
+In the first form,
+.I maxpkt
+is the maximum packet size to be used (between 1 and 2048),
+and
+.I nbuf
+is the number of buffers to be allocated by the driver.
+.PP
+In the second form,
+.I period
+is the number of milliseconds between packets. This number is usually
+dictated by the device. It must be between 1 and 1000.
+The
+.I samplesize
+is the size in bytes of the data units making up packets, and
+.I hz
+is the number of data units transmitted or received per second.
+.PP
+The data rate is thus
+.IR hz × samplesize
+bytes per second, and the packet size used will vary between
+⌊(\f2period\fP×\f2hz\fP)/1000⌋×\f2samplesize\fP
+and
+⌈(\f2period\fP×\f2hz\fP)/1000⌉×\f2samplesize\fP.
+.PP
+The mouse, which produces 3-byte samples, is configured with
+.BR "ep 1 bulk r 3 32" :
+endpoint 1 is configured for non-real-time read-only 3-byte messages
+and allows 32 of them to be outstanding.
+.PP
+A usb audio output device at 44.1 KHz, 2 channels, 16-bit samples, on endpoint
+4 will be configured with
+.BR "ep 4 1 w 4 44100" .
+.PP
+If the configuration is successful, a file named
+.BI ep n data
+is created which can be read and/or written depending on
+configuration. Configuration is not allowed when the data endpoint
+is open.
+.PP
+Forward
+.I seek
+operations on isochronous endpoints
+can be used to start the I/O at a specific time.
+The usb status file provides information that can be used to map file
+offsets to points in time: For each endpoint, the status file produces a line
+of the form:
+.PP
+.B "4 0x000201 \f2nnn\fP bytes \f2nnn\fP blocks
+.PP
+The fields are, from left to right,
+endpoint number, class/subclass/proto (as a six-digit hex number with class in the
+least significant byte), number of bytes read/written, number of blocks read/written.
+.PP
+For isochronous devices only, an additional line is produced of the
+form:
+.PP
+.B "bufsize \f2s\fP buffered \f2b\fP offset \f2o\fP time \f2t\fP
+.PP
+.I S
+is the size of the DMA operations on the device (i.e., the minimum useful size
+for reads and writes),
+.I b
+is the number of bytes currently buffered for input or output, and
+.I o
+and
+.I t
+should be interpreted to mean that byte offset
+.I o
+was/will be reached at time
+.I t
+(nanoseconds since the epoch).
+.PP
+To play or record samples exactly at some predetermined time, use
+.I o
+and
+.I t
+with the sampling rate to calculate the offset to seek to.
+.PP
+The number of bytes buffered can also be obtained using
+.IR stat (2)
+on the endpoint file. See also
+.IR audio (3).
+.sp
+.SH FILES
+.TF "#U/usb n /*/status"
+.TP
+.BI #U/usb n /*/status
+USB device status file, class, subclass and proto are found in line one
+.TP
+.BI #U/usb n /*/ctl
+USB
+.I driver
+control file, used to create driver endpoints, control debugging, etc.
+.TP
+.BI #U/usb n /*/setup
+USB
+.I device
+control file, used to exchange messages with a device's control channel.
+.B setup
+may be viewed as a preconfigured
+.B ep0data
+file.
+.TP
+.BI #U/usb n /*/ep k data
+USB device data channel for the
+.IR k 'th
+configuration.
+.SH "SEE ALSO"
+.IR usb (4),
+.IR usbd (4),
+.IR plan9.ini (8)
+.SH BUGS
+OpenHCI USB cards are not yet supported.
+.PP
+The interface for configuring endpoints is at variance with the standard.
+.PP
+The notion that the endpoints themselves have a class and subclass
+is a distortion of the standard.
+It would be better to leave all handling of the notions of class to the
+user-level support programs, and remove it from the driver.