Adding GNSS Model & Version String
Bug: 38003769 Test: Device code & VTS builds, runs. Todo in later phase: java connection. Change-Id: Iddb2f25b18aba800e4f077d72c0452a417f78576
This commit is contained in:
parent
bbeae6fe23
commit
4d3c8e2c77
9 changed files with 381 additions and 0 deletions
19
gnss/1.1/Android.bp
Normal file
19
gnss/1.1/Android.bp
Normal file
|
@ -0,0 +1,19 @@
|
|||
// This file is autogenerated by hidl-gen -Landroidbp.
|
||||
|
||||
hidl_interface {
|
||||
name: "android.hardware.gnss@1.1",
|
||||
root: "android.hardware",
|
||||
vndk: {
|
||||
enabled: true,
|
||||
},
|
||||
srcs: [
|
||||
"IGnss.hal",
|
||||
"IGnssCallback.hal",
|
||||
],
|
||||
interfaces: [
|
||||
"android.hardware.gnss@1.0",
|
||||
"android.hidl.base@1.0",
|
||||
],
|
||||
gen_java: true,
|
||||
}
|
||||
|
34
gnss/1.1/IGnss.hal
Normal file
34
gnss/1.1/IGnss.hal
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (C) 2017 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.gnss@1.1;
|
||||
|
||||
import @1.0::IGnss;
|
||||
|
||||
import IGnssCallback;
|
||||
|
||||
/** Represents the standard GNSS (Global Navigation Satellite System) interface. */
|
||||
interface IGnss extends @1.0::IGnss {
|
||||
/**
|
||||
* Opens the interface and provides the callback routines
|
||||
* to the implementation of this interface.
|
||||
*
|
||||
* @param callback Callback interface for IGnss.
|
||||
*
|
||||
* @return success Returns true on success.
|
||||
*/
|
||||
setCallback_1_1(IGnssCallback callback) generates (bool success);
|
||||
};
|
38
gnss/1.1/IGnssCallback.hal
Normal file
38
gnss/1.1/IGnssCallback.hal
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright (C) 2017 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.gnss@1.1;
|
||||
|
||||
import @1.0::IGnssCallback;
|
||||
|
||||
/**
|
||||
* The interface is required for the HAL to communicate certain information
|
||||
* like status and location info back to the platform, the platform implements
|
||||
* the interfaces and passes a handle to the HAL.
|
||||
*/
|
||||
interface IGnssCallback extends @1.0::IGnssCallback {
|
||||
/**
|
||||
* Callback to inform framework of the GNSS HAL implementation model & version name.
|
||||
*
|
||||
* This is a user-visible string that identifies the model and version of the GNSS HAL.
|
||||
* For example "ABC Co., Baseband Part 1234, RF Part 567, Software version 3.14.159"
|
||||
*
|
||||
* This must be called in response to IGnss::setCallback
|
||||
*
|
||||
* @param name String providing the name of the GNSS HAL implementation
|
||||
*/
|
||||
gnssNameCb(string name);
|
||||
};
|
6
gnss/1.1/vts/OWNERS
Normal file
6
gnss/1.1/vts/OWNERS
Normal file
|
@ -0,0 +1,6 @@
|
|||
wyattriley@google.com
|
||||
gomo@google.com
|
||||
smalkos@google.com
|
||||
|
||||
# VTS team
|
||||
yim@google.com
|
29
gnss/1.1/vts/functional/Android.bp
Normal file
29
gnss/1.1/vts/functional/Android.bp
Normal file
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// Copyright (C) 2017 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: "VtsHalGnssV1_1TargetTest",
|
||||
defaults: ["VtsHalTargetTestDefaults"],
|
||||
srcs: [
|
||||
"gnss_hal_test.cpp",
|
||||
"gnss_hal_test_cases.cpp",
|
||||
"VtsHalGnssV1_1TargetTest.cpp",
|
||||
],
|
||||
static_libs: [
|
||||
"android.hardware.gnss@1.0",
|
||||
"android.hardware.gnss@1.1",
|
||||
],
|
||||
}
|
24
gnss/1.1/vts/functional/VtsHalGnssV1_1TargetTest.cpp
Normal file
24
gnss/1.1/vts/functional/VtsHalGnssV1_1TargetTest.cpp
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (C) 2017 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 <VtsHalHidlTargetTestBase.h>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
int status = RUN_ALL_TESTS();
|
||||
ALOGI("Test result = %d", status);
|
||||
return status;
|
||||
}
|
76
gnss/1.1/vts/functional/gnss_hal_test.cpp
Normal file
76
gnss/1.1/vts/functional/gnss_hal_test.cpp
Normal file
|
@ -0,0 +1,76 @@
|
|||
/*
|
||||
* Copyright (C) 2017 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 "VtsHalGnssV1_1TargetTest"
|
||||
#include <log/log.h>
|
||||
|
||||
#include <gnss_hal_test.h>
|
||||
|
||||
#include <chrono>
|
||||
|
||||
// Implementations for the main test class for GNSS HAL
|
||||
GnssHalTest::GnssHalTest() : info_called_count_(0), name_called_count_(0), notify_count_(0) {}
|
||||
|
||||
void GnssHalTest::SetUp() {
|
||||
gnss_hal_ = ::testing::VtsHalHidlTargetTestBase::getService<IGnss>();
|
||||
ASSERT_NE(gnss_hal_, nullptr);
|
||||
}
|
||||
|
||||
void GnssHalTest::TearDown() {
|
||||
if (gnss_hal_ != nullptr) {
|
||||
gnss_hal_->cleanup();
|
||||
}
|
||||
if (notify_count_ > 0) {
|
||||
ALOGW("%d unprocessed callbacks discarded", notify_count_);
|
||||
}
|
||||
}
|
||||
|
||||
void GnssHalTest::notify() {
|
||||
std::unique_lock<std::mutex> lock(mtx_);
|
||||
notify_count_++;
|
||||
cv_.notify_one();
|
||||
}
|
||||
|
||||
std::cv_status GnssHalTest::wait(int timeoutSeconds) {
|
||||
std::unique_lock<std::mutex> lock(mtx_);
|
||||
|
||||
auto status = std::cv_status::no_timeout;
|
||||
while (notify_count_ == 0) {
|
||||
status = cv_.wait_for(lock, std::chrono::seconds(timeoutSeconds));
|
||||
if (status == std::cv_status::timeout) return status;
|
||||
}
|
||||
notify_count_--;
|
||||
return status;
|
||||
}
|
||||
|
||||
// Actual (test) callback handlers
|
||||
Return<void> GnssHalTest::GnssCallback::gnssSetSystemInfoCb(
|
||||
const IGnssCallback::GnssSystemInfo& info) {
|
||||
ALOGI("Info received, year %d", info.yearOfHw);
|
||||
parent_.info_called_count_++;
|
||||
parent_.last_info_ = info;
|
||||
parent_.notify();
|
||||
return Void();
|
||||
}
|
||||
|
||||
// Actual (test) callback handlers
|
||||
Return<void> GnssHalTest::GnssCallback::gnssNameCb(const android::hardware::hidl_string& name) {
|
||||
ALOGI("Name received: %s", name.c_str());
|
||||
parent_.name_called_count_++;
|
||||
parent_.last_name_ = name;
|
||||
parent_.notify();
|
||||
return Void();
|
||||
}
|
100
gnss/1.1/vts/functional/gnss_hal_test.h
Normal file
100
gnss/1.1/vts/functional/gnss_hal_test.h
Normal file
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright (C) 2017 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 GNSS_HAL_TEST_H_
|
||||
#define GNSS_HAL_TEST_H_
|
||||
|
||||
#include <android/hardware/gnss/1.1/IGnss.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
|
||||
using android::hardware::Return;
|
||||
using android::hardware::Void;
|
||||
|
||||
using android::hardware::gnss::V1_0::GnssLocation;
|
||||
|
||||
using android::hardware::gnss::V1_1::IGnss;
|
||||
using android::hardware::gnss::V1_1::IGnssCallback;
|
||||
|
||||
using android::sp;
|
||||
|
||||
// The main test class for GNSS HAL.
|
||||
class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
public:
|
||||
GnssHalTest();
|
||||
|
||||
virtual void SetUp() override;
|
||||
|
||||
virtual void TearDown() override;
|
||||
|
||||
/* Used as a mechanism to inform the test that a callback has occurred */
|
||||
void notify();
|
||||
|
||||
/* Test code calls this function to wait for a callback */
|
||||
std::cv_status wait(int timeoutSeconds);
|
||||
|
||||
/* Callback class for data & Event. */
|
||||
class GnssCallback : public IGnssCallback {
|
||||
public:
|
||||
GnssHalTest& parent_;
|
||||
|
||||
GnssCallback(GnssHalTest& parent) : parent_(parent){};
|
||||
|
||||
virtual ~GnssCallback() = default;
|
||||
|
||||
// Dummy callback handlers
|
||||
Return<void> gnssStatusCb(const IGnssCallback::GnssStatusValue /* status */) override {
|
||||
return Void();
|
||||
}
|
||||
Return<void> gnssSvStatusCb(const IGnssCallback::GnssSvStatus& /* svStatus */) override {
|
||||
return Void();
|
||||
}
|
||||
Return<void> gnssNmeaCb(int64_t /* timestamp */,
|
||||
const android::hardware::hidl_string& /* nmea */) override {
|
||||
return Void();
|
||||
}
|
||||
Return<void> gnssAcquireWakelockCb() override { return Void(); }
|
||||
Return<void> gnssReleaseWakelockCb() override { return Void(); }
|
||||
Return<void> gnssRequestTimeCb() override { return Void(); }
|
||||
Return<void> gnssLocationCb(const GnssLocation& /* location */) override { return Void(); }
|
||||
Return<void> gnssSetCapabilitesCb(uint32_t /* capabilities */) override { return Void(); }
|
||||
// Actual (test) callback handlers
|
||||
Return<void> gnssSetSystemInfoCb(const IGnssCallback::GnssSystemInfo& info) override;
|
||||
Return<void> gnssNameCb(const android::hardware::hidl_string& name) override;
|
||||
};
|
||||
|
||||
sp<IGnss> gnss_hal_; // GNSS HAL to call into
|
||||
sp<IGnssCallback> gnss_cb_; // Primary callback interface
|
||||
|
||||
/* Count of calls to set the following items, and the latest item (used by
|
||||
* test.)
|
||||
*/
|
||||
int info_called_count_;
|
||||
IGnssCallback::GnssSystemInfo last_info_;
|
||||
|
||||
int name_called_count_;
|
||||
android::hardware::hidl_string last_name_;
|
||||
|
||||
private:
|
||||
std::mutex mtx_;
|
||||
std::condition_variable cv_;
|
||||
int notify_count_;
|
||||
};
|
||||
|
||||
#endif // GNSS_HAL_TEST_H_
|
55
gnss/1.1/vts/functional/gnss_hal_test_cases.cpp
Normal file
55
gnss/1.1/vts/functional/gnss_hal_test_cases.cpp
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (C) 2017 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 <gnss_hal_test.h>
|
||||
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
|
||||
#define TIMEOUT_SEC 2 // for basic commands/responses
|
||||
|
||||
/*
|
||||
* SetupTeardownCreateCleanup:
|
||||
* Requests the gnss HAL then calls cleanup
|
||||
*
|
||||
* Empty test fixture to verify basic Setup & Teardown
|
||||
*/
|
||||
TEST_F(GnssHalTest, SetupTeardownCreateCleanup) {}
|
||||
|
||||
/*
|
||||
* SetCallbackResponses:
|
||||
* Sets up the callback, awaits the info & name
|
||||
*/
|
||||
TEST_F(GnssHalTest, SetCallbackResponses) {
|
||||
gnss_cb_ = new GnssCallback(*this);
|
||||
ASSERT_NE(gnss_cb_, nullptr);
|
||||
|
||||
auto result = gnss_hal_->setCallback_1_1(gnss_cb_);
|
||||
if (!result.isOk()) {
|
||||
ALOGE("result of failed setCallback %s", result.description().c_str());
|
||||
}
|
||||
|
||||
ASSERT_TRUE(result.isOk());
|
||||
ASSERT_TRUE(result);
|
||||
|
||||
/*
|
||||
* Both name and systemInfo callbacks should trigger
|
||||
*/
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait(TIMEOUT_SEC));
|
||||
EXPECT_EQ(std::cv_status::no_timeout, wait(TIMEOUT_SEC));
|
||||
|
||||
EXPECT_EQ(info_called_count_, 1);
|
||||
EXPECT_EQ(name_called_count_, 1);
|
||||
}
|
Loading…
Reference in a new issue