Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | added usb library |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
88a8d47e99e9d41914ae0ae2b766c682 |
User & Date: | ovenpasta@pizzahack.eu 2016-07-07 20:50:49 |
Context
2016-07-07
| ||
20:51 | merge check-in: 68e5a476f2 user: ovenpasta@pizzahack.eu tags: trunk | |
20:50 | added usb library check-in: 88a8d47e99 user: ovenpasta@pizzahack.eu tags: trunk | |
18:15 | Update README.md check-in: f849a85634 user: noreply@github.com tags: trunk | |
Changes
Added usb.sls.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
#!chezscheme (library (usb) (export usb-device-descriptor usb-device usb-device-handle usb-init usb-get-device-list usb-get-device-descriptor usb-find-vid-pid usb-display-device-list ) (import (chezscheme)) (define-ftype usb-device* void*) (define-ftype usb-device*-array (array 0 usb-device*)) (define-ftype usb-device*** (* usb-device*-array)) (define-ftype usb-device-handle* void*) (define-ftype usb-device-descriptor (struct [length unsigned-8] [type unsigned-8] [USB unsigned-16] [class unsigned-8] [subclass unsigned-8] [protocol unsigned-8] [max-packet-size unsigned-8] [vendor unsigned-16] [product unsigned-16] [device unsigned-16] [manufacturer unsigned-8] [product-index unsigned-8] [serial-number-index unsigned-8] [num-configurations unsigned-8] )) (define-record-type usb-device (fields (mutable ptr))) (define-record-type usb-device-handle (fields (mutable ptr))) (define (usb-device-addr dev) (ftype-pointer-address (usb-device-ptr dev))) (define (usb-get-device-list) (let* ([ptr (make-ftype-pointer usb-device*** (foreign-alloc (ftype-sizeof usb-device***)))] [f (foreign-procedure "libusb_get_device_list" (void* void*) int)] [e (f 0 (ftype-pointer-address ptr))]) (if (< e 0) (error 'usb-get-device-list "error" e)) (let ((devices (ftype-&ref usb-device*** (*) ptr))) (let loop ((i 0) (l '())) (if (>= i e) l (loop (fx+ i 1) (cons (make-usb-device (make-ftype-pointer usb-device* (ftype-ref usb-device*-array (i) devices))) l))))))) (define (usb-get-device-descriptor dev) (let* ([ptr (make-ftype-pointer usb-device-descriptor (foreign-alloc (ftype-sizeof usb-device-descriptor)))] [f (foreign-procedure "libusb_get_device_descriptor" (void* void*) int)] [e (f (usb-device-addr dev) (ftype-pointer-address ptr))]) (if (< e 0) (error 'usb-get-device-descriptor "error" e) ptr))) (define (usb-init) (let ([e ((foreign-procedure "libusb_init" (void*) int) 0)]) (when (< e 0) (error 'usb-init "error" e)) #t)) (define (usb-find-vid-pid vid pid) (call/cc (lambda (k) (for-each (lambda (dev) (let ([descriptor (usb-get-device-descriptor dev)]) (if (and (equal? (ftype-ref usb-device-descriptor (vendor) descriptor) vid) (equal? (ftype-ref usb-device-descriptor (product) descriptor) pid)) (k dev)))) (usb-get-device-list)) #f))) (define (usb-display-device-list) (pretty-print (map (lambda (dev) (ftype-pointer->sexpr (usb-get-device-descriptor dev))) (usb-get-device-list)))) ) ;library usb (warning 'usb "remember to load the dynamic library: Example: (load-shared-object \"libusb-1.0.so.0\")") |