/****************************************************************************** Tests bugs in Sparkfun Qwiic Button Arduino Library. Platform: Arduino Nano ******************************************************************************/ #include #define RSLT_FAILED 99 QwiicButton Button; uint8_t TestCount = 0; void setup() { uint8_t failed_count = 0; Serial.begin(115200); Serial.println(); Serial.println("========================"); Serial.println("QwiicButtonBugTest.ino"); Serial.println("Qwiic Button Bug Testing"); Serial.println("========================"); Wire.begin(); // Join I2C bus if (Button.begin() == false) { Serial.println("Device did not acknowledge! Freezing."); while (1) { ; } } Serial.println("Button acknowledged."); Serial.println(); failed_count += DoTest1(); failed_count += DoTest2(); failed_count += DoTest3(); failed_count += DoTest4(); failed_count += DoTest5(); failed_count += DoTest6(); failed_count += DoTest7(); failed_count += DoTest8(); failed_count += DoTest9(); // show pass/fail results summary if (failed_count) { Serial.print("Failed "); Serial.print(failed_count); Serial.print(" of "); Serial.print(TestCount); Serial.println(" tests!"); } else { Serial.print("All "); Serial.print(TestCount); Serial.println(" tests passed!"); } } void loop() { } // Test #1 uint8_t DoTest1(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing resetInterruptConfig()"); Button.writeSingleRegister(BUTTON_STATUS, 0xff); // set BUTTON_STATUS to 0xff rslt = Button.resetInterruptConfig(); // clear BUTTON_STATUS.eventAvailable bit if (rslt != 0) { Serial.println(" Button.resetInterruptConfig() failed!"); } else if (Button.available()) { Serial.println(" Button.eventAvailable bit clear failed!"); rslt = RSLT_FAILED; } else { rslt = 0; } return DoTestReturn(rslt); } // Test #2 uint8_t DoTest2(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing writeSingleRegisterWithReadback()"); Button.writeSingleRegister(LED_BRIGHTNESS, 0x5a); // set LED_BRIGHTNESS to 0x5a // set LED_BRIGHTNESS to 100 and verify with readback rslt = Button.writeSingleRegisterWithReadback(LED_BRIGHTNESS, 100); if (rslt != 0) { Serial.println(" Button.writeSingleRegisterWithReadback() failed!"); } return DoTestReturn(rslt); } // Test #3 uint8_t DoTest3(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing writeDoubleRegisterWithReadback()"); Button.writeDoubleRegister(LED_PULSE_OFF_TIME, 0xa55a); // set LED_PULSE_OFF_TIME to 0xa55a // set LED_PULSE_OFF_TIME to 1000 and verify with readback rslt = Button.writeDoubleRegisterWithReadback(LED_PULSE_OFF_TIME, 1000); if (rslt != 0) { Serial.println(" Button.writeDoubleRegisterWithReadback() failed!"); } return DoTestReturn(rslt); } // Test #4 uint8_t DoTest4(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing setDebounceTime()"); Button.writeDoubleRegister(BUTTON_DEBOUNCE_TIME, 0x1234); // set BUTTON_DEBOUNCE_TIME to 0x1234 // set BUTTON_DEBOUNCE_TIME to 0x5678 and verify with readback rslt = Button.setDebounceTime(0x5678); if (rslt != 0) { Serial.println(" Button.setDebounceTime() failed!"); } return DoTestReturn(rslt); } // Test #5 uint8_t DoTest5(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing enablePressedInterrupt()"); Button.writeSingleRegister(INTERRUPT_CONFIG, 0); // set INTERRUPT_CONFIG to 0 rslt = Button.enablePressedInterrupt(); // set INTERRUPT_CONFIG.pressedEnable bit if (rslt != 0) { Serial.println(" Button.enablePressedInterrupt() failed!"); } return DoTestReturn(rslt); } // Test #6 uint8_t DoTest6(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing disablePressedInterrupt()"); Button.writeSingleRegister(INTERRUPT_CONFIG, 0xff); // set INTERRUPT_CONFIG to 0xff rslt = Button.disablePressedInterrupt(); // clear INTERRUPT_CONFIG.pressedEnable bit if (rslt != 0) { Serial.println(" Button.disablePressedInterrupt() failed!"); } return DoTestReturn(rslt); } // Test #7 uint8_t DoTest7(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing enableClickedInterrupt()"); Button.writeSingleRegister(INTERRUPT_CONFIG, 0); // set INTERRUPT_CONFIG to 0 rslt = Button.enableClickedInterrupt(); // set INTERRUPT_CONFIG.clickedEnable bit if (rslt != 0) { Serial.println(" Button.enableClickedInterrupt() failed!"); } return DoTestReturn(rslt); } // Test #8 uint8_t DoTest8(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing disableClickedInterrupt()"); Button.writeSingleRegister(INTERRUPT_CONFIG, 0xff); // set INTERRUPT_CONFIG to 0xff rslt = Button.disableClickedInterrupt(); // clear INTERRUPT_CONFIG.clickedEnable bit if (rslt != 0) { Serial.println(" Button.disableClickedInterrupt() failed!"); } return DoTestReturn(rslt); } // Test #9 uint8_t DoTest9(void) { uint8_t rslt; Serial.print(TestCount + 1); Serial.println(": Testing clearEventBits()"); Button.writeSingleRegister(BUTTON_STATUS, 0xff); // set BUTTON_STATUS to 0xff rslt = Button.clearEventBits(); // clear BUTTON_STATUS event bits if (rslt != 0) { Serial.println(" Button.clearEventBits() failed!"); } return DoTestReturn(rslt); } uint8_t DoTestReturn(uint8_t rslt) { uint8_t fail = 0; if (rslt == RSLT_FAILED) { ++fail; } else if (rslt != 0) { Serial.print(" Returned "); Serial.print(rslt); Serial.println(", expected 0"); ++fail; } else { Serial.println(" Tested OK"); } Serial.println(); delay(10); ++TestCount; return fail; } /* ------------------------------ Actual Test Results ---------------------------- ======================== QwiicButtonBugTest.ino Qwiic Button Bug Testing ======================== Button acknowledged. 1: Testing resetInterruptConfig() Button.resetInterruptConfig() failed! Returned 1, expected 0 2: Testing writeSingleRegisterWithReadback() Button.writeSingleRegisterWithReadback() failed! Returned 1, expected 0 3: Testing writeDoubleRegisterWithReadback() Button.writeDoubleRegisterWithReadback() failed! Returned 1, expected 0 4: Testing setDebounceTime() Button.setDebounceTime() failed! Returned 1, expected 0 5: Testing enablePressedInterrupt() Button.enablePressedInterrupt() failed! Returned 1, expected 0 6: Testing disablePressedInterrupt() Button.disablePressedInterrupt() failed! Returned 1, expected 0 7: Testing enableClickedInterrupt() Button.enableClickedInterrupt() failed! Returned 1, expected 0 8: Testing disableClickedInterrupt() Button.disableClickedInterrupt() failed! Returned 1, expected 0 9: Testing clearEventBits() Button.clearEventBits() failed! Returned 1, expected 0 Failed 9 of 9 tests! ----------------------------- Expected Test Results --------------------------- ======================== QwiicButtonBugTest.ino Qwiic Button Bug Testing ======================== Button acknowledged. 1: Testing resetInterruptConfig() Tested OK 2: Testing writeSingleRegisterWithReadback() Tested OK 3: Testing writeDoubleRegisterWithReadback() Tested OK 4: Testing setDebounceTime() Tested OK 5: Testing enablePressedInterrupt() Tested OK 6: Testing disablePressedInterrupt() Tested OK 7: Testing enableClickedInterrupt() Tested OK 8: Testing disableClickedInterrupt() Tested OK 9: Testing clearEventBits() Tested OK All 9 tests passed! */