11b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju/*
21b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * Copyright (C) 2017 The Android Open Source Project
31b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju *
41b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * Licensed under the Apache License, Version 2.0 (the "License");
51b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * you may not use this file except in compliance with the License.
61b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * You may obtain a copy of the License at
71b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju *
81b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju *      http://www.apache.org/licenses/LICENSE-2.0
91b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju *
101b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * Unless required by applicable law or agreed to in writing, software
111b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * distributed under the License is distributed on an "AS IS" BASIS,
121b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * See the License for the specific language governing permissions and
141b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju * limitations under the License.
151b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju */
161b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju
176cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju#include "Baz.h"
186cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju#include <android-base/logging.h>
196cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
206cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsarajunamespace android {
216cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsarajunamespace hardware {
226cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsarajunamespace tests {
236cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsarajunamespace baz {
246cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsarajunamespace V1_0 {
256cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsarajunamespace implementation {
266cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
276cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsarajustruct BazCallback : public IBazCallback {
286cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    Return<void> heyItsMe(const sp<IBazCallback> &cb) override;
296cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    Return<void> hey() override;
306cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju};
316cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
326cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> BazCallback::heyItsMe(
336cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        const sp<IBazCallback> &cb) {
346cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "SERVER: heyItsMe cb = " << cb.get();
356cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
366cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
376cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
386cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
396cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> BazCallback::hey() {
406cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "SERVER: hey";
416cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
426cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
436cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
446cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
456cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju// Methods from ::android::hardware::tests::baz::V1_0::IBase follow.
466cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someBaseMethod() {
476cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::someBaseMethod";
486cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
496cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
506cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
516cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
526cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<bool> Baz::someBoolMethod(bool x) {
531b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju    LOG(INFO) << "Baz::someBoolMethod(" << std::to_string(x) << ")";
546cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
556cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return !x;
566cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
576cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
586cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someBoolArrayMethod(const hidl_array<bool, 3>& x,
596cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                      someBoolArrayMethod_cb _hidl_cb) {
601b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju    LOG(INFO) << "Baz::someBoolArrayMethod(" << toString(x) << ")";
616cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
626cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_array<bool, 4> out;
636cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out[0] = !x[0];
646cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out[1] = !x[1];
656cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out[2] = !x[2];
666cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out[3] = true;
676cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
686cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(out);
696cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
706cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
716cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
726cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
736cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someBoolVectorMethod(const hidl_vec<bool>& x, someBoolVectorMethod_cb _hidl_cb) {
741b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju    LOG(INFO) << "Baz::someBoolVectorMethod(" << toString(x) << ")";
756cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
766cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_vec<bool> out;
776cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out.resize(x.size());
786cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (size_t i = 0; i < x.size(); ++i) {
796cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        out[i] = !x[i];
806cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
816cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
826cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(out);
836cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
846cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
856cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
866cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
876cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someOtherBaseMethod(const IBase::Foo& foo, someOtherBaseMethod_cb _hidl_cb) {
886cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::someOtherBaseMethod "
891b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju              << toString(foo);
906cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
916cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(foo);
926cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
936cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
946cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
956cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
966cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someMethodWithFooArrays(const hidl_array<IBase::Foo, 2>& fooInput,
976cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                          someMethodWithFooArrays_cb _hidl_cb) {
986cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::someMethodWithFooArrays "
991b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju              << toString(fooInput);
1006cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1016cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_array<IBaz::Foo, 2> fooOutput;
1026cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    fooOutput[0] = fooInput[1];
1036cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    fooOutput[1] = fooInput[0];
1046cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1056cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(fooOutput);
1066cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1076cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
1086cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
1096cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1106cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someMethodWithFooVectors(const hidl_vec<IBase::Foo>& fooInput,
1116cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                           someMethodWithFooVectors_cb _hidl_cb) {
1126cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::someMethodWithFooVectors "
1131b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju              << toString(fooInput);
1146cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1156cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_vec<IBaz::Foo> fooOutput;
1166cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    fooOutput.resize(2);
1176cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    fooOutput[0] = fooInput[1];
1186cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    fooOutput[1] = fooInput[0];
1196cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1206cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(fooOutput);
1216cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1226cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
1236cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
1246cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1256cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someMethodWithVectorOfArray(const IBase::VectorOfArray& in,
1266cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                              someMethodWithVectorOfArray_cb _hidl_cb) {
1276cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::someMethodWithVectorOfArray "
1281b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju              << toString(in);
1296cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1306cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    IBase::VectorOfArray out;
1316cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1326cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    const size_t n = in.addresses.size();
1336cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out.addresses.resize(n);
1346cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1356cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (size_t i = 0; i < n; ++i) {
1366cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        out.addresses[i] = in.addresses[n - 1 - i];
1376cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
1386cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1396cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(out);
1406cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1416cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
1426cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
1436cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1446cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::someMethodTakingAVectorOfArray(const hidl_vec<hidl_array<uint8_t, 6>>& in,
1456cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                                 someMethodTakingAVectorOfArray_cb _hidl_cb) {
1466cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::someMethodTakingAVectorOfArray "
1471b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju              << toString(in);
1486cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1496cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    const size_t n = in.size();
1506cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1516cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_vec<hidl_array<uint8_t, 6> > out;
1526cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out.resize(n);
1536cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1546cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (size_t i = 0; i < n; ++i) {
1556cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        out[i] = in[n - 1 - i];
1566cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
1576cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1586cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(out);
1596cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1606cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
1616cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
1626cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1636cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::transpose(const IBase::StringMatrix5x3& in, transpose_cb _hidl_cb) {
1641b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju    LOG(INFO) << "Baz::transpose " << toString(in);
1656cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1666cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    IBase::StringMatrix3x5 out;
1676cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (size_t i = 0; i < 3; ++i) {
1686cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        for (size_t j = 0; j < 5; ++j) {
1696cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju            out.s[i][j] = in.s[j][i];
1706cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        }
1716cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
1726cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1736cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(out);
1746cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1756cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
1766cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
1776cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1786cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::transpose2(const hidl_array<hidl_string, 5, 3>& in, transpose2_cb _hidl_cb) {
1791b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju    LOG(INFO) << "Baz::transpose2 " << toString(in);
1806cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1816cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_array<hidl_string, 3, 5> out;
1826cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (size_t i = 0; i < 3; ++i) {
1836cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        for (size_t j = 0; j < 5; ++j) {
1846cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju            out[i][j] = in[j][i];
1856cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        }
1866cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
1876cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1886cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(out);
1896cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1906cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
1916cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
1926cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
1936cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::takeAMask(IBase::BitField bf,
1946cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                            uint8_t first,
1956cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                            const IBase::MyMask& second,
1966cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                            uint8_t third,
1976cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                            takeAMask_cb _hidl_cb) {
1986cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(bf, bf | first, second.value & bf, (bf | bf) & third);
1996cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
2006cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
2016cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
202aaa67596dff0833f124bd111da746e39c5c5bcecAndreas HuberReturn<void> Baz::testArrays(
203aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        const IBase::LotsOfPrimitiveArrays &in,
204aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        testArrays_cb _hidl_cb) {
205aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    _hidl_cb(in);
206aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    return Void();
207aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber}
208aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber
209aaa67596dff0833f124bd111da746e39c5c5bcecAndreas HuberReturn<void> Baz::testByteVecs(
210aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        const hidl_vec<IBase::ByteOneDim> &in,
211aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        testByteVecs_cb _hidl_cb) {
212aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    _hidl_cb(in);
213aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    return Void();
214aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber}
215aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber
216aaa67596dff0833f124bd111da746e39c5c5bcecAndreas HuberReturn<void> Baz::testBooleanVecs(
217aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        const hidl_vec<IBase::BooleanOneDim> &in,
218aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        testBooleanVecs_cb _hidl_cb) {
219aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    _hidl_cb(in);
220aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    return Void();
221aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber}
222aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber
223aaa67596dff0833f124bd111da746e39c5c5bcecAndreas HuberReturn<void> Baz::testDoubleVecs(
224aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        const hidl_vec<IBase::DoubleOneDim> &in,
225aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber        testDoubleVecs_cb _hidl_cb) {
226aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    _hidl_cb(in);
227aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber    return Void();
228aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber}
229aaa67596dff0833f124bd111da746e39c5c5bcecAndreas Huber
2306cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju// Methods from ::android::hardware::tests::baz::V1_0::IBaz follow.
2316cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2326cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::doThis(float param) {
2336cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::doThis(" << param << ")";
2346cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2356cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
2366cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
2376cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2386cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<int32_t> Baz::doThatAndReturnSomething(int64_t param) {
2396cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::doThatAndReturnSomething(" << param << ")";
2406cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2416cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return 666;
2426cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
2436cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2446cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<double> Baz::doQuiteABit(int32_t a, int64_t b, float c, double d) {
2456cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::doQuiteABit("
2466cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << a
2476cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << ", "
2486cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << b
2496cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << ", "
2506cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << c
2516cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << ", "
2526cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << d
2536cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << ")";
2546cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2556cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return 666.5;
2566cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
2576cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2586cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::doSomethingElse(const hidl_array<int32_t, 15>& param,
2596cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                  doSomethingElse_cb _hidl_cb) {
2606cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "Baz::doSomethingElse(...)";
2616cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2626cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_array<int32_t, 32> result;
2636cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (size_t i = 0; i < 15; ++i) {
2646cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        result[i] = 2 * param[i];
2656cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        result[15 + i] = param[i];
2666cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
2676cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result[30] = 1;
2686cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result[31] = 2;
2696cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2706cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(result);
2716cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2726cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
2736cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
2746cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2756cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::doStuffAndReturnAString(doStuffAndReturnAString_cb _hidl_cb) {
2766cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "doStuffAndReturnAString";
2776cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2786cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_string s;
2796cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    s = "Hello, world!";
2806cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2816cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(s);
2826cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2836cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
2846cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
2856cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2866cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::mapThisVector(const hidl_vec<int32_t>& param, mapThisVector_cb _hidl_cb) {
2876cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "mapThisVector";
2886cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2896cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_vec<int32_t> out;
2906cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    out.resize(param.size());
2916cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (size_t i = 0; i < param.size(); ++i) {
2926cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        out[i] = param[i] * 2;
2936cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
2946cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2956cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(out);
2966cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
2976cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
2986cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
2996cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3006cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::callMe(const sp<IBazCallback>& cb) {
3016cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "callMe " << cb.get();
3026cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3036cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    if (cb != NULL) {
3046cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        sp<IBazCallback> my_cb = new BazCallback;
3056cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        cb->heyItsMe(my_cb);
3066cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
3076cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3086cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3096cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3106cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3116cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::callMeLater(const sp<IBazCallback>& cb) {
3126cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "callMeLater " << cb.get();
3136cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3146cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    mStoredCallback = cb;
3156cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3166cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3176cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3186cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3196cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::iAmFreeNow() {
3206cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    if (mStoredCallback != nullptr) {
3216cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        mStoredCallback->hey();
3226cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
3236cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3246cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3256cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3266cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::dieNow() {
3276cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    exit(1);
3286cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3296cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3306cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3316cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<IBaz::SomeEnum> Baz::useAnEnum(IBaz::SomeEnum zzz) {
3326cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "useAnEnum " << (int)zzz;
3336cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3346cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return SomeEnum::goober;
3356cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3366cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3376cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::haveSomeStrings(const hidl_array<hidl_string, 3>& array,
3386cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                  haveSomeStrings_cb _hidl_cb) {
3396cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    LOG(INFO) << "haveSomeStrings("
3401b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju              << toString(array)
3416cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju              << ")";
3426cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3436cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_array<hidl_string, 2> result;
3446cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result[0] = "Hello";
3456cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result[1] = "World";
3466cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3476cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(result);
3486cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3496cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3506cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3516cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3526cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::haveAStringVec(const hidl_vec<hidl_string>& vector,
3536cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju                                 haveAStringVec_cb _hidl_cb) {
3541b019d5a6ccd39bda7cad3d824c3966c7feba93bHridya Valsaraju    LOG(INFO) << "haveAStringVec(" << toString(vector) << ")";
3556cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3566cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_vec<hidl_string> result;
3576cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result.resize(2);
3586cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3596cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result[0] = "Hello";
3606cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result[1] = "World";
3616cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3626cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(result);
3636cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3646cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3656cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3666cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3676cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::returnABunchOfStrings(returnABunchOfStrings_cb _hidl_cb) {
3686cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_string eins; eins = "Eins";
3696cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_string zwei; zwei = "Zwei";
3706cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_string drei; drei = "Drei";
3716cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(eins, zwei, drei);
3726cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3736cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3746cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3756cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3766cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<uint8_t> Baz::returnABitField() {
3776cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return 0;
3786cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3796cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3806cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<uint32_t> Baz::size(uint32_t size) {
3816cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return size;
3826cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3836cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
3846cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuReturn<void> Baz::getNestedStructs(getNestedStructs_cb _hidl_cb) {
3856cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    int size = 5;
3866cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    hidl_vec<IBaz::NestedStruct> result;
3876cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    result.resize(size);
3886cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    for (int i = 0; i < size; i++) {
3896cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        result[i].a = i;
3906cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        if (i == 1) {
3916cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju            result[i].matrices.resize(6);
3926cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju        }
3936cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    }
3946cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    _hidl_cb(result);
3956cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return Void();
3966cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
3970cd07d214bcf92a35b78a2066fe835ed018450b9Howard Chen
3980cd07d214bcf92a35b78a2066fe835ed018450b9Howard ChenReturn<void> Baz::haveSomeStructWithInterface(const StructWithInterface& swi,
3990cd07d214bcf92a35b78a2066fe835ed018450b9Howard Chen                                              haveSomeStructWithInterface_cb _hidl_cb) {
4000cd07d214bcf92a35b78a2066fe835ed018450b9Howard Chen    _hidl_cb(swi);
4010cd07d214bcf92a35b78a2066fe835ed018450b9Howard Chen    return Void();
4020cd07d214bcf92a35b78a2066fe835ed018450b9Howard Chen}
4036cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju// Methods from ::android::hidl::base::V1_0::IBase follow.
4046cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
4056cf95f371084d2d93d850f95e1739d7680adc6b0Hridya ValsarajuIBaz* HIDL_FETCH_IBaz(const char* /* name */) {
4066cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju    return new Baz();
4076cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}
4086cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju
4096cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}  // namespace implementation
4106cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}  // namespace V1_0
4116cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}  // namespace baz
4126cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}  // namespace tests
4136cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}  // namespace hardware
4146cf95f371084d2d93d850f95e1739d7680adc6b0Hridya Valsaraju}  // namespace android
415