summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Benjamin BOURGEAIS2021-05-06 18:01:11 +0200
committerGravatar Nikias Bassen2021-05-26 03:40:03 +0200
commit47934949e0015165a4562b08e824adb3f664c0ea (patch)
treec4f49d5495eb2621a7cf18cd112a4c02907c9c59 /src
parent11324701c89a2ef2ace1686fe25eeec9ad8adac8 (diff)
downloadlibirecovery-47934949e0015165a4562b08e824adb3f664c0ea.tar.gz
libirecovery-47934949e0015165a4562b08e824adb3f664c0ea.tar.bz2
Add new irecv_send_command_breq to allow choosing the b_request usb param when sending commands
Diffstat (limited to 'src')
-rw-r--r--src/libirecovery.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/libirecovery.c b/src/libirecovery.c
index c3b3341..3e90178 100644
--- a/src/libirecovery.c
+++ b/src/libirecovery.c
@@ -2480,21 +2480,21 @@ IRECV_API void irecv_set_debug_level(int level) {
2480} 2480}
2481 2481
2482#ifndef USE_DUMMY 2482#ifndef USE_DUMMY
2483static irecv_error_t irecv_send_command_raw(irecv_client_t client, const char* command) { 2483static irecv_error_t irecv_send_command_raw(irecv_client_t client, const char* command, uint8_t b_request) {
2484 unsigned int length = strlen(command); 2484 unsigned int length = strlen(command);
2485 if (length >= 0x100) { 2485 if (length >= 0x100) {
2486 length = 0xFF; 2486 length = 0xFF;
2487 } 2487 }
2488 2488
2489 if (length > 0) { 2489 if (length > 0) {
2490 irecv_usb_control_transfer(client, 0x40, 0, 0, 0, (unsigned char*) command, length + 1, USB_TIMEOUT); 2490 irecv_usb_control_transfer(client, 0x40, b_request, 0, 0, (unsigned char*) command, length + 1, USB_TIMEOUT);
2491 } 2491 }
2492 2492
2493 return IRECV_E_SUCCESS; 2493 return IRECV_E_SUCCESS;
2494} 2494}
2495#endif 2495#endif
2496 2496
2497IRECV_API irecv_error_t irecv_send_command(irecv_client_t client, const char* command) { 2497IRECV_API irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command, uint8_t b_request) {
2498#ifdef USE_DUMMY 2498#ifdef USE_DUMMY
2499 return IRECV_E_UNSUPPORTED; 2499 return IRECV_E_UNSUPPORTED;
2500#else 2500#else
@@ -2518,7 +2518,7 @@ IRECV_API irecv_error_t irecv_send_command(irecv_client_t client, const char* co
2518 } 2518 }
2519 } 2519 }
2520 2520
2521 error = irecv_send_command_raw(client, command); 2521 error = irecv_send_command_raw(client, command, b_request);
2522 if (error != IRECV_E_SUCCESS) { 2522 if (error != IRECV_E_SUCCESS) {
2523 debug("Failed to send command %s\n", command); 2523 debug("Failed to send command %s\n", command);
2524 if (error != IRECV_E_PIPE) 2524 if (error != IRECV_E_PIPE)
@@ -2538,6 +2538,10 @@ IRECV_API irecv_error_t irecv_send_command(irecv_client_t client, const char* co
2538#endif 2538#endif
2539} 2539}
2540 2540
2541IRECV_API irecv_error_t irecv_send_command(irecv_client_t client, const char* command) {
2542 return irecv_send_command_breq(client, command, 0);
2543}
2544
2541IRECV_API irecv_error_t irecv_send_file(irecv_client_t client, const char* filename, int dfu_notify_finished) { 2545IRECV_API irecv_error_t irecv_send_file(irecv_client_t client, const char* filename, int dfu_notify_finished) {
2542#ifdef USE_DUMMY 2546#ifdef USE_DUMMY
2543 return IRECV_E_UNSUPPORTED; 2547 return IRECV_E_UNSUPPORTED;
@@ -2815,7 +2819,7 @@ IRECV_API irecv_error_t irecv_getenv(irecv_client_t client, const char* variable
2815 2819
2816 memset(command, '\0', sizeof(command)); 2820 memset(command, '\0', sizeof(command));
2817 snprintf(command, sizeof(command)-1, "getenv %s", variable); 2821 snprintf(command, sizeof(command)-1, "getenv %s", variable);
2818 irecv_error_t error = irecv_send_command_raw(client, command); 2822 irecv_error_t error = irecv_send_command_raw(client, command, 0);
2819 if(error == IRECV_E_PIPE) { 2823 if(error == IRECV_E_PIPE) {
2820 return IRECV_E_SUCCESS; 2824 return IRECV_E_SUCCESS;
2821 } 2825 }
@@ -2989,7 +2993,7 @@ IRECV_API irecv_error_t irecv_saveenv(irecv_client_t client) {
2989#ifdef USE_DUMMY 2993#ifdef USE_DUMMY
2990 return IRECV_E_UNSUPPORTED; 2994 return IRECV_E_UNSUPPORTED;
2991#else 2995#else
2992 irecv_error_t error = irecv_send_command_raw(client, "saveenv"); 2996 irecv_error_t error = irecv_send_command_raw(client, "saveenv", 0);
2993 if(error != IRECV_E_SUCCESS) { 2997 if(error != IRECV_E_SUCCESS) {
2994 return error; 2998 return error;
2995 } 2999 }
@@ -3013,7 +3017,7 @@ IRECV_API irecv_error_t irecv_setenv(irecv_client_t client, const char* variable
3013 3017
3014 memset(command, '\0', sizeof(command)); 3018 memset(command, '\0', sizeof(command));
3015 snprintf(command, sizeof(command)-1, "setenv %s %s", variable, value); 3019 snprintf(command, sizeof(command)-1, "setenv %s %s", variable, value);
3016 irecv_error_t error = irecv_send_command_raw(client, command); 3020 irecv_error_t error = irecv_send_command_raw(client, command, 0);
3017 if(error != IRECV_E_SUCCESS) { 3021 if(error != IRECV_E_SUCCESS) {
3018 return error; 3022 return error;
3019 } 3023 }
@@ -3026,7 +3030,7 @@ IRECV_API irecv_error_t irecv_reboot(irecv_client_t client) {
3026#ifdef USE_DUMMY 3030#ifdef USE_DUMMY
3027 return IRECV_E_UNSUPPORTED; 3031 return IRECV_E_UNSUPPORTED;
3028#else 3032#else
3029 irecv_error_t error = irecv_send_command_raw(client, "reboot"); 3033 irecv_error_t error = irecv_send_command_raw(client, "reboot", 0);
3030 if(error != IRECV_E_SUCCESS) { 3034 if(error != IRECV_E_SUCCESS) {
3031 return error; 3035 return error;
3032 } 3036 }