From ebaf0a72d826a4c8f09d965cd2863d1848a999db Mon Sep 17 00:00:00 2001 From: Joshua Hill Date: Fri, 14 May 2010 16:40:51 -0400 Subject: added irecv_send_buffer() to lib header and simplified some packet math --- include/libirecovery.h | 1 + src/irecovery.c | 8 ++--- 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; -} -*/ -- cgit v1.1-32-gdbae