summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joshua Hill2010-05-14 16:40:51 -0400
committerGravatar Joshua Hill2010-05-14 16:40:51 -0400
commitebaf0a72d826a4c8f09d965cd2863d1848a999db (patch)
tree967b1a5e7abc5987e2bf4c5f4fcaeb93d606d42f
parent6eb576e410695832ad29b93c7c2f3110495ca114 (diff)
downloadlibirecovery-ebaf0a72d826a4c8f09d965cd2863d1848a999db.tar.gz
libirecovery-ebaf0a72d826a4c8f09d965cd2863d1848a999db.tar.bz2
added irecv_send_buffer() to lib header and simplified some packet math
-rw-r--r--include/libirecovery.h1
-rw-r--r--src/irecovery.c8
-rw-r--r--src/libirecovery.c83
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;
-}
-*/