57 lines
1.1 KiB
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;
|
|
}
|