breset.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <usb.h>
00032 #include <stdio.h>
00033 #include <unistd.h>
00034
00035 #define VENDOR_RIM 0x0fca
00036 #define PRODUCT_RIM_BLACKBERRY 0x0001
00037 #define PRODUCT_RIM_PEARL_DUAL 0x0004
00038 #define PRODUCT_RIM_PEARL_8120 0x8004
00039 #define PRODUCT_RIM_PEARL 0x0006
00040
00041 #define BLACKBERRY_INTERFACE 0
00042 #define BLACKBERRY_CONFIGURATION 1
00043
00044 bool reset(struct usb_device *dev)
00045 {
00046 usb_dev_handle *handle = usb_open(dev);
00047 if( !handle )
00048 return false;
00049
00050 bool ret = usb_reset(handle) == 0;
00051 usb_close(handle);
00052 return ret;
00053 }
00054
00055 int main()
00056 {
00057 struct usb_bus *busses;
00058
00059 usb_init();
00060 usb_find_busses();
00061 usb_find_devices();
00062 busses = usb_get_busses();
00063
00064 printf("Scanning for Blackberry devices...\n");
00065 int found = 0;
00066
00067 struct usb_bus *bus;
00068 for( bus = busses; bus; bus = bus->next ) {
00069 struct usb_device *dev;
00070
00071 for (dev = bus->devices; dev; dev = dev->next) {
00072
00073 if( dev->descriptor.idVendor == VENDOR_RIM &&
00074 (dev->descriptor.idProduct == PRODUCT_RIM_BLACKBERRY ||
00075 dev->descriptor.idProduct == PRODUCT_RIM_PEARL ||
00076 dev->descriptor.idProduct == PRODUCT_RIM_PEARL_8120 ||
00077 dev->descriptor.idProduct == PRODUCT_RIM_PEARL_DUAL ) ) {
00078 printf("Found...");
00079 printf("attempting to reset.\n");
00080 if( reset(dev) )
00081 found++;
00082 else
00083 printf("Can't reset device on bus %s, devnum %u\n", bus->dirname, (unsigned int) dev->devnum);
00084 }
00085 }
00086 }
00087
00088 printf("%d device%s reset.\n", found, found > 1 ? "s" : "");
00089 }
00090