denko 0.13.1 → 0.13.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/build_avr.yml +2 -4
- data/.github/workflows/build_esp32.yml +2 -3
- data/.github/workflows/build_esp8266.yml +2 -3
- data/.github/workflows/build_megaavr.yml +2 -4
- data/.github/workflows/build_ra4m1.yml +57 -0
- data/.github/workflows/build_rp2040.yml +2 -4
- data/.github/workflows/build_sam3x.yml +1 -3
- data/.github/workflows/build_samd.yml +2 -4
- data/CHANGELOG.md +60 -0
- data/DEPS_CLI.md +8 -6
- data/DEPS_IDE.md +9 -7
- data/HARDWARE.md +90 -74
- data/README.md +19 -28
- data/benchmarks/i2c_ssd1306_refresh.rb +74 -0
- data/examples/analog_io/ads1115.rb +57 -0
- data/examples/analog_io/ads1118.rb +8 -9
- data/examples/analog_io/dac_loopback.rb +6 -4
- data/examples/analog_io/input.rb +39 -36
- data/examples/connection/tcp.rb +1 -1
- data/examples/display/hd44780.rb +3 -3
- data/examples/display/ssd1306.rb +1 -1
- data/examples/pulse_io/buzzer.rb +40 -0
- data/lib/denko/analog_io/ads1115.rb +61 -0
- data/lib/denko/analog_io/ads1118.rb +10 -120
- data/lib/denko/analog_io/ads111x.rb +123 -0
- data/lib/denko/analog_io/output.rb +2 -1
- data/lib/denko/analog_io.rb +2 -0
- data/lib/denko/behaviors/reader.rb +14 -13
- data/lib/denko/behaviors/subcomponents.rb +2 -2
- data/lib/denko/board/core.rb +1 -1
- data/lib/denko/board/i2c.rb +1 -4
- data/lib/denko/board/map.rb +9 -0
- data/lib/denko/board/servo.rb +2 -6
- data/lib/denko/board.rb +32 -20
- data/lib/denko/connection/board_uart.rb +3 -3
- data/lib/denko/connection/flow_control.rb +10 -2
- data/lib/denko/digital_io/output.rb +1 -1
- data/lib/denko/display/hd44780.rb +18 -18
- data/lib/denko/led/seven_segment.rb +18 -19
- data/lib/denko/message.rb +6 -14
- data/lib/denko/pulse_io/ir_transmitter.rb +1 -2
- data/lib/denko/version.rb +1 -1
- data/lib/denko_cli/packages.rb +7 -1
- data/lib/denko_cli/targets.rb +8 -5
- data/lib/denko_cli/usage.txt +8 -4
- data/src/denko_ethernet.ino +15 -23
- data/src/denko_serial.ino +3 -14
- data/src/denko_wifi.ino +35 -50
- data/src/lib/Denko.cpp +23 -6
- data/src/lib/Denko.h +6 -16
- data/src/lib/DenkoCoreIO.cpp +3 -3
- data/src/lib/DenkoDefines.h +62 -16
- data/src/lib/DenkoEEPROM.cpp +9 -1
- data/src/lib/DenkoI2C.cpp +11 -9
- data/src/lib/DenkoLEDArray.cpp +1 -1
- data/target.yml +35 -1
- data/test/behaviors/reader_test.rb +8 -1
- data/test/board/helper_test.rb +0 -4
- data/test/display/hd44780_test.rb +10 -0
- data/test/led/seven_segment_test.rb +30 -8
- data/test/test_helper.rb +17 -2
- data/vendor/board-maps/.gitmodules +3 -0
- data/vendor/board-maps/BoardMap.h +40 -12
- data/vendor/board-maps/README.md +1 -0
- data/vendor/board-maps/lib/header_parser.rb +30 -5
- data/vendor/board-maps/run.rb +11 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +6 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +6 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +5 -1
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +20 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +2 -1
- data/vendor/board-maps/yaml/ARTRONSHOP_RP2_NANO.yml +32 -0
- data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +1 -1
- data/vendor/board-maps/yaml/AVR_ESPLORA.yml +1 -1
- data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LEONARDO.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +1 -1
- data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +1 -1
- data/vendor/board-maps/yaml/AVR_MICRO.yml +1 -1
- data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +1 -1
- data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +1 -1
- data/vendor/board-maps/yaml/AVR_YUN.yml +1 -1
- data/vendor/board-maps/yaml/AVR_YUNMINI.yml +1 -1
- data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +11 -1
- data/vendor/board-maps/yaml/BeeMotionS3.yml +6 -1
- data/vendor/board-maps/yaml/Bee_Motion.yml +3 -0
- data/vendor/board-maps/yaml/Bee_S3.yml +1 -1
- data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI6_BLE_RP2040.yml +42 -0
- data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +4 -1
- data/vendor/board-maps/yaml/CoreESP32.yml +5 -1
- data/vendor/board-maps/yaml/D1_MINI32.yml +10 -1
- data/vendor/board-maps/yaml/DENKY.yml +10 -1
- data/vendor/board-maps/yaml/DENKY_PICOV3.yml +10 -1
- data/vendor/board-maps/yaml/DENKY_WROOM32.yml +10 -1
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +6 -1
- data/vendor/board-maps/yaml/DPU_ESP32.yml +10 -1
- data/vendor/board-maps/yaml/D_Duino_32.yml +9 -1
- data/vendor/board-maps/yaml/ESP32S2_DEV.yml +11 -1
- data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +11 -1
- data/vendor/board-maps/yaml/ESP32S2_USB.yml +11 -1
- data/vendor/board-maps/yaml/ESP32_DEV.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_PICO.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +4 -1
- data/vendor/board-maps/yaml/ESP32_THING.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +4 -1
- data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +4 -1
- data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +10 -1
- data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +10 -1
- data/vendor/board-maps/yaml/ESPECTRO32.yml +10 -1
- data/vendor/board-maps/yaml/ESPea32.yml +10 -1
- data/vendor/board-maps/yaml/ESPino32.yml +10 -1
- data/vendor/board-maps/yaml/FEATHERS2.yml +11 -1
- data/vendor/board-maps/yaml/FEATHERS2NEO.yml +2 -1
- data/vendor/board-maps/yaml/FEATHERS3.yml +3 -0
- data/vendor/board-maps/yaml/FEATHER_ESP32.yml +5 -1
- data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +11 -1
- data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +11 -1
- data/vendor/board-maps/yaml/FROG_ESP32.yml +10 -1
- data/vendor/board-maps/yaml/HEALTHYPI_4.yml +10 -1
- data/vendor/board-maps/yaml/HONEYLEMON.yml +10 -1
- data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +10 -1
- data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +4 -1
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +5 -1
- data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +7 -1
- data/vendor/board-maps/yaml/LOLIN32.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN32_LITE.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN_D32.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +10 -1
- data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +11 -1
- data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +11 -1
- data/vendor/board-maps/yaml/LOLIN_S3.yml +9 -1
- data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +9 -1
- data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +9 -1
- data/vendor/board-maps/yaml/LoPy.yml +11 -1
- data/vendor/board-maps/yaml/LoPy4.yml +11 -1
- data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +11 -1
- data/vendor/board-maps/yaml/METRO_ESP32S2.yml +11 -1
- data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +10 -1
- data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +10 -1
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +10 -1
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +10 -1
- data/vendor/board-maps/yaml/MICROS2.yml +11 -1
- data/vendor/board-maps/yaml/MINIMA.yml +15 -0
- data/vendor/board-maps/yaml/NANO32.yml +10 -1
- data/vendor/board-maps/yaml/Node32s.yml +10 -1
- data/vendor/board-maps/yaml/NodeMCU_32S.yml +10 -1
- data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +11 -1
- data/vendor/board-maps/yaml/PIMORONI_PLASMA2040.yml +29 -0
- data/vendor/board-maps/yaml/PORTENTA_C33.yml +28 -0
- data/vendor/board-maps/yaml/PROS3.yml +6 -1
- data/vendor/board-maps/yaml/PYCOM_GPY.yml +11 -1
- data/vendor/board-maps/yaml/Piranha.yml +7 -1
- data/vendor/board-maps/yaml/Pocket32.yml +10 -1
- data/vendor/board-maps/yaml/QUANTUM.yml +10 -1
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +11 -1
- data/vendor/board-maps/yaml/RMP.yml +11 -1
- data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +0 -1
- data/vendor/board-maps/yaml/SAM_DUE.yml +3 -1
- data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +10 -1
- data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +11 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +6 -1
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +6 -1
- data/vendor/board-maps/yaml/TBeam.yml +6 -1
- data/vendor/board-maps/yaml/TINYPICO.yml +10 -1
- data/vendor/board-maps/yaml/TINYS2.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +11 -1
- data/vendor/board-maps/yaml/TTGO_T1.yml +10 -1
- data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +10 -1
- data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +10 -1
- data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +0 -1
- data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +0 -1
- data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +0 -1
- data/vendor/board-maps/yaml/TWATCH_BASE.yml +0 -1
- data/vendor/board-maps/yaml/TWatch.yml +0 -1
- data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +10 -1
- data/vendor/board-maps/yaml/UNOWIFIR4.yml +17 -0
- data/vendor/board-maps/yaml/WIPY3.yml +11 -1
- data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +2 -1
- data/vendor/board-maps/yaml/connaxio_espoir.yml +7 -1
- data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +11 -1
- data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +11 -1
- data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +11 -1
- data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wireless_stick.yml +10 -1
- data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +10 -1
- data/vendor/board-maps/yaml/openkb.yml +11 -1
- data/vendor/board-maps/yaml/roboheart_hercules.yml +10 -1
- data/vendor/board-maps/yaml/sensesiot_weizen.yml +10 -1
- data/vendor/board-maps/yaml/uPesy_WROOM.yml +10 -1
- data/vendor/board-maps/yaml/uPesy_WROVER.yml +10 -1
- data/vendor/board-maps/yaml/unphone8.yml +11 -1
- data/vendor/board-maps/yaml/unphone9.yml +11 -1
- metadata +14 -2
data/src/lib/Denko.cpp
CHANGED
@@ -36,7 +36,7 @@ void Denko::run(){
|
|
36
36
|
parse(stream->read());
|
37
37
|
rxBytes ++;
|
38
38
|
// Acknowledge when we've received half as many bytes as the serial buffer.
|
39
|
-
if (rxBytes >=
|
39
|
+
if (rxBytes >= DENKO_RX_ACK_INTERVAL) rxNotify();
|
40
40
|
}
|
41
41
|
|
42
42
|
#ifdef DENKO_UARTS
|
@@ -113,7 +113,7 @@ void Denko::process() {
|
|
113
113
|
case 6: setListener (pin, val, auxMsg[0], auxMsg[1], false); break;
|
114
114
|
|
115
115
|
// Implemented in DenkoEEPROM.cpp
|
116
|
-
#ifdef
|
116
|
+
#ifdef DENKO_EEPROM
|
117
117
|
case 7: eepromRead (); break;
|
118
118
|
case 8: eepromWrite (); break;
|
119
119
|
#endif
|
@@ -198,6 +198,7 @@ void Denko::process() {
|
|
198
198
|
case 90: handshake (); break;
|
199
199
|
case 91: resetState (); break;
|
200
200
|
case 92: sendReady (); break;
|
201
|
+
case 93: enumerate (); break;
|
201
202
|
case 95: setRegisterDivider (); break;
|
202
203
|
case 96: setAnalogWriteResolution (); break;
|
203
204
|
case 97: setAnalogReadResolution (); break;
|
@@ -262,19 +263,27 @@ void Denko::handshake() {
|
|
262
263
|
#ifdef DENKO_VERSION
|
263
264
|
stream->print(DENKO_VERSION);
|
264
265
|
#endif
|
266
|
+
|
267
|
+
// Third is serial buffer size.
|
268
|
+
stream->print(',');
|
269
|
+
stream->print(DENKO_SERIAL_BUFFER_SIZE);
|
265
270
|
|
266
|
-
//
|
271
|
+
// Fourth is AUX_SIZE.
|
267
272
|
stream->print(',');
|
268
273
|
stream->print(AUX_SIZE);
|
269
274
|
|
270
|
-
//
|
275
|
+
// Fifth is EEPROM size. None on Due or Zero.
|
271
276
|
stream->print(',');
|
272
277
|
#if defined(EEPROM_EMULATED)
|
273
278
|
stream->print(EMULATED_EEPROM_LENGTH);
|
274
279
|
#elif defined(EEPROM_PRESENT)
|
275
280
|
stream->print(EEPROM.length());
|
276
|
-
#
|
277
|
-
|
281
|
+
#endif
|
282
|
+
|
283
|
+
// Sixth is I2C buffer size.
|
284
|
+
stream->print(',');
|
285
|
+
#ifdef DENKO_I2C
|
286
|
+
stream->print(DENKO_I2C_BUFFER_SIZE);
|
278
287
|
#endif
|
279
288
|
|
280
289
|
// End
|
@@ -297,6 +306,14 @@ void Denko::resetState() {
|
|
297
306
|
lastTime = micros();
|
298
307
|
}
|
299
308
|
|
309
|
+
// CMD = 93
|
310
|
+
void Denko::enumerate() {
|
311
|
+
stream->print("ENUMERATION:");
|
312
|
+
#ifdef A0
|
313
|
+
stream->println(A0);
|
314
|
+
#endif
|
315
|
+
}
|
316
|
+
|
300
317
|
// CMD = 95
|
301
318
|
// Set the register read divider. Powers of 2 up to 128 are valid.
|
302
319
|
void Denko::setRegisterDivider() {
|
data/src/lib/Denko.h
CHANGED
@@ -154,6 +154,8 @@ class Denko {
|
|
154
154
|
void spiClearListeners ();
|
155
155
|
|
156
156
|
// I2C
|
157
|
+
bool i2cStarted = false;
|
158
|
+
byte i2cSpeed = 0;
|
157
159
|
void i2cBegin ();
|
158
160
|
void i2cEnd ();
|
159
161
|
void i2cSetSpeed (uint8_t code);
|
@@ -175,6 +177,7 @@ class Denko {
|
|
175
177
|
//
|
176
178
|
void handshake (); //cmd = 90
|
177
179
|
void resetState (); //cmd = 91
|
180
|
+
void enumerate (); //cmd = 92
|
178
181
|
void setRegisterDivider (); //cmd = 97
|
179
182
|
void setAnalogWriteResolution (); //cmd = 96
|
180
183
|
void setAnalogReadResolution (); //cmd = 97
|
@@ -205,30 +208,17 @@ class Denko {
|
|
205
208
|
//
|
206
209
|
// Flow control stuff.
|
207
210
|
//
|
208
|
-
// Notify
|
209
|
-
//
|
211
|
+
// Notify computer that board has received bytes.
|
210
212
|
void rxNotify();
|
211
213
|
uint8_t rxBytes = 0;
|
212
|
-
//
|
213
|
-
// ESP32 uses a 128 byte FIFO buffer for UART Rx. Notify every 63 bytes instead of 32
|
214
|
-
// so serial over native USB performs better.
|
215
|
-
//
|
216
|
-
// Using 63 instead of 64 since the ATmega32u4 (Leonardo) is limited to 63.
|
217
|
-
//
|
218
|
-
#ifdef ESP32
|
219
|
-
uint8_t rxNotifyLimit = 63;
|
220
|
-
#else
|
221
|
-
uint8_t rxNotifyLimit = 32;
|
222
|
-
#endif
|
223
|
-
|
224
214
|
//
|
225
215
|
// Tell the computer to halt or resume sending data to the board.
|
226
216
|
//
|
227
|
-
//
|
217
|
+
// Use these if running a function on the board that disables interrupts for
|
228
218
|
// longer than a single serial character (~85us at 115,200 baud).
|
229
219
|
//
|
230
220
|
// If the function was initiated by the computer (eg. writing to a WS2812 strip), do
|
231
|
-
// not call sendHalt(). The computer should
|
221
|
+
// not call sendHalt(). The computer should halt transmission itself after sending
|
232
222
|
// the WS2812 command. Only call sendReady() after data is written out to the strip.
|
233
223
|
//
|
234
224
|
// If the function was initiated on the board (eg. New IR input triggered by an interrupt),
|
data/src/lib/DenkoCoreIO.cpp
CHANGED
@@ -27,8 +27,8 @@ void Denko::setMode(byte p, byte m) {
|
|
27
27
|
if (m != 0b100) dacDisable(p);
|
28
28
|
#endif
|
29
29
|
|
30
|
-
// On the SAMD21, mode needs to be INPUT when using the DAC.
|
31
|
-
#
|
30
|
+
// On the SAMD21 and RA4M1, mode needs to be INPUT when using the DAC.
|
31
|
+
#if defined(__SAMD21G18A__) || defined(_RENESAS_RA_)
|
32
32
|
if (m == 0b100){
|
33
33
|
pinMode(p, INPUT);
|
34
34
|
return;
|
@@ -196,7 +196,7 @@ void Denko::dacWrite(byte p, int v, boolean echo) {
|
|
196
196
|
::dacWrite(p, v);
|
197
197
|
#endif
|
198
198
|
|
199
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
199
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_)
|
200
200
|
analogWrite(p, v);
|
201
201
|
#endif
|
202
202
|
}
|
data/src/lib/DenkoDefines.h
CHANGED
@@ -8,6 +8,7 @@
|
|
8
8
|
#define DENKO_VERSION __VERSION__
|
9
9
|
|
10
10
|
// Uncomment these to include features beyond core features.
|
11
|
+
// #define DENKO_EEPROM
|
11
12
|
// #define DENKO_ONE_WIRE
|
12
13
|
// #define DENKO_TONE
|
13
14
|
// #define DENKO_SPI_BB
|
@@ -39,30 +40,24 @@
|
|
39
40
|
#define PIN_COUNT 22
|
40
41
|
#endif
|
41
42
|
|
42
|
-
// No EEPROM on the Due or Zero.
|
43
|
-
#if !defined(__SAM3X8E__) && !defined(__SAMD21G18A__)
|
44
|
-
#define EEPROM_PRESENT
|
45
|
-
#include <EEPROM.h>
|
46
|
-
#endif
|
47
|
-
|
48
|
-
// Emulate 512 bytes of EEPROM on ESP chips and the RP2040.
|
49
|
-
#if defined(ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
50
|
-
# define EEPROM_EMULATED
|
51
|
-
# define EMULATED_EEPROM_LENGTH 512
|
52
|
-
#endif
|
53
|
-
|
54
43
|
// Figure out how many LEDC channels are available on ESP32 boards.
|
55
44
|
#ifdef ESP32
|
56
|
-
#
|
45
|
+
#if CONFIG_IDF_TARGET_ESP32
|
46
|
+
#define LEDC_CHANNEL_COUNT 16
|
47
|
+
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
48
|
+
#define LEDC_CHANNEL_COUNT 8
|
49
|
+
#elif CONFIG_IDF_TARGET_ESP32C3
|
50
|
+
#define LEDC_CHANNEL_COUNT 6
|
51
|
+
#endif
|
57
52
|
#endif
|
58
53
|
|
59
54
|
// Filter for boards that can set their analog write resolution.
|
60
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(ESP8266)
|
55
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(ESP8266)
|
61
56
|
#define WRITE_RESOLUTION_SETTER
|
62
57
|
#endif
|
63
58
|
|
64
59
|
// Filter for boards that can set their analog read resolution.
|
65
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
60
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
66
61
|
#define READ_RESOLUTION_SETTER
|
67
62
|
#endif
|
68
63
|
|
@@ -88,7 +83,7 @@
|
|
88
83
|
#elif defined(ESP8266) && defined(SERIAL_PORT_HARDWARE_OPEN)
|
89
84
|
#define DENKO_UARTS 1
|
90
85
|
|
91
|
-
// This works for all the Atmel cores.
|
86
|
+
// This works for all the Atmel cores except RA4M1.
|
92
87
|
#else
|
93
88
|
#if defined(SERIAL_PORT_HARDWARE3)
|
94
89
|
#define DENKO_UARTS 3
|
@@ -114,3 +109,54 @@
|
|
114
109
|
#else
|
115
110
|
#define AUX_SIZE 272
|
116
111
|
#endif
|
112
|
+
|
113
|
+
// Define 'DENKO_SERIAL_IF' as the serial interface to use.
|
114
|
+
// Uses SerialUSB (left port), which is native USB, on Arduino Due & Zero, or Serial otherwise.
|
115
|
+
// On many boards, eg. Arduino Leonardo, RP2040, ESP32-S3, Serial is native USB regardless.
|
116
|
+
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
117
|
+
#define DENKO_SERIAL_IF SerialUSB
|
118
|
+
#define DENKO_USB_CDC
|
119
|
+
// To use programming USB (right) on Due and Zero, comment 2 lines above, uncomment 1 line below.
|
120
|
+
// #define DENKO_SERIAL_IF Serial
|
121
|
+
#else
|
122
|
+
#define DENKO_SERIAL_IF Serial
|
123
|
+
#endif
|
124
|
+
|
125
|
+
// Figure out how much serial buffer we have, tell the computer, and set the ack interval.
|
126
|
+
// Best performance acknowledging at 64 bytes, or 32 if buffer is only 64.
|
127
|
+
//
|
128
|
+
// These are 256/64 regardless of whether native USB CDC or UART bridge.
|
129
|
+
#if defined(ARDUINO_ARCH_RP2040) || defined(ESP32) || defined(ESP8266) || defined(__SAM3X8E__)
|
130
|
+
#define DENKO_SERIAL_BUFFER_SIZE 256
|
131
|
+
#define DENKO_RX_ACK_INTERVAL 64
|
132
|
+
// RA4M1 has a 512 Serial buffer.
|
133
|
+
#elif defined(_RENESAS_RA_)
|
134
|
+
#define DENKO_SERIAL_BUFFER_SIZE 512
|
135
|
+
#define DENKO_RX_ACK_INTERVAL 64
|
136
|
+
// SAMD21 is 256/64 in native USB mode ONLY. Must use defaults on programming port to avoid data loss.
|
137
|
+
#elif defined(__SAMD21G18A__) && defined(DENKO_USB_CDC)
|
138
|
+
#define DENKO_SERIAL_BUFFER_SIZE 256
|
139
|
+
#define DENKO_RX_ACK_INTERVAL 64
|
140
|
+
// 32u4 is odd. Size is 63 instead of 64. Interval must be 31. 32 doesn't work at all. Off by 1 errors?
|
141
|
+
#elif defined(__AVR_ATmega32U4__)
|
142
|
+
#define DENKO_SERIAL_BUFFER_SIZE 63
|
143
|
+
#define DENKO_RX_ACK_INTERVAL 31
|
144
|
+
// Defaults
|
145
|
+
#else
|
146
|
+
#define DENKO_SERIAL_BUFFER_SIZE 64
|
147
|
+
#define DENKO_RX_ACK_INTERVAL 32
|
148
|
+
#endif
|
149
|
+
|
150
|
+
// Figure out how big the buffer is on the built-in Wire / I2C library.
|
151
|
+
#ifdef DENKO_I2C
|
152
|
+
// RP2040 and SAMD21 can do up to 256, but 255 since 1 byte for length.
|
153
|
+
#if defined(ARDUINO_ARCH_RP2040) || defined(__SAMD21G18A__)
|
154
|
+
#define DENKO_I2C_BUFFER_SIZE 255
|
155
|
+
// ESP32, ESP8266 and megaAVR can do up to 128.
|
156
|
+
#elif defined(ESP32) || defined(ESP8266) || defined(__AVR_ATmega4809__)
|
157
|
+
#define DENKO_I2C_BUFFER_SIZE 128
|
158
|
+
// Fall back to 32 bytes.
|
159
|
+
#else
|
160
|
+
#define DENKO_I2C_BUFFER_SIZE 32
|
161
|
+
#endif
|
162
|
+
#endif
|
data/src/lib/DenkoEEPROM.cpp
CHANGED
@@ -3,7 +3,15 @@
|
|
3
3
|
//
|
4
4
|
#include "Denko.h"
|
5
5
|
|
6
|
-
#ifdef
|
6
|
+
#ifdef DENKO_EEPROM
|
7
|
+
#include <EEPROM.h>
|
8
|
+
|
9
|
+
// Emulate 512 bytes of EEPROM on ESP chips and the RP2040.
|
10
|
+
#if defined(ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
|
11
|
+
#define EEPROM_EMULATED
|
12
|
+
#define EMULATED_EEPROM_LENGTH 512
|
13
|
+
#endif
|
14
|
+
|
7
15
|
// CMD = 6
|
8
16
|
// Read from the microcontroller's EEPROM.
|
9
17
|
//
|
data/src/lib/DenkoI2C.cpp
CHANGED
@@ -6,20 +6,20 @@
|
|
6
6
|
|
7
7
|
#include <Wire.h>
|
8
8
|
|
9
|
-
bool i2cStarted = false;
|
10
|
-
|
11
9
|
// Only start the I2C interface if not already started.
|
12
10
|
// Lazy initialization in case user wants to use I2C pins for something else.
|
13
11
|
void Denko::i2cBegin() {
|
14
12
|
if (!i2cStarted) {
|
15
13
|
Wire.begin();
|
16
14
|
i2cStarted = true;
|
15
|
+
i2cSetSpeed(0);
|
17
16
|
}
|
18
17
|
}
|
19
18
|
|
20
19
|
// End the I2C interface.
|
21
20
|
// This is mostly used as a Reset in Denko::handshake.
|
22
21
|
void Denko::i2cEnd(){
|
22
|
+
i2cSetSpeed(0);
|
23
23
|
// ESP8266 core does not define Wire.end()
|
24
24
|
#ifndef ESP8266
|
25
25
|
Wire.end();
|
@@ -36,6 +36,7 @@ void Denko::i2cSetSpeed(uint8_t code) {
|
|
36
36
|
case 3: Wire.setClock(3400000); break;
|
37
37
|
default: Wire.setClock(100000); break;
|
38
38
|
}
|
39
|
+
i2cSpeed = code;
|
39
40
|
}
|
40
41
|
|
41
42
|
// CMD = 33
|
@@ -43,7 +44,8 @@ void Denko::i2cSetSpeed(uint8_t code) {
|
|
43
44
|
void Denko::i2cSearch() {
|
44
45
|
byte error;
|
45
46
|
uint8_t addr;
|
46
|
-
i2cBegin();
|
47
|
+
if (!i2cStarted) i2cBegin();
|
48
|
+
i2cSetSpeed(0);
|
47
49
|
stream->print(SDA);
|
48
50
|
|
49
51
|
// Only addresses from 0x08 to 0x77 are usable (8 to 127).
|
@@ -77,10 +79,10 @@ void Denko::i2cWrite() {
|
|
77
79
|
uint8_t dataLength = (uint8_t)val;
|
78
80
|
|
79
81
|
// Limit to 32 bytes.
|
80
|
-
if (dataLength >
|
82
|
+
if (dataLength > DENKO_I2C_BUFFER_SIZE) dataLength = DENKO_I2C_BUFFER_SIZE;
|
81
83
|
|
82
|
-
i2cBegin();
|
83
|
-
i2cSetSpeed(auxMsg[0]);
|
84
|
+
if (!i2cStarted) i2cBegin();
|
85
|
+
if (i2cSpeed != auxMsg[0]) i2cSetSpeed(auxMsg[0]);
|
84
86
|
|
85
87
|
Wire.beginTransmission(address);
|
86
88
|
Wire.write(&auxMsg[1], dataLength);
|
@@ -116,10 +118,10 @@ void Denko::i2cRead() {
|
|
116
118
|
uint8_t dataLength = (uint8_t)val;
|
117
119
|
|
118
120
|
// Limit to 32 bytes.
|
119
|
-
if (dataLength >
|
121
|
+
if (dataLength > DENKO_I2C_BUFFER_SIZE) dataLength = DENKO_I2C_BUFFER_SIZE;
|
120
122
|
|
121
|
-
i2cBegin();
|
122
|
-
i2cSetSpeed(auxMsg[0]);
|
123
|
+
if (!i2cStarted) i2cBegin();
|
124
|
+
if (i2cSpeed != auxMsg[0]) i2cSetSpeed(auxMsg[0]);
|
123
125
|
|
124
126
|
// Optionally write up to a 4 byte register address before reading.
|
125
127
|
if ((auxMsg[1] > 0) && (auxMsg[1] < 5)) {
|
data/src/lib/DenkoLEDArray.cpp
CHANGED
data/target.yml
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
# name: rp2040
|
2
|
+
# fqbn: rp2040:rp2040:rpipicow
|
3
|
+
# port: /dev/cu.usbmodem14B01
|
4
|
+
|
5
|
+
# name: mega
|
6
|
+
# fqbn: arduino:avr:uno
|
7
|
+
# ort: /dev/cu.usbmodem14B01
|
8
|
+
|
9
|
+
# name: mega
|
10
|
+
# fqbn: arduino:avr:mega
|
11
|
+
# port: /dev/cu.usbmodem14C01
|
12
|
+
|
1
13
|
name: mega
|
2
|
-
fqbn: arduino:avr:
|
14
|
+
fqbn: arduino:avr:leonardo
|
3
15
|
port: /dev/cu.usbmodem14B01
|
16
|
+
|
17
|
+
# name: esp32
|
18
|
+
# fqbn: esp32:esp32:esp32doit-devkit-v1
|
19
|
+
# port: /dev/cu.SLAB_USBtoUART
|
20
|
+
|
21
|
+
# name: esp8266
|
22
|
+
# fqbn: esp8266:esp8266:nodemcuv2
|
23
|
+
# port: /dev/cu.SLAB_USBtoUART
|
24
|
+
|
25
|
+
# name: sam3x
|
26
|
+
# fqbn: arduino:sam:arduino_due_x
|
27
|
+
# port: /dev/cu.usbmodem14C0
|
28
|
+
|
29
|
+
# name: samd
|
30
|
+
# fqbn: arduino:samd:arduino_zero_native
|
31
|
+
# port: /dev/cu.usbmodem14C01
|
32
|
+
|
33
|
+
# Native USB ESP32 shouldn't be used since this doesn't enable USB CDC on boot.
|
34
|
+
|
35
|
+
# name: esp32
|
36
|
+
# fqbn: esp32:esp32:lolin_s3
|
37
|
+
# port: /dev/cu.usbmodem14C01
|
@@ -51,13 +51,20 @@ class ReaderTest < Minitest::Test
|
|
51
51
|
assert_equal part.read, 42
|
52
52
|
end
|
53
53
|
|
54
|
-
def
|
54
|
+
def test_read_using_with_lambda
|
55
55
|
inject(1)
|
56
56
|
reader = MiniTest::Mock.new.expect :call, nil
|
57
57
|
part.read_using -> { reader.call }
|
58
58
|
reader.verify
|
59
59
|
end
|
60
60
|
|
61
|
+
def test_read_using_with_method_and_args
|
62
|
+
inject(1)
|
63
|
+
reader = MiniTest::Mock.new.expect :call, nil, [10, 20], test_arg: 2
|
64
|
+
part.read_using reader, 10, 20, test_arg: 2
|
65
|
+
reader.verify
|
66
|
+
end
|
67
|
+
|
61
68
|
def test_add_run_remove_callback
|
62
69
|
cb = MiniTest::Mock.new.expect :call, nil
|
63
70
|
inject(1)
|
data/test/board/helper_test.rb
CHANGED
@@ -20,10 +20,6 @@ class APIHelperTest < Minitest::Test
|
|
20
20
|
assert_equal pack(:uint8, [25,26]), "\x19\x1A"
|
21
21
|
end
|
22
22
|
|
23
|
-
def test_padding
|
24
|
-
assert_equal pack(:uint8, 25, pad: 2), "\x19\x00"
|
25
|
-
end
|
26
|
-
|
27
23
|
def test_min
|
28
24
|
assert_raises(ArgumentError) { pack(:uint8, 25, min: 2) }
|
29
25
|
end
|
@@ -20,4 +20,14 @@ class HD44780Test < MiniTest::Test
|
|
20
20
|
|
21
21
|
end
|
22
22
|
end
|
23
|
+
|
24
|
+
def test_write4
|
25
|
+
part.write4 "10100101"
|
26
|
+
|
27
|
+
# Pin states should match lower 4 bits, since they are sent last.
|
28
|
+
assert_equal 1, part.d4.state
|
29
|
+
assert_equal 0, part.d5.state
|
30
|
+
assert_equal 1, part.d6.state
|
31
|
+
assert_equal 0, part.d7.state
|
32
|
+
end
|
23
33
|
end
|
@@ -60,14 +60,17 @@ class SevenSegmentLEDTest < MiniTest::Test
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def test_scroll
|
63
|
-
mock = MiniTest::Mock.new
|
64
|
-
|
65
|
-
|
63
|
+
mock = MiniTest::Mock.new
|
64
|
+
mock.expect :call, nil, ['H']
|
65
|
+
mock.expect :call, nil, ['I']
|
66
|
+
part.stub(:write, mock) do
|
67
|
+
part.display('hi')
|
66
68
|
end
|
67
69
|
mock.verify
|
68
70
|
end
|
69
71
|
|
70
72
|
def test_display_ensures_on
|
73
|
+
part.off
|
71
74
|
mock = MiniTest::Mock.new.expect :call, nil
|
72
75
|
part.stub(:on, mock) do
|
73
76
|
part.display(1)
|
@@ -75,12 +78,31 @@ class SevenSegmentLEDTest < MiniTest::Test
|
|
75
78
|
mock.verify
|
76
79
|
end
|
77
80
|
|
78
|
-
def
|
79
|
-
|
80
|
-
part.
|
81
|
-
|
81
|
+
def test_write_clears_if_unknown_char
|
82
|
+
# Turn all the segments on.
|
83
|
+
part.display('8')
|
84
|
+
|
85
|
+
# Expect every segment to get #write(1). Inverted logic because anode.
|
86
|
+
mocks = []
|
87
|
+
part.segments.each do
|
88
|
+
mocks << MiniTest::Mock.new.expect(:call, nil, [1])
|
82
89
|
end
|
83
|
-
|
90
|
+
part.segments[0].stub(:write, mocks[0]) do
|
91
|
+
part.segments[1].stub(:write, mocks[1]) do
|
92
|
+
part.segments[2].stub(:write, mocks[2]) do
|
93
|
+
part.segments[3].stub(:write, mocks[3]) do
|
94
|
+
part.segments[4].stub(:write, mocks[4]) do
|
95
|
+
part.segments[5].stub(:write, mocks[5]) do
|
96
|
+
part.segments[6].stub(:write, mocks[6]) do
|
97
|
+
part.display('+')
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
mocks.each { |mock| mock.verify}
|
84
106
|
end
|
85
107
|
# Test with cathode
|
86
108
|
end
|
data/test/test_helper.rb
CHANGED
@@ -100,7 +100,12 @@ module Constants
|
|
100
100
|
opts[:on].send(:remove_const, const) if self.class.const_defined?(const)
|
101
101
|
opts[:on].const_set(const, value)
|
102
102
|
end
|
103
|
-
|
103
|
+
# Imaginary handshake ack from the board. Not a real SAMD_ZERO device.
|
104
|
+
# Serial buffer = 256
|
105
|
+
# Aux size = 528
|
106
|
+
# EEPROM size = 1024
|
107
|
+
# I2C buffer = 32
|
108
|
+
ACK = "SAMD_ZERO,0.13.0,256,528,1024,32"
|
104
109
|
|
105
110
|
# Some test redefine RUBY_PLATFORM. Save the original to reset it.
|
106
111
|
ORIGINAL_RUBY_PLATFORM = RUBY_PLATFORM
|
@@ -137,6 +142,9 @@ class ConnectionMock
|
|
137
142
|
def handshake
|
138
143
|
Constants::ACK
|
139
144
|
end
|
145
|
+
def remote_buffer_size=(size)
|
146
|
+
@remote_buffer_size = size
|
147
|
+
end
|
140
148
|
end
|
141
149
|
|
142
150
|
class BoardMock < Denko::Board
|
@@ -211,7 +219,7 @@ module TestPacker
|
|
211
219
|
end
|
212
220
|
end
|
213
221
|
|
214
|
-
# Speed up
|
222
|
+
# Speed up tests which use long delays.
|
215
223
|
module Denko
|
216
224
|
module OneWire
|
217
225
|
class Bus
|
@@ -220,4 +228,11 @@ module Denko
|
|
220
228
|
end
|
221
229
|
end
|
222
230
|
end
|
231
|
+
module LED
|
232
|
+
class SevenSegment
|
233
|
+
def sleep(time)
|
234
|
+
super(0.001)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
223
238
|
end
|
@@ -378,18 +378,6 @@
|
|
378
378
|
#define BOARD_MAP "ADAFRUIT_FEATHER_ESP32S2_REVTFT"
|
379
379
|
#endif
|
380
380
|
|
381
|
-
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32S2
|
382
|
-
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32S2"
|
383
|
-
#endif
|
384
|
-
|
385
|
-
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32C3
|
386
|
-
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32C3"
|
387
|
-
#endif
|
388
|
-
|
389
|
-
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32_PICO
|
390
|
-
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32_PICO"
|
391
|
-
#endif
|
392
|
-
|
393
381
|
#ifdef ARDUINO_ADAFRUIT_FEATHER_ESP32_V2
|
394
382
|
#define BOARD_MAP "ADAFRUIT_FEATHER_ESP32_V2"
|
395
383
|
#endif
|
@@ -410,10 +398,26 @@
|
|
410
398
|
#define BOARD_MAP "ADAFRUIT_FEATHER_ESP32S3_REVTFT"
|
411
399
|
#endif
|
412
400
|
|
401
|
+
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32_PICO
|
402
|
+
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32_PICO"
|
403
|
+
#endif
|
404
|
+
|
405
|
+
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32C3
|
406
|
+
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32C3"
|
407
|
+
#endif
|
408
|
+
|
409
|
+
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32S2
|
410
|
+
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32S2"
|
411
|
+
#endif
|
412
|
+
|
413
413
|
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32S3_NOPSRAM
|
414
414
|
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32S3_NOPSRAM"
|
415
415
|
#endif
|
416
416
|
|
417
|
+
#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32S3_N4R2
|
418
|
+
#define BOARD_MAP "ADAFRUIT_QTPY_ESP32S3_N4R2"
|
419
|
+
#endif
|
420
|
+
|
417
421
|
#ifdef ARDUINO_ADAFRUIT_ITSYBITSY_ESP32
|
418
422
|
#define BOARD_MAP "ADAFRUIT_ITSYBITSY_ESP32"
|
419
423
|
#endif
|
@@ -1142,6 +1146,10 @@
|
|
1142
1146
|
#define BOARD_MAP "NANO_RP2040_CONNECT"
|
1143
1147
|
#endif
|
1144
1148
|
|
1149
|
+
#ifdef ARDUINO_ARTRONSHOP_RP2_NANO
|
1150
|
+
#define BOARD_MAP "ARTRONSHOP_RP2_NANO"
|
1151
|
+
#endif
|
1152
|
+
|
1145
1153
|
#ifdef ARDUINO_BRIDGETEK_IDM2040-7A
|
1146
1154
|
#define BOARD_MAP "BRIDGETEK_IDM2040-7A"
|
1147
1155
|
#endif
|
@@ -1194,6 +1202,10 @@
|
|
1194
1202
|
#define BOARD_MAP "CHALLENGER_2040_WIFI_BLE_RP2040"
|
1195
1203
|
#endif
|
1196
1204
|
|
1205
|
+
#ifdef ARDUINO_CHALLENGER_2040_WIFI6_BLE_RP2040
|
1206
|
+
#define BOARD_MAP "CHALLENGER_2040_WIFI6_BLE_RP2040"
|
1207
|
+
#endif
|
1208
|
+
|
1197
1209
|
#ifdef ARDUINO_CHALLENGER_NB_2040_WIFI_RP2040
|
1198
1210
|
#define BOARD_MAP "CHALLENGER_NB_2040_WIFI_RP2040"
|
1199
1211
|
#endif
|
@@ -1234,6 +1246,10 @@
|
|
1234
1246
|
#define BOARD_MAP "PIMORONI_PGA2040"
|
1235
1247
|
#endif
|
1236
1248
|
|
1249
|
+
#ifdef ARDUINO_PIMORONI_PLASMA2040
|
1250
|
+
#define BOARD_MAP "PIMORONI_PLASMA2040"
|
1251
|
+
#endif
|
1252
|
+
|
1237
1253
|
#ifdef ARDUINO_SOLDERPARTY_RP2040_STAMP
|
1238
1254
|
#define BOARD_MAP "SOLDERPARTY_RP2040_STAMP"
|
1239
1255
|
#endif
|
@@ -1362,3 +1378,15 @@
|
|
1362
1378
|
#define BOARD_MAP "SAMD_TIAN"
|
1363
1379
|
#endif
|
1364
1380
|
|
1381
|
+
#ifdef ARDUINO_PORTENTA_C33
|
1382
|
+
#define BOARD_MAP "PORTENTA_C33"
|
1383
|
+
#endif
|
1384
|
+
|
1385
|
+
#ifdef ARDUINO_MINIMA
|
1386
|
+
#define BOARD_MAP "MINIMA"
|
1387
|
+
#endif
|
1388
|
+
|
1389
|
+
#ifdef ARDUINO_UNOWIFIR4
|
1390
|
+
#define BOARD_MAP "UNOWIFIR4"
|
1391
|
+
#endif
|
1392
|
+
|
data/vendor/board-maps/README.md
CHANGED
@@ -18,6 +18,7 @@ This is the exact use case this was deisgned for, in support of the [denko](http
|
|
18
18
|
- [megaavr](https://github.com/arduino/ArduinoCore-megaavr)
|
19
19
|
- [sam](https://github.com/arduino/ArduinoCore-sam)
|
20
20
|
- [samd](https://github.com/arduino/ArduinoCore-samd)
|
21
|
+
- [renesas](https://github.com/arduino/ArduinoCore-renesas)
|
21
22
|
- [esp8266](https://github.com/esp8266/Arduino)
|
22
23
|
- [esp32](https://github.com/espressif/arduino-esp32)
|
23
24
|
- [rp2040](https://github.com/earlephilhower/arduino-pico)
|