Files
TX/source/io.c

126 lines
1.9 KiB
C
Raw Normal View History

2025-06-11 10:55:00 -05:00
#include "io.h"
#include "spi.h"
#define EXPANDER_SIZE 3
static uint8_t _expanderState[EXPANDER_SIZE]; // copy of Shift register I/O expander
//Port_State[BOTTOM_SR] |= TAP2_LF_ON;
void io_expanderSet(uint8_t port, uint8_t pins, bool update)
{
_expanderState[port] |= pins;
if (update) io_update();
2025-06-11 10:55:00 -05:00
}
void io_expanderClear(uint8_t port, uint8_t pins, bool update)
{
_expanderState[port] &= ~pins;
if (update) io_update();
2025-06-11 10:55:00 -05:00
}
// update I/O expander
void io_update(void)
{
SPI0_SendBytes(_expanderState, EXPANDER_SIZE, EXPANDER);
}
void io_expanderSetSafe(void)
{
io_expanderClearAll(NO_UPDATE);
io_connectAmpAB(false, NO_UPDATE);
io_backlightOn(true, NO_UPDATE);
io_ampPsuOn(false, NO_UPDATE);
2025-06-11 10:55:00 -05:00
io_update();
}
void io_connectAmpAB(bool connect, bool update)
{
if (connect)
{
EXPANDER_CLEAR(DISCONNECT_AB, NO_UPDATE);
}
else
{
EXPANDER_SET(DISCONNECT_AB, NO_UPDATE);
}
if (update) io_update();
}
void io_expanderClearAll(bool update)
{
_expanderState[BOT_SR] = 0;
_expanderState[MID_SR] = 0;
_expanderState[TOP_SR] = 0;
if (update) io_update();
}
void io_backlightOn(bool on, bool update)
{
if (on)
{
EXPANDER_SET(BACKLIGHT_ON, NO_UPDATE);
}
else
{
EXPANDER_CLEAR(BACKLIGHT_ON, NO_UPDATE);
}
if (update) io_update();
}
void io_ampDOn(bool on, bool update)
{
if (on)
{
EXPANDER_SET(AMP_D_EN, NO_UPDATE);
}
else
{
EXPANDER_CLEAR(AMP_D_EN, NO_UPDATE);
}
if (update) io_update();
}
void io_broadcastOn(bool on, bool update)
{
if (on)
{
EXPANDER_SET(BROADCAST_AMP_EN, NO_UPDATE);
EXPANDER_SET(BROADCAST_AMP_PWR, NO_UPDATE);
}
else
{
EXPANDER_CLEAR(BROADCAST_AMP_EN, NO_UPDATE);
EXPANDER_CLEAR(BROADCAST_AMP_PWR, NO_UPDATE);
}
if (update) io_update();
}
void io_ampPsuOn(bool on, bool update)
{
if (on)
{
EXPANDER_CLEAR( _AMP_PSU_ON, NO_UPDATE);
}
else
{
EXPANDER_SET(_AMP_PSU_ON, NO_UPDATE);
}
if (update) io_update();
}