From e8e06680aac325d2d55b41cb6b5786e1a452a73a Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sun, 14 Jan 2024 18:04:47 +0100 Subject: [PATCH 01/19] don save 0x00 to config, check for 0xFF before generating new serial --- src/Config.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Config.cpp b/src/Config.cpp index 69ca9e7a..88c812b2 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -87,6 +87,8 @@ bool readConfigLength() uint16_t length = MFeeprom.get_length(); configLength = 0; + if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) + return; while (MFeeprom.read_byte(addreeprom++) != 0x00) { configLength++; if (addreeprom > length) { @@ -619,13 +621,17 @@ void generateSerial(bool force) MFeeprom.read_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); return; } -#if defined(ARDUINO_ARCH_RP2040) + // A uniqueID is already generated and saved to the eeprom 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) readUniqueSerial(); +#endif return; } -#endif + // Coming here no UniqueID and no serial number is available, so it's the first start up of a board #if defined(ARDUINO_ARCH_AVR) @@ -633,16 +639,16 @@ void generateSerial(bool force) // To have not always the same starting point for the random generator, millis() are // used as starting point. It is very unlikely that the time between flashing the firmware // and getting the command to send the info's to the connector is always the same. - generateRandomSerial(); + // additional double check if it's really a new board, should reduce Jaimes problem + if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) { + generateRandomSerial(); + } #elif defined(ARDUINO_ARCH_RP2040) // 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 MFeeprom.write_block(MEM_OFFSET_SERIAL, "ID", 2); #endif - // Set first byte of config to 0x00 to ensure empty config on 1st start up - // Otherwise the complete length of the config will be send with 0xFF (empty EEPROM) - MFeeprom.write_byte(MEM_OFFSET_CONFIG, 0x00); } void OnGenNewSerial() From 89312e0f2c313b1568f43f4df325950e6d4e2711 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Sun, 14 Jan 2024 20:02:23 +0100 Subject: [PATCH 02/19] fixed missing return parameter --- src/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.cpp b/src/Config.cpp index 88c812b2..e23fde75 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -88,7 +88,7 @@ bool readConfigLength() configLength = 0; if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) - return; + return false; while (MFeeprom.read_byte(addreeprom++) != 0x00) { configLength++; if (addreeprom > length) { From ee4d6e017b6cc926019d8cce2ddb0b49ec1f49a4 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 12:53:43 +0100 Subject: [PATCH 03/19] do not check for 0xFF for generating serial number --- src/Config.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Config.cpp b/src/Config.cpp index e23fde75..d36dbca6 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -640,15 +640,16 @@ void generateSerial(bool force) // used as starting point. It is very unlikely that the time between flashing the firmware // 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 - if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) { - generateRandomSerial(); - } + generateRandomSerial(); #elif defined(ARDUINO_ARCH_RP2040) // 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 MFeeprom.write_block(MEM_OFFSET_SERIAL, "ID", 2); #endif + if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) { + MFeeprom.write_block(MEM_OFFSET_CONFIG, 0x00); + } } void OnGenNewSerial() From bdef94037edf156e0e1c2a07ca5a75837cbe3764 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 12:56:46 +0100 Subject: [PATCH 04/19] send kInfo on generating serial --- src/Config.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Config.cpp b/src/Config.cpp index d36dbca6..2a4e87b6 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -590,6 +590,7 @@ void generateRandomSerial() randomSerial >>= 4; } MFeeprom.write_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); + cmdMessenger.sendCmd(kInfo, F("Serial number generated")); } #if defined(ARDUINO_ARCH_RP2040) From c56df66368ece00c580ab026ff49d10247268c2d Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 12:59:23 +0100 Subject: [PATCH 05/19] send kDebug instead of kInfo on generating serial --- src/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.cpp b/src/Config.cpp index 2a4e87b6..1826fb13 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -590,7 +590,7 @@ void generateRandomSerial() randomSerial >>= 4; } MFeeprom.write_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); - cmdMessenger.sendCmd(kInfo, F("Serial number generated")); + cmdMessenger.sendCmd(kDebug, F("Serial number generated")); } #if defined(ARDUINO_ARCH_RP2040) From e5ffd8e3caf9e59c07eaae0913d70933fb687660 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 18:23:02 +0100 Subject: [PATCH 06/19] create zip folder, add reset and json files --- .gitignore | 2 + CustomDevices | 2 +- .../Atmel/Board_Mega/arduino_mega.board.json | 485 ++++++++++++++++++ .../Board_Mega/reset.arduino_mega_1_0_2.hex | 179 +++++++ .../Atmel/Board_Nano/arduino_nano.board.json | 184 +++++++ .../Board_Nano/reset.arduino_uno_1_0_2.hex | 134 +++++ .../Board_ProMicro/arduino_micro.board.json | 162 ++++++ .../reset.arduino_promicro_1_0_2.hex | 262 ++++++++++ .../Atmel/Board_Uno/arduino_uno.board.json | 169 ++++++ .../Board_Uno/reset.arduino_uno_1_0_2.hex | 134 +++++ .../Pico/raspberrypi_pico.board.json | 202 ++++++++ .../Pico/reset.raspberry_pico_flash_nuke.uf2 | Bin 0 -> 25600 bytes get_version.py | 63 ++- 13 files changed, 1976 insertions(+), 2 deletions(-) create mode 100644 _Boards/Atmel/Board_Mega/arduino_mega.board.json create mode 100644 _Boards/Atmel/Board_Mega/reset.arduino_mega_1_0_2.hex create mode 100644 _Boards/Atmel/Board_Nano/arduino_nano.board.json create mode 100644 _Boards/Atmel/Board_Nano/reset.arduino_uno_1_0_2.hex create mode 100644 _Boards/Atmel/Board_ProMicro/arduino_micro.board.json create mode 100644 _Boards/Atmel/Board_ProMicro/reset.arduino_promicro_1_0_2.hex create mode 100644 _Boards/Atmel/Board_Uno/arduino_uno.board.json create mode 100644 _Boards/Atmel/Board_Uno/reset.arduino_uno_1_0_2.hex create mode 100644 _Boards/RaspberryPi/Pico/raspberrypi_pico.board.json create mode 100644 _Boards/RaspberryPi/Pico/reset.raspberry_pico_flash_nuke.uf2 diff --git a/.gitignore b/.gitignore index 5ffa057a..7ee3531e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ .vscode/ipch .vscode/arduino.json .CustomDevices +_build +_dist diff --git a/CustomDevices b/CustomDevices index 8d63b403..cea02ee7 160000 --- a/CustomDevices +++ b/CustomDevices @@ -1 +1 @@ -Subproject commit 8d63b403cc4a4cc8915ca6b65e0af8239b8cd4a1 +Subproject commit cea02ee70bd0a0d39210cf7d372b53169c32d141 diff --git a/_Boards/Atmel/Board_Mega/arduino_mega.board.json b/_Boards/Atmel/Board_Mega/arduino_mega.board.json new file mode 100644 index 00000000..66cfe820 --- /dev/null +++ b/_Boards/Atmel/Board_Mega/arduino_mega.board.json @@ -0,0 +1,485 @@ +{ + "$schema": "./mfboard.schema.json", + "AvrDudeSettings": { + "Device": "atmega2560", + "BaudRates": ["115200"], + "Programmer": "wiring", + "Timeout": 15000 + }, + "Connection": { + "ConnectionDelay": 2000, + "ExtraConnectionRetry": false, + "ForceResetOnFirmwareUpdate": false, + "DelayAfterFirmwareUpdate": 0, + "DtrEnable": true, + "MessageSize": 90, + "EEPROMSize": 1496 + }, + "HardwareIds": [ + "^VID_2341&PID_0010", + "^VID_2341&PID_0042", + "^VID_8087&PID_0024", + "^VID_1A86&PID_7523", + "^VID_2A03&PID_0042", + "^VID_0403&PID_6001", + "^VID_0403\\+PID_6001\\+.+", + "^VID_2A03&PID_0010", + "^VID_2341&PID_0210", + "^VID_2341&PID_0242", + "^VID_10C4&PID_EA60", + "^VID_2341&PID_0044", + "^VID_3343&PID_0042", + "^VID_04D9&PID_B534" + ], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "DelayAfterFirmwareUpdate": 0, + "FirmwareBaseName": "mobiflight_mega", + "FirmwareExtension": "hex", + "LatestFirmwareVersion": "2.5.1", + "FriendlyName": "Arduino Mega 2560", + "MobiFlightType": "MobiFlight Mega", + "ResetFirmwareFile": "reset.arduino_mega_1_0_2.hex" + }, + "ModuleLimits": { + "MaxAnalogInputs": 16, + "MaxInputShifters": 6, + "MaxButtons": 68, + "MaxEncoders": 20, + "MaxLcdI2C": 2, + "MaxLedSegments": 6, + "MaxOutputs": 68, + "MaxServos": 12, + "MaxShifters": 6, + "MaxSteppers": 10, + "MaxInputMultiplexer": 6, + "MaxCustomDevices" : 0 + }, + "Pins": [ + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 2 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 3 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 4 + }, + { + "isAnalog": false, + "isI2C": false, + "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": false, + "Pin": 14 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "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, + "isPWM": false, + "isI2C": true, + "Pin": 20 + }, + { + "isAnalog": false, + "isPWM": false, + "isI2C": true, + "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": false, + "isI2C": false, + "isPWM": false, + "Pin": 40 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 41 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 42 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 43 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 44 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 45 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 46 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 47 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 48 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 49 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 50 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 51 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 52 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 53 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 54, + "Name": "A0" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 55, + "Name": "A1" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 56, + "Name": "A2" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 57, + "Name": "A3" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 58, + "Name": "A4" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 59, + "Name": "A5" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 60, + "Name": "A6" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 61, + "Name": "A7" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 62, + "Name": "A8" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 63, + "Name": "A9" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 64, + "Name": "A10" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 65, + "Name": "A11" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 66, + "Name": "A12" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 67, + "Name": "A13" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 68, + "Name": "A14" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 69, + "Name": "A15" + } + ] +} diff --git a/_Boards/Atmel/Board_Mega/reset.arduino_mega_1_0_2.hex b/_Boards/Atmel/Board_Mega/reset.arduino_mega_1_0_2.hex new file mode 100644 index 00000000..f2578bfa --- /dev/null +++ b/_Boards/Atmel/Board_Mega/reset.arduino_mega_1_0_2.hex @@ -0,0 +1,179 @@ +:100000000C9428010C9459010C9459010C94590139 +:100010000C9459010C9459010C9459010C945901F8 +:100020000C9459010C9459010C9459010C945901E8 +:100030000C9459010C9459010C9459010C945901D8 +:100040000C9459010C9459010C9459010C945901C8 +:100050000C9459010C9459010C9459010C9472039D +:100060000C9459010C94E6030C94BC030C945901B4 +:100070000C9459010C9459010C9459010C94590198 +:100080000C9459010C9459010C9459010C94590188 +:100090000C9459010C9459010C9459010C94590178 +:1000A0000C9459010C9459010C9459010C94590168 +:1000B0000C9459010C9459010C9459010C94590158 +:1000C0000C9459010C9459010C9459010C94590148 +:1000D0000C9459010C9459010C9459010C94590138 +:1000E0000C9459010C94CF010C94BD010C941C0488 +:1000F0000C9487010C94D4020C94B7010C94AD01BC +:100100000C94D9010C94C1010C947A020C94CB018B +:100110000C94C5010C949E010C943E020C94210396 +:100120000C94A6010C94DD010C94AA010C94A2017C +:100130000C948E020C94D3010C948C010C94B3019A +:100140000C946B020C949C020000210024002700F8 +:100150002A002D00300033000101000004010701D6 +:100160000A0100002200250028002B002E0031008B +:10017000340002010000050108010B010505050519 +:10018000070508080808020202020A0A080804040F +:10019000040401010101010101010303030303033D +:1001A0000303040707070C0C0C0C0C0C0C0C0202CC +:1001B000020206060606060606060B0B0B0B0B0BC9 +:1001C0000B0B010210202008081020401020408056 +:1001D000020102010804020101020408102040800B +:1001E0008040201008040201800402018040201099 +:1001F00008040201080402010102040810204080E2 +:10020000010204081020408000000A0B02090C0DB6 +:100210000E080703040100000000000000000000B9 +:1002200000000000000000000000000000000000CE +:10023000000000001211100000000000000000008B +:1002400000000000000000000000000000001C048E +:1002500011241FBECFEFD1E2DEBFCDBF00E00CBF47 +:1002600012E0A0E0B2E0E6EFFAE000E00BBF02C06F +:1002700007900D92A231B107D9F722E0A2E1B2E0D6 +:1002800001C01D92AA3BB207E1F711E0C8E2D1E03C +:1002900000E006C021970109802FFE010E94710530 +:1002A000C732D10780E00807A9F70E944D040C94DB +:1002B00079050C940000382FE5E1F2E08491EFEC31 +:1002C000F1E02491E9E8F1E09491992309F435C033 +:1002D000882311F181508231F8F4E82FF0E088276B +:1002E000EB58FE4F8F4F0C947105A601AA018701B0 +:1002F0009E01A2018C01AD01B301B701BD01C10195 +:10030000C501CB01CF018C01D301D901DD01809161 +:1003100080008F7780938000E92FF0E0EE0FFF1FC1 +:10032000EE59FE4FA591B4918FB7F894EC9131112D +:1003300048C020952E232C938FBF08958091800074 +:100340008F7DE8CF80918000877FE4CF84B58F7761 +:1003500084BDE2CF84B58F7DFBCF8091B0008F77D5 +:100360008093B000D9CF8091B0008F7DF9CF80917C +:1003700090008F7780939000CFCF809190008F7DF9 +:10038000F9CF80919000877FF5CF8091A0008F7783 +:100390008093A000C1CF8091A0008F7DF9CF809184 +:1003A000A000877FF5CF809120018F778093200177 +:1003B000B3CF809120018F7DF9CF80912001877F7D +:1003C000F5CF2E2BB8CF3FB7F894809117029091BC +:1003D0001802A0911902B0911A0226B5A89B05C077 +:1003E0002F3F19F00196A11DB11D3FBFBA2FA92FB4 +:1003F000982F8827BC01CD01620F711D811D911DB1 +:1004000042E0660F771F881F991F4A95D1F708951C +:100410008F929F92AF92BF92CF92DF92EF92FF9214 +:100420000E94E3014B015C0188EEC82E83E0D82EC8 +:10043000E12CF12C0E94E301681979098A099B09D2 +:10044000683E734081059105A8F321E0C21AD108E6 +:10045000E108F10888EE880E83E0981EA11CB11C0B +:10046000C114D104E104F10429F7FF90EF90DF906B +:10047000CF90BF90AF909F908F900895AF92BF9212 +:10048000CF92DF92EF92FF920F931F93CF93DF9360 +:100490006C017B018B01040F151FEB015E01AE188F +:1004A000BF08C017D10759F06991D601ED91FC91B1 +:1004B0000190F081E02DC6011995892B79F7C501CE +:1004C000DF91CF911F910F91FF90EF90DF90CF9030 +:1004D000BF90AF900895FC01538D448D252F30E0DF +:1004E000842F90E0821B930B541710F0CF96089541 +:1004F00001970895FC01918D828D981761F0A28D6E +:10050000AE0FBF2FB11D5D968C91928D9F5F9F7333 +:10051000928F90E008958FEF9FEF0895FC01918DE9 +:10052000828D981731F0828DE80FF11D858D90E056 +:1005300008958FEF9FEF0895FC01918D228D892FF3 +:1005400090E0805C9F4F821B91098F7399270895DB +:100550008BE192E00E949C0221E0892B09F420E0CB +:10056000822F0895FC01A48DA80FB92FB11DA35AA5 +:10057000BF4F2C91848D90E001968F739927848FC3 +:10058000A689B7892C93A089B1898C9183708064E6 +:100590008C93938D848D981306C00288F389E02D87 +:1005A00080818F7D80830895EF92FF920F931F9338 +:1005B000CF93DF93EC0181E0888F9B8D8C8D981316 +:1005C0001AC0E889F989808185FF15C09FB7F89422 +:1005D000EE89FF896083E889F9898081837080646E +:1005E00080839FBF81E090E0DF91CF911F910F91B9 +:1005F000FF90EF900895F62E0B8D10E00F5F1F4FC8 +:100600000F731127E02E8C8D8E110CC00FB607FCD6 +:10061000FACFE889F989808185FFF5CFCE010E9464 +:10062000B202F1CFEB8DEC0FFD2FF11DE35AFF4F1E +:10063000F0829FB7F8940B8FEA89FB8980818062F2 +:10064000CFCFCF93DF93EC01888D8823B9F0AA89AF +:10065000BB89E889F9898C9185FD03C0808186FD7D +:100660000DC00FB607FCF7CF8C9185FFF2CF8081CC +:1006700085FFEDCFCE010E94B202E9CFDF91CF918D +:10068000089580E090E0892B29F00E94A802811152 +:100690000E94000080E090E0892B49F080E090E02B +:1006A000892B29F00E94000081110E94000080E047 +:1006B00090E0892B49F080E090E0892B29F00E949E +:1006C000000081110E94000080E090E0892B49F039 +:1006D00080E090E0892B29F00E94000081110C94A9 +:1006E000000008951F920F920FB60F9211242F93BE +:1006F0003F938F939F93AF93BF93809113029091F9 +:100700001402A0911502B09116023091120223E05A +:10071000230F2D3758F50196A11DB11D209312020C +:100720008093130290931402A0931502B0931602C3 +:100730008091170290911802A0911902B0911A02AB +:100740000196A11DB11D8093170290931802A093EA +:100750001902B0931A02BF91AF919F918F913F916F +:100760002F910F900FBE0F901F90189526E8230F22 +:100770000296A11DB11DD2CF1F920F920FB60F92FC +:1007800011240BB60F922F933F934F935F936F9368 +:100790007F938F939F93AF93BF93EF93FF938BE1DF +:1007A00092E00E94B202FF91EF91BF91AF919F91B1 +:1007B0008F917F916F915F914F913F912F910F900A +:1007C0000BBE0F900FBE0F901F9018951F920F92A7 +:1007D0000FB60F9211240BB60F922F938F939F9306 +:1007E000EF93FF93E0912B02F0912C028081E09136 +:1007F0003102F091320282FD1DC09081809134025D +:100800008F5F8F7320913502821741F0E09134029F +:10081000F0E0E55EFD4F958F80933402FF91EF91FC +:100820009F918F912F910F900BBE0F900FBE0F9045 +:100830001F9018958081F2CFEBE1F2E013821282D3 +:1008400088EE93E0A0E0B0E084839583A683B7832D +:1008500084E092E09183808385EC90E095878487A3 +:1008600084EC90E09787868780EC90E0918B808B7A +:1008700081EC90E0938B828B82EC90E0958B848B63 +:1008800086EC90E0978B868B118E128E138E148ED1 +:100890001092B9021092B8020895CF93DF93CDB7AA +:1008A000DEB7789484B5826084BD84B5816084BDF0 +:1008B00085B5826085BD85B5816085BD80916E00FE +:1008C000816080936E00109281008091810082602F +:1008D000809381008091810081608093810080916C +:1008E00080008160809380008091B100846080935B +:1008F000B1008091B00081608093B0008091910040 +:10090000826080939100809191008160809391003A +:10091000809190008160809390008091A10082601E +:100920008093A1008091A10081608093A1008091BB +:10093000A00081608093A00080912101826080935B +:10094000210180912101816080932101809120010A +:1009500081608093200180917A00846080937A0086 +:1009600080917A00826080937A0080917A00816021 +:1009700080937A0080917A00806880937A00109248 +:10098000C1000DB71EB780E090E19093B90280934B +:10099000B8028DB79EB790510FB6F8949EBF0FBEA8 +:1009A0008DBFEDB7FEB731966F01EFECF1E04491EA +:1009B000E9E8F1E08491882399F090E0880F991F8D +:1009C000FC01E85BFE4FA591B491FC01EE59FE4F8E +:1009D000859194918FB7F894EC91E42BEC938FBFB1 +:1009E000E0912B02F0912C0282E08083E0912702BB +:1009F000F09128021082E0912902F0912A0280E110 +:100A0000808310923302E0912F02F091300286E051 +:100A10008083E0912D02F0912E028081806180839D +:100A2000E0912D02F0912E02808188608083E09118 +:100A30002D02F0912E02808180688083E0912D024A +:100A4000F0912E0280818F7D8083C601905FF60138 +:100A50002FEF21938E179F07E1F78091B8029091B5 +:100A6000B90281159041A8F0F12CE12CF601B1906A +:100A70006F01C7010E945B05B81621F06B2DC701FD +:100A80000E946305FFEFEF1AFF0AE11420E1F2066E +:100A900069F70FB6F8941EBF0FBE0DBF81E00E942C +:100AA0005B010E94080280E00E945B010E94080234 +:100AB0000E944103F3CFF999FECF92BD81BDF89A10 +:100AC000992780B50895262FF999FECF1FBA92BDB8 +:100AD00081BD20BD0FB6F894FA9AF99A0FBE01961F +:100AE0000895EE0FFF1F881F8BBF0790F691E02D32 +:060AF0001994F894FFCFF9 +:100AF60000000000D4023E026B0221039C027A022F +:020B06008E025D +:00000001FF diff --git a/_Boards/Atmel/Board_Nano/arduino_nano.board.json b/_Boards/Atmel/Board_Nano/arduino_nano.board.json new file mode 100644 index 00000000..fef3d441 --- /dev/null +++ b/_Boards/Atmel/Board_Nano/arduino_nano.board.json @@ -0,0 +1,184 @@ +{ + "$schema": "./mfboard.schema.json", + "AvrDudeSettings": { + "Attempts": 1, + "Device": "atmega328p", + "BaudRates": ["115200", "57600"], + "Programmer": "arduino", + "Timeout": 20000 + }, + "Connection": { + "ConnectionDelay": 1750, + "DelayAfterFirmwareUpdate": 0, + "DtrEnable": true, + "EEPROMSize": 286, + "ExtraConnectionRetry": true, + "ForceResetOnFirmwareUpdate": false, + "MessageSize": 64, + "TimeoutForFirmwareUpdate": 60000 + }, + "HardwareIds": [ + "^VID_2341&PID_0043", + "^VID_2A03&PID_0043", + "^VID_2341&PID_0243", + "^VID_2341&PID_0001", + "^VID_1A86&PID_7523", + "^VID_0403&PID_6001", + "^VID_067B&PID_2303", + "^VID_0403\\+PID_6001\\+.+" + ], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "FirmwareBaseName": "mobiflight_nano", + "FirmwareExtension": "hex", + "FriendlyName": "Arduino Nano", + "LatestFirmwareVersion": "2.5.1", + "MobiFlightType": "MobiFlight Nano", + "ResetFirmwareFile": "reset.arduino_uno_1_0_2.hex" + }, + "ModuleLimits": { + "MaxAnalogInputs": 8, + "MaxButtons": 18, + "MaxEncoders": 9, + "MaxInputShifters": 6, + "MaxLcdI2C": 2, + "MaxLedSegments": 6, + "MaxOutputs": 18, + "MaxServos": 8, + "MaxShifters": 6, + "MaxSteppers": 4, + "MaxInputMultiplexer": 6, + "MaxCustomDevices": 0 + }, + "Pins": [ + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 2 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 3 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 4 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 5 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 6 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 7 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "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": false, + "Pin": 12 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 13 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A0", + "Pin": 14 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A1", + "Pin": 15 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A2", + "Pin": 16 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A3", + "Pin": 17 + }, + { + "isAnalog": true, + "isI2C": true, + "isPWM": false, + "Name": "A4", + "Pin": 18 + }, + { + "isAnalog": true, + "isI2C": true, + "isPWM": false, + "Name": "A5", + "Pin": 19 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A6", + "Pin": 20 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A7", + "Pin": 21 + } + ] +} diff --git a/_Boards/Atmel/Board_Nano/reset.arduino_uno_1_0_2.hex b/_Boards/Atmel/Board_Nano/reset.arduino_uno_1_0_2.hex new file mode 100644 index 00000000..86408120 --- /dev/null +++ b/_Boards/Atmel/Board_Nano/reset.arduino_uno_1_0_2.hex @@ -0,0 +1,134 @@ +:100000000C945D000C9485000C9485000C94850084 +:100010000C9485000C9485000C9485000C9485004C +:100020000C9485000C9485000C9485000C9485003C +:100030000C9485000C9485000C9485000C9485002C +:100040000C9437020C9485000C94A7020C94810246 +:100050000C9485000C9485000C9485000C9485000C +:100060000C9485000C9485000000000024002700FB +:100070002A0000000000250028002B0004040404CE +:100080000404040402020202020203030303030342 +:10009000010204081020408001020408102001021F +:1000A00004081020000000080002010000030407FB +:1000B0000000000000000000D90211241FBECFEF95 +:1000C000D8E0DEBFCDBF11E0A0E0B1E0E4E2F8E0AF +:1000D00002C005900D92A231B107D9F721E0A2E14B +:1000E000B1E001C01D92AA3BB207E1F710E0CDE5F7 +:1000F000D0E004C02197FE010E940A04CC35D1074C +:10010000C9F70E940A030C9410040C940000E1EB60 +:10011000F0E02491EDE9F0E09491E9E8F0E0E49179 +:10012000EE23C9F0222339F0233001F1A8F4213065 +:1001300019F1223029F1F0E0EE0FFF1FEE58FF4FCA +:10014000A591B4912FB7F894EC91811126C09095A8 +:100150009E239C932FBF08952730A9F02830C9F023 +:10016000243049F7209180002F7D03C0209180002A +:100170002F7720938000DFCF24B52F7724BDDBCFEE +:1001800024B52F7DFBCF2091B0002F772093B000B6 +:10019000D2CF2091B0002F7DF9CF9E2BDACF3FB781 +:1001A000F8948091170190911801A0911901B091D4 +:1001B0001A0126B5A89B05C02F3F19F00196A11D75 +:1001C000B11D3FBFBA2FA92F982F8827BC01CD01A1 +:1001D000620F711D811D911D42E0660F771F881F00 +:1001E000991F4A95D1F708958F929F92AF92BF922F +:1001F000CF92DF92EF92FF920E94CF004B015C0101 +:1002000088EEC82E83E0D82EE12CF12C0E94CF007E +:10021000681979098A099B09683E7340810591052F +:10022000A8F321E0C21AD108E108F10888EE880E8F +:1002300083E0981EA11CB11CC114D104E104F10497 +:1002400029F7FF90EF90DF90CF90BF90AF909F90F5 +:100250008F900895AF92BF92CF92DF92EF92FF926C +:100260000F931F93CF93DF936C017B018B01040FDE +:10027000151FEB015E01AE18BF08C017D10759F07A +:100280006991D601ED91FC910190F081E02DC601BC +:100290000995892B79F7C501DF91CF911F910F91B6 +:1002A000FF90EF90DF90CF90BF90AF900895FC014A +:1002B000538D448D252F30E0842F90E0821B930BCB +:1002C000541710F0CF96089501970895FC01918D71 +:1002D000828D981761F0A28DAE0FBF2FB11D5D9674 +:1002E0008C91928D9F5F9F73928F90E008958FEF16 +:1002F0009FEF0895FC01918D828D981731F0828DCA +:10030000E80FF11D858D90E008958FEF9FEF089520 +:10031000FC01918D228D892F90E0805C9F4F821B84 +:1003200091098F73992708958BE191E00E948801CC +:1003300021E0892B09F420E0822F089580E090E0ED +:10034000892B29F00E94940181110C9400000895DA +:10035000FC01A48DA80FB92FB11DA35ABF4F2C913A +:10036000848D90E001968F739927848FA689B78931 +:100370002C93A089B1898C91837080648C93938D28 +:10038000848D981306C00288F389E02D80818F7DCB +:1003900080830895EF92FF920F931F93CF93DF9383 +:1003A000EC0181E0888F9B8D8C8D98131AC0E889B1 +:1003B000F989808185FF15C09FB7F894EE89FF8980 +:1003C0006083E889F98980818370806480839FBF1E +:1003D00081E090E0DF91CF911F910F91FF90EF901E +:1003E0000895F62E0B8D10E00F5F1F4F0F7311272E +:1003F000E02E8C8D8E110CC00FB607FCFACFE88969 +:10040000F989808185FFF5CFCE010E94A801F1CF47 +:10041000EB8DEC0FFD2FF11DE35AFF4FF0829FB7DC +:10042000F8940B8FEA89FB8980818062CFCFCF93CC +:10043000DF93EC01888D8823B9F0AA89BB89E8890C +:10044000F9898C9185FD03C0808186FD0DC00FB6B2 +:1004500007FCF7CF8C9185FFF2CF808185FFEDCF30 +:10046000CE010E94A801E9CFDF91CF9108951F929C +:100470000F920FB60F9211242F933F938F939F9358 +:10048000AF93BF938091130190911401A091150136 +:10049000B09116013091120123E0230F2D3758F54A +:1004A0000196A11DB11D2093120180931301909319 +:1004B0001401A0931501B09316018091170190913A +:1004C0001801A0911901B0911A010196A11DB11D49 +:1004D0008093170190931801A0931901B0931A010A +:1004E000BF91AF919F918F913F912F910F900FBE30 +:1004F0000F901F90189526E8230F0296A11DB11D9D +:10050000D2CF1F920F920FB60F9211242F933F93C9 +:100510004F935F936F937F938F939F93AF93BF930B +:10052000EF93FF938BE191E00E94A801FF91EF917F +:10053000BF91AF919F918F917F916F915F914F91FB +:100540003F912F910F900FBE0F901F9018951F9203 +:100550000F920FB60F9211242F938F939F93EF93C7 +:10056000FF93E0912B01F0912C018081E09131010A +:10057000F091320182FD1BC09081809134018F5F28 +:100580008F7320913501821741F0E0913401F0E042 +:10059000E55EFE4F958F80933401FF91EF919F911F +:1005A0008F912F910F900FBE0F901F901895808103 +:1005B000F4CFEBE1F1E01382128288EE93E0A0E049 +:1005C000B0E084839583A683B78384E091E0918330 +:1005D000808385EC90E09587848784EC90E0978712 +:1005E000868780EC90E0918B808B81EC90E0938B00 +:1005F000828B82EC90E0958B848B86EC90E0978BDD +:10060000868B118E128E138E148E1092B901109259 +:10061000B8010895CF93DF93CDB7DEB7789484B552 +:10062000826084BD84B5816084BD85B5826085BDEE +:1006300085B5816085BD80916E00816080936E007C +:10064000109281008091810082608093810080916E +:10065000810081608093810080918000816080931F +:1006600080008091B10084608093B1008091B000DF +:1006700081608093B00080917A00846080937A00DA +:1006800080917A00826080937A0080917A00816004 +:1006900080937A0080917A00806880937A0010922B +:1006A000C1000DB71EB780E094E09093B90180932C +:1006B000B8018DB79EB794500FB6F8949EBF0FBE89 +:1006C0008DBFEDB7FEB731966F01EDE9F0E04491D3 +:1006D000E9E8F0E08491882399F090E0880F991F71 +:1006E000FC01E859FF4FA591B491FC01EE58FF4F72 +:1006F000859194918FB7F894EC91E42BEC938FBF94 +:10070000E0912B01F0912C0182E08083E0912701A0 +:10071000F09128011082E0912901F0912A0180E1F5 +:10072000808310923301E0912F01F091300186E037 +:100730008083E0912D01F0912E0180818061808382 +:10074000E0912D01F0912E01808188608083E091FD +:100750002D01F0912E01808180688083E0912D0130 +:10076000F0912E0180818F7D8083C6019C5FF60110 +:100770002FEF21938E179F07E1F78091B801909199 +:10078000B90181159440A8F0F12CE12CF601B1904B +:100790006F01C7010E94F403B81621F06B2DC70149 +:1007A0000E94FC03FFEFEF1AFF0AE11424E0F206B7 +:1007B00069F70FB6F8941EBF0FBE0DBF00E010E042 +:1007C00081E00E9487000E94F40080E00E94870080 +:1007D0000E94F4000115110599F30E9494018823E9 +:1007E00079F30E940000ECCFF999FECF92BD81BD54 +:1007F000F89A992780B50895262FF999FECF1FBA48 +:1008000092BD81BD20BD0FB6F894FA9AF99A0FBE39 +:1008100001960895EE0FFF1F0590F491E02D0994C5 +:04082000F894FFCF7A +:1008240000000000CA012A0157011702880166016D +:020834007A0147 +:00000001FF diff --git a/_Boards/Atmel/Board_ProMicro/arduino_micro.board.json b/_Boards/Atmel/Board_ProMicro/arduino_micro.board.json new file mode 100644 index 00000000..c856d786 --- /dev/null +++ b/_Boards/Atmel/Board_ProMicro/arduino_micro.board.json @@ -0,0 +1,162 @@ +{ + "$schema": "./mfboard.schema.json", + "AvrDudeSettings": { + "Attempts": 1, + "BaudRates": [ "57600" ], + "Device": "atmega32u4", + "Programmer": "avr109", + "Timeout": 15000 + }, + "Connection": { + "ConnectionDelay": 1250, + "DelayAfterFirmwareUpdate": 1250, + "DtrEnable": true, + "EEPROMSize": 440, + "ExtraConnectionRetry": false, + "ForceResetOnFirmwareUpdate": true, + "MessageSize": 64 + }, + "HardwareIds": [ + "^VID_1B4F&PID_9206", + "^VID_2341&PID_8036", + "^VID_2341&PID_8037" + ], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "FirmwareBaseName": "mobiflight_micro", + "FirmwareExtension": "hex", + "FriendlyName": "Arduino Pro Micro", + "LatestFirmwareVersion": "2.5.1", + "MobiFlightType": "MobiFlight Micro", + "ResetFirmwareFile": "reset.arduino_promicro_1_0_2.hex" + }, + "ModuleLimits": { + "MaxAnalogInputs": 9, + "MaxButtons": 18, + "MaxEncoders": 9, + "MaxInputShifters": 6, + "MaxLcdI2C": 2, + "MaxLedSegments": 6, + "MaxOutputs": 18, + "MaxServos": 8, + "MaxShifters": 6, + "MaxSteppers": 4, + "MaxInputMultiplexer": 6, + "MaxCustomDevices": 0 + }, + "Pins": [ + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 0 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 1 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": false, + "Pin": 2 + }, + { + "isAnalog": false, + "isI2C": true, + "isPWM": true, + "Pin": 3 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 4 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 5 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": true, + "Pin": 6 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 7 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 8 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": true, + "Pin": 9 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": true, + "Pin": 10 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 14 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 15 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 16 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 18, + "Name": "A0" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 19, + "Name": "A1" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 20, + "Name": "A2" + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Pin": 21, + "Name": "A3" + } + ] +} \ No newline at end of file diff --git a/_Boards/Atmel/Board_ProMicro/reset.arduino_promicro_1_0_2.hex b/_Boards/Atmel/Board_ProMicro/reset.arduino_promicro_1_0_2.hex new file mode 100644 index 00000000..635a616a --- /dev/null +++ b/_Boards/Atmel/Board_ProMicro/reset.arduino_promicro_1_0_2.hex @@ -0,0 +1,262 @@ +:100000000C94CD000C94F5000C94F5000C94F500C4 +:100010000C94F5000C94F5000C94F5000C94F5008C +:100020000C94F5000C94F5000C941E040C948D04B3 +:100030000C94F5000C94F5000C94F5000C94F5006C +:100040000C94F5000C94F5000C94F5000C94F5005C +:100050000C94F5000C94F5000C94F5000C94D4036A +:100060000C94F5000C94F5000C94F5000C94F5003C +:100070000C94F5000C94F5000C94F5000C94F5002C +:100080000C94F5000C94F5000C94F5000C94F5001C +:100090000C94F5000C94F5000C94F5000C94F5000C +:1000A0000C94F5000C94F5000C94F500080B00027C +:1000B0000202000009040000010202000005240001 +:1000C0001001052401010104240206052406000193 +:1000D0000705810310004009040100020A00000026 +:1000E00007050202400000070583024000000403E8 +:1000F000090412010002EF02014041233780000190 +:100100000102030141726475696E6F204C4C43001B +:1001100041726475696E6F204D6963726F000000F3 +:100120000000240027002A002D00300000000000FD +:10013000250028002B002E003100040404040403D1 +:100140000405020202020403020202020606060677 +:10015000060604040202020404040802011040809E +:10016000401020408040800802040180402010029E +:1001700001108010204040200000000200090F0004 +:1001800000030401000C000000000000000000005B +:100190000000000000000000BF0611241FBECFEFCA +:1001A000DAE0DEBFCDBF11E0A0E0B1E0E4E1F0E1D4 +:1001B00002C005900D92A632B107D9F721E0A6E260 +:1001C000B1E001C01D92A739B207E1F710E0CDEC14 +:1001D000D0E004C02197FE010E940208CC3CD10768 +:1001E000C9F70E94D8060C9408080C940000E5E8B2 +:1001F000F1E02491E6E6F1E03491E7E4F1E0949156 +:10020000992309F430C02223E9F021502F30D0F493 +:10021000E22FF0E0E25FFE4F0C9402083C01400147 +:100220001D0134013801220122012201430149014B +:100230004D015101570122015B01209180002F7770 +:1002400020938000E92FF0E0EE0FFF1FE45DFE4FEA +:10025000A591B4919FB7F894EC91811132C030957B +:100260003E233C939FBF0895209180002F7DE8CFCF +:1002700020918000277FE4CF24B52F7724BDE2CFE3 +:1002800024B52F7DFBCF209190002F7720939000F5 +:10029000D9CF209190002F7DF9CF20919000277F1A +:1002A000F5CF2091C0002F772093C000CBCF2091B5 +:1002B000C0002F7DF9CF2091C200277F2093C2007C +:1002C000C1CF3E2BCECFFC0180914401882311F198 +:1002D0003FB7F89482E08093E9002091F200822FEA +:1002E00090E01816190614F481E090E0882339F0A4 +:1002F000289A44E6409343014091F1004083222331 +:1003000039F02091F200211103C02BE62093E80080 +:100310003FBF08958FEF9FEF08952FB7F89483E0C4 +:100320008093E9009091E800892F807295FF04C0C6 +:100330009091F20080E4891B2FBF089580913B01CA +:1003400081110DC082E08093370184E080933801F1 +:1003500010923A011092390181E080933B0187E3CA +:1003600091E008953FB7F894809133019091340162 +:10037000A0913501B091360126B5A89B05C02F3F4D +:1003800019F00196A11DB11D3FBFBA2FA92F982FBB +:100390008827BC01CD01620F711D811D911D42E0B6 +:1003A000660F771F881F991F4A95D1F708958F927E +:1003B0009F92AF92BF92CF92DF92EF92FF924B014A +:1003C0005C010E94B2016B017C010E94B2016C19B8 +:1003D0007D098E099F09683E734081059105A8F348 +:1003E00021E0821A9108A108B10888EEC80E83E0C6 +:1003F000D81EE11CF11C81149104A104B10429F759 +:10040000FF90EF90DF90CF90BF90AF909F908F9034 +:1004100008954091280150912901209126013091A1 +:10042000270142175307B4F49091E8009570E1F367 +:100430009091E80092FD19C08093F100809128010D +:100440009091290101968F739927892B19F48EEFCA +:100450008093E80080912801909129010196909362 +:1004600029018093280181E0089580E00895EF92AA +:10047000FF920F931F93CF93DF93F82E192FE62E41 +:10048000042F81E0860F880F0E94090283E00E94FA +:100490000902CF2DD12FEC0EFD2EF11CCE15DF055C +:1004A000B9F007FF13C0FE0184910E940902182FC2 +:1004B00080E00E940902812321968111EFCFDF9114 +:1004C000CF911F910F91FF90EF9008958881EDCF0C +:1004D00081E0F5CFDF92EF92FF920F931F93CF93BE +:1004E000DF93D82E8A01EB017B01E40EF51ECE15B9 +:1004F000DF0559F0D7FE12C0FE0184910E94090267 +:1005000021968111F4CF0FEF1FEFC801DF91CF913A +:100510001F910F91FF90EF90DF9008958881EECFAB +:100520000F931F93CF93DF931F92CDB7DEB782E077 +:10053000898342E450E06CEA70E080E80E946A023D +:100540000E949E01DC0112960D911C91011511056E +:1005500089F0D801ED91FC910280F381E02DBE017C +:100560006F5F7F4FC801099597FD04C0F8010085B2 +:100570001185ECCF89810F90DF91CF911F910F9161 +:100580000895615030F02091F100FC012083019624 +:10059000F8CF289A84E68093430108958F929F9222 +:1005A000AF92BF92CF92DF92EF92FF920F931F9381 +:1005B000CF93DF936C017B018A0180910B0188232B +:1005C00009F45CC080914401882309F457C08091EC +:1005D0002C0180FF05C08091E00082608093E000E4 +:1005E000E801B12C8AEFA82E93E0892E2AE3922EFF +:1005F000209711F4BB20D9F10E948D0181110AC00E +:10060000AA94AA20D9F161E070E080E090E00E9415 +:10061000D701EECF8C171D0611F00CF08C2F9FB771 +:10062000F8948092E9002091E80025FD02C09FBF68 +:10063000DFCF282F30E0C21BD30BF701815020F011 +:1006400041914093F100FACFE20EF31EBB2021F05E +:100650009092E800B12CEBCF8091E80085FDE7CFC8 +:100660009092E800BB24B394209709F3F3CF5D9AEE +:1006700084E680932B01101611063CF081E090E097 +:10068000F6019383828310E000E0C801DF91CF91EF +:100690001F910F91FF90EF90DF90CF90BF90AF90A0 +:1006A0009F908F900895CF93DF931F92CDB7DEB7C1 +:1006B0006983DC01ED91FC910280F381E02D41E042 +:1006C00050E0BE016F5F7F4F09950F90DF91CF9192 +:1006D000089583E08093E9008091F200882319F067 +:1006E0008AE38093E80008950E948D0190E00895C8 +:1006F000CF93DF931F92CDB7DEB7FC01848595853C +:1007000097FD08C02FEF3FEF358724870F90DF91CB +:10071000CF910895CE0101960E946301019719F4CB +:10072000898190E0F3CF8FEF9FEFF0CF0F931F936E +:10073000CF93DF931F92CDB7DEB78C01FC01848588 +:10074000958597FF0BC0CE0101960E94630101972A +:1007500071F4898190E0F80195878487F801848598 +:1007600095850F90DF91CF911F910F9108958FEF95 +:100770009FEFF1CFFC018485958597FD0BC09FB756 +:10078000F89482E08093E9008091F2009FBF90E0AE +:10079000019608959FB7F89482E08093E9008091D4 +:1007A000F2009FBF90E008951F920F920FB60F9234 +:1007B00011242F933F938F939F93AF93BF93809177 +:1007C0002F0190913001A0913101B091320130910F +:1007D0002E0123E0230F2D3758F50196A11DB11DE1 +:1007E00020932E0180932F0190933001A09331012B +:1007F000B09332018091330190913401A091350181 +:10080000B09136010196A11DB11D809333019093E3 +:100810003401A0933501B0933601BF91AF919F9100 +:100820008F913F912F910F900FBE0F901F901895B1 +:1008300026E8230F0296A11DB11DD2CF1F920F9261 +:100840000FB60F9211248F939F938091E1009091A6 +:10085000E100937F9093E10083FF0FC01092E900C5 +:1008600091E09093EB001092EC0092E39093ED00F6 +:100870001092440198E09093F00082FF22C093E030 +:100880009093E9009091F200992319F09AE39093E4 +:10089000E80090912B01992341F090912B01915008 +:1008A00090932B01911101C05D9890914301992380 +:1008B00041F090914301915090934301911101C0F7 +:1008C000289884FF18C08091E2008E7E816080931A +:1008D000E2008091E1008F7E8093E10080912C0105 +:1008E0008E7E806180932C019F918F910F900FBE1F +:1008F0000F901F90189580FFF7CF8091E2008E7EB9 +:1009000080618093E2008091E1008E7E8093E1001F +:1009100080912C018E7E8160E5CF1F920F920FB6E1 +:100920000F921124CF92DF92EF92FF920F931F93B9 +:100930002F933F934F935F936F937F938F939F93E7 +:10094000AF93BF93EF93FF93CF93DF93CDB7DEB712 +:100950006C97DEBFCDBF1092E9008091E80083FF65 +:1009600025C068E0CE0145960E94C10282EF8093C7 +:10097000E8008D8987FF39C09091E80090FFFCCF97 +:10098000982F907609F034C19E894F89588D2F8910 +:10099000F88C911131C0803861F580912D018093E0 +:1009A000F1001092F1008EEF8093E8006C960FB684 +:1009B000F894DEBF0FBECDBFDF91CF91FF91EF91D5 +:1009C000BF91AF919F918F917F916F915F914F9167 +:1009D0003F912F911F910F91FF90EF90DF90CF905B +:1009E0000F900FBE0F901F9018959EEF9093E80008 +:1009F000C7CF1092F100D5CF913059F48111D3CFE8 +:100A00004130510581F680912D018D7F80932D011C +:100A1000CACF933049F48111C6CF4130510519F640 +:100A200080912D018260F2CF953041F48091E800F1 +:100A300080FFFCCF20682093E300B5CF963009F00B +:100A4000A9C00B8D1C8D22E01092E90010922901A3 +:100A500010922801F2122EC0109227011092260146 +:100A60000E9490021F8299E09983FA8291E09E830E +:100A700090EA98879AEF998720912801309129016F +:100A8000275F3F4F3C832B838D831092E9001092A8 +:100A9000290110922801109327010093260149E0B3 +:100AA00050E0BE016F5F7F4F80E00E946A020E94AB +:100AB000900279CF10932701009326010E949E0196 +:100AC000DC0112960D911C910115110509F451C11B +:100AD000D801ED91FC910480F581E02DBE016B5EA3 +:100AE0007F4FC8010995009709F03EC1F8010085C4 +:100AF0001185EACFF3E0FF120EC08F89882309F435 +:100B000040C0823061F440E86DE080E191E00E94F5 +:100B10003702811148CF81E28093EB0047CF8130CB +:100B200029F440E86BE084E091E0F1CF833099F75D +:100B30000E949E01DC011296ED90FC908E010F5FE9 +:100B40001F4F6801E114F10479F0D701ED91FC9198 +:100B50000680F781E02DB801C7010995080F111D26 +:100B6000F701E084F184EECFD8011C92F6010190E8 +:100B70000020E9F73197BF016C197D0940E0C601FB +:100B8000C6CF6EEE70E0FB01449150E080E80E9419 +:100B90006A0209CF973009F4BECF983021F481E082 +:100BA0008093F10000CF993009F0FDCE837009F0F9 +:100BB000B2CFEDE0F1E081E031E096E32191222334 +:100BC00071F08093E9003093EB00DF0111972C91D5 +:100BD0002093EC009093ED008F5F873079F78EE7DC +:100BE0008093EA001092EA008F8980934401DBCE63 +:100BF0008B8D9C8D1092E900109229011092280192 +:100C00009093270180932601898D811192C08E894E +:100C10009D89913A49F4813209F07DCF47E050E057 +:100C200064E071E080E0B3CF913209F074CF833299 +:100C300069F48F89988DB0E0A0E0809300019093D3 +:100C40000101A0930201B0930301ADCE803269F49B +:100C50008091E80082FFFCCF67E084E091E00E9491 +:100C6000C1028BEF8093E8009ECE823209F09BCECA +:100C70008F8980930B01EEEFFFE7859194918B3F75 +:100C80009C4D51F1E0E0F8E0809104019091050164 +:100C9000A0910601B0910701803B9440A105B105E8 +:100CA000F1F480910B0180FD1AC0EE3F8AE0F80755 +:100CB00089F587E797E7918380838091600080932F +:100CC0002A0188E19BE00FB6F894A8958093600014 +:100CD0000FBE9093600067CEEEEFFAE0D5CF808133 +:100CE00091818737974709F05ECEA8958091600083 +:100CF00088618093600080912A0180936000EE3FBC +:100D00002AE0F20789F08091FE0A9091FF0A918310 +:100D1000808349CE808191818737980751F29093E3 +:100D2000FF0A8093FE0AC5CF1092FF0A1092FE0AB6 +:100D30003ACE0E949E01DC0112960D911C91011584 +:100D4000110509F4E8CED801ED91FC910190F081F4 +:100D5000E02DBE016B5E7F4FC8010995811123CE46 +:100D6000F80100851185EBCF181619060CF41BCE7F +:100D7000D2CEF1E0FF12BECE62EF70E004CFE5E428 +:100D8000F1E01382128288EE93E0A0E0B0E0848369 +:100D90009583A683B78387E191E0918380838FEF6A +:100DA0009FEF958784871092960110929501089580 +:100DB000CF93DF93CDB7DEB7789484B5826084BDDE +:100DC00084B5816084BD85B5826085BD85B581604F +:100DD00085BD80916E00816080936E0010928100CD +:100DE0008091810082608093810080918100816088 +:100DF0008093810080918000816080938000809149 +:100E00009100826080939100809191008160809335 +:100E10009100809190008160809390008091C1004A +:100E200084608093C1008091C10082608093C10082 +:100E30008091C10081608093C1008091C300816076 +:100E40008093C3008091C00082608093C000809135 +:100E5000C20081608093C20080917A008460809398 +:100E60007A0080917A00826080937A0080917A0083 +:100E7000816080937A0080917A00806880937A0004 +:100E80001092440110922D0110922C018091D700F4 +:100E900081608093D70080EA8093D80089B5806113 +:100EA00089BD89B5826089BD09B400FEFDCF61E0CE +:100EB00070E080E090E00E94D7018091D8008F7CA4 +:100EC00080618093D8008091E000807F8093E00073 +:100ED0008091E1008E7E8093E1008DE08093E200BE +:100EE000559A209A5D9828980DB71EB780E094E037 +:100EF00090939601809395018DB79EB794500FB64D +:100F0000F8949EBF0FBE8DBFEDB7FEB731966F014F +:100F1000E6E6F1E04491E7E4F1E08491882399F07A +:100F200090E0880F991FFC01E25EFE4FA591B491FD +:100F3000FC01E45DFE4F859194918FB7F894EC919C +:100F4000E42BEC938FBF8FEF9FEF90935201809330 +:100F50005101C6019C5FF6012FEF21938E179F0769 +:100F6000E1F7809195019091960181159440A8F048 +:100F7000F12CE12CF601B1906F01C7010E94EC0742 +:100F8000B81621F06B2DC7010E94F407FFEFEF1A8E +:100F9000FF0AE11424E0F20669F70FB6F8941EBFC9 +:100FA0000FBE0DBF00E010E081E00E94F70068EE88 +:100FB00073E080E090E00E94D70180E00E94F7009B +:100FC00068EE73E080E090E00E94D7010115110502 +:100FD00059F30E940000E8CFF999FECF92BD81BD80 +:100FE000F89A992780B50895262FF999FECF1FBA50 +:100FF00092BD81BD20BD0FB6F894FA9AF99A0FBE42 +:1010000001960895EE0FFF1F0590F491E02D0994CD +:04101000F894FFCF82 +:10101400FFFFFFFF00E100000000000000C180812D +:10102400000000000000005303CE0274036903BAF9 +:061034000378039603009F +:00000001FF diff --git a/_Boards/Atmel/Board_Uno/arduino_uno.board.json b/_Boards/Atmel/Board_Uno/arduino_uno.board.json new file mode 100644 index 00000000..0a4cd7e2 --- /dev/null +++ b/_Boards/Atmel/Board_Uno/arduino_uno.board.json @@ -0,0 +1,169 @@ +{ + "$schema": "./mfboard.schema.json", + "AvrDudeSettings": { + "Attempts": 1, + "Device": "atmega328p", + "BaudRates": ["115200"], + "Programmer": "arduino", + "Timeout": 15000 + }, + "Connection": { + "ConnectionDelay": 1750, + "DelayAfterFirmwareUpdate": 0, + "DtrEnable": true, + "EEPROMSize": 286, + "ExtraConnectionRetry": true, + "ForceResetOnFirmwareUpdate": false, + "MessageSize": 64 + }, + "HardwareIds": [ + "^VID_10C4&PID_EA60", + "^VID_2341&PID_0043", + "^VID_2A03&PID_0043", + "^VID_2341&PID_0243", + "^VID_2341&PID_0001", + "^VID_1A86&PID_7523", + "^VID_0403&PID_6001", + "^VID_0403\\+PID_6001\\+.+" + ], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "FriendlyName": "Arduino Uno", + "FirmwareBaseName": "mobiflight_uno", + "FirmwareExtension": "hex", + "LatestFirmwareVersion": "2.5.1", + "MobiFlightType": "MobiFlight Uno", + "ResetFirmwareFile": "reset.arduino_uno_1_0_2.hex" + }, + "ModuleLimits": { + "MaxAnalogInputs": 6, + "MaxButtons": 18, + "MaxEncoders": 9, + "MaxInputShifters": 6, + "MaxLcdI2C": 2, + "MaxLedSegments": 6, + "MaxOutputs": 18, + "MaxServos": 8, + "MaxShifters": 6, + "MaxSteppers": 4, + "MaxInputMultiplexer": 6, + "MaxCustomDevices": 0 + }, + "Pins": [ + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 2 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 3 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 4 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 5 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": true, + "Pin": 6 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 7 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "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": false, + "Pin": 12 + }, + { + "isAnalog": false, + "isI2C": false, + "isPWM": false, + "Pin": 13 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A0", + "Pin": 14 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A1", + "Pin": 15 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A2", + "Pin": 16 + }, + { + "isAnalog": true, + "isI2C": false, + "isPWM": false, + "Name": "A3", + "Pin": 17 + }, + { + "isAnalog": true, + "isI2C": true, + "isPWM": false, + "Name": "A4", + "Pin": 18 + }, + { + "isAnalog": true, + "isI2C": true, + "isPWM": false, + "Name": "A5", + "Pin": 19 + } + ] +} diff --git a/_Boards/Atmel/Board_Uno/reset.arduino_uno_1_0_2.hex b/_Boards/Atmel/Board_Uno/reset.arduino_uno_1_0_2.hex new file mode 100644 index 00000000..86408120 --- /dev/null +++ b/_Boards/Atmel/Board_Uno/reset.arduino_uno_1_0_2.hex @@ -0,0 +1,134 @@ +:100000000C945D000C9485000C9485000C94850084 +:100010000C9485000C9485000C9485000C9485004C +:100020000C9485000C9485000C9485000C9485003C +:100030000C9485000C9485000C9485000C9485002C +:100040000C9437020C9485000C94A7020C94810246 +:100050000C9485000C9485000C9485000C9485000C +:100060000C9485000C9485000000000024002700FB +:100070002A0000000000250028002B0004040404CE +:100080000404040402020202020203030303030342 +:10009000010204081020408001020408102001021F +:1000A00004081020000000080002010000030407FB +:1000B0000000000000000000D90211241FBECFEF95 +:1000C000D8E0DEBFCDBF11E0A0E0B1E0E4E2F8E0AF +:1000D00002C005900D92A231B107D9F721E0A2E14B +:1000E000B1E001C01D92AA3BB207E1F710E0CDE5F7 +:1000F000D0E004C02197FE010E940A04CC35D1074C +:10010000C9F70E940A030C9410040C940000E1EB60 +:10011000F0E02491EDE9F0E09491E9E8F0E0E49179 +:10012000EE23C9F0222339F0233001F1A8F4213065 +:1001300019F1223029F1F0E0EE0FFF1FEE58FF4FCA +:10014000A591B4912FB7F894EC91811126C09095A8 +:100150009E239C932FBF08952730A9F02830C9F023 +:10016000243049F7209180002F7D03C0209180002A +:100170002F7720938000DFCF24B52F7724BDDBCFEE +:1001800024B52F7DFBCF2091B0002F772093B000B6 +:10019000D2CF2091B0002F7DF9CF9E2BDACF3FB781 +:1001A000F8948091170190911801A0911901B091D4 +:1001B0001A0126B5A89B05C02F3F19F00196A11D75 +:1001C000B11D3FBFBA2FA92F982F8827BC01CD01A1 +:1001D000620F711D811D911D42E0660F771F881F00 +:1001E000991F4A95D1F708958F929F92AF92BF922F +:1001F000CF92DF92EF92FF920E94CF004B015C0101 +:1002000088EEC82E83E0D82EE12CF12C0E94CF007E +:10021000681979098A099B09683E7340810591052F +:10022000A8F321E0C21AD108E108F10888EE880E8F +:1002300083E0981EA11CB11CC114D104E104F10497 +:1002400029F7FF90EF90DF90CF90BF90AF909F90F5 +:100250008F900895AF92BF92CF92DF92EF92FF926C +:100260000F931F93CF93DF936C017B018B01040FDE +:10027000151FEB015E01AE18BF08C017D10759F07A +:100280006991D601ED91FC910190F081E02DC601BC +:100290000995892B79F7C501DF91CF911F910F91B6 +:1002A000FF90EF90DF90CF90BF90AF900895FC014A +:1002B000538D448D252F30E0842F90E0821B930BCB +:1002C000541710F0CF96089501970895FC01918D71 +:1002D000828D981761F0A28DAE0FBF2FB11D5D9674 +:1002E0008C91928D9F5F9F73928F90E008958FEF16 +:1002F0009FEF0895FC01918D828D981731F0828DCA +:10030000E80FF11D858D90E008958FEF9FEF089520 +:10031000FC01918D228D892F90E0805C9F4F821B84 +:1003200091098F73992708958BE191E00E948801CC +:1003300021E0892B09F420E0822F089580E090E0ED +:10034000892B29F00E94940181110C9400000895DA +:10035000FC01A48DA80FB92FB11DA35ABF4F2C913A +:10036000848D90E001968F739927848FA689B78931 +:100370002C93A089B1898C91837080648C93938D28 +:10038000848D981306C00288F389E02D80818F7DCB +:1003900080830895EF92FF920F931F93CF93DF9383 +:1003A000EC0181E0888F9B8D8C8D98131AC0E889B1 +:1003B000F989808185FF15C09FB7F894EE89FF8980 +:1003C0006083E889F98980818370806480839FBF1E +:1003D00081E090E0DF91CF911F910F91FF90EF901E +:1003E0000895F62E0B8D10E00F5F1F4F0F7311272E +:1003F000E02E8C8D8E110CC00FB607FCFACFE88969 +:10040000F989808185FFF5CFCE010E94A801F1CF47 +:10041000EB8DEC0FFD2FF11DE35AFF4FF0829FB7DC +:10042000F8940B8FEA89FB8980818062CFCFCF93CC +:10043000DF93EC01888D8823B9F0AA89BB89E8890C +:10044000F9898C9185FD03C0808186FD0DC00FB6B2 +:1004500007FCF7CF8C9185FFF2CF808185FFEDCF30 +:10046000CE010E94A801E9CFDF91CF9108951F929C +:100470000F920FB60F9211242F933F938F939F9358 +:10048000AF93BF938091130190911401A091150136 +:10049000B09116013091120123E0230F2D3758F54A +:1004A0000196A11DB11D2093120180931301909319 +:1004B0001401A0931501B09316018091170190913A +:1004C0001801A0911901B0911A010196A11DB11D49 +:1004D0008093170190931801A0931901B0931A010A +:1004E000BF91AF919F918F913F912F910F900FBE30 +:1004F0000F901F90189526E8230F0296A11DB11D9D +:10050000D2CF1F920F920FB60F9211242F933F93C9 +:100510004F935F936F937F938F939F93AF93BF930B +:10052000EF93FF938BE191E00E94A801FF91EF917F +:10053000BF91AF919F918F917F916F915F914F91FB +:100540003F912F910F900FBE0F901F9018951F9203 +:100550000F920FB60F9211242F938F939F93EF93C7 +:10056000FF93E0912B01F0912C018081E09131010A +:10057000F091320182FD1BC09081809134018F5F28 +:100580008F7320913501821741F0E0913401F0E042 +:10059000E55EFE4F958F80933401FF91EF919F911F +:1005A0008F912F910F900FBE0F901F901895808103 +:1005B000F4CFEBE1F1E01382128288EE93E0A0E049 +:1005C000B0E084839583A683B78384E091E0918330 +:1005D000808385EC90E09587848784EC90E0978712 +:1005E000868780EC90E0918B808B81EC90E0938B00 +:1005F000828B82EC90E0958B848B86EC90E0978BDD +:10060000868B118E128E138E148E1092B901109259 +:10061000B8010895CF93DF93CDB7DEB7789484B552 +:10062000826084BD84B5816084BD85B5826085BDEE +:1006300085B5816085BD80916E00816080936E007C +:10064000109281008091810082608093810080916E +:10065000810081608093810080918000816080931F +:1006600080008091B10084608093B1008091B000DF +:1006700081608093B00080917A00846080937A00DA +:1006800080917A00826080937A0080917A00816004 +:1006900080937A0080917A00806880937A0010922B +:1006A000C1000DB71EB780E094E09093B90180932C +:1006B000B8018DB79EB794500FB6F8949EBF0FBE89 +:1006C0008DBFEDB7FEB731966F01EDE9F0E04491D3 +:1006D000E9E8F0E08491882399F090E0880F991F71 +:1006E000FC01E859FF4FA591B491FC01EE58FF4F72 +:1006F000859194918FB7F894EC91E42BEC938FBF94 +:10070000E0912B01F0912C0182E08083E0912701A0 +:10071000F09128011082E0912901F0912A0180E1F5 +:10072000808310923301E0912F01F091300186E037 +:100730008083E0912D01F0912E0180818061808382 +:10074000E0912D01F0912E01808188608083E091FD +:100750002D01F0912E01808180688083E0912D0130 +:10076000F0912E0180818F7D8083C6019C5FF60110 +:100770002FEF21938E179F07E1F78091B801909199 +:10078000B90181159440A8F0F12CE12CF601B1904B +:100790006F01C7010E94F403B81621F06B2DC70149 +:1007A0000E94FC03FFEFEF1AFF0AE11424E0F206B7 +:1007B00069F70FB6F8941EBF0FBE0DBF00E010E042 +:1007C00081E00E9487000E94F40080E00E94870080 +:1007D0000E94F4000115110599F30E9494018823E9 +:1007E00079F30E940000ECCFF999FECF92BD81BD54 +:1007F000F89A992780B50895262FF999FECF1FBA48 +:1008000092BD81BD20BD0FB6F894FA9AF99A0FBE39 +:1008100001960895EE0FFF1F0590F491E02D0994C5 +:04082000F894FFCF7A +:1008240000000000CA012A0157011702880166016D +:020834007A0147 +:00000001FF diff --git a/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json b/_Boards/RaspberryPi/Pico/raspberrypi_pico.board.json new file mode 100644 index 00000000..71df962f --- /dev/null +++ b/_Boards/RaspberryPi/Pico/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_000A"], + "Info": { + "CanInstallFirmware": true, + "CanResetBoard": true, + "FirmwareBaseName": "mobiflight_raspberrypico", + "FirmwareExtension": "uf2", + "FriendlyName": "Raspberry Pico", + "LatestFirmwareVersion": "2.5.1", + "MobiFlightType": "MobiFlight RaspiPico", + "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/_Boards/RaspberryPi/Pico/reset.raspberry_pico_flash_nuke.uf2 b/_Boards/RaspberryPi/Pico/reset.raspberry_pico_flash_nuke.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..31291e64cbc94f58b3f1e2b3ce822cf0518be383 GIT binary patch literal 25600 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 b37j{)64w@}aSnI_oyYu-?f Date: Wed, 17 Jan 2024 18:42:27 +0100 Subject: [PATCH 07/19] change github actions to add zip file --- .github/workflows/ci.yml | 6 ++---- .github/workflows/release.yml | 10 +++------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80211a3d..a5b5c2ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,7 +53,5 @@ jobs: - name: Archive production artifacts uses: actions/upload-artifact@v3 with: - name: firmware - path: | - .pio/build/**/*.hex - .pio/build/**/*.uf2 + name: ZIP files + path: ./_dist/*.zip diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ec8a0677..e8122997 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,16 +56,12 @@ jobs: - name: Archive production artifacts uses: actions/upload-artifact@v3 with: - name: firmware - path: | - .pio/build/**/*.hex - .pio/build/**/*.uf2 + name: ZIP files + path: ./_dist/*.zip - name: Release uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - files: | - .pio/build/**/*.hex - .pio/build/**/*.uf2 + files: ./_dist/*.zip From a79cdd81d051a9698da85b09f2b5962d305ebe8d Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:32:03 +0100 Subject: [PATCH 08/19] Revert "send kDebug instead of kInfo on generating serial" This reverts commit c56df66368ece00c580ab026ff49d10247268c2d. --- src/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.cpp b/src/Config.cpp index 1826fb13..2a4e87b6 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -590,7 +590,7 @@ void generateRandomSerial() randomSerial >>= 4; } MFeeprom.write_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); - cmdMessenger.sendCmd(kDebug, F("Serial number generated")); + cmdMessenger.sendCmd(kInfo, F("Serial number generated")); } #if defined(ARDUINO_ARCH_RP2040) From 633b26d6662b084b5bec8be7c2e86a9df32e55bb Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:32:26 +0100 Subject: [PATCH 09/19] Revert "send kInfo on generating serial" This reverts commit bdef94037edf156e0e1c2a07ca5a75837cbe3764. --- src/Config.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Config.cpp b/src/Config.cpp index 2a4e87b6..d36dbca6 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -590,7 +590,6 @@ void generateRandomSerial() randomSerial >>= 4; } MFeeprom.write_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); - cmdMessenger.sendCmd(kInfo, F("Serial number generated")); } #if defined(ARDUINO_ARCH_RP2040) From b13cefa6c4e2c220e975275ebf7617566e6fa4a9 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:41:04 +0100 Subject: [PATCH 10/19] Revert "send kDebug instead of kInfo on generating serial" This reverts commit c56df66368ece00c580ab026ff49d10247268c2d. --- src/Config.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Config.cpp b/src/Config.cpp index d36dbca6..2a4e87b6 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -590,6 +590,7 @@ void generateRandomSerial() randomSerial >>= 4; } MFeeprom.write_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); + cmdMessenger.sendCmd(kInfo, F("Serial number generated")); } #if defined(ARDUINO_ARCH_RP2040) From c11e00430780caa8a142df5a50f274d716402f3e Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:41:25 +0100 Subject: [PATCH 11/19] Revert "do not check for 0xFF for generating serial number" This reverts commit ee4d6e017b6cc926019d8cce2ddb0b49ec1f49a4. --- src/Config.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Config.cpp b/src/Config.cpp index 2a4e87b6..9d6a0b7e 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -641,16 +641,15 @@ void generateSerial(bool force) // used as starting point. It is very unlikely that the time between flashing the firmware // 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(); + if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) { + generateRandomSerial(); + } #elif defined(ARDUINO_ARCH_RP2040) // 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 MFeeprom.write_block(MEM_OFFSET_SERIAL, "ID", 2); #endif - if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) { - MFeeprom.write_block(MEM_OFFSET_CONFIG, 0x00); - } } void OnGenNewSerial() From ab88a379e971abe3f3769a6c43819fc4b9568d49 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:46:09 +0100 Subject: [PATCH 12/19] Revert "fixed missing return parameter" This reverts commit 89312e0f2c313b1568f43f4df325950e6d4e2711. --- src/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Config.cpp b/src/Config.cpp index 9d6a0b7e..82dd0b32 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -88,7 +88,7 @@ bool readConfigLength() configLength = 0; if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) - return false; + return; while (MFeeprom.read_byte(addreeprom++) != 0x00) { configLength++; if (addreeprom > length) { From 5d8293118027b94a390e123c8d9c9ea66064f1df Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:49:30 +0100 Subject: [PATCH 13/19] Revert "don save 0x00 to config, check for 0xFF before generating new serial" This reverts commit e8e06680aac325d2d55b41cb6b5786e1a452a73a. --- src/Config.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Config.cpp b/src/Config.cpp index 82dd0b32..df1f7354 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -87,8 +87,6 @@ bool readConfigLength() uint16_t length = MFeeprom.get_length(); configLength = 0; - if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) - return; while (MFeeprom.read_byte(addreeprom++) != 0x00) { configLength++; if (addreeprom > length) { @@ -622,17 +620,13 @@ void generateSerial(bool force) MFeeprom.read_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); return; } - +#if defined(ARDUINO_ARCH_RP2040) // A uniqueID is already generated and saved to the eeprom 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) readUniqueSerial(); -#endif return; } - +#endif // Coming here no UniqueID and no serial number is available, so it's the first start up of a board #if defined(ARDUINO_ARCH_AVR) @@ -640,16 +634,16 @@ void generateSerial(bool force) // To have not always the same starting point for the random generator, millis() are // used as starting point. It is very unlikely that the time between flashing the firmware // 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 - if (MFeeprom.read_byte(MEM_OFFSET_CONFIG) == 0xFF) { - generateRandomSerial(); - } + generateRandomSerial(); #elif defined(ARDUINO_ARCH_RP2040) // 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 MFeeprom.write_block(MEM_OFFSET_SERIAL, "ID", 2); #endif + // Set first byte of config to 0x00 to ensure empty config on 1st start up + // Otherwise the complete length of the config will be send with 0xFF (empty EEPROM) + MFeeprom.write_byte(MEM_OFFSET_CONFIG, 0x00); } void OnGenNewSerial() From d73b526187d6bc4841184675ea43c2a2268ce5e5 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:50:58 +0100 Subject: [PATCH 14/19] missing change to revert --- src/Config.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Config.cpp b/src/Config.cpp index df1f7354..69ca9e7a 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -588,7 +588,6 @@ void generateRandomSerial() randomSerial >>= 4; } MFeeprom.write_block(MEM_OFFSET_SERIAL, serial, MEM_LEN_SERIAL); - cmdMessenger.sendCmd(kInfo, F("Serial number generated")); } #if defined(ARDUINO_ARCH_RP2040) From fb0ebf56277fc0c239ab007320a4af410374f5f9 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 20:11:33 +0100 Subject: [PATCH 15/19] cean up of build script --- build/project.checksum | 1 - get_version.py | 28 ++++++++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) delete mode 100644 build/project.checksum diff --git a/build/project.checksum b/build/project.checksum deleted file mode 100644 index 2e559716..00000000 --- a/build/project.checksum +++ /dev/null @@ -1 +0,0 @@ -420cf51f97dfa8a041a6975d8620dc14c29d1fa0 \ No newline at end of file diff --git a/get_version.py b/get_version.py index d10d028e..283fb48b 100644 --- a/get_version.py +++ b/get_version.py @@ -2,6 +2,13 @@ import os, zipfile, shutil from pathlib import Path +zip_file_name = 'Mobiflight-Connector' +build_path = './_build' +build_path_fw = build_path + '/firmware' +build_path_json = build_path + '/Boards' +distrubution_path = './_dist' +source_folders = ['./_Boards'] + # Get the version number from the build environment. firmware_version = os.environ.get('VERSION', "") @@ -33,13 +40,6 @@ env.Replace(PROGNAME=f'{env["PIOENV"]}_{firmware_version.replace(".", "_")}') -zip_file_name = 'Mobiflight-Connector' -build_path = './_build' -build_path_fw = build_path + '/firmware' -build_path_json = build_path + '/Boards' -distrubution_path = './_dist' -source_folders = ['./_Boards'] - def copy_fw_files (source, target, env): fw_file_name=str(target[0]) @@ -50,9 +50,11 @@ def copy_fw_files (source, target, env): if fw_file_name[-3:] == "bin": fw_file_name=fw_file_name[0:-3] + "uf2" - + + # Copy build FW file shutil.copy(fw_file_name, build_path_fw) + # Copy reset/uf2/json files file_extension = '.hex' copy_files_by_extension(source_folders, build_path_fw, file_extension) file_extension = '.uf2' @@ -60,7 +62,10 @@ def copy_fw_files (source, target, env): file_extension = '.json' copy_files_by_extension(source_folders, build_path_json, file_extension) - createCommunityZipFile(source, target, env) + # Create ZIP file and add files from distrubution folder + zip_file_path = distrubution_path + '/' + zip_file_name + '_' + firmware_version + '.zip' + createZIP(build_path, zip_file_path, zip_file_name) + def copy_files_by_extension(source_folders, target_folder, file_extension): for source_folder in source_folders: @@ -71,11 +76,6 @@ def copy_files_by_extension(source_folders, target_folder, file_extension): target_path = os.path.join(target_folder, file) shutil.copy2(source_path, target_path) -def createCommunityZipFile(source, target, env): - original_folder_path = build_path - zip_file_path = distrubution_path + '/' + zip_file_name + '_' + firmware_version + '.zip' - new_folder_in_zip = zip_file_name - createZIP(original_folder_path, zip_file_path, new_folder_in_zip) def createZIP(original_folder_path, zip_file_path, new_folder_name): if os.path.exists(distrubution_path) == False: From e007599120dcfc2d55dd04d44147aab3774738e1 Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 20:34:23 +0100 Subject: [PATCH 16/19] zip file name changed for pull requests --- .github/workflows/pr_artifact_comment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr_artifact_comment.yml b/.github/workflows/pr_artifact_comment.yml index d22aff6e..ef310253 100644 --- a/.github/workflows/pr_artifact_comment.yml +++ b/.github/workflows/pr_artifact_comment.yml @@ -14,6 +14,6 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - prefix: "Firmware for this pull request:" - format: "[Firmware.zip]({url})" + prefix: "Board and firmware folder for this pull request:" + format: "[Mobiflight-Connector.zip]({url})" addTo: pull From 5c41797f1a804715795f201666a8a8a915903d1d Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Wed, 17 Jan 2024 21:03:10 +0100 Subject: [PATCH 17/19] restore mistakenly deleted file --- build/project.checksum | 1 + 1 file changed, 1 insertion(+) create mode 100644 build/project.checksum diff --git a/build/project.checksum b/build/project.checksum new file mode 100644 index 00000000..2e559716 --- /dev/null +++ b/build/project.checksum @@ -0,0 +1 @@ +420cf51f97dfa8a041a6975d8620dc14c29d1fa0 \ No newline at end of file From c6849a2f02e95a01c2872874c4c0f5fd1c3d70fa Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Thu, 18 Jan 2024 08:42:55 +0100 Subject: [PATCH 18/19] different sripts for get_version and copy_fw_files --- copy_fw_files.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 copy_fw_files.py diff --git a/copy_fw_files.py b/copy_fw_files.py new file mode 100644 index 00000000..dd4eaa32 --- /dev/null +++ b/copy_fw_files.py @@ -0,0 +1,69 @@ +Import("env") +import os, zipfile, shutil +from pathlib import Path + +# Get the version number from the build environment. +firmware_version = os.environ.get('VERSION', "") +if firmware_version == "": + firmware_version = "0.0.1" +firmware_version = firmware_version.lstrip("v") +firmware_version = firmware_version.strip(".") + +zip_file_name = 'Mobiflight-Connector' +build_path = './_build' +build_path_fw = build_path + '/firmware' +build_path_json = build_path + '/Boards' +distrubution_path = './_dist' +board_folder = ['./_Boards/Atmel', './_Boards/RaspberryPi'] + +def copy_fw_files (source, target, env): + fw_file_name=str(target[0]) + + if os.path.exists(build_path_fw) == False: + os.makedirs(build_path_fw) + if os.path.exists(build_path_json) == False: + os.makedirs(build_path_json) + + if fw_file_name[-3:] == "bin": + fw_file_name=fw_file_name[0:-3] + "uf2" + + # Copy build FW file + shutil.copy(fw_file_name, build_path_fw) + + # Copy reset/uf2/json files + file_extension = '.hex' + copy_files_by_extension(board_folder, build_path_fw, file_extension) + file_extension = '.uf2' + copy_files_by_extension(board_folder, build_path_fw, file_extension) + file_extension = '.json' + copy_files_by_extension(board_folder, build_path_json, file_extension) + + # Create ZIP file and add files from distrubution folder + zip_file_path = distrubution_path + '/' + zip_file_name + '_' + firmware_version + '.zip' + createZIP(build_path, zip_file_path, zip_file_name) + + +def copy_files_by_extension(source_folders, target_folder, file_extension): + for source_folder in source_folders: + for root, dirs, files in os.walk(source_folder): + for file in files: + if file.endswith(file_extension): + source_path = os.path.join(root, file) + target_path = os.path.join(target_folder, file) + shutil.copy2(source_path, target_path) + + +def createZIP(original_folder_path, zip_file_path, new_folder_name): + if os.path.exists(distrubution_path) == False: + os.mkdir(distrubution_path) + with zipfile.ZipFile(zip_file_path, 'w') as zipf: + for root, dirs, files in os.walk(original_folder_path): + for file in files: + # Create a new path in the ZIP file + new_path = os.path.join(new_folder_name, os.path.relpath(os.path.join(root, file), original_folder_path)) + # Add the file to the ZIP file + zipf.write(os.path.join(root, file), new_path) + + +env.AddPostAction("$BUILD_DIR/${PROGNAME}.hex", copy_fw_files) +env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", copy_fw_files) From 08ed12d34bd55d89c737354d41852e9a99a16f0c Mon Sep 17 00:00:00 2001 From: elral <3263285+elral@users.noreply.github.com> Date: Thu, 18 Jan 2024 08:43:29 +0100 Subject: [PATCH 19/19] different scripts for get_version and copy_fw_files --- get_version.py | 62 +------------------------------------------------- platformio.ini | 1 + 2 files changed, 2 insertions(+), 61 deletions(-) diff --git a/get_version.py b/get_version.py index 283fb48b..1daa0c87 100644 --- a/get_version.py +++ b/get_version.py @@ -1,13 +1,5 @@ Import("env") -import os, zipfile, shutil -from pathlib import Path - -zip_file_name = 'Mobiflight-Connector' -build_path = './_build' -build_path_fw = build_path + '/firmware' -build_path_json = build_path + '/Boards' -distrubution_path = './_dist' -source_folders = ['./_Boards'] +import os # Get the version number from the build environment. firmware_version = os.environ.get('VERSION', "") @@ -39,55 +31,3 @@ # Set the output filename to the name of the board and the version env.Replace(PROGNAME=f'{env["PIOENV"]}_{firmware_version.replace(".", "_")}') - -def copy_fw_files (source, target, env): - fw_file_name=str(target[0]) - - if os.path.exists(build_path_fw) == False: - os.makedirs(build_path_fw) - if os.path.exists(build_path_json) == False: - os.makedirs(build_path_json) - - if fw_file_name[-3:] == "bin": - fw_file_name=fw_file_name[0:-3] + "uf2" - - # Copy build FW file - shutil.copy(fw_file_name, build_path_fw) - - # Copy reset/uf2/json files - file_extension = '.hex' - copy_files_by_extension(source_folders, build_path_fw, file_extension) - file_extension = '.uf2' - copy_files_by_extension(source_folders, build_path_fw, file_extension) - file_extension = '.json' - copy_files_by_extension(source_folders, build_path_json, file_extension) - - # Create ZIP file and add files from distrubution folder - zip_file_path = distrubution_path + '/' + zip_file_name + '_' + firmware_version + '.zip' - createZIP(build_path, zip_file_path, zip_file_name) - - -def copy_files_by_extension(source_folders, target_folder, file_extension): - for source_folder in source_folders: - for root, dirs, files in os.walk(source_folder): - for file in files: - if file.endswith(file_extension): - source_path = os.path.join(root, file) - target_path = os.path.join(target_folder, file) - shutil.copy2(source_path, target_path) - - -def createZIP(original_folder_path, zip_file_path, new_folder_name): - if os.path.exists(distrubution_path) == False: - os.mkdir(distrubution_path) - with zipfile.ZipFile(zip_file_path, 'w') as zipf: - for root, dirs, files in os.walk(original_folder_path): - for file in files: - # Create a new path in the ZIP file - new_path = os.path.join(new_folder_name, os.path.relpath(os.path.join(root, file), original_folder_path)) - # Add the file to the ZIP file - zipf.write(os.path.join(root, file), new_path) - - -env.AddPostAction("$BUILD_DIR/${PROGNAME}.hex", copy_fw_files) -env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", copy_fw_files) diff --git a/platformio.ini b/platformio.ini index 5366ac0a..077b9de4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -62,6 +62,7 @@ build_src_filter = extra_scripts = pre:get_version.py pre:get_CustomDevices.py + copy_fw_files.py ; Build settings for the Arduino Mega [env:mobiflight_mega]