From e4a9be2a4f68781d318770296a50f4823c419805 Mon Sep 17 00:00:00 2001 From: Oxore Date: Tue, 7 Mar 2023 15:44:35 +0300 Subject: Add firmware decomposition description --- structure.txt | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 structure.txt diff --git a/structure.txt b/structure.txt new file mode 100644 index 0000000..23be605 --- /dev/null +++ b/structure.txt @@ -0,0 +1,60 @@ +Состав аппаратуры и её нагрузка на периферию +- Датчик освещённости (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 и корректировка времени -- cgit v1.2.3