Skip to content

Instantly share code, notes, and snippets.

@todbot
Created April 22, 2017 06:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save todbot/2fc331a48c4a7be86f1c8949def4c317 to your computer and use it in GitHub Desktop.
Save todbot/2fc331a48c4a7be86f1c8949def4c317 to your computer and use it in GitHub Desktop.
lsusb for tessel node-usb based off schakko/node-usb lsusb.js example
// lsusb-verbose.js
//
// Slightly fixed version of https://github.com/schakko/node-usb/blob/master/examples/lsusb/lsusb.js
// for https://github.com/tessel/node-usb
//
// Rework by Tod E. Kurt / todbot.com
//
var usb = require('usb')
var devices = usb.getDeviceList();
function toHex(i) {
return Number(i).toString(16);
}
function toByteArray(_i) {
var byteString = Number(_i).toString(2);
var array = new Array();
var bitCounter = 0;
var byte = "";
for (var i = (byteString.length - 1); i >= 0; i--) {
byte = byteString[i] + byte;
bitCounter++;
if ((bitCounter == 8) || ((i - 1) < 0)) {
array.push(parseInt(byte, 2));
byte = "";
bitCounter = 0;
}
}
return array.reverse();
}
function get_extra_data(obj) {
var data = obj.getExtraData(), r = "";
if (!max_bytes) {
var max_bytes = 5;
}
for (var i = 0; (i < data.length && i < max_bytes); i++) {
r += "0x" + pad(toHex(data[i]), 2, 0) + " ";
}
if (i < data.length) {
r += "(" + (data.length - i) + " bytes more)";
}
return r;
}
function pad(v, len, fill) {
var s = v.toString();
for (var i = s.length; i < len; i++) {
s = fill + s;
}
return s;
}
for (var i = 0; i < devices.length; i++) {
var device = devices[i];
try {
device.open();
var dd = device.deviceDescriptor;
var cd = device.configDescriptor ;
console.log("Bus " + pad(device.busNumber, 3, "0") + " Device " + pad(device.deviceAddress, 3, "0") + " ID " + pad(toHex(dd.idVendor), 4, "0") + ":" + pad(toHex(dd.idProduct), 4, "0"));
console.log("Device Descriptor:");
console.log(" bLength " + dd.bLength);
console.log(" bDescriptorType " + dd.bDescriptorType);
// 2 bcdUSB: 2 bytes
var bcdUSBArr = toByteArray(dd.bcdUSB);
console.log(" bcdUSB " + bcdUSBArr[0] + "." + pad(bcdUSBArr[1] || 0, 2, "0"));
console.log(" bDeviceClass " + dd.bDeviceClass);
console.log(" bDeviceSubClass " + dd.bDeviceSubClass);
console.log(" bDeviceProtocol " + dd.bDeviceProtocol);
console.log(" bMaxPacketSize0 " + dd.bMaxPacketSize0);
var idVendor = pad(toHex(dd.idVendor), 4, "0");
console.log(" idVendor " + "0x" + idVendor); // + " " + usb_ids[idVendor].name);
var idProduct = pad(toHex(dd.idProduct), 4, "0")
console.log(" idProduct " + "0x" + idProduct); // + " " + usb_ids[idVendor].products[idProduct].name);
// 2 bcdDevice: 2 bytes
var bcdDeviceArr = toByteArray(dd.bcdDevice);
console.log(" bcdDevice " + bcdDeviceArr[0] + "." + pad(bcdDeviceArr[1] || 0, 2, "0"));
console.log(" iManufacturer " + dd.iManufacturer);
console.log(" iProduct " + dd.iProduct);
// iSerialNumber is default of libusb-1.0
console.log(" iSerial " + dd.iSerialNumber);
console.log(" bNumConfigurations " + dd.bNumConfigurations);
console.log(" Configuration Descriptor: ");
console.log(" bLength " + cd.bLength);
console.log(" bDescriptorType " + cd.bDescriptorType);
console.log(" wTotalLength " + cd.wTotalLength);
console.log(" bNumInterfaces " + cd.bNumInterfaces);
console.log(" bConfigurationValue " + cd.bConfigurationValue);
console.log(" iConfiguration " + cd.iConfiguration);
console.log(" bmAttributes 0x" + toHex(cd.bmAttributes));
console.log(" MaxPower " + cd.bMaxPower);
// console.log(" __extra_length " + cd.extra_length);
// console.log(" __extra_data (first 5b) " + get_extra_data(device));
var interfaces = device.interfaces;
for (var j = 0; j < interfaces.length; j++) {
var interface = interfaces[j].descriptor;
console.log(" Interface descriptor:");
console.log(" bLength " + interface.bLength);
console.log(" bDescriptorType " + interface.bDescriptorType);
console.log(" bInterfaceNumber " + interface.bInterfaceNumber);
console.log(" bAlternateSetting " + interface.bAlternateSetting);
console.log(" bNumEndpoints " + interface.bNumEndpoints);
console.log(" bInterfaceClass " + interface.bInterfaceClass);
console.log(" bInterfaceSubClass " + interface.bInterfaceSubClass);
console.log(" bInterfaceProtocol " + interface.bInterfaceProtocol);
console.log(" iInterface " + interface.iInterface);
// console.log(" __extra_length " + interface.extra_length);
// console.log(" __extra_data (first 5b) " + get_extra_data(interface));
var endpoints = interface.endpoints;
for (var k = 0; k < endpoints.length; k++) {
var endpoint = endpoints[k];
console.log(" Endpoint descriptor:");
console.log(" bLength " + endpoint.bLength);
console.log(" bDescriptorType " + endpoint.bDescriptorType);
console.log(" bEndpointAddress 0x" + toHex(endpoint.bEndpointAddress));
console.log(" bmAttributes " + endpoint.bmAttributes);
console.log(" wMaxPacketSize 0x" + pad(toHex(endpoint.wMaxPacketSize), 4, "0"));
console.log(" bInterval " + endpoint.bInterval);
// console.log(" __extra_length " + endpoint.extra_length);
// console.log(" __extra_data (first 5b) " + get_extra_data(endpoint));
}
}
device.close();
} catch (e) {
try {
device && device.close();
} catch (e) {}
}
}
//usb.close();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment