Files

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