| UCOM(9) | Kernel Developer's Manual | UCOM(9) |
ucom —
ucom driver is a (relatively) easy way to make a USB
device look like a tty(4). It
basically takes two bulk pipes, input and output, and makes a tty out of them.
This is useful for a number of device types, e.g., serial ports (see
uftdi(4)), modems (see
umodem(4)), and devices that
traditionally look like a tty (see
uvisor(4)).
Communication between the real driver and the
ucom driver is via the attachment arguments (when
attached) and via the ucom_methods struct
struct ucom_attach_args {
int ucaa_portno;
int ucaa_bulkin;
int ucaa_bulkout;
u_int ucaa_ibufsize;
u_int ucaa_ibufsizepad;
u_int ucaa_obufsize;
u_int ucaa_opkthdrlen;
const char *ucaa_info;
struct usbd_device *ucaa_device;
struct usbd_interface *ucaa_iface;
const struct ucom_methods *ucaa_methods;
void *ucaa_arg;
};
int
ucaa_portnoucom attached. Use the value
UCOM_UNK_PORTNO if there is only one port.int
ucaa_bulkinint
ucaa_bulkoutu_int
ucaa_ibufsizeu_int
ucaa_ibufsizepadibufsize.u_int
ucaa_obufsizeu_int
ucaa_ibufsizepaducaa_obufsize.struct
usbd_device *ucaa_deviceucom driver
should use for further communication with the driver.ucom_methods struct contains a number of function
pointers used by the ucom driver at various stages. If
the device is not interested in being called at a particular point it should
just use a NULL pointer and the
ucom driver will use a sensible default.
struct ucom_methods {
void (*ucom_get_status)(void *sc, int portno,
u_char *lsr, u_char *msr);
void (*ucom_set)(void *sc, int portno, int reg, int onoff);
#define UCOM_SET_DTR 1
#define UCOM_SET_RTS 2
#define UCOM_SET_BREAK 3
int (*ucom_param)(void *sc, int portno, struct termios *);
int (*ucom_ioctl)(void *sc, int portno, u_long cmd,
void *data, int flag, proc_t *p);
int (*ucom_open)(void *sc, int portno);
void (*ucom_close)(void *sc, int portno);
void (*ucom_read)(void *sc, int portno, u_char **ptr,
uint32_t *count);
void (*ucom_write)(void *sc, int portno, u_char *to,
u_char *from, uint32_t *count);
};
(*ucom_get_status)(void *sc,
int portno, u_char *lsr,
u_char *msr)(*ucom_set)(void *sc,
int portno, int reg,
int onoff)(*ucom_param)(void *sc,
int portno, struct termios
*t)(*ucom_ioctl)(void *sc,
int portno, u_long cmd,
void *data, int flag,
proc_t *p)(*ucom_open)(void *sc,
int portno)ucom driver opens the bulk
pipes for the port.(*ucom_close)(void *sc,
int portno)ucom driver closes the bulk
pipes for the port.(*ucom_read)(void *sc,
int portno, u_char **ptr,
uint32_t *count)(*ucom_write)(void *sc,
int portno, u_char *dst,
u_char *src, uint32_t
*count)Apart from these methods there is a function
ucom_status_change(struct ucom_softc
*)which should be called by the driver whenever it notices a status change.
ucom interface first appeared in
NetBSD 1.5.
| September 12, 2016 | NetBSD 9.4 |