Relay_and_Socket_Protection/src/Relays/Relays.c

57 lines
1.1 KiB
C

/*
* 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;
}