]> gitweb.factorcode.org Git - factor.git/blob - libs/usb/usb.factor
more sql changes
[factor.git] / libs / usb / usb.factor
1 ! Copyright (C) 2006 Chris Double.
2 ! See http://factorcode.org/license.txt for BSD license.
3 !
4 IN: usb
5 USING: kernel alien io math arrays sequences ;
6
7 LIBRARY: usb
8
9 TYPEDEF: void* usb_dev_handle*
10
11 FUNCTION: usb_dev_handle* usb_open ( usb_device* dev ) ;
12 FUNCTION: int usb_close ( usb_dev_handle* dev ) ;
13 FUNCTION: int usb_get_string ( usb_dev_handle* dev, int index, int langid, char *buf, int buflen ) ;
14 FUNCTION: int usb_get_string_simple ( usb_dev_handle* dev, int index, char* buf, int buflen ) ;
15
16 FUNCTION: int usb_get_descriptor_by_endpoint ( usb_dev_handle* udev, int ep, uchar type, uchar index, void* buf, int size ) ;
17 FUNCTION: int usb_get_descriptor ( usb_dev_handle* udev, uchar type, uchar index, void* buf, int size ) ;
18
19 FUNCTION: int usb_bulk_write ( usb_dev_handle* dev, int ep, void* bytes, int size, int timeout ) ;
20 FUNCTION: int usb_bulk_read ( usb_dev_handle* dev, int ep, void* bytes, int size, int timeout ) ;
21 FUNCTION: int usb_interrupt_write ( usb_dev_handle* dev, int ep, char* bytes, int size, int timeout ) ;
22 FUNCTION: int usb_interrupt_read ( usb_dev_handle* dev, int ep, char* bytes, int size, int timeout ) ;
23 FUNCTION: int usb_control_msg ( usb_dev_handle* dev, int requesttype, int request, int value, int index, char* bytes, int size, int timeout ) ;
24 FUNCTION: int usb_set_configuration ( usb_dev_handle* dev, int configuration ) ;
25 FUNCTION: int usb_claim_interface ( usb_dev_handle* dev, int interface ) ;
26 FUNCTION: int usb_release_interface ( usb_dev_handle* dev, int interface ) ;
27 FUNCTION: int usb_set_altinterface ( usb_dev_handle* dev, int alternate ) ;
28 FUNCTION: int usb_resetep ( usb_dev_handle* dev, uint ep ) ;
29 FUNCTION: int usb_clear_halt ( usb_dev_handle* dev, uint ep ) ;
30 FUNCTION: int usb_reset ( usb_dev_handle* dev ) ;
31 FUNCTION: int usb_get_driver_np ( usb_dev_handle* dev, int interface, char* name, uint namelen ) ;
32 FUNCTION: char* usb_strerror ( ) ;
33
34 FUNCTION: void usb_init ( ) ;
35 FUNCTION: void usb_set_debug ( int level ) ;
36 FUNCTION: int usb_find_busses (  ) ;
37 FUNCTION: int usb_find_devices ( ) ;
38 FUNCTION: usb_device* usb_device ( usb_dev_handle* dev ) ;
39 FUNCTION: usb_bus* usb_get_busses ( ) ;
40
41 : bus-each ( usb_bus quot -- ) 
42   [ call ] 2keep >r usb_bus-next r> over [ bus-each ] [ 2drop ] if ;
43
44 : device-each ( usb_device quot -- )
45   [ call ] 2keep >r usb_device-next r> over [ device-each ] [ 2drop ] if ;
46
47 : vendor-id-matches? ( id usb_device -- bool )
48   usb_device-descriptor usb_device_descriptor-idVendor = ;
49
50 : product-id-matches? ( id usb_device  -- bool )
51   usb_device-descriptor usb_device_descriptor-idProduct = ;
52
53 : is-device? ( vendor-id product-id usb_device -- bool )
54   tuck product-id-matches? >r vendor-id-matches? r> and ;
55
56 : find-devices ( vendor-id product-id -- seq )
57   2array
58   V{ } clone
59   usb_get_busses [
60     usb_bus-devices [
61       pick first2 pick is-device? [
62         over push
63       ] [
64         drop
65       ] if
66     ] device-each
67   ] bus-each nip ;
68
69 : init ( -- )
70   #! Initialize libusb and find devices and busses
71   usb_init usb_find_busses drop usb_find_devices drop ;
72         
73 : display-devices ( -- )
74   #! Example function to list all usb devices on system
75   usb_get_busses [
76     dup usb_bus-dirname write " - " write 
77     usb_bus-devices [
78       terpri "  " write
79       dup usb_device-filename write 
80       " - " write 
81       dup usb_device-descriptor usb_device_descriptor-bLength number>string write 
82       " - " write 
83       dup usb_device-descriptor usb_device_descriptor-idVendor >hex write 
84       " - " write 
85       usb_device-descriptor usb_device_descriptor-idProduct >hex write
86     ] device-each
87     terpri
88   ] bus-each ;