lsusb.c revision fd1e8553232aa6f3bfbb609158b24fa2e1c3d40b
1fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling/* 2fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * Copyright (C) 2010 The Android Open Source Project 3fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * 4fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * Licensed under the Apache License, Version 2.0 (the "License"); 5fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * you may not use this file except in compliance with the License. 6fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * You may obtain a copy of the License at 7fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * 8fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * http://www.apache.org/licenses/LICENSE-2.0 9fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * 10fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * Unless required by applicable law or agreed to in writing, software 11fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * distributed under the License is distributed on an "AS IS" BASIS, 12fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * See the License for the specific language governing permissions and 14fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling * limitations under the License. 15fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling */ 16fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 17fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling#include <errno.h> 18fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling#include <stdio.h> 19fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling#include <stdint.h> 20fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling#include <string.h> 21fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 22fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling#include <usbhost/usbhost.h> 23fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 24fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gillingstatic int lsusb_device_added(const char *dev_name, void *client_data) 25fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling{ 26fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling struct usb_device *dev = usb_device_open(dev_name); 27fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling uint16_t vid, pid; 28fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling char *mfg_name, *product_name, *serial; 29fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 30fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling if (!dev) { 31fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling fprintf(stderr, "can't open device %s: %s\n", dev_name, strerror(errno)); 32fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling return 0; 33fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling } 34fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 35fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling vid = usb_device_get_vendor_id(dev); 36fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling pid = usb_device_get_product_id(dev); 37fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling mfg_name = usb_device_get_manufacturer_name(dev); 38fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling product_name = usb_device_get_product_name(dev); 39fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling serial = usb_device_get_serial(dev); 40fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 41fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling printf("%s: %04x:%04x %s %s %s\n", dev_name, vid, pid, 42fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling mfg_name, product_name, serial); 43fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 44fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling free(mfg_name); 45fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling free(product_name); 46fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling free(serial); 47fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 48fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling usb_device_close(dev); 49fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 50fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling return 0; 51fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling} 52fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 53fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gillingstatic int lsusb_device_removed(const char *dev_name, void *client_data) 54fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling{ 55fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling return 0; 56fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling} 57fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 58fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 59fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gillingstatic int lsusb_discovery_done(void *client_data) 60fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling{ 61fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling return 1; 62fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling} 63fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 64fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 65fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 66fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gillingint lsusb_main(int argc, char **argv) 67fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling{ 68fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling struct usb_host_context *ctx = usb_host_init(); 69fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling if (!ctx) { 70fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling perror("usb_host_init:"); 71fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling return 1; 72fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling } 73fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 74fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling usb_host_run(ctx, 75fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling lsusb_device_added, 76fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling lsusb_device_removed, 77fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling lsusb_discovery_done, 78fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling NULL); 79fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 80fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling usb_host_cleanup(ctx); 81fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 82fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling return 0; 83fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling} 84fd1e8553232aa6f3bfbb609158b24fa2e1c3d40bErik Gilling 85