let bus_of_usb_bus b =
let rec aux dev =
if is_null dev
then []
else { filename = usb_device_filename dev;
bus = get_bus;
descriptor = usb_device_descriptor dev;
ep = Array.map (fun x ->
let addr = x.bEndpointAddress in
if addr land 0x80 <> 0
then ReadEp addr
else WriteEp addr) ((usb_device_config dev).interf.altsetting.endpoint);
usb_device = dev } :: (aux (usb_device_next dev))
and get_bus () = { dirname = usb_bus_dirname b;
devices = aux (usb_bus_devices b) }
in get_bus ()