работает слейв и мастер
This commit is contained in:
84
App/slave_inputs.c
Normal file
84
App/slave_inputs.c
Normal file
@@ -0,0 +1,84 @@
|
||||
#include "app_config.h"
|
||||
#include "app_types.h"
|
||||
#include "hardware.h"
|
||||
#include "slave_inputs.h"
|
||||
|
||||
static uint8_t Analog_ToPercent(uint16_t raw)
|
||||
{
|
||||
uint32_t clamped = raw;
|
||||
|
||||
if (clamped > APP_ANALOG_MAX_RAW)
|
||||
{
|
||||
clamped = APP_ANALOG_MAX_RAW;
|
||||
}
|
||||
|
||||
return (uint8_t)((clamped * 100U) / APP_ANALOG_MAX_RAW);
|
||||
}
|
||||
|
||||
void SlaveInputs_Init(void)
|
||||
{
|
||||
for (uint8_t i = 0U; i < APP_BUTTON_COUNT; i++)
|
||||
{
|
||||
g_app.slave_inputs.buttons[i].pressed = Hardware_ReadButton(i);
|
||||
g_app.slave_inputs.buttons[i].changed = false;
|
||||
g_app.slave_inputs.buttons[i].last_change_ms = Hardware_GetTickMs();
|
||||
}
|
||||
|
||||
g_app.slave_inputs.analog.raw = Hardware_ReadAnalogRaw();
|
||||
g_app.slave_inputs.analog.filtered = g_app.slave_inputs.analog.raw;
|
||||
g_app.slave_inputs.analog.percent = Analog_ToPercent(g_app.slave_inputs.analog.filtered);
|
||||
}
|
||||
|
||||
void SlaveInputs_Process(void)
|
||||
{
|
||||
const uint32_t now = Hardware_GetTickMs();
|
||||
|
||||
for (uint8_t i = 0U; i < APP_BUTTON_COUNT; i++)
|
||||
{
|
||||
const bool pressed = Hardware_ReadButton(i);
|
||||
AppButton_t *button = &g_app.slave_inputs.buttons[i];
|
||||
|
||||
if ((pressed != button->pressed) &&
|
||||
((now - button->last_change_ms) >= APP_BUTTON_DEBOUNCE_MS))
|
||||
{
|
||||
button->pressed = pressed;
|
||||
button->changed = true;
|
||||
button->last_change_ms = now;
|
||||
g_app.slave_inputs.sequence++;
|
||||
}
|
||||
}
|
||||
|
||||
const uint16_t raw = Hardware_ReadAnalogRaw();
|
||||
AppAnalogChannel_t *analog = &g_app.slave_inputs.analog;
|
||||
const uint16_t old_percent = analog->percent;
|
||||
|
||||
analog->raw = raw;
|
||||
analog->filtered = (uint16_t)(((uint32_t)analog->filtered * 7U + raw) / 8U);
|
||||
analog->percent = Analog_ToPercent(analog->filtered);
|
||||
|
||||
if (analog->percent != old_percent)
|
||||
{
|
||||
g_app.slave_inputs.sequence++;
|
||||
}
|
||||
}
|
||||
|
||||
int SlaveInputs_HasChanges(void)
|
||||
{
|
||||
for (uint8_t i = 0U; i < APP_BUTTON_COUNT; i++)
|
||||
{
|
||||
if (g_app.slave_inputs.buttons[i].changed)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SlaveInputs_ClearChanges(void)
|
||||
{
|
||||
for (uint8_t i = 0U; i < APP_BUTTON_COUNT; i++)
|
||||
{
|
||||
g_app.slave_inputs.buttons[i].changed = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user