Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
500f197c02 | ||
|
|
2bf249ffe1 | ||
|
|
81070a0b3f | ||
|
|
d45a11f9e7 | ||
|
|
c3a3526aad | ||
|
|
280fc43731 | ||
|
|
762535faf9 | ||
|
|
0e4fd0587b | ||
|
|
d2461a14ad | ||
|
|
a1902b5f41 | ||
|
|
c2d60774af | ||
|
|
269c579846 | ||
|
|
91183ca22f | ||
|
|
971c235e8d | ||
|
|
abd3547711 | ||
|
|
9181ec055d | ||
|
|
58089b1f44 | ||
|
|
4f62e0a4ba | ||
|
|
dbab62c214 | ||
|
|
6a878cdee8 | ||
|
|
cebdb6c917 |
@@ -252,14 +252,14 @@ If you want to contribute or have bugfixes, drop me a note at <earlephilhower@ya
|
||||
* [UF2CONV.PY](https://github.com/microsoft/uf2) is by Microsoft Corporation and licensed under the MIT license.
|
||||
* Networking and filesystem code taken from the [ESP8266 Arduino Core](https://github.com/esp8266/Arduino) and licensed under the LGPL.
|
||||
* DHCP server for AP host mode from the [Micropython Project](https://micropython.org), distributed under the MIT License.
|
||||
* [FreeRTOS](https://freertos.org) is Copyright Amazon.com, Inc. or its affiliates, and distributed under the MIT license.
|
||||
* [FreeRTOS](https://freertos.org) is copyright Amazon.com, Inc. or its affiliates, and distributed under the MIT license.
|
||||
* [lwIP](https://savannah.nongnu.org/projects/lwip/) is (c) the Swedish Institute of Computer Science and licenced under the BSD license.
|
||||
* [BearSSL](https://bearssl.org) library written by Thomas Pornin, is distributed under the [MIT License](https://bearssl.org/#legal-details).
|
||||
* [UZLib](https://github.com/pfalcon/uzlib) is copyright (c) 2003 Joergen Ibsen and distributed under the zlib license.
|
||||
* [LEAmDNS](https://github.com/LaborEtArs/ESP8266mDNS) is copyright multiple authors and distributed under the MIT license.
|
||||
* [http-parser](https://github.com/nodejs/http-parser) is copyright Joyent, Inc. and other Node contributors.
|
||||
* WebServer code modified from the [ESP32 WebServer](https://github.com/espressif/arduino-esp32/tree/master/libraries/WebServer) and is copyright (c) 2015 Ivan Grokhotkov and others
|
||||
|
||||
* WebServer code modified from the [ESP32 WebServer](https://github.com/espressif/arduino-esp32/tree/master/libraries/WebServer) and is copyright (c) 2015 Ivan Grokhotkov and others.
|
||||
* [Xoshiro-cpp](https://github.com/Reputeless/Xoshiro-cpp) is copyright (c) 2020 Ryo Suzuki and distributed under the MIT license.
|
||||
|
||||
-Earle F. Philhower, III
|
||||
earlephilhower@yahoo.com
|
||||
|
||||
+200
@@ -5694,6 +5694,206 @@ cytron_maker_pi_rp2040.menu.uploadmethod.picodebug.upload.maximum_data_size=2457
|
||||
cytron_maker_pi_rp2040.menu.uploadmethod.picodebug.upload.tool=picodebug
|
||||
cytron_maker_pi_rp2040.menu.uploadmethod.picodebug.upload.tool.default=picodebug
|
||||
|
||||
# -----------------------------------
|
||||
# Cytron Maker UNO RP2040
|
||||
# -----------------------------------
|
||||
cytron_maker_uno_rp2040.name=Cytron Maker UNO RP2040
|
||||
cytron_maker_uno_rp2040.vid.0=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.0=0x1071
|
||||
cytron_maker_uno_rp2040.vid.1=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.1=0x1171
|
||||
cytron_maker_uno_rp2040.vid.2=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.2=0x5071
|
||||
cytron_maker_uno_rp2040.vid.3=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.3=0x5171
|
||||
cytron_maker_uno_rp2040.vid.4=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.4=0x9071
|
||||
cytron_maker_uno_rp2040.vid.5=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.5=0x9171
|
||||
cytron_maker_uno_rp2040.vid.6=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.6=0xd071
|
||||
cytron_maker_uno_rp2040.vid.7=0x2e8a
|
||||
cytron_maker_uno_rp2040.pid.7=0xd171
|
||||
cytron_maker_uno_rp2040.build.usbvid=-DUSBD_VID=0x2e8a
|
||||
cytron_maker_uno_rp2040.build.usbpid=-DUSBD_PID=0x1071
|
||||
cytron_maker_uno_rp2040.build.usbpwr=-DUSBD_MAX_POWER_MA=250
|
||||
cytron_maker_uno_rp2040.build.board=CYTRON_MAKER_UNO_RP2040
|
||||
cytron_maker_uno_rp2040.build.mcu=cortex-m0plus
|
||||
cytron_maker_uno_rp2040.build.variant=cytron_maker_uno_rp2040
|
||||
cytron_maker_uno_rp2040.upload.maximum_size=2097152
|
||||
cytron_maker_uno_rp2040.upload.wait_for_upload_port=true
|
||||
cytron_maker_uno_rp2040.upload.erase_cmd=
|
||||
cytron_maker_uno_rp2040.serial.disableDTR=false
|
||||
cytron_maker_uno_rp2040.serial.disableRTS=false
|
||||
cytron_maker_uno_rp2040.build.f_cpu=125000000
|
||||
cytron_maker_uno_rp2040.build.led=
|
||||
cytron_maker_uno_rp2040.build.core=rp2040
|
||||
cytron_maker_uno_rp2040.build.ldscript=memmap_default.ld
|
||||
cytron_maker_uno_rp2040.build.boot2=boot2_w25q080_2_padded_checksum
|
||||
cytron_maker_uno_rp2040.build.usb_manufacturer="Cytron"
|
||||
cytron_maker_uno_rp2040.build.usb_product="Maker UNO RP2040"
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_0=2MB (no FS)
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_0.upload.maximum_size=2093056
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_0.build.flash_total=2097152
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_0.build.flash_length=2093056
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_0.build.eeprom_start=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_0.build.fs_start=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_0.build.fs_end=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_65536=2MB (Sketch: 1984KB, FS: 64KB)
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_65536.upload.maximum_size=2027520
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_65536.build.flash_total=2097152
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_65536.build.flash_length=2027520
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_65536.build.eeprom_start=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_65536.build.fs_start=270462976
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_65536.build.fs_end=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_131072=2MB (Sketch: 1920KB, FS: 128KB)
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_131072.upload.maximum_size=1961984
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_131072.build.flash_total=2097152
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_131072.build.flash_length=1961984
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_131072.build.eeprom_start=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_131072.build.fs_start=270397440
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_131072.build.fs_end=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_262144=2MB (Sketch: 1792KB, FS: 256KB)
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_262144.upload.maximum_size=1830912
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_262144.build.flash_total=2097152
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_262144.build.flash_length=1830912
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_262144.build.eeprom_start=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_262144.build.fs_start=270266368
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_262144.build.fs_end=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_524288=2MB (Sketch: 1536KB, FS: 512KB)
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_524288.upload.maximum_size=1568768
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_524288.build.flash_total=2097152
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_524288.build.flash_length=1568768
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_524288.build.eeprom_start=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_524288.build.fs_start=270004224
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_524288.build.fs_end=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_1048576=2MB (Sketch: 1MB, FS: 1MB)
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_1048576.upload.maximum_size=1044480
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_1048576.build.flash_total=2097152
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_1048576.build.flash_length=1044480
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_1048576.build.eeprom_start=270528512
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_1048576.build.fs_start=269479936
|
||||
cytron_maker_uno_rp2040.menu.flash.2097152_1048576.build.fs_end=270528512
|
||||
cytron_maker_uno_rp2040.menu.freq.133=133 MHz
|
||||
cytron_maker_uno_rp2040.menu.freq.133.build.f_cpu=133000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.50=50 MHz
|
||||
cytron_maker_uno_rp2040.menu.freq.50.build.f_cpu=50000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.100=100 MHz
|
||||
cytron_maker_uno_rp2040.menu.freq.100.build.f_cpu=100000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.120=120 MHz
|
||||
cytron_maker_uno_rp2040.menu.freq.120.build.f_cpu=120000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.125=125 MHz
|
||||
cytron_maker_uno_rp2040.menu.freq.125.build.f_cpu=125000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.150=150 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.150.build.f_cpu=150000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.175=175 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.175.build.f_cpu=175000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.200=200 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.200.build.f_cpu=200000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.225=225 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.225.build.f_cpu=225000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.240=240 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.240.build.f_cpu=240000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.250=250 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.250.build.f_cpu=250000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.275=275 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.275.build.f_cpu=275000000L
|
||||
cytron_maker_uno_rp2040.menu.freq.300=300 MHz (Overclock)
|
||||
cytron_maker_uno_rp2040.menu.freq.300.build.f_cpu=300000000L
|
||||
cytron_maker_uno_rp2040.menu.opt.Small=Small (-Os) (standard)
|
||||
cytron_maker_uno_rp2040.menu.opt.Small.build.flags.optimize=-Os
|
||||
cytron_maker_uno_rp2040.menu.opt.Optimize=Optimize (-O)
|
||||
cytron_maker_uno_rp2040.menu.opt.Optimize.build.flags.optimize=-O
|
||||
cytron_maker_uno_rp2040.menu.opt.Optimize2=Optimize More (-O2)
|
||||
cytron_maker_uno_rp2040.menu.opt.Optimize2.build.flags.optimize=-O2
|
||||
cytron_maker_uno_rp2040.menu.opt.Optimize3=Optimize Even More (-O3)
|
||||
cytron_maker_uno_rp2040.menu.opt.Optimize3.build.flags.optimize=-O3
|
||||
cytron_maker_uno_rp2040.menu.opt.Fast=Fast (-Ofast) (maybe slower)
|
||||
cytron_maker_uno_rp2040.menu.opt.Fast.build.flags.optimize=-Ofast
|
||||
cytron_maker_uno_rp2040.menu.opt.Debug=Debug (-Og)
|
||||
cytron_maker_uno_rp2040.menu.opt.Debug.build.flags.optimize=-Og
|
||||
cytron_maker_uno_rp2040.menu.rtti.Disabled=Disabled
|
||||
cytron_maker_uno_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti
|
||||
cytron_maker_uno_rp2040.menu.rtti.Enabled=Enabled
|
||||
cytron_maker_uno_rp2040.menu.rtti.Enabled.build.flags.rtti=
|
||||
cytron_maker_uno_rp2040.menu.stackprotect.Disabled=Disabled
|
||||
cytron_maker_uno_rp2040.menu.stackprotect.Disabled.build.flags.stackprotect=
|
||||
cytron_maker_uno_rp2040.menu.stackprotect.Enabled=Enabled
|
||||
cytron_maker_uno_rp2040.menu.stackprotect.Enabled.build.flags.stackprotect=-fstack-protector
|
||||
cytron_maker_uno_rp2040.menu.exceptions.Disabled=Disabled
|
||||
cytron_maker_uno_rp2040.menu.exceptions.Disabled.build.flags.exceptions=-fno-exceptions
|
||||
cytron_maker_uno_rp2040.menu.exceptions.Disabled.build.flags.libstdcpp=-lstdc++
|
||||
cytron_maker_uno_rp2040.menu.exceptions.Enabled=Enabled
|
||||
cytron_maker_uno_rp2040.menu.exceptions.Enabled.build.flags.exceptions=-fexceptions
|
||||
cytron_maker_uno_rp2040.menu.exceptions.Enabled.build.flags.libstdcpp=-lstdc++-exc
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Disabled=Disabled
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Disabled.build.debug_port=
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Serial=Serial
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Serial.build.debug_port=-DDEBUG_RP2040_PORT=Serial
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Serial1=Serial1
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Serial1.build.debug_port=-DDEBUG_RP2040_PORT=Serial1
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Serial2=Serial2
|
||||
cytron_maker_uno_rp2040.menu.dbgport.Serial2.build.debug_port=-DDEBUG_RP2040_PORT=Serial2
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.None=None
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.None.build.debug_level=
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.Core=Core
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.Core.build.debug_level=-DDEBUG_RP2040_CORE
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.SPI=SPI
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.SPI.build.debug_level=-DDEBUG_RP2040_SPI
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.Wire=Wire
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.Wire.build.debug_level=-DDEBUG_RP2040_WIRE
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.Bluetooth=Bluetooth
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.Bluetooth.build.debug_level=-DDEBUG_RP2040_BLUETOOTH
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.All=All
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.All.build.debug_level=-DDEBUG_RP2040_WIRE -DDEBUG_RP2040_SPI -DDEBUG_RP2040_CORE -DDEBUG_RP2040_BLUETOOTH
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.NDEBUG=NDEBUG
|
||||
cytron_maker_uno_rp2040.menu.dbglvl.NDEBUG.build.debug_level=-DNDEBUG
|
||||
cytron_maker_uno_rp2040.menu.usbstack.picosdk=Pico SDK
|
||||
cytron_maker_uno_rp2040.menu.usbstack.picosdk.build.usbstack_flags=
|
||||
cytron_maker_uno_rp2040.menu.usbstack.tinyusb=Adafruit TinyUSB
|
||||
cytron_maker_uno_rp2040.menu.usbstack.tinyusb.build.usbstack_flags=-DUSE_TINYUSB "-I{runtime.platform.path}/libraries/Adafruit_TinyUSB_Arduino/src/arduino"
|
||||
cytron_maker_uno_rp2040.menu.usbstack.nousb=No USB
|
||||
cytron_maker_uno_rp2040.menu.usbstack.nousb.build.usbstack_flags="-DNO_USB -DDISABLE_USB_SERIAL -I{runtime.platform.path}/tools/libpico"
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4only=IPv4 Only
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4only.build.libpicow=libpicow-noipv6-nobtc-noble.a
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4only.build.libpicowdefs=-DLWIP_IPV6=0 -DLWIP_IPV4=1
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4ipv6=IPv4 + IPv6
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4ipv6.build.libpicow=libpicow-ipv6-nobtc-noble.a
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4ipv6.build.libpicowdefs=-DLWIP_IPV6=1 -DLWIP_IPV4=1
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4btcble=IPv4 + Bluetooth
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4btcble.build.libpicow=libpicow-noipv6-btc-ble.a
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4btcble.build.libpicowdefs=-DLWIP_IPV6=0 -DLWIP_IPV4=1 -DENABLE_CLASSIC=1 -DENABLE_BLE=1
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4ipv6btcble=IPv4 + IPv6 + Bluetooth
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4ipv6btcble.build.libpicow=libpicow-ipv6-btc-ble.a
|
||||
cytron_maker_uno_rp2040.menu.ipbtstack.ipv4ipv6btcble.build.libpicowdefs=-DLWIP_IPV6=1 -DLWIP_IPV4=1 -DENABLE_CLASSIC=1 -DENABLE_BLE=1
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.default=Default (UF2)
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.default.build.ram_length=256k
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.default.build.debugscript=picoprobe_cmsis_dap.tcl
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.default.upload.maximum_data_size=262144
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.default.upload.tool=uf2conv
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.default.upload.tool.default=uf2conv
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.default.upload.tool.network=uf2conv-network
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picotool=Picotool
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picotool.build.ram_length=256k
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picotool.build.debugscript=picoprobe.tcl
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picotool.build.picodebugflags=-DENABLE_PICOTOOL_USB
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picotool.upload.maximum_data_size=262144
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picotool.upload.tool=picotool
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picotool.upload.tool.default=picotool
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picoprobe_cmsis_dap=Picoprobe (CMSIS-DAP)
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picoprobe_cmsis_dap.build.ram_length=256k
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picoprobe_cmsis_dap.build.debugscript=picoprobe_cmsis_dap.tcl
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picoprobe_cmsis_dap.upload.maximum_data_size=262144
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picoprobe_cmsis_dap.upload.tool=picoprobe_cmsis_dap
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picoprobe_cmsis_dap.upload.tool.default=picoprobe_cmsis_dap
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picodebug=Pico-Debug
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picodebug.build.ram_length=240k
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picodebug.build.debugscript=picodebug.tcl
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picodebug.build.picodebugflags=-UUSE_TINYUSB -DNO_USB -DDISABLE_USB_SERIAL -I{runtime.platform.path}/tools/libpico
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picodebug.upload.maximum_data_size=245760
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picodebug.upload.tool=picodebug
|
||||
cytron_maker_uno_rp2040.menu.uploadmethod.picodebug.upload.tool.default=picodebug
|
||||
|
||||
# -----------------------------------
|
||||
# DatanoiseTV PicoADK
|
||||
# -----------------------------------
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#pragma once
|
||||
#define ARDUINO_PICO_MAJOR 3
|
||||
#define ARDUINO_PICO_MINOR 6
|
||||
#define ARDUINO_PICO_REVISION 1
|
||||
#define ARDUINO_PICO_VERSION_STR "3.6.1"
|
||||
#define ARDUINO_PICO_REVISION 2
|
||||
#define ARDUINO_PICO_VERSION_STR "3.6.2"
|
||||
|
||||
@@ -60,45 +60,3 @@ SemaphoreHandle_t __get_freertos_mutex_for_ptr(mutex_t *m, bool recursive) {
|
||||
}
|
||||
return nullptr; // Need to make space for more mutex maps!
|
||||
}
|
||||
|
||||
|
||||
// The HW Random code needs a precise sleep_until() in order to assure it
|
||||
// grabs the ROSC bit when it wants. Unfortunately, under FreeRTOS the
|
||||
// sleep_until() becomes imprecise and the "did I get the bit when I wanted"
|
||||
// check in the pico_rand code always fails and you get an infinite loop.
|
||||
|
||||
// This block wraps the 2 get_rand calls to set a flag to convert
|
||||
// sleep_until() (which can do a task swap and cause bad timing) into a
|
||||
// busy wait.
|
||||
|
||||
extern "C" {
|
||||
static bool __inRand = false;
|
||||
|
||||
extern uint64_t __real_get_rand_64();
|
||||
uint64_t __wrap_get_rand_64() {
|
||||
if (__isFreeRTOS) {
|
||||
rp2040.idleOtherCore();
|
||||
__inRand = true;
|
||||
auto r = __real_get_rand_64();
|
||||
__inRand = false;
|
||||
rp2040.resumeOtherCore();
|
||||
return r;
|
||||
} else {
|
||||
return __real_get_rand_64();
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t __wrap_get_rand_32() {
|
||||
return (uint32_t) __wrap_get_rand_64();
|
||||
}
|
||||
|
||||
extern void __real_sleep_until(absolute_time_t t);
|
||||
void __wrap_sleep_until(absolute_time_t t) {
|
||||
if (__inRand) {
|
||||
busy_wait_until(t);
|
||||
} else {
|
||||
__real_sleep_until(t);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,6 +29,7 @@
|
||||
#include <pico/cyw43_arch.h>
|
||||
#include <pico/mutex.h>
|
||||
#include <sys/lock.h>
|
||||
#include "_xoshiro.h"
|
||||
|
||||
extern void ethernet_arch_lwip_begin() __attribute__((weak));
|
||||
extern void ethernet_arch_lwip_end() __attribute__((weak));
|
||||
@@ -68,11 +69,25 @@ public:
|
||||
|
||||
extern "C" {
|
||||
|
||||
static XoshiroCpp::Xoshiro256PlusPlus *_lwip_rng = nullptr;
|
||||
// Random number generator for LWIP. Bare metal, use the HW. FreeRTOS, use xoshiro generator to avoid needing to freeze the other core
|
||||
unsigned long __lwip_rand() {
|
||||
if (__isFreeRTOS) {
|
||||
return (unsigned long)(*_lwip_rng)();
|
||||
} else {
|
||||
return get_rand_32();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Avoid calling lwip_init multiple times
|
||||
extern void __real_lwip_init();
|
||||
void __wrap_lwip_init() {
|
||||
static bool initted = false;
|
||||
if (!initted) {
|
||||
if (__isFreeRTOS) {
|
||||
_lwip_rng = new XoshiroCpp::Xoshiro256PlusPlus(rp2040.getCycleCount());
|
||||
}
|
||||
__real_lwip_init();
|
||||
initted = true;
|
||||
}
|
||||
|
||||
@@ -66,10 +66,14 @@ typedef enum {
|
||||
} wl_status_t;
|
||||
|
||||
/* Encryption modes */
|
||||
enum wl_enc_type { /* Values map to 802.11 encryption suites... */
|
||||
enum wl_enc_type { /* Values map to 802.11 Cipher Algorithm Identifier */
|
||||
ENC_TYPE_WEP = 5,
|
||||
ENC_TYPE_TKIP = 2,
|
||||
ENC_TYPE_WPA = ENC_TYPE_TKIP,
|
||||
ENC_TYPE_CCMP = 4,
|
||||
ENC_TYPE_WPA2 = ENC_TYPE_CCMP,
|
||||
ENC_TYPE_GCMP = 6,
|
||||
ENC_TYPE_WPA3 = ENC_TYPE_GCMP,
|
||||
/* ... except these two, 7 and 8 are reserved in 802.11-2007 */
|
||||
ENC_TYPE_NONE = 7,
|
||||
ENC_TYPE_AUTO = 8,
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ Analog Outputs
|
||||
--------------
|
||||
The RP2040 does not have any onboard DACs, so analog outputs are
|
||||
simulated using the standard method of using pulse width modulation
|
||||
(PWM) using the RP20400's hardware PWM units.
|
||||
(PWM) using the RP2040's hardware PWM units.
|
||||
|
||||
While up to 16 PWM channels can be generated, they are not independent
|
||||
and there are significant restrictions as to allowed pins in parallel.
|
||||
|
||||
+2
-2
@@ -54,9 +54,9 @@ author = u'Earle F. Philhower, III'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = u'3.6.1'
|
||||
version = u'3.6.2'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = u'3.6.1'
|
||||
release = u'3.6.2'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
+2
-3
@@ -191,7 +191,7 @@ Debug Level
|
||||
Done again by directly adding the needed `build
|
||||
flags <https://github.com/earlephilhower/arduino-pico/blob/05356da2c5552413a442f742e209c6fa92823666/boards.txt#L104-L114>`__.
|
||||
When wanting to define multiple build flags, they must be accumulated in
|
||||
either a sing line or a newline-separated expression.
|
||||
either a single line or a newline-separated expression.
|
||||
|
||||
.. code:: ini
|
||||
|
||||
@@ -397,5 +397,4 @@ The task "Build Filesystem Image" will take all files in the data directory and
|
||||
The task "Upload Filesystem Image" will upload the filesystem image to the Pico via the specified ``upload_protocol``.
|
||||
|
||||
.. note::
|
||||
Set the space available for the filesystem in the ``platformio.ini`` using e.g., ``board_build.filesystem_size = 0.5m``, or filesystem
|
||||
creation will fail!
|
||||
Set the space available for the filesystem in the ``platformio.ini`` using e.g., ``board_build.filesystem_size = 0.5m``, or filesystem creation will fail!
|
||||
|
||||
+3
-1
@@ -42,7 +42,9 @@ Please note that WiFi on the Pico W is a work-in-progress and there are some imp
|
||||
|
||||
* Multicore is supported, but only core 0 may run ``WiFi`` related code.
|
||||
|
||||
* FreeRTOS is supported only on core 0 and from within ``setup`` and ``loop`, not tasks, due to the requirement for a very different LWIP implementation. PRs always appreciated!
|
||||
* FreeRTOS is supported only on core 0 and from within ``setup`` and ``loop``, not tasks, due to the requirement for a very different LWIP implementation. PRs always appreciated!
|
||||
|
||||
* LEAmDNS (``MDNS``) is not supported in FreeRTOS due to internal IRQ-time memory allocations.
|
||||
|
||||
The WiFi library borrows much work from the `ESP8266 Arduino Core <https://github.com/esp8266/Arduino>`__ , especially the ``WiFiClient`` and ``WiFiServer`` classes.
|
||||
|
||||
|
||||
+2
-2
@@ -13,8 +13,8 @@ extern void interrupts();
|
||||
#define SYS_ARCH_PROTECT(lev) noInterrupts
|
||||
#define SYS_ARCH_UNPROTECT(lev) interrupts
|
||||
|
||||
extern unsigned long get_rand_32(void);
|
||||
#define LWIP_RAND() get_rand_32()
|
||||
extern unsigned long __lwip_rand(void);
|
||||
#define LWIP_RAND() __lwip_rand()
|
||||
|
||||
// Common settings used in most of the pico_w examples
|
||||
// (see https://www.nongnu.org/lwip/2_1_x/group__lwip__opts.html for details)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -209,7 +209,3 @@
|
||||
-Wl,--wrap=cyw43_tcpip_link_status
|
||||
-Wl,--wrap=cyw43_cb_tcpip_init
|
||||
-Wl,--wrap=cyw43_cb_tcpip_deinit
|
||||
|
||||
-Wl,--wrap=get_rand_64
|
||||
-Wl,--wrap=get_rand_32
|
||||
-Wl,--wrap=sleep_until
|
||||
|
||||
@@ -165,14 +165,14 @@ static void __no_inline_not_in_flash_func(IdleThisCore)(void *param) {
|
||||
(void) param;
|
||||
while (true) {
|
||||
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
||||
vTaskPreemptionDisable(nullptr);
|
||||
portDISABLE_INTERRUPTS();
|
||||
vTaskPreemptionDisable(nullptr);
|
||||
__otherCoreIdled = true;
|
||||
while (__otherCoreIdled) {
|
||||
/* noop */
|
||||
}
|
||||
portENABLE_INTERRUPTS();
|
||||
vTaskPreemptionEnable(nullptr);
|
||||
portENABLE_INTERRUPTS();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,9 +188,9 @@ extern "C" void __no_inline_not_in_flash_func(__freertos_idle_other_core)() {
|
||||
|
||||
extern "C" void __no_inline_not_in_flash_func(__freertos_resume_other_core)() {
|
||||
__otherCoreIdled = false;
|
||||
portENABLE_INTERRUPTS();
|
||||
xTaskResumeAll();
|
||||
vTaskPreemptionEnable(nullptr);
|
||||
portENABLE_INTERRUPTS();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ bool MDNSResponder::_allocUDPContext(void) {
|
||||
|
||||
if (m_pUDPContext->listen(IP4_ADDR_ANY, DNS_MQUERY_PORT)) {
|
||||
m_pUDPContext->setMulticastTTL(MDNS_MULTICAST_TTL);
|
||||
m_pUDPContext->onRx(std::bind(&MDNSResponder::_callProcess, this));
|
||||
m_pUDPContext->onRx([this] { this->_callProcess(); });
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ beginTransaction KEYWORD2
|
||||
endTransaction KEYWORD2
|
||||
SPISettings KEYWORD2
|
||||
transfer KEYWORD2
|
||||
transfer16 KEYWORD2
|
||||
setBitOrder KEYWORD2
|
||||
setDataMode KEYWORD2
|
||||
setClockDivider KEYWORD2
|
||||
|
||||
@@ -111,6 +111,7 @@ byte SPIClassRP2040::transfer(uint8_t data) {
|
||||
}
|
||||
data = (_spis.getBitOrder() == MSBFIRST) ? data : reverseByte(data);
|
||||
DEBUGSPI("SPI::transfer(%02x), cpol=%d, cpha=%d\n", data, cpol(), cpha());
|
||||
hw_write_masked(&spi_get_hw(_spi)->cr0, (8 - 1) << SPI_SSPCR0_DSS_LSB, SPI_SSPCR0_DSS_BITS); // Fast set to 8-bits
|
||||
spi_write_read_blocking(_spi, &data, &ret, 1);
|
||||
ret = (_spis.getBitOrder() == MSBFIRST) ? ret : reverseByte(ret);
|
||||
DEBUGSPI("SPI: read back %02x\n", ret);
|
||||
@@ -124,11 +125,8 @@ uint16_t SPIClassRP2040::transfer16(uint16_t data) {
|
||||
}
|
||||
data = (_spis.getBitOrder() == MSBFIRST) ? data : reverse16Bit(data);
|
||||
DEBUGSPI("SPI::transfer16(%04x), cpol=%d, cpha=%d\n", data, cpol(), cpha());
|
||||
uint8_t d[2];
|
||||
d[0] = (data >> 8) & 0xff;
|
||||
d[1] = data & 0xff;
|
||||
spi_write_read_blocking(_spi, d, d, 2);
|
||||
ret = ((d[0] << 8) | (d[1] & 0xff)) & 0xffff;
|
||||
hw_write_masked(&spi_get_hw(_spi)->cr0, (16 - 1) << SPI_SSPCR0_DSS_LSB, SPI_SSPCR0_DSS_BITS); // Fast set to 16-bits
|
||||
spi_write16_read16_blocking(_spi, &data, &ret, 1);
|
||||
ret = (_spis.getBitOrder() == MSBFIRST) ? ret : reverse16Bit(ret);
|
||||
DEBUGSPI("SPI: read back %02x\n", ret);
|
||||
return ret;
|
||||
@@ -149,6 +147,8 @@ void SPIClassRP2040::transfer(const void *txbuf, void *rxbuf, size_t count) {
|
||||
return;
|
||||
}
|
||||
|
||||
hw_write_masked(&spi_get_hw(_spi)->cr0, (8 - 1) << SPI_SSPCR0_DSS_LSB, SPI_SSPCR0_DSS_BITS); // Fast set to 8-bits
|
||||
|
||||
DEBUGSPI("SPI::transfer(%p, %p, %d)\n", txbuf, rxbuf, count);
|
||||
const uint8_t *txbuff = reinterpret_cast<const uint8_t *>(txbuf);
|
||||
uint8_t *rxbuff = reinterpret_cast<uint8_t *>(rxbuf);
|
||||
@@ -205,7 +205,7 @@ void SPIClassRP2040::beginTransaction(SPISettings settings) {
|
||||
io_rw_32 *en_reg = &irq_ctrl_base->inte[gpio / 8];
|
||||
uint32_t val = ((*en_reg) >> (4 * (gpio % 8))) & 0xf;
|
||||
_usingIRQs.insert_or_assign(gpio, val);
|
||||
DEBUGSPI("SPI: GPIO %d = %d\n", gpio, val);
|
||||
DEBUGSPI("SPI: GPIO %d = %lu\n", gpio, val);
|
||||
(*en_reg) ^= val << (4 * (gpio % 8));
|
||||
}
|
||||
DEBUGSPI("SPI: IRQ masks after = %08x %08x %08x %08x\n", (unsigned)irq_ctrl_base->inte[0], (unsigned)irq_ctrl_base->inte[1], (unsigned)irq_ctrl_base->inte[2], (unsigned)irq_ctrl_base->inte[3]);
|
||||
@@ -363,5 +363,10 @@ void SPIClassRP2040::setClockDivider(uint8_t uc_div) {
|
||||
#define __SPI1_DEVICE spi1
|
||||
#endif
|
||||
|
||||
#ifdef PIN_SPI0_MISO
|
||||
SPIClassRP2040 SPI(__SPI0_DEVICE, PIN_SPI0_MISO, PIN_SPI0_SS, PIN_SPI0_SCK, PIN_SPI0_MOSI);
|
||||
#endif
|
||||
|
||||
#ifdef PIN_SPI1_MISO
|
||||
SPIClassRP2040 SPI1(__SPI1_DEVICE, PIN_SPI1_MISO, PIN_SPI1_SS, PIN_SPI1_SCK, PIN_SPI1_MOSI);
|
||||
#endif
|
||||
|
||||
@@ -90,7 +90,7 @@ void WebServerTemplate<ServerType, DefaultPort>::handleClient() {
|
||||
_currentClient = nullptr;
|
||||
}
|
||||
|
||||
_currentClient = new ClientType(_server.available());
|
||||
_currentClient = new ClientType(_server.accept());
|
||||
if (!_currentClient) {
|
||||
if (_nullDelay) {
|
||||
delay(1);
|
||||
|
||||
@@ -34,7 +34,7 @@ void loop() {
|
||||
delay(1000);
|
||||
Serial.printf("--loop %d\n", ++i);
|
||||
delay(10);
|
||||
WiFiClient client = server.available();
|
||||
WiFiClient client = server.accept();
|
||||
if (!client) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ bool WiFiClass::connected() {
|
||||
param local_ip: Static ip configuration
|
||||
*/
|
||||
void WiFiClass::config(IPAddress local_ip) {
|
||||
ip4_addr_set_u32(ip_2_ip4(&_wifi.getNetIf()->ip_addr), local_ip.v4());
|
||||
_wifi.config(local_ip);
|
||||
}
|
||||
|
||||
/* Change Ip configuration settings disabling the dhcp client
|
||||
@@ -202,8 +202,7 @@ void WiFiClass::config(IPAddress local_ip) {
|
||||
param dns_server: IP configuration for DNS server 1
|
||||
*/
|
||||
void WiFiClass::config(IPAddress local_ip, IPAddress dns_server) {
|
||||
ip4_addr_set_u32(ip_2_ip4(&_wifi.getNetIf()->ip_addr), local_ip.v4());
|
||||
dns_setserver(0, dns_server);
|
||||
_wifi.config(local_ip, dns_server);
|
||||
}
|
||||
|
||||
/* Change Ip configuration settings disabling the dhcp client
|
||||
@@ -213,9 +212,7 @@ void WiFiClass::config(IPAddress local_ip, IPAddress dns_server) {
|
||||
param gateway : Static gateway configuration
|
||||
*/
|
||||
void WiFiClass::config(IPAddress local_ip, IPAddress dns_server, IPAddress gateway) {
|
||||
ip4_addr_set_u32(ip_2_ip4(&_wifi.getNetIf()->ip_addr), local_ip.v4());
|
||||
dns_setserver(0, dns_server);
|
||||
ip4_addr_set_u32(ip_2_ip4(&_wifi.getNetIf()->gw), gateway.v4());
|
||||
_wifi.config(local_ip, dns_server, gateway);
|
||||
}
|
||||
|
||||
/* Change Ip configuration settings disabling the dhcp client
|
||||
@@ -326,6 +323,15 @@ IPAddress WiFiClass::gatewayIP() {
|
||||
return _wifi.gatewayIP();
|
||||
}
|
||||
|
||||
/*
|
||||
Get the DNS ip address.
|
||||
|
||||
return: IPAddress DNS Server IP
|
||||
*/
|
||||
IPAddress WiFiClass::dnsIP(uint8_t dns_no) {
|
||||
return _wifi.dnsIP(dns_no);
|
||||
}
|
||||
|
||||
/*
|
||||
Return the current SSID associated with the network
|
||||
|
||||
|
||||
@@ -261,6 +261,13 @@ public:
|
||||
*/
|
||||
IPAddress gatewayIP();
|
||||
|
||||
/*
|
||||
Get the DNS ip address.
|
||||
|
||||
return: IPAddress DNS Server IP
|
||||
*/
|
||||
IPAddress dnsIP(uint8_t dns_no = 0);
|
||||
|
||||
/*
|
||||
Return the current SSID associated with the network
|
||||
|
||||
|
||||
@@ -58,6 +58,15 @@ bool WiFiMulti::addAP(const char *ssid, const char *pass) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void WiFiMulti::clearAPList() {
|
||||
while (!_list.empty()) {
|
||||
struct _AP ap = _list.front();
|
||||
_list.pop_front();
|
||||
free(ap.ssid);
|
||||
free(ap.pass);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t WiFiMulti::run(uint32_t to) {
|
||||
struct _scanAP {
|
||||
char *ssid;
|
||||
|
||||
@@ -32,6 +32,8 @@ public:
|
||||
|
||||
bool addAP(const char *ssid, const char *pass = nullptr);
|
||||
|
||||
void clearAPList();
|
||||
|
||||
uint8_t run(uint32_t to = 10000);
|
||||
|
||||
private:
|
||||
|
||||
@@ -163,10 +163,18 @@ void WiFiServer::close() {
|
||||
_listen_pcb = nullptr;
|
||||
}
|
||||
|
||||
void WiFiServer::end() {
|
||||
close();
|
||||
}
|
||||
|
||||
void WiFiServer::stop() {
|
||||
close();
|
||||
}
|
||||
|
||||
WiFiServer::operator bool() {
|
||||
return (status() != CLOSED);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T* slist_append_tail(T* head, T* item) {
|
||||
if (!head) {
|
||||
|
||||
@@ -75,10 +75,10 @@ protected:
|
||||
|
||||
public:
|
||||
WiFiServer(const IPAddress& addr, uint16_t port);
|
||||
WiFiServer(uint16_t port);
|
||||
WiFiServer(uint16_t port = 23);
|
||||
virtual ~WiFiServer() {}
|
||||
WiFiClient accept(); // https://www.arduino.cc/en/Reference/EthernetServerAccept
|
||||
WiFiClient available(uint8_t* status = nullptr);
|
||||
WiFiClient available(uint8_t* status = nullptr) __attribute__((deprecated("Use accept().")));
|
||||
|
||||
bool hasClient();
|
||||
// hasClientData():
|
||||
@@ -95,8 +95,10 @@ public:
|
||||
bool getNoDelay();
|
||||
uint8_t status();
|
||||
uint16_t port() const;
|
||||
void end();
|
||||
void close();
|
||||
void stop();
|
||||
explicit operator bool();
|
||||
|
||||
using ClientType = WiFiClient;
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ class WiFiClientSecure;
|
||||
class WiFiServerSecure : public WiFiServer {
|
||||
public:
|
||||
WiFiServerSecure(IPAddress addr, uint16_t port);
|
||||
WiFiServerSecure(uint16_t port);
|
||||
WiFiServerSecure(uint16_t port = 22);
|
||||
WiFiServerSecure(const WiFiServerSecure &rhs);
|
||||
virtual ~WiFiServerSecure();
|
||||
|
||||
@@ -65,7 +65,7 @@ public:
|
||||
|
||||
// If awaiting connection available and authenticated (i.e. client cert), return it.
|
||||
WiFiClientSecure accept(); // https://www.arduino.cc/en/Reference/EthernetServerAccept
|
||||
WiFiClientSecure available(uint8_t* status = nullptr);
|
||||
WiFiClientSecure available(uint8_t* status = nullptr) __attribute__((deprecated("Use accept().")));
|
||||
|
||||
WiFiServerSecure& operator=(const WiFiServerSecure&) = default;
|
||||
|
||||
|
||||
@@ -470,5 +470,10 @@ void TwoWire::clearTimeoutFlag() {
|
||||
#define __WIRE1_DEVICE i2c1
|
||||
#endif
|
||||
|
||||
#ifdef PIN_WIRE0_SDA
|
||||
TwoWire Wire(__WIRE0_DEVICE, PIN_WIRE0_SDA, PIN_WIRE0_SCL);
|
||||
#endif
|
||||
|
||||
#ifdef PIN_WIRE1_SDA
|
||||
TwoWire Wire1(__WIRE1_DEVICE, PIN_WIRE1_SDA, PIN_WIRE1_SCL);
|
||||
#endif
|
||||
|
||||
@@ -31,7 +31,6 @@ bool __ethernetContextInitted = false;
|
||||
|
||||
// Async context that pumps the ethernet controllers
|
||||
static async_context_threadsafe_background_t lwip_ethernet_async_context_threadsafe_background;
|
||||
static async_when_pending_worker_t always_pending_update_timeout_worker;
|
||||
static async_at_time_worker_t ethernet_timeout_worker;
|
||||
|
||||
static async_context_t *_context = nullptr;
|
||||
@@ -129,8 +128,9 @@ static async_context_t *lwip_ethernet_init_default_async_context(void) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static uint32_t _pollingPeriod = 20;
|
||||
// This will only be called under the protection of the async context mutex, so no re-entrancy checks needed
|
||||
static void ethernet_timeout_reached(__unused async_context_t *context, __unused async_at_time_worker_t *worker) {
|
||||
static void ethernet_timeout_reached(async_context_t *context, __unused async_at_time_worker_t *worker) {
|
||||
assert(worker == ðernet_timeout_worker);
|
||||
for (auto handlePacket : _handlePacketList) {
|
||||
handlePacket.second();
|
||||
@@ -142,12 +142,6 @@ static void ethernet_timeout_reached(__unused async_context_t *context, __unused
|
||||
#else
|
||||
sys_check_timeouts();
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint32_t _pollingPeriod = 20;
|
||||
static void update_next_timeout(async_context_t *context, async_when_pending_worker_t *worker) {
|
||||
assert(worker == &always_pending_update_timeout_worker);
|
||||
worker->work_pending = true;
|
||||
async_context_add_at_time_worker_in_ms(context, ðernet_timeout_worker, _pollingPeriod);
|
||||
}
|
||||
|
||||
@@ -164,10 +158,8 @@ void __startEthernetContext() {
|
||||
#else
|
||||
_context = lwip_ethernet_init_default_async_context();
|
||||
#endif
|
||||
always_pending_update_timeout_worker.work_pending = true;
|
||||
always_pending_update_timeout_worker.do_work = update_next_timeout;
|
||||
ethernet_timeout_worker.do_work = ethernet_timeout_reached;
|
||||
async_context_add_when_pending_worker(_context, &always_pending_update_timeout_worker);
|
||||
async_context_add_at_time_worker_in_ms(_context, ðernet_timeout_worker, _pollingPeriod);
|
||||
__ethernetContextInitted = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,9 +61,14 @@ public:
|
||||
memset(&_netif, 0, sizeof(_netif));
|
||||
}
|
||||
|
||||
//The argument order for ESP is not the same as for Arduino. However, there is compatibility code under the hood
|
||||
//to detect Arduino arg order, and handle it correctly.
|
||||
bool config(const IPAddress& local_ip, const IPAddress& arg1, const IPAddress& arg2,
|
||||
const IPAddress& arg3 = IPADDR_NONE, const IPAddress& dns2 = IPADDR_NONE);
|
||||
|
||||
// two and one parameter version. 2nd parameter is DNS like in Arduino. IPv4 only
|
||||
boolean config(IPAddress local_ip, IPAddress dns = IPADDR_NONE);
|
||||
|
||||
// default mac-address is inferred from esp8266's STA interface
|
||||
bool begin(const uint8_t* macAddress = nullptr, const uint16_t mtu = DEFAULT_MTU);
|
||||
|
||||
@@ -73,6 +78,10 @@ public:
|
||||
return &_netif;
|
||||
}
|
||||
|
||||
uint8_t* macAddress(uint8_t* mac) {
|
||||
memcpy(mac, &_netif.hwaddr, 6);
|
||||
return mac;
|
||||
}
|
||||
IPAddress localIP() const {
|
||||
return IPAddress(ip4_addr_get_u32(ip_2_ip4(&_netif.ip_addr)));
|
||||
}
|
||||
@@ -82,6 +91,17 @@ public:
|
||||
IPAddress gatewayIP() const {
|
||||
return IPAddress(ip4_addr_get_u32(ip_2_ip4(&_netif.gw)));
|
||||
}
|
||||
IPAddress dnsIP(int n = 0) const {
|
||||
return IPAddress(dns_getserver(n));
|
||||
}
|
||||
void setDNS(IPAddress dns1, IPAddress dns2 = INADDR_ANY) {
|
||||
if (dns1.isSet()) {
|
||||
dns_setserver(0, dns1);
|
||||
}
|
||||
if (dns2.isSet()) {
|
||||
dns_setserver(1, dns2);
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Currently when no default is set, esp8266-Arduino uses the first
|
||||
// DHCP client interface receiving a valid address and gateway to
|
||||
@@ -107,7 +127,7 @@ public:
|
||||
// ICMP echo, returns TTL
|
||||
int ping(IPAddress host, uint8_t ttl, uint32_t timeout = 5000);
|
||||
|
||||
int hostByName(const char* aHostname, IPAddress& aResult, int timeout);
|
||||
int hostByName(const char* aHostname, IPAddress& aResult, int timeout = 15000);
|
||||
|
||||
inline void setSPISpeed(int mhz) {
|
||||
setSPISettings(SPISettings(mhz, MSBFIRST, SPI_MODE0));
|
||||
@@ -249,6 +269,24 @@ bool LwipIntfDev<RawDev>::config(const IPAddress& localIP, const IPAddress& gate
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
template<class RawDev>
|
||||
boolean LwipIntfDev<RawDev>::config(IPAddress local_ip, IPAddress dns) {
|
||||
|
||||
if (!local_ip.isSet()) {
|
||||
return config(INADDR_ANY, INADDR_ANY, INADDR_ANY);
|
||||
}
|
||||
if (!local_ip.isV4()) {
|
||||
return false;
|
||||
}
|
||||
IPAddress gw(local_ip);
|
||||
gw[3] = 1;
|
||||
if (!dns.isSet()) {
|
||||
dns = gw;
|
||||
}
|
||||
return config(local_ip, gw, IPAddress(255, 255, 255, 0), dns);
|
||||
}
|
||||
|
||||
extern char wifi_station_hostname[];
|
||||
template<class RawDev>
|
||||
bool LwipIntfDev<RawDev>::begin(const uint8_t* macAddress, const uint16_t mtu) {
|
||||
@@ -337,6 +375,7 @@ bool LwipIntfDev<RawDev>::begin(const uint8_t* macAddress, const uint16_t mtu) {
|
||||
#endif
|
||||
#if LWIP_IPV6_DHCP6_STATELESS
|
||||
err_t __res = dhcp6_enable_stateless(&_netif);
|
||||
(void) __res; // Not used except for debug
|
||||
DEBUGV("LwipIntfDev: Enabled DHCP6 stateless: %d\n", __res);
|
||||
#endif
|
||||
|
||||
@@ -362,7 +401,7 @@ void LwipIntfDev<RawDev>::end() {
|
||||
RawDev::end();
|
||||
|
||||
netif_remove(&_netif);
|
||||
memset(&_netif, 0, sizeof(_netif));
|
||||
|
||||
_started = false;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "framework-arduinopico",
|
||||
"version": "1.30601.0",
|
||||
"version": "1.30602.0",
|
||||
"description": "Arduino Wiring-based Framework (RPi Pico RP2040)",
|
||||
"keywords": [
|
||||
"framework",
|
||||
|
||||
@@ -86,6 +86,9 @@
|
||||
{
|
||||
"name": "Cytron Maker Pi RP2040"
|
||||
},
|
||||
{
|
||||
"name": "Cytron Maker UNO RP2040"
|
||||
},
|
||||
{
|
||||
"name": "DatanoiseTV PicoADK"
|
||||
},
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@
|
||||
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
|
||||
|
||||
name=Raspberry Pi RP2040 Boards
|
||||
version=3.6.1
|
||||
version=3.6.2
|
||||
|
||||
# Required discoveries and monitors
|
||||
# ---------------------------------
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino": {
|
||||
"earlephilhower": {
|
||||
"boot2_source": "boot2_w25q080_2_padded_checksum.S",
|
||||
"usb_vid": "0x2E8A",
|
||||
"usb_pid": "0x1071"
|
||||
}
|
||||
},
|
||||
"core": "earlephilhower",
|
||||
"cpu": "cortex-m0plus",
|
||||
"extra_flags": "-D ARDUINO_CYTRON_MAKER_UNO_RP2040 -DARDUINO_ARCH_RP2040 -DUSBD_MAX_POWER_MA=250",
|
||||
"f_cpu": "133000000L",
|
||||
"hwids": [
|
||||
[
|
||||
"0x2E8A",
|
||||
"0x00C0"
|
||||
],
|
||||
[
|
||||
"0x2E8A",
|
||||
"0x1071"
|
||||
]
|
||||
],
|
||||
"mcu": "rp2040",
|
||||
"variant": "cytron_maker_uno_rp2040"
|
||||
},
|
||||
"debug": {
|
||||
"jlink_device": "RP2040_M0_0",
|
||||
"openocd_target": "rp2040.cfg",
|
||||
"svd_path": "rp2040.svd"
|
||||
},
|
||||
"frameworks": [
|
||||
"arduino"
|
||||
],
|
||||
"name": "Maker UNO RP2040",
|
||||
"upload": {
|
||||
"maximum_ram_size": 270336,
|
||||
"maximum_size": 2097152,
|
||||
"require_upload_port": true,
|
||||
"native_usb": true,
|
||||
"use_1200bps_touch": true,
|
||||
"wait_for_upload_port": false,
|
||||
"protocol": "picotool",
|
||||
"protocols": [
|
||||
"blackmagic",
|
||||
"cmsis-dap",
|
||||
"jlink",
|
||||
"raspberrypi-swd",
|
||||
"picotool",
|
||||
"picoprobe",
|
||||
"pico-debug"
|
||||
]
|
||||
},
|
||||
"url": "https://www.raspberrypi.org/products/raspberry-pi-pico/",
|
||||
"vendor": "Cytron"
|
||||
}
|
||||
@@ -13,8 +13,8 @@ extern void interrupts();
|
||||
#define SYS_ARCH_PROTECT(lev) noInterrupts
|
||||
#define SYS_ARCH_UNPROTECT(lev) interrupts
|
||||
|
||||
extern unsigned long get_rand_32(void);
|
||||
#define LWIP_RAND() get_rand_32()
|
||||
extern unsigned long __lwip_rand(void);
|
||||
#define LWIP_RAND() __lwip_rand()
|
||||
|
||||
// Common settings used in most of the pico_w examples
|
||||
// (see https://www.nongnu.org/lwip/2_1_x/group__lwip__opts.html for details)
|
||||
|
||||
@@ -370,6 +370,7 @@ MakeBoard("bridgetek_idm2040-7a", "BridgeTek", "IDM2040-7A", "0x2e8a", "0x1041",
|
||||
# Cytron
|
||||
MakeBoard("cytron_maker_nano_rp2040", "Cytron", "Maker Nano RP2040", "0x2e8a", "0x100f", 250, "CYTRON_MAKER_NANO_RP2040", 2, "boot2_w25q080_2_padded_checksum")
|
||||
MakeBoard("cytron_maker_pi_rp2040", "Cytron", "Maker Pi RP2040", "0x2e8a", "0x1000", 250, "CYTRON_MAKER_PI_RP2040", 2, "boot2_w25q080_2_padded_checksum")
|
||||
MakeBoard("cytron_maker_uno_rp2040", "Cytron", "Maker UNO RP2040", "0x2e8a", "0x1071", 250, "CYTRON_MAKER_UNO_RP2040", 2, "boot2_w25q080_2_padded_checksum")
|
||||
|
||||
# DatanoiseTV
|
||||
MakeBoard("datanoisetv_picoadk", "DatanoiseTV", "PicoADK", "0x2e8a", "0x000a", 250, "DATANOISETV_PICOADK", 2, "boot2_w25q080_2_padded_checksum")
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
|
||||
// LEDs
|
||||
#define PIN_LED (3u)
|
||||
|
||||
|
||||
// Neopixel
|
||||
#define PIN_NEOPIXEL (25u)
|
||||
#define NUM_NEOPIXEL (2u)
|
||||
#define PIN_RGB PIN_NEOPIXEL
|
||||
|
||||
// Buzzer
|
||||
#define PIN_BUZZER (8u)
|
||||
|
||||
// Button
|
||||
#define PIN_BUTTON (2u)
|
||||
|
||||
|
||||
|
||||
// Serial 1
|
||||
#define PIN_SERIAL1_TX (0u)
|
||||
#define PIN_SERIAL1_RX (1u)
|
||||
|
||||
// Serial 2 (Not pinned out)
|
||||
#define PIN_SERIAL2_TX (31u)
|
||||
#define PIN_SERIAL2_RX (31u)
|
||||
|
||||
// SPI 0
|
||||
#define PIN_SPI0_MISO (12u)
|
||||
#define PIN_SPI0_MOSI (11u)
|
||||
#define PIN_SPI0_SCK (10u)
|
||||
#define PIN_SPI0_SS (13u)
|
||||
|
||||
// SPI 1 (Not pinned out)
|
||||
#define PIN_SPI1_MISO (31u)
|
||||
#define PIN_SPI1_MOSI (31u)
|
||||
#define PIN_SPI1_SCK (31u)
|
||||
#define PIN_SPI1_SS (31u)
|
||||
|
||||
// Wire
|
||||
#define PIN_WIRE0_SDA (20u)
|
||||
#define PIN_WIRE0_SCL (21u)
|
||||
|
||||
#define PIN_WIRE1_SDA (26u)
|
||||
#define PIN_WIRE1_SCL (27u)
|
||||
|
||||
|
||||
|
||||
#define SERIAL_HOWMANY (1u)
|
||||
#define SPI_HOWMANY (1u)
|
||||
#define WIRE_HOWMANY (1u)
|
||||
|
||||
#include "../generic/common.h"
|
||||
Reference in New Issue
Block a user