Есть код на С++(но пока не важно это просто линукс любит с++).
То есть есть модуль proga.cpp. Эта прога имеет в начале самом строку
#include <usb.h>
То есть подключает фаил такой. В линуксе они все находятся в /usr/include.
так вот код такой
- Код: Выделить всё
- /*
 * Prototypes, structure definitions and macros.
 *
 * Copyright (c) 2000-2003 Johannes Erdfelt <johannes@erdfelt.com>
 *
 * This library is covered by the LGPL, read LICENSE for details.
 *
 * This file (and only this file) may alternatively be licensed under the
 * BSD license as well, read LICENSE for details.
 */
 #ifndef __USB_H__
 #define __USB_H__
 #include <unistd.h>
 #include <stdlib.h>
 #include <limits.h>
 #include <dirent.h>
 /*
 * USB spec information
 *
 * This is all stuff grabbed from various USB specs and is pretty much
 * not subject to change
 */
 /*
 * Device and/or Interface Class codes
 */
 #define USB_CLASS_PER_INTERFACE 0 /* for DeviceClass */
 #define USB_CLASS_AUDIO 1
 #define USB_CLASS_COMM 2
 #define USB_CLASS_HID 3
 #define USB_CLASS_PRINTER 7
 #define USB_CLASS_PTP 6
 #define USB_CLASS_MASS_STORAGE 8
 #define USB_CLASS_HUB 9
 #define USB_CLASS_DATA 10
 #define USB_CLASS_VENDOR_SPEC 0xff
 /*
 * Descriptor types
 */
 #define USB_DT_DEVICE 0x01
 #define USB_DT_CONFIG 0x02
 #define USB_DT_STRING 0x03
 #define USB_DT_INTERFACE 0x04
 #define USB_DT_ENDPOINT 0x05
 #define USB_DT_HID 0x21
 #define USB_DT_REPORT 0x22
 #define USB_DT_PHYSICAL 0x23
 #define USB_DT_HUB 0x29
 /*
 * Descriptor sizes per descriptor type
 */
 #define USB_DT_DEVICE_SIZE 18
 #define USB_DT_CONFIG_SIZE 9
 #define USB_DT_INTERFACE_SIZE 9
 #define USB_DT_ENDPOINT_SIZE 7
 #define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
 #define USB_DT_HUB_NONVAR_SIZE 7
 /* All standard descriptors have these 2 fields in common */
 struct usb_descriptor_header {
 u_int8_t bLength;
 u_int8_t bDescriptorType;
 };
 /* String descriptor */
 struct usb_string_descriptor {
 u_int8_t bLength;
 u_int8_t bDescriptorType;
 u_int16_t wData[1];
 };
 /* HID descriptor */
 struct usb_hid_descriptor {
 u_int8_t bLength;
 u_int8_t bDescriptorType;
 u_int16_t bcdHID;
 u_int8_t bCountryCode;
 u_int8_t bNumDescriptors;
 /* u_int8_t bReportDescriptorType; */
 /* u_int16_t wDescriptorLength; */
 /* ... */
 };
 /* Endpoint descriptor */
 #define USB_MAXENDPOINTS 32
 struct usb_endpoint_descriptor {
 u_int8_t bLength;
 u_int8_t bDescriptorType;
 u_int8_t bEndpointAddress;
 u_int8_t bmAttributes;
 u_int16_t wMaxPacketSize;
 u_int8_t bInterval;
 u_int8_t bRefresh;
 u_int8_t bSynchAddress;
 unsigned char *extra; /* Extra descriptors */
 int extralen;
 };
 #define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */
 #define USB_ENDPOINT_DIR_MASK 0x80
 #define USB_ENDPOINT_TYPE_MASK 0x03 /* in bmAttributes */
 #define USB_ENDPOINT_TYPE_CONTROL 0
 #define USB_ENDPOINT_TYPE_ISOCHRONOUS 1
 #define USB_ENDPOINT_TYPE_BULK 2
 #define USB_ENDPOINT_TYPE_INTERRUPT 3
 /* Interface descriptor */
 #define USB_MAXINTERFACES 32
 struct usb_interface_descriptor {
 u_int8_t bLength;
 u_int8_t bDescriptorType;
 u_int8_t bInterfaceNumber;
 u_int8_t bAlternateSetting;
 u_int8_t bNumEndpoints;
 u_int8_t bInterfaceClass;
 u_int8_t bInterfaceSubClass;
 u_int8_t bInterfaceProtocol;
 u_int8_t iInterface;
 struct usb_endpoint_descriptor *endpoint;
 unsigned char *extra; /* Extra descriptors */
 int extralen;
 };
 #define USB_MAXALTSETTING 128 /* Hard limit */
 struct usb_interface {
 struct usb_interface_descriptor *altsetting;
 int num_altsetting;
 };
 /* Configuration descriptor information.. */
 #define USB_MAXCONFIG 8
 struct usb_config_descriptor {
 u_int8_t bLength;
 u_int8_t bDescriptorType;
 u_int16_t wTotalLength;
 u_int8_t bNumInterfaces;
 u_int8_t bConfigurationValue;
 u_int8_t iConfiguration;
 u_int8_t bmAttributes;
 u_int8_t MaxPower;
 struct usb_interface *interface;
 unsigned char *extra; /* Extra descriptors */
 int extralen;
 };
 /* Device descriptor */
 struct usb_device_descriptor {
 u_int8_t bLength;
 u_int8_t bDescriptorType;
 u_int16_t bcdUSB;
 u_int8_t bDeviceClass;
 u_int8_t bDeviceSubClass;
 u_int8_t bDeviceProtocol;
 u_int8_t bMaxPacketSize0;
 u_int16_t idVendor;
 u_int16_t idProduct;
 u_int16_t bcdDevice;
 u_int8_t iManufacturer;
 u_int8_t iProduct;
 u_int8_t iSerialNumber;
 u_int8_t bNumConfigurations;
 };
 struct usb_ctrl_setup {
 u_int8_t bRequestType;
 u_int8_t bRequest;
 u_int16_t wValue;
 u_int16_t wIndex;
 u_int16_t wLength;
 };
 /*
 * Standard requests
 */
 #define USB_REQ_GET_STATUS 0x00
 #define USB_REQ_CLEAR_FEATURE 0x01
 /* 0x02 is reserved */
 #define USB_REQ_SET_FEATURE 0x03
 /* 0x04 is reserved */
 #define USB_REQ_SET_ADDRESS 0x05
 #define USB_REQ_GET_DESCRIPTOR 0x06
 #define USB_REQ_SET_DESCRIPTOR 0x07
 #define USB_REQ_GET_CONFIGURATION 0x08
 #define USB_REQ_SET_CONFIGURATION 0x09
 #define USB_REQ_GET_INTERFACE 0x0A
 #define USB_REQ_SET_INTERFACE 0x0B
 #define USB_REQ_SYNCH_FRAME 0x0C
 #define USB_TYPE_STANDARD (0x00 << 5)
 #define USB_TYPE_CLASS (0x01 << 5)
 #define USB_TYPE_VENDOR (0x02 << 5)
 #define USB_TYPE_RESERVED (0x03 << 5)
 #define USB_RECIP_DEVICE 0x00
 #define USB_RECIP_INTERFACE 0x01
 #define USB_RECIP_ENDPOINT 0x02
 #define USB_RECIP_OTHER 0x03
 /*
 * Various libusb API related stuff
 */
 #define USB_ENDPOINT_IN 0x80
 #define USB_ENDPOINT_OUT 0x00
 /* Error codes */
 #define USB_ERROR_BEGIN 500000
 /*
 * This is supposed to look weird. This file is generated from autoconf
 * and I didn't want to make this too complicated.
 */
 #if 0
 #define USB_LE16_TO_CPU(x) do { x = ((x & 0xff) << 8) | ((x & 0xff00) >> 8); } while(0)
 #else
 #define USB_LE16_TO_CPU(x)
 #endif
 /* Data types */
 struct usb_device;
 struct usb_bus;
 /*
 * To maintain compatibility with applications already built with libusb,
 * we must only add entries to the end of this structure. NEVER delete or
 * move members and only change types if you really know what you're doing.
 */
 struct usb_device {
 struct usb_device *next, *prev;
 char filename[PATH_MAX + 1];
 struct usb_bus *bus;
 struct usb_device_descriptor descriptor;
 struct usb_config_descriptor *config;
 void *dev; /* Darwin support */
 u_int8_t devnum;
 unsigned char num_children;
 struct usb_device **children;
 };
 struct usb_bus {
 struct usb_bus *next, *prev;
 char dirname[PATH_MAX + 1];
 struct usb_device *devices;
 u_int32_t location;
 struct usb_device *root_dev;
 };
 struct usb_dev_handle;
 typedef struct usb_dev_handle usb_dev_handle;
 /* Variables */
 extern struct usb_bus *usb_busses;
 #ifdef __cplusplus
 extern "C" {
 #endif
 /* Function prototypes */
 /* usb.c */
 usb_dev_handle *usb_open(struct usb_device *dev);
 int usb_close(usb_dev_handle *dev);
 int usb_get_string(usb_dev_handle *dev, int index, int langid, char *buf,
 size_t buflen);
 int usb_get_string_simple(usb_dev_handle *dev, int index, char *buf,
 size_t buflen);
 /* descriptors.c */
 int usb_get_descriptor_by_endpoint(usb_dev_handle *udev, int ep,
 unsigned char type, unsigned char index, void *buf, int size);
 int usb_get_descriptor(usb_dev_handle *udev, unsigned char type,
 unsigned char index, void *buf, int size);
 /* <arch>.c */
 int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,
 int timeout);
 int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,
 int timeout);
 int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size,
 int timeout);
 int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size,
 int timeout);
 int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,
 int value, int index, char *bytes, int size, int timeout);
 int usb_set_configuration(usb_dev_handle *dev, int configuration);
 int usb_claim_interface(usb_dev_handle *dev, int interface);
 int usb_release_interface(usb_dev_handle *dev, int interface);
 int usb_set_altinterface(usb_dev_handle *dev, int alternate);
 int usb_resetep(usb_dev_handle *dev, unsigned int ep);
 int usb_clear_halt(usb_dev_handle *dev, unsigned int ep);
 int usb_reset(usb_dev_handle *dev);
 #if 1
 #define LIBUSB_HAS_GET_DRIVER_NP 1
 int usb_get_driver_np(usb_dev_handle *dev, int interface, char *name,
 unsigned int namelen);
 #define LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP 1
 int usb_detach_kernel_driver_np(usb_dev_handle *dev, int interface);
 #endif
 char *usb_strerror(void);
 void usb_init(void);
 void usb_set_debug(int level);
 int usb_find_busses(void);
 int usb_find_devices(void);
 struct usb_device *usb_device(usb_dev_handle *dev);
 struct usb_bus *usb_get_busses(void);
 #ifdef __cplusplus
 }
 #endif
 #endif /* __USB_H__ */
Добавлено спустя 1 минуту 44 секунды:
Я никак не пойму, где тут осуществляется связь с SO библиотекой. То есть в библиотеке же должны быть все ф-ии, а тут их названия.
Добавлено спустя 2 минуты 46 секунд:
сама so библиотека в /usr/lib ,но в usb.h ничего не прописано о её песто расположени. Так как proga.cpp догадается какой код у ф-ии?

