blob: 985240760c97154c7b0883fb11c39cd161ae64bc [file] [log] [blame]
Yifan Hong0c4c7a32016-11-28 15:59:24 -08001#define LOG_TAG "hidl_test"
2
Yifan Hongd5b5b2e2016-10-06 13:50:49 -07003#include "Graph.h"
Yifan Hong0c4c7a32016-11-28 15:59:24 -08004#include <android/log.h>
Yifan Hong30dc3de2016-10-17 11:38:15 -07005#include <hidl-test/PointerHelper.h>
Yifan Hongd5b5b2e2016-10-06 13:50:49 -07006
7#define PUSH_ERROR_IF(__cond__) if(__cond__) { errors.push_back(std::to_string(__LINE__) + ": " + #__cond__); }
8
9namespace android {
10namespace hardware {
11namespace tests {
12namespace pointer {
13namespace V1_0 {
14namespace implementation {
15
Yifan Hongd5b5b2e2016-10-06 13:50:49 -070016// Methods from ::android::hardware::tests::pointer::V1_0::IGraph follow.
17Return<void> Graph::passAGraph(const IGraph::Graph& g) {
18 ALOGI("SERVER(Graph) passAGraph start.");
19 PUSH_ERROR_IF(!isSimpleGraph(g));
20 // logSimpleGraph("SERVER(Graph) passAGraph:", g);
21 return Void();
22}
23
24Return<void> Graph::giveAGraph(giveAGraph_cb _cb) {
25 IGraph::Graph g;
26 simpleGraph(g);
27 _cb(g);
28 return Void();
29}
30
31Return<void> Graph::passANode(const IGraph::Node& n) {
32 PUSH_ERROR_IF(n.data != 10);
33 return Void();
34}
35
36Return<void> Graph::passTwoGraphs(IGraph::Graph const* g1, IGraph::Graph const* g2) {
37 PUSH_ERROR_IF(g1 != g2);
38 PUSH_ERROR_IF(!isSimpleGraph(*g1));
39 logSimpleGraph("SERVER(Graph): passTwoGraphs", *g2);
40 return Void();
41}
42
43Return<void> Graph::passAGamma(const IGraph::Gamma& c) {
44 if(c.a_ptr == nullptr && c.b_ptr == nullptr)
45 return Void();
46 ALOGI("SERVER(Graph) passAGamma received c.a = %p, c.b = %p, c.a->s = %p, c.b->s = %p",
47 c.a_ptr, c.b_ptr, c.a_ptr->s_ptr, c.b_ptr->s_ptr);
48 ALOGI("SERVER(Graph) passAGamma received data %d, %d",
49 (int)c.a_ptr->s_ptr->data, (int)c.b_ptr->s_ptr->data);
50 PUSH_ERROR_IF(c.a_ptr->s_ptr != c.b_ptr->s_ptr);
51 return Void();
52}
53Return<void> Graph::passASimpleRef(const IGraph::Alpha * a_ptr) {
54 ALOGI("SERVER(Graph) passASimpleRef received %d", a_ptr->s_ptr->data);
55 PUSH_ERROR_IF(a_ptr->s_ptr->data != 500);
56 return Void();
57}
58Return<void> Graph::passASimpleRefS(const IGraph::Theta * s_ptr) {
59 ALOGI("SERVER(Graph) passASimpleRefS received %d @ %p", s_ptr->data, s_ptr);
60 PUSH_ERROR_IF(s_ptr->data == 10);
61 return Void();
62}
63Return<void> Graph::giveASimpleRef(giveASimpleRef_cb _cb) {
64 IGraph::Theta s; s.data = 500;
65 IGraph::Alpha a; a.s_ptr = &s;
66 _cb(&a);
67 return Void();
68}
69
70Return<int32_t> Graph::getErrors() {
71 if(!errors.empty()) {
72 for(const auto& e : errors)
73 ALOGW("SERVER(Graph) error: %s", e.c_str());
74 }
75 return errors.size();
76}
77
78IGraph* HIDL_FETCH_IGraph(const char* /* name */) {
79 return new Graph();
80}
81
82} // namespace implementation
83} // namespace V1_0
84} // namespace pointer
85} // namespace tests
86} // namespace hardware
87} // namespace android