From fe20ad2fb05f08b66a2d387ece3055118adba46f Mon Sep 17 00:00:00 2001 From: jakeg00dwin Date: Sun, 1 Sep 2024 13:18:46 -0700 Subject: [PATCH] Wrote tests and code for disabling relays --- src/Relays/Relays.c | 8 ++++++++ tests/Relays/test_Relays.cpp | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/Relays/Relays.c b/src/Relays/Relays.c index 6c468d0..b366a88 100644 --- a/src/Relays/Relays.c +++ b/src/Relays/Relays.c @@ -17,4 +17,12 @@ void Relay_Enable(Relay *relay) { (*(uint8_t *)relay->output_port) |= (1 << (relay->output_pin)); } +void Relay_Disable(Relay *relay) { + if (relay->disabled_fpc) { + return; + } + + (*(uint8_t *)relay->output_port) &= ~(1 << (relay->output_pin)); +} + void Relay_DisableForPowerCycle(Relay *relay) { relay->disabled_fpc = true; } diff --git a/tests/Relays/test_Relays.cpp b/tests/Relays/test_Relays.cpp index b00396f..1f7dd55 100644 --- a/tests/Relays/test_Relays.cpp +++ b/tests/Relays/test_Relays.cpp @@ -70,3 +70,24 @@ TEST(test_Relays, EnableDoesNothingOnPCDisabledRelay) Relay_Enable(&relay); CHECK_EQUAL(0x00, *(uint8_t *)relay.output_port); } + + +TEST(test_Relays, DisableClearsCorrectPinsInPort) +{ + for(uint8_t i = 0; i <= 7; i++) { + zero_relay_struct(&relay); + *(uint8_t *)relay.output_port = 0xFF; + relay.output_pin = i; + Relay_Disable(&relay); + CHECK_EQUAL(0xFF & ~(1<