Состав аппаратуры и её нагрузка на периферию - Датчик освещённости (ADC) - ADC1 CH6 - GPIO PA6(ADC_IN6) - DMA ? - Две сенсорные кнопки (TSC) - TIM15 - GPIO PA2(Button2, TSC_G1_IO3), PA3(SEMCAP), PB3(Button1, TSC_G5_IO1), PB4(SEMCAP) - Шесть индикаторных ламп (SPI, GPIO) - SPI 1 (в сдвиговый регистр) - GPIO PA4(ST), PA5(SH), PA7(DATA), PB12(dp2), PB14(dp1) - DMA ? - Шесть разноцветных светодиодов (SPI, GPIO) - SPI 2 - GPIO PB15(DATA) - DMA ? - Отладочные логи (UART) - UART1 115200 8N1 RX,TX - GPIO PA9(TX), PA10(RX) - DMA ? - GPS (UART) - UART4 9600 8N1 RX,TX - GPIO PA0(TX), PA1(RX) - DMA ? - WIFI/BLE (UART, GPIO) - UART3 115200 8N1 RX,TX,RTS,CTS - GPIO PA15(IO0), PB0(EN), PB1(RTS), PB10(TX), PB11(RX), PB13(CTS) - DMA ? Предполагаемый состав ПО: - Объект управления лампами - Установить яркость конкретной лампы или всех ламп сразу SetBrightness() - Установить текущее значение для отображения (строка или что-то посложнее, потому что там можно ещё запятые у каждой лампы включать) ApplyValue() - Объект кнопки - Геттер состояния IsPressed(), больше ничего - Объект управления подсветкой - Установить массив из 6-ти цветов RGB Apply() - UART'ы - просто дескрипторы - Дескрипторы 0, 1 и 2 - UART1, при использовании дескриптора 2 запись и чтение производятся мимо буфера, напрямую в периферию, чтобы работало даже когда прерывания отключены - Дескриптор 3 - WIFI (UART3) - Дескриптор 4 - GPS (UART4) - Кольцевые буферы на RX и TX - Чтобы работал fcntl(O_NONBLOCK) - Объект датчика овещённости - Из платформы более или менее сырое значение через GetValue(), чтобы сравнивать его с порогом, который можно менять в рантайме - IsObscured() для сравнения с порогом - GetValue() для получения сырого значения - SetThreshold() для установки нового порога - Объект хранилища настроек - Зависимость яркости ламп от освещённости - Настройки хранятся в энергонезависимой памяти RTC - Основной поток с логикой - Режим меню с настройкой по кнопкам - Обработка команд от WIFI - Обработка данных от GPS и корректировка времени