Merge "Fastboot: Convert Fastboot HIDL HAL to AIDL" am: 59f7b08bc9 am: 968def1a8c am: 4b4072bc38

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2237803

Change-Id: Ie3c1dc12b66e66afe4a540224bceeafb848d0f00
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Sandeep Dhavale
2022-10-06 23:36:07 +00:00
committed by Automerger Merge Worker
9 changed files with 399 additions and 0 deletions

View File

@@ -68,6 +68,8 @@ bool ShouldCheckMissingHalsInFcm(const std::string& package) {
// does not depend on this HAL, hence it is not declared in any manifests or matrices.
"android.hardware.fastboot@1.0",
"android.hardware.fastboot@1.1",
// Fastboot AIDL
"android.hardware.fastboot",
// Deprecated HALs.
// HIDL

38
fastboot/aidl/Android.bp Normal file
View File

@@ -0,0 +1,38 @@
// Copyright (C) 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "hardware_interfaces_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: ["hardware_interfaces_license"],
}
aidl_interface {
name: "android.hardware.fastboot",
vendor_available: true,
recovery_available: true,
srcs: ["android/hardware/fastboot/*.aidl"],
stability: "vintf",
backend: {
cpp: {
enabled: false,
},
java: {
enabled: false,
},
},
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.fastboot;
@Backing(type="byte") @VintfStability
enum FileSystemType {
EXT4 = 0,
F2FS = 1,
RAW = 2,
}

View File

@@ -0,0 +1,44 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
///////////////////////////////////////////////////////////////////////////////
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
// the interface (from the latest frozen version), the build system will
// prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.fastboot;
@VintfStability
interface IFastboot {
String doOemCommand(in String oemCmd);
void doOemSpecificErase();
int getBatteryVoltageFlashingThreshold();
boolean getOffModeChargeState();
android.hardware.fastboot.FileSystemType getPartitionType(in String partitionName);
String getVariant();
const int FAILURE_UNKNOWN = 1;
}

View File

@@ -0,0 +1,34 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.fastboot;
@VintfStability
@Backing(type="byte")
enum FileSystemType {
/**
* Fourth extended file system.
*/
EXT4,
/**
* Flash Friendly File System.
*/
F2FS,
/**
* Raw file system.
*/
RAW,
}

View File

@@ -0,0 +1,94 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.hardware.fastboot;
import android.hardware.fastboot.FileSystemType;
/**
* IFastboot interface implements vendor specific fastboot commands.
*/
@VintfStability
interface IFastboot {
/**
* Status code for function.
* Operation failed due to unknown reason.
*/
const int FAILURE_UNKNOWN = 1;
/**
* Executes a fastboot OEM command.
*
* @param oemCmd The oem command that is passed to the fastboot HAL.
* @return optional String if the operation is successful and output is expected
* for the command.
* @throws :
* - EX_ILLEGAL_ARGUMENT for bad arguments.
* - EX_UNSUPPORTED_OPERATION for unsupported commands.
* - EX_SERVICE_SPECIFIC with status FAILURE_UNKNOWN for other errors.
*/
String doOemCommand(in String oemCmd);
/**
* Executes an OEM specific erase after fastboot erase userdata.
*
* @throws :
* - EX_UNSUPPORTED_OPERATION if it is not supported.
* - EX_SERVICE_SPECIFIC with status FAILURE_UNKNOWN for
* unknown error in oem specific command or other errors.
*/
void doOemSpecificErase();
/**
* Returns the minimum battery voltage required for flashing in mV.
*
* @return Minimum batterery voltage (in mV) required for flashing to
* be successful.
* @throws :
* - EX_SERVICE_SPECIFIC with status FAILURE_UNKNOWN if error.
*/
int getBatteryVoltageFlashingThreshold();
/**
* Returns whether off-mode-charging is enabled. If enabled, the device
* autoboots into a special mode when power is applied.
*
* @return Returns whether off-mode-charging is enabled.
* @throws :
* - EX_SERVICE_SPECIFIC with status FAILURE_UNKNOWN if error.
*/
boolean getOffModeChargeState();
/**
* Returns the file system type of the partition. Implementation is only
* required for physical partitions that need to be wiped and reformatted.
* @param in partitionName Name of the partition.
* @return Returns the file system type of the partition. Type can be ext4,
* f2fs or raw.
* @throws :
* - EX_SERVICE_SPECIFIC with status FAILURE_UNKNOWN if the partition
* is invalid or does not require reformatting.
*/
FileSystemType getPartitionType(in String partitionName);
/**
* Returns an OEM-defined string indicating the variant of the device, for
* example, US and ROW.
* @return Indicates the device variant.
* @throws :
* - EX_SERVICE_SPECIFIC with status FAILURE_UNKNOWN if error.
*/
String getVariant();
}

View File

@@ -0,0 +1,39 @@
//
// Copyright (C) 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package {
// See: http://go/android-license-faq
// A large-scale-change added 'default_applicable_licenses' to import
// all of the 'license_kinds' from "hardware_interfaces_license"
// to get the below license kinds:
// SPDX-license-identifier-Apache-2.0
default_applicable_licenses: ["hardware_interfaces_license"],
}
cc_library {
name: "android.hardware.fastboot-impl-mock",
recovery: true,
srcs: [
"Fastboot.cpp",
],
relative_install_path: "hw",
shared_libs: [
"libbase",
"libbinder_ndk",
"libutils",
"libcutils",
"android.hardware.fastboot-V1-ndk",
],
}

View File

@@ -0,0 +1,68 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "Fastboot.h"
using ndk::ScopedAStatus;
namespace aidl {
namespace android {
namespace hardware {
namespace fastboot {
ScopedAStatus Fastboot::getPartitionType(const std::string& in_partitionName,
FileSystemType* _aidl_return) {
if (in_partitionName.empty()) {
return ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
"Invalid partition name");
}
*_aidl_return = FileSystemType::RAW;
return ScopedAStatus::ok();
}
ScopedAStatus Fastboot::doOemCommand(const std::string& in_oemCmd, std::string* _aidl_return) {
*_aidl_return = "";
if (in_oemCmd.empty()) {
return ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT, "Invalid command");
}
return ScopedAStatus::fromExceptionCodeWithMessage(
EX_UNSUPPORTED_OPERATION, "Command not supported in default implementation");
}
ScopedAStatus Fastboot::getVariant(std::string* _aidl_return) {
*_aidl_return = "NA";
return ScopedAStatus::ok();
}
ScopedAStatus Fastboot::getOffModeChargeState(bool* _aidl_return) {
*_aidl_return = false;
return ScopedAStatus::ok();
}
ScopedAStatus Fastboot::getBatteryVoltageFlashingThreshold(int32_t* _aidl_return) {
*_aidl_return = 0;
return ScopedAStatus::ok();
}
ScopedAStatus Fastboot::doOemSpecificErase() {
return ScopedAStatus::fromExceptionCodeWithMessage(
EX_UNSUPPORTED_OPERATION, "Command not supported in default implementation");
}
} // namespace fastboot
} // namespace hardware
} // namespace android
} // namespace aidl

View File

@@ -0,0 +1,40 @@
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "aidl/android/hardware/fastboot/BnFastboot.h"
namespace aidl {
namespace android {
namespace hardware {
namespace fastboot {
class Fastboot : public BnFastboot {
::ndk::ScopedAStatus doOemCommand(const std::string& in_oemCmd,
std::string* _aidl_return) override;
::ndk::ScopedAStatus doOemSpecificErase() override;
::ndk::ScopedAStatus getBatteryVoltageFlashingThreshold(int32_t* _aidl_return) override;
::ndk::ScopedAStatus getOffModeChargeState(bool* _aidl_return) override;
::ndk::ScopedAStatus getPartitionType(
const std::string& in_partitionName,
::aidl::android::hardware::fastboot::FileSystemType* _aidl_return) override;
::ndk::ScopedAStatus getVariant(std::string* _aidl_return) override;
};
} // namespace fastboot
} // namespace hardware
} // namespace android
} // namespace aidl