Home | History | Annotate | Download | only in functional
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef GNSS_HAL_TEST_H_
     18 #define GNSS_HAL_TEST_H_
     19 
     20 #include <android/hardware/gnss/1.1/IGnss.h>
     21 
     22 #include <VtsHalHidlTargetTestBase.h>
     23 #include <VtsHalHidlTargetTestEnvBase.h>
     24 
     25 #include <condition_variable>
     26 #include <list>
     27 #include <mutex>
     28 
     29 using android::hardware::Return;
     30 using android::hardware::Void;
     31 
     32 using android::hardware::gnss::V1_0::GnssLocation;
     33 
     34 using android::hardware::gnss::V1_1::IGnss;
     35 using android::hardware::gnss::V1_1::IGnssCallback;
     36 using android::hardware::gnss::V1_0::GnssLocationFlags;
     37 
     38 using android::sp;
     39 
     40 #define TIMEOUT_SEC 2  // for basic commands/responses
     41 
     42 // Test environment for GNSS HIDL HAL.
     43 class GnssHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase {
     44    public:
     45     // get the test environment singleton
     46     static GnssHidlEnvironment* Instance() {
     47         static GnssHidlEnvironment* instance = new GnssHidlEnvironment;
     48         return instance;
     49     }
     50 
     51     virtual void registerTestServices() override { registerTestService<IGnss>(); }
     52 
     53    private:
     54     GnssHidlEnvironment() {}
     55 };
     56 
     57 // The main test class for GNSS HAL.
     58 class GnssHalTest : public ::testing::VtsHalHidlTargetTestBase {
     59    public:
     60     GnssHalTest();
     61 
     62     virtual void SetUp() override;
     63 
     64     virtual void TearDown() override;
     65 
     66     /* Used as a mechanism to inform the test that a callback has occurred */
     67     void notify();
     68 
     69     /* Test code calls this function to wait for a callback */
     70     std::cv_status wait(int timeout_seconds);
     71 
     72     /* Callback class for data & Event. */
     73     class GnssCallback : public IGnssCallback {
     74        public:
     75         GnssHalTest& parent_;
     76 
     77         GnssCallback(GnssHalTest& parent) : parent_(parent){};
     78 
     79         virtual ~GnssCallback() = default;
     80 
     81         // Dummy callback handlers
     82         Return<void> gnssStatusCb(const IGnssCallback::GnssStatusValue /* status */) override {
     83             return Void();
     84         }
     85         Return<void> gnssNmeaCb(int64_t /* timestamp */,
     86                                 const android::hardware::hidl_string& /* nmea */) override {
     87             return Void();
     88         }
     89         Return<void> gnssAcquireWakelockCb() override { return Void(); }
     90         Return<void> gnssReleaseWakelockCb() override { return Void(); }
     91         Return<void> gnssRequestLocationCb(bool /* independentFromGnss */) override {
     92             return Void();
     93         }
     94         Return<void> gnssRequestTimeCb() override { return Void(); }
     95         // Actual (test) callback handlers
     96         Return<void> gnssNameCb(const android::hardware::hidl_string& name) override;
     97         Return<void> gnssLocationCb(const GnssLocation& location) override;
     98         Return<void> gnssSetCapabilitesCb(uint32_t capabilities) override;
     99         Return<void> gnssSetSystemInfoCb(const IGnssCallback::GnssSystemInfo& info) override;
    100         Return<void> gnssSvStatusCb(const IGnssCallback::GnssSvStatus& svStatus) override;
    101     };
    102 
    103     /*
    104      * SetUpGnssCallback:
    105      *   Set GnssCallback and verify the result.
    106      */
    107     void SetUpGnssCallback();
    108 
    109     /*
    110      * StartAndGetSingleLocation:
    111      * Helper function to get one Location and check fields
    112      *
    113      * returns  true if a location was successfully generated
    114      */
    115     bool StartAndGetSingleLocation();
    116 
    117     /*
    118      * CheckLocation:
    119      *   Helper function to vet Location fields
    120      */
    121     void CheckLocation(GnssLocation& location, bool check_speed);
    122 
    123     /*
    124      * StartAndCheckLocations:
    125      *   Helper function to collect, and check a number of
    126      *   normal ~1Hz locations.
    127      *
    128      *   Note this leaves the Location request active, to enable Stop call vs. other call
    129      *   reordering tests.
    130      */
    131     void StartAndCheckLocations(int count);
    132 
    133     /*
    134      * StopAndClearLocations:
    135      * Helper function to stop locations, and clear any remaining notifications
    136      */
    137     void StopAndClearLocations();
    138 
    139     /*
    140      * SetPositionMode:
    141      * Helper function to set positioning mode and verify output
    142      */
    143     void SetPositionMode(const int min_interval_msec, const bool low_power_mode);
    144 
    145     sp<IGnss> gnss_hal_;         // GNSS HAL to call into
    146     sp<IGnssCallback> gnss_cb_;  // Primary callback interface
    147 
    148     /* Count of calls to set the following items, and the latest item (used by
    149      * test.)
    150      */
    151     int info_called_count_;
    152     IGnssCallback::GnssSystemInfo last_info_;
    153     uint32_t last_capabilities_;
    154     int capabilities_called_count_;
    155     int location_called_count_;
    156     GnssLocation last_location_;
    157     list<IGnssCallback::GnssSvStatus> list_gnss_sv_status_;
    158 
    159     int name_called_count_;
    160     android::hardware::hidl_string last_name_;
    161 
    162    private:
    163     std::mutex mtx_;
    164     std::condition_variable cv_;
    165     int notify_count_;
    166 };
    167 
    168 #endif  // GNSS_HAL_TEST_H_
    169