Pass OEM commands to HAL
Bug: 78793464 Bug: 79480454 Test: fastboot oem command Change-Id: Ibaabef6ea725857102f7531997fcff2a1dbdc1ca
This commit is contained in:
parent
a9da5ad37a
commit
993b4edb0f
|
@ -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"
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in New Issue