! Copyright (C) 2010 Erik Charlebois.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien alien.c-types alien.libraries
+USING: accessors alien alien.c-types alien.data alien.libraries
alien.syntax classes.struct combinators endian io.binary
kernel locals math sequences specialized-arrays
system unix.time unix.types ;
{ [ os windows? ] [ "libusb-1.0.dll" ] }
{ [ os macosx? ] [ "libusb-1.0.dylib" ] }
{ [ os unix? ] [ "libusb-1.0.so" ] }
- } cond "cdecl" add-library >>
+ } cond cdecl add-library >>
LIBRARY: libusb
: libusb_cpu_to_le16 ( x -- y )
ALIAS: libusb_le16_to_cpu libusb_cpu_to_le16
-CONSTANT: LIBUSB_CLASS_PER_INTERFACE 0
-CONSTANT: LIBUSB_CLASS_AUDIO 1
-CONSTANT: LIBUSB_CLASS_COMM 2
-CONSTANT: LIBUSB_CLASS_HID 3
-CONSTANT: LIBUSB_CLASS_PRINTER 7
-CONSTANT: LIBUSB_CLASS_PTP 6
-CONSTANT: LIBUSB_CLASS_MASS_STORAGE 8
-CONSTANT: LIBUSB_CLASS_HUB 9
-CONSTANT: LIBUSB_CLASS_DATA 10
-CONSTANT: LIBUSB_CLASS_VENDOR_SPEC HEX: ff
-TYPEDEF: int libusb_class_code
-
-CONSTANT: LIBUSB_DT_DEVICE HEX: 01
-CONSTANT: LIBUSB_DT_CONFIG HEX: 02
-CONSTANT: LIBUSB_DT_STRING HEX: 03
-CONSTANT: LIBUSB_DT_INTERFACE HEX: 04
-CONSTANT: LIBUSB_DT_ENDPOINT HEX: 05
-CONSTANT: LIBUSB_DT_HID HEX: 21
-CONSTANT: LIBUSB_DT_REPORT HEX: 22
-CONSTANT: LIBUSB_DT_PHYSICAL HEX: 23
-CONSTANT: LIBUSB_DT_HUB HEX: 29
-TYPEDEF: int libusb_descriptor_type
+ENUM: libusb_class_code
+ { LIBUSB_CLASS_PER_INTERFACE 0 }
+ { LIBUSB_CLASS_AUDIO 1 }
+ { LIBUSB_CLASS_COMM 2 }
+ { LIBUSB_CLASS_HID 3 }
+ { LIBUSB_CLASS_PRINTER 7 }
+ { LIBUSB_CLASS_PTP 6 }
+ { LIBUSB_CLASS_MASS_STORAGE 8 }
+ { LIBUSB_CLASS_HUB 9 }
+ { LIBUSB_CLASS_DATA 10 }
+ { LIBUSB_CLASS_VENDOR_SPEC 0xff } ;
+
+ENUM: libusb_descriptor_type
+ { LIBUSB_DT_DEVICE 0x01 }
+ { LIBUSB_DT_CONFIG 0x02 }
+ { LIBUSB_DT_STRING 0x03 }
+ { LIBUSB_DT_INTERFACE 0x04 }
+ { LIBUSB_DT_ENDPOINT 0x05 }
+ { LIBUSB_DT_HID 0x21 }
+ { LIBUSB_DT_REPORT 0x22 }
+ { LIBUSB_DT_PHYSICAL 0x23 }
+ { LIBUSB_DT_HUB 0x29 } ;
CONSTANT: LIBUSB_DT_DEVICE_SIZE 18
CONSTANT: LIBUSB_DT_CONFIG_SIZE 9
CONSTANT: LIBUSB_DT_ENDPOINT_AUDIO_SIZE 9
CONSTANT: LIBUSB_DT_HUB_NONVAR_SIZE 7
-CONSTANT: LIBUSB_ENDPOINT_ADDRESS_MASK HEX: 0f
-CONSTANT: LIBUSB_ENDPOINT_DIR_MASK HEX: 80
-
-CONSTANT: LIBUSB_ENDPOINT_IN HEX: 80
-CONSTANT: LIBUSB_ENDPOINT_OUT HEX: 00
-TYPEDEF: int libusb_endpoint_direction
-
-CONSTANT: LIBUSB_TRANSFER_TYPE_MASK HEX: 03
-
-CONSTANT: LIBUSB_TRANSFER_TYPE_CONTROL 0
-CONSTANT: LIBUSB_TRANSFER_TYPE_ISOCHRONOUS 1
-CONSTANT: LIBUSB_TRANSFER_TYPE_BULK 2
-CONSTANT: LIBUSB_TRANSFER_TYPE_INTERRUPT 3
-TYPEDEF: int libusb_transfer_type
-
-CONSTANT: LIBUSB_REQUEST_GET_STATUS HEX: 00
-CONSTANT: LIBUSB_REQUEST_CLEAR_FEATURE HEX: 01
-CONSTANT: LIBUSB_REQUEST_SET_FEATURE HEX: 03
-CONSTANT: LIBUSB_REQUEST_SET_ADDRESS HEX: 05
-CONSTANT: LIBUSB_REQUEST_GET_DESCRIPTOR HEX: 06
-CONSTANT: LIBUSB_REQUEST_SET_DESCRIPTOR HEX: 07
-CONSTANT: LIBUSB_REQUEST_GET_CONFIGURATION HEX: 08
-CONSTANT: LIBUSB_REQUEST_SET_CONFIGURATION HEX: 09
-CONSTANT: LIBUSB_REQUEST_GET_INTERFACE HEX: 0A
-CONSTANT: LIBUSB_REQUEST_SET_INTERFACE HEX: 0B
-CONSTANT: LIBUSB_REQUEST_SYNCH_FRAME HEX: 0C
-TYPEDEF: int libusb_standard_request
-
-CONSTANT: LIBUSB_REQUEST_TYPE_STANDARD HEX: 00
-CONSTANT: LIBUSB_REQUEST_TYPE_CLASS HEX: 20
-CONSTANT: LIBUSB_REQUEST_TYPE_VENDOR HEX: 40
-CONSTANT: LIBUSB_REQUEST_TYPE_RESERVED HEX: 60
-
-CONSTANT: LIBUSB_RECIPIENT_DEVICE HEX: 00
-CONSTANT: LIBUSB_RECIPIENT_INTERFACE HEX: 01
-CONSTANT: LIBUSB_RECIPIENT_ENDPOINT HEX: 02
-CONSTANT: LIBUSB_RECIPIENT_OTHER HEX: 03
-TYPEDEF: int libusb_request_recipient
-
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_MASK HEX: 0C
-
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_NONE 0
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_ASYNC 1
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_ADAPTIVE 2
-CONSTANT: LIBUSB_ISO_SYNC_TYPE_SYNC 3
-TYPEDEF: int libusb_iso_sync_type
-
-CONSTANT: LIBUSB_ISO_USAGE_TYPE_MASK HEX: 30
-
-CONSTANT: LIBUSB_ISO_USAGE_TYPE_DATA 0
-CONSTANT: LIBUSB_ISO_USAGE_TYPE_FEEDBACK 1
-CONSTANT: LIBUSB_ISO_USAGE_TYPE_IMPLICIT 2
-TYPEDEF: int libusb_iso_usage_type
+CONSTANT: LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f
+CONSTANT: LIBUSB_ENDPOINT_DIR_MASK 0x80
+
+ENUM: libusb_endpoint_direction
+ { LIBUSB_ENDPOINT_IN 0x80 }
+ { LIBUSB_ENDPOINT_OUT 0x00 } ;
+
+CONSTANT: LIBUSB_TRANSFER_TYPE_MASK 0x03
+
+ENUM: libusb_transfer_type
+ { LIBUSB_TRANSFER_TYPE_CONTROL 0 }
+ { LIBUSB_TRANSFER_TYPE_ISOCHRONOUS 1 }
+ { LIBUSB_TRANSFER_TYPE_BULK 2 }
+ { LIBUSB_TRANSFER_TYPE_INTERRUPT 3 } ;
+
+ENUM: libusb_standard_request
+ { LIBUSB_REQUEST_GET_STATUS 0x00 }
+ { LIBUSB_REQUEST_CLEAR_FEATURE 0x01 }
+ { LIBUSB_REQUEST_SET_FEATURE 0x03 }
+ { LIBUSB_REQUEST_SET_ADDRESS 0x05 }
+ { LIBUSB_REQUEST_GET_DESCRIPTOR 0x06 }
+ { LIBUSB_REQUEST_SET_DESCRIPTOR 0x07 }
+ { LIBUSB_REQUEST_GET_CONFIGURATION 0x08 }
+ { LIBUSB_REQUEST_SET_CONFIGURATION 0x09 }
+ { LIBUSB_REQUEST_GET_INTERFACE 0x0A }
+ { LIBUSB_REQUEST_SET_INTERFACE 0x0B }
+ { LIBUSB_REQUEST_SYNCH_FRAME 0x0C } ;
+
+ENUM: libusb_request_type
+ { LIBUSB_REQUEST_TYPE_STANDARD 0x00 }
+ { LIBUSB_REQUEST_TYPE_CLASS 0x20 }
+ { LIBUSB_REQUEST_TYPE_VENDOR 0x40 }
+ { LIBUSB_REQUEST_TYPE_RESERVED 0x60 } ;
+
+ENUM: libusb_request_recipient
+ { LIBUSB_RECIPIENT_DEVICE 0x00 }
+ { LIBUSB_RECIPIENT_INTERFACE 0x01 }
+ { LIBUSB_RECIPIENT_ENDPOINT 0x02 }
+ { LIBUSB_RECIPIENT_OTHER 0x03 } ;
+
+CONSTANT: LIBUSB_ISO_SYNC_TYPE_MASK 0x0C
+
+ENUM: libusb_iso_sync_type
+ { LIBUSB_ISO_SYNC_TYPE_NONE 0 }
+ { LIBUSB_ISO_SYNC_TYPE_ASYNC 1 }
+ { LIBUSB_ISO_SYNC_TYPE_ADAPTIVE 2 }
+ { LIBUSB_ISO_SYNC_TYPE_SYNC 3 } ;
+
+CONSTANT: LIBUSB_ISO_USAGE_TYPE_MASK 0x30
+
+ENUM: libusb_iso_usage_type
+ { LIBUSB_ISO_USAGE_TYPE_DATA 0 }
+ { LIBUSB_ISO_USAGE_TYPE_FEEDBACK 1 }
+ { LIBUSB_ISO_USAGE_TYPE_IMPLICIT 2 } ;
STRUCT: libusb_device_descriptor
{ bLength uint8_t }
C-TYPE: libusb_device
C-TYPE: libusb_device_handle
-CONSTANT: LIBUSB_SUCCESS 0
-CONSTANT: LIBUSB_ERROR_IO -1
-CONSTANT: LIBUSB_ERROR_INVALID_PARAM -2
-CONSTANT: LIBUSB_ERROR_ACCESS -3
-CONSTANT: LIBUSB_ERROR_NO_DEVICE -4
-CONSTANT: LIBUSB_ERROR_NOT_FOUND -5
-CONSTANT: LIBUSB_ERROR_BUSY -6
-CONSTANT: LIBUSB_ERROR_TIMEOUT -7
-CONSTANT: LIBUSB_ERROR_OVERFLOW -8
-CONSTANT: LIBUSB_ERROR_PIPE -9
-CONSTANT: LIBUSB_ERROR_INTERRUPTED -10
-CONSTANT: LIBUSB_ERROR_NO_MEM -11
-CONSTANT: LIBUSB_ERROR_NOT_SUPPORTED -12
-CONSTANT: LIBUSB_ERROR_OTHER -99
-TYPEDEF: int libusb_error
-
-C-ENUM:
+ENUM: libusb_error
+ { LIBUSB_SUCCESS 0 }
+ { LIBUSB_ERROR_IO -1 }
+ { LIBUSB_ERROR_INVALID_PARAM -2 }
+ { LIBUSB_ERROR_ACCESS -3 }
+ { LIBUSB_ERROR_NO_DEVICE -4 }
+ { LIBUSB_ERROR_NOT_FOUND -5 }
+ { LIBUSB_ERROR_BUSY -6 }
+ { LIBUSB_ERROR_TIMEOUT -7 }
+ { LIBUSB_ERROR_OVERFLOW -8 }
+ { LIBUSB_ERROR_PIPE -9 }
+ { LIBUSB_ERROR_INTERRUPTED -10 }
+ { LIBUSB_ERROR_NO_MEM -11 }
+ { LIBUSB_ERROR_NOT_SUPPORTED -12 }
+ { LIBUSB_ERROR_OTHER -99 } ;
+
+ENUM: libusb_transfer_status
LIBUSB_TRANSFER_COMPLETED
LIBUSB_TRANSFER_ERROR
LIBUSB_TRANSFER_TIMED_OUT
LIBUSB_TRANSFER_STALL
LIBUSB_TRANSFER_NO_DEVICE
LIBUSB_TRANSFER_OVERFLOW ;
-TYPEDEF: int libusb_transfer_status
-CONSTANT: LIBUSB_TRANSFER_SHORT_NOT_OK 1
-CONSTANT: LIBUSB_TRANSFER_FREE_BUFFER 2
-CONSTANT: LIBUSB_TRANSFER_FREE_TRANSFER 4
-TYPEDEF: int libusb_transfer_flags
+ENUM: libusb_transfer_flags
+ { LIBUSB_TRANSFER_SHORT_NOT_OK 1 }
+ { LIBUSB_TRANSFER_FREE_BUFFER 2 }
+ { LIBUSB_TRANSFER_FREE_TRANSFER 4 } ;
STRUCT: libusb_iso_packet_descriptor
{ length uint }
: libusb_set_iso_packet_lengths ( transfer length -- )
[ [ iso_packet_desc>> >c-ptr ]
[ num_iso_packets>> ] bi
- <direct-libusb_iso_packet_descriptor-array>
+ libusb_iso_packet_descriptor <c-direct-array>
] dip [ >>length drop ] curry each ; inline
:: libusb_get_iso_packet_buffer ( transfer packet -- data )
transfer
[ iso_packet_desc>> >c-ptr ]
[ num_iso_packets>> ] bi
- <direct-libusb_iso_packet_descriptor-array> 0
+ libusb_iso_packet_descriptor <c-direct-array> 0
[ length>> + ] reduce
transfer buffer>> <displaced-alien>
] if ;
0 transfer
[ iso_packet_desc>> >c-ptr ]
[ num_iso_packets>> ] bi
- <direct-libusb_iso_packet_descriptor-array> nth
+ libusb_iso_packet_descriptor <c-direct-array> nth
length>> packet *
transfer buffer>> <displaced-alien>
] if ;