blob: 7cc4f5b76c71b1b6107458539fab89607d4326fd [file] [log] [blame]
Hridya Valsaraju8a708622017-03-06 14:10:42 -08001#include "TestMsgQ.h"
2
3namespace android {
4namespace hardware {
5namespace tests {
6namespace msgq {
7namespace V1_0 {
8namespace implementation {
9
10// Methods from ::android::hardware::tests::msgq::V1_0::ITestMsgQ follow.
11Return<void> TestMsgQ::configureFmqSyncReadWrite(configureFmqSyncReadWrite_cb _hidl_cb) {
12 static constexpr size_t kNumElementsInQueue = 1024;
13 mFmqSynchronized.reset(new (std::nothrow) MessageQueueSync(
14 kNumElementsInQueue, true /* configureEventFlagWord */));
15 if ((mFmqSynchronized == nullptr) || (mFmqSynchronized->isValid() == false)) {
16 _hidl_cb(false /* ret */, MessageQueueSync::Descriptor());
17 } else {
18 /*
19 * Initialize the EventFlag word with bit FMQ_NOT_FULL.
20 */
21 auto evFlagWordPtr = mFmqSynchronized->getEventFlagWord();
22 if (evFlagWordPtr != nullptr) {
23 std::atomic_init(evFlagWordPtr,
24 static_cast<uint32_t>(ITestMsgQ::EventFlagBits::FMQ_NOT_FULL));
25 }
26 _hidl_cb(true /* ret */, *mFmqSynchronized->getDesc());
27 }
28 return Void();
29}
30
31Return<void> TestMsgQ::getFmqUnsyncWrite(bool configureFmq, getFmqUnsyncWrite_cb _hidl_cb) {
32 if (configureFmq) {
33 static constexpr size_t kNumElementsInQueue = 1024;
34 mFmqUnsynchronized.reset(new (std::nothrow) MessageQueueUnsync(kNumElementsInQueue));
35 }
36 if ((mFmqUnsynchronized == nullptr) ||
37 (mFmqUnsynchronized->isValid() == false)) {
38 _hidl_cb(false /* ret */, MessageQueueUnsync::Descriptor());
39 } else {
40 _hidl_cb(true /* ret */, *mFmqUnsynchronized->getDesc());
41 }
42 return Void();
43}
44
45Return<bool> TestMsgQ::requestWriteFmqSync(int32_t count) {
46 std::vector<uint16_t> data(count);
47 for (int i = 0; i < count; i++) {
48 data[i] = i;
49 }
50 bool result = mFmqSynchronized->write(&data[0], count);
51 return result;
52}
53
54Return<bool> TestMsgQ::requestReadFmqSync(int32_t count) {
55 std::vector<uint16_t> data(count);
56 bool result = mFmqSynchronized->read(&data[0], count)
57 && verifyData(&data[0], count);
58 return result;
59}
60
61Return<bool> TestMsgQ::requestWriteFmqUnsync(int32_t count) {
62 std::vector<uint16_t> data(count);
63 for (int i = 0; i < count; i++) {
64 data[i] = i;
65 }
66 bool result = mFmqUnsynchronized->write(&data[0], count);
67 return result;
68}
69
70Return<bool> TestMsgQ::requestReadFmqUnsync(int32_t count) {
71 std::vector<uint16_t> data(count);
72 bool result =
73 mFmqUnsynchronized->read(&data[0], count) && verifyData(&data[0], count);
74 return result;
75}
76
77Return<void> TestMsgQ::requestBlockingRead(int32_t count) {
78 std::vector<uint16_t> data(count);
79 bool result = mFmqSynchronized->readBlocking(
80 &data[0],
81 count,
82 static_cast<uint32_t>(ITestMsgQ::EventFlagBits::FMQ_NOT_FULL),
83 static_cast<uint32_t>(ITestMsgQ::EventFlagBits::FMQ_NOT_EMPTY),
84 5000000000 /* timeOutNanos */);
85
86 if (result == false) {
87 ALOGE("Blocking read fails");
88 }
89 return Void();
90}
91
92Return<void> TestMsgQ::requestBlockingReadDefaultEventFlagBits(int32_t count) {
93 std::vector<uint16_t> data(count);
94 bool result = mFmqSynchronized->readBlocking(
95 &data[0],
96 count);
97
98 if (result == false) {
99 ALOGE("Blocking read fails");
100 }
101
102 return Void();
103}
104
105Return<void> TestMsgQ::requestBlockingReadRepeat(int32_t count, int32_t numIter) {
106 std::vector<uint16_t> data(count);
107 for (int i = 0; i < numIter; i++) {
108 bool result = mFmqSynchronized->readBlocking(
109 &data[0],
110 count,
111 static_cast<uint32_t>(ITestMsgQ::EventFlagBits::FMQ_NOT_FULL),
112 static_cast<uint32_t>(ITestMsgQ::EventFlagBits::FMQ_NOT_EMPTY),
113 5000000000 /* timeOutNanos */);
114
115 if (result == false) {
116 ALOGE("Blocking read fails");
117 break;
118 }
119 }
120 return Void();
121}
122
123
124// Methods from ::android::hidl::base::V1_0::IBase follow.
125
126ITestMsgQ* HIDL_FETCH_ITestMsgQ(const char* /* name */) {
127 return new TestMsgQ();
128}
129
130} // namespace implementation
131} // namespace V1_0
132} // namespace msgq
133} // namespace tests
134} // namespace hardware
135} // namespace android