mirror of
				http://172.16.0.230/r/SIF/TowerOptoSifAndSpectral.git
				synced 2025-10-25 13:59:44 +08:00 
			
		
		
		
	
		
			
	
	
		
			227 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			227 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /***************************************************//**
 | ||
|  |  * @file    NativeUSB.h | ||
|  |  * @date    October 31, 2007 | ||
|  |  * @author  Ocean Optics, Inc. | ||
|  |  * | ||
|  |  * This provides a relatively simple interface for | ||
|  |  * opening, closing, writing to, and reading from Ocean | ||
|  |  * Optics USB Devices.  It has been extended to provide | ||
|  |  * more complete USB functionality at least for Linux, | ||
|  |  * and equivalent functionality should be brought back | ||
|  |  * in for Windows and MacOSX. | ||
|  |  * | ||
|  |  * LICENSE: | ||
|  |  * | ||
|  |  * SeaBreeze Copyright (C) 2014, Ocean Optics Inc | ||
|  |  * | ||
|  |  * Permission is hereby granted, free of charge, to any person obtaining | ||
|  |  * a copy of this software and associated documentation files (the | ||
|  |  * "Software"), to deal in the Software without restriction, including | ||
|  |  * without limitation the rights to use, copy, modify, merge, publish, | ||
|  |  * distribute, sublicense, and/or sell copies of the Software, and to | ||
|  |  * permit persons to whom the Software is furnished to do so, subject | ||
|  |  * to the following conditions: | ||
|  |  * | ||
|  |  * The above copyright notice and this permission notice shall be included | ||
|  |  * in all copies or substantial portions of the Software. | ||
|  |  * | ||
|  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
|  |  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
|  |  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
|  |  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
|  |  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
|  |  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
|  |  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
|  |  ******************************************************/ | ||
|  | 
 | ||
|  | #ifndef NATIVEUSB_H
 | ||
|  | #define NATIVEUSB_H
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif /* cplusplus */
 | ||
|  | 
 | ||
|  | #define OPEN_OK          		0
 | ||
|  | #define NO_DEVICE_FOUND 		-1
 | ||
|  | #define NO_DEVICE_MATCH 		-2
 | ||
|  | #define CLAIM_INTERFACE_FAILED 	-3
 | ||
|  | #define CLOSE_OK         		0
 | ||
|  | #define CLOSE_ERROR     		-1
 | ||
|  | #define WRITE_FAILED    		-1
 | ||
|  | #define READ_FAILED     		-1
 | ||
|  | #define ABORT_OK         		0
 | ||
|  | #define ABORT_FAILED    		-1
 | ||
|  | #define RESET_OK         		0
 | ||
|  | #define RESET_FAILED    		-1
 | ||
|  | 
 | ||
|  | struct USBConfigurationDescriptor { | ||
|  |     unsigned char bLength; | ||
|  |     unsigned char bDescriptorType; | ||
|  |     unsigned short wTotalLength; | ||
|  |     unsigned char bNumInterfaces; | ||
|  |     unsigned char bConfigurationValue; | ||
|  |     unsigned char iConfiguration; | ||
|  |     unsigned char bmAttributes; | ||
|  |     unsigned char MaxPower; | ||
|  | }; | ||
|  | 
 | ||
|  | struct USBDeviceDescriptor { | ||
|  |     unsigned char bLength; | ||
|  |     unsigned char bDescriptorType; | ||
|  |     unsigned short bcdUSB; | ||
|  |     unsigned char bDeviceClass; | ||
|  |     unsigned char bDeviceSubClass; | ||
|  |     unsigned char bDeviceProtocol; | ||
|  |     unsigned char bMaxPacketSize0; | ||
|  |     unsigned short idVendor; | ||
|  |     unsigned short idProduct; | ||
|  |     unsigned short bcdDevice; | ||
|  |     unsigned char iManufacturer; | ||
|  |     unsigned char iProduct; | ||
|  |     unsigned char iSerialNumber; | ||
|  |     unsigned char bNumConfigurations; | ||
|  | }; | ||
|  | 
 | ||
|  | struct USBInterfaceDescriptor { | ||
|  |     unsigned char bLength; | ||
|  |     unsigned char bDescriptorType; | ||
|  |     unsigned char bInterfaceNumber; | ||
|  |     unsigned char bAlternateSetting; | ||
|  |     unsigned char bNumEndpoints; | ||
|  |     unsigned char bInterfaceClass; | ||
|  |     unsigned char bInterfaceSubClass; | ||
|  |     unsigned char bInterfaceProtocol; | ||
|  |     unsigned char iInterface; | ||
|  | }; | ||
|  | 
 | ||
|  | struct USBEndpointDescriptor { | ||
|  |     unsigned char bLength; | ||
|  |     unsigned char bDescriptorType; | ||
|  |     unsigned char bEndpointAddress; | ||
|  |     unsigned char bmAttributes; | ||
|  |     unsigned short wMaxPacketSize; | ||
|  |     unsigned char bInterval; | ||
|  | }; | ||
|  | 
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | // This function attempts to discover all devices with the given product
 | ||
|  | // and vendor IDs.  Descriptors for each found device will be placed in the
 | ||
|  | // provided long buffer.
 | ||
|  | //
 | ||
|  | // PARAMETERS:
 | ||
|  | // vendorID:  The vendor ID to match with devices on the bus
 | ||
|  | // productID: The product ID to match with devices on the bus
 | ||
|  | // output:    A buffer of longs that will be populated with unique IDs for each
 | ||
|  | //            device found that matches the VID and PID
 | ||
|  | // max_devices: A limit on how many IDs can be put into the output buffer
 | ||
|  | //
 | ||
|  | // RETURN VALUE:
 | ||
|  | // The number of devices successfully found, or -1 if there was an error.
 | ||
|  | int | ||
|  | USBProbeDevices(int vendorID, int productID, unsigned long *output, | ||
|  |         int max_devices); | ||
|  | 
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | // This function attempts to open a device with the given product and vendor
 | ||
|  | // ID's at the specified index.
 | ||
|  | //
 | ||
|  | // PARAMETERS:
 | ||
|  | // deviceID:    The ID of a device that has been provided by probeDevices().
 | ||
|  | // errorCode: A pointer to an integer that will be set to an error code of
 | ||
|  | //            either NO_DEVICE_FOUND or NO_DEVICE_MATCH if an error occured
 | ||
|  | //            while trying to open the device or OPEN_OK if the device was
 | ||
|  | //            found and opened.
 | ||
|  | //
 | ||
|  | // RETURN VALUE:
 | ||
|  | // Returns a void pointer which equals a handle to the device if the device was
 | ||
|  | // found and opened successfully, or NULL if the device was not opened
 | ||
|  | // successfully.  The value of the 'errorCode' parameter should be checked
 | ||
|  | // against the following before using the handle:
 | ||
|  | //  - NO_DEVICE_FOUND signifying that no device was found with the specified ID
 | ||
|  | //        or that the device with the specified ID could not be opened
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | void * | ||
|  | USBOpen(unsigned long deviceID, int *errorCode); | ||
|  | 
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | // This function attempts to close the device attached to the given handle.
 | ||
|  | //
 | ||
|  | // PARAMETERS:
 | ||
|  | // handle: The device handle obtained via the open() function.
 | ||
|  | //
 | ||
|  | // RETURN VALUE:
 | ||
|  | // Returns an integer which will be equal to either:
 | ||
|  | //  - CLOSE_OK if the device was closed successfully
 | ||
|  | //  - CLOSE_ERROR if some error occured
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | int | ||
|  | USBClose(void *handle); | ||
|  | 
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | // This function writes the given data to the device attached to the given
 | ||
|  | // handle.
 | ||
|  | //
 | ||
|  | // PARAMETERS:
 | ||
|  | // handle: The device handle obtained via the open() function.
 | ||
|  | // endpoint: The endpoint on the device to write the data to.
 | ||
|  | // data: A pointer to the dynamically allocated byte array of data to be written
 | ||
|  | // size: The number of bytes to be written
 | ||
|  | //
 | ||
|  | // RETURN VALUE:
 | ||
|  | // Returns an integer which will be equal to either:
 | ||
|  | //  - The number of bytes written to the endpoint if the write was successful
 | ||
|  | //  - WRITE_FAILED if the data was not written to the device
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | int | ||
|  | USBWrite(void *handle, unsigned char endpoint, char * data, int numberOfBytes); | ||
|  | 
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | // This function reads data from the device attached to the given handle into
 | ||
|  | // the specified byte array.
 | ||
|  | //
 | ||
|  | // PARAMETERS:
 | ||
|  | // handle: The device handle obtained via the open() function.
 | ||
|  | // endpoint: The endpoint on the device to read the data from.
 | ||
|  | // data: A pointer to the dynamically allocated byte array to store the data.
 | ||
|  | // size: The number of bytes to be read.
 | ||
|  | //
 | ||
|  | // RETURN VALUE:
 | ||
|  | // Returns an integer which will be equal to either:
 | ||
|  | //  - The number of bytes read from the endpoint if the read was successful
 | ||
|  | //  - READ_FAILED if the data was not successfully read from the device
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | int | ||
|  | USBRead(void *handle, unsigned char endpoint, char * data, int numberOfBytes); | ||
|  | 
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | // This function attempts to clear any stall on the given endpoint.
 | ||
|  | //
 | ||
|  | // PARAMETERS:
 | ||
|  | // handle: The device handle obtained via the open() function.
 | ||
|  | // endpoint: The endpoint on the device to clear a stall condition on.
 | ||
|  | //
 | ||
|  | // RETURN VALUE:
 | ||
|  | // No value is returned (void).
 | ||
|  | //------------------------------------------------------------------------------
 | ||
|  | void | ||
|  | USBClearStall(void *handle, unsigned char endpoint); | ||
|  | 
 | ||
|  | int | ||
|  | USBGetDeviceDescriptor(void *handle, struct USBDeviceDescriptor *desc); | ||
|  | 
 | ||
|  | int | ||
|  | USBGetInterfaceDescriptor(void *handle, struct USBInterfaceDescriptor *desc); | ||
|  | 
 | ||
|  | int | ||
|  | USBGetEndpointDescriptor(void *handle, int endpoint_index, struct USBEndpointDescriptor *desc); | ||
|  | 
 | ||
|  | int | ||
|  | USBGetStringDescriptor(void *handle, unsigned int string_index, char *buffer, int maxLength); | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif /* _cplusplus */
 | ||
|  | 
 | ||
|  | #endif /* NATIVEUSB_H */
 |