irecv_error_t irecv_saveenv(irecv_client_t client) { irecv_error_t error = irecv_send_command_raw(client, "saveenv"); if(error != IRECV_E_SUCCESS) { return error; } return IRECV_E_SUCCESS; }
irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** value) { char command[256]; if (client == NULL || client->handle == NULL) { return IRECV_E_NO_DEVICE; } *value = NULL; if(variable == NULL) { return IRECV_E_UNKNOWN_ERROR; } memset(command, '\0', sizeof(command)); snprintf(command, sizeof(command)-1, "getenv %s", variable); irecv_error_t error = irecv_send_command_raw(client, command); if(error == IRECV_E_PIPE) return IRECV_E_SUCCESS; if(error != IRECV_E_SUCCESS) return error; unsigned char* response = (unsigned char*) malloc(256); if (response == NULL) { return IRECV_E_OUT_OF_MEMORY; } memset(response, '\0', 256); int ret = libusb_control_transfer(client->handle, 0xC0, 0, 0, 0, response, 255, 500); if (ret < 0) return IRECV_E_UNKNOWN_ERROR; *value = response; return IRECV_E_SUCCESS; }
irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** value) { int ret = 0; char command[256]; if (check_context(client) != IRECV_E_SUCCESS) return IRECV_E_NO_DEVICE; *value = NULL; if(variable == NULL) { return IRECV_E_UNKNOWN_ERROR; } memset(command, '\0', sizeof(command)); snprintf(command, sizeof(command)-1, "getenv %s", variable); irecv_error_t error = irecv_send_command_raw(client, command); if(error == IRECV_E_PIPE) { return IRECV_E_SUCCESS; } if(error != IRECV_E_SUCCESS) { return error; } char* response = (char*) malloc(256); if (response == NULL) { return IRECV_E_OUT_OF_MEMORY; } memset(response, '\0', 256); ret = irecv_control_transfer(client, 0xC0, 0, 0, 0, (unsigned char*) response, 255, 1000); *value = response; return IRECV_E_SUCCESS; }
irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const char* value) { char command[256]; if (check_context(client) != IRECV_E_SUCCESS) return IRECV_E_NO_DEVICE; if(variable == NULL || value == NULL) { return IRECV_E_UNKNOWN_ERROR; } memset(command, '\0', sizeof(command)); snprintf(command, sizeof(command)-1, "setenv %s %s", variable, value); irecv_error_t error = irecv_send_command_raw(client, command); if(error != IRECV_E_SUCCESS) { return error; } return IRECV_E_SUCCESS; }
irecv_error_t irecv_send_command(irecv_client_t client, char *command) { irecv_error_t error = 0; unsigned int length; irecv_event_t event; if (check_context(client) != IRECV_E_SUCCESS) return IRECV_E_NO_DEVICE; length = strlen(command); if (length >= 0x100) { length = 0xFF; } if (client->precommand_callback != NULL) { event.size = length; event.data = command; event.type = IRECV_PRECOMMAND; if (client->precommand_callback(client, &event)) { return IRECV_E_SUCCESS; } } error = irecv_send_command_raw(client, command); if (error != IRECV_E_SUCCESS) { DPRINT("Failed to send command %s\n", command); if (error != IRECV_E_PIPE) return error; } if (client->postcommand_callback != NULL) { event.size = length; event.data = command; event.type = IRECV_POSTCOMMAND; if (client->postcommand_callback(client, &event)) { return IRECV_E_SUCCESS; } } return IRECV_E_SUCCESS; }