add default implementation to android.hardware.tests.foo/bar/pointer@1.0
Test: hidl_test
Test: mma
Change-Id: I808423c040099354513db0ad108210fcec17c8a7
diff --git a/tests/foo/1.0/default/FooCallback.cpp b/tests/foo/1.0/default/FooCallback.cpp
new file mode 100644
index 0000000..08d3ce0
--- /dev/null
+++ b/tests/foo/1.0/default/FooCallback.cpp
@@ -0,0 +1,86 @@
+#include "FooCallback.h"
+#include <android-base/logging.h>
+#include <inttypes.h>
+
+namespace android {
+namespace hardware {
+namespace tests {
+namespace foo {
+namespace V1_0 {
+namespace implementation {
+
+Return<void> FooCallback::heyItsYou(
+ const sp<IFooCallback> &_cb) {
+ nsecs_t start = systemTime();
+ ALOGI("SERVER(FooCallback) heyItsYou cb = %p", _cb.get());
+ mLock.lock();
+ invokeInfo[0].invoked = true;
+ invokeInfo[0].timeNs = systemTime() - start;
+ mCond.signal();
+ mLock.unlock();
+ return Void();
+}
+
+Return<bool> FooCallback::heyItsYouIsntIt(const sp<IFooCallback> &_cb) {
+ nsecs_t start = systemTime();
+ ALOGI("SERVER(FooCallback) heyItsYouIsntIt cb = %p sleeping for %" PRId64 " seconds", _cb.get(), DELAY_S);
+ sleep(DELAY_S);
+ ALOGI("SERVER(FooCallback) heyItsYouIsntIt cb = %p responding", _cb.get());
+ mLock.lock();
+ invokeInfo[1].invoked = true;
+ invokeInfo[1].timeNs = systemTime() - start;
+ mCond.signal();
+ mLock.unlock();
+ return true;
+}
+
+Return<void> FooCallback::heyItsTheMeaningOfLife(uint8_t tmol) {
+ nsecs_t start = systemTime();
+ ALOGI("SERVER(FooCallback) heyItsTheMeaningOfLife = %d sleeping for %" PRId64 " seconds", tmol, DELAY_S);
+ sleep(DELAY_S);
+ ALOGI("SERVER(FooCallback) heyItsTheMeaningOfLife = %d done sleeping", tmol);
+ mLock.lock();
+ invokeInfo[2].invoked = true;
+ invokeInfo[2].timeNs = systemTime() - start;
+ mCond.signal();
+ mLock.unlock();
+ return Void();
+}
+
+Return<void> FooCallback::reportResults(int64_t ns, reportResults_cb cb) {
+ ALOGI("SERVER(FooCallback) reportResults(%" PRId64 " seconds)", nanoseconds_to_seconds(ns));
+ nsecs_t leftToWaitNs = ns;
+ mLock.lock();
+ while (!(invokeInfo[0].invoked && invokeInfo[1].invoked && invokeInfo[2].invoked) &&
+ leftToWaitNs > 0) {
+ nsecs_t start = systemTime();
+ ::android::status_t rc = mCond.waitRelative(mLock, leftToWaitNs);
+ if (rc != ::android::OK) {
+ ALOGI("SERVER(FooCallback)::reportResults(%" PRId64 " ns) Condition::waitRelative(%" PRId64 ") returned error (%d)", ns, leftToWaitNs, rc);
+ break;
+ }
+ ALOGI("SERVER(FooCallback)::reportResults(%" PRId64 " ns) Condition::waitRelative was signalled", ns);
+ leftToWaitNs -= systemTime() - start;
+ }
+ mLock.unlock();
+ cb(leftToWaitNs, invokeInfo);
+ return Void();
+}
+
+Return<void> FooCallback::youBlockedMeFor(const hidl_array<int64_t, 3> &ns) {
+ for (size_t i = 0; i < 3; i++) {
+ invokeInfo[i].callerBlockedNs = ns[i];
+ }
+ return Void();
+}
+
+IFooCallback* HIDL_FETCH_IFooCallback(const char* /* name */) {
+ return new FooCallback();
+}
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace foo
+} // namespace tests
+} // namespace hardware
+} // namespace android