Initial commit

This commit is contained in:
erki 2023-06-03 11:21:59 +03:00
parent c55149afc2
commit 2a9abffffb
7 changed files with 1986 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
build/
sdkconfig
sdkconfig.old
.vscode/

8
CMakeLists.txt Normal file
View File

@ -0,0 +1,8 @@
# For more information about build system see
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(espnow-testies)

3
main/CMakeLists.txt Normal file
View File

@ -0,0 +1,3 @@
idf_component_register(SRCS "esp_tunnel.cpp"
"app_networking.cpp"
INCLUDE_DIRS ".")

36
main/app_networking.cpp Normal file
View File

@ -0,0 +1,36 @@
#include "app_networking.hpp"
#include "esp_event.h"
#include "esp_netif.h"
#include "esp_wifi.h"
#include "esp_now.h"
namespace
{
}
namespace App
{
void setupWifi()
{
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg) );
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_ERROR_CHECK(esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE));
}
void setupEspNow()
{
ESP_ERROR_CHECK(esp_now_init());
// ESP_ERROR_CHECK(esp_now_set_pmk(nullptr));
}
}

9
main/app_networking.hpp Normal file
View File

@ -0,0 +1,9 @@
#pragma once
namespace App
{
void setupWifi();
void setupEspNow();
}

80
main/esp_tunnel.cpp Normal file
View File

@ -0,0 +1,80 @@
#include <stdio.h>
#include "app_networking.hpp"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
#include "nvs_flash.h"
#include "esp_now.h"
namespace
{
TaskHandle_t s_main_task = nullptr;
QueueSetHandle_t s_queue_set = nullptr;
QueueHandle_t s_esp_now_queue = nullptr;
QueueHandle_t s_uart_queue = nullptr;
void s_cbEspNowSendComplete(const std::uint8_t* peer_mac, esp_now_send_status_t status)
{
}
void s_cbEspNowReceiveComplete(const esp_now_recv_info_t* recv_info, const std::uint8_t* data, int len)
{
}
void s_mainTask(void*)
{
bool radio_tx_busy = false;
bool uart_tx_busy = false;
while (true)
{
const std::uint32_t notification = ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
if (notification & (1 << 0))
{
// Radio RX complete.
// Send to uart.
uart_tx_busy = true;
}
if (notification & (1 << 1))
{
// UART RX ISR fired. Send to radio.
// UART RX FIFO is 128 bytes for C3. UART_RXFIFO_FULL_INT, set by UART_RXFIFO_THRHD.
radio_tx_busy = true;
}
if (notification & (1 << 2))
{
radio_tx_busy = false;
// radio TX complete.
}
if (notification & (1 << 3))
{
uart_tx_busy = false;
// uart TX complete. UART_TX_DONE_INT
}
}
}
}
extern "C" void app_main(void)
{
ESP_ERROR_CHECK(nvs_flash_init());
App::setupWifi();
App::setupEspNow();
ESP_ERROR_CHECK(esp_now_register_send_cb(s_cbMessageSendComplete));
ESP_ERROR_CHECK(esp_now_register_recv_cb(s_cbMessageReceiveComplete));
xTaskCreate(s_mainTask, "main_task", 2048, nullptr, 4, &s_main_task);
}

1845
sdkconfig.esp32c6.example Normal file

File diff suppressed because it is too large Load Diff