This is an old revision of the document!


Includes

#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
usb_error_t     usb_pipe_open(struct usb_device *udev,
            const uint8_t *ifaces, struct usb_pipe **,
            const struct usb_config *, int count,
            void *priv);
void            usb_pipe_halt(struct usb_pipe *);
void            usb_pipe_ready(struct usb_pipe *);
void            usb_pipe_drain(struct usb_pipe *);
void            usb_pipe_close(struct usb_pipe **, int count);
void            usb_clear_stall(struct usb_pipe *);
struct usb_urb *usb_alloc_urb(struct usb_pipe *, int flags);
int             usb_set_frame_data(struct usb_urb *, int index, void *, int len);
int             usb_copyin_urb(struct usb_urb *, void *, int offset, int len);
int             usb_copyout_urb(struct usb_urb *, void *, int offset, int len);
void            usb_cancel_urb(struct usb_urb *);
void            usb_free_urb(struct usb_urb *);
void            usb_submit_urb(struct usb_pipe *, struct usb_urb *, int flags);

Example

ep_config {
  .type = UE_BULK,
  .endpoint = UE_ADDR_ANY,
  .direction = UE_DIR_OUT,
  .bufsize = MCLBYTES,
  .flags = {.pipe_bof = 1,.force_short_xfer = 1,},
  .callback = write_callback,
  .timeout = 5000,        /* ms */
  .min_urb = 8,
} {
  .type = UE_BULK,
  .endpoint = UE_ADDR_ANY,
  .direction = UE_DIR_IN,
  .bufsize = MCLBYTES,
  .flags = {.pipe_bof = 1,.force_short_xfer = 1,},
  .callback = read_callback,
  .min_urb = 8,
} 

attach()
 error = usb_pipe_open(uaa->device,
         &iface_index, sc->sc_xfer, ep_config,
         XXX_N_TRANSFER, sc);

detach()
 usb_pipe_close(sc->sc_xfer, XXX_N_TRANSFER);

init()
 usb_pipe_ready(sc->sc_xfer);

start(m)
 urb = usb_alloc_urb(sc->sc_xfer, 0);
 usb_set_frame_data(urb, 0, m->data, m->len);
 usb_set_priv(urb, m);
 usb_submit_urb(urb);

write_callback(urb, error)
 pipe = urb->pipe;
 if (error)
   usb_clear_stall(pipe);
 m = usb_get_priv(urb);
 usb_free_urb(urb);
 m_freem(m);
  • usb/usbperiphapi.1242968399.txt.gz
  • Last modified: 2009/05/22 04:59
  • by AndrewThompson