Compare commits

...
21 Commits
Author SHA1 Message Date
Earle F. Philhower, III 500f197c02 Update version 2023-12-06 09:52:23 -08:00
Earle F. Philhower, III 2bf249ffe1 Avoid freezeing the core from LWIP under FreeRTOS (#1884)
Avoid issues with interrupts and priority inversions and other deadlocks
and use a SW based random generator for LWIP when under FreeRTOS.

This means removing any overrides for sleep_until and the two
get_rand_xx calls from the SDK, making things much saner.

Related to #1883, #1872, and other random FreeRTOS lockups.
2023-12-06 09:41:14 -08:00
Dominic PearmanandDominic Pearman 81070a0b3f Minor documentation corrections in platformio.rst. (#1885)
* Corrected minor typo.

* Removed superfluous newline.

---------

Co-authored-by: Dominic Pearman <dominic@phymorous.de>
2023-12-06 06:20:59 -08:00
GUVWAF d45a11f9e7 Disable interrupts first when idling core (#1883) 2023-12-05 11:53:41 -08:00
Earle F. Philhower, III c3a3526aad Fix SPI 16-bit transfers (#1882)
Fixes #1879
Fixes #1874
2023-12-04 17:30:43 -08:00
Earle F. Philhower, III 280fc43731 Fix SPI debug print warning (#1881) 2023-12-04 12:48:49 -08:00
Earle F. Philhower, III 762535faf9 Add documentation about MDNS + FreeRTOS = crash (#1880)
See #1875
2023-12-04 08:57:49 -08:00
GUVWAF 0e4fd0587b Replace std::bind in MDNSResponder for UDP context (#1875) 2023-12-03 08:34:35 -08:00
GUVWAF d2461a14ad Enable interrupts last when resuming other core (#1872) 2023-12-02 10:20:05 -08:00
Juraj Andrássy a1902b5f41 WiFiServer modernization (#1871) 2023-12-02 09:31:39 -08:00
Taylor Alexander aka Sequoia c2d60774af Fix small typo in analog.rst (#1869)
Change "RP20400" to "RP2040"
2023-12-01 15:17:58 -08:00
Earle F. Philhower, III 269c579846 Remove IPv6 compile warning (#1867) 2023-12-01 12:10:16 -08:00
Juraj Andrássy 91183ca22f LwipIntfDev - disconnect()/end() should not clear static IP settings (#1866) 2023-12-01 11:53:01 -08:00
Earle F. Philhower, III 971c235e8d Remove unneeded intermediate async for Ethernet (#1864)
Remove the always pending worker whose job it was to fire another async
worker after a timeout.
2023-12-01 10:50:15 -08:00
Juraj Andrássy abd3547711 WiFi and Ethernet - config static IP auto gw,mask,dns as in Arduino libs (#1862) 2023-12-01 10:24:11 -08:00
Juraj Andrássy 9181ec055d LwipIntfDev - hostByName default value for the timeout parameter (#1858)
to have standard version with two parameters
2023-11-30 08:58:15 -08:00
Juraj Andrássy 58089b1f44 wl_defintions.h wl_enc_type update (#1859) 2023-11-30 08:33:33 -08:00
Juraj Andrássy 4f62e0a4ba LwipIntfDev - added macAddress getter and DNS IP getter and setter (#1856)
and dnsIP(n) getter in WiFiClass too
2023-11-29 13:24:16 -08:00
Richard Teel dbab62c214 Added clearAPList method to WiFiMulti (#1848)
Fixes #1846
2023-11-27 15:35:36 -08:00
Earle F. Philhower, III 6a878cdee8 Only create SPI/Wire instances if variant defined (#1842)
Fixes #1841
2023-11-24 09:56:13 -08:00
noqman cebdb6c917 Add new board variant: Cytron Maker UNO RP2040 (#1838) 2023-11-24 07:13:37 -08:00
41 changed files with 1941 additions and 100 deletions
+3 -3
View File
@@ -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
View File
@@ -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
# -----------------------------------
+2 -2
View File
@@ -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"
-42
View File
@@ -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
+15
View File
@@ -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;
}
+5 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-4
View File
@@ -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
+3 -3
View File
@@ -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();
}
+1 -1
View File
@@ -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;
}
+1
View File
@@ -18,6 +18,7 @@ beginTransaction KEYWORD2
endTransaction KEYWORD2
SPISettings KEYWORD2
transfer KEYWORD2
transfer16 KEYWORD2
setBitOrder KEYWORD2
setDataMode KEYWORD2
setClockDivider KEYWORD2
+11 -6
View File
@@ -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
+1 -1
View File
@@ -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;
}
+12 -6
View File
@@ -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
+7
View File
@@ -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
+9
View File
@@ -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;
+2
View File
@@ -32,6 +32,8 @@ public:
bool addAP(const char *ssid, const char *pass = nullptr);
void clearAPList();
uint8_t run(uint32_t to = 10000);
private:
+8
View File
@@ -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) {
+4 -2
View File
@@ -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;
+2 -2
View File
@@ -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;
+5
View File
@@ -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
+3 -11
View File
@@ -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 == &ethernet_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, &ethernet_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, &ethernet_timeout_worker, _pollingPeriod);
__ethernetContextInitted = true;
}
+41 -2
View File
@@ -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
View File
@@ -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",
+3
View File
@@ -86,6 +86,9 @@
{
"name": "Cytron Maker Pi RP2040"
},
{
"name": "Cytron Maker UNO RP2040"
},
{
"name": "DatanoiseTV PicoADK"
},
+1 -1
View File
@@ -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
# ---------------------------------
+56
View File
@@ -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"
}
+2 -2
View File
@@ -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)
+1
View File
@@ -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"