Pass OEM commands to HAL

Bug: 78793464
Bug: 79480454
Test: fastboot oem command

Change-Id: Ibaabef6ea725857102f7531997fcff2a1dbdc1ca
This commit is contained in:
Hridya Valsaraju 2018-09-14 13:58:21 -07:00
parent a9da5ad37a
commit 993b4edb0f
4 changed files with 37 additions and 3 deletions

View File

@ -32,6 +32,7 @@
#define FB_CMD_DELETE_PARTITION "delete-logical-partition"
#define FB_CMD_RESIZE_PARTITION "resize-logical-partition"
#define FB_CMD_UPDATE_SUPER "update-super"
#define FB_CMD_OEM "oem"
#define RESPONSE_OKAY "OKAY"
#define RESPONSE_FAIL "FAIL"

View File

@ -40,6 +40,9 @@ using ::android::hardware::hidl_string;
using ::android::hardware::boot::V1_0::BoolResult;
using ::android::hardware::boot::V1_0::CommandResult;
using ::android::hardware::boot::V1_0::Slot;
using ::android::hardware::fastboot::V1_0::Result;
using ::android::hardware::fastboot::V1_0::Status;
using namespace android::fs_mgr;
struct VariableHandlers {
@ -133,6 +136,24 @@ bool EraseHandler(FastbootDevice* device, const std::vector<std::string>& args)
return device->WriteStatus(FastbootResult::FAIL, "Erasing failed");
}
bool OemCmdHandler(FastbootDevice* device, const std::vector<std::string>& args) {
auto fastboot_hal = device->fastboot_hal();
if (!fastboot_hal) {
return device->WriteStatus(FastbootResult::FAIL, "Unable to open fastboot HAL");
}
Result ret;
auto ret_val = fastboot_hal->doOemCommand(args[0], [&](Result result) { ret = result; });
if (!ret_val.isOk()) {
return device->WriteStatus(FastbootResult::FAIL, "Unable to do OEM command");
}
if (ret.status != Status::SUCCESS) {
return device->WriteStatus(FastbootResult::FAIL, ret.message);
}
return device->WriteStatus(FastbootResult::OKAY, ret.message);
}
bool DownloadHandler(FastbootDevice* device, const std::vector<std::string>& args) {
if (args.size() < 2) {
return device->WriteStatus(FastbootResult::FAIL, "size argument unspecified");

View File

@ -45,3 +45,4 @@ bool CreatePartitionHandler(FastbootDevice* device, const std::vector<std::strin
bool DeletePartitionHandler(FastbootDevice* device, const std::vector<std::string>& args);
bool ResizePartitionHandler(FastbootDevice* device, const std::vector<std::string>& args);
bool UpdateSuperHandler(FastbootDevice* device, const std::vector<std::string>& args);
bool OemCmdHandler(FastbootDevice* device, const std::vector<std::string>& args);

View File

@ -48,6 +48,7 @@ FastbootDevice::FastbootDevice()
{FB_CMD_DELETE_PARTITION, DeletePartitionHandler},
{FB_CMD_RESIZE_PARTITION, ResizePartitionHandler},
{FB_CMD_UPDATE_SUPER, UpdateSuperHandler},
{FB_CMD_OEM, OemCmdHandler},
}),
transport_(std::make_unique<ClientUsbTransport>()),
boot_control_hal_(IBootControl::getService()),
@ -120,10 +121,20 @@ void FastbootDevice::ExecuteCommands() {
command[bytes_read] = '\0';
LOG(INFO) << "Fastboot command: " << command;
auto args = android::base::Split(command, ":");
auto found_command = kCommandMap.find(args[0]);
std::vector<std::string> args;
std::string cmd_name;
if (android::base::StartsWith(command, "oem ")) {
args = {command};
cmd_name = "oem";
} else {
args = android::base::Split(command, ":");
cmd_name = args[0];
}
auto found_command = kCommandMap.find(cmd_name);
if (found_command == kCommandMap.end()) {
WriteStatus(FastbootResult::FAIL, "Unrecognized command");
WriteStatus(FastbootResult::FAIL, "Unrecognized command " + args[0]);
continue;
}
if (!found_command->second(this, args)) {