/* * Copyright (c) 2022-2024, Erich Styger * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef PLATFORM_H_ #define PLATFORM_H_ #include "IncludeMcuLibConfig.h" #ifdef __cplusplus extern "C" { #endif #define PL_CONFIG_USE_PICO_W ((PL_CONFIG_HW_VERSION==PL_CONFIG_HW_ADIS_PICO_W_CONSOLE_V0_1) || (PL_CONFIG_HW_VERSION==PL_CONFIG_HW_ADIS_PICO_W_CONSOLE_V0_2)) /* if using Pico W board */ /* Note: * if using Pico-W: * a) enable 'library pico_cyw43_arch_lwip_sys_freertos' in CMakeLists.txt of src folder * b) Enable set(PICO_BOARD pico_w) in CMakeLists.txt in project root */ /* platform configuration macros: set to 1 to enable functionality */ #define PL_CONFIG_USE_LEDS (1) /* if using LEDs */ #define PL_CONFIG_USE_APP_TASK (1) /* if using app task */ #define PL_CONFIG_USE_BLINKY (0 && PL_CONFIG_USE_LEDS) /*!< if using blinky */ #define PL_CONFIG_USE_BUTTONS (1) /* using nav switch buttons */ #define PL_CONFIG_USE_BUTTONS_IRQ (1 && !(McuLib_CONFIG_CPU_IS_ESP32 && PL_CONFIG_USE_WIFI)) /* if using button interrupts */ /* Note: on ESP32, there is a hardware bug, triggering interrupts on GPIO36 (right) and GPIO39 (down). * See https://github.com/espressif/esp-idf/commit/d890a516a1097f0a07788e203fdb1a82bb83520e * and 3.11 in https://www.espressif.com/sites/default/files/documentation/esp32_errata_en.pdf */ /* Wireless related settings */ #define PL_CONFIG_USE_WIFI (1) /* if using WiFi functionality */ #define PL_CONFIG_USE_IDENTIFY (0 && PL_CONFIG_USE_WIFI) /*!< used to identify MAC, needed for EEE network */ #define PL_CONFIG_USE_UDP_SERVER (0 && PL_CONFIG_USE_WIFI) /*!< UDP server, used for communication to robot */ #define PL_CONFIG_USE_UDP_CLIENT (0 && PL_CONFIG_USE_WIFI) /*!< UDP client, optionally available for tests */ #define PL_CONFIG_USE_PING (0 && PL_CONFIG_USE_WIFI) /*!< shell command with ping, to test network connection */ #define PL_CONFIG_USE_NTP_CLIENT (1 && PL_CONFIG_USE_WIFI) #define PL_CONFIG_USE_MQTT_CLIENT (1 && PL_CONFIG_USE_WIFI) /* if running MQTT client */ #define PL_CONFIG_USE_TIME_DATE (1) /*!< if using Time and Date information */ #define PL_CONFIG_USE_SPI (1) /* if using SPI bus */ #define PL_HAS_RADIO (1 && PL_CONFIG_USE_SPI && McuRNET_CONFIG_IS_ENABLED && McuNRF24L01_CONFIG_IS_ENABLED) /* RNET with nRF24L01+ */ #define PL_CONFIG_USE_SHELL (1 && !PL_CONFIG_USE_UNIT_TESTS) /* command line shell: cannot use it with unit tests because of argument handling */ #define PL_CONFIG_USE_RTT (1) /* SEGGER RTT */ #define PL_CONFIG_USE_UART (0) /* if using UART for stdio */ #define PL_CONFIG_USE_TUD_CDC (1) /* tinyUSB CDC device with McuShellCdcDevice */ #define PL_CONFIG_USE_SHELL_CDC (1 && PL_CONFIG_USE_TUD_CDC) /* if using CDC as shell interface */ #define PL_CONFIG_USE_SEMIHOSTING (0) /* if using semihosting for standard I/O */ #define PL_CONFIG_USE_RS485 (0 && McuUart485_CONFIG_USE_RS_485) #define PL_CONFIG_USE_RS485_SHELL (1 && PL_CONFIG_USE_RS485) /* I2C: OLED and Sensor */ #define PL_CONFIG_USE_I2C (1) /* if using I2C bus */ #define PL_CONFIG_USE_HW_I2C (1 && PL_CONFIG_USE_I2C && CONFIG_USE_HW_I2C) #define PL_CONFIG_USE_OLED (1 && PL_CONFIG_USE_I2C) #define PL_CONFIG_USE_SENSOR (1 && PL_CONFIG_USE_I2C) #define PL_CONFIG_USE_SHT31 (1 && PL_CONFIG_USE_SENSOR) /* board is using SHT31 */ #define PL_CONFIG_USE_SHT40 (!PL_CONFIG_USE_SHT31 && PL_CONFIG_USE_SENSOR) /* board is using SHT31 */ #define PL_CONFIG_USE_NVMC (1) /* if using non-volatile memory for storing settings */ #define PL_CONFIG_USE_MINI (1 && PL_CONFIG_USE_NVMC) /* robot specific */ #define PL_CONFIG_USE_ROBOT_HAT (0) /* if using RobotHAT */ #define PL_CONFIG_USE_CHALLENGE (0 && PL_CONFIG_USE_ROTOT_HAT) /* HS2022 challenge */ #define PL_CONFIG_USE_ROBO_REMOTE (0 && PL_CONFIG_USE_ROTOT_HAT && PL_CONFIG_USE_UDP_SERVER) /* UDP Remote controller for robot */ #define PL_CONFIG_USE_WDT (0) /* watchdog */ #define PL_CONFIG_USE_UNIT_TESTS (1 && defined(ENABLE_UNIT_TESTS) && ENABLE_UNIT_TESTS==1) /* if using unit tests. ENABLE_UNIT_TESTS is set by the CMake file */ #if PL_CONFIG_USE_UNIT_TESTS && !defined(UNITY_OUTPUT_CHAR) #error "needs to be defined in IncludeMcuLibConfig.h!" #endif #define PL_CONFIG_USE_GCOV (0 && McuRdimon_CONFIG_IS_ENABLED && McuCoverage_CONFIG_IS_ENABLED) /* if using gcov */ #define PL_CONFIG_USE_GPROF (0) /* GNU gprof profiling */ /*! * \brief de-initializes the platform */ void PL_Deinit(void); /*! * \brief initializes the platform */ void PL_Init(void); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* PLATFORM_H_ */