summaryrefslogtreecommitdiff
path: root/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp')
-rw-r--r--quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp89
1 files changed, 72 insertions, 17 deletions
diff --git a/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp b/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp
index a6519c5762..5612f8b658 100644
--- a/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp
+++ b/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp
@@ -33,22 +33,29 @@ struct update {
uint8_t updates_array_idx = 0;
update updates[32];
+bool isMaster;
bool isLeftHand;
+extern "C" {
+bool is_keyboard_master(void) {
+ return isMaster;
+}
+
bool encoder_update_kb(uint8_t index, bool clockwise) {
- if (!isLeftHand) {
+ if (!is_keyboard_master()) {
// this method has no effect on slave half
- printf("ignoring update on right hand (%d,%s)\n", index, clockwise ? "CW" : "CC");
+ printf("ignoring update on slave (%d,%s)\n", index, clockwise ? "CW" : "CC");
return true;
}
updates[updates_array_idx % 32] = {index, clockwise};
updates_array_idx++;
return true;
}
+};
bool setAndRead(pin_t pin, bool val) {
setPin(pin, val);
- return encoder_read();
+ return encoder_task();
}
class EncoderSplitTestLeftLessThanRight : public ::testing::Test {
@@ -94,7 +101,8 @@ TEST_F(EncoderSplitTestLeftLessThanRight, TestInitRight) {
EXPECT_EQ(updates_array_idx, 0); // no updates received
}
-TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeft) {
+TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeftMaster) {
+ isMaster = true;
isLeftHand = true;
encoder_init();
// send 4 pulses. with resolution 4, that's one step and we should get 1 update.
@@ -106,9 +114,19 @@ TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeft) {
EXPECT_EQ(updates_array_idx, 1); // one update received
EXPECT_EQ(updates[0].index, 0);
EXPECT_EQ(updates[0].clockwise, true);
+
+ int events_queued = 0;
+ encoder_events_t events;
+ encoder_retrieve_events(&events);
+ while (events.tail != events.head) {
+ events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS;
+ ++events_queued;
+ }
+ EXPECT_EQ(events_queued, 0); // No events should be queued on master
}
-TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightSent) {
+TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightMaster) {
+ isMaster = true;
isLeftHand = false;
encoder_init();
// send 4 pulses. with resolution 4, that's one step and we should get 1 update.
@@ -117,23 +135,60 @@ TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightSent) {
setAndRead(6, true);
setAndRead(7, true);
- uint8_t slave_state[32] = {0};
- encoder_state_raw(slave_state);
+ EXPECT_EQ(updates_array_idx, 1); // one update received
+ EXPECT_EQ(updates[0].index, 3);
+ EXPECT_EQ(updates[0].clockwise, true);
- EXPECT_EQ(slave_state[0], 0);
- EXPECT_EQ(slave_state[1], 0xFF);
+ int events_queued = 0;
+ encoder_events_t events;
+ encoder_retrieve_events(&events);
+ while (events.tail != events.head) {
+ events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS;
+ ++events_queued;
+ }
+ EXPECT_EQ(events_queued, 0); // No events should be queued on master
}
-TEST_F(EncoderSplitTestLeftLessThanRight, TestMultipleEncodersRightReceived) {
+TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeftSlave) {
+ isMaster = false;
isLeftHand = true;
encoder_init();
+ // send 4 pulses. with resolution 4, that's one step and we should get 1 update.
+ setAndRead(0, false);
+ setAndRead(1, false);
+ setAndRead(0, true);
+ setAndRead(1, true);
- uint8_t slave_state[32] = {1, 0, 0xFF}; // First right encoder is CCW, Second right encoder no change, third right encoder CW
- encoder_update_raw(slave_state);
+ EXPECT_EQ(updates_array_idx, 0); // no updates received
- EXPECT_EQ(updates_array_idx, 2); // two updates received, one for each changed item on the right side
- EXPECT_EQ(updates[0].index, 2);
- EXPECT_EQ(updates[0].clockwise, false);
- EXPECT_EQ(updates[1].index, 4);
- EXPECT_EQ(updates[1].clockwise, true);
+ int events_queued = 0;
+ encoder_events_t events;
+ encoder_retrieve_events(&events);
+ while (events.tail != events.head) {
+ events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS;
+ ++events_queued;
+ }
+ EXPECT_EQ(events_queued, 1); // One event should be queued on slave
+}
+
+TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightSlave) {
+ isMaster = false;
+ isLeftHand = false;
+ encoder_init();
+ // send 4 pulses. with resolution 4, that's one step and we should get 1 update.
+ setAndRead(6, false);
+ setAndRead(7, false);
+ setAndRead(6, true);
+ setAndRead(7, true);
+
+ EXPECT_EQ(updates_array_idx, 0); // no updates received
+
+ int events_queued = 0;
+ encoder_events_t events;
+ encoder_retrieve_events(&events);
+ while (events.tail != events.head) {
+ events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS;
+ ++events_queued;
+ }
+ EXPECT_EQ(events_queued, 1); // One event should be queued on slave
}