41defedd2931672b4fa0f475c2698b31512a9d01
[gnuk/gnuk.git] / tool / usb_strings.py
1 #! /usr/bin/python
2
3 """
4 usb_strings.py - a tool to dump USB string
5
6 Copyright (C) 2012, 2015 Free Software Initiative of Japan
7 Author: NIIBE Yutaka <gniibe@fsij.org>
8
9 This file is a part of Gnuk, a GnuPG USB Token implementation.
10
11 Gnuk is free software: you can redistribute it and/or modify it
12 under the terms of the GNU General Public License as published by
13 the Free Software Foundation, either version 3 of the License, or
14 (at your option) any later version.
15
16 Gnuk is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
18 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
19 License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program.  If not, see <http://www.gnu.org/licenses/>.
23 """
24
25 import usb, sys
26
27 USB_VENDOR_FSIJ=0x234b
28 USB_PRODUCT_GNUK=0x0000
29
30 def gnuk_devices_by_vidpid():
31     busses = usb.busses()
32     for bus in busses:
33         devices = bus.devices
34         for dev in devices:
35             if dev.idVendor != USB_VENDOR_FSIJ:
36                 continue
37             if dev.idProduct != USB_PRODUCT_GNUK:
38                 continue
39             yield dev
40
41 field = ['', 'Vendor', 'Product', 'Serial', 'Revision', 'Config', 'Sys', 'Board']
42
43 def main(n):
44     for dev in gnuk_devices_by_vidpid():
45         handle = dev.open()
46         print("Device: %s" % dev.filename)
47         try:
48             for i in range(1,n):
49                 s = handle.getString(i, 512)
50                 print("%10s: %s" % (field[i], s.decode('UTF-8')))
51         except:
52             pass
53         del dev
54
55 if __name__ == '__main__':
56     if len(sys.argv) > 1:
57         n = int(sys.argv[1])
58     else:
59         n = 8                   # Gnuk has eight strings
60     main(n)