/** * @file app_main.h * @brief AliceRC application header */ #pragma once #include "freertos/FreeRTOS.h" #include "freertos/task.h" #ifdef __cplusplus extern "C" { #endif /* GPIO Pin Mapping - ESP32S3 */ /* ADC Channels */ #define ADC_CH1_GPIO 4 #define ADC_CH2_GPIO 5 #define ADC_CH3_GPIO 6 #define ADC_CH4_GPIO 7 #define ADC_CH5_GPIO 15 #define ADC_CH6_GPIO 16 #define ADC_CH7_GPIO 17 #define ADC_CH8_GPIO 9 #define ADC_BAT_GPIO 8 /* NRF24L01 - ESP32S3 */ #define NRF_MOSI_GPIO 1 #define NRF_MISO_GPIO 40 #define NRF_SCLK_GPIO 39 #define NRF_CS_GPIO 38 #define NRF_CE_GPIO 2 #define NRF_IRQ_GPIO 42 /* LLCC68 (E220) - ESP32S3 only */ #define LLCC_CS_GPIO 10 #define LLCC_SCLK_GPIO 11 #define LLCC_MISO_GPIO 12 #define LLCC_MOSI_GPIO 13 #define LLCC_NRST_GPIO 14 #define LLCC_BUSY_GPIO 45 #define LLCC_IRQ_GPIO 45 /* shared with BUSY? Check datasheet */ /* OLED SSD1315 - I2C */ #define OLED_SCL_GPIO 37 #define OLED_SDA_GPIO 36 /* Buttons */ #define BTN_UP_GPIO 35 #define BTN_DOWN_GPIO 48 #define BTN_SEL_GPIO 47 #define BTN_BACK_GPIO 3 /* Other peripherals */ #define USB_DM_GPIO 19 #define USB_DP_GPIO 20 #define AUDIO_PWM_GPIO 26 /* ESP32S3: PWM audio */ #define AUDIO_DAC_GPIO 26 /* ESP32: DAC audio */ #define PWR_EN_GPIO 41 #define STATUS_LED_GPIO 0 /* ESP32 (basic) GPIO mapping */ /* ADC Channels */ #define ESP32_ADC_CH1_GPIO 36 #define ESP32_ADC_CH2_GPIO 39 #define ESP32_ADC_CH3_GPIO 34 #define ESP32_ADC_CH4_GPIO 35 #define ESP32_ADC_CH5_GPIO 32 #define ESP32_ADC_CH6_GPIO 33 #define ESP32_ADC_CH7_GPIO 25 #define ESP32_ADC_CH8_GPIO 13 /* NRF24L01 - ESP32 */ #define ESP32_NRF_MOSI_GPIO 23 #define ESP32_NRF_MISO_GPIO 19 #define ESP32_NRF_SCLK_GPIO 18 #define ESP32_NRF_CS_GPIO 5 #define ESP32_NRF_CE_GPIO 22 #define ESP32_NRF_IRQ_GPIO 21 /* OLED - ESP32 */ #define ESP32_OLED_SCL_GPIO 17 #define ESP32_OLED_SDA_GPIO 16 /* Buttons - ESP32 */ #define ESP32_BTN_UP_GPIO 4 #define ESP32_BTN_DOWN_GPIO 2 #define ESP32_BTN_SEL_GPIO 15 /* Battery */ #define BAT_ADC_CHANNEL ADC_CHANNEL_0 #define BAT_DIVIDER_RATIO 2.0f /* Voltage divider ratio */ #define BAT_FULL_MV 4200 /* Full battery mV */ #define BAT_EMPTY_MV 3200 /* Empty battery mV */ /* Task priorities */ #define TASK_PRIO_RF 5 #define TASK_PRIO_UI 4 #define TASK_PRIO_ADC 3 #define TASK_PRIO_AUDIO 2 /* Task stack sizes */ #define TASK_STACK_RF 4096 #define TASK_STACK_UI 4096 #define TASK_STACK_ADC 2048 #define TASK_STACK_AUDIO 2048 /* Function declarations */ void app_init(void); void app_init_gpio(void); void app_create_tasks(void); uint8_t battery_get_percent(uint16_t mv); /* Data type definitions */ typedef struct adc_data_s { uint16_t channels[8]; uint16_t battery_mv; } adc_data_t; typedef struct { uint8_t key; /* KEY_UP, KEY_DOWN, KEY_SEL, KEY_BACK */ uint8_t action; /* 0=press, 1=release, 2=long_press */ } ui_event_t; /* Queue handles (defined in app_main.c) */ extern QueueHandle_t adc_data_queue; extern QueueHandle_t rf_command_queue; extern QueueHandle_t ui_event_queue; /* RF task */ void rf_task(void *pvParameters); /* UI task */ void ui_task(void *pvParameters); /* ADC task */ void adc_task(void *pvParameters); /* Audio task */ void audio_task(void *pvParameters); #ifdef __cplusplus } #endif