19823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq/*
29823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * Copyright (C) 2017 The Android Open Source Project
39823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq *
49823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * Licensed under the Apache License, Version 2.0 (the "License");
59823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * you may not use this file except in compliance with the License.
69823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * You may obtain a copy of the License at
79823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq *
89823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq *      http://www.apache.org/licenses/LICENSE-2.0
99823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq *
109823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * Unless required by applicable law or agreed to in writing, software
119823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * distributed under the License is distributed on an "AS IS" BASIS,
129823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * See the License for the specific language governing permissions and
149823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq * limitations under the License.
159823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq */
169823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq
1787bde3312ab61714a3469f59084b40c46a6627deYuexi Ma#include <sap_hidl_hal_utils.h>
189823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq
199823fcd865d0af53daf5d3137e98f2dec0c888bfShuoqvoid SapHidlTest::SetUp() {
2021b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang    sap = ::testing::VtsHalHidlTargetTestBase::getService<ISap>(
2121b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang        SapHidlEnvironment::Instance()->getServiceName<ISap>(hidl_string(SAP_SERVICE_NAME)));
2242c66f700aedb76506f0cd9f7e3be1316bdc7846sqian    ASSERT_NE(sap, nullptr);
239823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq
2442c66f700aedb76506f0cd9f7e3be1316bdc7846sqian    sapCb = new SapCallback(*this);
2542c66f700aedb76506f0cd9f7e3be1316bdc7846sqian    ASSERT_NE(sapCb, nullptr);
269823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq
2742c66f700aedb76506f0cd9f7e3be1316bdc7846sqian    count = 0;
289823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq
2942c66f700aedb76506f0cd9f7e3be1316bdc7846sqian    sap->setCallback(sapCb);
309823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq}
319823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq
3287bde3312ab61714a3469f59084b40c46a6627deYuexi Mavoid SapHidlTest::TearDown() {}
339823fcd865d0af53daf5d3137e98f2dec0c888bfShuoq
34788eb8083059ff0dca686734ceebf942042c4893sqianvoid SapHidlTest::notify(int receivedToken) {
3542c66f700aedb76506f0cd9f7e3be1316bdc7846sqian    std::unique_lock<std::mutex> lock(mtx);
3642c66f700aedb76506f0cd9f7e3be1316bdc7846sqian    count++;
37788eb8083059ff0dca686734ceebf942042c4893sqian    if (token == receivedToken) {
38788eb8083059ff0dca686734ceebf942042c4893sqian        cv.notify_one();
39788eb8083059ff0dca686734ceebf942042c4893sqian    }
40a8616ddf0f430f900ba5669ffe9471f99977ad59sqian}
4142c66f700aedb76506f0cd9f7e3be1316bdc7846sqian
42a8616ddf0f430f900ba5669ffe9471f99977ad59sqianstd::cv_status SapHidlTest::wait() {
43a8616ddf0f430f900ba5669ffe9471f99977ad59sqian    std::unique_lock<std::mutex> lock(mtx);
4442c66f700aedb76506f0cd9f7e3be1316bdc7846sqian
45a8616ddf0f430f900ba5669ffe9471f99977ad59sqian    std::cv_status status = std::cv_status::no_timeout;
46a8616ddf0f430f900ba5669ffe9471f99977ad59sqian    auto now = std::chrono::system_clock::now();
47a8616ddf0f430f900ba5669ffe9471f99977ad59sqian    while (count == 0) {
48a8616ddf0f430f900ba5669ffe9471f99977ad59sqian        status = cv.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD));
49a8616ddf0f430f900ba5669ffe9471f99977ad59sqian        if (status == std::cv_status::timeout) {
50a8616ddf0f430f900ba5669ffe9471f99977ad59sqian            return status;
5142c66f700aedb76506f0cd9f7e3be1316bdc7846sqian        }
52a8616ddf0f430f900ba5669ffe9471f99977ad59sqian    }
53a8616ddf0f430f900ba5669ffe9471f99977ad59sqian    count--;
54a8616ddf0f430f900ba5669ffe9471f99977ad59sqian    return status;
5521b0a0ad2555d3cf5231864a474399fdb00992b2Zhuoyao Zhang}
56