Instrument Neutral Distributed Interface INDI  1.9.2
Classes | Macros | Functions
hid_libusb.c File Reference
#include "hidapi.h"
#include "locale_compat.h"
#include <libusb.h>
#include "iconv.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#include <pthread.h>

Go to the source code of this file.

Classes

struct  input_report
 
struct  hid_device_
 
struct  lang_map_entry
 

Macros

#define _GNU_SOURCE
 
#define DEBUG_PRINTF
 
#define LOG(...)   fprintf(stderr, __VA_ARGS__)
 
#define DETACH_KERNEL_DRIVER
 
#define LANG(name, code, usb_code)
 

Functions

uint16_t get_usb_code_for_current_locale (void)
 
int HID_API_EXPORT hid_init (void)
 Initialize the HIDAPI library. More...
 
int HID_API_EXPORT hid_exit (void)
 Finalize the HIDAPI library. More...
 
struct hid_device_info HID_API_EXPORThid_enumerate (unsigned short vendor_id, unsigned short product_id)
 Enumerate the HID Devices. More...
 
void HID_API_EXPORT hid_free_enumeration (struct hid_device_info *devs)
 Free an enumeration Linked List. More...
 
hid_devicehid_open (unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number)
 Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally a serial number. More...
 
hid_device *HID_API_EXPORT hid_open_path (const char *path)
 Open a HID device by its path name. More...
 
int HID_API_EXPORT hid_write (hid_device *dev, const unsigned char *data, size_t length)
 Write an Output report to a HID device. More...
 
int HID_API_EXPORT hid_read_timeout (hid_device *dev, unsigned char *data, size_t length, int milliseconds)
 Read an Input report from a HID device with timeout. More...
 
int HID_API_EXPORT hid_read (hid_device *dev, unsigned char *data, size_t length)
 Read an Input report from a HID device. More...
 
int HID_API_EXPORT hid_set_nonblocking (hid_device *dev, int nonblock)
 Set the device handle to be non-blocking. More...
 
int HID_API_EXPORT hid_send_feature_report (hid_device *dev, const unsigned char *data, size_t length)
 Send a Feature report to the device. More...
 
int HID_API_EXPORT hid_get_feature_report (hid_device *dev, unsigned char *data, size_t length)
 Get a feature report from a HID device. More...
 
void HID_API_EXPORT hid_close (hid_device *dev)
 Close a HID device. More...
 
int HID_API_EXPORT_CALL hid_get_manufacturer_string (hid_device *dev, wchar_t *string, size_t maxlen)
 Get The Manufacturer String from a HID device. More...
 
int HID_API_EXPORT_CALL hid_get_product_string (hid_device *dev, wchar_t *string, size_t maxlen)
 Get The Product String from a HID device. More...
 
int HID_API_EXPORT_CALL hid_get_serial_number_string (hid_device *dev, wchar_t *string, size_t maxlen)
 Get The Serial Number String from a HID device. More...
 
int HID_API_EXPORT_CALL hid_get_indexed_string (hid_device *dev, int string_index, wchar_t *string, size_t maxlen)
 Get a string from a HID device, based on its string index. More...
 
const HID_API_EXPORT wchar_t *HID_API_CALL hid_error (hid_device *dev)
 Get a string describing the last error which occurred. More...
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 34 of file hid_libusb.c.

◆ DEBUG_PRINTF

#define DEBUG_PRINTF

Definition at line 57 of file hid_libusb.c.

◆ DETACH_KERNEL_DRIVER

#define DETACH_KERNEL_DRIVER

Definition at line 69 of file hid_libusb.c.

◆ LANG

#define LANG (   name,
  code,
  usb_code 
)
Value:
{ \
name, code, usb_code \
}

Definition at line 1240 of file hid_libusb.c.

◆ LOG

#define LOG (   ...)    fprintf(stderr, __VA_ARGS__)

Definition at line 60 of file hid_libusb.c.

Function Documentation

◆ get_usb_code_for_current_locale()

uint16_t get_usb_code_for_current_locale ( void  )

Definition at line 1381 of file hid_libusb.c.

◆ hid_close()

void HID_API_EXPORT hid_close ( hid_device device)

Close a HID device.

@ingroup API
@param device A device handle returned from hid_open().

Definition at line 1163 of file hid_libusb.c.

◆ hid_enumerate()

struct hid_device_info HID_API_EXPORT* hid_enumerate ( unsigned short  vendor_id,
unsigned short  product_id 
)

Enumerate the HID Devices.

This function returns a linked list of all the HID devices
attached to the system which match vendor_id and product_id.
If @p vendor_id and @p product_id are both set to 0, then
all HID devices will be returned.

@ingroup API
@param vendor_id The Vendor ID (VID) of the types of device
    to open.
@param product_id The Product ID (PID) of the types of
    device to open.
Returns
This function returns a pointer to a linked list of type struct hid_device, containing information about the HID devices attached to the system, or NULL in the case of failure. Free this linked list by calling hid_free_enumeration().

Definition at line 418 of file hid_libusb.c.

◆ hid_error()

const HID_API_EXPORT wchar_t* HID_API_CALL hid_error ( hid_device device)

Get a string describing the last error which occurred.

@ingroup API
@param device A device handle returned from hid_open().

@returns
    This function returns a string containing the last error
    which occurred or NULL if none has occurred.

Definition at line 1227 of file hid_libusb.c.

◆ hid_exit()

int HID_API_EXPORT hid_exit ( )

Finalize the HIDAPI library.

This function frees all of the static data associated with
HIDAPI. It should be called at the end of execution to avoid
memory leaks.

@ingroup API
Returns
This function returns 0 on success and -1 on error.

Definition at line 407 of file hid_libusb.c.

◆ hid_free_enumeration()

void HID_API_EXPORT hid_free_enumeration ( struct hid_device_info devs)

Free an enumeration Linked List.

This function frees a linked list created by hid_enumerate().

@ingroup API
Parameters
devsPointer to a list of struct_device returned from hid_enumerate().

Definition at line 597 of file hid_libusb.c.

◆ hid_get_feature_report()

int HID_API_EXPORT hid_get_feature_report ( hid_device device,
unsigned char *  data,
size_t  length 
)

Get a feature report from a HID device.

Make sure to set the first byte of @p data[] to the Report
ID of the report to be read.  Make sure to allow space for
this extra byte in @p data[].

@ingroup API
@param device A device handle returned from hid_open().
@param data A buffer to put the read data into, including
    the Report ID. Set the first byte of @p data[] to the
    Report ID of the report to be read.
@param length The number of bytes to read, including an
    extra byte for the report ID. The buffer can be longer
    than the actual report.

@returns
    This function returns the number of bytes read and
    -1 on error.

Definition at line 1135 of file hid_libusb.c.

◆ hid_get_indexed_string()

int HID_API_EXPORT_CALL hid_get_indexed_string ( hid_device device,
int  string_index,
wchar_t *  string,
size_t  maxlen 
)

Get a string from a HID device, based on its string index.

@ingroup API
@param device A device handle returned from hid_open().
@param string_index The index of the string to get.
@param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t.

@returns
    This function returns 0 on success and -1 on error.

Definition at line 1211 of file hid_libusb.c.

◆ hid_get_manufacturer_string()

int HID_API_EXPORT_CALL hid_get_manufacturer_string ( hid_device device,
wchar_t *  string,
size_t  maxlen 
)

Get The Manufacturer String from a HID device.

@ingroup API
@param device A device handle returned from hid_open().
@param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t.

@returns
    This function returns 0 on success and -1 on error.

Definition at line 1196 of file hid_libusb.c.

◆ hid_get_product_string()

int HID_API_EXPORT_CALL hid_get_product_string ( hid_device device,
wchar_t *  string,
size_t  maxlen 
)

Get The Product String from a HID device.

@ingroup API
@param device A device handle returned from hid_open().
@param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t.

@returns
    This function returns 0 on success and -1 on error.

Definition at line 1201 of file hid_libusb.c.

◆ hid_get_serial_number_string()

int HID_API_EXPORT_CALL hid_get_serial_number_string ( hid_device device,
wchar_t *  string,
size_t  maxlen 
)

Get The Serial Number String from a HID device.

@ingroup API
@param device A device handle returned from hid_open().
@param string A wide string buffer to put the data into.
@param maxlen The length of the buffer in multiples of wchar_t.

@returns
    This function returns 0 on success and -1 on error.

Definition at line 1206 of file hid_libusb.c.

◆ hid_init()

int HID_API_EXPORT hid_init ( )

Initialize the HIDAPI library.

This function initializes the HIDAPI library. Calling it is not
strictly necessary, as it will be called automatically by
hid_enumerate() and any of the hid_open_*() functions if it is
needed.  This function should be called at the beginning of
execution however, if there is a chance of HIDAPI handles
being opened by different threads simultaneously.

@ingroup API

@returns
    This function returns 0 on success and -1 on error.

Definition at line 388 of file hid_libusb.c.

◆ hid_open_path()

hid_device* HID_API_EXPORT hid_open_path ( const char *  path)

Open a HID device by its path name.

The path name be determined by calling hid_enumerate(), or a
platform-specific path name can be used (eg: /dev/hidraw0 on
Linux).

@ingroup API
Parameters
pathThe path name of the device to open
@returns
    This function returns a pointer to a #hid_device object on
    success or NULL on failure.

Definition at line 790 of file hid_libusb.c.

◆ hid_read_timeout()

int HID_API_EXPORT hid_read_timeout ( hid_device dev,
unsigned char *  data,
size_t  length,
int  milliseconds 
)

Read an Input report from a HID device with timeout.

Input reports are returned
to the host through the INTERRUPT IN endpoint. The first byte will
contain the Report number if the device uses numbered reports.

@ingroup API
@param device A device handle returned from hid_open().
@param data A buffer to put the read data into.
@param length The number of bytes to read. For devices with
    multiple reports, make sure to read an extra byte for
    the report number.
@param milliseconds timeout in milliseconds or -1 for blocking wait.

@returns
    This function returns the actual number of bytes read and
    -1 on error.

Definition at line 997 of file hid_libusb.c.

◆ hid_send_feature_report()

int HID_API_EXPORT hid_send_feature_report ( hid_device device,
const unsigned char *  data,
size_t  length 
)

Send a Feature report to the device.

Feature reports are sent over the Control endpoint as a
Set_Report transfer.  The first byte of @p data[] must
contain the Report ID. For devices which only support a
single report, this must be set to 0x0. The remaining bytes
contain the report data. Since the Report ID is mandatory,
calls to hid_send_feature_report() will always contain one
more byte than the report contains. For example, if a hid
report is 16 bytes long, 17 bytes must be passed to
hid_send_feature_report(): the Report ID (or 0x0, for
devices which do not use numbered reports), followed by the
report data (16 bytes). In this example, the length passed
in would be 17.

@ingroup API
@param device A device handle returned from hid_open().
@param data The data to send, including the report number as
    the first byte.
@param length The length in bytes of the data to send, including
    the report number.

@returns
    This function returns the actual number of bytes written and
    -1 on error.

Definition at line 1107 of file hid_libusb.c.

◆ hid_set_nonblocking()

int HID_API_EXPORT hid_set_nonblocking ( hid_device device,
int  nonblock 
)

Set the device handle to be non-blocking.

In non-blocking mode calls to hid_read() will return
immediately with a value of 0 if there is no data to be
read. In blocking mode, hid_read() will wait (block) until
there is data to read before returning.

Nonblocking can be turned on and off at any time.

@ingroup API
@param device A device handle returned from hid_open().
@param nonblock enable or not the nonblocking reads
 - 1 to enable nonblocking
 - 0 to disable nonblocking.

@returns
    This function returns 0 on success and -1 on error.

Definition at line 1100 of file hid_libusb.c.

◆ hid_write()

int HID_API_EXPORT hid_write ( hid_device device,
const unsigned char *  data,
size_t  length 
)

Write an Output report to a HID device.

The first byte of @p data[] must contain the Report ID. For
devices which only support a single report, this must be set
to 0x0. The remaining bytes contain the report data. Since
the Report ID is mandatory, calls to hid_write() will always
contain one more byte than the report contains. For example,
if a hid report is 16 bytes long, 17 bytes must be passed to
hid_write(), the Report ID (or 0x0, for devices with a
single report), followed by the report data (16 bytes). In
this example, the length passed in would be 17.

hid_write() will send the data on the first OUT endpoint, if
one exists. If it does not, it will send the data through
the Control Endpoint (Endpoint 0).

@ingroup API
@param device A device handle returned from hid_open().
@param data The data to send, including the report number as
    the first byte.
@param length The length in bytes of the data to send.

@returns
    This function returns the actual number of bytes written and
    -1 on error.

Definition at line 929 of file hid_libusb.c.