denko 0.13.5 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (719) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +18 -18
  3. data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +18 -18
  4. data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +17 -17
  5. data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +18 -18
  6. data/.github/workflows/build_esp32.yml +17 -17
  7. data/.github/workflows/build_esp32c3.yml +57 -0
  8. data/.github/workflows/build_esp32c6.yml +57 -0
  9. data/.github/workflows/build_esp32h2.yml +56 -0
  10. data/.github/workflows/build_esp32s2.yml +57 -0
  11. data/.github/workflows/build_esp32s3.yml +57 -0
  12. data/.github/workflows/build_esp8266.yml +15 -15
  13. data/.github/workflows/build_ra4m1.yml +16 -16
  14. data/.github/workflows/build_rp2040.yml +17 -16
  15. data/.github/workflows/ruby.yml +20 -20
  16. data/CHANGELOG.md +195 -11
  17. data/DEPS_CLI.md +9 -9
  18. data/DEPS_IDE.md +17 -18
  19. data/HARDWARE.md +50 -51
  20. data/README.md +61 -53
  21. data/Rakefile +1 -1
  22. data/benchmarks/analog_listen.rb +49 -0
  23. data/benchmarks/digital_write.rb +28 -0
  24. data/benchmarks/i2c_ssd1306_refresh.rb +13 -6
  25. data/build +1 -1
  26. data/denko.gemspec +5 -2
  27. data/examples/advanced/{m5_env.rb → m5_env3.rb} +12 -14
  28. data/examples/advanced/rotary_encoder_mac_volume.rb +18 -13
  29. data/examples/advanced/ssd1306_time_temp_rh.rb +8 -13
  30. data/examples/analog_io/ads1100.rb +48 -0
  31. data/examples/analog_io/ads1115.rb +2 -2
  32. data/examples/analog_io/ads1118.rb +3 -11
  33. data/examples/analog_io/input.rb +17 -16
  34. data/examples/analog_io/input_smoothing.rb +27 -0
  35. data/examples/analog_io/potentiometer.rb +31 -0
  36. data/examples/connection/binary_echo.rb +34 -0
  37. data/examples/connection/tcp.rb +12 -27
  38. data/examples/digital_io/button.rb +7 -3
  39. data/examples/digital_io/relay.rb +17 -0
  40. data/examples/digital_io/rotary_encoder.rb +21 -11
  41. data/examples/display/hd44780.rb +13 -5
  42. data/examples/display/ssd1306.rb +20 -17
  43. data/examples/display/ssd1306_s2_pico.rb +2 -2
  44. data/examples/i2c/search.rb +10 -26
  45. data/examples/led/apa102_bounce.rb +3 -4
  46. data/examples/led/apa102_fade.rb +44 -0
  47. data/examples/led/builtin_blink.rb +3 -1
  48. data/examples/led/builtin_fade.rb +19 -0
  49. data/examples/led/rgb_led.rb +31 -0
  50. data/examples/led/seven_segment_char_echo.rb +4 -2
  51. data/examples/led/ws2812_bounce.rb +5 -7
  52. data/examples/led/ws2812_builtin_blink.rb +3 -2
  53. data/examples/led/ws2812_fade.rb +43 -0
  54. data/examples/motor/l298.rb +10 -8
  55. data/examples/motor/servo.rb +4 -3
  56. data/examples/motor/stepper.rb +13 -13
  57. data/examples/one_wire/search.rb +32 -0
  58. data/examples/pulse_io/buzzer.rb +8 -3
  59. data/examples/pulse_io/ir_output.rb +51 -0
  60. data/examples/pulse_io/pwm_output.rb +30 -0
  61. data/examples/rtc/ds3231.rb +18 -35
  62. data/examples/sensor/aht10.rb +4 -6
  63. data/examples/sensor/aht20.rb +4 -6
  64. data/examples/sensor/bme280.rb +4 -4
  65. data/examples/sensor/bmp180.rb +9 -5
  66. data/examples/sensor/dht.rb +20 -15
  67. data/examples/sensor/ds18b20.rb +20 -21
  68. data/examples/sensor/generic_pir.rb +4 -2
  69. data/examples/sensor/hcsr04.rb +5 -2
  70. data/examples/sensor/htu21d.rb +9 -20
  71. data/examples/sensor/htu31d.rb +7 -9
  72. data/examples/sensor/neat_tph_readings.rb +15 -9
  73. data/examples/sensor/qmp6988.rb +5 -7
  74. data/examples/sensor/rcwl9620.rb +3 -3
  75. data/examples/sensor/sht3x.rb +4 -6
  76. data/examples/spi/bitbang_loopback.rb +46 -0
  77. data/examples/spi/input_register.rb +9 -19
  78. data/examples/spi/output_register.rb +9 -17
  79. data/examples/spi/ssd_through_registers.rb +28 -0
  80. data/examples/spi/two_registers.rb +18 -24
  81. data/examples/uart/bit_bang_demo.rb +25 -0
  82. data/examples/uart/board_passthrough.rb +19 -13
  83. data/examples/uart/hardware_loopback.rb +1 -1
  84. data/lib/denko/analog_io/ads1100.rb +127 -0
  85. data/lib/denko/analog_io/ads1115.rb +8 -25
  86. data/lib/denko/analog_io/ads1118.rb +10 -25
  87. data/lib/denko/analog_io/ads111x.rb +25 -11
  88. data/lib/denko/analog_io/input.rb +29 -55
  89. data/lib/denko/analog_io/input_helper.rb +42 -0
  90. data/lib/denko/analog_io/output.rb +5 -5
  91. data/lib/denko/analog_io/potentiometer.rb +6 -8
  92. data/lib/denko/analog_io.rb +2 -1
  93. data/lib/denko/behaviors/board_proxy.rb +13 -1
  94. data/lib/denko/behaviors/bus_controller.rb +1 -0
  95. data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
  96. data/lib/denko/behaviors/bus_peripheral.rb +3 -4
  97. data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
  98. data/lib/denko/behaviors/callbacks.rb +9 -7
  99. data/lib/denko/behaviors/component.rb +16 -14
  100. data/lib/denko/behaviors/input_pin.rb +14 -15
  101. data/lib/denko/behaviors/lifecycle.rb +51 -0
  102. data/lib/denko/behaviors/multi_pin.rb +22 -18
  103. data/lib/denko/behaviors/output_pin.rb +9 -4
  104. data/lib/denko/behaviors/single_pin.rb +1 -0
  105. data/lib/denko/behaviors/state.rb +15 -9
  106. data/lib/denko/behaviors/subcomponents.rb +72 -12
  107. data/lib/denko/behaviors.rb +2 -1
  108. data/lib/denko/board/core.rb +36 -18
  109. data/lib/denko/board/i2c.rb +14 -14
  110. data/lib/denko/board/i2c_bit_bang.rb +49 -0
  111. data/lib/denko/board/infrared.rb +6 -6
  112. data/lib/denko/board/led_array.rb +6 -5
  113. data/lib/denko/board/spi.rb +15 -10
  114. data/lib/denko/board/spi_bit_bang.rb +9 -7
  115. data/lib/denko/board.rb +35 -33
  116. data/lib/denko/connection/binary_echo.rb +17 -0
  117. data/lib/denko/connection/flow_control.rb +11 -15
  118. data/lib/denko/connection/handshake.rb +2 -0
  119. data/lib/denko/digital_io/button.rb +4 -0
  120. data/lib/denko/digital_io/c_bit_bang.rb +15 -0
  121. data/lib/denko/digital_io/input.rb +4 -5
  122. data/lib/denko/digital_io/output.rb +7 -6
  123. data/lib/denko/digital_io/relay.rb +2 -0
  124. data/lib/denko/digital_io/rotary_encoder.rb +78 -60
  125. data/lib/denko/digital_io.rb +1 -0
  126. data/lib/denko/display/hd44780.rb +136 -93
  127. data/lib/denko/display/sh1106.rb +42 -0
  128. data/lib/denko/display/ssd1306.rb +105 -45
  129. data/lib/denko/display.rb +1 -0
  130. data/lib/denko/eeprom/built_in.rb +19 -16
  131. data/lib/denko/i2c/bit_bang.rb +31 -0
  132. data/lib/denko/i2c/bus.rb +8 -36
  133. data/lib/denko/i2c/bus_common.rb +45 -0
  134. data/lib/denko/i2c/peripheral.rb +28 -19
  135. data/lib/denko/i2c.rb +2 -0
  136. data/lib/denko/led/apa102.rb +43 -29
  137. data/lib/denko/led/base.rb +8 -2
  138. data/lib/denko/led/rgb.rb +5 -7
  139. data/lib/denko/led/seven_segment.rb +24 -9
  140. data/lib/denko/led/ws2812.rb +10 -7
  141. data/lib/denko/message.rb +5 -0
  142. data/lib/denko/motor/l298.rb +11 -10
  143. data/lib/denko/motor/servo.rb +22 -10
  144. data/lib/denko/motor/stepper.rb +11 -14
  145. data/lib/denko/mutex_stub.rb +7 -0
  146. data/lib/denko/one_wire/bus.rb +9 -5
  147. data/lib/denko/one_wire/peripheral.rb +0 -3
  148. data/lib/denko/pulse_io/buzzer.rb +9 -3
  149. data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +9 -4
  150. data/lib/denko/pulse_io/pwm_output.rb +69 -15
  151. data/lib/denko/pulse_io.rb +3 -3
  152. data/lib/denko/rtc/ds3231.rb +11 -13
  153. data/lib/denko/sensor/aht.rb +22 -21
  154. data/lib/denko/sensor/bme280.rb +60 -63
  155. data/lib/denko/sensor/bmp180.rb +41 -38
  156. data/lib/denko/sensor/dht.rb +22 -5
  157. data/lib/denko/sensor/ds18b20.rb +40 -34
  158. data/lib/denko/sensor/hcsr04.rb +7 -5
  159. data/lib/denko/sensor/helper.rb +37 -0
  160. data/lib/denko/sensor/htu21d.rb +44 -55
  161. data/lib/denko/sensor/htu31d.rb +32 -33
  162. data/lib/denko/sensor/qmp6988.rb +25 -23
  163. data/lib/denko/sensor/rcwl9620.rb +2 -5
  164. data/lib/denko/sensor/sht3x.rb +23 -21
  165. data/lib/denko/sensor.rb +1 -2
  166. data/lib/denko/spi/base_register.rb +22 -22
  167. data/lib/denko/spi/bit_bang.rb +17 -51
  168. data/lib/denko/spi/bus.rb +15 -29
  169. data/lib/denko/spi/bus_common.rb +36 -0
  170. data/lib/denko/spi/input_register.rb +36 -30
  171. data/lib/denko/spi/output_register.rb +25 -40
  172. data/lib/denko/spi/peripheral.rb +93 -24
  173. data/lib/denko/spi.rb +6 -1
  174. data/lib/denko/uart/bit_bang.rb +5 -3
  175. data/lib/denko/uart/hardware.rb +9 -8
  176. data/lib/denko/version.rb +1 -1
  177. data/lib/denko.rb +10 -0
  178. data/lib/denko_cli/generator.rb +2 -2
  179. data/lib/denko_cli/packages.rb +8 -10
  180. data/lib/denko_cli/targets.rb +8 -8
  181. data/lib/denko_cli/targets.txt +4 -4
  182. data/lib/denko_cli/usage.txt +1 -1
  183. data/src/denko_ethernet.ino +0 -14
  184. data/src/denko_serial.ino +0 -14
  185. data/src/denko_wifi.ino +6 -15
  186. data/src/lib/Denko.cpp +39 -3
  187. data/src/lib/Denko.h +42 -26
  188. data/src/lib/DenkoCoreIO.cpp +60 -103
  189. data/src/lib/DenkoDefines.h +36 -31
  190. data/src/lib/DenkoI2C.cpp +54 -45
  191. data/src/lib/DenkoI2CBB.cpp +238 -0
  192. data/src/lib/DenkoIROut.cpp +12 -7
  193. data/src/lib/DenkoLEDArray.cpp +36 -13
  194. data/src/lib/DenkoSPI.cpp +6 -5
  195. data/src/lib/DenkoSPIBB.cpp +7 -6
  196. data/target.yml +37 -2
  197. data/test/analog_io/potentiometer_test.rb +10 -10
  198. data/test/behaviors/board_proxy_test.rb +1 -1
  199. data/test/behaviors/callbacks_test.rb +11 -3
  200. data/test/behaviors/component_test.rb +17 -9
  201. data/test/behaviors/input_pin_test.rb +14 -9
  202. data/test/behaviors/multi_pin_test.rb +14 -4
  203. data/test/behaviors/output_pin_test.rb +11 -8
  204. data/test/behaviors/poller_test.rb +1 -0
  205. data/test/behaviors/reader_test.rb +3 -2
  206. data/test/behaviors/subcomponents_test.rb +22 -2
  207. data/test/board/core_test.rb +15 -11
  208. data/test/board/i2c_test.rb +39 -33
  209. data/test/board/infrared_test.rb +1 -1
  210. data/test/board/message_test.rb +17 -11
  211. data/test/board/spi_test.rb +21 -21
  212. data/test/digital_io/button_test.rb +15 -0
  213. data/test/digital_io/relay_test.rb +18 -0
  214. data/test/digital_io/rotary_encoder_test.rb +80 -60
  215. data/test/eeprom/built_in_test.rb +9 -9
  216. data/test/i2c/bus_test.rb +30 -14
  217. data/test/i2c/peripheral_test.rb +36 -17
  218. data/test/led/base_test.rb +2 -1
  219. data/test/led/rgb_test.rb +6 -6
  220. data/test/led/seven_segment_test.rb +7 -7
  221. data/test/motor/servo_test.rb +1 -1
  222. data/test/motor/stepper_test.rb +2 -2
  223. data/test/one_wire/bus_test.rb +1 -0
  224. data/test/pulse_io/buzzer_test.rb +7 -4
  225. data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +10 -10
  226. data/test/pulse_io/pwm_output_test.rb +74 -18
  227. data/test/rtc/ds3231_test.rb +11 -13
  228. data/test/sensor/dht_test.rb +1 -1
  229. data/test/sensor/ds18b20_test.rb +4 -8
  230. data/test/spi/bus_test.rb +7 -7
  231. data/test/spi/input_register_test.rb +15 -15
  232. data/test/spi/output_register_test.rb +10 -28
  233. data/test/spi/peripheral_multi_pin_test.rb +53 -0
  234. data/test/spi/peripheral_single_pin_test.rb +48 -0
  235. data/test/test_helper.rb +36 -33
  236. data/tutorial/02-button/button.rb +5 -4
  237. data/tutorial/03-potentiometer/potentiometer.rb +9 -5
  238. data/tutorial/04-pwm_led/pwm_led.rb +14 -16
  239. data/tutorial/05-rgb_led/rgb_led.rb +6 -6
  240. data/tutorial/05-rgb_led/rgb_mapping.rb +11 -11
  241. data/vendor/board-maps/.gitignore +56 -0
  242. data/vendor/board-maps/.gitmodules +24 -0
  243. data/vendor/board-maps/BoardMap.h +1852 -0
  244. data/vendor/board-maps/README.md +52 -0
  245. data/vendor/board-maps/lib/boards_parser.rb +66 -0
  246. data/vendor/board-maps/lib/header_parser.rb +199 -0
  247. data/vendor/board-maps/run.rb +57 -0
  248. data/vendor/board-maps/yaml/0XCB_HELIOS.yml +48 -0
  249. data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +11 -0
  250. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
  251. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +25 -0
  252. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +25 -0
  253. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +27 -0
  254. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +34 -0
  255. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +34 -0
  256. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +25 -0
  257. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +27 -0
  258. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +34 -0
  259. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +48 -0
  260. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
  261. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +48 -0
  262. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +48 -0
  263. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +48 -0
  264. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +48 -0
  265. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +48 -0
  266. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +48 -0
  267. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +48 -0
  268. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +24 -0
  269. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +48 -0
  270. data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +48 -0
  271. data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +48 -0
  272. data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +16 -0
  273. data/vendor/board-maps/yaml/ADAFRUIT_METRO_RP2040.yml +48 -0
  274. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +13 -0
  275. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +23 -0
  276. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +21 -0
  277. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +21 -0
  278. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +29 -0
  279. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +48 -0
  280. data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +48 -0
  281. data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +48 -0
  282. data/vendor/board-maps/yaml/ALKS.yml +34 -0
  283. data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
  284. data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
  285. data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
  286. data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
  287. data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +16 -0
  288. data/vendor/board-maps/yaml/ARTRONSHOP_RP2_NANO.yml +32 -0
  289. data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
  290. data/vendor/board-maps/yaml/ATD143_S3.yml +41 -0
  291. data/vendor/board-maps/yaml/AVENTEN_S3_SYNC.yml +38 -0
  292. data/vendor/board-maps/yaml/AVR_ADK.yml +24 -0
  293. data/vendor/board-maps/yaml/AVR_BT.yml +16 -0
  294. data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +14 -0
  295. data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +16 -0
  296. data/vendor/board-maps/yaml/AVR_ESPLORA.yml +20 -0
  297. data/vendor/board-maps/yaml/AVR_ETHERNET.yml +16 -0
  298. data/vendor/board-maps/yaml/AVR_FIO.yml +16 -0
  299. data/vendor/board-maps/yaml/AVR_GEMMA.yml +6 -0
  300. data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +20 -0
  301. data/vendor/board-maps/yaml/AVR_LEONARDO.yml +20 -0
  302. data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +20 -0
  303. data/vendor/board-maps/yaml/AVR_LILYPAD.yml +16 -0
  304. data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +20 -0
  305. data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +20 -0
  306. data/vendor/board-maps/yaml/AVR_MEGA.yml +24 -0
  307. data/vendor/board-maps/yaml/AVR_MEGA2560.yml +24 -0
  308. data/vendor/board-maps/yaml/AVR_MICRO.yml +20 -0
  309. data/vendor/board-maps/yaml/AVR_MINI.yml +16 -0
  310. data/vendor/board-maps/yaml/AVR_NANO.yml +16 -0
  311. data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +22 -0
  312. data/vendor/board-maps/yaml/AVR_NG.yml +16 -0
  313. data/vendor/board-maps/yaml/AVR_PRO.yml +16 -0
  314. data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +22 -0
  315. data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +19 -0
  316. data/vendor/board-maps/yaml/AVR_UNO.yml +16 -0
  317. data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +16 -0
  318. data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +22 -0
  319. data/vendor/board-maps/yaml/AVR_YUN.yml +20 -0
  320. data/vendor/board-maps/yaml/AVR_YUNMINI.yml +20 -0
  321. data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +14 -0
  322. data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +39 -0
  323. data/vendor/board-maps/yaml/BLING.yml +25 -0
  324. data/vendor/board-maps/yaml/BPI_BIT.yml +9 -0
  325. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +42 -0
  326. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_43A.yml +48 -0
  327. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
  328. data/vendor/board-maps/yaml/BeeMotionS3.yml +45 -0
  329. data/vendor/board-maps/yaml/Bee_Motion.yml +30 -0
  330. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -0
  331. data/vendor/board-maps/yaml/Bee_S3.yml +38 -0
  332. data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
  333. data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +39 -0
  334. data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +38 -0
  335. data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +32 -0
  336. data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +36 -0
  337. data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +39 -0
  338. data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +39 -0
  339. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI6_BLE_RP2040.yml +42 -0
  340. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +42 -0
  341. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +38 -0
  342. data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +38 -0
  343. data/vendor/board-maps/yaml/CONNECTIVITY_2040_LTE_WIFI_BLE_RP2040.yml +48 -0
  344. data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +19 -0
  345. data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +29 -0
  346. data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +48 -0
  347. data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +48 -0
  348. data/vendor/board-maps/yaml/CYTRON_MAKER_UNO_RP2040.yml +48 -0
  349. data/vendor/board-maps/yaml/CoreESP32.yml +53 -0
  350. data/vendor/board-maps/yaml/D1_MINI32.yml +45 -0
  351. data/vendor/board-maps/yaml/D1_UNO32.yml +28 -0
  352. data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +48 -0
  353. data/vendor/board-maps/yaml/DEGZ_SUIBO_RP2040.yml +48 -0
  354. data/vendor/board-maps/yaml/DENKY.yml +35 -0
  355. data/vendor/board-maps/yaml/DENKY_PICOV3.yml +35 -0
  356. data/vendor/board-maps/yaml/DENKY_WROOM32.yml +35 -0
  357. data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +26 -0
  358. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
  359. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +14 -0
  360. data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +48 -0
  361. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
  362. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +49 -0
  363. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +38 -0
  364. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
  365. data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +7 -0
  366. data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
  367. data/vendor/board-maps/yaml/DPU_ESP32.yml +35 -0
  368. data/vendor/board-maps/yaml/DYDK.yml +38 -0
  369. data/vendor/board-maps/yaml/DYDK1A.yml +37 -0
  370. data/vendor/board-maps/yaml/DYDK1Av2.yml +45 -0
  371. data/vendor/board-maps/yaml/DYG.yml +20 -0
  372. data/vendor/board-maps/yaml/DYM.yml +40 -0
  373. data/vendor/board-maps/yaml/DYMv2.yml +39 -0
  374. data/vendor/board-maps/yaml/D_Duino_32.yml +37 -0
  375. data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
  376. data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +44 -0
  377. data/vendor/board-maps/yaml/ESP320.yml +8 -0
  378. data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
  379. data/vendor/board-maps/yaml/ESP32C3_DEV.yml +14 -0
  380. data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
  381. data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +13 -0
  382. data/vendor/board-maps/yaml/ESP32C6_DEV.yml +15 -0
  383. data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
  384. data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
  385. data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +15 -0
  386. data/vendor/board-maps/yaml/ESP32H2_DEV.yml +13 -0
  387. data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +13 -0
  388. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +44 -0
  389. data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO.yml +44 -0
  390. data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +44 -0
  391. data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +44 -0
  392. data/vendor/board-maps/yaml/ESP32S2_USB.yml +43 -0
  393. data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +7 -0
  394. data/vendor/board-maps/yaml/ESP32S3_DEV.yml +38 -0
  395. data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
  396. data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
  397. data/vendor/board-maps/yaml/ESP32_DEV.yml +35 -0
  398. data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +35 -0
  399. data/vendor/board-maps/yaml/ESP32_EVB.yml +7 -0
  400. data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +13 -0
  401. data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +13 -0
  402. data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +13 -0
  403. data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +13 -0
  404. data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +36 -0
  405. data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +24 -0
  406. data/vendor/board-maps/yaml/ESP32_PICO.yml +35 -0
  407. data/vendor/board-maps/yaml/ESP32_POE.yml +7 -0
  408. data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +7 -0
  409. data/vendor/board-maps/yaml/ESP32_S3R8N16.yml +3 -0
  410. data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +19 -0
  411. data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +11 -0
  412. data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
  413. data/vendor/board-maps/yaml/ESP32_THING.yml +36 -0
  414. data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +33 -0
  415. data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +33 -0
  416. data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +35 -0
  417. data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +35 -0
  418. data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +9 -0
  419. data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +8 -0
  420. data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +7 -0
  421. data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +7 -0
  422. data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +9 -0
  423. data/vendor/board-maps/yaml/ESP8266_ESP01.yml +9 -0
  424. data/vendor/board-maps/yaml/ESP8266_ESP07.yml +20 -0
  425. data/vendor/board-maps/yaml/ESP8266_ESP12.yml +20 -0
  426. data/vendor/board-maps/yaml/ESP8266_ESP13.yml +17 -0
  427. data/vendor/board-maps/yaml/ESP8266_ESP210.yml +9 -0
  428. data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +9 -0
  429. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +9 -0
  430. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +9 -0
  431. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +9 -0
  432. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +9 -0
  433. data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +9 -0
  434. data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +22 -0
  435. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +20 -0
  436. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +20 -0
  437. data/vendor/board-maps/yaml/ESP8266_OAK.yml +9 -0
  438. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +9 -0
  439. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +9 -0
  440. data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +25 -0
  441. data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +9 -0
  442. data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +9 -0
  443. data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +9 -0
  444. data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +9 -0
  445. data/vendor/board-maps/yaml/ESP8266_THING.yml +9 -0
  446. data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +9 -0
  447. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +18 -0
  448. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +18 -0
  449. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +18 -0
  450. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +25 -0
  451. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +18 -0
  452. data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +9 -0
  453. data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +9 -0
  454. data/vendor/board-maps/yaml/ESPECTRO32.yml +36 -0
  455. data/vendor/board-maps/yaml/ESPea32.yml +36 -0
  456. data/vendor/board-maps/yaml/ESPino32.yml +36 -0
  457. data/vendor/board-maps/yaml/ET-Board.yml +26 -0
  458. data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
  459. data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +46 -0
  460. data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +7 -0
  461. data/vendor/board-maps/yaml/FEATHERS2.yml +43 -0
  462. data/vendor/board-maps/yaml/FEATHERS2NEO.yml +31 -0
  463. data/vendor/board-maps/yaml/FEATHERS3.yml +32 -0
  464. data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
  465. data/vendor/board-maps/yaml/FEATHER_ESP32.yml +32 -0
  466. data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +48 -0
  467. data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +43 -0
  468. data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +43 -0
  469. data/vendor/board-maps/yaml/FROG_ESP32.yml +35 -0
  470. data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +22 -0
  471. data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +14 -0
  472. data/vendor/board-maps/yaml/GEN4_IOD.yml +9 -0
  473. data/vendor/board-maps/yaml/GENERIC_RP2040.yml +48 -0
  474. data/vendor/board-maps/yaml/HEALTHYPI_4.yml +36 -0
  475. data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
  476. data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
  477. data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
  478. data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
  479. data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
  480. data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
  481. data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
  482. data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_V3.yml +41 -0
  483. data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
  484. data/vendor/board-maps/yaml/HONEYLEMON.yml +36 -0
  485. data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +36 -0
  486. data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +19 -0
  487. data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
  488. data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +47 -0
  489. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +23 -0
  490. data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +34 -0
  491. data/vendor/board-maps/yaml/IOXESP32.yml +36 -0
  492. data/vendor/board-maps/yaml/IOXESP32PS.yml +36 -0
  493. data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
  494. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
  495. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
  496. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
  497. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
  498. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
  499. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY.yml +35 -0
  500. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +32 -0
  501. data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
  502. data/vendor/board-maps/yaml/LIONBITS3_DEV.yml +34 -0
  503. data/vendor/board-maps/yaml/LOLIN32.yml +36 -0
  504. data/vendor/board-maps/yaml/LOLIN32_LITE.yml +36 -0
  505. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +14 -0
  506. data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +14 -0
  507. data/vendor/board-maps/yaml/LOLIN_D32.yml +36 -0
  508. data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +36 -0
  509. data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +44 -0
  510. data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +44 -0
  511. data/vendor/board-maps/yaml/LOLIN_S3.yml +40 -0
  512. data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +40 -0
  513. data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
  514. data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +40 -0
  515. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +16 -0
  516. data/vendor/board-maps/yaml/LoPy.yml +38 -0
  517. data/vendor/board-maps/yaml/LoPy4.yml +38 -0
  518. data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
  519. data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
  520. data/vendor/board-maps/yaml/M5STACK_CORE.yml +10 -0
  521. data/vendor/board-maps/yaml/M5STACK_CORES3.yml +8 -0
  522. data/vendor/board-maps/yaml/M5STACK_Core2.yml +9 -0
  523. data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
  524. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +9 -0
  525. data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
  526. data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
  527. data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
  528. data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
  529. data/vendor/board-maps/yaml/M5STACK_STAMP_PICO.yml +7 -0
  530. data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
  531. data/vendor/board-maps/yaml/M5STACK_STICKC.yml +9 -0
  532. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
  533. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
  534. data/vendor/board-maps/yaml/M5STACK_TIMER_CAM.yml +10 -0
  535. data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
  536. data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
  537. data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
  538. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +9 -0
  539. data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +7 -0
  540. data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +9 -0
  541. data/vendor/board-maps/yaml/M5Stack_Station.yml +10 -0
  542. data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +31 -0
  543. data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
  544. data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
  545. data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +48 -0
  546. data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +48 -0
  547. data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
  548. data/vendor/board-maps/yaml/METRO_ESP32S2.yml +44 -0
  549. data/vendor/board-maps/yaml/METRO_ESP32S3.yml +42 -0
  550. data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +36 -0
  551. data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +36 -0
  552. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +36 -0
  553. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +36 -0
  554. data/vendor/board-maps/yaml/MICROS2.yml +44 -0
  555. data/vendor/board-maps/yaml/MINIMA.yml +15 -0
  556. data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +9 -0
  557. data/vendor/board-maps/yaml/Metro.yml +8 -0
  558. data/vendor/board-maps/yaml/NAMINO_ARANCIO.yml +3 -0
  559. data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
  560. data/vendor/board-maps/yaml/NAMINO_ROSSO.yml +3 -0
  561. data/vendor/board-maps/yaml/NANO32.yml +36 -0
  562. data/vendor/board-maps/yaml/NANOS3.yml +25 -0
  563. data/vendor/board-maps/yaml/NANO_ESP32.yml +18 -0
  564. data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +35 -0
  565. data/vendor/board-maps/yaml/NEBULAS3.yml +32 -0
  566. data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +48 -0
  567. data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
  568. data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
  569. data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
  570. data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +48 -0
  571. data/vendor/board-maps/yaml/Node32s.yml +36 -0
  572. data/vendor/board-maps/yaml/NodeMCU_32S.yml +36 -0
  573. data/vendor/board-maps/yaml/ODROID_ESP32.yml +10 -0
  574. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
  575. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
  576. data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +34 -0
  577. data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
  578. data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
  579. data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +33 -0
  580. data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +48 -0
  581. data/vendor/board-maps/yaml/PIMORONI_PLASMA2040.yml +29 -0
  582. data/vendor/board-maps/yaml/PIMORONI_TINY2040.yml +44 -0
  583. data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
  584. data/vendor/board-maps/yaml/PORTENTA_C33.yml +28 -0
  585. data/vendor/board-maps/yaml/PROS3.yml +33 -0
  586. data/vendor/board-maps/yaml/PYCOM_GPY.yml +38 -0
  587. data/vendor/board-maps/yaml/Piranha.yml +22 -0
  588. data/vendor/board-maps/yaml/Pocket32.yml +36 -0
  589. data/vendor/board-maps/yaml/QUALIA_S3_RGB666.yml +15 -0
  590. data/vendor/board-maps/yaml/QUANTUM.yml +35 -0
  591. data/vendor/board-maps/yaml/RAKWIRELESS_RAK11300.yml +47 -0
  592. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +48 -0
  593. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +48 -0
  594. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +41 -0
  595. data/vendor/board-maps/yaml/REDSCORP_RP2040_EINS.yml +35 -0
  596. data/vendor/board-maps/yaml/REDSCORP_RP2040_PROMINI.yml +35 -0
  597. data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +11 -0
  598. data/vendor/board-maps/yaml/SAMD_MKR1000.yml +20 -0
  599. data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +19 -0
  600. data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +15 -0
  601. data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +15 -0
  602. data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +19 -0
  603. data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +18 -0
  604. data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +18 -0
  605. data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +19 -0
  606. data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +19 -0
  607. data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +13 -0
  608. data/vendor/board-maps/yaml/SAMD_TIAN.yml +15 -0
  609. data/vendor/board-maps/yaml/SAMD_ZERO.yml +14 -0
  610. data/vendor/board-maps/yaml/SAM_DUE.yml +28 -0
  611. data/vendor/board-maps/yaml/SAM_ZERO.yml +15 -0
  612. data/vendor/board-maps/yaml/SEA_PICRO.yml +48 -0
  613. data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +47 -0
  614. data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +29 -0
  615. data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
  616. data/vendor/board-maps/yaml/SILICOGNITION_RP2040_SHIM.yml +30 -0
  617. data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +48 -0
  618. data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +35 -0
  619. data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
  620. data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +48 -0
  621. data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
  622. data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +48 -0
  623. data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +41 -0
  624. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +28 -0
  625. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +28 -0
  626. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +28 -0
  627. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +28 -0
  628. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +28 -0
  629. data/vendor/board-maps/yaml/TBeam.yml +28 -0
  630. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
  631. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +15 -0
  632. data/vendor/board-maps/yaml/TINYC6.yml +25 -0
  633. data/vendor/board-maps/yaml/TINYPICO.yml +35 -0
  634. data/vendor/board-maps/yaml/TINYS2.yml +43 -0
  635. data/vendor/board-maps/yaml/TINYS3.yml +25 -0
  636. data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +11 -0
  637. data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +38 -0
  638. data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +38 -0
  639. data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +38 -0
  640. data/vendor/board-maps/yaml/TTGO_T1.yml +36 -0
  641. data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +36 -0
  642. data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +36 -0
  643. data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +9 -0
  644. data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +9 -0
  645. data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +9 -0
  646. data/vendor/board-maps/yaml/TWATCH_BASE.yml +9 -0
  647. data/vendor/board-maps/yaml/TWatch.yml +9 -0
  648. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +18 -0
  649. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +18 -0
  650. data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +57 -0
  651. data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +43 -0
  652. data/vendor/board-maps/yaml/UNOWIFIR4.yml +17 -0
  653. data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
  654. data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
  655. data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
  656. data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
  657. data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +48 -0
  658. data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +23 -0
  659. data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +23 -0
  660. data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
  661. data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
  662. data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +48 -0
  663. data/vendor/board-maps/yaml/WATCHY.yml +7 -0
  664. data/vendor/board-maps/yaml/WATCHY_V10.yml +7 -0
  665. data/vendor/board-maps/yaml/WATCHY_V15.yml +7 -0
  666. data/vendor/board-maps/yaml/WATCHY_V20.yml +7 -0
  667. data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
  668. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +47 -0
  669. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +47 -0
  670. data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
  671. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +48 -0
  672. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
  673. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +48 -0
  674. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +48 -0
  675. data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
  676. data/vendor/board-maps/yaml/WESP32.yml +17 -0
  677. data/vendor/board-maps/yaml/WIDORA_AIR.yml +34 -0
  678. data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +23 -0
  679. data/vendor/board-maps/yaml/WIFINFO.yml +20 -0
  680. data/vendor/board-maps/yaml/WIPY3.yml +38 -0
  681. data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +48 -0
  682. data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +48 -0
  683. data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +48 -0
  684. data/vendor/board-maps/yaml/WT32_ETH01.yml +8 -0
  685. data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
  686. data/vendor/board-maps/yaml/WiFiduino32S3.yml +27 -0
  687. data/vendor/board-maps/yaml/WiFiduinoV2.yml +28 -0
  688. data/vendor/board-maps/yaml/Wifiduino32.yml +40 -0
  689. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +21 -0
  690. data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
  691. data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +37 -0
  692. data/vendor/board-maps/yaml/YD_RP2040.yml +48 -0
  693. data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +30 -0
  694. data/vendor/board-maps/yaml/connaxio_espoir.yml +24 -0
  695. data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +31 -0
  696. data/vendor/board-maps/yaml/fm_devkit.yml +15 -0
  697. data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +38 -0
  698. data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +42 -0
  699. data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +36 -0
  700. data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +36 -0
  701. data/vendor/board-maps/yaml/heltec_wireless_stick.yml +36 -0
  702. data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +36 -0
  703. data/vendor/board-maps/yaml/openkb.yml +37 -0
  704. data/vendor/board-maps/yaml/roboheart_hercules.yml +26 -0
  705. data/vendor/board-maps/yaml/sensesiot_weizen.yml +35 -0
  706. data/vendor/board-maps/yaml/uPesy_WROOM.yml +36 -0
  707. data/vendor/board-maps/yaml/uPesy_WROVER.yml +36 -0
  708. data/vendor/board-maps/yaml/unphone8.yml +42 -0
  709. data/vendor/board-maps/yaml/unphone9.yml +50 -0
  710. data/vendor/board-maps/yaml/wifi_kit_8.yml +15 -0
  711. metadata +541 -22
  712. data/examples/led/apa102_breathe.rb +0 -45
  713. data/examples/pulse_io/ir_transmitter.rb +0 -55
  714. data/examples/spi/ssd_through_register.rb +0 -40
  715. data/examples/uart/bit_bang_read.rb +0 -16
  716. data/examples/uart/bit_bang_write.rb +0 -16
  717. data/lib/denko/analog_io/sensor.rb +0 -6
  718. data/lib/denko/sensor/virtual.rb +0 -42
  719. data/src/lib/DenkoIROutESP.cpp +0 -26
@@ -0,0 +1,238 @@
1
+ //
2
+ // Adds I2C bitbang functionality to the Denko class if DENKO_I2C_BB defined in DenkoDefines.h.
3
+ //
4
+ #include "Denko.h"
5
+
6
+ #ifdef DENKO_I2C_BB
7
+
8
+ void Denko::i2c_bb_delay_quarter_period() {
9
+ #ifndef __AVR__
10
+ microDelay(i2c_bb_quarter_period);
11
+ #endif
12
+ }
13
+
14
+ // Delays for timing. Not sure how necessary this is.
15
+ void Denko::i2c_bb_delay_half_period() {
16
+ #ifndef __AVR__
17
+ microDelay(i2c_bb_quarter_period*2);
18
+ #endif
19
+ }
20
+
21
+ // Can't use output mode for SDA. Toggle between input for HIGH, output for LOW.
22
+ void Denko::i2c_bb_sda_high() { pinMode(i2c_bb_sda_pin, INPUT); }
23
+ void Denko::i2c_bb_sda_low() { pinMode(i2c_bb_sda_pin, OUTPUT); }
24
+
25
+ // Matching SCL functions for readability.
26
+ void Denko::i2c_bb_scl_high() { digitalWrite(i2c_bb_scl_pin, HIGH); }
27
+ void Denko::i2c_bb_scl_low() { digitalWrite(i2c_bb_scl_pin, LOW); }
28
+
29
+ // Start condition is SDA then SCL going low, from both high.
30
+ void Denko::i2c_bb_start() {
31
+ i2c_bb_delay_quarter_period();
32
+ i2c_bb_sda_low();
33
+ i2c_bb_delay_quarter_period();
34
+ i2c_bb_scl_low();
35
+ }
36
+
37
+ // Stop condition is SDA going high, while SCL is also high.
38
+ void Denko::i2c_bb_stop() {
39
+ i2c_bb_delay_quarter_period();
40
+ i2c_bb_sda_low();
41
+ i2c_bb_delay_quarter_period();
42
+ i2c_bb_scl_high();
43
+ i2c_bb_delay_quarter_period();
44
+ i2c_bb_sda_high();
45
+ }
46
+
47
+ uint8_t Denko::i2c_bb_read_bit() {
48
+ uint8_t bit;
49
+
50
+ // Ensure SDA high before we pull SCL high.
51
+ // i2c_bb_delay_quarter_period();
52
+ i2c_bb_sda_high();
53
+ i2c_bb_delay_quarter_period();
54
+
55
+ // Pull SCL high.
56
+ i2c_bb_scl_high();
57
+
58
+ // Wait 1/4 period and sample SDA.
59
+ i2c_bb_delay_quarter_period();
60
+ bit = digitalRead(i2c_bb_sda_pin);
61
+
62
+ // Leave SCL low.
63
+ // i2c_bb_delay_quarter_period();
64
+ i2c_bb_scl_low();
65
+
66
+ return bit;
67
+ }
68
+
69
+ void Denko::i2c_bb_write_bit(uint8_t bit) {
70
+ // i2c_bb_delay_quarter_period();
71
+ // Set SDA while SCL is low.
72
+ if (bit == 0) {
73
+ i2c_bb_sda_low();
74
+ } else {
75
+ i2c_bb_sda_high();
76
+ }
77
+ // i2c_bb_delay_quarter_period();
78
+
79
+ // Pull SCL high, wait (should be half cycle), then leave it low.
80
+ i2c_bb_scl_high();
81
+ i2c_bb_delay_quarter_period();
82
+ // i2c_bb_delay_half_period();
83
+ i2c_bb_scl_low();
84
+ }
85
+
86
+ uint8_t Denko::i2c_bb_read_byte(bool ack) {
87
+ uint8_t b;
88
+
89
+ // Receive MSB first.
90
+ for (int i=7; i>=0; i--) bitWrite(b, i, i2c_bb_read_bit());
91
+
92
+ // Send ACK or NACK and return byte.
93
+ if (ack) {
94
+ i2c_bb_write_bit(0);
95
+ } else {
96
+ i2c_bb_write_bit(1);
97
+ }
98
+ return b;
99
+ }
100
+
101
+ int Denko::i2c_bb_write_byte(uint8_t data) {
102
+ // Send MSB first.
103
+ for (int i=7; i>=0; i--) i2c_bb_write_bit(bitRead(data, i));
104
+
105
+ // Return -1 for NACK, 0 for ACK.
106
+ return (i2c_bb_read_bit() == 0) ? 0 : -1;
107
+ }
108
+
109
+ void Denko::i2c_bb_init(uint8_t scl, uint8_t sda) {
110
+ // Set pins in state variables, to avoid passing them around.
111
+ i2c_bb_scl_pin = scl;
112
+ i2c_bb_sda_pin = sda;
113
+
114
+ // Ensure SCL is output, and reset both pins to high.
115
+ pinMode(i2c_bb_scl_pin, OUTPUT);
116
+ i2c_bb_stop();
117
+ }
118
+
119
+ //
120
+ // Search for I2C devices on a bit banged I2C interface.
121
+ //
122
+ // cmd = 31
123
+ // pin = SCL pin
124
+ // val = SDA pin
125
+ //
126
+ // Ask each address for a single byte to see if it exists on the bus.
127
+ //
128
+ void Denko::i2c_bb_search() {
129
+ int ack;
130
+ uint8_t addr;
131
+
132
+ // Switch our "bus" to the given pins.
133
+ i2c_bb_init((uint8_t)pin, (uint8_t)val);
134
+
135
+ // Start sending results.
136
+ stream->print(i2c_bb_sda_pin);
137
+
138
+ // If SDA is low here, nothing connected to bus. Return no results.
139
+ if (digitalRead(i2c_bb_sda_pin) == 0) {
140
+ stream->print('\n');
141
+ return;
142
+ }
143
+
144
+ // Only addresses from 0x08 to 0x77 are usable (8 to 127).
145
+ for (addr = 0x08; addr < 0x78; addr++) {
146
+ i2c_bb_start();
147
+ ack = i2c_bb_write_byte((addr << 1) & 0b11111110);
148
+ if (ack == 0) {
149
+ stream->print(':');
150
+ stream->print(addr);
151
+ }
152
+ i2c_bb_stop();
153
+ }
154
+ stream->print('\n');
155
+ }
156
+
157
+ //
158
+ // Write to an I2C device over a bit banged I2C interface.
159
+ //
160
+ // cmd = 31
161
+ // pin = SCL pin
162
+ // val = SDA pin
163
+ // auxMsg[0] = I2C settings
164
+ // Bits[7..0] = <reserved>
165
+ // auxMsg[1] = Device address in bits [6..0] + repeated start in bit 7
166
+ // auxMsg[2] = Data length to write
167
+ // auxMsg[3]+ = Data
168
+ //
169
+ void Denko::i2c_bb_write() {
170
+ // Get parameters from message.
171
+ uint8_t address = auxMsg[1] & 0b01111111;
172
+ uint8_t writeAddress = (address << 1) & 0b11111110;
173
+ uint8_t sendStop = auxMsg[1] >> 7;
174
+ uint8_t dataLength = auxMsg[2];
175
+
176
+ // Switch our "bus" to the given pins.
177
+ i2c_bb_init((uint8_t)pin, (uint8_t)val);
178
+
179
+ i2c_bb_start();
180
+ i2c_bb_write_byte(writeAddress);
181
+ for (int i=0; i<dataLength; i++) i2c_bb_write_byte(auxMsg[3+i]);
182
+ i2c_bb_stop();
183
+ }
184
+
185
+ //
186
+ // Read from an I2C device over a bit banged I2C interface.
187
+ //
188
+ // cmd = 32
189
+ // pin = SCL pin
190
+ // val = SDA pin
191
+ // auxMsg[0] = I2C settings
192
+ // Bits[7..0] = <reserved>
193
+ // auxMsg[1] = Device address in bits [6..0] + repeated start in bit 7
194
+ // auxMsg[2] = Data length to read
195
+ // auxMsg[3] = Register address length
196
+ // auxMsg[4]+ = Register address bytes if length > 0
197
+ //
198
+ void Denko::i2c_bb_read() {
199
+ // Get parameters from message.
200
+ uint8_t address = auxMsg[1] & 0b01111111;
201
+ uint8_t writeAddress = (address << 1) & 0b11111110;
202
+ uint8_t readAddress = (address << 1) | 0b00000001;
203
+ uint8_t sendStop = auxMsg[1] >> 7;
204
+ uint8_t dataLength = auxMsg[2];
205
+
206
+ // Switch our "bus" to the given pins.
207
+ i2c_bb_init((uint8_t)pin, (uint8_t)val);
208
+
209
+ // Optionally write up to a 4 byte register address before reading.
210
+ if ((auxMsg[3] > 0) && (auxMsg[3] < 5)) {
211
+ i2c_bb_start();
212
+ i2c_bb_write_byte(writeAddress);
213
+ for(int i=0; i<auxMsg[3]; i++) i2c_bb_write_byte(auxMsg[4+i]);
214
+ i2c_bb_stop();
215
+ }
216
+
217
+ // If no ACK from device, return without sending any data.
218
+ i2c_bb_start();
219
+ int ack = i2c_bb_write_byte(readAddress);
220
+ if (ack < 0) return;
221
+
222
+ // Start streaming data as if coming from the SDA pin.
223
+ stream->print(i2c_bb_sda_pin); stream->print(':');
224
+ stream->print(address); stream->print('-');
225
+
226
+ // Read and ACK for all but the last byte.
227
+ for(int i=0; i<dataLength-1; i++){
228
+ stream->print(i2c_bb_read_byte(true));
229
+ stream->print(',');
230
+ }
231
+ stream->print(i2c_bb_read_byte(false));
232
+
233
+ // Finish stream and send stop condition.
234
+ stream->print(',');
235
+ stream->print('\n');
236
+ i2c_bb_stop();
237
+ }
238
+ #endif
@@ -2,7 +2,7 @@
2
2
  // This file adds to the Denko class only if DENKO_IR_OUT is defined in Denko.h.
3
3
  //
4
4
  #include "Denko.h"
5
- #if defined(DENKO_IR_OUT) && !defined(ESP8266) && !defined(ESP32)
5
+ #if defined(DENKO_IR_OUT)
6
6
 
7
7
  // Save memory by disabling receiver.
8
8
  #undef RAW_BUFFER_LENGTH
@@ -20,14 +20,19 @@
20
20
  // CMD = 16
21
21
  // Send an infrared signal.
22
22
  void Denko::irSend(){
23
- // Byte 1+ of auxMsg is already little-endian uint16 pulses.
24
- uint16_t *pulseArray = reinterpret_cast<uint16_t *>(auxMsg + 1);
25
-
26
- // Dynamically set the sending pin. Needs to be PWM capable.
23
+ // Change send pin per call. Must be PWM capable.
27
24
  IrSender.setSendPin(pin);
28
25
 
29
- // auxMsg[0] contains number of uint16_t
26
+ // Byte 2+ of auxMsg is already little-endian uint16 pulses.
27
+ //
28
+ // WARNING: This offset must always be an even number, for aligned
29
+ // memory access on the ESP8266, or it breaks.
30
+ uint16_t *pulseArray = reinterpret_cast<uint16_t *>(auxMsg + 2);
31
+
32
+ // auxMsg[0..1] contains number of pulses, also uint16.
33
+ uint16_t length = *reinterpret_cast<uint16_t *>(auxMsg);
34
+
30
35
  // Val contains frequency
31
- IrSender.sendRaw(pulseArray, auxMsg[0], val);
36
+ IrSender.sendRaw(pulseArray, length, val);
32
37
  }
33
38
  #endif
@@ -10,6 +10,13 @@
10
10
  //
11
11
  #ifdef DENKO_LED_WS2812
12
12
  #include <Adafruit_NeoPixel.h>
13
+ #ifdef ESP32
14
+ #include <esp.c>
15
+ #endif
16
+
17
+ #ifdef ARDUINO_ARCH_RP2040
18
+ Adafruit_NeoPixel ledArray;
19
+ #endif
13
20
  #endif
14
21
 
15
22
  //
@@ -18,24 +25,40 @@
18
25
  //
19
26
  // pin = Microcontroller pin connected to Data In pin of the LED array.
20
27
  // val = Number of raw pixel data bytes to expect. Max 9999.
21
- // auxMsg[0..3] = Reserved for future settings.
22
- // auxMsg[4+] = Raw pixel data, already in correct byte order (GRB, RGB, etc.).
28
+ // auxMsg[0..3] = ALWAYS ZERO or ESP32 can crash if pixel bytes have certain low values. Very confusing.
29
+ // auxMsg[4..7] = Reserved for future settings.
30
+ // auxMsg[8+] = Raw pixel data, already in correct byte order (GRB, RGB, etc.).
31
+ //
32
+ #define WS2812_DATA_OFFSET 8
23
33
  //
24
34
  void Denko::showLEDArray() {
25
- // Setup a new LED array object.
26
- Adafruit_NeoPixel ledArray(val, pin, NEO_GRB + NEO_KHZ800);
27
- ledArray.begin();
35
+ // Avoid memcpy on ESP32 by calling espShow() directly.
36
+ #ifdef ESP32
37
+ espShow(pin, &auxMsg[WS2812_DATA_OFFSET], val, true);
28
38
 
29
- // Copy LED data into the pixel buffer.
30
- memcpy(ledArray.getPixels(), &auxMsg[4], val);
39
+ // Pre-init instance (one PIO) on Pi Pico.
40
+ #elif defined(ARDUINO_ARCH_RP2040)
41
+ ledArray.setPin(pin);
42
+ ledArray.updateLength(val);
43
+ memcpy(ledArray.getPixels(), &auxMsg[WS2812_DATA_OFFSET], val);
44
+ ledArray.show();
31
45
 
32
- // ATmega4809 still needs this delay to avoid corrupt data. Not sure why.
33
- #if defined(__AVR_ATmega4809__)
34
- microDelay(64);
35
- #endif
46
+ // Reinit and memcpy for everything else.
47
+ #else
48
+ // Setup a new LED array object.
49
+ Adafruit_NeoPixel ledArray(val, pin, NEO_GRB + NEO_KHZ800);
50
+ ledArray.begin();
51
+
52
+ // Copy LED data into the pixel buffer.
53
+ memcpy(ledArray.getPixels(), &auxMsg[WS2812_DATA_OFFSET], val);
36
54
 
37
- // Write the pixel buffer to the array.
38
- ledArray.show();
55
+ // Let the line stay low for about 6 bytes worth of data.
56
+ // Prevents first pixel green being stuck on.
57
+ microDelay(60);
58
+
59
+ // Write the pixel buffer to the array.
60
+ ledArray.show();
61
+ #endif
39
62
 
40
63
  // Tell the computer to resume sending data.
41
64
  sendReady();
data/src/lib/DenkoSPI.cpp CHANGED
@@ -84,7 +84,8 @@ void Denko::spiEnd() {
84
84
  // val = empty
85
85
  // auxMsg[0] = SPI settings
86
86
  // Bit 0..1 = SPI mode
87
- // Bit 2..6 = ** unused **
87
+ // Bit 2..5 = ** unused **
88
+ // Bit 6 = Whether to toggle select pin (1), or not (0)
88
89
  // Bit 7 = Read and write bit order: MSBFIRST(1) or LSBFIRST(0)
89
90
  // auxMsg[1] = read length (number of bytes)
90
91
  // auxMsg[2] = write length (number of bytes)
@@ -100,8 +101,8 @@ void Denko::spiTransfer(uint32_t clockRate, uint8_t select, uint8_t settings, ui
100
101
  stream->print(':');
101
102
  }
102
103
 
103
- // Pull select pin low, treating 255 as no select pin.
104
- if (select != 255) {
104
+ // Pull select low.
105
+ if (bitRead(settings, 6) == 1) {
105
106
  pinMode(select, OUTPUT);
106
107
  digitalWrite(select, LOW);
107
108
  }
@@ -122,8 +123,8 @@ void Denko::spiTransfer(uint32_t clockRate, uint8_t select, uint8_t settings, ui
122
123
  }
123
124
  }
124
125
 
125
- // Leave select high, treating 255 as no select pin.
126
- if (select != 255) digitalWrite(select, HIGH);
126
+ // Leave select high.
127
+ if (bitRead(settings, 6) == 1) digitalWrite(select, HIGH);
127
128
 
128
129
  spiEnd();
129
130
  }
@@ -11,7 +11,8 @@
11
11
  // val = empty
12
12
  // auxMsg[0] = SPI settings
13
13
  // Bit 0..1 = SPI mode
14
- // Bit 2..6 = ** unused **
14
+ // Bit 2..5 = ** unused **
15
+ // Bit 6 = Whether to toggle select pin (1), or not (0)
15
16
  // Bit 7 = Read and write bit order: MSBFIRST(1) or LSBFIRST(0)
16
17
  // auxMsg[1] = read length (number of bytes)
17
18
  // auxMsg[2] = write length (number of bytes)
@@ -38,7 +39,7 @@ void Denko::spiBBtransfer( uint8_t clock, uint8_t input, uint8_t output, uint8_t
38
39
  // Set idle state of clock pin based on SPI mode.
39
40
  pinMode(clock, OUTPUT);
40
41
  if ((mode == 0)||(mode == 1)) digitalWrite(clock, LOW);
41
- if ((mode == 2)||(mode == 3)) digitalWrite(clock, LOW);
42
+ if ((mode == 2)||(mode == 3)) digitalWrite(clock, HIGH);
42
43
 
43
44
  // Stream read bytes as if coming from select pin.
44
45
  if (rLength > 0) {
@@ -46,8 +47,8 @@ void Denko::spiBBtransfer( uint8_t clock, uint8_t input, uint8_t output, uint8_t
46
47
  stream->print(':');
47
48
  }
48
49
 
49
- // Pull select pin low, treating 255 as no select pin.
50
- if (select != 255) {
50
+ // Pull select low, if needed.
51
+ if (bitRead(settings, 6) == 1) {
51
52
  pinMode(select, OUTPUT);
52
53
  digitalWrite(select, LOW);
53
54
  }
@@ -68,8 +69,8 @@ void Denko::spiBBtransfer( uint8_t clock, uint8_t input, uint8_t output, uint8_t
68
69
  }
69
70
  }
70
71
 
71
- // Leave select high, treating 255 as no select pin.
72
- if (select != 255) digitalWrite(select, HIGH);
72
+ // Leave select high.
73
+ if (bitRead(settings, 6) == 1) digitalWrite(select, HIGH);
73
74
  }
74
75
 
75
76
  //
data/target.yml CHANGED
@@ -1,3 +1,38 @@
1
- name: mega
1
+ name: atmega
2
2
  fqbn: arduino:avr:uno
3
- port: /dev/cu.usbmodem14B01
3
+ port: /dev/cu.usbmodem14501
4
+
5
+ # name: atmega
6
+ # fqbn: arduino:avr:mega
7
+ # port: /dev/cu.usbmodem14501
8
+
9
+ # name: atmega
10
+ # fqbn: arduino:avr:leonardo
11
+ # port: /dev/cu.usbmodem14501
12
+
13
+ # Uses native USB port
14
+ # name: atsam3x
15
+ # fqbn: arduino:sam:arduino_due_x
16
+ # port: /dev/cu.usbmodem14501
17
+
18
+ # Uses native USB port
19
+ # name: atsamd21
20
+ # fqbn: arduino:samd:arduino_zero_native
21
+ # port: /dev/cu.usbmodem14501
22
+
23
+ # name: esp8266
24
+ # fqbn: esp8266:esp8266:nodemcuv2
25
+ # port: /dev/cu.SLAB_USBtoUART
26
+
27
+ # name: esp32
28
+ # fqbn: esp32:esp32:esp32doit-devkit-v1
29
+ # port: /dev/cu.SLAB_USBtoUART
30
+
31
+ # Use for S3 on secondary UART port (not native USB). Native USB needs to be enabled in IDE.
32
+ # name: esp32
33
+ # fqbn: esp32:esp32:lolin_s3
34
+ # port: /dev/cu.usbmodem14501
35
+
36
+ # name: rp2040
37
+ # fqbn: rp2040:rp2040:rpipicow
38
+ # port: /dev/cu.usbmodem14501
@@ -17,45 +17,45 @@ class AnalogIOPotentiometerTest < Minitest::Test
17
17
 
18
18
  assert part.smoothing
19
19
  assert_equal 8, part.divider
20
- assert_equal [], part.instance_variable_get(:@smoothing_set)
20
+ assert_equal [], part.smoothing_set
21
21
  end
22
-
22
+
23
23
  def test_smoothing_on
24
24
  7.times do
25
25
  part.update(10)
26
26
  end
27
27
  part.update(50)
28
-
28
+
29
29
  # 120/8 = 15
30
30
  assert_equal part.state, 15
31
31
  end
32
-
32
+
33
33
  def test_smoothing_off
34
34
  part.smoothing = false
35
35
  7.times do
36
36
  part.update(10)
37
37
  end
38
38
  part.update(50)
39
-
39
+
40
40
  # Give latest value.
41
41
  assert_equal part.state, 50
42
42
  end
43
-
43
+
44
44
  def test_on_change
45
45
  mock = Minitest::Mock.new.expect(:call, nil)
46
-
46
+
47
47
  # Turn off smoothing and set an initial value
48
48
  part.smoothing = false
49
49
  part.update(100)
50
-
50
+
51
51
  # Add the callback
52
52
  part.on_change { mock.call }
53
-
53
+
54
54
  # Send a few updates
55
55
  part.update(100)
56
56
  part.update(100)
57
57
  part.update(101)
58
-
58
+
59
59
  # Should have only been called once.
60
60
  mock.verify
61
61
  end
@@ -18,7 +18,7 @@ class BoardProxyTest < Minitest::Test
18
18
  assert_equal part.high, 1
19
19
  assert_equal part.low, 0
20
20
  assert_equal part.convert_pin("7"), 7
21
- part.set_pin_mode(1, :output, :pullup)
21
+ part.set_pin_mode(1, :output)
22
22
  part.start_read
23
23
  end
24
24
  end
@@ -27,11 +27,19 @@ class CallbacksTest < Minitest::Test
27
27
  @part ||= CallbackComponent.new(board: board, pin: 1)
28
28
  end
29
29
 
30
+ def callback_mutex_is_correct_class
31
+ if (RUBY_ENGINE == "ruby")
32
+ assert_equal Denko::MutexStub, part.callback_mutex.class
33
+ else
34
+ assert_equal Mutex, part.callback_mutex.class
35
+ end
36
+ end
37
+
30
38
  def test_callback_mutex
31
39
  callback = Proc.new{}
32
40
  mock = Minitest::Mock.new
33
41
  3.times {mock.expect(:call, nil)}
34
-
42
+
35
43
  part.callback_mutex.stub(:synchronize, mock) do
36
44
  part.callbacks
37
45
  part.add_callback(:key, &callback)
@@ -105,7 +113,7 @@ class CallbacksTest < Minitest::Test
105
113
  value = 0
106
114
  part.add_callback { value = 1 }
107
115
  part.update(nil)
108
- assert_equal 0, value
116
+ assert_equal 0, value
109
117
  end
110
118
 
111
119
  def test_no_callbacks_with_filter_returning_nil
@@ -113,6 +121,6 @@ class CallbacksTest < Minitest::Test
113
121
  value = 0
114
122
  part2.add_callback { value = 1 }
115
123
  part2.update("anything")
116
- assert_equal 0, value
124
+ assert_equal 0, value
117
125
  end
118
126
  end
@@ -8,7 +8,7 @@ class ComponentTest < Minitest::Test
8
8
  def board
9
9
  @board ||= BoardMock.new
10
10
  end
11
-
11
+
12
12
  def part
13
13
  @part ||= BaseComponent.new(board: board)
14
14
  end
@@ -20,35 +20,43 @@ class ComponentTest < Minitest::Test
20
20
  def test_registers_with_board
21
21
  assert_equal board.components, [part]
22
22
  end
23
-
23
+
24
24
  def test_unregisters_with_board
25
25
  part.send(:unregister)
26
26
  assert_equal board.components, []
27
27
  end
28
-
28
+
29
29
  def test_start_with_nil_state
30
30
  assert_nil BaseComponent.new(board: board).state
31
31
  end
32
-
32
+
33
+ def test_state_mutex_is_correct_class
34
+ if (RUBY_ENGINE == "ruby")
35
+ assert_equal Denko::MutexStub, part.state_mutex.class
36
+ else
37
+ assert_equal Mutex, part.state_mutex.class
38
+ end
39
+ end
40
+
33
41
  def test_sets_and_gets_state
34
42
  part.send(:state=, 10)
35
43
  assert_equal part.state, 10
36
44
  end
37
-
45
+
38
46
  def test_state_through_mutex
39
47
  mock = Minitest::Mock.new
40
48
  2.times {mock.expect(:call, nil)}
41
-
42
- part.instance_variable_get(:@state_mutex).stub(:synchronize, mock) do
49
+
50
+ part.state_mutex.stub(:synchronize, mock) do
43
51
  part.state
44
52
  part.send(:state=, nil)
45
53
  end
46
54
  mock.verify
47
55
  end
48
-
56
+
49
57
  def test_micro_delay
50
58
  mock = Minitest::Mock.new.expect :call, nil, [1000]
51
-
59
+
52
60
  board.stub(:micro_delay, mock) do
53
61
  part.micro_delay(1000)
54
62
  end
@@ -14,21 +14,26 @@ class InputPinTest < Minitest::Test
14
14
  end
15
15
 
16
16
  def test_mode_and_pullup
17
+ modes = [:input, :input_pulldown, :input_pullup]
18
+
17
19
  mock = Minitest::Mock.new
18
- mock.expect :call, nil, [1, :input]
19
- mock.expect :call, nil, [2, :input_pulldown]
20
- mock.expect :call, nil, [3, :input_pullup]
21
- mock.expect :call, nil, [4, :input_output]
20
+ modes.each_with_index do |mode, pin|
21
+ mock.expect :call, nil, [pin+1, mode]
22
+ end
22
23
 
23
24
  board.stub(:set_pin_mode, mock) do
24
- part
25
- InputComponent.new(board: board, pin: 2, pulldown: true)
26
- InputComponent.new(board: board, pin: 3, pullup: true)
27
- InputComponent.new(board: board, pin: 4, mode: :input_output)
25
+ modes.each_with_index do |mode, pin|
26
+ local_part = InputComponent.new(board: board, pin: pin+1, mode: mode)
27
+ assert_equal mode, local_part.mode
28
+ end
28
29
  end
29
30
  mock.verify
30
31
 
31
- assert_equal :input, part.mode
32
+ assert_raises { InputComponent.new(board: board, pin: modes.count+1, mode: :wrong_mode) }
33
+ end
34
+
35
+ def test_debounce_time=
36
+ part.debounce_time = 1
32
37
  end
33
38
 
34
39
  def test_stop_listener