Merge changes from topic "contexthub_hal_1_2"

* changes:
  Add VTS tests for Context Hub HAL 1.2
  Adds default (mock) Context Hub HAL 1.2 impl
  Adds Context Hub HAL v1.2
This commit is contained in:
TreeHugger Robot
2020-10-08 22:15:32 +00:00
committed by Android (Google) Code Review
20 changed files with 536 additions and 97 deletions

View File

@@ -177,7 +177,7 @@
</hal>
<hal format="hidl" optional="true">
<name>android.hardware.contexthub</name>
<version>1.0-1</version>
<version>1.0-2</version>
<interface>
<name>IContexthub</name>
<instance>default</instance>

View File

@@ -38,5 +38,8 @@ cc_binary {
"liblog",
"libutils",
],
header_libs: [
"android.hardware.contexthub@1.X-common-impl",
],
vintf_fragments: ["android.hardware.contexthub@1.1.xml"],
}

View File

@@ -23,81 +23,6 @@ namespace contexthub {
namespace V1_1 {
namespace implementation {
using ::android::hardware::contexthub::V1_0::ContextHub;
using ::android::hardware::contexthub::V1_0::HubAppInfo;
using ::android::hardware::contexthub::V1_0::Result;
namespace {
constexpr uint32_t kMockHubId = 0;
} // anonymous namespace
Return<void> Contexthub::getHubs(getHubs_cb _hidl_cb) {
ContextHub hub = {};
hub.name = "Mock Context Hub";
hub.vendor = "AOSP";
hub.toolchain = "n/a";
hub.platformVersion = 1;
hub.toolchainVersion = 1;
hub.hubId = kMockHubId;
hub.peakMips = 1;
hub.peakPowerDrawMw = 1;
hub.maxSupportedMsgLen = 4096;
hub.chrePlatformId = UINT64_C(0x476f6f6754000000);
hub.chreApiMajorVersion = 1;
hub.chreApiMinorVersion = 4;
// Report a single mock hub
std::vector<ContextHub> hubs;
hubs.push_back(hub);
_hidl_cb(hubs);
return Void();
}
Return<Result> Contexthub::registerCallback(uint32_t hubId, const sp<IContexthubCallback>& cb) {
if (hubId == kMockHubId) {
mCallback = cb;
return Result::OK;
}
return Result::BAD_PARAMS;
}
// We don't expose any nanoapps, therefore all nanoapp-related API calls return with BAD_PARAMS
Return<Result> Contexthub::sendMessageToHub(uint32_t /*hubId*/, const ContextHubMsg& /*msg*/) {
return Result::BAD_PARAMS;
}
Return<Result> Contexthub::loadNanoApp(uint32_t /*hubId*/, const NanoAppBinary& /*appBinary*/,
uint32_t /*transactionId*/) {
return Result::BAD_PARAMS;
}
Return<Result> Contexthub::unloadNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/,
uint32_t /*transactionId*/) {
return Result::BAD_PARAMS;
}
Return<Result> Contexthub::enableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/,
uint32_t /*transactionId*/) {
return Result::BAD_PARAMS;
}
Return<Result> Contexthub::disableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/,
uint32_t /*transactionId*/) {
return Result::BAD_PARAMS;
}
Return<Result> Contexthub::queryApps(uint32_t hubId) {
if (hubId == kMockHubId && mCallback != nullptr) {
std::vector<HubAppInfo> nanoapps;
mCallback->handleAppsInfo(nanoapps);
return Result::OK;
}
return Result::BAD_PARAMS;
}
Return<void> Contexthub::onSettingChanged(Setting /*setting*/, SettingValue /*newValue*/) {
return Void();
}

View File

@@ -15,6 +15,8 @@
*/
#pragma once
#include "ContextHub.h"
#include <android/hardware/contexthub/1.1/IContexthub.h>
namespace android {
@@ -23,30 +25,11 @@ namespace contexthub {
namespace V1_1 {
namespace implementation {
class Contexthub : public V1_1::IContexthub {
using ContextHubMsg = ::android::hardware::contexthub::V1_0::ContextHubMsg;
using IContexthubCallback = ::android::hardware::contexthub::V1_0::IContexthubCallback;
using NanoAppBinary = ::android::hardware::contexthub::V1_0::NanoAppBinary;
using Result = ::android::hardware::contexthub::V1_0::Result;
class Contexthub
: public ::android::hardware::contexthub::V1_X::implementation::ContextHub<IContexthub> {
public:
// Methods from V1_0::IContexthub
Return<void> getHubs(getHubs_cb _hidl_cb) override;
Return<Result> registerCallback(uint32_t hubId,
const ::android::sp<IContexthubCallback>& cb) override;
Return<Result> sendMessageToHub(uint32_t hubId, const ContextHubMsg& msg) override;
Return<Result> loadNanoApp(uint32_t hubId, const NanoAppBinary& appBinary,
uint32_t transactionId) override;
Return<Result> unloadNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId) override;
Return<Result> enableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId) override;
Return<Result> disableNanoApp(uint32_t hubId, uint64_t appId, uint32_t transactionId) override;
Return<Result> queryApps(uint32_t hubId) override;
// Methods from V1_1::IContexthub
Return<void> onSettingChanged(Setting setting, SettingValue newValue) override;
private:
sp<IContexthubCallback> mCallback;
};
} // namespace implementation

16
contexthub/1.2/Android.bp Normal file
View File

@@ -0,0 +1,16 @@
// This file is autogenerated by hidl-gen -Landroidbp.
hidl_interface {
name: "android.hardware.contexthub@1.2",
root: "android.hardware",
srcs: [
"types.hal",
"IContexthub.hal",
],
interfaces: [
"android.hardware.contexthub@1.0",
"android.hardware.contexthub@1.1",
"android.hidl.base@1.0",
],
gen_java: true,
}

View File

@@ -0,0 +1,31 @@
/*
* Copyright (C) 2020 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.contexthub@1.2;
import @1.1::IContexthub;
import @1.1::SettingValue;
interface IContexthub extends @1.1::IContexthub {
/**
* Notification sent by the framework to indicate that the user
* has changed a setting.
*
* @param setting User setting that has been modified.
* @param newValue The update value of the user setting.
*/
onSettingChanged_1_2(Setting setting, @1.1::SettingValue newValue);
};

View File

@@ -0,0 +1,46 @@
/*
* Copyright (C) 2020 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.
*/
cc_binary {
name: "android.hardware.contexthub@1.2-service.mock",
defaults: ["hidl_defaults"],
vendor: true,
relative_install_path: "hw",
init_rc: ["android.hardware.contexthub@1.2-service.rc"],
srcs: [
"Contexthub.cpp",
"service.cpp",
],
cflags: [
"-Wall",
"-Werror",
],
shared_libs: [
"android.hardware.contexthub@1.0",
"android.hardware.contexthub@1.1",
"android.hardware.contexthub@1.2",
"libbase",
"libcutils",
"libhardware",
"libhidlbase",
"liblog",
"libutils",
],
header_libs: [
"android.hardware.contexthub@1.X-common-impl",
],
vintf_fragments: ["android.hardware.contexthub@1.2.xml"],
}

View File

@@ -0,0 +1,38 @@
/*
* Copyright (C) 2020 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 "Contexthub.h"
#include <vector>
namespace android {
namespace hardware {
namespace contexthub {
namespace V1_2 {
namespace implementation {
Return<void> Contexthub::onSettingChanged(SettingV1_1 /*setting*/, SettingValue /*newValue*/) {
return Void();
}
Return<void> Contexthub::onSettingChanged_1_2(Setting /*setting*/, SettingValue /*newValue*/) {
return Void();
}
} // namespace implementation
} // namespace V1_2
} // namespace contexthub
} // namespace hardware
} // namespace android

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2020 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 "ContextHub.h"
#include <android/hardware/contexthub/1.2/IContexthub.h>
namespace android {
namespace hardware {
namespace contexthub {
namespace V1_2 {
namespace implementation {
class Contexthub
: public ::android::hardware::contexthub::V1_X::implementation::ContextHub<IContexthub> {
using SettingValue = ::android::hardware::contexthub::V1_1::SettingValue;
using SettingV1_1 = ::android::hardware::contexthub::V1_1::Setting;
public:
// Methods from V1_1::IContexthub
Return<void> onSettingChanged(SettingV1_1 setting, SettingValue newValue) override;
// Methods from V1_2::IContexthub
Return<void> onSettingChanged_1_2(Setting setting, SettingValue newValue) override;
};
} // namespace implementation
} // namespace V1_2
} // namespace contexthub
} // namespace hardware
} // namespace android

View File

@@ -0,0 +1,3 @@
arthuri@google.com
bduddie@google.com
stange@google.com

View File

@@ -0,0 +1,7 @@
service vendor.contexthub-hal-1.2-mock /vendor/bin/hw/android.hardware.contexthub@1.2-service.mock
interface android.hardware.contexthub@1.0::IContexthub default
interface android.hardware.contexthub@1.1::IContexthub default
interface android.hardware.contexthub@1.2::IContexthub default
class hal
user context_hub
group context_hub

View File

@@ -0,0 +1,11 @@
<manifest version="1.0" type="device">
<hal format="hidl">
<name>android.hardware.contexthub</name>
<transport>hwbinder</transport>
<version>1.2</version>
<interface>
<name>IContexthub</name>
<instance>default</instance>
</interface>
</hal>
</manifest>

View File

@@ -0,0 +1,42 @@
/*
* Copyright (C) 2020 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.
*/
#define LOG_TAG "android.hardware.contexthub@1.2-service"
#include <android/hardware/contexthub/1.2/IContexthub.h>
#include <hidl/HidlTransportSupport.h>
#include <log/log.h>
#include <utils/StrongPointer.h>
#include "Contexthub.h"
using ::android::hardware::configureRpcThreadpool;
using ::android::hardware::joinRpcThreadpool;
using ::android::hardware::contexthub::V1_2::IContexthub;
using ::android::hardware::contexthub::V1_2::implementation::Contexthub;
int main() {
configureRpcThreadpool(1, true /* callerWillJoin */);
::android::sp<IContexthub> contexthub = new Contexthub();
if (contexthub->registerAsService() != ::android::OK) {
ALOGE("Failed to register Contexthub HAL instance");
return 1;
}
joinRpcThreadpool();
ALOGE("Service exited");
return 1;
}

34
contexthub/1.2/types.hal Normal file
View File

@@ -0,0 +1,34 @@
/*
* Copyright (C) 2020 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.contexthub@1.2;
import @1.1::Setting;
/**
* Used to indicate the type of user setting that has changed.
*/
enum Setting : @1.1::Setting {
/**
* Indicates that the WiFi capabilities can be used in CHRE. This setting
* follows the overall availability of WiFi-related functionality within
* the Android framework, for example if WiFi is disabled for connectivity
* purposes but is enabled for location purposes (scanning), then
* WIFI_AVAILABLE is enabled.
*/
WIFI_AVAILABLE,
AIRPLANE_MODE,
};

View File

@@ -0,0 +1,31 @@
//
// Copyright (C) 2020 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.
//
cc_test {
name: "VtsHalContexthubV1_2TargetTest",
defaults: ["VtsHalTargetTestDefaults"],
srcs: ["VtsHalContexthubV1_2TargetTest.cpp"],
static_libs: [
"android.hardware.contexthub@1.0",
"android.hardware.contexthub@1.1",
"android.hardware.contexthub@1.2",
"VtsHalContexthubUtils",
],
test_suites: [
"general-tests",
"vts",
],
}

View File

@@ -0,0 +1,8 @@
#Context Hub team
arthuri@google.com
bduddie@google.com
stange@google.com
#VTS team
dshi@google.com
trong@google.com

View File

@@ -0,0 +1,69 @@
/*
* Copyright (C) 2020 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.
*/
#define LOG_TAG "contexthub_hidl_hal_test"
#include "ContexthubCallbackBase.h"
#include "ContexthubHidlTestBase.h"
#include "VtsHalContexthubUtils.h"
#include <android-base/logging.h>
#include <android/hardware/contexthub/1.0/IContexthub.h>
#include <android/hardware/contexthub/1.1/IContexthub.h>
#include <android/hardware/contexthub/1.2/IContexthub.h>
#include <android/log.h>
#include <gtest/gtest.h>
#include <hidl/GtestPrinter.h>
#include <hidl/ServiceManagement.h>
#include <log/log.h>
#include <cinttypes>
using ::android::hardware::contexthub::V1_1::SettingValue;
using ::android::hardware::contexthub::V1_2::IContexthub;
using ::android::hardware::contexthub::V1_2::Setting;
using ::android::hardware::contexthub::vts_utils::ContexthubCallbackBase;
using ::android::hardware::contexthub::vts_utils::ContexthubHidlTestBase;
using ::android::hardware::contexthub::vts_utils::getHalAndHubIdList;
namespace {
const std::vector<std::tuple<std::string, std::string>> kTestParameters =
getHalAndHubIdList<IContexthub>();
class ContexthubHidlTest : public ContexthubHidlTestBase<IContexthub> {};
// In VTS, we only test that sending the values doesn't cause things to blow up - other test
// suites verify the expected E2E behavior in CHRE
TEST_P(ContexthubHidlTest, TestOnWifiSettingChanged) {
ASSERT_OK(registerCallback(new ContexthubCallbackBase()));
hubApi->onSettingChanged_1_2(Setting::WIFI_AVAILABLE, SettingValue::DISABLED);
hubApi->onSettingChanged_1_2(Setting::WIFI_AVAILABLE, SettingValue::ENABLED);
ASSERT_OK(registerCallback(nullptr));
}
TEST_P(ContexthubHidlTest, TestOnAirplaneModeSettingChanged) {
ASSERT_OK(registerCallback(new ContexthubCallbackBase()));
hubApi->onSettingChanged_1_2(Setting::AIRPLANE_MODE, SettingValue::DISABLED);
hubApi->onSettingChanged_1_2(Setting::AIRPLANE_MODE, SettingValue::ENABLED);
ASSERT_OK(registerCallback(nullptr));
}
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ContexthubHidlTest);
INSTANTIATE_TEST_SUITE_P(HubIdSpecificTests, ContexthubHidlTest, testing::ValuesIn(kTestParameters),
android::hardware::PrintInstanceTupleNameToString<>);
} // anonymous namespace

View File

@@ -0,0 +1,28 @@
//
// Copyright (C) 2020 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.
cc_library_headers {
name: "android.hardware.contexthub@1.X-common-impl",
vendor_available: true,
defaults: ["hidl_defaults"],
export_include_dirs: ["."],
shared_libs: [
"android.hardware.contexthub@1.0",
"libbinder",
"libcutils",
"libhidlbase",
"libutils",
],
}

View File

@@ -0,0 +1,117 @@
/*
* Copyright (C) 2020 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.
*/
#ifndef ANDROID_HARDWARE_CONTEXTHUB_V1_X_CONTEXTHUB_H
#define ANDROID_HARDWARE_CONTEXTHUB_V1_X_CONTEXTHUB_H
#include <android/hardware/contexthub/1.0/IContexthub.h>
#include <android/hardware/contexthub/1.0/types.h>
#include <hidl/Status.h>
namespace android {
namespace hardware {
namespace contexthub {
namespace V1_X {
namespace implementation {
template <class IContextHubInterface>
struct ContextHub : public IContextHubInterface {
using ContextHubMsg = ::android::hardware::contexthub::V1_0::ContextHubMsg;
using HubAppInfo = ::android::hardware::contexthub::V1_0::HubAppInfo;
using IContexthubCallback = ::android::hardware::contexthub::V1_0::IContexthubCallback;
using NanoAppBinary = ::android::hardware::contexthub::V1_0::NanoAppBinary;
using Result = ::android::hardware::contexthub::V1_0::Result;
using getHubs_cb = ::android::hardware::contexthub::V1_0::IContexthub::getHubs_cb;
public:
Return<void> getHubs(getHubs_cb _hidl_cb) override {
::android::hardware::contexthub::V1_0::ContextHub hub = {};
hub.name = "Mock Context Hub";
hub.vendor = "AOSP";
hub.toolchain = "n/a";
hub.platformVersion = 1;
hub.toolchainVersion = 1;
hub.hubId = kMockHubId;
hub.peakMips = 1;
hub.peakPowerDrawMw = 1;
hub.maxSupportedMsgLen = 4096;
hub.chrePlatformId = UINT64_C(0x476f6f6754000000);
hub.chreApiMajorVersion = 1;
hub.chreApiMinorVersion = 4;
// Report a single mock hub
std::vector<::android::hardware::contexthub::V1_0::ContextHub> hubs;
hubs.push_back(hub);
_hidl_cb(hubs);
return Void();
}
Return<Result> registerCallback(uint32_t hubId, const sp<IContexthubCallback>& cb) override {
if (hubId == kMockHubId) {
mCallback = cb;
return Result::OK;
}
return Result::BAD_PARAMS;
}
// We don't expose any nanoapps, therefore all nanoapp-related API calls return with BAD_PARAMS
Return<Result> sendMessageToHub(uint32_t /*hubId*/, const ContextHubMsg& /*msg*/) override {
return Result::BAD_PARAMS;
}
Return<Result> loadNanoApp(uint32_t /*hubId*/, const NanoAppBinary& /*appBinary*/,
uint32_t /*transactionId*/) override {
return Result::BAD_PARAMS;
}
Return<Result> unloadNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/,
uint32_t /*transactionId*/) override {
return Result::BAD_PARAMS;
}
Return<Result> enableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/,
uint32_t /*transactionId*/) override {
return Result::BAD_PARAMS;
}
Return<Result> disableNanoApp(uint32_t /*hubId*/, uint64_t /*appId*/,
uint32_t /*transactionId*/) override {
return Result::BAD_PARAMS;
}
Return<Result> queryApps(uint32_t hubId) override {
if (hubId == kMockHubId && mCallback != nullptr) {
std::vector<HubAppInfo> nanoapps;
mCallback->handleAppsInfo(nanoapps);
return Result::OK;
}
return Result::BAD_PARAMS;
}
private:
static constexpr uint32_t kMockHubId = 0;
sp<IContexthubCallback> mCallback;
};
} // namespace implementation
} // namespace V1_X
} // namespace contexthub
} // namespace hardware
} // namespace android
#endif // ANDROID_HARDWARE_CONTEXTHUB_V1_X_CONTEXTHUB_H

View File

@@ -778,6 +778,8 @@ cd84ab19c590e0e73dd2307b591a3093ee18147ef95e6d5418644463a6620076 android.hardwar
# HALs released in Android S
# NOTE: waiting to freeze HALs until later in the release
# NOTE: new HALs are recommended to be in AIDL
6e64b33f1b720b66b0deb5e08dee37a99deaa94e2e9ebf7806703cabab56e21d android.hardware.contexthub@1.2::IContexthub
3fb83f4539cab2c7bf9fdbecf7265d1c1dd6e8de9694046fe512b493c127ccea android.hardware.contexthub@1.2::types
57d183b10b13ec0a8e542c0b3d61991ae541c60e85dbbc5499bb21dfd068cbb8 android.hardware.wifi.supplicant@1.4::types
17818b6b1952a75e4364ae82c534b9d2f5c0a9765a56256b16faa5a5cf45d3a8 android.hardware.wifi.supplicant@1.4::ISupplicant
8342b5f6ec8f48ad2b741128aede010995d0b5709257b7ec09bb469b4f61ef1a android.hardware.wifi.supplicant@1.4::ISupplicantStaIface