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
@@ -2,28 +2,28 @@ module Denko
2
2
  module SPI
3
3
  class BitBang
4
4
  include Behaviors::MultiPin
5
- include Behaviors::BusController
6
- include Behaviors::Reader
5
+ include Behaviors::Lifecycle
6
+ include BusCommon
7
7
 
8
- def initialize_pins(options={})
8
+ before_initialize do
9
+ param_pins = params[:pins]
9
10
  # Allow pin aliases.
10
- pins[:input] = pins[:input] || pins[:poci] || pins[:miso]
11
- pins[:output] = pins[:output] || pins[:pico] || pins[:mosi]
12
- pins[:clock] = pins[:clock] || pins[:sck] || pins[:clk]
13
-
14
- # Clean up the pins hash.
15
- [:poci, :miso, :pico, :mosi, :sck, :clk].each { |key| pins.delete(key) }
11
+ param_pins[:input] = param_pins[:input] || param_pins[:poci] || param_pins[:miso]
12
+ param_pins[:output] = param_pins[:output] || param_pins[:pico] || param_pins[:mosi]
13
+ param_pins[:clock] = param_pins[:clock] || param_pins[:sck] || param_pins[:clk]
16
14
 
17
- # Validate input or output pin.
18
- unless pins[:input] || pins[:output]
19
- raise ArgumentError, "no input or output pin given. Require either or both"
20
- end
15
+ # Clean up the params hash.
16
+ [:poci, :miso, :pico, :mosi, :sck, :clk].each { |key| param_pins.delete(key) }
21
17
 
22
- # If only output or input, set the other 255 for a one-directional bus.
23
- pins[:input] = 255 if pins[:output] && !pins[:input]
24
- pins[:output] = 255 if pins[:input] && !pins[:output]
18
+ # Validate param_pins.
19
+ raise ArgumentError, "either output or input pin required" unless param_pins[:input] || param_pins[:output]
20
+ raise ArgumentError, "clock pin required" unless param_pins[:clock]
21
+ end
25
22
 
26
- require_pins(:clock, :input, :output)
23
+ def initialize_pins(options={})
24
+ proxy_pin :clock, DigitalIO::CBitBang
25
+ proxy_pin :output, DigitalIO::CBitBang if pins[:output]
26
+ proxy_pin :input, DigitalIO::CBitBang if pins[:input]
27
27
  end
28
28
 
29
29
  def transfer(select_pin, write: [], read: 0, frequency: nil, mode: 0, bit_order: :msbfirst)
@@ -35,40 +35,6 @@ module Denko
35
35
  board.spi_bb_listen select_pin, clock: pins[:clock], input: pins[:input],
36
36
  read: read, mode: mode, bit_order: bit_order
37
37
  end
38
-
39
- # Uses regular Board#spi_stop since listeners are shared.
40
- def stop(pin)
41
- board.spi_stop(pin)
42
- end
43
-
44
- # Delegate this to board so peripherals can initialize their select pins.
45
- def set_pin_mode(*args)
46
- board.set_pin_mode(*args)
47
- end
48
-
49
- def convert_pin(pin)
50
- board.convert_pin(pin)
51
- end
52
-
53
- # Add peripheral to self and the board. It gets callbacks directly from the board.
54
- def add_component(component)
55
- # Treat pin 255 as the component having no select pin. Mostly for APA102.
56
- return if component.pin == 255
57
-
58
- pins = components.map { |c| c.pin }
59
- if pins.include? component.pin
60
- raise ArgumentError, "duplicate select pin for #{component}"
61
- end
62
-
63
- components << component
64
- board.add_component(component)
65
- end
66
-
67
- # Remove peripheral from self and the board.
68
- def remove_component(component)
69
- components.delete(component)
70
- board.remove_component(component)
71
- end
72
38
  end
73
39
  end
74
40
  end
data/lib/denko/spi/bus.rb CHANGED
@@ -1,43 +1,29 @@
1
1
  module Denko
2
2
  module SPI
3
3
  class Bus
4
- include Behaviors::Component
5
- include Behaviors::BusController
6
- include Behaviors::Reader
4
+ include BusCommon
7
5
 
8
6
  # Board expects all components to have #pin.
9
7
  attr_reader :pin
10
8
 
11
- # Forward some methods directly to the board.
12
- extend Forwardable
13
-
14
- # Forward SPI methods with prefixed names.
15
- def_delegator :board, :spi_transfer, :transfer
16
- def_delegator :board, :spi_listen, :listen
17
- def_delegator :board, :spi_stop, :stop
18
-
19
- # Forward pin control methods with same names for board proxying.
20
- def_delegator :board, :convert_pin
21
- def_delegator :board, :set_pin_mode
22
-
23
- # Add peripheral to self and the board. It gets callbacks directly from the board.
24
- def add_component(component)
25
- # Treat pin 255 as the component having no select pin. Mostly for APA102.
26
- return if component.pin == 255
9
+ def spi_index
10
+ @spi_index ||= params[:spi_index] || params[:index] || 0
11
+ end
27
12
 
28
- pins = components.map { |c| c.pin }
29
- if pins.include? component.pin
30
- raise ArgumentError, "duplicate select pin for #{component}"
31
- end
13
+ # Prepend spi_index to these and forward to the board.
14
+ def transfer(*args, **kwargs)
15
+ args.unshift(spi_index)
16
+ board.spi_transfer(*args, **kwargs)
17
+ end
32
18
 
33
- components << component
34
- board.add_component(component)
19
+ def listen(*args, **kwargs)
20
+ args.unshift(spi_index)
21
+ board.spi_listen(*args, **kwargs)
35
22
  end
36
23
 
37
- # Remove peripheral from self and the board.
38
- def remove_component(component)
39
- components.delete(component)
40
- board.remove_component(component)
24
+ # This is for WS2812 strips on PiBoard.
25
+ def show_ws2812(*args)
26
+ board.show_ws2812(*args, spi_index: spi_index)
41
27
  end
42
28
  end
43
29
  end
@@ -0,0 +1,36 @@
1
+ module Denko
2
+ module SPI
3
+ module BusCommon
4
+ include Behaviors::BusController
5
+ include Behaviors::Reader
6
+ extend Forwardable
7
+
8
+ # Add peripheral to self and the board. It gets callbacks directly from the board.
9
+ def add_component(component)
10
+ # Ignore components with no select pin. Mostly for APA102.
11
+ return unless component.pin
12
+
13
+ pins = components.map { |c| c.pin }
14
+ if pins.include? component.pin
15
+ raise ArgumentError, "duplicate select pin for #{component}"
16
+ end
17
+
18
+ components << component
19
+ board.add_component(component)
20
+ end
21
+
22
+ # Remove peripheral from self and the board.
23
+ def remove_component(component)
24
+ components.delete(component)
25
+ board.remove_component(component)
26
+ end
27
+
28
+ # Forward pin control methods to the board, for select pin setup.
29
+ def_delegator :board, :convert_pin
30
+ def_delegator :board, :set_pin_mode
31
+
32
+ # If a component calls #stop, that's just a call to Board#spi_stop giving its select pin.
33
+ def_delegator :board, :spi_stop, :stop
34
+ end
35
+ end
36
+ end
@@ -1,28 +1,30 @@
1
1
  module Denko
2
2
  module SPI
3
3
  class InputRegister < BaseRegister
4
+ include Behaviors::Lifecycle
4
5
 
5
- def before_initialize(options={})
6
- super(options)
7
- #
8
- # Keep track of whether anything is listening or reading a specific pin.
9
- # This might be separate from whether a component is attached or not.
10
- #
11
- @reading_pins = Array.new(@bytes*8) { false }
12
- @listening_pins = Array.new(@bytes*8) { false }
6
+ #
7
+ # Keep track of whether anything is listening or reading a specific pin.
8
+ # This might be separate from whether a component is attached or not.
9
+ #
10
+ def reading_pins
11
+ @reading_pins ||= Array.new(bytes*8) { false }
12
+ end
13
+
14
+ def listening_pins
15
+ @listening_pins ||= Array.new(bytes*8) { false }
13
16
  end
14
17
 
15
- def after_initialize(options={})
16
- super(options)
18
+ after_initialize do
17
19
  enable_proxy
18
20
  end
19
21
 
20
22
  def read
21
- spi_read(@bytes)
23
+ spi_read(bytes)
22
24
  end
23
25
 
24
26
  def listen
25
- spi_listen(@bytes)
27
+ spi_listen(bytes)
26
28
  end
27
29
 
28
30
  def stop
@@ -35,7 +37,7 @@ module Denko
35
37
  def digital_read(pin)
36
38
  # Remember what pin was read and force callbacks to run next update.
37
39
  add_callback(:force_update) { Proc.new{} }
38
- @reading_pins[pin] = true
40
+ reading_pins[pin] = true
39
41
 
40
42
  # Don't actually call #read if already listening.
41
43
  read unless any_listening
@@ -43,16 +45,16 @@ module Denko
43
45
 
44
46
  def digital_listen(pin, divider)
45
47
  listen unless any_listening
46
- @listening_pins[pin] = true
48
+ listening_pins[pin] = true
47
49
  end
48
50
 
49
51
  def stop_listener(pin)
50
- @listening_pins[pin] = false
52
+ listening_pins[pin] = false
51
53
  stop unless any_listening
52
54
  end
53
55
 
54
56
  def any_listening
55
- @listening_pins.each { |p| return true if p }
57
+ listening_pins.each { |p| return true if p }
56
58
  false
57
59
  end
58
60
 
@@ -67,7 +69,7 @@ module Denko
67
69
  components.each do |part|
68
70
  update_component(part, pin, value) if pin == part.pin
69
71
  end
70
- @reading_pins[pin] = false
72
+ reading_pins[pin] = false
71
73
  end
72
74
  end
73
75
  end
@@ -77,14 +79,17 @@ module Denko
77
79
  # within the main mutex lock.
78
80
  #
79
81
  def update(message)
80
- bits = byte_array_to_bit_array(message.split(","))
81
-
82
- @callback_mutex.synchronize {
83
- #
84
- # The Arduino code does not de-duplicate repeated state.
85
- # Do it here, but if a :force_update callback exists, run anyway.
86
- #
87
- if (bits != @state)|| @callbacks[:force_update]
82
+ # Since overriding update, make sure this is a byte array first.
83
+ byte_array = ensure_byte_array(message)
84
+
85
+ bits = byte_array_to_bit_array(byte_array)
86
+
87
+ callback_mutex.synchronize {
88
+ break unless @callbacks
89
+ break if @callbacks.empty?
90
+
91
+ # Arduino doesn't de-duplicate state. Do it, but honor :force_update callbacks.
92
+ if (bits != state) || @callbacks[:force_update]
88
93
  @callbacks.each_value do |array|
89
94
  array.each { |callback| callback.call(bits) }
90
95
  end
@@ -94,15 +99,16 @@ module Denko
94
99
  @callbacks.delete(:read)
95
100
  @callbacks.delete(:force_update)
96
101
  }
97
- @state = bits
102
+ self.state = bits
98
103
  end
99
104
 
100
105
  def update_component(part, pin, value)
101
106
  # Update if component is listening and value has changed.
102
- if @listening_pins[pin] && (value != @state[pin])
107
+ if listening_pins[pin] && (value != state[pin])
103
108
  part.update(value)
104
109
  # Also update if the component forced a read.
105
- elsif @reading_pins[pin] && @callbacks[:force_update]
110
+ # Always called inside callback_mutex, so @callbacks, not callbacks
111
+ elsif reading_pins[pin] && @callbacks[:force_update]
106
112
  part.update(value)
107
113
  end
108
114
  end
@@ -114,14 +120,14 @@ module Denko
114
120
  def byte_array_to_bit_array(byte_array)
115
121
  #
116
122
  # For each array element (1 byte):
117
- # decimal number as string -> integer -> padded string of binary digits
123
+ # decimal number as string -> integer -> padded string of binary digits
118
124
  # -> reverse digits from reading order to array indexing order
119
125
  # -> join digits of all bytes into one string
120
126
  #
121
127
  binary_string = byte_array.map do |byte|
122
128
  byte.to_i.to_s(2).rjust(8, "0").reverse
123
129
  end.join
124
-
130
+
125
131
  # Split the digits out of the string into individual integers.
126
132
  binary_string.split("").map { |bit| bit.to_i }
127
133
  end
@@ -1,39 +1,33 @@
1
1
  module Denko
2
2
  module SPI
3
3
  class OutputRegister < BaseRegister
4
+ include Behaviors::Lifecycle
4
5
 
5
- def before_initialize(options={})
6
- super(options)
7
- #
8
- # When used as a board proxy, only write sate if @write_delay seconds
9
- # have passed since this object last got input. Better for things like SSDs
10
- # where many bits change in sequence, but not at exactly the same time.
11
- #
12
- @buffer_writes = true
13
- @buffer_writes = false if options[:buffer_writes] == false
14
- @write_delay = options[:write_delay] || 0.001
15
- end
16
-
17
- def after_initialize(options={})
6
+ after_initialize do
7
+ state
18
8
  write
19
9
  end
20
10
 
21
11
  #
22
- # Overrides Peripheral#write to always write @state.
12
+ # Overrides Peripheral#write to always write state.
23
13
  # Convert bit state to array of 0-255 integers (bytes) first.
24
14
  #
25
15
  def write
26
16
  bytes = []
27
- @state.each_slice(8) do |slice|
28
- # Convert nils in the slice to zero.
29
- zeroed = slice.map { |bit| bit.to_i }
30
-
31
- # Each slice is 8 bits of a byte, with the lowest on the left.
32
- # Reverse to reading order (lowest right) then join into string, and convert to integer.
33
- byte = zeroed.reverse.join.to_i(2)
34
-
35
- # Pack bytes in reverse order.
36
- bytes.unshift byte
17
+ state_mutex.synchronize do
18
+ return if @previous_state == @state
19
+ @state.each_slice(8) do |slice|
20
+ # Convert nils in the slice to zero.
21
+ zeroed = slice.map { |bit| bit.to_i }
22
+
23
+ # Each slice is 8 bits of a byte, with the lowest on the left.
24
+ # Reverse to reading order (lowest right) then join into string, and convert to integer.
25
+ byte = zeroed.reverse.join.to_i(2)
26
+
27
+ # Pack bytes in reverse order.
28
+ bytes.unshift byte
29
+ end
30
+ @previous_state = @state.dup
37
31
  end
38
32
  spi_write(bytes)
39
33
  end
@@ -42,25 +36,16 @@ module Denko
42
36
  # BoardProxy interface
43
37
  #
44
38
  def digital_write(pin, value)
45
- state[pin] = value # Might not be atomic?
46
- @buffer_writes ? write_buffered(state) : write
39
+ bit_set(pin, value)
40
+ write
47
41
  end
48
-
49
- def digital_read(pin)
50
- state[pin]
42
+
43
+ def bit_set(pin, value)
44
+ state_mutex.synchronize { @state[pin] = value }
51
45
  end
52
46
 
53
- #
54
- # If acting as board, do writes in a separate thread and with small delay.
55
- # Lets us catch multiple changed bits, like when hosting an SSD.
56
- #
57
- include Behaviors::Threaded
58
- def write_buffered(old_state)
59
- threaded do
60
- sleep @write_delay
61
- # Keep delaying if state has changed.
62
- write if (old_state == state)
63
- end
47
+ def digital_read(pin)
48
+ state[pin]
64
49
  end
65
50
  end
66
51
  end
@@ -1,42 +1,111 @@
1
1
  module Denko
2
2
  module SPI
3
3
  module Peripheral
4
- include Behaviors::OutputPin
5
- include Behaviors::Callbacks
6
- include Behaviors::BusPeripheral
4
+ module Core
5
+ include Behaviors::BusPeripheral
6
+ include Behaviors::Callbacks
7
7
 
8
- attr_reader :spi_frequency, :spi_mode, :spi_bit_order
8
+ def spi_frequency
9
+ @spi_frequency ||= params[:spi_frequency] || 1_000_000
10
+ end
9
11
 
10
- def before_initialize(options={})
11
- super(options)
12
+ def spi_mode
13
+ @spi_mode ||= params[:spi_mode] || 0
14
+ end
12
15
 
13
- # Save SPI settings.
14
- @spi_frequency = options[:spi_frequency]
15
- @spi_mode = options[:spi_mode]
16
- @spi_bit_order = options[:spi_bit_order]
17
- end
16
+ def spi_bit_order
17
+ @spi_bit_order ||= params[:spi_bit_order] || :msbfirst
18
+ end
19
+
20
+ attr_writer :spi_frequency, :spi_mode, :spi_bit_order
21
+
22
+ #
23
+ # Delegate methods to the bus.
24
+ #
25
+ def spi_transfer(write: [], read: 0)
26
+ bus.transfer(select_pin, write: write, read: read, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
27
+ end
28
+
29
+ def spi_write(byte_array)
30
+ bus.transfer(select_pin, write: byte_array, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
31
+ end
32
+
33
+ def spi_read(num_bytes)
34
+ bus.transfer(select_pin, read: num_bytes, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
35
+ end
36
+
37
+ def spi_listen(num_bytes)
38
+ bus.listen(select_pin, read: num_bytes, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
39
+ end
40
+
41
+ def spi_stop
42
+ bus.stop(select_pin)
43
+ end
18
44
 
19
- #
20
- # Delegate methods to the bus.
21
- #
22
- def spi_transfer(write: [], read: 0)
23
- bus.transfer(pin, write: write, read: read, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
45
+ def ensure_byte_array(message)
46
+ if message.class == Array
47
+ # Byte array coming from PiBoard.
48
+ return message
49
+ else
50
+ # Split up comma delimited bytes coming from a microcontroller.
51
+ return message.split(",").map { |b| b.to_i }
52
+ end
53
+ end
54
+
55
+ def update(message)
56
+ super(ensure_byte_array(message))
57
+ end
24
58
  end
25
59
 
26
- def spi_write(byte_array)
27
- bus.transfer(pin, write: byte_array, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
60
+ module ChipSelectBehavior
61
+ include Behaviors::SinglePin
62
+ include Behaviors::Callbacks
63
+ include Behaviors::Lifecycle
64
+
65
+ before_initialize do
66
+ # It actually functions as an output.
67
+ params[:mode] = :output
68
+
69
+ # But we can't claim it on Linux (the SPI hardware handles it), so don't.
70
+ if Object.const_defined?("Denko::PiBoard")
71
+ bus = params[:bus] || params[:board]
72
+ if bus.board.class.ancestors.include?(Denko::PiBoard)
73
+ params[:mode] = nil
74
+ end
75
+ end
76
+ end
28
77
  end
29
78
 
30
- def spi_read(num_bytes)
31
- bus.transfer(pin, read: num_bytes, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
79
+ class ChipSelect
80
+ include ChipSelectBehavior
32
81
  end
33
82
 
34
- def spi_listen(num_bytes)
35
- bus.listen(pin, read: num_bytes, frequency: spi_frequency, mode: spi_mode, bit_order: spi_bit_order)
83
+ module SinglePin
84
+ include Core
85
+ include ChipSelectBehavior
86
+
87
+ def select_pin
88
+ pin
89
+ end
36
90
  end
37
91
 
38
- def spi_stop
39
- bus.stop(pin)
92
+ module MultiPin
93
+ include Core
94
+ include Behaviors::MultiPin
95
+ include Behaviors::Lifecycle
96
+
97
+ def select_pin
98
+ self.select.pin
99
+ end
100
+
101
+ def initialize_pins(params={})
102
+ super(params)
103
+ proxy_pin :select, ChipSelect, { board: bus.board, mode: :output }
104
+ end
105
+
106
+ after_initialize do
107
+ select.add_callback(:peripheral_forwarder) { |data| self.update(data) }
108
+ end
40
109
  end
41
110
  end
42
111
  end
data/lib/denko/spi.rb CHANGED
@@ -1,8 +1,13 @@
1
1
  module Denko
2
2
  module SPI
3
+ autoload :BusCommon, "#{__dir__}/spi/bus_common"
3
4
  autoload :Bus, "#{__dir__}/spi/bus"
4
5
  autoload :BitBang, "#{__dir__}/spi/bit_bang"
5
- autoload :Peripheral, "#{__dir__}/spi/peripheral"
6
+ module Peripheral
7
+ autoload :Core, "#{__dir__}/spi/peripheral"
8
+ autoload :SinglePin, "#{__dir__}/spi/peripheral"
9
+ autoload :MultiPin, "#{__dir__}/spi/peripheral"
10
+ end
6
11
  autoload :BaseRegister, "#{__dir__}/spi/base_register"
7
12
  autoload :InputRegister, "#{__dir__}/spi/input_register"
8
13
  autoload :OutputRegister, "#{__dir__}/spi/output_register"
@@ -3,12 +3,14 @@ module Denko
3
3
  class UARTRxPin
4
4
  include Behaviors::InputPin
5
5
  include Behaviors::Callbacks
6
+ include Behaviors::Lifecycle
6
7
  end
7
8
 
8
9
  class BitBang
9
10
  include Behaviors::MultiPin
10
11
  include Behaviors::Callbacks
11
-
12
+ include Behaviors::Lifecycle
13
+
12
14
  attr_reader :baud
13
15
 
14
16
  def initialize_pins(options={})
@@ -16,10 +18,10 @@ module Denko
16
18
  proxy_pin(:rx, UARTRxPin)
17
19
  end
18
20
 
19
- def after_initialize(options={})
21
+ after_initialize do
20
22
  hook_rx_callback
21
23
  initialize_buffer
22
- start(options[:baud] || 9600)
24
+ start(params[:baud] || 9600)
23
25
  end
24
26
 
25
27
  def initialize_buffer
@@ -3,23 +3,24 @@ module Denko
3
3
  class Hardware
4
4
  include Behaviors::SinglePin
5
5
  include Behaviors::Callbacks
6
+ include Behaviors::Lifecycle
6
7
 
7
8
  attr_reader :index, :baud
8
-
9
- def before_initialize(options={})
10
- if options[:index] && (options[:index] > 0) && (options[:index] < 4)
11
- @index = options[:index]
9
+
10
+ before_initialize do
11
+ if params[:index] && (params[:index] > 0) && (params[:index] < 4)
12
+ @index = params[:index]
12
13
  else
13
- raise ArgumentError, "UART index (#{options[:index]}) not given or out of range (1..3)"
14
+ raise ArgumentError, "UART index (#{params[:index]}) not given or out of range (1..3)"
14
15
  end
15
16
 
16
17
  # Set pin to a "virtual pin" in 251 - 253 that will match the board.
17
- options[:pin] = 250 + options[:index]
18
+ params[:pin] = 250 + params[:index]
18
19
  end
19
20
 
20
- def after_initialize(options={})
21
+ after_initialize do
21
22
  initialize_buffer
22
- start(options[:baud] ||= 9600)
23
+ start(params[:baud] ||= 9600)
23
24
  end
24
25
 
25
26
  def initialize_buffer
data/lib/denko/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Denko
2
- VERSION = "0.13.5"
2
+ VERSION = "0.14.0"
3
3
  end
data/lib/denko.rb CHANGED
@@ -4,11 +4,18 @@ module Denko
4
4
  def self.root
5
5
  File.expand_path '../..', __FILE__
6
6
  end
7
+
8
+ def self.cruby?
9
+ RUBY_ENGINE == "ruby"
10
+ end
7
11
  end
8
12
 
9
13
  # For method delegation.
10
14
  require 'forwardable'
11
15
 
16
+ # Bypass mutexes where possible for CRuby.
17
+ require_relative 'denko/mutex_stub'
18
+
12
19
  # Component support stuff.
13
20
  require_relative 'denko/version'
14
21
  require_relative 'denko/behaviors'
@@ -37,3 +44,6 @@ require_relative 'denko/led'
37
44
  require_relative 'denko/motor'
38
45
  require_relative 'denko/rtc'
39
46
  require_relative 'denko/sensor'
47
+
48
+ # Diagnostics
49
+ require_relative 'denko/connection/binary_echo'