1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Worker #include "Baz.h"
18*4d7e907cSAndroid Build Coastguard Worker #include <android-base/logging.h>
19*4d7e907cSAndroid Build Coastguard Worker
20*4d7e907cSAndroid Build Coastguard Worker namespace android {
21*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
22*4d7e907cSAndroid Build Coastguard Worker namespace tests {
23*4d7e907cSAndroid Build Coastguard Worker namespace baz {
24*4d7e907cSAndroid Build Coastguard Worker namespace V1_0 {
25*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
26*4d7e907cSAndroid Build Coastguard Worker
27*4d7e907cSAndroid Build Coastguard Worker struct BazCallback : public IBazCallback {
28*4d7e907cSAndroid Build Coastguard Worker Return<void> heyItsMe(const sp<IBazCallback> &cb) override;
29*4d7e907cSAndroid Build Coastguard Worker Return<void> hey() override;
30*4d7e907cSAndroid Build Coastguard Worker };
31*4d7e907cSAndroid Build Coastguard Worker
heyItsMe(const sp<IBazCallback> & cb)32*4d7e907cSAndroid Build Coastguard Worker Return<void> BazCallback::heyItsMe(
33*4d7e907cSAndroid Build Coastguard Worker const sp<IBazCallback> &cb) {
34*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "SERVER: heyItsMe cb = " << cb.get();
35*4d7e907cSAndroid Build Coastguard Worker
36*4d7e907cSAndroid Build Coastguard Worker return Void();
37*4d7e907cSAndroid Build Coastguard Worker }
38*4d7e907cSAndroid Build Coastguard Worker
hey()39*4d7e907cSAndroid Build Coastguard Worker Return<void> BazCallback::hey() {
40*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "SERVER: hey";
41*4d7e907cSAndroid Build Coastguard Worker
42*4d7e907cSAndroid Build Coastguard Worker return Void();
43*4d7e907cSAndroid Build Coastguard Worker }
44*4d7e907cSAndroid Build Coastguard Worker
45*4d7e907cSAndroid Build Coastguard Worker // Methods from ::android::hardware::tests::baz::V1_0::IBase follow.
isJava()46*4d7e907cSAndroid Build Coastguard Worker Return<bool> Baz::isJava() {
47*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::isJava";
48*4d7e907cSAndroid Build Coastguard Worker
49*4d7e907cSAndroid Build Coastguard Worker return false;
50*4d7e907cSAndroid Build Coastguard Worker }
51*4d7e907cSAndroid Build Coastguard Worker
someBaseMethod()52*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someBaseMethod() {
53*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someBaseMethod";
54*4d7e907cSAndroid Build Coastguard Worker
55*4d7e907cSAndroid Build Coastguard Worker return Void();
56*4d7e907cSAndroid Build Coastguard Worker }
57*4d7e907cSAndroid Build Coastguard Worker
someBoolMethod(bool x)58*4d7e907cSAndroid Build Coastguard Worker Return<bool> Baz::someBoolMethod(bool x) {
59*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someBoolMethod(" << std::to_string(x) << ")";
60*4d7e907cSAndroid Build Coastguard Worker
61*4d7e907cSAndroid Build Coastguard Worker return !x;
62*4d7e907cSAndroid Build Coastguard Worker }
63*4d7e907cSAndroid Build Coastguard Worker
someBoolArrayMethod(const hidl_array<bool,3> & x,someBoolArrayMethod_cb _hidl_cb)64*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someBoolArrayMethod(const hidl_array<bool, 3>& x,
65*4d7e907cSAndroid Build Coastguard Worker someBoolArrayMethod_cb _hidl_cb) {
66*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someBoolArrayMethod(" << toString(x) << ")";
67*4d7e907cSAndroid Build Coastguard Worker
68*4d7e907cSAndroid Build Coastguard Worker hidl_array<bool, 4> out;
69*4d7e907cSAndroid Build Coastguard Worker out[0] = !x[0];
70*4d7e907cSAndroid Build Coastguard Worker out[1] = !x[1];
71*4d7e907cSAndroid Build Coastguard Worker out[2] = !x[2];
72*4d7e907cSAndroid Build Coastguard Worker out[3] = true;
73*4d7e907cSAndroid Build Coastguard Worker
74*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(out);
75*4d7e907cSAndroid Build Coastguard Worker
76*4d7e907cSAndroid Build Coastguard Worker return Void();
77*4d7e907cSAndroid Build Coastguard Worker }
78*4d7e907cSAndroid Build Coastguard Worker
someBoolVectorMethod(const hidl_vec<bool> & x,someBoolVectorMethod_cb _hidl_cb)79*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someBoolVectorMethod(const hidl_vec<bool>& x, someBoolVectorMethod_cb _hidl_cb) {
80*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someBoolVectorMethod(" << toString(x) << ")";
81*4d7e907cSAndroid Build Coastguard Worker
82*4d7e907cSAndroid Build Coastguard Worker hidl_vec<bool> out;
83*4d7e907cSAndroid Build Coastguard Worker out.resize(x.size());
84*4d7e907cSAndroid Build Coastguard Worker for (size_t i = 0; i < x.size(); ++i) {
85*4d7e907cSAndroid Build Coastguard Worker out[i] = !x[i];
86*4d7e907cSAndroid Build Coastguard Worker }
87*4d7e907cSAndroid Build Coastguard Worker
88*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(out);
89*4d7e907cSAndroid Build Coastguard Worker
90*4d7e907cSAndroid Build Coastguard Worker return Void();
91*4d7e907cSAndroid Build Coastguard Worker }
92*4d7e907cSAndroid Build Coastguard Worker
someOtherBaseMethod(const IBase::Foo & foo,someOtherBaseMethod_cb _hidl_cb)93*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someOtherBaseMethod(const IBase::Foo& foo, someOtherBaseMethod_cb _hidl_cb) {
94*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someOtherBaseMethod "
95*4d7e907cSAndroid Build Coastguard Worker << toString(foo);
96*4d7e907cSAndroid Build Coastguard Worker
97*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(foo);
98*4d7e907cSAndroid Build Coastguard Worker
99*4d7e907cSAndroid Build Coastguard Worker return Void();
100*4d7e907cSAndroid Build Coastguard Worker }
101*4d7e907cSAndroid Build Coastguard Worker
someMethodWithFooArrays(const hidl_array<IBase::Foo,2> & fooInput,someMethodWithFooArrays_cb _hidl_cb)102*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someMethodWithFooArrays(const hidl_array<IBase::Foo, 2>& fooInput,
103*4d7e907cSAndroid Build Coastguard Worker someMethodWithFooArrays_cb _hidl_cb) {
104*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someMethodWithFooArrays "
105*4d7e907cSAndroid Build Coastguard Worker << toString(fooInput);
106*4d7e907cSAndroid Build Coastguard Worker
107*4d7e907cSAndroid Build Coastguard Worker hidl_array<IBaz::Foo, 2> fooOutput;
108*4d7e907cSAndroid Build Coastguard Worker fooOutput[0] = fooInput[1];
109*4d7e907cSAndroid Build Coastguard Worker fooOutput[1] = fooInput[0];
110*4d7e907cSAndroid Build Coastguard Worker
111*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(fooOutput);
112*4d7e907cSAndroid Build Coastguard Worker
113*4d7e907cSAndroid Build Coastguard Worker return Void();
114*4d7e907cSAndroid Build Coastguard Worker }
115*4d7e907cSAndroid Build Coastguard Worker
someMethodWithFooVectors(const hidl_vec<IBase::Foo> & fooInput,someMethodWithFooVectors_cb _hidl_cb)116*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someMethodWithFooVectors(const hidl_vec<IBase::Foo>& fooInput,
117*4d7e907cSAndroid Build Coastguard Worker someMethodWithFooVectors_cb _hidl_cb) {
118*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someMethodWithFooVectors "
119*4d7e907cSAndroid Build Coastguard Worker << toString(fooInput);
120*4d7e907cSAndroid Build Coastguard Worker
121*4d7e907cSAndroid Build Coastguard Worker hidl_vec<IBaz::Foo> fooOutput;
122*4d7e907cSAndroid Build Coastguard Worker fooOutput.resize(2);
123*4d7e907cSAndroid Build Coastguard Worker fooOutput[0] = fooInput[1];
124*4d7e907cSAndroid Build Coastguard Worker fooOutput[1] = fooInput[0];
125*4d7e907cSAndroid Build Coastguard Worker
126*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(fooOutput);
127*4d7e907cSAndroid Build Coastguard Worker
128*4d7e907cSAndroid Build Coastguard Worker return Void();
129*4d7e907cSAndroid Build Coastguard Worker }
130*4d7e907cSAndroid Build Coastguard Worker
someMethodWithVectorOfArray(const IBase::VectorOfArray & in,someMethodWithVectorOfArray_cb _hidl_cb)131*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someMethodWithVectorOfArray(const IBase::VectorOfArray& in,
132*4d7e907cSAndroid Build Coastguard Worker someMethodWithVectorOfArray_cb _hidl_cb) {
133*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someMethodWithVectorOfArray "
134*4d7e907cSAndroid Build Coastguard Worker << toString(in);
135*4d7e907cSAndroid Build Coastguard Worker
136*4d7e907cSAndroid Build Coastguard Worker IBase::VectorOfArray out;
137*4d7e907cSAndroid Build Coastguard Worker
138*4d7e907cSAndroid Build Coastguard Worker const size_t n = in.addresses.size();
139*4d7e907cSAndroid Build Coastguard Worker out.addresses.resize(n);
140*4d7e907cSAndroid Build Coastguard Worker
141*4d7e907cSAndroid Build Coastguard Worker for (size_t i = 0; i < n; ++i) {
142*4d7e907cSAndroid Build Coastguard Worker out.addresses[i] = in.addresses[n - 1 - i];
143*4d7e907cSAndroid Build Coastguard Worker }
144*4d7e907cSAndroid Build Coastguard Worker
145*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(out);
146*4d7e907cSAndroid Build Coastguard Worker
147*4d7e907cSAndroid Build Coastguard Worker return Void();
148*4d7e907cSAndroid Build Coastguard Worker }
149*4d7e907cSAndroid Build Coastguard Worker
someMethodTakingAVectorOfArray(const hidl_vec<hidl_array<uint8_t,6>> & in,someMethodTakingAVectorOfArray_cb _hidl_cb)150*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::someMethodTakingAVectorOfArray(const hidl_vec<hidl_array<uint8_t, 6>>& in,
151*4d7e907cSAndroid Build Coastguard Worker someMethodTakingAVectorOfArray_cb _hidl_cb) {
152*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::someMethodTakingAVectorOfArray "
153*4d7e907cSAndroid Build Coastguard Worker << toString(in);
154*4d7e907cSAndroid Build Coastguard Worker
155*4d7e907cSAndroid Build Coastguard Worker const size_t n = in.size();
156*4d7e907cSAndroid Build Coastguard Worker
157*4d7e907cSAndroid Build Coastguard Worker hidl_vec<hidl_array<uint8_t, 6> > out;
158*4d7e907cSAndroid Build Coastguard Worker out.resize(n);
159*4d7e907cSAndroid Build Coastguard Worker
160*4d7e907cSAndroid Build Coastguard Worker for (size_t i = 0; i < n; ++i) {
161*4d7e907cSAndroid Build Coastguard Worker out[i] = in[n - 1 - i];
162*4d7e907cSAndroid Build Coastguard Worker }
163*4d7e907cSAndroid Build Coastguard Worker
164*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(out);
165*4d7e907cSAndroid Build Coastguard Worker
166*4d7e907cSAndroid Build Coastguard Worker return Void();
167*4d7e907cSAndroid Build Coastguard Worker }
168*4d7e907cSAndroid Build Coastguard Worker
transpose(const IBase::StringMatrix5x3 & in,transpose_cb _hidl_cb)169*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::transpose(const IBase::StringMatrix5x3& in, transpose_cb _hidl_cb) {
170*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::transpose " << toString(in);
171*4d7e907cSAndroid Build Coastguard Worker
172*4d7e907cSAndroid Build Coastguard Worker IBase::StringMatrix3x5 out;
173*4d7e907cSAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
174*4d7e907cSAndroid Build Coastguard Worker for (size_t j = 0; j < 5; ++j) {
175*4d7e907cSAndroid Build Coastguard Worker out.s[i][j] = in.s[j][i];
176*4d7e907cSAndroid Build Coastguard Worker }
177*4d7e907cSAndroid Build Coastguard Worker }
178*4d7e907cSAndroid Build Coastguard Worker
179*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(out);
180*4d7e907cSAndroid Build Coastguard Worker
181*4d7e907cSAndroid Build Coastguard Worker return Void();
182*4d7e907cSAndroid Build Coastguard Worker }
183*4d7e907cSAndroid Build Coastguard Worker
transpose2(const hidl_array<hidl_string,5,3> & in,transpose2_cb _hidl_cb)184*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::transpose2(const hidl_array<hidl_string, 5, 3>& in, transpose2_cb _hidl_cb) {
185*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::transpose2 " << toString(in);
186*4d7e907cSAndroid Build Coastguard Worker
187*4d7e907cSAndroid Build Coastguard Worker hidl_array<hidl_string, 3, 5> out;
188*4d7e907cSAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
189*4d7e907cSAndroid Build Coastguard Worker for (size_t j = 0; j < 5; ++j) {
190*4d7e907cSAndroid Build Coastguard Worker out[i][j] = in[j][i];
191*4d7e907cSAndroid Build Coastguard Worker }
192*4d7e907cSAndroid Build Coastguard Worker }
193*4d7e907cSAndroid Build Coastguard Worker
194*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(out);
195*4d7e907cSAndroid Build Coastguard Worker
196*4d7e907cSAndroid Build Coastguard Worker return Void();
197*4d7e907cSAndroid Build Coastguard Worker }
198*4d7e907cSAndroid Build Coastguard Worker
takeAMask(IBase::BitField bf,uint8_t first,const IBase::MyMask & second,uint8_t third,takeAMask_cb _hidl_cb)199*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::takeAMask(IBase::BitField bf,
200*4d7e907cSAndroid Build Coastguard Worker uint8_t first,
201*4d7e907cSAndroid Build Coastguard Worker const IBase::MyMask& second,
202*4d7e907cSAndroid Build Coastguard Worker uint8_t third,
203*4d7e907cSAndroid Build Coastguard Worker takeAMask_cb _hidl_cb) {
204*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(bf, bf | first, second.value & bf, (bf | bf) & third);
205*4d7e907cSAndroid Build Coastguard Worker return Void();
206*4d7e907cSAndroid Build Coastguard Worker }
207*4d7e907cSAndroid Build Coastguard Worker
testArrays(const IBase::LotsOfPrimitiveArrays & in,testArrays_cb _hidl_cb)208*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::testArrays(
209*4d7e907cSAndroid Build Coastguard Worker const IBase::LotsOfPrimitiveArrays &in,
210*4d7e907cSAndroid Build Coastguard Worker testArrays_cb _hidl_cb) {
211*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(in);
212*4d7e907cSAndroid Build Coastguard Worker return Void();
213*4d7e907cSAndroid Build Coastguard Worker }
214*4d7e907cSAndroid Build Coastguard Worker
testByteVecs(const hidl_vec<IBase::ByteOneDim> & in,testByteVecs_cb _hidl_cb)215*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::testByteVecs(
216*4d7e907cSAndroid Build Coastguard Worker const hidl_vec<IBase::ByteOneDim> &in,
217*4d7e907cSAndroid Build Coastguard Worker testByteVecs_cb _hidl_cb) {
218*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(in);
219*4d7e907cSAndroid Build Coastguard Worker return Void();
220*4d7e907cSAndroid Build Coastguard Worker }
221*4d7e907cSAndroid Build Coastguard Worker
testBooleanVecs(const hidl_vec<IBase::BooleanOneDim> & in,testBooleanVecs_cb _hidl_cb)222*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::testBooleanVecs(
223*4d7e907cSAndroid Build Coastguard Worker const hidl_vec<IBase::BooleanOneDim> &in,
224*4d7e907cSAndroid Build Coastguard Worker testBooleanVecs_cb _hidl_cb) {
225*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(in);
226*4d7e907cSAndroid Build Coastguard Worker return Void();
227*4d7e907cSAndroid Build Coastguard Worker }
228*4d7e907cSAndroid Build Coastguard Worker
testDoubleVecs(const hidl_vec<IBase::DoubleOneDim> & in,testDoubleVecs_cb _hidl_cb)229*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::testDoubleVecs(
230*4d7e907cSAndroid Build Coastguard Worker const hidl_vec<IBase::DoubleOneDim> &in,
231*4d7e907cSAndroid Build Coastguard Worker testDoubleVecs_cb _hidl_cb) {
232*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(in);
233*4d7e907cSAndroid Build Coastguard Worker return Void();
234*4d7e907cSAndroid Build Coastguard Worker }
235*4d7e907cSAndroid Build Coastguard Worker
236*4d7e907cSAndroid Build Coastguard Worker // Methods from ::android::hardware::tests::baz::V1_0::IBaz follow.
237*4d7e907cSAndroid Build Coastguard Worker
doThis(float param)238*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::doThis(float param) {
239*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::doThis(" << param << ")";
240*4d7e907cSAndroid Build Coastguard Worker
241*4d7e907cSAndroid Build Coastguard Worker return Void();
242*4d7e907cSAndroid Build Coastguard Worker }
243*4d7e907cSAndroid Build Coastguard Worker
doThatAndReturnSomething(int64_t param)244*4d7e907cSAndroid Build Coastguard Worker Return<int32_t> Baz::doThatAndReturnSomething(int64_t param) {
245*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::doThatAndReturnSomething(" << param << ")";
246*4d7e907cSAndroid Build Coastguard Worker
247*4d7e907cSAndroid Build Coastguard Worker return 666;
248*4d7e907cSAndroid Build Coastguard Worker }
249*4d7e907cSAndroid Build Coastguard Worker
doQuiteABit(int32_t a,int64_t b,float c,double d)250*4d7e907cSAndroid Build Coastguard Worker Return<double> Baz::doQuiteABit(int32_t a, int64_t b, float c, double d) {
251*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::doQuiteABit("
252*4d7e907cSAndroid Build Coastguard Worker << a
253*4d7e907cSAndroid Build Coastguard Worker << ", "
254*4d7e907cSAndroid Build Coastguard Worker << b
255*4d7e907cSAndroid Build Coastguard Worker << ", "
256*4d7e907cSAndroid Build Coastguard Worker << c
257*4d7e907cSAndroid Build Coastguard Worker << ", "
258*4d7e907cSAndroid Build Coastguard Worker << d
259*4d7e907cSAndroid Build Coastguard Worker << ")";
260*4d7e907cSAndroid Build Coastguard Worker
261*4d7e907cSAndroid Build Coastguard Worker return 666.5;
262*4d7e907cSAndroid Build Coastguard Worker }
263*4d7e907cSAndroid Build Coastguard Worker
doSomethingElse(const hidl_array<int32_t,15> & param,doSomethingElse_cb _hidl_cb)264*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::doSomethingElse(const hidl_array<int32_t, 15>& param,
265*4d7e907cSAndroid Build Coastguard Worker doSomethingElse_cb _hidl_cb) {
266*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "Baz::doSomethingElse(...)";
267*4d7e907cSAndroid Build Coastguard Worker
268*4d7e907cSAndroid Build Coastguard Worker hidl_array<int32_t, 32> result;
269*4d7e907cSAndroid Build Coastguard Worker for (size_t i = 0; i < 15; ++i) {
270*4d7e907cSAndroid Build Coastguard Worker result[i] = 2 * param[i];
271*4d7e907cSAndroid Build Coastguard Worker result[15 + i] = param[i];
272*4d7e907cSAndroid Build Coastguard Worker }
273*4d7e907cSAndroid Build Coastguard Worker result[30] = 1;
274*4d7e907cSAndroid Build Coastguard Worker result[31] = 2;
275*4d7e907cSAndroid Build Coastguard Worker
276*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(result);
277*4d7e907cSAndroid Build Coastguard Worker
278*4d7e907cSAndroid Build Coastguard Worker return Void();
279*4d7e907cSAndroid Build Coastguard Worker }
280*4d7e907cSAndroid Build Coastguard Worker
doStuffAndReturnAString(doStuffAndReturnAString_cb _hidl_cb)281*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::doStuffAndReturnAString(doStuffAndReturnAString_cb _hidl_cb) {
282*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "doStuffAndReturnAString";
283*4d7e907cSAndroid Build Coastguard Worker
284*4d7e907cSAndroid Build Coastguard Worker hidl_string s;
285*4d7e907cSAndroid Build Coastguard Worker s = "Hello, world!";
286*4d7e907cSAndroid Build Coastguard Worker
287*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(s);
288*4d7e907cSAndroid Build Coastguard Worker
289*4d7e907cSAndroid Build Coastguard Worker return Void();
290*4d7e907cSAndroid Build Coastguard Worker }
291*4d7e907cSAndroid Build Coastguard Worker
mapThisVector(const hidl_vec<int32_t> & param,mapThisVector_cb _hidl_cb)292*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::mapThisVector(const hidl_vec<int32_t>& param, mapThisVector_cb _hidl_cb) {
293*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "mapThisVector";
294*4d7e907cSAndroid Build Coastguard Worker
295*4d7e907cSAndroid Build Coastguard Worker hidl_vec<int32_t> out;
296*4d7e907cSAndroid Build Coastguard Worker out.resize(param.size());
297*4d7e907cSAndroid Build Coastguard Worker for (size_t i = 0; i < param.size(); ++i) {
298*4d7e907cSAndroid Build Coastguard Worker out[i] = param[i] * 2;
299*4d7e907cSAndroid Build Coastguard Worker }
300*4d7e907cSAndroid Build Coastguard Worker
301*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(out);
302*4d7e907cSAndroid Build Coastguard Worker
303*4d7e907cSAndroid Build Coastguard Worker return Void();
304*4d7e907cSAndroid Build Coastguard Worker }
305*4d7e907cSAndroid Build Coastguard Worker
callMe(const sp<IBazCallback> & cb)306*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::callMe(const sp<IBazCallback>& cb) {
307*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "callMe " << cb.get();
308*4d7e907cSAndroid Build Coastguard Worker
309*4d7e907cSAndroid Build Coastguard Worker if (cb != NULL) {
310*4d7e907cSAndroid Build Coastguard Worker sp<IBazCallback> my_cb = new BazCallback;
311*4d7e907cSAndroid Build Coastguard Worker cb->heyItsMe(my_cb);
312*4d7e907cSAndroid Build Coastguard Worker }
313*4d7e907cSAndroid Build Coastguard Worker
314*4d7e907cSAndroid Build Coastguard Worker return Void();
315*4d7e907cSAndroid Build Coastguard Worker }
316*4d7e907cSAndroid Build Coastguard Worker
callMeLater(const sp<IBazCallback> & cb)317*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::callMeLater(const sp<IBazCallback>& cb) {
318*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "callMeLater " << cb.get();
319*4d7e907cSAndroid Build Coastguard Worker
320*4d7e907cSAndroid Build Coastguard Worker mStoredCallback = cb;
321*4d7e907cSAndroid Build Coastguard Worker
322*4d7e907cSAndroid Build Coastguard Worker return Void();
323*4d7e907cSAndroid Build Coastguard Worker }
324*4d7e907cSAndroid Build Coastguard Worker
iAmFreeNow()325*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::iAmFreeNow() {
326*4d7e907cSAndroid Build Coastguard Worker if (mStoredCallback != nullptr) {
327*4d7e907cSAndroid Build Coastguard Worker mStoredCallback->hey();
328*4d7e907cSAndroid Build Coastguard Worker }
329*4d7e907cSAndroid Build Coastguard Worker return Void();
330*4d7e907cSAndroid Build Coastguard Worker }
331*4d7e907cSAndroid Build Coastguard Worker
dieNow()332*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::dieNow() {
333*4d7e907cSAndroid Build Coastguard Worker exit(1);
334*4d7e907cSAndroid Build Coastguard Worker return Void();
335*4d7e907cSAndroid Build Coastguard Worker }
336*4d7e907cSAndroid Build Coastguard Worker
useAnEnum(IBaz::SomeEnum zzz)337*4d7e907cSAndroid Build Coastguard Worker Return<IBaz::SomeEnum> Baz::useAnEnum(IBaz::SomeEnum zzz) {
338*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "useAnEnum " << (int)zzz;
339*4d7e907cSAndroid Build Coastguard Worker
340*4d7e907cSAndroid Build Coastguard Worker return SomeEnum::quux;
341*4d7e907cSAndroid Build Coastguard Worker }
342*4d7e907cSAndroid Build Coastguard Worker
haveSomeStrings(const hidl_array<hidl_string,3> & array,haveSomeStrings_cb _hidl_cb)343*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::haveSomeStrings(const hidl_array<hidl_string, 3>& array,
344*4d7e907cSAndroid Build Coastguard Worker haveSomeStrings_cb _hidl_cb) {
345*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "haveSomeStrings("
346*4d7e907cSAndroid Build Coastguard Worker << toString(array)
347*4d7e907cSAndroid Build Coastguard Worker << ")";
348*4d7e907cSAndroid Build Coastguard Worker
349*4d7e907cSAndroid Build Coastguard Worker hidl_array<hidl_string, 2> result;
350*4d7e907cSAndroid Build Coastguard Worker result[0] = "Hello";
351*4d7e907cSAndroid Build Coastguard Worker result[1] = "World";
352*4d7e907cSAndroid Build Coastguard Worker
353*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(result);
354*4d7e907cSAndroid Build Coastguard Worker
355*4d7e907cSAndroid Build Coastguard Worker return Void();
356*4d7e907cSAndroid Build Coastguard Worker }
357*4d7e907cSAndroid Build Coastguard Worker
haveAStringVec(const hidl_vec<hidl_string> & vector,haveAStringVec_cb _hidl_cb)358*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::haveAStringVec(const hidl_vec<hidl_string>& vector,
359*4d7e907cSAndroid Build Coastguard Worker haveAStringVec_cb _hidl_cb) {
360*4d7e907cSAndroid Build Coastguard Worker LOG(INFO) << "haveAStringVec(" << toString(vector) << ")";
361*4d7e907cSAndroid Build Coastguard Worker
362*4d7e907cSAndroid Build Coastguard Worker hidl_vec<hidl_string> result;
363*4d7e907cSAndroid Build Coastguard Worker result.resize(2);
364*4d7e907cSAndroid Build Coastguard Worker
365*4d7e907cSAndroid Build Coastguard Worker result[0] = "Hello";
366*4d7e907cSAndroid Build Coastguard Worker result[1] = "World";
367*4d7e907cSAndroid Build Coastguard Worker
368*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(result);
369*4d7e907cSAndroid Build Coastguard Worker
370*4d7e907cSAndroid Build Coastguard Worker return Void();
371*4d7e907cSAndroid Build Coastguard Worker }
372*4d7e907cSAndroid Build Coastguard Worker
repeatBitfieldVec(const hidl_vec<uint8_t> & vector,repeatBitfieldVec_cb _hidl_cb)373*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::repeatBitfieldVec(const hidl_vec<uint8_t>& vector,
374*4d7e907cSAndroid Build Coastguard Worker repeatBitfieldVec_cb _hidl_cb) {
375*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(vector);
376*4d7e907cSAndroid Build Coastguard Worker return Void();
377*4d7e907cSAndroid Build Coastguard Worker }
378*4d7e907cSAndroid Build Coastguard Worker
returnABunchOfStrings(returnABunchOfStrings_cb _hidl_cb)379*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::returnABunchOfStrings(returnABunchOfStrings_cb _hidl_cb) {
380*4d7e907cSAndroid Build Coastguard Worker hidl_string eins; eins = "Eins";
381*4d7e907cSAndroid Build Coastguard Worker hidl_string zwei; zwei = "Zwei";
382*4d7e907cSAndroid Build Coastguard Worker hidl_string drei; drei = "Drei";
383*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(eins, zwei, drei);
384*4d7e907cSAndroid Build Coastguard Worker
385*4d7e907cSAndroid Build Coastguard Worker return Void();
386*4d7e907cSAndroid Build Coastguard Worker }
387*4d7e907cSAndroid Build Coastguard Worker
returnABitField()388*4d7e907cSAndroid Build Coastguard Worker Return<uint8_t> Baz::returnABitField() {
389*4d7e907cSAndroid Build Coastguard Worker return 0;
390*4d7e907cSAndroid Build Coastguard Worker }
391*4d7e907cSAndroid Build Coastguard Worker
size(uint32_t size)392*4d7e907cSAndroid Build Coastguard Worker Return<uint32_t> Baz::size(uint32_t size) {
393*4d7e907cSAndroid Build Coastguard Worker return size;
394*4d7e907cSAndroid Build Coastguard Worker }
395*4d7e907cSAndroid Build Coastguard Worker
getNestedStructs(getNestedStructs_cb _hidl_cb)396*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::getNestedStructs(getNestedStructs_cb _hidl_cb) {
397*4d7e907cSAndroid Build Coastguard Worker int size = 5;
398*4d7e907cSAndroid Build Coastguard Worker hidl_vec<IBaz::NestedStruct> result;
399*4d7e907cSAndroid Build Coastguard Worker result.resize(size);
400*4d7e907cSAndroid Build Coastguard Worker for (int i = 0; i < size; i++) {
401*4d7e907cSAndroid Build Coastguard Worker result[i].a = i;
402*4d7e907cSAndroid Build Coastguard Worker if (i == 1) {
403*4d7e907cSAndroid Build Coastguard Worker result[i].matrices.resize(6);
404*4d7e907cSAndroid Build Coastguard Worker }
405*4d7e907cSAndroid Build Coastguard Worker }
406*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(result);
407*4d7e907cSAndroid Build Coastguard Worker return Void();
408*4d7e907cSAndroid Build Coastguard Worker }
409*4d7e907cSAndroid Build Coastguard Worker
haveSomeStructWithInterface(const StructWithInterface & swi,haveSomeStructWithInterface_cb _hidl_cb)410*4d7e907cSAndroid Build Coastguard Worker Return<void> Baz::haveSomeStructWithInterface(const StructWithInterface& swi,
411*4d7e907cSAndroid Build Coastguard Worker haveSomeStructWithInterface_cb _hidl_cb) {
412*4d7e907cSAndroid Build Coastguard Worker _hidl_cb(swi);
413*4d7e907cSAndroid Build Coastguard Worker return Void();
414*4d7e907cSAndroid Build Coastguard Worker }
415*4d7e907cSAndroid Build Coastguard Worker // Methods from ::android::hidl::base::V1_0::IBase follow.
416*4d7e907cSAndroid Build Coastguard Worker
HIDL_FETCH_IBaz(const char *)417*4d7e907cSAndroid Build Coastguard Worker IBaz* HIDL_FETCH_IBaz(const char* /* name */) {
418*4d7e907cSAndroid Build Coastguard Worker return new Baz();
419*4d7e907cSAndroid Build Coastguard Worker }
420*4d7e907cSAndroid Build Coastguard Worker
421*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation
422*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_0
423*4d7e907cSAndroid Build Coastguard Worker } // namespace baz
424*4d7e907cSAndroid Build Coastguard Worker } // namespace tests
425*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware
426*4d7e907cSAndroid Build Coastguard Worker } // namespace android
427