int main(int argc, char *argv[]) { int err; libusb_init(NULL); libusb_set_debug(NULL, 3); /* Try to open directly accessory. If it's not there, try to switch phone to it */ handle = libusb_open_device_with_vid_pid(NULL, ACCESSORY_VID, ACCESSORY_PID_DBG); //if(handle) //libusb_reset_device(handle); if(handle == NULL){ printf("Device not in Accessory mode. Trying to switch it to it...\n"); err = setupAccessory("STMicroelectronics", "adkping", "Just pings data", "2.0", "http://www.st.com", "1234567890123456"); if(err < 0){ fprintf(stdout, "Sorry, can't set up accessory, giving up\n"); deInit(); return -1; } } /* Do some stuff */ if(mainPhase() < 0){ fprintf(stdout, "Error during main phase\n"); deInit(); return -1; } deInit(); fprintf(stdout, "Done, no errors\n"); return 0; }
int main (int argc, char *argv[]){ if(isUsbAccessory() < 0){ if(init() < 0){ deInit(); return 0; } //doTransfer(); if(setupAccessory( "Nexus-Computing GmbH", "osciprime", "Description", "antilope", "http://neuxs-computing.ch", "2254711SerialNo.") < 0){ fprintf(stdout, "Error setting up accessory\n"); deInit(); return -1; }; } if(mainPhase() < 0){ fprintf(stdout, "Error during main phase\n"); deInit(); return -1; } deInit(); fprintf(stdout, "Done, no errors\n"); return 0; }
int main (int argc, char *argv[]){ if(init() < 0) return; //doTransfer(); if(setupAccessory( "Manufacturer", "Model", "Description", "VersionName", "http://neuxs-computing.ch", "2254711SerialNo.") < 0){ fprintf(stdout, "Error setting up accessory\n"); deInit(); return -1; }; if(mainPhase() < 0){ fprintf(stdout, "Error during main phase\n"); deInit(); return -1; } deInit(); fprintf(stdout, "Done, no errors\n"); return 0; }
/** * try to find a android accessory device, and try to open it. * * @return handle of the accessory device, or null if none are found. */ libusb_device_handle* findAndInitAccessory( libusb_context* ctx, const char* manufacturer, const char* modelName, const char* description, const char* version, const char* uri, const char* serialNumber) { libusb_device** list; #ifdef DEBUG printf("libAndroidAccessory: Enumerating devices\n"); #endif ssize_t cnt = libusb_get_device_list(ctx, &list); int i, j; struct libusb_device_descriptor desc; libusb_device_handle* handle = NULL; for (i = 0; i < cnt; i++) { libusb_device* tmpdevice = list[i]; if (libusb_get_device_descriptor(tmpdevice, &desc) < 0) { continue; } debugDescriptor(&desc); for (j = 0; j < (sizeof vendors / sizeof *vendors); ++j) { if (desc.idVendor == vendors[j]) { #ifdef DEBUG printf("libAndroidAccessory: Supported vendor Id found: %04hx\n", desc.idVendor); #endif // Check to see if the device is already in accessory mode if(desc.idVendor == GOOGLE) { switch(desc.idProduct) { case ACCESSORY: case ACCESSORY_ADB: case ACCESSORY_AUDIO: case ACCESSORY_AUDIO_ADB: #ifdef DEBUG printf("libAndroidAccessory: Connected device already in accessory mode, continuing!\n"); #endif ; // Do not remove this empty statement. Removing it might make gcc refuse to compile our project. int errorCode = libusb_open(tmpdevice, &handle); if ( errorCode != 0 ) { fprintf(stderr, "libAndroidAccessory: %s %d -> %s\n",__FILE__, __LINE__, libusb_error_name(errorCode)); } determineEndpoints(tmpdevice); libusb_release_interface(handle, 0); libusb_release_interface(handle, 1); libusb_free_device_list(list, 1); return handle; default: break; } } // We should in no circumstance try to put a accessory in accessory mode. This should filter most of them out. if (desc.idVendor == GOOGLE && (desc.idProduct >= ACCESSORY && desc.idProduct <= ACCESSORY_AUDIO_ADB) ) { printf("libAndroidAccessory: Ignoring a device which is already in accessory mode\n"); break; } // We're not already in accessory mode, try to send configuration commands. handle = openUsb(ctx, desc.idVendor, desc.idProduct); //try to open the USB interface if (handle != NULL) { int version_supported = -1; version_supported = checkAndroid(handle); switch(version_supported) { case 2: #ifdef DEBUG printf("libAndroidAccessory: Android Open Accessory version 2 support detected\n"); #endif // Fallthrough to next case /* no break */ case 1: #ifdef DEBUG printf("libAndroidAccessory: Android Open Accessory version 1 support detected\n"); printf("libAndroidAccessory: Trying to setup accessory mode\n"); #endif handle = setupAccessory( manufacturer, modelName, description, version, uri, serialNumber, handle); //try to set-up Accessory libusb_free_device_list(list, 1); closeUsb(handle); return handle = NULL; break; default: #ifdef DEBUG printf("libAndroidAccessory: Unsupported or no Android device support\n"); #endif closeUsb(handle); handle = NULL; break; } } } } } libusb_free_device_list(list, 1); // Upon reaching this location we didn't find any supported android device, so we return NULL return NULL; }