summaryrefslogtreecommitdiff
path: root/sys/src/cmd/nusb/serial/serial.c
AgeCommit message (Collapse)Author
2022-02-21nusb: Fix handling of interface altsetting.cinap_lenrek
The altsetting was handled only for a single endpoint (per interface number), but has to be handled for each endpoint (per interface *AND* altsetting number). A multi function device (like a disk) can have multiple interfaces, all with the same interface number but varying altsetting numbers and each of these interfaces would list distict endpoint configurations. Multiple interfaces can even share some endpoints (they use the same endpoint addresses), but we still have to duplicate them for each interface+altsetting number (as they'r part of actually distict interfaces with distict endpoint configurations). It is also important to *NOT* make endpoints bi-directional (dir == Eboth) when only one direction is used in a interface/altsetting and the other direction in another. This was the case for nusb/disk with some seagate drive where endpoints where shared between the UAS and usb storage class interface (but with distict altsettings). The duplicate endpoints (as in using the same endpoint address) are chained together by a next pointer and the head is stored in Usbdev.ep[addr], where addr is the endpoint address. These Ep structures will have distinct endpoint numbers Ep.id (when they have conflicting types), but all will share the endpoint address (lower 4 bits of the endpoint number). The consequence is that all of the endpoints configuration (attributes, interval) is now stored in the Ep struct and no more Altc struct is present. A pointer to the Ep struct has to be passed to openep() for it to configure the endpoint. For the Iface struct, we will now create multiple of them: one for each interface *AND* altsetting nunber, chained together on a next pointer and the head being stored in conf->iface[ifaceid]. -- cinap
2018-11-06nusb/serial: fix wrong guard statement (thanks deuteron)aiju
2018-10-21nusb/serial: add support for CH340 serial convertercinap_lenrek
2015-06-15nusb/serial: remove unused channelcinap_lenrek
2014-12-24nusb/serial: fix nusb/serial hang with ftdicinap_lenrek
have to create process, not a thread in ftdi code so main process can exit after posting fs service.
2014-07-05nusb/serial: implement flushescinap_lenrek
handle reads and writes with 9pqueue(2) so they can be flushed and wont hang the filesystem. this also lets us get rid of the timeouts. ftdi is still full of braindamage that should be rewritten, but i dont have a device to test.
2014-07-05nusb/serial: more cleanupcinap_lenrek
2014-07-05support for huawei e220 g3 modem, cleanup nusb/serialcinap_lenrek
2014-06-28nusb: implement aijus stable uniqueue device namescinap_lenrek
instead of naming devices by ther dynamically assigned device address, we hash device uniqueue fields from the device descriptor and produce a 5 digit hex string that will identify the device across machines. when there is a collision (less than 1% chance with 100 devices), usbd will append the device address to the name to make it uniqueue for this machine. the hname is passed to drivers in the devid argument, which now has the form addr:hname, where the colon and hname can be omited (for backwards compatibility). when the new behaviour isnt desired, nousbhname= environment variable can be defined giving the old behaviour.
2013-09-15nusb/serial: set exit statuscinap_lenrek
2013-01-25nusb/serial: add silabs driver (from sources)cinap_lenrek
2011-08-01nusb: fix usage inconsitency, shr namescinap_lenrek
2011-07-30added nusb/serialaiju