diff options
author | Joshua Hill | 2010-05-14 16:40:51 -0400 |
---|---|---|
committer | Joshua Hill | 2010-05-14 16:40:51 -0400 |
commit | ebaf0a72d826a4c8f09d965cd2863d1848a999db (patch) | |
tree | 967b1a5e7abc5987e2bf4c5f4fcaeb93d606d42f | |
parent | 6eb576e410695832ad29b93c7c2f3110495ca114 (diff) | |
download | libirecovery-ebaf0a72d826a4c8f09d965cd2863d1848a999db.tar.gz libirecovery-ebaf0a72d826a4c8f09d965cd2863d1848a999db.tar.bz2 |
added irecv_send_buffer() to lib header and simplified some packet math
-rw-r--r-- | include/libirecovery.h | 1 | ||||
-rw-r--r-- | src/irecovery.c | 8 | ||||
-rw-r--r-- | src/libirecovery.c | 83 |
3 files changed, 8 insertions, 84 deletions
diff --git a/include/libirecovery.h b/include/libirecovery.h index 801ad88..7c424f6 100644 --- a/include/libirecovery.h +++ b/include/libirecovery.h @@ -49,3 +49,4 @@ int irecv_reset(irecv_device* device); int irecv_close(irecv_device* device); int irecv_send_file(irecv_device* device, const char* filename); int irecv_send_command(irecv_device* device, const char* command); +int irecv_send_buffer(irecv_device* device, unsigned char* buffer, int length); diff --git a/src/irecovery.c b/src/irecovery.c index e9ecdea..ae828af 100644 --- a/src/irecovery.c +++ b/src/irecovery.c @@ -99,13 +99,13 @@ int main(int argc, char** argv) { action = kStartShell; break; - case 'c': - action = kSendCommand; + case 'f': + action = kSendFile; argument = optarg; break; - case 'f': - action = kSendFile; + case 'c': + action = kSendCommand; argument = optarg; break; diff --git a/src/libirecovery.c b/src/libirecovery.c index e3d6eb6..630a9b7 100644 --- a/src/libirecovery.c +++ b/src/libirecovery.c @@ -175,13 +175,11 @@ unsigned int irecv_get_status(irecv_device* device) { } int irecv_send_buffer(irecv_device* device, unsigned char* buffer, int length) { + int last = length % 0x800; int packets = length / 0x800; - if (length % 0x800) { + if (last != 0) { packets++; - } - - int last = length % 0x800; - if (!last) { + } else { last = 0x800; } @@ -212,78 +210,3 @@ int irecv_send_buffer(irecv_device* device, unsigned char* buffer, int length) { free(buffer); return IRECV_SUCCESS; } - -/* -int send_file(struct libusb_device_handle *handle, const char* filename, int loadOffset) { - FILE* file = fopen(filename, "rb"); - if (file == NULL) { - printf("send_file: File %s not found.\n", filename); - return -1; - } - - fseek(file, 0, SEEK_END); - int len = ftell(file); - fseek(file, 0, SEEK_SET); - - char* buffer = malloc(len + loadOffset); - if (buffer == NULL) { - printf("send_file: Error allocating memory!\n"); - fclose(file); - return -1; - } - - fread(&buffer[loadOffset], 1, len, file); - fclose(file); - - len += loadOffset; - - int packets = len / 0x800; - if (len % 0x800) { - packets++; - } - - int last = len % 0x800; - if (!last) { - last = 0x800; - } - - int i = 0; - char response[6]; - for (i = 0; i < packets; i++) { - int size = i + 1 < packets ? 0x800 : last; - - if (!libusb_control_transfer(handle, 0x21, 1, i, 0, &buffer[i * 0x800], size, 1000)) { - printf("send_file: Error sending packet!\n"); - return -1; - } - - if (libusb_control_transfer(handle, 0xA1, 3, 0, 0, response, 6, 1000) != 6) { - printf("send_file: Error receiving status!\n"); - return -1; - - } else { - if (response[4] != 5) { - printf("send_file: Status error!\n"); - return -1; - } - } - } - - libusb_control_transfer(handle, 0x21, 1, i, 0, buffer, 0, 1000); - for (i = 6; i <= 8; i++) { - if (libusb_control_transfer(handle, 0xA1, 3, 0, 0, response, 6, 1000) != 6) { - printf("send_file: Error receiving status!\n"); - return -1; - - } else { - if (response[4] != i) { - printf("send_file: Status error!\n"); - return -1; - } - } - } - - free(buffer); - return 0; -} -*/ |