141 lines
3.4 KiB
C
141 lines
3.4 KiB
C
/**
|
|
* @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
|