Toolchain errors with Pico W - Fails to build

Hi all, very new to PIO in general, just moving here from the Arduino IDE.

I’m not too sure on what’s causing this - I’m using the platformio.ini suggested by Max, here.

Here’s my build output:

 *  Executing task: C:\Users\Matt\.platformio\penv\Scripts\platformio.exe run 

Processing rpipicow (platform: https://github.com/maxgerhardt/platform-raspberrypi.git; framework: arduino; board: rpipicow)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/raspberrypi/rpipicow.html
PLATFORM: Raspberry Pi RP2040 (1.17.0+sha.a4b555a) > Pico W
HARDWARE: RP2040 133MHz, 256KB RAM, 2MB Flash
DEBUG: Current (blackmagic) External (blackmagic, cmsis-dap, jlink, picoprobe, raspberrypi-swd)
PACKAGES: 
 - framework-arduinopico @ 1.50201.0+sha.ded8a8a 
 - tool-picotool-rp2040-earlephilhower @ 5.140200.250530 (14.2.0) 
 - toolchain-rp2040-earlephilhower @ 5.140200.250530 (14.2.0)
Flash size: 2.00MB
Sketch size: 1.50MB
Filesystem size: 0.50MB
PSRAM size: 0.00MB
Maximium Sketch size: 1568768 EEPROM start: 0x101ff000 Filesystem start: 0x1017f000 Filesystem end: 0x101ff000
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 72 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Encoder @ 1.4.4
|-- SPI @ 1.0
|-- WiFi @ 1.0.0
|-- XPT2046_Touchscreen
|-- TFT_eSPI @ 2.5.43
Building in release mode
Compiling .pio\build\rpipicow\src\main.cpp.o
Compiling .pio\build\rpipicow\src\ui\UIManager.cpp.o
Archiving .pio\build\rpipicow\libc18\libLittleFS.a
Archiving .pio\build\rpipicow\libcb2\libUpdater.a
Archiving .pio\build\rpipicow\libe43\libWiFi.a
Archiving .pio\build\rpipicow\lib705\libXPT2046_Touchscreen.a
Compiling .pio\build\rpipicow\libed6\TFT_eSPI\TFT_eSPI.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\BluetoothDebug.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\Bootsel.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\CoreMutex.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\FS.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\PIOProgram.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\RP2040Support.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\Semihosting.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\SerialPIO.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\SerialUART.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\SerialUSB.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\StackThunk.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\USB.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\_freertos.cpp.o
In file included from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdlib.h:18,
                 from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0/cstdlib:79,
                 from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0/stdlib.h:36,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/Arduino.h:24,
                 from lib\TFT_eSPI/TFT_eSPI.h:30,
                 from src\ui\UIManager.h:4,
                 from src\ui\UIManager.cpp:1:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:169:28: error: expected identifier before '*' token
  169 |   _READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *,
      |                            ^
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:170:52: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  170 |                                            char *, _READ_WRITE_BUFSIZE_TYPE);
      |                                                    ^~~~~~~~~Compiling .pio\build\rpipicow\FrameworkArduino\api\Common.cpp.o
~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:170:76: error: '_READ_WRITE_RETURN_TYPE' declared as function returning a function
  170 |                                            char *, _READ_WRITE_BUFSIZE_TYPE);
      |                                                                            ^
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:171:28: error: expected identifier before '*' token
  171 |   _READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *,
      |                            ^
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:173:45: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  173 |                                             _READ_WRITE_BUFSIZE_TYPE);
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:173:69: error: '_READ_WRITE_RETURN_TYPE' declared as function returning a function
  173 |                                             _READ_WRITE_BUFSIZE_TYPE);
      |                                                                     ^
In file included from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/String.h:29,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/api/String.h:2,
                 from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/IPAddress.h:23,
                 from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/ArduinoAPI.h:30,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/api/ArduinoAPI.h:2,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/Arduino.h:28:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/ctype.h:70:9: error: '__IMPORT' does not name a type
   70 | extern  __IMPORT const char     _ctype_[];
      |         ^~~~~~~~
In file included from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/time.h:414,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/src/rp2_common/pico_lwip/include/arch/cc.h:35,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/arch.h:48,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/debug.h:40,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/opt.h:52,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/init.h:40,
                 from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/IPAddress.h:26:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/time.h:134:8: error: '__IMPORT' does not name a type
Compiling .pio\build\rpipicow\FrameworkArduino\api\IPAddress.cpp.o
  134 | extern __IMPORT long _timezone;
      |        ^~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/time.h:135:8: error: '__IMPORT' does not name a type
  135 | extern __IMPORT int _daylight;
      |        ^~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/time.h:138:8: error: '__IMPORT' does not name a type
  138 | extern __IMPORT char *_tzname[2];
      |        ^~~~~~~~
In file included from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/arch.h:82:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:609:33: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  609 |                                 _READ_WRITE_BUFSIZE_TYPE __n),
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:611:34: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  611 |                                  _READ_WRITE_BUFSIZE_TYPE __n),
Compiling .pio\build\rpipicow\FrameworkArduino\api\PluggableUSB.cpp.o
      |                                  ^~~~~~~~~Compiling .pio\build\rpipicow\FrameworkArduino\api\Print.cpp.o
~~~~~~~~~~~~~~Compiling .pio\build\rpipicow\FrameworkArduino\api\Stream.cpp.o
~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:616:33: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  616 |                                 _READ_WRITE_BUFSIZE_TYPE __n),
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:618:34: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  618 |                                  _READ_WRITE_BUFSIZE_TYPE __n),
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdlib.h:18,
                 from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0/cstdlib:79,
                 from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/c++/14.3.0/stdlib.h:36,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/Arduino.h:24,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\libraries\WiFi\src/WiFiClass.h:25,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\libraries\WiFi\src/WiFi.h:6,
                 from src\main.cpp:4:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:169:28: error: expected identifier before '*' token
  169 |   _READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *,
      |                            ^
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:170:52: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  170 |                                            char *, _READ_WRITE_BUFSIZE_TYPE);
      |                                                    ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:170:76: error: '_READ_WRITE_RETURN_TYPE' declared as function returning a function
  170 |                                            char *, _READ_WRITE_BUFSIZE_TYPE);
      |                                                                            ^
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:171:28: error: expected identifier before '*' token
  171 |   _READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *,
      |                            ^
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:173:45: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  173 |                                             _READ_WRITE_BUFSIZE_TYPE);
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/reent.h:173:69: error: '_READ_WRITE_RETURN_TYPE' declared as function returning a function
  173 |                                             _READ_WRITE_BUFSIZE_TYPE);
      |                                                                     ^
In file included from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/String.h:29,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/api/String.h:2,
                 from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/IPAddress.h:23,
                 from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/ArduinoAPI.h:30,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/api/ArduinoAPI.h:2,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico\cores\rp2040/Arduino.h:28:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/ctype.h:70:9: error: '__IMPORT' does not name a type
   70 | extern  __IMPORT const char     _ctype_[];
      |         ^~~~~~~~
In file included from C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/sys/time.h:414,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/src/rp2_common/pico_lwip/include/arch/cc.h:35,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/arch.h:48,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/debug.h:40,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/opt.h:52,
                 from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/init.h:40,
                 from C:/Users/Matt/.platformio/packages/framework-arduinopico/ArduinoCore-API/api/IPAddress.h:26:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/time.h:134:8: error: '__IMPORT' does not name a type
  134 | extern __IMPORT long _timezone;
      |        ^~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/time.h:135:8: error: '__IMPORT' does not name a type
  135 | extern __IMPORT int _daylight;
      |        ^~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/time.h:138:8: error: '__IMPORT' does not name a type
  138 | extern __IMPORT char *_tzname[2];
      |        ^~~~~~~~
In file included from C:\Users\Matt\.platformio\packages\framework-arduinopico/pico-sdk/lib/lwip/src/include/lwip/arch.h:82:
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:609:33: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  609 |                                 _READ_WRITE_BUFSIZE_TYPE __n),
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:611:34: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  611 |                                  _READ_WRITE_BUFSIZE_TYPE __n),
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:616:33: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  616 |                                 _READ_WRITE_BUFSIZE_TYPE __n),
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~
C:/Users/Matt/.platformio/packages/toolchain-rp2040-earlephilhower/arm-none-eabi/include/stdio.h:618:34: error: '_READ_WRITE_BUFSIZE_TYPE' has not been declared
  618 |                                  _READ_WRITE_BUFSIZE_TYPE __n),
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~
Compiling .pio\build\rpipicow\FrameworkArduino\api\String.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\cyw43_wrappers.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\delay.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\croutine.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\event_groups.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\freertos-lwip.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\freertos-main.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\heap_3a.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\list.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\lwip_freertos.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\mpu_wrappers_v2_asm.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\port.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\portASM.S.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\portasm.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\queue.c.o
*** [.pio\build\rpipicow\src\ui\UIManager.cpp.o] Error 1
*** [.pio\build\rpipicow\src\main.cpp.o] Error 1

I’ve recently just created the UIManager, and I feel there may be a link as to it being partially to blame as before I started refactoring my code, it would build fine - after adding it in, it’s started to fail.

Here is that specifically:

UIManager.h

#ifndef UI_MANAGER_H
#define UI_MANAGER_H

#include <TFT_eSPI.h> // Hardware-specific library
// #include <XPT2046_Touchscreen.h> // will be needed later when touch is put in

class UIManager {
    private:
        TFT_eSPI& tft; // Reference to the TFT display object
        
        static const int TEXT_HEIGHT = 16;
        static const int YMAX = 320;
        static const int XMAX = 480;
        static const int HEADER_HEIGHT = 40;
        static const int SIDEBAR_WIDTH = 80;
        static const int MAIN_AREA_WIDTH = XMAX - SIDEBAR_WIDTH;
        static const int MAIN_AREA_HEIGHT = YMAX - HEADER_HEIGHT;
        static const int MESSAGE_AREA_HEIGHT = 40;

        const char* menuItems[5] = {"Status", "Items", "Data", "Radio", "Settings"};
        int totalMenuItems = sizeof(menuItems) / sizeof(menuItems[0]);
        int selectedMenuItem = 0;

        void blinkLED(int delayTime);

    public:
        UIManager(TFT_eSPI& display); // constructor

        void printToTFT(String message, int delayTime = 0, int textSize = 1);

        void startUI();
        void drawSidebarMenu();
        void drawMainContent();

        void selectNextMenuItem();
        void selectPreviousMenuItem();
        void executeMenuItem();

        void handleTouch(int x, int y);
};

#endif

and UIManager.cpp:

#include "UIManager.h"
#include <Arduino.h>
#include <TFT_eSPI.h>

UIManager::UIManager(TFT_eSPI& display) : tft(display) {} // Constructor implementation

void UIManager::printToTFT(String message, int delayTime, int textSize) {
    static String lines[YMAX / TEXT_HEIGHT];

    Serial.println(message);

    // Shift existing lines up
    for (int i = 0; i < (YMAX / TEXT_HEIGHT) - 1; i++) {
    lines[i] = lines[i + 1];
    }
    lines[(YMAX / TEXT_HEIGHT) - 1] = message;

  // Clear screen and redraw
    tft.fillScreen(TFT_BLACK);
    tft.setTextSize(textSize);

    for (int i = 0; i < (YMAX / TEXT_HEIGHT); i++) {
        tft.setCursor(0, i * TEXT_HEIGHT);
        tft.print(lines[i]);
    }

    blinkLED(1);
    delay(delayTime);
}

void UIManager::startUI() {
    tft.fillRect(0, 0, XMAX, HEADER_HEIGHT, TFT_DARKGREEN);
    tft.setCursor(10, 10);
    tft.setTextColor(TFT_WHITE, TFT_DARKGREEN);
    tft.setTextSize(2);
    tft.print("PicoBoyOS v0.1");

    drawSidebarMenu();
    drawMainContent();
}

void UIManager::drawSidebarMenu() {
    tft.fillRect(0, HEADER_HEIGHT, SIDEBAR_WIDTH, YMAX - HEADER_HEIGHT, TFT_DARKGREY);
    tft.setTextSize(2);

    for (int i = 0; i < totalMenuItems; i++) {
        tft.setCursor(10, HEADER_HEIGHT + i * TEXT_HEIGHT + 10);
        if (i == selectedMenuItem) {
            tft.setTextColor(TFT_BLACK, TFT_WHITE);
        } else {
            tft.setTextColor(TFT_WHITE, TFT_DARKGREY);
        }
        tft.print(menuItems[i]);
    }
}

void UIManager::drawMainContent() {
    tft.fillRect(SIDEBAR_WIDTH, HEADER_HEIGHT, MAIN_AREA_WIDTH, MAIN_AREA_HEIGHT, TFT_BLACK);
    tft.setTextSize(2);
    tft.setTextColor(TFT_WHITE);

    if (selectedMenuItem == 0) {
        tft.setCursor(SIDEBAR_WIDTH + 10, HEADER_HEIGHT + 10);
        tft.print("Status Screen");
    } else if (selectedMenuItem == 1) {
        tft.setCursor(SIDEBAR_WIDTH + 10, HEADER_HEIGHT + 10);
        tft.print("Items Screen");
    } else if (selectedMenuItem == 2) {
        tft.setCursor(SIDEBAR_WIDTH + 10, HEADER_HEIGHT + 10);
        tft.print("Data Screen");
    } else if (selectedMenuItem == 3) {
        tft.setCursor(SIDEBAR_WIDTH + 10, HEADER_HEIGHT + 10);
        tft.print("Radio Screen");
    }
}

void UIManager::selectNextMenuItem() {
    selectedMenuItem = (selectedMenuItem + 1) % totalMenuItems;
    drawSidebarMenu();
    drawMainContent();
}

void UIManager::selectPreviousMenuItem() {
    selectedMenuItem = (selectedMenuItem - 1 + totalMenuItems) % totalMenuItems;
    drawSidebarMenu();
    drawMainContent();
}

void UIManager::executeMenuItem() {
    selectNextMenuItem();
}

void UIManager::handleTouch(int x, int y){
    // For now, just print the touch coordinates
    Serial.print("Touch at: ");
    Serial.print(x);
    Serial.print(", ");
    Serial.println(y);

    // Add touch handling logic based on coordinates
    if (y < HEADER_HEIGHT) {
        // Handle touches in the header area
    } else if (x < SIDEBAR_WIDTH) {
        // Handle touches in the sidebar menu area
        int touchedItem = (y - HEADER_HEIGHT) / TEXT_HEIGHT;
        if (touchedItem >= 0 && touchedItem < totalMenuItems) {
        selectedMenuItem = touchedItem;
        drawSidebarMenu();
        drawMainContent();
        }
    } else {
    // Handle touches in the main content area
    }
}

I have no idea why they’re causing the issues, they must be but I just cannot pinpoint the problem, CPP is still somewhat new to me so please go easy on me! Also apologies if this is in the wrong place, feel free to move it admins if need be :slight_smile:

What’s your current full platformio.ini?

Here ya go :slight_smile:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:rpipicow]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
framework = arduino
board = rpipicow
board_build.core = earlephilhower
board_build.filesystem_size = 0.5m

But you have a dependency on

Did you copy the Encoder, XPT2046 and TFT_eSPI library manually in the lib folder?

Yeah I did, mainly because the TFT lib has quite a few changes made by me to get it to work, and I’m also using a forked version of the encoder lib to get it to work with the pico w. To be fair, the XPT I just grabbed as I thought I mays well whilst I was moving the others

Okay, but you can also configure TFT_eSPI via only build_flags to nudge it into using the right display controller and pins, like shown in TFT_eSPI.h Fonts? - #9 by trevor1

Can you upload the project as a whole? Makes it easier to reproduce.

Remove any non-important file if you need to while keeping the error message intact.

I had no idea you could do that! Damn! I’ll look into that as that would fix the faff.

I made the repo public here: GitHub - mattordev/PicoBoyOS at feature/module-refactor but I can upload it directly in a zip if you like :slight_smile:

The most confusing part to me is, it builds fine on develop, but since trying to refactor, it HATES it.

You’re having a file called sys/Config.h. This is extremely deadly. The compiler’s newlib C library’s configuration file is called sys/config.h, which is where the missing _READ_WRITE_RETURN_TYPE is located.

With the file simply renamed, it only has a linker error for a missing function.

I guess you could also change the folder name sys to something else to avoid the nameclash here with the compiler sys stuff.

OH. MY. GOD.

That fixed it!

 *  The terminal process "C:\Users\Matt\.platformio\penv\Scripts\platformio.exe 'run'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it. 

 *  Executing task: C:\Users\Matt\.platformio\penv\Scripts\platformio.exe run 

Processing rpipicow (platform: https://github.com/maxgerhardt/platform-raspberrypi.git; framework: arduino; board: rpipicow)
------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/raspberrypi/rpipicow.html
PLATFORM: Raspberry Pi RP2040 (1.17.0+sha.a4b555a) > Pico W
HARDWARE: RP2040 133MHz, 256KB RAM, 2MB Flash
DEBUG: Current (blackmagic) External (blackmagic, cmsis-dap, jlink, picoprobe, raspberrypi-swd)
PACKAGES:
 - framework-arduinopico @ 1.50201.0+sha.ded8a8a
 - tool-picotool-rp2040-earlephilhower @ 5.140200.250530 (14.2.0)
 - toolchain-rp2040-earlephilhower @ 5.140200.250530 (14.2.0)
Flash size: 2.00MB
Sketch size: 1.50MB
Filesystem size: 0.50MB
PSRAM size: 0.00MB
Maximium Sketch size: 1568768 EEPROM start: 0x101ff000 Filesystem start: 0x1017f000 Filesystem end: 0x101ff000
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 72 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Encoder @ 1.4.4
|-- SPI @ 1.0
|-- WiFi @ 1.0.0
|-- XPT2046_Touchscreen
|-- TFT_eSPI @ 2.5.43
Building in release mode
Compiling .pio\build\rpipicow\FrameworkArduinoVariant\digital.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduinoVariant\init.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduinoBootloader\boot2_w25q080_2_padded_checksum.S.o
Compiling .pio\build\rpipicow\src\boot\BootManager.cpp.o
Compiling .pio\build\rpipicow\src\input\InputManager.cpp.o
Compiling .pio\build\rpipicow\src\main.cpp.o
Compiling .pio\build\rpipicow\src\net\NetworkManager.cpp.o
Compiling .pio\build\rpipicow\src\sys\SensorManager.cpp.o
Compiling .pio\build\rpipicow\src\ui\UIManager.cpp.o
Generating linkerscript G:\GitRepos\PicoBoyOS\.pio\build\rpipicow/memmap_default.ld
Compiling .pio\build\rpipicow\libaeb\Encoder-xiao_rp2040_fixes\Encoder.cpp.o
Compiling .pio\build\rpipicow\lib49e\SPI\SPI.cpp.o
Compiling .pio\build\rpipicow\liba43\lwIP_Ethernet\LwipEthernet.cpp.o
Compiling .pio\build\rpipicow\liba43\lwIP_Ethernet\LwipIntf.cpp.o
Compiling .pio\build\rpipicow\liba43\lwIP_Ethernet\LwipIntfCB.cpp.o
Compiling .pio\build\rpipicow\lib380\lwIP_CYW43\lwIP_CYW43.cpp.o
Compiling .pio\build\rpipicow\lib380\lwIP_CYW43\utility\CYW43shim.cpp.o
Compiling .pio\build\rpipicow\lib590\MD5Builder\MD5Builder.cpp.o
Compiling .pio\build\rpipicow\libc18\LittleFS\LittleFS.cpp.o
Compiling .pio\build\rpipicow\libc18\LittleFS\lfs.c.o
Compiling .pio\build\rpipicow\libc18\LittleFS\lfs_util.c.o
Compiling .pio\build\rpipicow\lib3df\PicoOTA\PicoOTA.cpp.o
Compiling .pio\build\rpipicow\libcb2\Updater\Updater.cpp.o
Compiling .pio\build\rpipicow\libe43\WiFi\BearSSLHelpers.cpp.o
Compiling .pio\build\rpipicow\libe43\WiFi\CertStoreBearSSL.cpp.o
Archiving .pio\build\rpipicow\libaeb\libEncoder-xiao_rp2040_fixes.a
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiClass.cpp.o
Archiving .pio\build\rpipicow\lib590\libMD5Builder.a
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiClient.cpp.o
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiClientSecureBearSSL.cpp.o
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiMulti.cpp.o
Archiving .pio\build\rpipicow\lib3df\libPicoOTA.a
Archiving .pio\build\rpipicow\lib49e\libSPI.a
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiNTP.cpp.o
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiServer.cpp.o
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiServerSecureBearSSL.cpp.o
Archiving .pio\build\rpipicow\liba43\liblwIP_Ethernet.a
Archiving .pio\build\rpipicow\lib380\liblwIP_CYW43.a
Compiling .pio\build\rpipicow\libe43\WiFi\WiFiUdp.cpp.o
Compiling .pio\build\rpipicow\libe43\WiFi\dhcpserver\dhcpserver.c.o
Compiling .pio\build\rpipicow\lib705\XPT2046_Touchscreen\XPT2046_Touchscreen.cpp.o
Archiving .pio\build\rpipicow\libc18\libLittleFS.a
Compiling .pio\build\rpipicow\libed6\TFT_eSPI\TFT_eSPI.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\BluetoothDebug.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\Bootsel.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\CoreMutex.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\FS.cpp.o
Archiving .pio\build\rpipicow\libcb2\libUpdater.a
Compiling .pio\build\rpipicow\FrameworkArduino\PIOProgram.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\RP2040Support.cpp.o
Archiving .pio\build\rpipicow\lib705\libXPT2046_Touchscreen.a
Compiling .pio\build\rpipicow\FrameworkArduino\Semihosting.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\SerialPIO.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\SerialUART.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\SerialUSB.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\StackThunk.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\USB.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\_freertos.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\api\Common.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\api\IPAddress.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\api\PluggableUSB.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\api\Print.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\api\Stream.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\api\String.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\cyw43_wrappers.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\delay.cpp.o
Archiving .pio\build\rpipicow\libe43\libWiFi.a
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\croutine.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\event_groups.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\freertos-lwip.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\freertos-main.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\heap_3a.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\list.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\lwip_freertos.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\mpu_wrappers_v2_asm.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\port.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\portASM.S.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\portasm.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\queue.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\stream_buffer.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\tasks.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\timers.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\freertos\variantHooks.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\gprof_gmon.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\gprof_shim.S.o
Compiling .pio\build\rpipicow\FrameworkArduino\libb64\cdecode.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\libb64\cencode.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\lock.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\api_lib.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\api_msg.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\err.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\if_api.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\netbuf.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\netdb.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\netifapi.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\sockets.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\api\tcpip.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\altcp_tls\altcp_tls_mbedtls.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\altcp_tls\altcp_tls_mbedtls_mem.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\lwiperf\lwiperf.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\mdns\mdns.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\mdns\mdns_domain.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\mdns\mdns_out.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\mqtt\mqtt.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\netbiosns\netbiosns.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\smtp\smtp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_asn1.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_core.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2_icmp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2_interfaces.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2_ip.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2_snmp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2_system.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2_tcp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_mib2_udp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_msg.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_netconn.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_pbuf_stream.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_raw.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_scalar.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_snmpv2_framework.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_snmpv2_usm.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_table.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_threadsync.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmp_traps.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmpv3.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\snmp\snmpv3_mbedtls.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\sntp\sntp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\apps\tftp\tftp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\altcp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\altcp_alloc.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\altcp_tcp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\def.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\dns.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\inet_chksum.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\init.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ip.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\acd.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\autoip.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\dhcp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\etharp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\icmp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\igmp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\ip4.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\ip4_addr.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv4\ip4_frag.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\dhcp6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\ethip6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\icmp6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\inet6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\ip6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\ip6_addr.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\ip6_frag.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\mld6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\ipv6\nd6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\mem.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\memp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\netif.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\pbuf.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\raw.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\stats.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\sys.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\tcp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\tcp_in.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\tcp_out.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\timeouts.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\core\udp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\bridgeif.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\bridgeif_fdb.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ethernet.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\lowpan6.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\lowpan6_ble.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\lowpan6_common.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\auth.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\ccp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\chap-md5.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\chap-new.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\chap_ms.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\demand.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\eap.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\ecp.c.o
Archiving .pio\build\rpipicow\libed6\libTFT_eSPI.a
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\eui64.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\fsm.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\ipcp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\ipv6cp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\lcp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\magic.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\mppe.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\multilink.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\polarssl\arc4.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\polarssl\des.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\polarssl\md4.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\polarssl\md5.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\polarssl\sha1.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\ppp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\pppapi.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\pppcrypt.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\pppoe.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\pppol2tp.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\pppos.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\upap.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\utils.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\ppp\vj.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\slipif.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip\src\netif\zepif.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\lwip_wrap.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\main.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\malloc-lock.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\posix.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\psram.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\rp2350-memcpy.S.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\async_context_freertos.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\async_context_threadsafe_background.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\btstack_flash_bank.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\btstack_run_loop_async_context.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\cyw43_arch_freertos.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\cyw43_arch_threadsafe_background.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\cyw43_driver_freertos.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\inet_chksum.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\newlib_interface.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\sdkoverride\pico_bootsel_via_double_reset.c.o
Compiling .pio\build\rpipicow\FrameworkArduino\stdlib_noniso.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\wiring_analog.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\wiring_digital.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\wiring_private.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\wiring_pulse.cpp.o
Compiling .pio\build\rpipicow\FrameworkArduino\wiring_shift.cpp.o
Archiving .pio\build\rpipicow\libFrameworkArduino.a
Linking .pio\build\rpipicow\firmware.elf
Generating UF2 image
picotool uf2 convert -t elf ".pio\build\rpipicow\firmware.elf" ".pio\build\rpipicow\firmware.uf2"
Retrieving maximum program size .pio\build\rpipicow\firmware.elf
Checking size .pio\build\rpipicow\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [===       ]  27.9% (used 73152 bytes from 262144 bytes)
Flash: [===       ]  26.4% (used 414596 bytes from 1568768 bytes)
Building .pio\build\rpipicow\firmware.bin
Building .pio\build\rpipicow\firmware.bin.signed
=================================================== [SUCCESS] Took 15.14 seconds ===================================================
 *  Terminal will be reused by tasks, press any key to close it. 

The linker error comes from the function

UIManager::blinkLED(int)

not being implemented yet.

You’re a lifesaver Max, seems like such a rookie error :frowning: but we have to learn at somepoint!

And ah, that linker error is just due to me shifting around my function for blinking the Picos LED - it was originally in the UIManager but it didn’t make much sense, so it’ll probably go somewhere in /src/sys

I’m definitely going to move the TFT flags to the INI though, seems like a no-brainer. I don’t suppose there’s anyway around manually putting in the forked encoder library?

So you grabbed the forked Encoder library from

https://github.com/doctea/Encoder/tree/xiao_rp2040_fixes

I mean, that depends on whether you trust this library / fork to always exist for as long as you want to use the project. Local copies aren’t always bad. Of course, with PlatformIO, you can also just point it to that forked repo

lib_deps =
  ; Encoder with RP2040 fixes
  https://github.com/doctea/Encoder/archive/refs/heads/xiao_rp2040_fixes.zip
  ; display lib
  bodmer/TFT_eSPI@2.5.43
  ; touchscreen lib
  https://github.com/PaulStoffregen/XPT2046_Touchscreen/archive/refs/tags/v1.4.zip

Cheers mate, yeah that’s the one I’m using - I might try the original patched library instead of that one now that I know my wiring is sound. A lot of the problems with the encoder (I actually originally spoke to you about it on an old post!) were derived from bad wiring and needing pull-up resistors to 3.3v. I’m so happy it’s compiling!

Cool!

Just another short heads up, you copied the Sparkfun SD library into the lib/ folder, but the Arduino-Pico core already has SD library builtin (just #include <SD.h> and delete the old library from lib/)

https://github.com/earlephilhower/arduino-pico/tree/master/libraries/SD

Not sure if this has a changed API versus the Sparkfun SD library, but the core-builtin is more “standard” and builtin.

Thank you! TBF, I’m quite a way off trying anything with SD cards or anything yet - I believe I just grabbed it as I knew I would be using it at some point. But lovely to know it’s builtin!

Coming from the Arduino IDE to PlatformIO has been a big challenge, but a nice one, especially with all the cool stuff it can do too.