/* * Author: Jake G * Date: 2024-09-01 * filename: Relays.c * description: module_purpose */ #include "Relays.h" #ifndef UNIT_TESTING #include "timer.h" #else #include "TimerMock.h" #endif void Relay_MeasureMakeTime(Relay *relay) { Timer_Start(); Relay_Enable(relay); while (!Relay_ReadState(relay)) { } Timer_Stop(); relay->make_time = Timer_GetOverflowCount(); } void Relay_MeasureBreakTime(Relay *relay) { Timer_Start(); Relay_Disable(relay); while (Relay_ReadState(relay)) { } Timer_Stop(); relay->break_time = Timer_GetOverflowCount(); } void Relay_Enable(Relay *relay) { if (relay->disabled_fpc) { return; } (*(volatile 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; } bool Relay_ReadState(Relay *relay) { if (*(volatile uint8_t *)relay->input_port & (1 << relay->input_pin)) { return true; } return false; }