From fbfd96ecdb2c282c1226ba4e8dc3ac557f2e0292 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Thu, 2 Mar 2023 21:00:29 +0100 Subject: [PATCH] [realtek-ambz] Update Arduino core to new structure --- TODO.md | 2 + cores/realtek-amb/arduino/libraries/LT/LT.cpp | 10 +---- .../Serial/{SerialClass.cpp => Serial.cpp} | 28 ++++++------ .../Serial/{SerialClass.h => Serial.h} | 8 ++-- .../SoftwareSerial/SoftwareSerial.cpp | 9 +--- .../libraries/SoftwareSerial/SoftwareSerial.h | 5 --- .../arduino/libraries/WiFi/WiFi.cpp | 11 +++-- .../arduino/libraries/WiFi/WiFiAP.cpp | 2 +- .../arduino/libraries/WiFi/WiFiData.h | 18 -------- .../arduino/libraries/WiFi/WiFiEvents.cpp | 2 +- .../arduino/libraries/WiFi/WiFiGeneric.cpp | 12 +++--- .../WiFi/{WiFiPriv.h => WiFiPrivate.h} | 13 +++++- .../arduino/libraries/WiFi/WiFiSTA.cpp | 4 +- .../arduino/libraries/WiFi/WiFiScan.cpp | 8 ++-- .../arduino/libraries/Wire/Wire.cpp | 3 +- .../realtek-amb/arduino/libraries/Wire/Wire.h | 21 +++------ cores/realtek-amb/arduino/src/ArduinoFamily.h | 43 ++++++++----------- cores/realtek-amb/arduino/src/MD5Impl.h | 5 --- cores/realtek-amb/arduino/src/WVariant.h | 36 ---------------- cores/realtek-amb/arduino/src/lt_defs.h | 3 +- cores/realtek-amb/arduino/src/main.cpp | 2 + cores/realtek-amb/arduino/src/wiring.c | 2 + cores/realtek-amb/arduino/src/wiring_analog.c | 13 +++--- .../realtek-amb/arduino/src/wiring_digital.c | 25 +---------- cores/realtek-amb/arduino/src/wiring_irq.c | 4 +- cores/realtek-amb/arduino/src/wiring_pulse.c | 5 +-- cores/realtek-amb/base/sdk_private.h | 18 +++++++- cores/realtek-ambz/base/fixups/basic_types.h | 6 +++ .../realtek-ambz/base/fixups/section_config.h | 6 +++ 29 files changed, 129 insertions(+), 195 deletions(-) rename cores/realtek-amb/arduino/libraries/Serial/{SerialClass.cpp => Serial.cpp} (76%) rename cores/realtek-amb/arduino/libraries/Serial/{SerialClass.h => Serial.h} (81%) delete mode 100644 cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.h delete mode 100644 cores/realtek-amb/arduino/libraries/WiFi/WiFiData.h rename cores/realtek-amb/arduino/libraries/WiFi/{WiFiPriv.h => WiFiPrivate.h} (83%) delete mode 100644 cores/realtek-amb/arduino/src/MD5Impl.h delete mode 100644 cores/realtek-amb/arduino/src/WVariant.h create mode 100644 cores/realtek-ambz/base/fixups/basic_types.h create mode 100644 cores/realtek-ambz/base/fixups/section_config.h diff --git a/TODO.md b/TODO.md index 966794b..f6f7125 100644 --- a/TODO.md +++ b/TODO.md @@ -35,6 +35,8 @@ Explicit is better than implicit. ### Other +- refactor `SerialClass` to have a shared header `Serial.h` in the common core (and `SerialData`, just like WiFi) +- implement Wire on BK, refactor the API and class - watchdog API - `Preferences` library - test/fix IPv6 on different families diff --git a/cores/realtek-amb/arduino/libraries/LT/LT.cpp b/cores/realtek-amb/arduino/libraries/LT/LT.cpp index 2580a35..097849a 100644 --- a/cores/realtek-amb/arduino/libraries/LT/LT.cpp +++ b/cores/realtek-amb/arduino/libraries/LT/LT.cpp @@ -1,16 +1,10 @@ /* Copyright (c) Kuba Szczodrzyński 2022-05-28. */ -#include +#include +#include #include -extern "C" { -#include -#include -#include -#include -} - void LibreTuya::restart() { // The Watchdog Way wdtEnable(1L); diff --git a/cores/realtek-amb/arduino/libraries/Serial/SerialClass.cpp b/cores/realtek-amb/arduino/libraries/Serial/Serial.cpp similarity index 76% rename from cores/realtek-amb/arduino/libraries/Serial/SerialClass.cpp rename to cores/realtek-amb/arduino/libraries/Serial/Serial.cpp index 1ae24eb..79f6ad1 100644 --- a/cores/realtek-amb/arduino/libraries/Serial/SerialClass.cpp +++ b/cores/realtek-amb/arduino/libraries/Serial/Serial.cpp @@ -1,6 +1,9 @@ /* Copyright (c) Kuba Szczodrzyński 2022-07-03. */ -#include "SerialClass.h" +#include "Serial.h" + +#include +#include #if HAS_SERIAL0 SerialClass Serial0(UART0_DEV, UART0_IRQ, PIN_SERIAL0_RX, PIN_SERIAL0_TX); @@ -12,7 +15,7 @@ SerialClass Serial1(UART1_DEV, UART1_IRQ, PIN_SERIAL1_RX, PIN_SERIAL1_TX); SerialClass Serial2(UART2_DEV, UART_LOG_IRQ, PIN_SERIAL2_RX, PIN_SERIAL2_TX); #endif -SerialClass::SerialClass(UART_TypeDef *uart, IRQn irq, pin_size_t rx, pin_size_t tx) { +SerialClass::SerialClass(void *uart, uint8_t irq, pin_size_t rx, pin_size_t tx) { data.uart = uart; data.buf = NULL; this->irq = irq; @@ -21,17 +24,18 @@ SerialClass::SerialClass(UART_TypeDef *uart, IRQn irq, pin_size_t rx, pin_size_t } static uint32_t callback(void *param) { - SerialData *data = (SerialData *)param; + SerialData *data = (SerialData *)param; + UART_TypeDef *uart = (UART_TypeDef *)data->uart; - uint32_t intcr = data->uart->DLH_INTCR; - data->uart->DLH_INTCR = 0; + uint32_t intcr = uart->DLH_INTCR; + uart->DLH_INTCR = 0; uint8_t c; - UART_CharGet(data->uart, &c); + UART_CharGet(uart, &c); if (c) data->buf->store_char(c); - data->uart->DLH_INTCR = intcr; + uart->DLH_INTCR = intcr; return 0; } @@ -51,8 +55,8 @@ void SerialClass::begin(unsigned long baudrate, uint16_t config) { cfg.Parity = parity; cfg.ParityType = parityType; cfg.StopBit = stopBits; - UART_Init(data.uart, &cfg); - UART_SetBaud(data.uart, baudrate); + UART_Init((UART_TypeDef *)data.uart, &cfg); + UART_SetBaud((UART_TypeDef *)data.uart, baudrate); if (data.buf) { data.buf->clear(); @@ -88,11 +92,11 @@ int SerialClass::read() { } void SerialClass::flush() { - UART_WaitBusy(data.uart, 10); + UART_WaitBusy((UART_TypeDef *)data.uart, 10); } size_t SerialClass::write(uint8_t c) { - while (UART_Writable(data.uart) == 0) {} - UART_CharPut(data.uart, c); + while (UART_Writable((UART_TypeDef *)data.uart) == 0) {} + UART_CharPut((UART_TypeDef *)data.uart, c); return 1; } diff --git a/cores/realtek-amb/arduino/libraries/Serial/SerialClass.h b/cores/realtek-amb/arduino/libraries/Serial/Serial.h similarity index 81% rename from cores/realtek-amb/arduino/libraries/Serial/SerialClass.h rename to cores/realtek-amb/arduino/libraries/Serial/Serial.h index 6118580..aa0a78b 100644 --- a/cores/realtek-amb/arduino/libraries/Serial/SerialClass.h +++ b/cores/realtek-amb/arduino/libraries/Serial/Serial.h @@ -2,14 +2,14 @@ #pragma once -#include +#include #include #include using namespace arduino; typedef struct { - UART_TypeDef *uart; + void *uart; // UART_TypeDef RingBuffer *buf; } SerialData; @@ -17,12 +17,12 @@ class SerialClass : public HardwareSerial { private: // data accessible to IRQ handler SerialData data; - IRQn irq; + uint8_t irq; // IRQn pin_size_t rx; pin_size_t tx; public: - SerialClass(UART_TypeDef *uart, IRQn irq, pin_size_t rx, pin_size_t tx); + SerialClass(void *uart, uint8_t irq, pin_size_t rx, pin_size_t tx); inline void begin(unsigned long baudrate) { begin(baudrate, SERIAL_8N1); diff --git a/cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.cpp b/cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.cpp index 75cc4d4..ebd7f0f 100644 --- a/cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.cpp +++ b/cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.cpp @@ -1,12 +1,7 @@ /* Copyright (c) Kuba Szczodrzyński 2022-07-03. */ -#include "SoftwareSerial.h" - -extern "C" { - -#include - -} // extern "C" +#include +#include #define TIMER_MAX 3 #define OBJ ((gtimer_t *)this->param) diff --git a/cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.h b/cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.h deleted file mode 100644 index e711c8a..0000000 --- a/cores/realtek-amb/arduino/libraries/SoftwareSerial/SoftwareSerial.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Copyright (c) Kuba Szczodrzyński 2022-07-03. */ - -#pragma once - -#include diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFi.cpp b/cores/realtek-amb/arduino/libraries/WiFi/WiFi.cpp index cc9f75b..2a35e28 100644 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFi.cpp +++ b/cores/realtek-amb/arduino/libraries/WiFi/WiFi.cpp @@ -1,7 +1,8 @@ /* Copyright (c) Kuba Szczodrzyński 2022-04-25. */ -#include "WiFiPriv.h" +#include "WiFiPrivate.h" +// TODO move these to WiFiData rtw_network_info_t wifi = {0}; rtw_ap_info_t ap = {0}; rtw_wifi_setting_t wifi_setting; @@ -25,11 +26,15 @@ void reset_wifi_struct(void) { } WiFiClass::WiFiClass() { - data.scanSem = xSemaphoreCreateBinary(); + data = (WiFiData *)calloc(1, sizeof(WiFiData)); + + DATA->scanSem = xSemaphoreCreateBinary(); } WiFiClass::~WiFiClass() { - vSemaphoreDelete(data.scanSem); + vSemaphoreDelete(DATA->scanSem); + free(data); + data = NULL; } WiFiAuthMode securityTypeToAuthMode(uint8_t type) { diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFiAP.cpp b/cores/realtek-amb/arduino/libraries/WiFi/WiFiAP.cpp index afba60b..95f1875 100644 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFiAP.cpp +++ b/cores/realtek-amb/arduino/libraries/WiFi/WiFiAP.cpp @@ -1,6 +1,6 @@ /* Copyright (c) Kuba Szczodrzyński 2022-04-25. */ -#include "WiFiPriv.h" +#include "WiFiPrivate.h" typedef struct { int count; diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFiData.h b/cores/realtek-amb/arduino/libraries/WiFi/WiFiData.h deleted file mode 100644 index 2488579..0000000 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFiData.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (c) Kuba Szczodrzyński 2022-06-23. */ - -#pragma once - -#include - -extern "C" { - -#include -#include - -} // extern "C" - -typedef struct { - bool initialized; - bool sleep; - SemaphoreHandle_t scanSem; -} WiFiData; diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFiEvents.cpp b/cores/realtek-amb/arduino/libraries/WiFi/WiFiEvents.cpp index 5d6e1c6..9f06c80 100644 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFiEvents.cpp +++ b/cores/realtek-amb/arduino/libraries/WiFi/WiFiEvents.cpp @@ -1,6 +1,6 @@ /* Copyright (c) Kuba Szczodrzyński 2022-05-16. */ -#include "WiFiPriv.h" +#include "WiFiPrivate.h" #include diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFiGeneric.cpp b/cores/realtek-amb/arduino/libraries/WiFi/WiFiGeneric.cpp index 2b5e1c5..61fdf8f 100644 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFiGeneric.cpp +++ b/cores/realtek-amb/arduino/libraries/WiFi/WiFiGeneric.cpp @@ -1,6 +1,6 @@ /* Copyright (c) Kuba Szczodrzyński 2022-04-25. */ -#include "WiFiPriv.h" +#include "WiFiPrivate.h" int32_t WiFiClass::channel() { int channel = 0; @@ -13,12 +13,12 @@ bool WiFiClass::modePriv(WiFiMode mode, WiFiModeAction sta, WiFiModeAction ap) { __wrap_DiagPrintf_disable(); startWifiTask(); - if (!data.initialized) { + if (!DATA->initialized) { // initialize wifi first LT_IM(WIFI, "Initializing LwIP"); LwIP_Init(); reset_wifi_struct(); - data.initialized = true; + DATA->initialized = true; } LT_HEAP_I(); if (getMode()) { @@ -58,7 +58,7 @@ error: } WiFiMode WiFiClass::getMode() { - if (!data.initialized) + if (!DATA->initialized) return WIFI_MODE_NULL; return (WiFiMode)wifi_mode; } @@ -80,12 +80,12 @@ bool WiFiClass::setSleep(bool enable) { if (wifi_disable_powersave() != RTW_SUCCESS) return false; } - data.sleep = enable; + DATA->sleep = enable; return true; } bool WiFiClass::getSleep() { - return data.sleep; + return DATA->sleep; } bool WiFiClass::setTxPower(int power) { diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFiPriv.h b/cores/realtek-amb/arduino/libraries/WiFi/WiFiPrivate.h similarity index 83% rename from cores/realtek-amb/arduino/libraries/WiFi/WiFiPriv.h rename to cores/realtek-amb/arduino/libraries/WiFi/WiFiPrivate.h index 37439d6..8800973 100644 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFiPriv.h +++ b/cores/realtek-amb/arduino/libraries/WiFi/WiFiPrivate.h @@ -2,7 +2,8 @@ #pragma once -#include +#include +#include extern "C" { @@ -45,3 +46,13 @@ extern void handleRtwEvent(uint16_t event, char *data, int len, int flags); #define NETNAME_STA WLAN0_NAME #define NETNAME_AP (wifi_mode == WIFI_MODE_APSTA ? WLAN1_NAME : WLAN0_NAME) + +typedef struct { + bool initialized; + bool sleep; + SemaphoreHandle_t scanSem; +} WiFiData; + +#define DATA ((WiFiData *)data) +#define pDATA ((WiFiData *)pWiFi->data) +#define cDATA ((WiFiData *)cls->data) diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFiSTA.cpp b/cores/realtek-amb/arduino/libraries/WiFi/WiFiSTA.cpp index 02a321a..e050d00 100644 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFiSTA.cpp +++ b/cores/realtek-amb/arduino/libraries/WiFi/WiFiSTA.cpp @@ -1,6 +1,6 @@ /* Copyright (c) Kuba Szczodrzyński 2022-04-25. */ -#include "WiFiPriv.h" +#include "WiFiPrivate.h" WiFiStatus WiFiClass::begin(const char *ssid, const char *passphrase, int32_t channel, const uint8_t *bssid, bool connect) { @@ -95,7 +95,7 @@ bool WiFiClass::reconnect(const uint8_t *bssid) { dhcpRet = LwIP_DHCP(0, DHCP_START); if (dhcpRet == DHCP_ADDRESS_ASSIGNED) { LT_HEAP_I(); - EventInfo *eventInfo = (EventInfo *)zalloc(sizeof(EventInfo)); + EventInfo *eventInfo = (EventInfo *)calloc(1, sizeof(EventInfo)); eventInfo->got_ip.if_index = 0; eventInfo->got_ip.esp_netif = NULL; eventInfo->got_ip.ip_info.ip.addr = localIP(); diff --git a/cores/realtek-amb/arduino/libraries/WiFi/WiFiScan.cpp b/cores/realtek-amb/arduino/libraries/WiFi/WiFiScan.cpp index 7a0e57b..bedce5c 100644 --- a/cores/realtek-amb/arduino/libraries/WiFi/WiFiScan.cpp +++ b/cores/realtek-amb/arduino/libraries/WiFi/WiFiScan.cpp @@ -1,6 +1,6 @@ /* Copyright (c) Kuba Szczodrzyński 2022-04-25. */ -#include "WiFiPriv.h" +#include "WiFiPrivate.h" static rtw_result_t scanHandler(rtw_scan_handler_result_t *result) { WiFiClass *cls = (WiFiClass *)result->user_data; @@ -10,7 +10,7 @@ static rtw_result_t scanHandler(rtw_scan_handler_result_t *result) { if (result->scan_complete == RTW_TRUE) { scan->running = false; - xSemaphoreGive(cls->data.scanSem); + xSemaphoreGive(cDATA->scanSem); return RTW_SUCCESS; } @@ -48,8 +48,8 @@ int16_t WiFiClass::scanNetworks(bool async, bool showHidden, bool passive, uint3 if (!async) { LT_IM(WIFI, "Waiting for results"); - xSemaphoreTake(data.scanSem, 1); // reset the semaphore quickly - xSemaphoreTake(data.scanSem, pdMS_TO_TICKS(maxMsPerChannel * 20)); + xSemaphoreTake(DATA->scanSem, 1); // reset the semaphore quickly + xSemaphoreTake(DATA->scanSem, pdMS_TO_TICKS(maxMsPerChannel * 20)); return scan->count; } return WIFI_SCAN_RUNNING; diff --git a/cores/realtek-amb/arduino/libraries/Wire/Wire.cpp b/cores/realtek-amb/arduino/libraries/Wire/Wire.cpp index 0b7c94c..4756604 100644 --- a/cores/realtek-amb/arduino/libraries/Wire/Wire.cpp +++ b/cores/realtek-amb/arduino/libraries/Wire/Wire.cpp @@ -2,10 +2,9 @@ #include "Wire.h" -#include +#include extern "C" { -#include extern int i2c_write_timeout(i2c_t *obj, int address, char *data, int length, int stop, int timeout_ms); } diff --git a/cores/realtek-amb/arduino/libraries/Wire/Wire.h b/cores/realtek-amb/arduino/libraries/Wire/Wire.h index 8bcafeb..bc48214 100644 --- a/cores/realtek-amb/arduino/libraries/Wire/Wire.h +++ b/cores/realtek-amb/arduino/libraries/Wire/Wire.h @@ -2,16 +2,9 @@ #pragma once +#include +#include #include -#include - -#ifdef __cplusplus -extern "C" { -#endif -// #include -#ifdef __cplusplus -} -#endif #if !defined(PIN_WIRE0_SDA) && defined(PIN_WIRE1_SDA) #define Wire1 Wire @@ -25,7 +18,7 @@ typedef struct i2c_s i2c_t; using arduino::RingBuffer; -class TwoWire : public ITwoWire { +class TwoWire : public HardwareI2C { private: i2c_t *_i2c = NULL; uint8_t _idx = 0; @@ -60,10 +53,10 @@ class TwoWire : public ITwoWire { int peek(); void flush(); - using ITwoWire::begin; - using ITwoWire::endTransmission; - using ITwoWire::requestFrom; - using ITwoWire::write; + using HardwareI2C::begin; + using HardwareI2C::endTransmission; + using HardwareI2C::requestFrom; + using HardwareI2C::write; using Print::write; }; diff --git a/cores/realtek-amb/arduino/src/ArduinoFamily.h b/cores/realtek-amb/arduino/src/ArduinoFamily.h index 67b186a..a59c171 100644 --- a/cores/realtek-amb/arduino/src/ArduinoFamily.h +++ b/cores/realtek-amb/arduino/src/ArduinoFamily.h @@ -1,36 +1,27 @@ -/* Copyright (c) Kuba Szczodrzyński 2022-04-23. */ +/* Copyright (c) Kuba Szczodrzyński 2023-03-02. */ #pragma once +// Provide GPIO names to variant.cpp files +#define LT_VARIANT_INCLUDE "sdk_private.h" + +#include + #ifdef __cplusplus -#include "WCharacterFixup.h" -#endif +extern "C" { +#endif // __cplusplus -#define PinMode PinModeArduino // this conflicts with SDK enum -#include -#include -#undef PinMode +extern uint32_t SystemCoreClock; +extern void vPortClearInterruptMask(uint32_t ulNewMaskValue); +extern uint32_t ulPortSetInterruptMask(void); -// Include family-specific code -#include "WVariant.h" -// Include board variant -#include "variant.h" +#define clockCyclesPerMicrosecond() (SystemCoreClock / 1000000L) +#define clockCyclesToMicroseconds(a) (a * 1000L / (SystemCoreClock / 1000L)) +#define microsecondsToClockCycles(a) (a * (SystemCoreClock / 1000000L)) -// Choose the main UART output port -#ifndef LT_UART_DEFAULT_PORT -#if HAS_SERIAL2 -#define LT_UART_DEFAULT_PORT 2 -#elif HAS_SERIAL0 -#define LT_UART_DEFAULT_PORT 0 -#elif HAS_SERIAL1 -#define LT_UART_DEFAULT_PORT 1 -#else -#error "No serial port is available" -#endif -#endif +#define interrupts() vPortClearInterruptMask(0) +#define noInterrupts() ulPortSetInterruptMask() -// Define available serial ports #ifdef __cplusplus -#include "SerialClass.h" -#include +} // extern "C" #endif diff --git a/cores/realtek-amb/arduino/src/MD5Impl.h b/cores/realtek-amb/arduino/src/MD5Impl.h deleted file mode 100644 index e9bb3d8..0000000 --- a/cores/realtek-amb/arduino/src/MD5Impl.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Copyright (c) Kuba Szczodrzyński 2022-06-03. */ - -#pragma once - -#define LT_MD5_USE_POLARSSL 1 diff --git a/cores/realtek-amb/arduino/src/WVariant.h b/cores/realtek-amb/arduino/src/WVariant.h deleted file mode 100644 index 71902f3..0000000 --- a/cores/realtek-amb/arduino/src/WVariant.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - -#include "sdk_extern.h" -#include "sdk_mem.h" -#include "sdk_os.h" - -#define DEFAULT 1 -#define EXTERNAL 0 - -#define round(x) ((x) >= 0 ? (long)((x) + 0.5) : (long)((x)-0.5)) - -// Additional Wiring functions -extern uint32_t digitalPinToPort(uint32_t pinNumber); -extern uint32_t digitalPinToBitMask(uint32_t pinNumber); -extern void analogOutputInit(void); -extern void wait_for_debug(); - -#ifdef __cplusplus -extern "C" uint32_t SystemCoreClock; -#else -extern uint32_t SystemCoreClock; -#endif -#define clockCyclesPerMicrosecond() (SystemCoreClock / 1000000L) -#define clockCyclesToMicroseconds(a) (a * 1000L / (SystemCoreClock / 1000L)) -#define microsecondsToClockCycles(a) (a * (SystemCoreClock / 1000000L)) - -#define interrupts() vPortClearInterruptMask(0) -#define noInterrupts() ulPortSetInterruptMask() - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/cores/realtek-amb/arduino/src/lt_defs.h b/cores/realtek-amb/arduino/src/lt_defs.h index a1d88b4..2083962 100644 --- a/cores/realtek-amb/arduino/src/lt_defs.h +++ b/cores/realtek-amb/arduino/src/lt_defs.h @@ -6,8 +6,9 @@ #define LT_ARD_HAS_SOFTSERIAL 1 #define LT_ARD_HAS_SERIAL 1 +#define LT_ARD_MD5_POLARSSL 1 + #define ARDUINO_AMEBA -#define ARDUINO_ARCH_AMBZ // the SDK declares bool if not defined before // which conflicts with C++ built-in bool diff --git a/cores/realtek-amb/arduino/src/main.cpp b/cores/realtek-amb/arduino/src/main.cpp index 56246a8..2b0686c 100644 --- a/cores/realtek-amb/arduino/src/main.cpp +++ b/cores/realtek-amb/arduino/src/main.cpp @@ -1,10 +1,12 @@ /* Copyright (c) Kuba Szczodrzyński 2022-06-19. */ #include +#include extern "C" { #include +#include osThreadId main_tid = 0; diff --git a/cores/realtek-amb/arduino/src/wiring.c b/cores/realtek-amb/arduino/src/wiring.c index 72957c3..0cc3839 100644 --- a/cores/realtek-amb/arduino/src/wiring.c +++ b/cores/realtek-amb/arduino/src/wiring.c @@ -17,6 +17,7 @@ */ #include + #include #ifndef portNVIC_SYSTICK_CURRENT_VALUE_REG @@ -88,6 +89,7 @@ unsigned long micros(void) { } void yield(void) { + runPeriodicTasks(); vTaskDelay(1); taskYIELD(); } diff --git a/cores/realtek-amb/arduino/src/wiring_analog.c b/cores/realtek-amb/arduino/src/wiring_analog.c index 01b089a..1fde6e0 100644 --- a/cores/realtek-amb/arduino/src/wiring_analog.c +++ b/cores/realtek-amb/arduino/src/wiring_analog.c @@ -17,17 +17,14 @@ */ #include -#include -#include -#include -#include +#include /* ADC */ -analogin_t adc1; -analogin_t adc2; -analogin_t adc3; +static analogin_t adc1; +static analogin_t adc2; +static analogin_t adc3; -bool g_adc_enabled[] = {false, false, false}; +static bool g_adc_enabled[] = {false, false, false}; // from realtek_amebaz_va0_example/example_sources/adc_vbat/src/main.c #define AD2MV(ad, offset, gain) (((ad >> 4) - offset) * 1000 / gain) diff --git a/cores/realtek-amb/arduino/src/wiring_digital.c b/cores/realtek-amb/arduino/src/wiring_digital.c index fbf0ebb..953ede4 100644 --- a/cores/realtek-amb/arduino/src/wiring_digital.c +++ b/cores/realtek-amb/arduino/src/wiring_digital.c @@ -1,8 +1,5 @@ #include -#include -#include -#include -#include +#include extern void *gpio_pin_struct[PINS_COUNT]; @@ -28,7 +25,7 @@ void pinRemoveMode(pin_size_t pinNumber) { pin->enabled = PIN_NONE; } -void pinMode(pin_size_t pinNumber, PinModeArduino pinMode) { +void pinMode(pin_size_t pinNumber, PinMode pinMode) { PinInfo *pin = pinInfo(pinNumber); if (!pin) return; @@ -117,21 +114,3 @@ PinStatus digitalRead(pin_size_t pinNumber) { gpio_t *gpio = (gpio_t *)gpio_pin_struct[pinNumber]; return gpio_read(gpio); } - -/**************************** Extend API by RTK ***********************************/ - -uint32_t digitalPinToPort(uint32_t pinNumber) { - if (pinInvalid(pinNumber)) - return 0xFFFFFFFF; - - uint32_t pin_name = HAL_GPIO_GetPinName(pinTable[pinNumber].gpio); - return HAL_GPIO_GET_PORT_BY_NAME(pin_name); -} - -uint32_t digitalPinToBitMask(uint32_t pinNumber) { - if (pinInvalid(pinNumber)) - return 0xFFFFFFFF; - - uint32_t pin_name = HAL_GPIO_GetPinName(pinTable[pinNumber].gpio); - return 1 << (HAL_GPIO_GET_PIN_BY_NAME(pin_name)); -} diff --git a/cores/realtek-amb/arduino/src/wiring_irq.c b/cores/realtek-amb/arduino/src/wiring_irq.c index 90a6cf4..24d04b2 100644 --- a/cores/realtek-amb/arduino/src/wiring_irq.c +++ b/cores/realtek-amb/arduino/src/wiring_irq.c @@ -1,7 +1,5 @@ #include -#include -#include -#include +#include extern void *gpio_pin_struct[PINS_COUNT]; static void *gpio_irq_handler_list[PINS_COUNT] = {NULL}; diff --git a/cores/realtek-amb/arduino/src/wiring_pulse.c b/cores/realtek-amb/arduino/src/wiring_pulse.c index 7038f94..97ac71b 100644 --- a/cores/realtek-amb/arduino/src/wiring_pulse.c +++ b/cores/realtek-amb/arduino/src/wiring_pulse.c @@ -17,10 +17,7 @@ */ #include -#include -#include -#include -#include +#include extern void *gpio_pin_struct[]; diff --git a/cores/realtek-amb/base/sdk_private.h b/cores/realtek-amb/base/sdk_private.h index 8ce2358..5f2989d 100644 --- a/cores/realtek-amb/base/sdk_private.h +++ b/cores/realtek-amb/base/sdk_private.h @@ -11,6 +11,8 @@ extern "C" { // disable typedef in basic_types.h #define boolean boolean_rtl +// fix conflicts with Arduino's PinMode enum +#define PinMode PinModeRTL #include // define string macros first #undef isdigit // then remove them, as they conflict @@ -22,16 +24,30 @@ extern "C" { #undef strtoul #include +#include +#include #include #include +#include +#include +#include +#include #include +#include +#include #include #include +#include #include +#include +#include +#include #include +#include -// remove previously defined workaround +// remove previously defined workarounds #undef boolean +#undef PinMode // undefine ROM stdio in favor of printf() library (wrappers) #undef printf diff --git a/cores/realtek-ambz/base/fixups/basic_types.h b/cores/realtek-ambz/base/fixups/basic_types.h new file mode 100644 index 0000000..7dc832b --- /dev/null +++ b/cores/realtek-ambz/base/fixups/basic_types.h @@ -0,0 +1,6 @@ +/* Copyright (c) Kuba Szczodrzyński 2023-03-02. */ + +// fix conflicting declaration with ArduinoCore-API +#define boolean boolean_rtl +#include_next "basic_types.h" +#undef boolean diff --git a/cores/realtek-ambz/base/fixups/section_config.h b/cores/realtek-ambz/base/fixups/section_config.h new file mode 100644 index 0000000..fb968c8 --- /dev/null +++ b/cores/realtek-ambz/base/fixups/section_config.h @@ -0,0 +1,6 @@ +/* Copyright (c) Kuba Szczodrzyński 2023-03-02. */ + +// section_config.h is in the same directory as basic_types.h +// make the former include a fixup instead +#include "basic_types.h" +#include_next "section_config.h"