From 3e6fa13fece61b04f04fa06467cb1934aecbe85d Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 16 Aug 2024 06:36:27 +0200 Subject: [PATCH 01/34] first upload --- _Boards/RaspberryPi/Pico2/MFBoards.h | 52 +++++ .../Pico2/raspberrypi_pico.board.json | 202 ++++++++++++++++++ platformio.ini | 22 ++ src/Config.cpp | 10 +- src/MF_Modules/MFEEPROM.cpp | 4 +- src/MF_Modules/MFEEPROM.h | 4 +- src/MF_Output/MFOutput.cpp | 2 +- src/MF_Servo/MFServo.cpp | 2 +- 8 files changed, 287 insertions(+), 11 deletions(-) create mode 100644 _Boards/RaspberryPi/Pico2/MFBoards.h create mode 100644 _Boards/RaspberryPi/Pico2/raspberrypi_pico.board.json diff --git a/_Boards/RaspberryPi/Pico2/MFBoards.h b/_Boards/RaspberryPi/Pico2/MFBoards.h new file mode 100644 index 00000000..31e4e258 --- /dev/null +++ b/_Boards/RaspberryPi/Pico2/MFBoards.h @@ -0,0 +1,52 @@ +#ifndef MFBoardMicro_h +#define MFBoardMicro_h + +#ifndef MF_SEGMENT_SUPPORT +#define MF_SEGMENT_SUPPORT 1 +#endif +#ifndef MF_LCD_SUPPORT +#define MF_LCD_SUPPORT 1 +#endif +#ifndef MF_STEPPER_SUPPORT +#define MF_STEPPER_SUPPORT 1 +#endif +#ifndef MF_SERVO_SUPPORT +#define MF_SERVO_SUPPORT 1 +#endif +#ifndef MF_ANALOG_SUPPORT +#define MF_ANALOG_SUPPORT 1 +#endif +#ifndef MF_OUTPUT_SHIFTER_SUPPORT +#define MF_OUTPUT_SHIFTER_SUPPORT 1 +#endif +#ifndef MF_INPUT_SHIFTER_SUPPORT +#define MF_INPUT_SHIFTER_SUPPORT 1 +#endif +#ifndef MF_MUX_SUPPORT +#define MF_MUX_SUPPORT 1 +#endif +#ifndef MF_DIGIN_MUX_SUPPORT +#define MF_MUX_SUPPORT 1 +#define MF_DIGIN_MUX_SUPPORT 1 +#endif + +#ifndef MOBIFLIGHT_TYPE +#define MOBIFLIGHT_TYPE "MobiFlight RaspiPico2" +#endif +#ifndef MOBIFLIGHT_SERIAL +#define MOBIFLIGHT_SERIAL "0987654321" +#endif +#ifndef MOBIFLIGHT_NAME +#define MOBIFLIGHT_NAME "MobiFlight RaspiPico2" +#endif +#ifndef MEMLEN_CONFIG +#define MEMLEN_CONFIG 1496 // MUST be less than EEPROM_SIZE!! MEM_OFFSET_CONFIG + MEM_LEN_CONFIG <= EEPROM_SIZE, see: eeprom_write_block (MEM_OFFSET_CONFIG, configBuffer, MEM_LEN_CONFIG); +#endif +#ifndef MEMLEN_NAMES_BUFFER +#define MEMLEN_NAMES_BUFFER 1000 // max. size for configBuffer, contains only names from inputs +#endif +#ifndef MF_MAX_DEVICEMEM +#define MF_MAX_DEVICEMEM 1000 // max. memory size for devices +#endif + +#endif diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico.board.json new file mode 100644 index 00000000..18feb232 --- /dev/null +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico.board.json @@ -0,0 +1,202 @@ +{ + "$schema": "./mfboard.schema.json", + "UsbDriveSettings": { + "VolumeLabel": "RPI-RP2", + "VerificationFileName": "INFO_UF2.TXT" + }, + "Connection": { + "ConnectionDelay": 1250, + "DelayAfterFirmwareUpdate": 1250, + "DtrEnable": true, + "EEPROMSize": 1496, + "ExtraConnectionRetry": false, + "ForceResetOnFirmwareUpdate": true, + "MessageSize": 64 + }, + "HardwareIds": ["^VID_2E8A&PID_0005"], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "FirmwareBaseName": "mobiflight_raspberrypico", + "FirmwareExtension": "uf2", + "FriendlyName": "Raspberry Pico2", + "LatestFirmwareVersion": "2.5.1", + "MobiFlightType": "MobiFlight RaspiPico2", + "ResetFirmwareFile": "reset.raspberry_pico_flash_nuke.uf2" + }, + "ModuleLimits": { + "MaxAnalogInputs": 3, + "MaxInputShifters": 6, + "MaxButtons": 26, + "MaxEncoders": 13, + "MaxLcdI2C": 2, + "MaxLedSegments": 6, + "MaxOutputs": 26, + "MaxServos": 8, + "MaxShifters": 6, + "MaxSteppers": 6, + "MaxInputMultiplexer": 6, + "MaxCustomDevices": 0 + }, + "Pins": [ + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 0 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 1 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 2 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 3 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": true, + "Pin": 4 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": true, + "Pin": 5 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 6 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 7 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 8 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 9 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 10 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 11 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 12 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 13 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 14 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 15 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 16 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 17 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 18 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 19 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 20 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 21 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 22 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A0", + "Pin": 26 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A1", + "Pin": 27 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A2", + "Pin": 28 + } + ] +} diff --git a/platformio.ini b/platformio.ini index 0ec96c82..638714d8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -145,3 +145,25 @@ lib_deps = monitor_speed = 115200 extra_scripts = ${env.extra_scripts} + +; Build settings for the Raspberry Pico original +[env:mobiflight_raspberrypico2] +platform = https://github.com/maxgerhardt/platform-raspberrypi.git +board = pico2 +framework = arduino +board_build.core = earlephilhower ; select new core +board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. +lib_ldf_mode = chain+ +upload_protocol = mbed ; for debugging upoading can be changed to picoprobe +;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe +build_flags = + ${env.build_flags} + -I./_Boards/RaspberryPi/Pico2 +build_src_filter = + ${env.build_src_filter} +lib_deps = + ${env.lib_deps} + ${env.custom_lib_deps_Pico} +monitor_speed = 115200 +extra_scripts = + ${env.extra_scripts} diff --git a/src/Config.cpp b/src/Config.cpp index 35b5153f..2e9a936f 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -9,7 +9,7 @@ #include "Button.h" #include "Encoder.h" #include "Output.h" -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) #include "ArduinoUniqueID.h" #endif @@ -69,7 +69,7 @@ const uint8_t MEM_OFFSET_CONFIG = MEM_OFFSET_NAME + MEM_LEN_NAME + MEM_LEN_SERIA #if defined(ARDUINO_ARCH_AVR) char serial[11] = MOBIFLIGHT_SERIAL; // 3 characters for "SN-",7 characters for "xyz-zyx" plus terminating NULL -#elif defined(ARDUINO_ARCH_RP2040) +#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) char serial[3 + UniqueIDsize * 2 + 1] = MOBIFLIGHT_SERIAL; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL #endif char name[MEM_LEN_NAME] = MOBIFLIGHT_NAME; @@ -633,7 +633,7 @@ void generateRandomSerial() cmdMessenger.sendCmd(kDebug, F("Serial number generated")); } -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) void readUniqueSerial() { serial[0] = 'S'; @@ -667,7 +667,7 @@ void generateSerial(bool force) if (MFeeprom.read_byte(MEM_OFFSET_SERIAL) == 'I' && MFeeprom.read_byte(MEM_OFFSET_SERIAL + 1) == 'D') { #if defined(ARDUINO_ARCH_AVR) generateRandomSerial(); -#elif defined(ARDUINO_ARCH_RP2040) +#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) readUniqueSerial(); #endif return; @@ -681,7 +681,7 @@ void generateSerial(bool force) // and getting the command to send the info's to the connector is always the same. // additional double check if it's really a new board, should reduce Jaimes problem generateRandomSerial(); -#elif defined(ARDUINO_ARCH_RP2040) +#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) // Read the uniqueID for Pico's and use it as serial number readUniqueSerial(); // mark this in the eeprom that a UniqueID is used on first start up for Pico's diff --git a/src/MF_Modules/MFEEPROM.cpp b/src/MF_Modules/MFEEPROM.cpp index 7d63bfd5..27c086fe 100644 --- a/src/MF_Modules/MFEEPROM.cpp +++ b/src/MF_Modules/MFEEPROM.cpp @@ -12,7 +12,7 @@ MFEEPROM::MFEEPROM() {} void MFEEPROM::init(void) { -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) EEPROM.begin(4096); #endif _eepromLength = EEPROM.length(); @@ -33,7 +33,7 @@ bool MFEEPROM::write_byte(uint16_t adr, const uint8_t data) { if (adr >= _eepromLength) return false; EEPROM.write(adr, data); -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) EEPROM.commit(); #endif return true; diff --git a/src/MF_Modules/MFEEPROM.h b/src/MF_Modules/MFEEPROM.h index 92fe7328..c99df82c 100644 --- a/src/MF_Modules/MFEEPROM.h +++ b/src/MF_Modules/MFEEPROM.h @@ -44,7 +44,7 @@ class MFEEPROM { if (adr + sizeof(T) > _eepromLength) return false; EEPROM.put(adr, t); -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) EEPROM.commit(); #endif return true; @@ -57,7 +57,7 @@ class MFEEPROM for (uint16_t i = 0; i < len; i++) { EEPROM.put(adr + i, t[i]); } -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) EEPROM.commit(); #endif return true; diff --git a/src/MF_Output/MFOutput.cpp b/src/MF_Output/MFOutput.cpp index 6dbd3203..362a57f2 100644 --- a/src/MF_Output/MFOutput.cpp +++ b/src/MF_Output/MFOutput.cpp @@ -14,7 +14,7 @@ MFOutput::MFOutput() void MFOutput::attach(uint8_t pin) { _pin = pin; -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) pinMode(_pin, OUTPUT_12MA); #else pinMode(_pin, OUTPUT); diff --git a/src/MF_Servo/MFServo.cpp b/src/MF_Servo/MFServo.cpp index 3c624d02..d77eb041 100644 --- a/src/MF_Servo/MFServo.cpp +++ b/src/MF_Servo/MFServo.cpp @@ -12,7 +12,7 @@ void MFServo::moveTo(int absolute) if (_targetPos != newValue) { _targetPos = newValue; if (!_initialized) { -#if defined(ARDUINO_ARCH_RP2040) +#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) _servo.attach(_pin, 544, 2400); #else _servo.attach(_pin); From 3f1f3bda7304a9bb953bd8f067904686998c4757 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:14:51 +0200 Subject: [PATCH 02/34] add generic RP2350B board --- ...oard.json => raspberrypi_pico2.board.json} | 0 .../raspberrypi_pico2_generic.board.json | 333 ++++++++++++++++++ platformio.ini | 24 ++ 3 files changed, 357 insertions(+) rename _Boards/RaspberryPi/Pico2/{raspberrypi_pico.board.json => raspberrypi_pico2.board.json} (100%) create mode 100644 _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json similarity index 100% rename from _Boards/RaspberryPi/Pico2/raspberrypi_pico.board.json rename to _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json new file mode 100644 index 00000000..0d3b9918 --- /dev/null +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -0,0 +1,333 @@ +{ + "$schema": "./mfboard.schema.json", + "UsbDriveSettings": { + "VolumeLabel": "RPI-RP2", + "VerificationFileName": "INFO_UF2.TXT" + }, + "Connection": { + "ConnectionDelay": 1250, + "DelayAfterFirmwareUpdate": 1250, + "DtrEnable": true, + "EEPROMSize": 1496, + "ExtraConnectionRetry": false, + "ForceResetOnFirmwareUpdate": true, + "MessageSize": 64 + }, + "HardwareIds": ["^VID_2E8A&PID_0005"], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "FirmwareBaseName": "mobiflight_raspberrypico", + "FirmwareExtension": "uf2", + "FriendlyName": "Raspberry Pico2 generic", + "LatestFirmwareVersion": "2.5.1", + "MobiFlightType": "MobiFlight RaspiPico2 generic", + "ResetFirmwareFile": "reset.raspberry_pico_flash_nuke.uf2" + }, + "ModuleLimits": { + "MaxAnalogInputs": 3, + "MaxInputShifters": 6, + "MaxButtons": 26, + "MaxEncoders": 13, + "MaxLcdI2C": 2, + "MaxLedSegments": 6, + "MaxOutputs": 26, + "MaxServos": 8, + "MaxShifters": 6, + "MaxSteppers": 6, + "MaxInputMultiplexer": 6, + "MaxCustomDevices": 0 + }, + "Pins": [ + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 0 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 1 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 2 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 3 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": true, + "Pin": 4 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": true, + "Pin": 5 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 6 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 7 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 8 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 9 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 10 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 11 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 12 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 13 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 14 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 15 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 16 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 17 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 18 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 19 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 20 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 21 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 22 + }, + , + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 23 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 24 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 25 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 26 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 27 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 28 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 29 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 30 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 31 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 32 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 33 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 34 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 35 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 36 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 37 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 38 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 39 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A0", + "Pin": 40 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A1", + "Pin": 41 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A2", + "Pin": 42 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A3", + "Pin": 43 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A4", + "Pin": 44 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A5", + "Pin": 45 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A6", + "Pin": 46 + } + ] +} diff --git a/platformio.ini b/platformio.ini index 638714d8..4d030561 100644 --- a/platformio.ini +++ b/platformio.ini @@ -167,3 +167,27 @@ lib_deps = monitor_speed = 115200 extra_scripts = ${env.extra_scripts} + +; Build settings for the Raspberry Pico original +[env:mobiflight_raspberrypico2_generic] +platform = https://github.com/maxgerhardt/platform-raspberrypi.git +board = pico2_generic +framework = arduino +board_build.core = earlephilhower ; select new core +board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. +lib_ldf_mode = chain+ +upload_protocol = mbed ; for debugging upoading can be changed to picoprobe +;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe +build_flags = + ${env.build_flags} + '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2 generic"' + '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2 generic"' + -I./_Boards/RaspberryPi/Pico2 +build_src_filter = + ${env.build_src_filter} +lib_deps = + ${env.lib_deps} + ${env.custom_lib_deps_Pico} +monitor_speed = 115200 +extra_scripts = + ${env.extra_scripts} From 2d32c2a716bafc7644e6758febb134b8fd1beefb Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:28:56 +0200 Subject: [PATCH 03/34] fixed wrong FirmwareBaseName --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 18feb232..869ae12c 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -17,7 +17,7 @@ "Info": { "CanInstallFirmware": true, "CanResetBoard": true, - "FirmwareBaseName": "mobiflight_raspberrypico", + "FirmwareBaseName": "mobiflight_raspberrypico2", "FirmwareExtension": "uf2", "FriendlyName": "Raspberry Pico2", "LatestFirmwareVersion": "2.5.1", diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 0d3b9918..810a23d2 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -17,7 +17,7 @@ "Info": { "CanInstallFirmware": true, "CanResetBoard": true, - "FirmwareBaseName": "mobiflight_raspberrypico", + "FirmwareBaseName": "mobiflight_raspberrypico2_generic", "FirmwareExtension": "uf2", "FriendlyName": "Raspberry Pico2 generic", "LatestFirmwareVersion": "2.5.1", From d65e2ec08e6c55247d4fe73be6d7bdf5e2594acc Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sat, 17 Aug 2024 08:18:00 +0200 Subject: [PATCH 04/34] reduce frequnecy for shifting data --- src/MF_InputShifter/MFInputShifter.cpp | 5 +-- src/MF_Modules/MFShiftData.cpp | 41 ++++++++++++++++++++++++ src/MF_Modules/MFShiftData.h | 6 ++++ src/MF_OutputShifter/MFOutputShifter.cpp | 3 +- 4 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 src/MF_Modules/MFShiftData.cpp create mode 100644 src/MF_Modules/MFShiftData.h diff --git a/src/MF_InputShifter/MFInputShifter.cpp b/src/MF_InputShifter/MFInputShifter.cpp index d8bdfb9c..641278b4 100644 --- a/src/MF_InputShifter/MFInputShifter.cpp +++ b/src/MF_InputShifter/MFInputShifter.cpp @@ -5,6 +5,7 @@ // #include "MFInputShifter.h" +#include "MFShiftData.h" #include "allocateMem.h" inputShifterEvent MFInputShifter::_inputHandler = NULL; @@ -61,12 +62,12 @@ void MFInputShifter::poll(uint8_t doTrigger) digitalWrite(_clockPin, HIGH); // Preset clock to retrieve first bit digitalWrite(_latchPin, HIGH); // Disable input latching and enable shifting - // Multiple chained modules are handled one at a time. As shiftIn() keeps getting + // Multiple chained modules are handled one at a time. As shiftInData() keeps getting // called it will pull in the data from each chained module. for (uint8_t module = 0; module < _moduleCount; module++) { uint8_t currentState; - currentState = shiftIn(_dataPin, _clockPin, MSBFIRST); + currentState = shiftInData(_dataPin, _clockPin, MSBFIRST); // If an input changed on the current module from the last time it was read // then hand it off to figure out which bits specifically changed. diff --git a/src/MF_Modules/MFShiftData.cpp b/src/MF_Modules/MFShiftData.cpp new file mode 100644 index 00000000..9c06d37b --- /dev/null +++ b/src/MF_Modules/MFShiftData.cpp @@ -0,0 +1,41 @@ +#include "MFShiftData.h" + +uint8_t shiftInData(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) +{ + uint8_t value = 0; + uint8_t i; + + for (i = 0; i < 8; ++i) { + if (bitOrder == LSBFIRST) + value |= digitalRead(dataPin) << i; + else + value |= digitalRead(dataPin) << (7 - i); + digitalWrite(clockPin, HIGH); + digitalWrite(clockPin, LOW); +#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_RP2040) + delayMicroseconds(1); +#endif + } + return value; +} + +void shiftOutData(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) +{ + uint8_t i; + + for (i = 0; i < 8; i++) { + if (bitOrder == LSBFIRST) { + digitalWrite(dataPin, val & 1); + val >>= 1; + } else { + digitalWrite(dataPin, (val & 128) != 0); + val <<= 1; + } + + digitalWrite(clockPin, HIGH); + digitalWrite(clockPin, LOW); +#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_RP2040) + delayMicroseconds(1); +#endif + } +} diff --git a/src/MF_Modules/MFShiftData.h b/src/MF_Modules/MFShiftData.h new file mode 100644 index 00000000..bfe5644a --- /dev/null +++ b/src/MF_Modules/MFShiftData.h @@ -0,0 +1,6 @@ +#pragma once + +#include + +uint8_t shiftInData(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder); +void shiftOutData(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val); diff --git a/src/MF_OutputShifter/MFOutputShifter.cpp b/src/MF_OutputShifter/MFOutputShifter.cpp index c4d827e8..10815655 100644 --- a/src/MF_OutputShifter/MFOutputShifter.cpp +++ b/src/MF_OutputShifter/MFOutputShifter.cpp @@ -5,6 +5,7 @@ // #include "MFOutputShifter.h" +#include "MFShiftData.h" #include "allocateMem.h" MFOutputShifter::MFOutputShifter() @@ -79,7 +80,7 @@ void MFOutputShifter::update() { digitalWrite(_latchPin, LOW); for (uint8_t i = _moduleCount; i > 0; i--) { - shiftOut(_dataPin, _clockPin, MSBFIRST, _lastState[i - 1]); // LSBFIRST, MSBFIRST, + shiftOutData(_dataPin, _clockPin, MSBFIRST, _lastState[i - 1]); // LSBFIRST, MSBFIRST, } digitalWrite(_latchPin, HIGH); } From 7d236548c4c0ddf278e515b0a03cb0d360f9ef95 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sat, 17 Aug 2024 08:18:55 +0200 Subject: [PATCH 05/34] fixed wrong reset file --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- .../Pico2/raspberrypi_pico2_generic.board.json | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 869ae12c..123b07fe 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -22,7 +22,7 @@ "FriendlyName": "Raspberry Pico2", "LatestFirmwareVersion": "2.5.1", "MobiFlightType": "MobiFlight RaspiPico2", - "ResetFirmwareFile": "reset.raspberry_pico_flash_nuke.uf2" + "ResetFirmwareFile": "reset.raspberry_pico2_flash_nuke.uf2" }, "ModuleLimits": { "MaxAnalogInputs": 3, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 810a23d2..5db16f01 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -22,16 +22,16 @@ "FriendlyName": "Raspberry Pico2 generic", "LatestFirmwareVersion": "2.5.1", "MobiFlightType": "MobiFlight RaspiPico2 generic", - "ResetFirmwareFile": "reset.raspberry_pico_flash_nuke.uf2" + "ResetFirmwareFile": "reset.raspberry_pico2_flash_nuke.uf2" }, "ModuleLimits": { - "MaxAnalogInputs": 3, + "MaxAnalogInputs": 7, "MaxInputShifters": 6, - "MaxButtons": 26, + "MaxButtons": 47, "MaxEncoders": 13, "MaxLcdI2C": 2, "MaxLedSegments": 6, - "MaxOutputs": 26, + "MaxOutputs": 47, "MaxServos": 8, "MaxShifters": 6, "MaxSteppers": 6, From e0d6204bf10157643fa3e1465ce941748b7c99ca Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sat, 17 Aug 2024 08:20:16 +0200 Subject: [PATCH 06/34] preliminary board definition to get every board compiled --- platformio.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index 4d030561..4dcfa184 100644 --- a/platformio.ini +++ b/platformio.ini @@ -149,7 +149,7 @@ extra_scripts = ; Build settings for the Raspberry Pico original [env:mobiflight_raspberrypico2] platform = https://github.com/maxgerhardt/platform-raspberrypi.git -board = pico2 +board = rpipico framework = arduino board_build.core = earlephilhower ; select new core board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. @@ -171,7 +171,7 @@ extra_scripts = ; Build settings for the Raspberry Pico original [env:mobiflight_raspberrypico2_generic] platform = https://github.com/maxgerhardt/platform-raspberrypi.git -board = pico2_generic +board = pimoroni_pga2040 framework = arduino board_build.core = earlephilhower ; select new core board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. From c7c32cd521b695274a468bec4f62876c64c6cb1f Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sat, 17 Aug 2024 08:20:31 +0200 Subject: [PATCH 07/34] better difines for the boards --- src/Config.cpp | 10 +++++----- src/MF_Modules/MFEEPROM.cpp | 4 ++-- src/MF_Modules/MFEEPROM.h | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Config.cpp b/src/Config.cpp index 2e9a936f..713c379e 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -9,7 +9,7 @@ #include "Button.h" #include "Encoder.h" #include "Output.h" -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if !defined(ARDUINO_ARCH_AVR) #include "ArduinoUniqueID.h" #endif @@ -69,7 +69,7 @@ const uint8_t MEM_OFFSET_CONFIG = MEM_OFFSET_NAME + MEM_LEN_NAME + MEM_LEN_SERIA #if defined(ARDUINO_ARCH_AVR) char serial[11] = MOBIFLIGHT_SERIAL; // 3 characters for "SN-",7 characters for "xyz-zyx" plus terminating NULL -#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#else char serial[3 + UniqueIDsize * 2 + 1] = MOBIFLIGHT_SERIAL; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL #endif char name[MEM_LEN_NAME] = MOBIFLIGHT_NAME; @@ -633,7 +633,7 @@ void generateRandomSerial() cmdMessenger.sendCmd(kDebug, F("Serial number generated")); } -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if !defined(ARDUINO_ARCH_AVR) void readUniqueSerial() { serial[0] = 'S'; @@ -667,7 +667,7 @@ void generateSerial(bool force) if (MFeeprom.read_byte(MEM_OFFSET_SERIAL) == 'I' && MFeeprom.read_byte(MEM_OFFSET_SERIAL + 1) == 'D') { #if defined(ARDUINO_ARCH_AVR) generateRandomSerial(); -#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#else readUniqueSerial(); #endif return; @@ -681,7 +681,7 @@ void generateSerial(bool force) // and getting the command to send the info's to the connector is always the same. // additional double check if it's really a new board, should reduce Jaimes problem generateRandomSerial(); -#elif defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#else // Read the uniqueID for Pico's and use it as serial number readUniqueSerial(); // mark this in the eeprom that a UniqueID is used on first start up for Pico's diff --git a/src/MF_Modules/MFEEPROM.cpp b/src/MF_Modules/MFEEPROM.cpp index 27c086fe..552535fb 100644 --- a/src/MF_Modules/MFEEPROM.cpp +++ b/src/MF_Modules/MFEEPROM.cpp @@ -12,7 +12,7 @@ MFEEPROM::MFEEPROM() {} void MFEEPROM::init(void) { -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if !defined(ARDUINO_ARCH_AVR) EEPROM.begin(4096); #endif _eepromLength = EEPROM.length(); @@ -33,7 +33,7 @@ bool MFEEPROM::write_byte(uint16_t adr, const uint8_t data) { if (adr >= _eepromLength) return false; EEPROM.write(adr, data); -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if !defined(ARDUINO_ARCH_AVR) EEPROM.commit(); #endif return true; diff --git a/src/MF_Modules/MFEEPROM.h b/src/MF_Modules/MFEEPROM.h index c99df82c..c1e51ed8 100644 --- a/src/MF_Modules/MFEEPROM.h +++ b/src/MF_Modules/MFEEPROM.h @@ -44,7 +44,7 @@ class MFEEPROM { if (adr + sizeof(T) > _eepromLength) return false; EEPROM.put(adr, t); -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if !defined(ARDUINO_ARCH_AVR) EEPROM.commit(); #endif return true; @@ -57,7 +57,7 @@ class MFEEPROM for (uint16_t i = 0; i < len; i++) { EEPROM.put(adr + i, t[i]); } -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if !defined(ARDUINO_ARCH_AVR) EEPROM.commit(); #endif return true; From c73ce6e226dcda8c477a7cc4b5f67b373e303f0d Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sun, 25 Aug 2024 09:26:23 +0200 Subject: [PATCH 08/34] for testing inject branch for Pico 2 from Earle Phil Hower --- platformio.ini | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/platformio.ini b/platformio.ini index 4dcfa184..897c1524 100644 --- a/platformio.ini +++ b/platformio.ini @@ -146,10 +146,13 @@ monitor_speed = 115200 extra_scripts = ${env.extra_scripts} -; Build settings for the Raspberry Pico original -[env:mobiflight_raspberrypico2] +; Build settings for the Raspberry Pic2o generic +[env:mobiflight_raspberrypico2_generic] platform = https://github.com/maxgerhardt/platform-raspberrypi.git -board = rpipico +platform_packages = + maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git#split + maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-d04e724.240125.zip +board = generic2 framework = arduino board_build.core = earlephilhower ; select new core board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. @@ -158,6 +161,8 @@ upload_protocol = mbed ; for debugging upoading can be changed to picopr ;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe build_flags = ${env.build_flags} + '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2 generic"' + '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2 generic"' -I./_Boards/RaspberryPi/Pico2 build_src_filter = ${env.build_src_filter} @@ -168,10 +173,14 @@ monitor_speed = 115200 extra_scripts = ${env.extra_scripts} + ; Build settings for the Raspberry Pico original -[env:mobiflight_raspberrypico2_generic] +[env:mobiflight_raspberrypico2] platform = https://github.com/maxgerhardt/platform-raspberrypi.git -board = pimoroni_pga2040 +platform_packages = + maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git#split + maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-d04e724.240125.zip +board = rpipico framework = arduino board_build.core = earlephilhower ; select new core board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. From 276eec1701025504c2b3da651b13625a132a4acb Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:27:36 +0200 Subject: [PATCH 09/34] Fixed wrong VID/PID for RP2350 boards --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 123b07fe..0830da07 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 64 }, - "HardwareIds": ["^VID_2E8A&PID_0005"], + "HardwareIds": ["^VID_2E8A&PID_000F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 5db16f01..55bd4979 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 64 }, - "HardwareIds": ["^VID_2E8A&PID_0005"], + "HardwareIds": ["^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, @@ -177,7 +177,6 @@ "isPWM": false, "Pin": 22 }, - , { "isAnalog": false, "isI2C": false, From efcab5beadc130ac1479ea03148a83c2532992fb Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Mon, 26 Aug 2024 16:24:26 +0200 Subject: [PATCH 10/34] RP2350 has same define as RP2040 --- src/MF_Output/MFOutput.cpp | 2 +- src/MF_Servo/MFServo.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MF_Output/MFOutput.cpp b/src/MF_Output/MFOutput.cpp index 362a57f2..6dbd3203 100644 --- a/src/MF_Output/MFOutput.cpp +++ b/src/MF_Output/MFOutput.cpp @@ -14,7 +14,7 @@ MFOutput::MFOutput() void MFOutput::attach(uint8_t pin) { _pin = pin; -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if defined(ARDUINO_ARCH_RP2040) pinMode(_pin, OUTPUT_12MA); #else pinMode(_pin, OUTPUT); diff --git a/src/MF_Servo/MFServo.cpp b/src/MF_Servo/MFServo.cpp index d77eb041..3c624d02 100644 --- a/src/MF_Servo/MFServo.cpp +++ b/src/MF_Servo/MFServo.cpp @@ -12,7 +12,7 @@ void MFServo::moveTo(int absolute) if (_targetPos != newValue) { _targetPos = newValue; if (!_initialized) { -#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARCH_RP2350) +#if defined(ARDUINO_ARCH_RP2040) _servo.attach(_pin, 544, 2400); #else _servo.attach(_pin); From 47050c80008cc9437dfe81ec0d3a6fd4ca0286a0 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Tue, 27 Aug 2024 10:20:57 +0200 Subject: [PATCH 11/34] increase message size --- _Boards/RaspberryPi/Pico/raspberrypi_pico.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json b/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json index 71df962f..b635285f 100644 --- a/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json +++ b/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json @@ -11,7 +11,7 @@ "EEPROMSize": 1496, "ExtraConnectionRetry": false, "ForceResetOnFirmwareUpdate": true, - "MessageSize": 64 + "MessageSize": 90 }, "HardwareIds": ["^VID_2E8A&PID_000A"], "Info": { diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 55bd4979..86431e84 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -11,7 +11,7 @@ "EEPROMSize": 1496, "ExtraConnectionRetry": false, "ForceResetOnFirmwareUpdate": true, - "MessageSize": 64 + "MessageSize": 90 }, "HardwareIds": ["^VID_2E8A&PID_F00F"], "Info": { From 0e647188407cbac9444bb13f141c235a0affe22f Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 28 Aug 2024 07:58:45 +0200 Subject: [PATCH 12/34] fixed wrong messagebuffer size --- _Boards/RaspberryPi/Pico/raspberrypi_pico.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json b/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json index b635285f..1b7a14e6 100644 --- a/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json +++ b/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json @@ -11,7 +11,7 @@ "EEPROMSize": 1496, "ExtraConnectionRetry": false, "ForceResetOnFirmwareUpdate": true, - "MessageSize": 90 + "MessageSize": 96 }, "HardwareIds": ["^VID_2E8A&PID_000A"], "Info": { diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 0830da07..ddbabf5b 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -11,7 +11,7 @@ "EEPROMSize": 1496, "ExtraConnectionRetry": false, "ForceResetOnFirmwareUpdate": true, - "MessageSize": 64 + "MessageSize": 96 }, "HardwareIds": ["^VID_2E8A&PID_000F"], "Info": { diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 86431e84..8ebf2076 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -11,7 +11,7 @@ "EEPROMSize": 1496, "ExtraConnectionRetry": false, "ForceResetOnFirmwareUpdate": true, - "MessageSize": 90 + "MessageSize": 96 }, "HardwareIds": ["^VID_2E8A&PID_F00F"], "Info": { From a58e1e67f3eff5710b66c35cf4c8f781b8b35026 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Thu, 29 Aug 2024 06:32:44 +0200 Subject: [PATCH 13/34] platform is released for Pico 2 support --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 897c1524..89f15ee4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -178,7 +178,7 @@ extra_scripts = [env:mobiflight_raspberrypico2] platform = https://github.com/maxgerhardt/platform-raspberrypi.git platform_packages = - maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git#split + maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-d04e724.240125.zip board = rpipico framework = arduino From e5de049ea15378dd9a4c7f4dde959cf6771e4364 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 4 Sep 2024 08:42:39 +0200 Subject: [PATCH 14/34] no platform packages required, fixed wronf type definition for Pico2 --- platformio.ini | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/platformio.ini b/platformio.ini index 89f15ee4..407f197d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -149,10 +149,7 @@ extra_scripts = ; Build settings for the Raspberry Pic2o generic [env:mobiflight_raspberrypico2_generic] platform = https://github.com/maxgerhardt/platform-raspberrypi.git -platform_packages = - maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git#split - maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-d04e724.240125.zip -board = generic2 +board = generic_rp2350 framework = arduino board_build.core = earlephilhower ; select new core board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. @@ -177,10 +174,7 @@ extra_scripts = ; Build settings for the Raspberry Pico original [env:mobiflight_raspberrypico2] platform = https://github.com/maxgerhardt/platform-raspberrypi.git -platform_packages = - maxgerhardt/framework-arduinopico@https://github.com/earlephilhower/arduino-pico.git - maxgerhardt/toolchain-pico@https://github.com/earlephilhower/pico-quick-toolchain/releases/download/1.3.1-a/x86_64-w64-mingw32.arm-none-eabi-d04e724.240125.zip -board = rpipico +board = rpipico2 framework = arduino board_build.core = earlephilhower ; select new core board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. @@ -189,8 +183,8 @@ upload_protocol = mbed ; for debugging upoading can be changed to picopr ;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe build_flags = ${env.build_flags} - '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2 generic"' - '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2 generic"' + '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2"' + '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2"' -I./_Boards/RaspberryPi/Pico2 build_src_filter = ${env.build_src_filter} From 369263e198dde7f9a64961f1329e85c076686330 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 11 Sep 2024 08:01:28 +0200 Subject: [PATCH 15/34] add generic B variant --- .../Pico2/raspberrypi_pico2.board.json | 2 +- .../raspberrypi_pico2B_generic.board.json | 332 ++++++++++++++++++ .../raspberrypi_pico2_generic.board.json | 2 +- platformio.ini | 25 ++ 4 files changed, 359 insertions(+), 2 deletions(-) create mode 100644 _Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index ddbabf5b..409e5552 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_000F"], + "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json new file mode 100644 index 00000000..94fd8064 --- /dev/null +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json @@ -0,0 +1,332 @@ +{ + "$schema": "./mfboard.schema.json", + "UsbDriveSettings": { + "VolumeLabel": "RPI-RP2", + "VerificationFileName": "INFO_UF2.TXT" + }, + "Connection": { + "ConnectionDelay": 1250, + "DelayAfterFirmwareUpdate": 1250, + "DtrEnable": true, + "EEPROMSize": 1496, + "ExtraConnectionRetry": false, + "ForceResetOnFirmwareUpdate": true, + "MessageSize": 96 + }, + "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "FirmwareBaseName": "mobiflight_raspberrypico2_generic", + "FirmwareExtension": "uf2", + "FriendlyName": "Raspberry Pico2 generic", + "LatestFirmwareVersion": "2.5.1", + "MobiFlightType": "MobiFlight RaspiPico2 generic", + "ResetFirmwareFile": "reset.raspberry_pico2_flash_nuke.uf2" + }, + "ModuleLimits": { + "MaxAnalogInputs": 7, + "MaxInputShifters": 6, + "MaxButtons": 47, + "MaxEncoders": 13, + "MaxLcdI2C": 2, + "MaxLedSegments": 6, + "MaxOutputs": 47, + "MaxServos": 8, + "MaxShifters": 6, + "MaxSteppers": 6, + "MaxInputMultiplexer": 6, + "MaxCustomDevices": 0 + }, + "Pins": [ + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 0 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 1 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 2 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 3 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": true, + "Pin": 4 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": true, + "Pin": 5 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 6 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 7 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 8 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 9 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 10 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 11 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 12 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 13 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 14 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 15 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 16 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 17 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 18 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 19 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 20 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 21 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 22 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 23 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 24 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 25 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 26 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 27 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 28 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 29 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 30 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 31 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 32 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 33 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 34 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 35 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 36 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 37 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 38 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 39 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A0", + "Pin": 40 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A1", + "Pin": 41 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A2", + "Pin": 42 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A3", + "Pin": 43 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A4", + "Pin": 44 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A5", + "Pin": 45 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A6", + "Pin": 46 + } + ] +} diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 8ebf2076..94fd8064 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/platformio.ini b/platformio.ini index 407f197d..12a41685 100644 --- a/platformio.ini +++ b/platformio.ini @@ -171,6 +171,31 @@ extra_scripts = ${env.extra_scripts} +; Build settings for the Raspberry Pic2o generic +[env:mobiflight_raspberrypico2B_generic] +platform = https://github.com/maxgerhardt/platform-raspberrypi.git +board = generic_rp2350B +framework = arduino +board_build.core = earlephilhower ; select new core +board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. +lib_ldf_mode = chain+ +upload_protocol = mbed ; for debugging upoading can be changed to picoprobe +;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe +build_flags = + ${env.build_flags} + '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2B generic"' + '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2B generic"' + -I./_Boards/RaspberryPi/Pico2 +build_src_filter = + ${env.build_src_filter} +lib_deps = + ${env.lib_deps} + ${env.custom_lib_deps_Pico} +monitor_speed = 115200 +extra_scripts = + ${env.extra_scripts} + + ; Build settings for the Raspberry Pico original [env:mobiflight_raspberrypico2] platform = https://github.com/maxgerhardt/platform-raspberrypi.git From e25cb4b6cc0166a02eee3b2886ceb045894a07ba Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:35:11 +0200 Subject: [PATCH 16/34] fixed wrong volumeLabel --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 409e5552..df06b9e7 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -1,7 +1,7 @@ { "$schema": "./mfboard.schema.json", "UsbDriveSettings": { - "VolumeLabel": "RPI-RP2", + "VolumeLabel": "RP2350", "VerificationFileName": "INFO_UF2.TXT" }, "Connection": { diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json index 94fd8064..d928709b 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json @@ -1,7 +1,7 @@ { "$schema": "./mfboard.schema.json", "UsbDriveSettings": { - "VolumeLabel": "RPI-RP2", + "VolumeLabel": "RP2350", "VerificationFileName": "INFO_UF2.TXT" }, "Connection": { diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 94fd8064..d928709b 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -1,7 +1,7 @@ { "$schema": "./mfboard.schema.json", "UsbDriveSettings": { - "VolumeLabel": "RPI-RP2", + "VolumeLabel": "RP2350", "VerificationFileName": "INFO_UF2.TXT" }, "Connection": { From dab43a7bc4f28f03d9e44026bb4182ce60933f84 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 13 Sep 2024 07:57:14 +0200 Subject: [PATCH 17/34] fixed naming in comment from .ini file --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 12a41685..e2e9f1da 100644 --- a/platformio.ini +++ b/platformio.ini @@ -196,7 +196,7 @@ extra_scripts = ${env.extra_scripts} -; Build settings for the Raspberry Pico original +; Build settings for the Raspberry Pico2 original [env:mobiflight_raspberrypico2] platform = https://github.com/maxgerhardt/platform-raspberrypi.git board = rpipico2 From 9994df56cde7e0eebc092cd271c8c0db07161bc8 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 13 Sep 2024 08:51:04 +0200 Subject: [PATCH 18/34] add preliminary VID/PID --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- .../RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json | 6 +++--- .../RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index df06b9e7..66e8ff9c 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json index d928709b..d7f7e908 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json @@ -13,13 +13,13 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, - "FirmwareBaseName": "mobiflight_raspberrypico2_generic", + "FirmwareBaseName": "mobiflight_raspberrypico2B_generic", "FirmwareExtension": "uf2", - "FriendlyName": "Raspberry Pico2 generic", + "FriendlyName": "Raspberry Pico2B generic", "LatestFirmwareVersion": "2.5.1", "MobiFlightType": "MobiFlight RaspiPico2 generic", "ResetFirmwareFile": "reset.raspberry_pico2_flash_nuke.uf2" diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index d928709b..a5724078 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, From 02a7a448d74d0f530872b5e7b5a8a17aefd539ee Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 13 Sep 2024 08:54:49 +0200 Subject: [PATCH 19/34] fixed wrong volume label for Pico2 --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 66e8ff9c..4857d074 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -1,7 +1,7 @@ { "$schema": "./mfboard.schema.json", "UsbDriveSettings": { - "VolumeLabel": "RP2350", + "VolumeLabel": "RPI-RP2", "VerificationFileName": "INFO_UF2.TXT" }, "Connection": { From a0dd2861e2c811c788e3b2dba86bda6b35885e5f Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 13 Sep 2024 08:59:48 +0200 Subject: [PATCH 20/34] revert PID/VID changes --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 4 ++-- .../RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json | 2 +- .../RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 4857d074..df06b9e7 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -1,7 +1,7 @@ { "$schema": "./mfboard.schema.json", "UsbDriveSettings": { - "VolumeLabel": "RPI-RP2", + "VolumeLabel": "RP2350", "VerificationFileName": "INFO_UF2.TXT" }, "Connection": { @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json index d7f7e908..817dc6d7 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index a5724078..d928709b 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, From d76217db612edd1214c5533664a3bca25dc85fda Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:02:54 +0200 Subject: [PATCH 21/34] add reset file for Pico2 --- .../Pico2/raspberrypi_pico2.board.json | 2 +- .../raspberrypi_pico2B_generic.board.json | 2 +- .../Pico2/raspberrypi_pico2_generic.board.json | 2 +- .../reset.arduino_raspberrypico2_1_0_2.uf2 | Bin 0 -> 113152 bytes 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 _Boards/RaspberryPi/Pico2/reset.arduino_raspberrypico2_1_0_2.uf2 diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index df06b9e7..b892d59d 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -22,7 +22,7 @@ "FriendlyName": "Raspberry Pico2", "LatestFirmwareVersion": "2.5.1", "MobiFlightType": "MobiFlight RaspiPico2", - "ResetFirmwareFile": "reset.raspberry_pico2_flash_nuke.uf2" + "ResetFirmwareFile": "reset.arduino_raspberrypico2_1_0_2.uf2" }, "ModuleLimits": { "MaxAnalogInputs": 3, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json index 817dc6d7..9fb230ce 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json @@ -22,7 +22,7 @@ "FriendlyName": "Raspberry Pico2B generic", "LatestFirmwareVersion": "2.5.1", "MobiFlightType": "MobiFlight RaspiPico2 generic", - "ResetFirmwareFile": "reset.raspberry_pico2_flash_nuke.uf2" + "ResetFirmwareFile": "reset.arduino_raspberrypico2_1_0_2.uf2" }, "ModuleLimits": { "MaxAnalogInputs": 7, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index d928709b..8ac4e253 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -22,7 +22,7 @@ "FriendlyName": "Raspberry Pico2 generic", "LatestFirmwareVersion": "2.5.1", "MobiFlightType": "MobiFlight RaspiPico2 generic", - "ResetFirmwareFile": "reset.raspberry_pico2_flash_nuke.uf2" + "ResetFirmwareFile": "reset.arduino_raspberrypico2_1_0_2.uf2" }, "ModuleLimits": { "MaxAnalogInputs": 7, diff --git a/_Boards/RaspberryPi/Pico2/reset.arduino_raspberrypico2_1_0_2.uf2 b/_Boards/RaspberryPi/Pico2/reset.arduino_raspberrypico2_1_0_2.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..2ee02c903dd6f3b04a584d9ff6df7be774a296c5 GIT binary patch literal 113152 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 literal 0 HcmV?d00001 From 65e387da6b007efa8c273ae15a94527495563469 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:18:15 +0200 Subject: [PATCH 22/34] again adding VID/PID, EEPROM clear takes them from Pico --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json | 2 +- _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index b892d59d..0188ca9e 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json index 9fb230ce..3f148d2c 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json index 8ac4e253..02abc54f 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, From d72ab1a570a8912835134725140e6274c04c094b Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:40:50 +0200 Subject: [PATCH 23/34] generic Pico2 variants moved to Template repo --- .../raspberrypi_pico2B_generic.board.json | 332 ------------------ .../raspberrypi_pico2_generic.board.json | 332 ------------------ platformio.ini | 50 --- 3 files changed, 714 deletions(-) delete mode 100644 _Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json delete mode 100644 _Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json deleted file mode 100644 index 3f148d2c..00000000 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2B_generic.board.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "$schema": "./mfboard.schema.json", - "UsbDriveSettings": { - "VolumeLabel": "RP2350", - "VerificationFileName": "INFO_UF2.TXT" - }, - "Connection": { - "ConnectionDelay": 1250, - "DelayAfterFirmwareUpdate": 1250, - "DtrEnable": true, - "EEPROMSize": 1496, - "ExtraConnectionRetry": false, - "ForceResetOnFirmwareUpdate": true, - "MessageSize": 96 - }, - "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], - "Info": { - "CanInstallFirmware": true, - "CanResetBoard": true, - "FirmwareBaseName": "mobiflight_raspberrypico2B_generic", - "FirmwareExtension": "uf2", - "FriendlyName": "Raspberry Pico2B generic", - "LatestFirmwareVersion": "2.5.1", - "MobiFlightType": "MobiFlight RaspiPico2 generic", - "ResetFirmwareFile": "reset.arduino_raspberrypico2_1_0_2.uf2" - }, - "ModuleLimits": { - "MaxAnalogInputs": 7, - "MaxInputShifters": 6, - "MaxButtons": 47, - "MaxEncoders": 13, - "MaxLcdI2C": 2, - "MaxLedSegments": 6, - "MaxOutputs": 47, - "MaxServos": 8, - "MaxShifters": 6, - "MaxSteppers": 6, - "MaxInputMultiplexer": 6, - "MaxCustomDevices": 0 - }, - "Pins": [ - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 0 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 1 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 2 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 3 - }, - { - "isAnalog": false, - "isI2C": true, - "isPWM": true, - "Pin": 4 - }, - { - "isAnalog": false, - "isI2C": true, - "isPWM": true, - "Pin": 5 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 6 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 7 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 8 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 9 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 10 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 11 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 12 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 13 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 14 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 15 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 16 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 17 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 18 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 19 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 20 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 21 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 22 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 23 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 24 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 25 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 26 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 27 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 28 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 29 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 30 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 31 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 32 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 33 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 34 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 35 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 36 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 37 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 38 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 39 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A0", - "Pin": 40 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A1", - "Pin": 41 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A2", - "Pin": 42 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A3", - "Pin": 43 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A4", - "Pin": 44 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A5", - "Pin": 45 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A6", - "Pin": 46 - } - ] -} diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json deleted file mode 100644 index 02abc54f..00000000 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2_generic.board.json +++ /dev/null @@ -1,332 +0,0 @@ -{ - "$schema": "./mfboard.schema.json", - "UsbDriveSettings": { - "VolumeLabel": "RP2350", - "VerificationFileName": "INFO_UF2.TXT" - }, - "Connection": { - "ConnectionDelay": 1250, - "DelayAfterFirmwareUpdate": 1250, - "DtrEnable": true, - "EEPROMSize": 1496, - "ExtraConnectionRetry": false, - "ForceResetOnFirmwareUpdate": true, - "MessageSize": 96 - }, - "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], - "Info": { - "CanInstallFirmware": true, - "CanResetBoard": true, - "FirmwareBaseName": "mobiflight_raspberrypico2_generic", - "FirmwareExtension": "uf2", - "FriendlyName": "Raspberry Pico2 generic", - "LatestFirmwareVersion": "2.5.1", - "MobiFlightType": "MobiFlight RaspiPico2 generic", - "ResetFirmwareFile": "reset.arduino_raspberrypico2_1_0_2.uf2" - }, - "ModuleLimits": { - "MaxAnalogInputs": 7, - "MaxInputShifters": 6, - "MaxButtons": 47, - "MaxEncoders": 13, - "MaxLcdI2C": 2, - "MaxLedSegments": 6, - "MaxOutputs": 47, - "MaxServos": 8, - "MaxShifters": 6, - "MaxSteppers": 6, - "MaxInputMultiplexer": 6, - "MaxCustomDevices": 0 - }, - "Pins": [ - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 0 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 1 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 2 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 3 - }, - { - "isAnalog": false, - "isI2C": true, - "isPWM": true, - "Pin": 4 - }, - { - "isAnalog": false, - "isI2C": true, - "isPWM": true, - "Pin": 5 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 6 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 7 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 8 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 9 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 10 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 11 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 12 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 13 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 14 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": true, - "Pin": 15 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 16 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 17 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 18 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 19 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 20 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 21 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 22 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 23 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 24 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 25 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 26 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 27 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 28 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 29 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 30 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 31 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 32 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 33 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 34 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 35 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 36 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 37 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 38 - }, - { - "isAnalog": false, - "isI2C": false, - "isPWM": false, - "Pin": 39 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A0", - "Pin": 40 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A1", - "Pin": 41 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A2", - "Pin": 42 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A3", - "Pin": 43 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A4", - "Pin": 44 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A5", - "Pin": 45 - }, - { - "isAnalog": true, - "isI2C": false, - "isPWM": false, - "Name": "A6", - "Pin": 46 - } - ] -} diff --git a/platformio.ini b/platformio.ini index e2e9f1da..4837fc5d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -146,56 +146,6 @@ monitor_speed = 115200 extra_scripts = ${env.extra_scripts} -; Build settings for the Raspberry Pic2o generic -[env:mobiflight_raspberrypico2_generic] -platform = https://github.com/maxgerhardt/platform-raspberrypi.git -board = generic_rp2350 -framework = arduino -board_build.core = earlephilhower ; select new core -board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. -lib_ldf_mode = chain+ -upload_protocol = mbed ; for debugging upoading can be changed to picoprobe -;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe -build_flags = - ${env.build_flags} - '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2 generic"' - '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2 generic"' - -I./_Boards/RaspberryPi/Pico2 -build_src_filter = - ${env.build_src_filter} -lib_deps = - ${env.lib_deps} - ${env.custom_lib_deps_Pico} -monitor_speed = 115200 -extra_scripts = - ${env.extra_scripts} - - -; Build settings for the Raspberry Pic2o generic -[env:mobiflight_raspberrypico2B_generic] -platform = https://github.com/maxgerhardt/platform-raspberrypi.git -board = generic_rp2350B -framework = arduino -board_build.core = earlephilhower ; select new core -board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mbyte. -lib_ldf_mode = chain+ -upload_protocol = mbed ; for debugging upoading can be changed to picoprobe -;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe -build_flags = - ${env.build_flags} - '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2B generic"' - '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2B generic"' - -I./_Boards/RaspberryPi/Pico2 -build_src_filter = - ${env.build_src_filter} -lib_deps = - ${env.lib_deps} - ${env.custom_lib_deps_Pico} -monitor_speed = 115200 -extra_scripts = - ${env.extra_scripts} - - ; Build settings for the Raspberry Pico2 original [env:mobiflight_raspberrypico2] platform = https://github.com/maxgerhardt/platform-raspberrypi.git From 2f830a5b14ec026ab2cc357e5c6b763154b2e8b9 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:15:12 +0200 Subject: [PATCH 24/34] UniqueID not for Pico2 for now --- src/Config.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Config.cpp b/src/Config.cpp index 43b32b4e..d9e823d6 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -67,7 +67,7 @@ const uint8_t MEM_OFFSET_SERIAL = MEM_OFFSET_NAME + MEM_LEN_NAME; const uint8_t MEM_LEN_SERIAL = 11; const uint8_t MEM_OFFSET_CONFIG = MEM_OFFSET_NAME + MEM_LEN_NAME + MEM_LEN_SERIAL; -#if defined(ARDUINO_ARCH_AVR) +#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) char serial[11]; // 3 characters for "SN-",7 characters for "xyz-zyx" plus terminating NULL #else char serial[3 + UniqueIDsize * 2 + 1]; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL @@ -623,7 +623,7 @@ bool getStatusConfig() // ************************************************************ // Generate a serial number only for AVR's -#if defined(ARDUINO_ARCH_AVR) +#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) void generateRandomSerial() { // To have not always the same starting point for the random generator, millis() are @@ -655,7 +655,7 @@ void generateRandomSerial() } #endif -#if !defined(ARDUINO_ARCH_AVR) +#if !defined(ARDUINO_ARCH_AVR) && !defined(PICO_RP2350) void readUniqueSerial() { serial[0] = 'S'; @@ -675,7 +675,7 @@ void generateSerial(bool force) if (force) { // A serial number is forced to generate // generate a serial number acc. the old style only for AVR's -#if defined(ARDUINO_ARCH_AVR) +#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) generateRandomSerial(); #else // For other boards always the UniqueID is used. @@ -696,7 +696,7 @@ void generateSerial(bool force) return; } -#if defined(ARDUINO_ARCH_AVR) +#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) // Coming here no serial number is available (so it's the first start up of an AVR board) // or a uniqueID is already generated and saved to the eeprom // AVR's are forced to roll back to "old style" serial number From 9309de6ec6ca58b6961af9cc20612f9501399140 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sat, 5 Oct 2024 17:39:02 +0200 Subject: [PATCH 25/34] own implementation of getting UniqueID --- platformio.ini | 1 - src/Config.cpp | 24 ++++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/platformio.ini b/platformio.ini index 4837fc5d..4fe4baf4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -25,7 +25,6 @@ lib_deps = custom_lib_deps_Atmel = arduino-libraries/Servo @ 1.1.8 custom_lib_deps_Pico = - ricaun/ArduinoUniqueID @ ^1.3.0 build_flags = -DMF_REDUCE_FUNCT_LEDCONTROL -DMAXCALLBACKS=35 diff --git a/src/Config.cpp b/src/Config.cpp index ef9d7695..b38dd136 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -9,7 +9,7 @@ #include "Button.h" #include "Encoder.h" #include "Output.h" -#if !defined(ARDUINO_ARCH_AVR) +#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_RP2040) #include "ArduinoUniqueID.h" #endif @@ -67,8 +67,11 @@ const uint8_t MEM_OFFSET_SERIAL = MEM_OFFSET_NAME + MEM_LEN_NAME; const uint8_t MEM_LEN_SERIAL = 11; const uint8_t MEM_OFFSET_CONFIG = MEM_OFFSET_NAME + MEM_LEN_NAME + MEM_LEN_SERIAL; -#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) +#if defined(ARDUINO_ARCH_AVR) char serial[11]; // 3 characters for "SN-",7 characters for "xyz-zyx" plus terminating NULL +#elif defined(ARDUINO_ARCH_RP2040) +#define UniqueIDsize 8 +char serial[3 + UniqueIDsize * 2 + 1]; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL #else char serial[3 + UniqueIDsize * 2 + 1]; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL #endif @@ -633,7 +636,7 @@ bool getStatusConfig() // ************************************************************ // Generate a serial number only for AVR's -#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) +#if defined(ARDUINO_ARCH_AVR) void generateRandomSerial() { // To have not always the same starting point for the random generator, millis() are @@ -665,9 +668,18 @@ void generateRandomSerial() } #endif -#if !defined(ARDUINO_ARCH_AVR) && !defined(PICO_RP2350) +#if !defined(ARDUINO_ARCH_AVR) void readUniqueSerial() { +#if defined(ARDUINO_ARCH_RP2040) + uint8_t UniqueID[UniqueIDsize]; + pico_unique_board_id_t sn; + pico_get_unique_board_id(&sn); + for (size_t i = 0; i < UniqueIDsize; i++) + { + UniqueID[i] = sn.id[i]; + } +#endif serial[0] = 'S'; serial[1] = 'N'; serial[2] = '-'; @@ -685,7 +697,7 @@ void generateSerial(bool force) if (force) { // A serial number is forced to generate // generate a serial number acc. the old style only for AVR's -#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) +#if defined(ARDUINO_ARCH_AVR) generateRandomSerial(); #else // For other boards always the UniqueID is used. @@ -706,7 +718,7 @@ void generateSerial(bool force) return; } -#if defined(ARDUINO_ARCH_AVR) || defined(PICO_RP2350) +#if defined(ARDUINO_ARCH_AVR) // Coming here no serial number is available (so it's the first start up of an AVR board) // or a uniqueID is already generated and saved to the eeprom // AVR's are forced to roll back to "old style" serial number From 3ca6c67e50fb1936c71e4b1134c1e015a721b597 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:02:59 +0200 Subject: [PATCH 26/34] don't use UniquieID only for Pico2 with PSRAM --- platformio.ini | 1 + src/Config.cpp | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/platformio.ini b/platformio.ini index 4fe4baf4..4837fc5d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -25,6 +25,7 @@ lib_deps = custom_lib_deps_Atmel = arduino-libraries/Servo @ 1.1.8 custom_lib_deps_Pico = + ricaun/ArduinoUniqueID @ ^1.3.0 build_flags = -DMF_REDUCE_FUNCT_LEDCONTROL -DMAXCALLBACKS=35 diff --git a/src/Config.cpp b/src/Config.cpp index b38dd136..523ab2a8 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -9,7 +9,7 @@ #include "Button.h" #include "Encoder.h" #include "Output.h" -#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_RP2040) +#if !defined(ARDUINO_ARCH_AVR) && !defined(RP2350_PSRAM_CS) #include "ArduinoUniqueID.h" #endif @@ -69,7 +69,7 @@ const uint8_t MEM_OFFSET_CONFIG = MEM_OFFSET_NAME + MEM_LEN_NAME + MEM_LEN_SERIA #if defined(ARDUINO_ARCH_AVR) char serial[11]; // 3 characters for "SN-",7 characters for "xyz-zyx" plus terminating NULL -#elif defined(ARDUINO_ARCH_RP2040) +#elif defined(RP2350_PSRAM_CS) #define UniqueIDsize 8 char serial[3 + UniqueIDsize * 2 + 1]; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL #else @@ -671,7 +671,7 @@ void generateRandomSerial() #if !defined(ARDUINO_ARCH_AVR) void readUniqueSerial() { -#if defined(ARDUINO_ARCH_RP2040) +#if defined(RP2350_PSRAM_CS) uint8_t UniqueID[UniqueIDsize]; pico_unique_board_id_t sn; pico_get_unique_board_id(&sn); From d9139cbdcaa289d2750f33991487955a148a07fd Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sun, 20 Oct 2024 17:12:01 +0200 Subject: [PATCH 27/34] correct PID for pico2 via setting in platformio.ini file --- _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json | 2 +- platformio.ini | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json index 0188ca9e..ad64a6ba 100644 --- a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json +++ b/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json @@ -13,7 +13,7 @@ "ForceResetOnFirmwareUpdate": true, "MessageSize": 96 }, - "HardwareIds": ["^VID_2E8A&PID_000A","^VID_2E8A&PID_F00A","^VID_2E8A&PID_F00F"], + "HardwareIds": ["^VID_2E8A&PID_F00A"], "Info": { "CanInstallFirmware": true, "CanResetBoard": true, diff --git a/platformio.ini b/platformio.ini index 4837fc5d..44419cb1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -156,6 +156,10 @@ board_build.filesystem_size = 0M ; configure filesystem size. Default 0 Mby lib_ldf_mode = chain+ upload_protocol = mbed ; for debugging upoading can be changed to picoprobe ;debug_tool = picoprobe ; and uncomment this for debugging w/ picoprobe +;board_build.arduino.earlephilhower.usb_manufacturer = Custom Manufacturer +;board_build.arduino.earlephilhower.usb_product = Ultra Cool Product +;board_build.arduino.earlephilhower.usb_vid = 0x2E8A +board_build.arduino.earlephilhower.usb_pid = 0xF00A build_flags = ${env.build_flags} '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2"' From a3ffa1ea5a3d0c0d8682c3ce47fcd1a55835290d Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Mon, 20 Jan 2025 14:00:29 +0100 Subject: [PATCH 28/34] use board file from Pico --- .../raspberrypi_pico2.board.json | 0 _Boards/RaspberryPi/Pico2/MFBoards.h | 52 ------------------ .../reset.arduino_raspberrypico2_1_0_2.uf2 | Bin 113152 -> 0 bytes platformio.ini | 5 +- 4 files changed, 4 insertions(+), 53 deletions(-) rename _Boards/RaspberryPi/{Pico2 => Pico}/raspberrypi_pico2.board.json (100%) delete mode 100644 _Boards/RaspberryPi/Pico2/MFBoards.h delete mode 100644 _Boards/RaspberryPi/Pico2/reset.arduino_raspberrypico2_1_0_2.uf2 diff --git a/_Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json b/_Boards/RaspberryPi/Pico/raspberrypi_pico2.board.json similarity index 100% rename from _Boards/RaspberryPi/Pico2/raspberrypi_pico2.board.json rename to _Boards/RaspberryPi/Pico/raspberrypi_pico2.board.json diff --git a/_Boards/RaspberryPi/Pico2/MFBoards.h b/_Boards/RaspberryPi/Pico2/MFBoards.h deleted file mode 100644 index 31e4e258..00000000 --- a/_Boards/RaspberryPi/Pico2/MFBoards.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef MFBoardMicro_h -#define MFBoardMicro_h - -#ifndef MF_SEGMENT_SUPPORT -#define MF_SEGMENT_SUPPORT 1 -#endif -#ifndef MF_LCD_SUPPORT -#define MF_LCD_SUPPORT 1 -#endif -#ifndef MF_STEPPER_SUPPORT -#define MF_STEPPER_SUPPORT 1 -#endif -#ifndef MF_SERVO_SUPPORT -#define MF_SERVO_SUPPORT 1 -#endif -#ifndef MF_ANALOG_SUPPORT -#define MF_ANALOG_SUPPORT 1 -#endif -#ifndef MF_OUTPUT_SHIFTER_SUPPORT -#define MF_OUTPUT_SHIFTER_SUPPORT 1 -#endif -#ifndef MF_INPUT_SHIFTER_SUPPORT -#define MF_INPUT_SHIFTER_SUPPORT 1 -#endif -#ifndef MF_MUX_SUPPORT -#define MF_MUX_SUPPORT 1 -#endif -#ifndef MF_DIGIN_MUX_SUPPORT -#define MF_MUX_SUPPORT 1 -#define MF_DIGIN_MUX_SUPPORT 1 -#endif - -#ifndef MOBIFLIGHT_TYPE -#define MOBIFLIGHT_TYPE "MobiFlight RaspiPico2" -#endif -#ifndef MOBIFLIGHT_SERIAL -#define MOBIFLIGHT_SERIAL "0987654321" -#endif -#ifndef MOBIFLIGHT_NAME -#define MOBIFLIGHT_NAME "MobiFlight RaspiPico2" -#endif -#ifndef MEMLEN_CONFIG -#define MEMLEN_CONFIG 1496 // MUST be less than EEPROM_SIZE!! MEM_OFFSET_CONFIG + MEM_LEN_CONFIG <= EEPROM_SIZE, see: eeprom_write_block (MEM_OFFSET_CONFIG, configBuffer, MEM_LEN_CONFIG); -#endif -#ifndef MEMLEN_NAMES_BUFFER -#define MEMLEN_NAMES_BUFFER 1000 // max. size for configBuffer, contains only names from inputs -#endif -#ifndef MF_MAX_DEVICEMEM -#define MF_MAX_DEVICEMEM 1000 // max. memory size for devices -#endif - -#endif diff --git a/_Boards/RaspberryPi/Pico2/reset.arduino_raspberrypico2_1_0_2.uf2 b/_Boards/RaspberryPi/Pico2/reset.arduino_raspberrypico2_1_0_2.uf2 deleted file mode 100644 index 2ee02c903dd6f3b04a584d9ff6df7be774a296c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113152 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 diff --git a/platformio.ini b/platformio.ini index 44419cb1..9f1b585d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -164,7 +164,10 @@ build_flags = ${env.build_flags} '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2"' '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2"' - -I./_Boards/RaspberryPi/Pico2 + -DMEMLEN_CONFIG=1496 ; MUST be less than EEPROM_SIZE!! MEM_OFFSET_CONFIG + MEM_LEN_CONFIG <= EEPROM_SIZE, see: eeprom_write_block (MEM_OFFSET_CONFIG, configBuffer, MEM_LEN_CONFIG);-D#define MEMLEN_NAMES_BUFFER 1000 // max. size for configBuffer, contains only names from inputs + -DMEMLEN_NAMES_BUFFER=1000 ; max. size for configBuffer, contains only names from inputs + -DMF_MAX_DEVICEMEM=1000 ; max. memory size for devices + -I./_Boards/RaspberryPi/Pico build_src_filter = ${env.build_src_filter} lib_deps = From d73663ed894d43a38b1f71a9d7fcef7f113a8076 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Thu, 30 Oct 2025 08:37:38 +0100 Subject: [PATCH 29/34] add Pico2 reset file, move Pico2 json file to new folder structure --- .../Pico => }/raspberrypi_pico2.board.json | 2 +- _Boards/reset.raspberry_pico2_1_0_2.uf2 | Bin 0 -> 150528 bytes 2 files changed, 1 insertion(+), 1 deletion(-) rename _Boards/{RaspberryPi/Pico => }/raspberrypi_pico2.board.json (98%) create mode 100644 _Boards/reset.raspberry_pico2_1_0_2.uf2 diff --git a/_Boards/RaspberryPi/Pico/raspberrypi_pico2.board.json b/_Boards/raspberrypi_pico2.board.json similarity index 98% rename from _Boards/RaspberryPi/Pico/raspberrypi_pico2.board.json rename to _Boards/raspberrypi_pico2.board.json index ad64a6ba..96ec3e0a 100644 --- a/_Boards/RaspberryPi/Pico/raspberrypi_pico2.board.json +++ b/_Boards/raspberrypi_pico2.board.json @@ -20,7 +20,7 @@ "FirmwareBaseName": "mobiflight_raspberrypico2", "FirmwareExtension": "uf2", "FriendlyName": "Raspberry Pico2", - "LatestFirmwareVersion": "2.5.1", + "LatestFirmwareVersion": "0.0.1", "MobiFlightType": "MobiFlight RaspiPico2", "ResetFirmwareFile": "reset.arduino_raspberrypico2_1_0_2.uf2" }, diff --git a/_Boards/reset.raspberry_pico2_1_0_2.uf2 b/_Boards/reset.raspberry_pico2_1_0_2.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..d6bf1b4eaf61739666e57e324378174345d0daef GIT binary patch literal 150528 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 literal 0 HcmV?d00001 From 1dd3193160ad4f9db54737087c58ce3c270c4dbb Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Thu, 30 Oct 2025 08:54:58 +0100 Subject: [PATCH 30/34] add picture for Pico2 --- _Boards/raspberry_pico2.png | Bin 0 -> 54227 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 _Boards/raspberry_pico2.png diff --git a/_Boards/raspberry_pico2.png b/_Boards/raspberry_pico2.png new file mode 100644 index 0000000000000000000000000000000000000000..69f7d1e3e3de1aa441d236357865d1c00267e180 GIT binary patch literal 54227 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 QJOBUy07*qoM6N<$f-?flod5s; literal 0 HcmV?d00001 From 29e260fabcb835e69bd958155497d28707a573cb Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sat, 24 Jan 2026 08:40:35 +0100 Subject: [PATCH 31/34] read SN for Pico2 from chip and not flash --- platformio.ini | 1 - src/Config.cpp | 41 +++++++++++++++-------------------------- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/platformio.ini b/platformio.ini index 203cb022..059f1063 100644 --- a/platformio.ini +++ b/platformio.ini @@ -25,7 +25,6 @@ lib_deps = custom_lib_deps_Atmel = arduino-libraries/Servo @ 1.1.8 custom_lib_deps_Pico = - ricaun/ArduinoUniqueID @ ^1.3.0 build_flags = -DMF_REDUCE_FUNCT_LEDCONTROL -DMAXCALLBACKS=35 diff --git a/src/Config.cpp b/src/Config.cpp index 3cd17328..127e77ef 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -11,7 +11,7 @@ #include "Button.h" #include "Encoder.h" #include "Output.h" -#if !defined(ARDUINO_ARCH_AVR) && !defined(RP2350_PSRAM_CS) +#if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_RP2040) #include "ArduinoUniqueID.h" #endif @@ -69,13 +69,13 @@ const uint8_t MEM_OFFSET_SERIAL = MEM_OFFSET_NAME + MEM_LEN_NAME; const uint8_t MEM_LEN_SERIAL = 11; const uint8_t MEM_OFFSET_CONFIG = MEM_OFFSET_NAME + MEM_LEN_NAME + MEM_LEN_SERIAL; +// 3 characters for "SN-", n characters for uniqueID plus terminating NULL #ifdef ARDUINO_ARCH_AVR -char serial[11]; // 3 characters for "SN-",7 characters for "xyz-zyx" plus terminating NULL -#elif defined(RP2350_PSRAM_CS) -#define UniqueIDsize 8 -char serial[3 + UniqueIDsize * 2 + 1]; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL +char serial[11] = {0}; +#elif ARDUINO_ARCH_RP2040 +char serial[3 + (PICO_UNIQUE_BOARD_ID_SIZE_BYTES * 2) + 1] = {0}; #else -char serial[3 + UniqueIDsize * 2 + 1]; // 3 characters for "SN-", UniqueID as HEX String, terminating NULL +char serial[3 + UniqueIDsize * 2 + 1] = {0}; #endif char name[MEM_LEN_NAME] = MOBIFLIGHT_NAME; const int MEM_LEN_CONFIG = MEMLEN_CONFIG; @@ -657,11 +657,7 @@ void generateRandomSerial() // and getting the command to send the info's to the connector is always the same. // additional double check if it's really a new board, should reduce Jaimes problem randomSeed(millis()); - serial[0] = 'S'; - serial[1] = 'N'; - serial[2] = '-'; - serial[6] = '-'; - serial[10] = 0x00; + strcpy(serial, "SN-000-000"); uint16_t randomSerial = random(4095); for (uint8_t i = 3; i < 6; i++) { serial[i] = (randomSerial & 0x000F) + 48; // convert from 4bit to HEX string @@ -679,23 +675,16 @@ void generateRandomSerial() cmdMessenger.sendCmd(kDebug, F("Serial number generated")); #endif } -#endif - -#if !defined(ARDUINO_ARCH_AVR) +#elif ARDUINO_ARCH_RP2040 void readUniqueSerial() { -#if defined(RP2350_PSRAM_CS) - uint8_t UniqueID[UniqueIDsize]; - pico_unique_board_id_t sn; - pico_get_unique_board_id(&sn); - for (size_t i = 0; i < UniqueIDsize; i++) - { - UniqueID[i] = sn.id[i]; - } -#endif - serial[0] = 'S'; - serial[1] = 'N'; - serial[2] = '-'; + strcpy(serial, "SN-"); + pico_get_unique_board_id_string(serial + 3, sizeof(serial) - 3); +} +#else +void readUniqueSerial() +{ + strcpy(serial, "SN-"); for (size_t i = 0; i < UniqueIDsize; i++) { serial[3 + i * 2] = (UniqueID[i] >> 4) + 48; if (serial[3 + i * 2] >= 58) serial[3 + i * 2] += 7; From e7b92d0c7e3d442046cedfe06017693c481dccef Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 30 Jan 2026 06:31:11 +0100 Subject: [PATCH 32/34] Update src/MF_Modules/MFShiftData.cpp re-formatting acc. copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/MF_Modules/MFShiftData.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/MF_Modules/MFShiftData.cpp b/src/MF_Modules/MFShiftData.cpp index 9c06d37b..53799af6 100644 --- a/src/MF_Modules/MFShiftData.cpp +++ b/src/MF_Modules/MFShiftData.cpp @@ -21,21 +21,21 @@ uint8_t shiftInData(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) void shiftOutData(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) { - uint8_t i; + uint8_t i; - for (i = 0; i < 8; i++) { - if (bitOrder == LSBFIRST) { - digitalWrite(dataPin, val & 1); - val >>= 1; - } else { - digitalWrite(dataPin, (val & 128) != 0); - val <<= 1; - } - - digitalWrite(clockPin, HIGH); - digitalWrite(clockPin, LOW); + for (i = 0; i < 8; i++) { + if (bitOrder == LSBFIRST) { + digitalWrite(dataPin, val & 1); + val >>= 1; + } else { + digitalWrite(dataPin, (val & 128) != 0); + val <<= 1; + } + + digitalWrite(clockPin, HIGH); + digitalWrite(clockPin, LOW); #if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_RP2040) delayMicroseconds(1); #endif - } + } } From a4de5188b845119073044a31baaaefcf6680e2ed Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Fri, 30 Jan 2026 06:35:07 +0100 Subject: [PATCH 33/34] comment shortened acc. copilot --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 059f1063..e77f784b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -205,7 +205,7 @@ build_flags = ${env.build_flags} '-DMOBIFLIGHT_TYPE="MobiFlight RaspiPico2"' '-DMOBIFLIGHT_NAME="MobiFlight RaspiPico2"' - -DMEMLEN_CONFIG=1496 ; MUST be less than EEPROM_SIZE!! MEM_OFFSET_CONFIG + MEM_LEN_CONFIG <= EEPROM_SIZE, see: eeprom_write_block (MEM_OFFSET_CONFIG, configBuffer, MEM_LEN_CONFIG);-D#define MEMLEN_NAMES_BUFFER 1000 // max. size for configBuffer, contains only names from inputs + -DMEMLEN_CONFIG=1496 ; max. size for config which wil be stored in EEPROM -DMEMLEN_NAMES_BUFFER=1000 ; max. size for configBuffer, contains only names from inputs -DMF_MAX_DEVICEMEM=1000 ; max. memory size for devices -I./_Boards/RaspberryPi/Pico From e74f838be5d85d252fd2c879b8eaecee25e3fe87 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Mon, 6 Apr 2026 06:40:14 +0200 Subject: [PATCH 34/34] changes according copilot --- _Boards/raspberrypi_pico2.board.json | 2 +- src/Config.cpp | 3 +++ src/MF_OutputShifter/MFOutputShifter.cpp | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/_Boards/raspberrypi_pico2.board.json b/_Boards/raspberrypi_pico2.board.json index 96ec3e0a..08c444d0 100644 --- a/_Boards/raspberrypi_pico2.board.json +++ b/_Boards/raspberrypi_pico2.board.json @@ -22,7 +22,7 @@ "FriendlyName": "Raspberry Pico2", "LatestFirmwareVersion": "0.0.1", "MobiFlightType": "MobiFlight RaspiPico2", - "ResetFirmwareFile": "reset.arduino_raspberrypico2_1_0_2.uf2" + "ResetFirmwareFile": "reset.raspberry_pico2_1_0_2.uf2" }, "ModuleLimits": { "MaxAnalogInputs": 3, diff --git a/src/Config.cpp b/src/Config.cpp index 127e77ef..670ca2ee 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -14,6 +14,9 @@ #if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_RP2040) #include "ArduinoUniqueID.h" #endif +#ifdef ARDUINO_ARCH_RP2040 +#include +#endif #ifdef MF_ANALOG_SUPPORT #include "Analog.h" diff --git a/src/MF_OutputShifter/MFOutputShifter.cpp b/src/MF_OutputShifter/MFOutputShifter.cpp index e1db1ed4..b7e2af7f 100644 --- a/src/MF_OutputShifter/MFOutputShifter.cpp +++ b/src/MF_OutputShifter/MFOutputShifter.cpp @@ -90,7 +90,7 @@ void MFOutputShifter::powerSavingMode(bool state) if (state) { digitalWrite(_latchPin, LOW); for (uint8_t i = _moduleCount; i > 0; i--) { - shiftOut(_dataPin, _clockPin, MSBFIRST, 0xFF * MF_LOW); + shiftOutData(_dataPin, _clockPin, MSBFIRST, 0xFF * MF_LOW); } digitalWrite(_latchPin, HIGH); } else {