/** * iRecovery - Utility for DFU 2.0, WTF and Recovery Mode * Copyright (C) 2008 - 2009 westbaer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . **/ #ifndef LIBIRECOVERY_H #define LIBIRECOVERY_H #include #define APPLE_VENDOR_ID 0x05AC enum { kRecoveryMode1 = 0x1280, kRecoveryMode2 = 0x1281, kRecoveryMode3 = 0x1282, kRecoveryMode4 = 0x1283, kDfuMode = 0x1227 }; typedef enum { IRECV_E_SUCCESS = 0, IRECV_E_NO_DEVICE = -1, IRECV_E_OUT_OF_MEMORY = -2, IRECV_E_UNABLE_TO_CONNECT = -3, IRECV_E_INVALID_INPUT = -4, IRECV_E_FILE_NOT_FOUND = -5, IRECV_E_USB_UPLOAD = -6, IRECV_E_USB_STATUS = -7, IRECV_E_USB_INTERFACE = -8, IRECV_E_USB_CONFIGURATION = -9, IRECV_E_UNKNOWN_ERROR = -255 } irecv_error_t; typedef enum { IRECV_RECEIVED = 1, IRECV_PRECOMMAND = 2, IRECV_POSTCOMMAND = 3, IRECV_CONNECTED = 4, IRECV_DISCONNECTED = 5, IRECV_PROGRESS = 6 } irecv_event_type; typedef struct { int size; char* data; double progress; irecv_event_type type; } irecv_event_t; struct irecv_client; typedef struct irecv_client* irecv_client_t; typedef int(*irecv_event_cb_t)(irecv_client_t client, const irecv_event_t* event); struct irecv_client { int debug; int config; int interface; int alt_interface; unsigned short mode; libusb_device_handle* handle; irecv_event_cb_t progress_callback; irecv_event_cb_t received_callback; irecv_event_cb_t connected_callback; irecv_event_cb_t precommand_callback; irecv_event_cb_t postcommand_callback; irecv_event_cb_t disconnected_callback; }; irecv_error_t irecv_event_subscribe(irecv_client_t client, irecv_event_type type, irecv_event_cb_t callback, void *user_data); irecv_error_t irecv_event_unsubscribe(irecv_client_t client, irecv_event_type type); irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const char* value); irecv_error_t irecv_open(irecv_client_t* client); irecv_error_t irecv_reset(irecv_client_t client); irecv_error_t irecv_close(irecv_client_t client); irecv_error_t irecv_receive(irecv_client_t client); irecv_error_t irecv_send_exploit(irecv_client_t client); void irecv_set_debug_level(int level); irecv_error_t irecv_execute_script(irecv_client_t client, const char* filename); irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** value); irecv_error_t irecv_get_cpid(irecv_client_t client, unsigned int* cpid); irecv_error_t irecv_get_bdid(irecv_client_t client, unsigned int* bdid); irecv_error_t irecv_get_ecid(irecv_client_t client, unsigned long long* ecid); irecv_error_t irecv_send_file(irecv_client_t client, const char* filename); irecv_error_t irecv_send_command(irecv_client_t client, unsigned char* command); irecv_error_t irecv_set_configuration(irecv_client_t client, int configuration); irecv_error_t irecv_set_interface(irecv_client_t client, int interface, int alt_interface); irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char* buffer, unsigned int length); const char* irecv_strerror(irecv_error_t error); #endif