Skip to content

Commit

Permalink
Wifi + tcp example, tcp is c code
Browse files Browse the repository at this point in the history
  • Loading branch information
Reavershark committed Apr 18, 2024
1 parent b7c2b79 commit 82c27f7
Show file tree
Hide file tree
Showing 29 changed files with 808 additions and 0 deletions.
6 changes: 6 additions & 0 deletions examples/wifi/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
build
managed_components
sdkconfig

.dub
*.a
227 changes: 227 additions & 0 deletions examples/wifi/.vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
{
"configurations": [
{
"name": "esp-idf",
"cStandard": "gnu17",
"intelliSenseMode": "linux-gcc-x64",
"compilerPath": "~/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/xtensa-esp32-elf-gcc",
"includePath": [
"./build/config",
"./main/include",
"/opt/esp-idf/components/app_trace/include",
"/opt/esp-idf/components/app_trace/include",
"/opt/esp-idf/components/app_update/include",
"/opt/esp-idf/components/app_update/include",
"/opt/esp-idf/components/bootloader/include",
"/opt/esp-idf/components/bootloader_support/include",
"/opt/esp-idf/components/bootloader_support/include",
"/opt/esp-idf/components/bootloader_support/bootloader_flash/include",
"/opt/esp-idf/components/bt/include",
"/opt/esp-idf/components/cmock/include",
"/opt/esp-idf/components/cmock/CMock/src",
"/opt/esp-idf/components/console/include",
"/opt/esp-idf/components/console",
"/opt/esp-idf/components/cxx/include",
"/opt/esp-idf/components/driver/include",
"/opt/esp-idf/components/driver/include",
"/opt/esp-idf/components/driver/deprecated",
"/opt/esp-idf/components/driver/analog_comparator/include",
"/opt/esp-idf/components/driver/dac/include",
"/opt/esp-idf/components/driver/gpio/include",
"/opt/esp-idf/components/driver/gptimer/include",
"/opt/esp-idf/components/driver/i2c/include",
"/opt/esp-idf/components/driver/i2s/include",
"/opt/esp-idf/components/driver/ledc/include",
"/opt/esp-idf/components/driver/mcpwm/include",
"/opt/esp-idf/components/driver/parlio/include",
"/opt/esp-idf/components/driver/pcnt/include",
"/opt/esp-idf/components/driver/rmt/include",
"/opt/esp-idf/components/driver/sdio_slave/include",
"/opt/esp-idf/components/driver/sdmmc/include",
"/opt/esp-idf/components/driver/sigma_delta/include",
"/opt/esp-idf/components/driver/spi/include",
"/opt/esp-idf/components/driver/temperature_sensor/include",
"/opt/esp-idf/components/driver/touch_sensor/include",
"/opt/esp-idf/components/driver/twai/include",
"/opt/esp-idf/components/driver/uart/include",
"/opt/esp-idf/components/driver/usb_serial_jtag/include",
"/opt/esp-idf/components/driver/touch_sensor/esp32/include",
"/opt/esp-idf/components/efuse/include",
"/opt/esp-idf/components/efuse/include",
"/opt/esp-idf/components/efuse/esp32/include",
"/opt/esp-idf/components/esp-tls/include",
"/opt/esp-idf/components/esp-tls",
"/opt/esp-idf/components/esp-tls/esp-tls-crypto",
"/opt/esp-idf/components/esp_adc/include",
"/opt/esp-idf/components/esp_adc/include",
"/opt/esp-idf/components/esp_adc/interface",
"/opt/esp-idf/components/esp_adc/esp32/include",
"/opt/esp-idf/components/esp_adc/deprecated/include",
"/opt/esp-idf/components/esp_app_format/include",
"/opt/esp-idf/components/esp_app_format/include",
"/opt/esp-idf/components/esp_bootloader_format/include",
"/opt/esp-idf/components/esp_bootloader_format/include",
"/opt/esp-idf/components/esp_coex/include",
"/opt/esp-idf/components/esp_coex/include",
"/opt/esp-idf/components/esp_common/include",
"/opt/esp-idf/components/esp_common/include",
"/opt/esp-idf/components/esp_eth/include",
"/opt/esp-idf/components/esp_eth/include",
"/opt/esp-idf/components/esp_event/include",
"/opt/esp-idf/components/esp_event/include",
"/opt/esp-idf/components/esp_gdbstub/include",
"/opt/esp-idf/components/esp_gdbstub/include",
"/opt/esp-idf/components/esp_hid/include",
"/opt/esp-idf/components/esp_hid/include",
"/opt/esp-idf/components/esp_http_client/include",
"/opt/esp-idf/components/esp_http_client/include",
"/opt/esp-idf/components/esp_http_server/include",
"/opt/esp-idf/components/esp_http_server/include",
"/opt/esp-idf/components/esp_https_ota/include",
"/opt/esp-idf/components/esp_https_ota/include",
"/opt/esp-idf/components/esp_https_server/include",
"/opt/esp-idf/components/esp_hw_support/include",
"/opt/esp-idf/components/esp_hw_support/include",
"/opt/esp-idf/components/esp_hw_support/include/soc",
"/opt/esp-idf/components/esp_hw_support/include/soc/esp32",
"/opt/esp-idf/components/esp_lcd/include",
"/opt/esp-idf/components/esp_lcd/include",
"/opt/esp-idf/components/esp_lcd/interface",
"/opt/esp-idf/components/esp_local_ctrl/include",
"/opt/esp-idf/components/esp_local_ctrl/include",
"/opt/esp-idf/components/esp_mm/include",
"/opt/esp-idf/components/esp_mm/include",
"/opt/esp-idf/components/esp_netif/include",
"/opt/esp-idf/components/esp_netif/include",
"/opt/esp-idf/components/esp_netif_stack/include",
"/opt/esp-idf/components/esp_partition/include",
"/opt/esp-idf/components/esp_partition/include",
"/opt/esp-idf/components/esp_phy/include",
"/opt/esp-idf/components/esp_phy/include",
"/opt/esp-idf/components/esp_phy/esp32/include",
"/opt/esp-idf/components/esp_pm/include",
"/opt/esp-idf/components/esp_pm/include",
"/opt/esp-idf/components/esp_psram/include",
"/opt/esp-idf/components/esp_psram/include",
"/opt/esp-idf/components/esp_ringbuf/include",
"/opt/esp-idf/components/esp_ringbuf/include",
"/opt/esp-idf/components/esp_rom/include",
"/opt/esp-idf/components/esp_rom/include",
"/opt/esp-idf/components/esp_rom/include/esp32",
"/opt/esp-idf/components/esp_rom/esp32",
"/opt/esp-idf/components/esp_system/include",
"/opt/esp-idf/components/esp_system/include",
"/opt/esp-idf/components/esp_timer/include",
"/opt/esp-idf/components/esp_timer/include",
"/opt/esp-idf/components/esp_wifi/include",
"/opt/esp-idf/components/esp_wifi/include",
"/opt/esp-idf/components/esp_wifi/wifi_apps/include",
"/opt/esp-idf/components/espcoredump/include",
"/opt/esp-idf/components/espcoredump/include",
"/opt/esp-idf/components/espcoredump/include/port/xtensa",
"/opt/esp-idf/components/esptool_py/include",
"/opt/esp-idf/components/fatfs/include",
"/opt/esp-idf/components/fatfs/diskio",
"/opt/esp-idf/components/fatfs/src",
"/opt/esp-idf/components/fatfs/vfs",
"/opt/esp-idf/components/freertos/include",
"/opt/esp-idf/components/freertos/config/include",
"/opt/esp-idf/components/freertos/config/include/freertos",
"/opt/esp-idf/components/freertos/config/xtensa/include",
"/opt/esp-idf/components/freertos/FreeRTOS-Kernel/include",
"/opt/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include",
"/opt/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos",
"/opt/esp-idf/components/freertos/esp_additions/include",
"/opt/esp-idf/components/hal/include",
"/opt/esp-idf/components/hal/platform_port/include",
"/opt/esp-idf/components/hal/esp32/include",
"/opt/esp-idf/components/hal/include",
"/opt/esp-idf/components/heap/include",
"/opt/esp-idf/components/heap/include",
"/opt/esp-idf/components/http_parser/include",
"/opt/esp-idf/components/http_parser",
"/opt/esp-idf/components/idf_test/include",
"/opt/esp-idf/components/idf_test/include",
"/opt/esp-idf/components/idf_test/include/esp32",
"/opt/esp-idf/components/ieee802154/include",
"/opt/esp-idf/components/ieee802154/include",
"/opt/esp-idf/components/json/include",
"/opt/esp-idf/components/json/cJSON",
"/opt/esp-idf/components/log/include",
"/opt/esp-idf/components/log/include",
"/opt/esp-idf/components/lwip/include",
"/opt/esp-idf/components/lwip/include",
"/opt/esp-idf/components/lwip/include/apps",
"/opt/esp-idf/components/lwip/include/apps/sntp",
"/opt/esp-idf/components/lwip/lwip/src/include",
"/opt/esp-idf/components/lwip/port/include",
"/opt/esp-idf/components/lwip/port/freertos/include",
"/opt/esp-idf/components/lwip/port/esp32xx/include",
"/opt/esp-idf/components/lwip/port/esp32xx/include/arch",
"/opt/esp-idf/components/lwip/port/esp32xx/include/sys",
"/work/main/include",
"/opt/esp-idf/components/mbedtls/include",
"/opt/esp-idf/components/mbedtls/port/include",
"/opt/esp-idf/components/mbedtls/mbedtls/include",
"/opt/esp-idf/components/mbedtls/mbedtls/library",
"/opt/esp-idf/components/mbedtls/esp_crt_bundle/include",
"/opt/esp-idf/components/mqtt/include",
"/opt/esp-idf/components/mqtt/esp-mqtt/include",
"/opt/esp-idf/components/newlib/include",
"/opt/esp-idf/components/newlib/platform_include",
"/opt/esp-idf/components/nvs_flash/include",
"/opt/esp-idf/components/nvs_flash/include",
"/opt/esp-idf/components/nvs_flash/../spi_flash/include",
"/opt/esp-idf/components/nvs_sec_provider/include",
"/opt/esp-idf/components/nvs_sec_provider/include",
"/opt/esp-idf/components/openthread/include",
"/opt/esp-idf/components/partition_table/include",
"/opt/esp-idf/components/perfmon/include",
"/opt/esp-idf/components/perfmon/include",
"/opt/esp-idf/components/protobuf-c/include",
"/opt/esp-idf/components/protobuf-c/protobuf-c",
"/opt/esp-idf/components/protocomm/include",
"/opt/esp-idf/components/protocomm/include/common",
"/opt/esp-idf/components/protocomm/include/security",
"/opt/esp-idf/components/protocomm/include/transports",
"/opt/esp-idf/components/protocomm/include/crypto/srp6a",
"/opt/esp-idf/components/pthread/include",
"/opt/esp-idf/components/pthread/include",
"/opt/esp-idf/components/sdmmc/include",
"/opt/esp-idf/components/sdmmc/include",
"/opt/esp-idf/components/soc/include",
"/opt/esp-idf/components/soc/include",
"/opt/esp-idf/components/soc/esp32",
"/opt/esp-idf/components/soc/esp32/include",
"/opt/esp-idf/components/spi_flash/include",
"/opt/esp-idf/components/spi_flash/include",
"/opt/esp-idf/components/spiffs/include",
"/opt/esp-idf/components/spiffs/include",
"/opt/esp-idf/components/tcp_transport/include",
"/opt/esp-idf/components/tcp_transport/include",
"/opt/esp-idf/components/ulp/include",
"/opt/esp-idf/components/unity/include",
"/opt/esp-idf/components/unity/include",
"/opt/esp-idf/components/unity/unity/src",
"/opt/esp-idf/components/usb/include",
"/opt/esp-idf/components/vfs/include",
"/opt/esp-idf/components/vfs/include",
"/opt/esp-idf/components/wear_levelling/include",
"/opt/esp-idf/components/wear_levelling/include",
"/opt/esp-idf/components/wifi_provisioning/include",
"/opt/esp-idf/components/wifi_provisioning/include",
"/opt/esp-idf/components/wpa_supplicant/include",
"/opt/esp-idf/components/wpa_supplicant/include",
"/opt/esp-idf/components/wpa_supplicant/port/include",
"/opt/esp-idf/components/wpa_supplicant/esp_supplicant/include",
"/opt/esp-idf/components/xtensa/include",
"/opt/esp-idf/components/xtensa/esp32/include",
"/opt/esp-idf/components/xtensa/include",
"/opt/esp-idf/components/xtensa/deprecated_include",
"/opt/esp-idf/components/soc/esp32/include",
"~/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20230928/xtensa-esp-elf/xtensa-esp-elf/include"
]
}
],
"version": 4
}
15 changes: 15 additions & 0 deletions examples/wifi/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"dscanner.ignoredKeys": [
"dscanner.suspicious.redundant_attributes"
],
"d.stdlibPath": [
"/opt/ldc-xtensa/include/d"
],
"d.neverUseDub": true,
"d.projectImportPaths": [
"./main/source"
],
"files.associations": {
"*.c_": "c"
}
}
4 changes: 4 additions & 0 deletions examples/wifi/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(wifi)
2 changes: 2 additions & 0 deletions examples/wifi/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Wifi example

20 changes: 20 additions & 0 deletions examples/wifi/dbuild.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env bash

set -e

# Config
DFLAGS+=" --linkonce-templates"
DFLAGS+=" --preview=in"
DFLAGS+=" --preview=bitfields"
DFLAGS+=" --preview=fixImmutableConv"
DFLAGS+=" --gc"
# DFLAGS+=" --O3 --boundscheck=off"

# Append default flags based on target
DFLAGS+=" $(cd "$(dirname "${BASH_SOURCE[0]}")" && dflags.py)"
export DFLAGS

dub build \
--build=plain \
--cache=local \
--color=always
17 changes: 17 additions & 0 deletions examples/wifi/docker-env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash

[[ -e /dev/ttyUSB0 ]] && DEVICE_FLAG="--device=/dev/ttyUSB0"

docker run \
--rm \
--interactive --tty \
--volume="${PWD}":/work \
$DEVICE_FLAG \
jmeeuws/esp-dlang \
bash -c " \
echo Sourcing /opt/esp-idf/export.sh && \
source /opt/esp-idf/export.sh >/dev/null && \
ulimit -n 4096 && \
\$SHELL \
"
sudo chown -R $UID .
4 changes: 4 additions & 0 deletions examples/wifi/local-env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env -S sh -c "echo Don\\'t run this file, source it!"
source /opt/esp-idf/export.sh >/dev/null
export PATH="/opt/ldc-xtensa/bin:/opt/llvm-xtensa/bin:${PATH}"
export CC="clang" CXX="clang++" DC="ldc2"
19 changes: 19 additions & 0 deletions examples/wifi/main/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
idf_component_register(
SRCS
"source/idfd/tcp.c"
"source/idf/esp_common/esp_err/idf_esp_common_esp_err_c_code.c"
"source/idf/esp_wifi/idf_esp_wifi_c_code.c"
INCLUDE_DIRS "."
PRIV_REQUIRES nvs_flash esp_wifi
)

# Code below is the same for every d component
add_custom_target(
"${COMPONENT_NAME}_dcode" ALL
"${PROJECT_DIR}/dbuild.sh"
WORKING_DIRECTORY "${COMPONENT_DIR}"
BYPRODUCTS "${COMPONENT_DIR}/lib${COMPONENT_NAME}.a"
USES_TERMINAL
)
target_link_libraries(${COMPONENT_LIB} PRIVATE "${COMPONENT_DIR}/lib${COMPONENT_NAME}.a")
target_link_options(${COMPONENT_LIB} INTERFACE "-Wl,--start-group") # Allow .a file order
3 changes: 3 additions & 0 deletions examples/wifi/main/dub.sdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name "main"
targetType "library"
buildRequirements "allowWarnings"
20 changes: 20 additions & 0 deletions examples/wifi/main/source/app/main.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module app.main;

import idfd.tcp : tcp_client;
import idfd.util;
import idfd.wifi_client : simpleWifiInit;

import idf.freertos : vTaskDelay;
import idf.stdio : printf;

// dfmt off
@safe:

extern(C) void app_main()
{
printf("Hello world!\n");

simpleWifiInit!("My SSID", "mypassword");

(() @trusted => tcp_client("10.0.0.10", 1234))();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include "esp_err.h"

void ESP_ERROR_CHECK_CFunc(esp_err_t err)
{
ESP_ERROR_CHECK(err);
}
7 changes: 7 additions & 0 deletions examples/wifi/main/source/idf/esp_common/esp_err/package.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module idf.esp_common.esp_err;

public import idf.esp_common.esp_err.idf_esp_common_esp_err_c_code;

@safe:

void ESP_ERROR_CHECK(esp_err_t err) @trusted => ESP_ERROR_CHECK_CFunc(err);
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "esp_event.h"
7 changes: 7 additions & 0 deletions examples/wifi/main/source/idf/esp_event/package.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module idf.esp_event;

public import idf.esp_event.idf_esp_event_c_code;

@safe:

enum ESP_EVENT_ANY_ID = -1;
7 changes: 7 additions & 0 deletions examples/wifi/main/source/idf/esp_wifi/idf_esp_wifi_c_code.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "esp_wifi.h"

wifi_init_config_t WIFI_INIT_CONFIG_DEFAULT_CFunc()
{
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
return cfg;
}
14 changes: 14 additions & 0 deletions examples/wifi/main/source/idf/esp_wifi/package.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module idf.esp_wifi;

public import idf.esp_wifi.idf_esp_wifi_c_code;

@safe:

enum auto WIFI_DEFAULT_RX_BA_WIN = CONFIG_ESP_WIFI_RX_BA_WIN;
enum auto WIFI_DYNAMIC_TX_BUFFER_NUM = CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM;
enum auto WIFI_MGMT_SBUF_NUM = CONFIG_ESP_WIFI_MGMT_SBUF_NUM;
enum auto WIFI_RX_MGMT_BUF_NUM_DEF = CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF;
enum auto WIFI_SOFTAP_BEACON_MAX_LEN = CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN;
enum bool WIFI_STA_DISCONNECTED_PM_ENABLED = CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE; // Config is ENABLE without the D

wifi_init_config_t WIFI_INIT_CONFIG_DEFAULT() @trusted => WIFI_INIT_CONFIG_DEFAULT_CFunc;
Loading

0 comments on commit 82c27f7

Please sign in to comment.