blob: af0534dfa6db461867b48ad0dc9f7c6d78a5f03c [file] [log] [blame] [edit]
/*
* BRLTTY - A background process providing access to the console screen (when in
* text mode) for a blind person using a refreshable braille display.
*
* Copyright (C) 1995-2023 by The BRLTTY Developers.
*
* BRLTTY comes with ABSOLUTELY NO WARRANTY.
*
* This is free software, placed under the terms of the
* GNU Lesser General Public License, as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any
* later version. Please see the file LICENSE-LGPL for details.
*
* Web Page: http://brltty.app/
*
* This software is maintained by Dave Mielke <dave@mielke.cc>.
*/
#ifndef BRLTTY_INCLUDED_IO_USB
#define BRLTTY_INCLUDED_IO_USB
#include "prologue.h"
#include "usb_types.h"
#include "async_types_io.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
extern UsbDevice *usbFindDevice (UsbDeviceChooser *chooser, UsbChooseChannelData *data);
extern void usbForgetDevices (void);
extern void usbCloseDevice (UsbDevice *device);
extern int usbDisableAutosuspend (UsbDevice *device);
extern const UsbDeviceDescriptor *usbDeviceDescriptor (UsbDevice *device);
#define USB_IS_PRODUCT(descriptor,vendor,product) ((getLittleEndian16((descriptor)->idVendor) == (vendor)) && (getLittleEndian16((descriptor)->idProduct) == (product)))
extern int usbNextDescriptor (
UsbDevice *device,
const UsbDescriptor **descriptor
);
extern const UsbConfigurationDescriptor *usbConfigurationDescriptor (
UsbDevice *device
);
extern const UsbInterfaceDescriptor *usbInterfaceDescriptor (
UsbDevice *device,
unsigned char interface,
unsigned char alternative
);
extern unsigned int usbAlternativeCount (
UsbDevice *device,
unsigned char interface
);
extern const UsbEndpointDescriptor *usbEndpointDescriptor (
UsbDevice *device,
unsigned char endpointAddress
);
extern int usbConfigureDevice (
UsbDevice *device,
unsigned char configuration
);
extern int usbGetConfiguration (
UsbDevice *device,
unsigned char *configuration
);
extern int usbOpenInterface (
UsbDevice *device,
unsigned char interface,
unsigned char alternative
);
extern void usbCloseInterface (
UsbDevice *device
);
extern int usbResetDevice (UsbDevice *device);
extern int usbClearHalt (UsbDevice *device, unsigned char endpointAddress);
extern ssize_t usbControlRead (
UsbDevice *device,
uint8_t recipient,
uint8_t type,
uint8_t request,
uint16_t value,
uint16_t index,
void *buffer,
uint16_t length,
int timeout
);
extern ssize_t usbControlWrite (
UsbDevice *device,
uint8_t recipient,
uint8_t type,
uint8_t request,
uint16_t value,
uint16_t index,
const void *buffer,
uint16_t length,
int timeout
);
extern ssize_t usbGetDescriptor (
UsbDevice *device,
unsigned char type,
unsigned char number,
unsigned int index,
UsbDescriptor *descriptor,
int timeout
);
extern int usbGetDeviceDescriptor (
UsbDevice *device,
UsbDeviceDescriptor *descriptor
);
extern int usbGetLanguage (
UsbDevice *device,
uint16_t *language,
int timeout
);
extern char *usbGetString (
UsbDevice *device,
unsigned char number,
int timeout
);
extern char *usbDecodeString (const UsbStringDescriptor *descriptor);
extern char *usbGetManufacturer (UsbDevice *device, int timeout);
extern char *usbGetProduct (UsbDevice *device, int timeout);
extern char *usbGetSerialNumber (UsbDevice *device, int timeout);
extern void usbLogString (
UsbDevice *device,
unsigned char number,
const char *description
);
typedef int (UsbStringVerifier) (const char *reference, const char *value);
extern UsbStringVerifier usbStringEquals;
extern UsbStringVerifier usbStringMatches;
extern int usbVerifyString (
UsbDevice *device,
UsbStringVerifier verify,
unsigned char index,
const char *value
);
extern int usbVerifyManufacturerName (UsbDevice *device, const char *eRegExp);
extern int usbVerifyProductDescription (UsbDevice *device, const char *eRegExp);
extern int usbVerifySerialNumber (UsbDevice *device, const char *string);
extern int usbParseVendorIdentifier (uint16_t *identifier, const char *string);
extern int usbVerifyVendorIdentifier (const UsbDeviceDescriptor *descriptor, uint16_t identifier);
extern int usbParseProductIdentifier (uint16_t *identifier, const char *string);
extern int usbVerifyProductIdentifier (const UsbDeviceDescriptor *descriptor, uint16_t identifier);
extern void usbBeginInput (
UsbDevice *device,
unsigned char endpointNumber
);
extern int usbMonitorInputEndpoint (
UsbDevice *device, unsigned char endpointNumber,
AsyncMonitorCallback *callback, void *data
);
extern ssize_t usbReadEndpoint (
UsbDevice *device,
unsigned char endpointNumber,
void *buffer,
size_t length,
int timeout
);
extern ssize_t usbWriteEndpoint (
UsbDevice *device,
unsigned char endpointNumber,
const void *buffer,
size_t length,
int timeout
);
typedef struct {
void *context;
void *buffer;
size_t size;
ssize_t count;
int error;
} UsbResponse;
extern void *usbSubmitRequest (
UsbDevice *device,
unsigned char endpointAddress,
void *buffer,
size_t length,
void *context
);
extern int usbCancelRequest (UsbDevice *device, void *request);
extern void *usbReapResponse (
UsbDevice *device,
unsigned char endpointAddress,
UsbResponse *response,
int wait
);
extern int usbAwaitInput (
UsbDevice *device,
unsigned char endpointNumber,
int timeout
);
extern ssize_t usbReadData (
UsbDevice *device,
unsigned char endpointNumber,
void *buffer,
size_t length,
int initialTimeout,
int subsequentTimeout
);
extern ssize_t usbWriteData (
UsbDevice *device,
unsigned char endpointNumber,
const void *data,
size_t length,
int timeout
);
extern int usbAddInputFilter (UsbDevice *device, UsbInputFilter *filter);
extern const UsbSerialOperations *usbGetSerialOperations (UsbDevice *device);
extern int usbSetSerialParameters (UsbDevice *device, const SerialParameters *parameters);
typedef struct {
const UsbChannelDefinition *definition;
UsbDevice *device;
} UsbChannel;
extern UsbChannel *usbOpenChannel (const UsbChannelDefinition *definitions, const char *identifier);
extern void usbCloseChannel (UsbChannel *channel);
extern const char *usbMakeChannelIdentifier (UsbChannel *channel, char *buffer, size_t size);
extern const char *const *usbGetDriverCodes (uint16_t vendor, uint16_t product);
#define USB_DEVICE_QUALIFIER "usb"
extern int isUsbDeviceIdentifier (const char **identifier);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* BRLTTY_INCLUDED_IO_USB */