void ConnAccessoryTasks() { switch (acc_state) { case STATE_ACC_DISCONNECTED: if (USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ACC)) { AccessoryInit(buf, BUF_SIZE); acc_state = STATE_ACC_INITIALIZING; } break; case STATE_ACC_INITIALIZING: case STATE_ACC_INITIALIZED: if (!USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ACC)) { AccessoryShutdown(); acc_state = STATE_ACC_DISCONNECTED; } else { int res = AccessoryTasks(); if (res == -1) { log_printf("Error occured. Resetting Android USB."); USBHostAndroidReset(); break; } acc_state = res ? STATE_ACC_INITIALIZED : STATE_ACC_INITIALIZING; } } }
BOOL BootloaderConnTasks() { int role = USBTasks(); ConnADBTasks(); return !role // device mode || USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ADB) || unknown_device_attached; }
static void AccessoryTasks() { DWORD size; BYTE err; // handle detach if (channel_state > CHANNEL_DETACHED && !USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ACC)) { if (is_channel_open) { callback(NULL, 1, callback_arg); is_channel_open = 0; } channel_state = CHANNEL_DETACHED; } switch (channel_state) { case CHANNEL_DETACHED: if (USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ACC)) { channel_state = CHANNEL_INIT; } break; case CHANNEL_INIT: USBHostAndroidRead(rx_buf, 1, ANDROID_INTERFACE_ACC); channel_state = CHANNEL_WAIT_OPEN; break; case CHANNEL_WAIT_OPEN: if (USBHostAndroidRxIsComplete(&err, &size, ANDROID_INTERFACE_ACC)) { if (err != USB_SUCCESS) { log_printf("Read failed with error code %d", err); return; } USBHostAndroidWrite(&is_channel_open, 1, ANDROID_INTERFACE_ACC); if (is_channel_open) { USBHostAndroidRead(rx_buf, rx_buf_size, ANDROID_INTERFACE_ACC); channel_state = CHANNEL_OPEN; } else { channel_state = CHANNEL_WAIT_CLOSED; } } break; case CHANNEL_OPEN: if (USBHostAndroidRxIsComplete(&err, &size, ANDROID_INTERFACE_ACC)) { if (err != USB_SUCCESS) { log_printf("Read failed with error code %d", err); return; } if (size) { callback(rx_buf, size, callback_arg); } // Channel might have been closed from within the callback. if (channel_state == CHANNEL_OPEN) { USBHostAndroidRead(rx_buf, rx_buf_size, ANDROID_INTERFACE_ACC); } } break; case CHANNEL_WAIT_CLOSED: if (USBHostAndroidTxIsComplete(&err, ANDROID_INTERFACE_ACC)) { if (err != USB_SUCCESS) { log_printf("Write failed with error code %d", err); return; } callback(NULL, 0, callback_arg); channel_state = CHANNEL_INIT; } break; } }
int AccessoryIsAvailable() { return USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ACC); }
BOOL ADBAttached() { return USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ADB); }
static int ADBConIsAvailable() { return USBHostAndroidIsInterfaceAttached(ANDROID_INTERFACE_ADB); }