diff options
| author | 2010-05-14 16:40:51 -0400 | |
|---|---|---|
| committer | 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; -} -*/ | 
