Usb devices are identified by two 16-bit numbers known as VID and PID (Vendor id and Product Id). These keys are, among a lot of other things, an advantage of Usb over other vintage ports as serial ports. Unfortunately if you are developing an application which needs to show a readable information about devices attached to usb root hubs these keys are pretty cryptic and need to be decoded into human readable information.
During the development of DroidTerm I reach this problem because I am working on a Usb viewer of what is attached to Usb port. First I was looking for a beautiful REST API with its fancy methods and its json responses but I only could find The Usb Id repository which is a text file and nothing more. But It seems very complete and reasonably updated so there is no reason to moan.
I defined this features:
– Data should be stored locally using SQLite to avoid dependency on network.
– Local database should be updated when new devices were added to Usb Id Repository.
– All database operations should be encapsulated.
So I released this piece of code to fill my own requirements.
An example of how it works:
/* * Example of use * @author: felhr (felhr85@gmail.com) * // Clone all the files needed: git clone https://gist.github.com/afe18397dc2441862337.git // Permissions needed: <uses-permission android:name="android.permission.INTERNET" /> // There are some callbacks related with created, opened and updated database events. It is not necessary to use them. private UsbDataProvider.UsbDbCallback mCallback = new UsbDataProvider.UsbDbCallback() { @Override public void onDbOpenedFirstTime(boolean status) { // status == false means database could not be created due to an error fetching data from source // status == true means database was successfully created // Code here } @Override public void onDbOpened() { // Database opened // Code here } @Override public void onDbUpdated(String newVersion) { // Database updated with newVersion // Code here } }; UsbDataProvider dataProvider; dataProvider = new UsbDataProvider(context, mCallback); // Create and open, open or update and open database if necessary. Notifications on callback //dataProvider = new UsbDataProvider(context) String vid = "03f0"; // Must be an hex representation of 16 bit number (0000-FFFF). Don't worry about uppercase or lowercase String pid= "010C"; // Must be an hex representation of 16 bit number (0000-FFFF). Don't worry about uppercase or lowercase UsbData data = dataProvider.lookup(vid, pid); // Returns null if vid or pid are not valid inputs or database could not be created if(data != null) { String vendorName = data.getVendorName(); // Vendor name String productName = data.getProductName(); // Product name }
I hope you find this piece of code useful. Happy craft!