diff --git a/Software/Core/Inc/mappings.h b/Software/Core/Inc/mappings.h index d72f84d..10da724 100644 --- a/Software/Core/Inc/mappings.h +++ b/Software/Core/Inc/mappings.h @@ -136,6 +136,10 @@ static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = { } }; +static uint8_t DIO_LATCHING[NUM_DIO_PINS] = { + 1, 1, 0, 0, 0, 0, +}; + #define CAN_PWM_DC_ID 0x0DA // UNUSED #define CAN_PWM_CONF_ID 0x0DB // UNUSED #define CAN_PWM_BASE_ID CAN_PWM_DC_ID @@ -183,6 +187,10 @@ static can_pkt_t CAN_SIGNAL_MAP[NUM_TX_PKT] = { } }; +static uint8_t DIO_LATCHING[NUM_DIO_PINS] = { + 0, 0, 0, 0, 0, 0, +}; + #define CAN_PWM_DC_ID 0x0DC #define CAN_PWM_CONF_ID 0x0DD #define CAN_PWM_BASE_ID CAN_PWM_DC_ID diff --git a/Software/Core/Src/main.c b/Software/Core/Src/main.c index eac2132..35a5f1e 100644 --- a/Software/Core/Src/main.c +++ b/Software/Core/Src/main.c @@ -90,10 +90,16 @@ void loop_1kHz() { mscounter++; for (int di = 0; di < NUM_DIO_PINS; di++) { - dio_values[di] = HAL_GPIO_ReadPin( + uint8_t value = HAL_GPIO_ReadPin( DIO_PIN_MAP[di].port, DIO_PIN_MAP[di].pin ); + + if (DIO_LATCHING[di]) { + dio_values[di] |= value; + } else { + dio_values[di] = value; + } } for (int pi = 0; pi < NUM_TX_PKT; pi++) { @@ -116,6 +122,7 @@ void loop_1kHz() { switch (signal->type) { case DIN: value = dio_values[signal->channel]; + dio_values[signal->channel] = 0; // will be overwritten with real value at start of 1kHz loop break; case AIN: