19171fb8572040f83bab5b951f469e27719b22aaeYifan Hong#ifndef ANDROID_HIDL_TEST_FOO_HELPER_H
29171fb8572040f83bab5b951f469e27719b22aaeYifan Hong#define ANDROID_HIDL_TEST_FOO_HELPER_H
39171fb8572040f83bab5b951f469e27719b22aaeYifan Hong#include <string>
49171fb8572040f83bab5b951f469e27719b22aaeYifan Hong#include <android/hardware/tests/foo/1.0/IFoo.h>
59171fb8572040f83bab5b951f469e27719b22aaeYifan Hong#include <utils/Timers.h>
69171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
79171fb8572040f83bab5b951f469e27719b22aaeYifan Hongnamespace android {
89171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
99171fb8572040f83bab5b951f469e27719b22aaeYifan Hongusing std::to_string;
109171fb8572040f83bab5b951f469e27719b22aaeYifan Hongusing hardware::hidl_string;
119171fb8572040f83bab5b951f469e27719b22aaeYifan Hongusing hardware::hidl_vec;
129171fb8572040f83bab5b951f469e27719b22aaeYifan Hongusing hardware::hidl_array;
139171fb8572040f83bab5b951f469e27719b22aaeYifan Hongusing hardware::tests::foo::V1_0::IFoo;
149171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
159171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstatic constexpr nsecs_t DELAY_S = 1;
169171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstatic constexpr nsecs_t DELAY_NS = seconds_to_nanoseconds(DELAY_S);
179171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstatic constexpr nsecs_t TOLERANCE_NS = milliseconds_to_nanoseconds(10);
189171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstatic constexpr nsecs_t ONEWAY_TOLERANCE_NS = milliseconds_to_nanoseconds(1);
199171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
209171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string to_string(const IFoo::StringMatrix5x3 &M);
219171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string to_string(const IFoo::StringMatrix3x5 &M);
229171fb8572040f83bab5b951f469e27719b22aaeYifan Hong// Add quotes around s. For testing purposes only.
239171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string to_string(const hidl_string &s);
249171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
259171fb8572040f83bab5b951f469e27719b22aaeYifan Hongtemplate<typename T>
269171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string to_string(const T *elems, size_t n) {
279171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    std::string out;
289171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    out = "[";
299171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    for (size_t i = 0; i < n; ++i) {
309171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        if (i > 0) {
319171fb8572040f83bab5b951f469e27719b22aaeYifan Hong            out += ", ";
329171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        }
339171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        out += to_string(elems[i]);
349171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    }
359171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    out += "]";
369171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
379171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    return out;
389171fb8572040f83bab5b951f469e27719b22aaeYifan Hong}
399171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
409171fb8572040f83bab5b951f469e27719b22aaeYifan Hongtemplate<typename T, size_t SIZE>
419171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string to_string(const hidl_array<T, SIZE> &array) {
429171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    return to_string(&array[0], SIZE);
439171fb8572040f83bab5b951f469e27719b22aaeYifan Hong}
449171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
459171fb8572040f83bab5b951f469e27719b22aaeYifan Hongtemplate<typename T, size_t SIZE1, size_t SIZE2>
469171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string to_string(const hidl_array<T, SIZE1, SIZE2> &array) {
479171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    std::string out;
489171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    out = "[";
499171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    for (size_t i = 0; i < SIZE1; ++i) {
509171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        if (i > 0) {
519171fb8572040f83bab5b951f469e27719b22aaeYifan Hong            out += ", ";
529171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        }
539171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
549171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        out += "[";
559171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        for (size_t j = 0; j < SIZE2; ++j) {
569171fb8572040f83bab5b951f469e27719b22aaeYifan Hong            if (j > 0) {
579171fb8572040f83bab5b951f469e27719b22aaeYifan Hong                out += ", ";
589171fb8572040f83bab5b951f469e27719b22aaeYifan Hong            }
599171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
609171fb8572040f83bab5b951f469e27719b22aaeYifan Hong            out += to_string(array[i][j]);
619171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        }
629171fb8572040f83bab5b951f469e27719b22aaeYifan Hong        out += "]";
639171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    }
649171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    out += "]";
659171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
669171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    return out;
679171fb8572040f83bab5b951f469e27719b22aaeYifan Hong}
689171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
699171fb8572040f83bab5b951f469e27719b22aaeYifan Hongtemplate<typename T>
709171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string to_string(const hidl_vec<T> &vec) {
719171fb8572040f83bab5b951f469e27719b22aaeYifan Hong    return to_string(&vec[0], vec.size());
729171fb8572040f83bab5b951f469e27719b22aaeYifan Hong}
739171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
749171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string QuuxToString(const IFoo::Quux &val);
759171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
769171fb8572040f83bab5b951f469e27719b22aaeYifan Hongstd::string MultiDimensionalToString(const IFoo::MultiDimensional &val);
779171fb8572040f83bab5b951f469e27719b22aaeYifan Hong
789171fb8572040f83bab5b951f469e27719b22aaeYifan Hong} // namespace android
799171fb8572040f83bab5b951f469e27719b22aaeYifan Hong#endif // ANDROID_HIDL_TEST_TEST_HELPER_H
80