denko 0.13.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 (627) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/build_avr.yml +61 -0
  3. data/.github/workflows/build_esp32.yml +58 -0
  4. data/.github/workflows/build_esp8266.yml +57 -0
  5. data/.github/workflows/build_megaavr.yml +61 -0
  6. data/.github/workflows/build_rp2040.yml +61 -0
  7. data/.github/workflows/build_sam3x.yml +59 -0
  8. data/.github/workflows/build_samd.yml +61 -0
  9. data/.github/workflows/ruby.yml +47 -0
  10. data/.gitignore +24 -0
  11. data/.gitmodules +3 -0
  12. data/.vscode/settings.json +5 -0
  13. data/.vscode/tasks.json +20 -0
  14. data/CHANGELOG.md +466 -0
  15. data/DEPS_CLI.md +80 -0
  16. data/DEPS_IDE.md +120 -0
  17. data/Gemfile +4 -0
  18. data/HARDWARE.md +195 -0
  19. data/LICENSE +22 -0
  20. data/README.md +152 -0
  21. data/Rakefile +11 -0
  22. data/bin/denko +22 -0
  23. data/build +27 -0
  24. data/denko.gemspec +47 -0
  25. data/examples/advanced/rotary_encoder_mac_volume.rb +48 -0
  26. data/examples/advanced/ssd1306_time_temp_rh.rb +48 -0
  27. data/examples/analog_io/ads1118.rb +74 -0
  28. data/examples/analog_io/dac_loopback.rb +32 -0
  29. data/examples/analog_io/input.rb +52 -0
  30. data/examples/connection/tcp.rb +34 -0
  31. data/examples/digital_io/rotary_encoder.rb +26 -0
  32. data/examples/display/hd44780.png +0 -0
  33. data/examples/display/hd44780.rb +39 -0
  34. data/examples/display/ssd1306.rb +40 -0
  35. data/examples/display/ssd1306_s2_pico.rb +29 -0
  36. data/examples/eeprom/built_in.rb +32 -0
  37. data/examples/i2c/search.rb +53 -0
  38. data/examples/led/apa102_bounce.rb +33 -0
  39. data/examples/led/apa102_breathe.rb +45 -0
  40. data/examples/led/builtin_blink.rb +12 -0
  41. data/examples/led/seven_segment_char_echo.rb +15 -0
  42. data/examples/led/ws2812_bounce.rb +32 -0
  43. data/examples/led/ws2812_builtin_blink.rb +21 -0
  44. data/examples/motor/l298.rb +43 -0
  45. data/examples/motor/servo.rb +16 -0
  46. data/examples/motor/stepper.png +0 -0
  47. data/examples/motor/stepper.rb +43 -0
  48. data/examples/pulse_io/buzzer.rb +30 -0
  49. data/examples/pulse_io/ir_transmitter.rb +55 -0
  50. data/examples/rtc/ds3231.rb +48 -0
  51. data/examples/sensor/aht10.rb +15 -0
  52. data/examples/sensor/aht20.rb +15 -0
  53. data/examples/sensor/bme280.rb +75 -0
  54. data/examples/sensor/dht.rb +24 -0
  55. data/examples/sensor/ds18b20.rb +58 -0
  56. data/examples/sensor/htu21d.rb +54 -0
  57. data/examples/sensor/htu31d.rb +31 -0
  58. data/examples/spi/input_register.rb +50 -0
  59. data/examples/spi/output_register.rb +49 -0
  60. data/examples/spi/ssd_through_register.rb +40 -0
  61. data/examples/spi/two_registers.rb +46 -0
  62. data/examples/uart/bit_bang_read.rb +16 -0
  63. data/examples/uart/bit_bang_write.rb +16 -0
  64. data/examples/uart/board_passthrough.rb +34 -0
  65. data/examples/uart/hardware_loopback.rb +16 -0
  66. data/lib/denko/analog_io/ads1118.rb +182 -0
  67. data/lib/denko/analog_io/input.rb +79 -0
  68. data/lib/denko/analog_io/output.rb +20 -0
  69. data/lib/denko/analog_io/potentiometer.rb +15 -0
  70. data/lib/denko/analog_io/sensor.rb +6 -0
  71. data/lib/denko/analog_io.rb +9 -0
  72. data/lib/denko/behaviors/board_proxy.rb +23 -0
  73. data/lib/denko/behaviors/bus_controller.rb +11 -0
  74. data/lib/denko/behaviors/bus_controller_addressed.rb +15 -0
  75. data/lib/denko/behaviors/bus_peripheral.rb +21 -0
  76. data/lib/denko/behaviors/bus_peripheral_addressed.rb +15 -0
  77. data/lib/denko/behaviors/callbacks.rb +67 -0
  78. data/lib/denko/behaviors/component.rb +48 -0
  79. data/lib/denko/behaviors/input_pin.rb +24 -0
  80. data/lib/denko/behaviors/listener.rb +22 -0
  81. data/lib/denko/behaviors/multi_pin.rb +72 -0
  82. data/lib/denko/behaviors/output_pin.rb +13 -0
  83. data/lib/denko/behaviors/poller.rb +31 -0
  84. data/lib/denko/behaviors/reader.rb +49 -0
  85. data/lib/denko/behaviors/single_pin.rb +26 -0
  86. data/lib/denko/behaviors/state.rb +24 -0
  87. data/lib/denko/behaviors/subcomponents.rb +35 -0
  88. data/lib/denko/behaviors/threaded.rb +54 -0
  89. data/lib/denko/behaviors.rb +26 -0
  90. data/lib/denko/board/core.rb +151 -0
  91. data/lib/denko/board/eeprom.rb +20 -0
  92. data/lib/denko/board/i2c.rb +68 -0
  93. data/lib/denko/board/infrared.rb +18 -0
  94. data/lib/denko/board/led_array.rb +18 -0
  95. data/lib/denko/board/map.rb +46 -0
  96. data/lib/denko/board/message_pack.rb +7 -0
  97. data/lib/denko/board/one_wire.rb +34 -0
  98. data/lib/denko/board/pulse.rb +26 -0
  99. data/lib/denko/board/servo.rb +22 -0
  100. data/lib/denko/board/spi.rb +65 -0
  101. data/lib/denko/board/spi_bit_bang.rb +41 -0
  102. data/lib/denko/board/tone.rb +23 -0
  103. data/lib/denko/board/uart.rb +42 -0
  104. data/lib/denko/board/uart_bit_bang.rb +33 -0
  105. data/lib/denko/board.rb +104 -0
  106. data/lib/denko/connection/base.rb +75 -0
  107. data/lib/denko/connection/board_uart.rb +36 -0
  108. data/lib/denko/connection/flow_control.rb +153 -0
  109. data/lib/denko/connection/handshake.rb +60 -0
  110. data/lib/denko/connection/serial.rb +90 -0
  111. data/lib/denko/connection/tcp.rb +44 -0
  112. data/lib/denko/connection.rb +10 -0
  113. data/lib/denko/digital_io/button.rb +8 -0
  114. data/lib/denko/digital_io/input.rb +44 -0
  115. data/lib/denko/digital_io/output.rb +47 -0
  116. data/lib/denko/digital_io/relay.rb +6 -0
  117. data/lib/denko/digital_io/rotary_encoder.rb +107 -0
  118. data/lib/denko/digital_io.rb +9 -0
  119. data/lib/denko/display/canvas.rb +282 -0
  120. data/lib/denko/display/hd44780.rb +266 -0
  121. data/lib/denko/display/ssd1306.rb +179 -0
  122. data/lib/denko/display.rb +7 -0
  123. data/lib/denko/eeprom/built_in.rb +69 -0
  124. data/lib/denko/eeprom.rb +5 -0
  125. data/lib/denko/fonts.rb +106 -0
  126. data/lib/denko/i2c/bus.rb +52 -0
  127. data/lib/denko/i2c/peripheral.rb +38 -0
  128. data/lib/denko/i2c.rb +6 -0
  129. data/lib/denko/led/apa102.rb +87 -0
  130. data/lib/denko/led/base.rb +12 -0
  131. data/lib/denko/led/rgb.rb +38 -0
  132. data/lib/denko/led/seven_segment.rb +111 -0
  133. data/lib/denko/led/ws2812.rb +48 -0
  134. data/lib/denko/led.rb +13 -0
  135. data/lib/denko/message.rb +92 -0
  136. data/lib/denko/motor/l298.rb +49 -0
  137. data/lib/denko/motor/servo.rb +51 -0
  138. data/lib/denko/motor/stepper.rb +71 -0
  139. data/lib/denko/motor.rb +7 -0
  140. data/lib/denko/one_wire/bus.rb +61 -0
  141. data/lib/denko/one_wire/bus_enumeration.rb +88 -0
  142. data/lib/denko/one_wire/constants.rb +17 -0
  143. data/lib/denko/one_wire/helper.rb +33 -0
  144. data/lib/denko/one_wire/peripheral.rb +62 -0
  145. data/lib/denko/one_wire.rb +9 -0
  146. data/lib/denko/pulse_io/buzzer.rb +25 -0
  147. data/lib/denko/pulse_io/ir_transmitter.rb +22 -0
  148. data/lib/denko/pulse_io/pwm_output.rb +34 -0
  149. data/lib/denko/pulse_io.rb +7 -0
  150. data/lib/denko/rtc/ds3231.rb +48 -0
  151. data/lib/denko/rtc.rb +5 -0
  152. data/lib/denko/sensor/aht.rb +165 -0
  153. data/lib/denko/sensor/bme280.rb +366 -0
  154. data/lib/denko/sensor/dht.rb +43 -0
  155. data/lib/denko/sensor/ds18b20.rb +74 -0
  156. data/lib/denko/sensor/htu21d.rb +168 -0
  157. data/lib/denko/sensor/htu31d.rb +187 -0
  158. data/lib/denko/sensor/virtual.rb +42 -0
  159. data/lib/denko/sensor.rb +13 -0
  160. data/lib/denko/spi/base_register.rb +37 -0
  161. data/lib/denko/spi/bit_bang.rb +74 -0
  162. data/lib/denko/spi/bus.rb +44 -0
  163. data/lib/denko/spi/input_register.rb +130 -0
  164. data/lib/denko/spi/output_register.rb +67 -0
  165. data/lib/denko/spi/peripheral.rb +43 -0
  166. data/lib/denko/spi.rb +10 -0
  167. data/lib/denko/uart/bit_bang.rb +69 -0
  168. data/lib/denko/uart/hardware.rb +65 -0
  169. data/lib/denko/uart.rb +6 -0
  170. data/lib/denko/version.rb +3 -0
  171. data/lib/denko.rb +39 -0
  172. data/lib/denko_cli/generator.rb +171 -0
  173. data/lib/denko_cli/helper.rb +29 -0
  174. data/lib/denko_cli/missing_files.txt +20 -0
  175. data/lib/denko_cli/packages.rb +101 -0
  176. data/lib/denko_cli/parser.rb +73 -0
  177. data/lib/denko_cli/targets.rb +30 -0
  178. data/lib/denko_cli/targets.txt +113 -0
  179. data/lib/denko_cli/usage.txt +34 -0
  180. data/lib/denko_cli.rb +18 -0
  181. data/src/denko_ethernet.ino +78 -0
  182. data/src/denko_serial.ino +41 -0
  183. data/src/denko_wifi.ino +157 -0
  184. data/src/lib/Denko.cpp +330 -0
  185. data/src/lib/Denko.h +259 -0
  186. data/src/lib/DenkoCoreIO.cpp +322 -0
  187. data/src/lib/DenkoDefines.h +116 -0
  188. data/src/lib/DenkoEEPROM.cpp +64 -0
  189. data/src/lib/DenkoI2C.cpp +155 -0
  190. data/src/lib/DenkoIROut.cpp +33 -0
  191. data/src/lib/DenkoIROutESP.cpp +26 -0
  192. data/src/lib/DenkoLEDArray.cpp +49 -0
  193. data/src/lib/DenkoOneWire.cpp +156 -0
  194. data/src/lib/DenkoPulseInput.cpp +57 -0
  195. data/src/lib/DenkoSPI.cpp +165 -0
  196. data/src/lib/DenkoSPIBB.cpp +156 -0
  197. data/src/lib/DenkoServo.cpp +83 -0
  198. data/src/lib/DenkoTone.cpp +25 -0
  199. data/src/lib/DenkoUART.cpp +118 -0
  200. data/src/lib/DenkoUARTBB.cpp +62 -0
  201. data/target.yml +3 -0
  202. data/test/analog_io/input_test.rb +38 -0
  203. data/test/analog_io/output_test.rb +26 -0
  204. data/test/analog_io/potentiometer_test.rb +62 -0
  205. data/test/behaviors/board_proxy_test.rb +24 -0
  206. data/test/behaviors/bus_controller_addressed_test.rb +40 -0
  207. data/test/behaviors/bus_controller_test.rb +28 -0
  208. data/test/behaviors/bus_peripheral_addressed.rb +44 -0
  209. data/test/behaviors/bus_peripheral_test.rb +39 -0
  210. data/test/behaviors/callbacks_test.rb +118 -0
  211. data/test/behaviors/component_test.rb +56 -0
  212. data/test/behaviors/input_pin_test.rb +42 -0
  213. data/test/behaviors/listener_test.rb +60 -0
  214. data/test/behaviors/multi_pin_test.rb +70 -0
  215. data/test/behaviors/output_pin_test.rb +27 -0
  216. data/test/behaviors/poller_test.rb +64 -0
  217. data/test/behaviors/reader_test.rb +68 -0
  218. data/test/behaviors/single_pin_test.rb +41 -0
  219. data/test/behaviors/subcomponents_test.rb +75 -0
  220. data/test/behaviors/threaded_test.rb +98 -0
  221. data/test/board/board_test.rb +130 -0
  222. data/test/board/core_test.rb +182 -0
  223. data/test/board/eeprom_test.rb +34 -0
  224. data/test/board/helper_test.rb +38 -0
  225. data/test/board/i2c_test.rb +114 -0
  226. data/test/board/infrared_test.rb +37 -0
  227. data/test/board/message_test.rb +54 -0
  228. data/test/board/one_wire_test.rb +69 -0
  229. data/test/board/pulse_test.rb +51 -0
  230. data/test/board/servo_test.rb +47 -0
  231. data/test/board/spi_test.rb +97 -0
  232. data/test/board/tone_test.rb +42 -0
  233. data/test/connection/serial_test.rb +172 -0
  234. data/test/connection/tcp_test.rb +37 -0
  235. data/test/digital_io/input_test.rb +65 -0
  236. data/test/digital_io/output_test.rb +64 -0
  237. data/test/digital_io/rotary_encoder_test.rb +99 -0
  238. data/test/display/hd44780_test.rb +23 -0
  239. data/test/eeprom/built_in_test.rb +61 -0
  240. data/test/i2c/bus_test.rb +66 -0
  241. data/test/i2c/peripheral_test.rb +50 -0
  242. data/test/led/base_test.rb +24 -0
  243. data/test/led/rgb_test.rb +64 -0
  244. data/test/led/seven_segment_test.rb +86 -0
  245. data/test/motor/servo_test.rb +62 -0
  246. data/test/motor/stepper_test.rb +51 -0
  247. data/test/one_wire/bus_enumerator_test.rb +134 -0
  248. data/test/one_wire/bus_test.rb +142 -0
  249. data/test/one_wire/helper_test.rb +18 -0
  250. data/test/one_wire/peripheral_test.rb +158 -0
  251. data/test/pulse_io/buzzer_test.rb +48 -0
  252. data/test/pulse_io/ir_transmitter_test.rb +38 -0
  253. data/test/pulse_io/pwm_output_test.rb +72 -0
  254. data/test/rtc/ds3231_test.rb +55 -0
  255. data/test/sensor/dht_test.rb +64 -0
  256. data/test/sensor/ds18b20_test.rb +107 -0
  257. data/test/spi/base_register_test.rb +34 -0
  258. data/test/spi/bus_test.rb +76 -0
  259. data/test/spi/input_register_test.rb +140 -0
  260. data/test/spi/output_register_test.rb +93 -0
  261. data/test/test_helper.rb +223 -0
  262. data/test/uart/bitbang_test.rb +37 -0
  263. data/tutorial/01-led/led.fzz +0 -0
  264. data/tutorial/01-led/led.pdf +0 -0
  265. data/tutorial/01-led/led.rb +73 -0
  266. data/tutorial/02-button/button.fzz +0 -0
  267. data/tutorial/02-button/button.pdf +0 -0
  268. data/tutorial/02-button/button.rb +64 -0
  269. data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
  270. data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
  271. data/tutorial/03-potentiometer/potentiometer.rb +62 -0
  272. data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
  273. data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
  274. data/tutorial/04-pwm_led/pwm_led.rb +66 -0
  275. data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
  276. data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
  277. data/tutorial/05-rgb_led/rgb_led.rb +58 -0
  278. data/tutorial/05-rgb_led/rgb_mapping.rb +76 -0
  279. data/vendor/board-maps/.gitignore +56 -0
  280. data/vendor/board-maps/.gitmodules +21 -0
  281. data/vendor/board-maps/BoardMap.h +1364 -0
  282. data/vendor/board-maps/README.md +51 -0
  283. data/vendor/board-maps/lib/boards_parser.rb +66 -0
  284. data/vendor/board-maps/lib/header_parser.rb +164 -0
  285. data/vendor/board-maps/run.rb +47 -0
  286. data/vendor/board-maps/yaml/0XCB_HELIOS.yml +48 -0
  287. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +25 -0
  288. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +25 -0
  289. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +27 -0
  290. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +29 -0
  291. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +29 -0
  292. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +25 -0
  293. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +27 -0
  294. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +30 -0
  295. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +48 -0
  296. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +48 -0
  297. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +48 -0
  298. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +48 -0
  299. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +48 -0
  300. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +48 -0
  301. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +48 -0
  302. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +48 -0
  303. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +24 -0
  304. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +48 -0
  305. data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +48 -0
  306. data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +48 -0
  307. data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +16 -0
  308. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +12 -0
  309. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +22 -0
  310. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +20 -0
  311. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +27 -0
  312. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +48 -0
  313. data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +48 -0
  314. data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +48 -0
  315. data/vendor/board-maps/yaml/ALKS.yml +34 -0
  316. data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +16 -0
  317. data/vendor/board-maps/yaml/AVR_ADK.yml +24 -0
  318. data/vendor/board-maps/yaml/AVR_BT.yml +16 -0
  319. data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +14 -0
  320. data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +16 -0
  321. data/vendor/board-maps/yaml/AVR_ESPLORA.yml +20 -0
  322. data/vendor/board-maps/yaml/AVR_ETHERNET.yml +16 -0
  323. data/vendor/board-maps/yaml/AVR_FIO.yml +16 -0
  324. data/vendor/board-maps/yaml/AVR_GEMMA.yml +6 -0
  325. data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +20 -0
  326. data/vendor/board-maps/yaml/AVR_LEONARDO.yml +20 -0
  327. data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +20 -0
  328. data/vendor/board-maps/yaml/AVR_LILYPAD.yml +16 -0
  329. data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +20 -0
  330. data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +20 -0
  331. data/vendor/board-maps/yaml/AVR_MEGA.yml +24 -0
  332. data/vendor/board-maps/yaml/AVR_MEGA2560.yml +24 -0
  333. data/vendor/board-maps/yaml/AVR_MICRO.yml +20 -0
  334. data/vendor/board-maps/yaml/AVR_MINI.yml +16 -0
  335. data/vendor/board-maps/yaml/AVR_NANO.yml +16 -0
  336. data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +22 -0
  337. data/vendor/board-maps/yaml/AVR_NG.yml +16 -0
  338. data/vendor/board-maps/yaml/AVR_PRO.yml +16 -0
  339. data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +22 -0
  340. data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +19 -0
  341. data/vendor/board-maps/yaml/AVR_UNO.yml +16 -0
  342. data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +16 -0
  343. data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +22 -0
  344. data/vendor/board-maps/yaml/AVR_YUN.yml +20 -0
  345. data/vendor/board-maps/yaml/AVR_YUNMINI.yml +20 -0
  346. data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +14 -0
  347. data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +39 -0
  348. data/vendor/board-maps/yaml/BPI_BIT.yml +9 -0
  349. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +31 -0
  350. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040-7A.yml +48 -0
  351. data/vendor/board-maps/yaml/BeeMotionS3.yml +40 -0
  352. data/vendor/board-maps/yaml/Bee_Motion.yml +27 -0
  353. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +1 -0
  354. data/vendor/board-maps/yaml/Bee_S3.yml +38 -0
  355. data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +39 -0
  356. data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +38 -0
  357. data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +32 -0
  358. data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +36 -0
  359. data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +39 -0
  360. data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +39 -0
  361. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +42 -0
  362. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +38 -0
  363. data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +38 -0
  364. data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +19 -0
  365. data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +26 -0
  366. data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +48 -0
  367. data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +48 -0
  368. data/vendor/board-maps/yaml/CoreESP32.yml +49 -0
  369. data/vendor/board-maps/yaml/D1_MINI32.yml +36 -0
  370. data/vendor/board-maps/yaml/D1_UNO32.yml +28 -0
  371. data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +48 -0
  372. data/vendor/board-maps/yaml/DENKY.yml +26 -0
  373. data/vendor/board-maps/yaml/DENKY_PICOV3.yml +26 -0
  374. data/vendor/board-maps/yaml/DENKY_WROOM32.yml +26 -0
  375. data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +26 -0
  376. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +14 -0
  377. data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +48 -0
  378. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +44 -0
  379. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +38 -0
  380. data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +7 -0
  381. data/vendor/board-maps/yaml/DPU_ESP32.yml +26 -0
  382. data/vendor/board-maps/yaml/DYDK.yml +38 -0
  383. data/vendor/board-maps/yaml/DYDK1A.yml +37 -0
  384. data/vendor/board-maps/yaml/DYDK1Av2.yml +45 -0
  385. data/vendor/board-maps/yaml/DYG.yml +20 -0
  386. data/vendor/board-maps/yaml/DYM.yml +40 -0
  387. data/vendor/board-maps/yaml/DYMv2.yml +39 -0
  388. data/vendor/board-maps/yaml/D_Duino_32.yml +29 -0
  389. data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +44 -0
  390. data/vendor/board-maps/yaml/ESP320.yml +8 -0
  391. data/vendor/board-maps/yaml/ESP32C3_DEV.yml +14 -0
  392. data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +13 -0
  393. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +33 -0
  394. data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +34 -0
  395. data/vendor/board-maps/yaml/ESP32S2_USB.yml +33 -0
  396. data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +7 -0
  397. data/vendor/board-maps/yaml/ESP32S3_DEV.yml +38 -0
  398. data/vendor/board-maps/yaml/ESP32_DEV.yml +26 -0
  399. data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +26 -0
  400. data/vendor/board-maps/yaml/ESP32_EVB.yml +7 -0
  401. data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +13 -0
  402. data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +13 -0
  403. data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +13 -0
  404. data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +13 -0
  405. data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +27 -0
  406. data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +24 -0
  407. data/vendor/board-maps/yaml/ESP32_PICO.yml +26 -0
  408. data/vendor/board-maps/yaml/ESP32_POE.yml +7 -0
  409. data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +7 -0
  410. data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +16 -0
  411. data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +11 -0
  412. data/vendor/board-maps/yaml/ESP32_THING.yml +27 -0
  413. data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +30 -0
  414. data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +30 -0
  415. data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +26 -0
  416. data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +26 -0
  417. data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +9 -0
  418. data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +8 -0
  419. data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +7 -0
  420. data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +7 -0
  421. data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +9 -0
  422. data/vendor/board-maps/yaml/ESP8266_ESP01.yml +9 -0
  423. data/vendor/board-maps/yaml/ESP8266_ESP07.yml +20 -0
  424. data/vendor/board-maps/yaml/ESP8266_ESP12.yml +20 -0
  425. data/vendor/board-maps/yaml/ESP8266_ESP13.yml +17 -0
  426. data/vendor/board-maps/yaml/ESP8266_ESP210.yml +9 -0
  427. data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +9 -0
  428. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +9 -0
  429. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +9 -0
  430. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +9 -0
  431. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +9 -0
  432. data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +9 -0
  433. data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +22 -0
  434. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +20 -0
  435. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +20 -0
  436. data/vendor/board-maps/yaml/ESP8266_OAK.yml +9 -0
  437. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +9 -0
  438. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +9 -0
  439. data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +25 -0
  440. data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +9 -0
  441. data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +9 -0
  442. data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +9 -0
  443. data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +9 -0
  444. data/vendor/board-maps/yaml/ESP8266_THING.yml +9 -0
  445. data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +9 -0
  446. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +18 -0
  447. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +18 -0
  448. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +18 -0
  449. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +25 -0
  450. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +18 -0
  451. data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +9 -0
  452. data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +9 -0
  453. data/vendor/board-maps/yaml/ESPECTRO32.yml +27 -0
  454. data/vendor/board-maps/yaml/ESPea32.yml +27 -0
  455. data/vendor/board-maps/yaml/ESPino32.yml +27 -0
  456. data/vendor/board-maps/yaml/ET-Board.yml +26 -0
  457. data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +46 -0
  458. data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +7 -0
  459. data/vendor/board-maps/yaml/FEATHERS2.yml +33 -0
  460. data/vendor/board-maps/yaml/FEATHERS2NEO.yml +30 -0
  461. data/vendor/board-maps/yaml/FEATHERS3.yml +29 -0
  462. data/vendor/board-maps/yaml/FEATHER_ESP32.yml +28 -0
  463. data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +48 -0
  464. data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +33 -0
  465. data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +33 -0
  466. data/vendor/board-maps/yaml/FROG_ESP32.yml +26 -0
  467. data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +22 -0
  468. data/vendor/board-maps/yaml/GEN4_IOD.yml +9 -0
  469. data/vendor/board-maps/yaml/GENERIC_RP2040.yml +48 -0
  470. data/vendor/board-maps/yaml/HEALTHYPI_4.yml +27 -0
  471. data/vendor/board-maps/yaml/HONEYLEMON.yml +27 -0
  472. data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +27 -0
  473. data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +16 -0
  474. data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +47 -0
  475. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +19 -0
  476. data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +34 -0
  477. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +26 -0
  478. data/vendor/board-maps/yaml/LOLIN32.yml +27 -0
  479. data/vendor/board-maps/yaml/LOLIN32_LITE.yml +27 -0
  480. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +14 -0
  481. data/vendor/board-maps/yaml/LOLIN_D32.yml +27 -0
  482. data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +27 -0
  483. data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +34 -0
  484. data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +34 -0
  485. data/vendor/board-maps/yaml/LOLIN_S3.yml +32 -0
  486. data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +32 -0
  487. data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +32 -0
  488. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +18 -0
  489. data/vendor/board-maps/yaml/LoPy.yml +27 -0
  490. data/vendor/board-maps/yaml/LoPy4.yml +27 -0
  491. data/vendor/board-maps/yaml/M5STACK_CORES3.yml +8 -0
  492. data/vendor/board-maps/yaml/M5STACK_Core2.yml +9 -0
  493. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +10 -0
  494. data/vendor/board-maps/yaml/M5Stack-Timer-CAM.yml +10 -0
  495. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +10 -0
  496. data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +7 -0
  497. data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +9 -0
  498. data/vendor/board-maps/yaml/M5Stack_Core_ESP32.yml +10 -0
  499. data/vendor/board-maps/yaml/M5Stack_Station.yml +10 -0
  500. data/vendor/board-maps/yaml/M5Stick_C.yml +10 -0
  501. data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +21 -0
  502. data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +48 -0
  503. data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +48 -0
  504. data/vendor/board-maps/yaml/METRO_ESP32S2.yml +34 -0
  505. data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +27 -0
  506. data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +27 -0
  507. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +27 -0
  508. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +27 -0
  509. data/vendor/board-maps/yaml/MICROS2.yml +34 -0
  510. data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +9 -0
  511. data/vendor/board-maps/yaml/Metro.yml +8 -0
  512. data/vendor/board-maps/yaml/NANO32.yml +27 -0
  513. data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +35 -0
  514. data/vendor/board-maps/yaml/NEBULAS3.yml +33 -0
  515. data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +48 -0
  516. data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +48 -0
  517. data/vendor/board-maps/yaml/Node32s.yml +27 -0
  518. data/vendor/board-maps/yaml/NodeMCU_32S.yml +27 -0
  519. data/vendor/board-maps/yaml/ODROID_ESP32.yml +10 -0
  520. data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +24 -0
  521. data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +33 -0
  522. data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +48 -0
  523. data/vendor/board-maps/yaml/PROS3.yml +28 -0
  524. data/vendor/board-maps/yaml/PYCOM_GPY.yml +27 -0
  525. data/vendor/board-maps/yaml/Piranha.yml +16 -0
  526. data/vendor/board-maps/yaml/Pocket32.yml +27 -0
  527. data/vendor/board-maps/yaml/QUANTUM.yml +26 -0
  528. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +48 -0
  529. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +48 -0
  530. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +32 -0
  531. data/vendor/board-maps/yaml/RMP.yml +33 -0
  532. data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +12 -0
  533. data/vendor/board-maps/yaml/SAMD_MKR1000.yml +20 -0
  534. data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +19 -0
  535. data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +15 -0
  536. data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +15 -0
  537. data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +19 -0
  538. data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +18 -0
  539. data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +18 -0
  540. data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +19 -0
  541. data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +19 -0
  542. data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +13 -0
  543. data/vendor/board-maps/yaml/SAMD_TIAN.yml +15 -0
  544. data/vendor/board-maps/yaml/SAMD_ZERO.yml +14 -0
  545. data/vendor/board-maps/yaml/SAM_DUE.yml +26 -0
  546. data/vendor/board-maps/yaml/SAM_ZERO.yml +15 -0
  547. data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +47 -0
  548. data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +29 -0
  549. data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +48 -0
  550. data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +26 -0
  551. data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +48 -0
  552. data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +48 -0
  553. data/vendor/board-maps/yaml/STAMP_S3.yml +4 -0
  554. data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +31 -0
  555. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +23 -0
  556. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +23 -0
  557. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +23 -0
  558. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +23 -0
  559. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +23 -0
  560. data/vendor/board-maps/yaml/TBeam.yml +23 -0
  561. data/vendor/board-maps/yaml/TINYPICO.yml +26 -0
  562. data/vendor/board-maps/yaml/TINYS2.yml +33 -0
  563. data/vendor/board-maps/yaml/TINYS3.yml +25 -0
  564. data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +11 -0
  565. data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +28 -0
  566. data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +28 -0
  567. data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +28 -0
  568. data/vendor/board-maps/yaml/TTGO_T1.yml +27 -0
  569. data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +27 -0
  570. data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +27 -0
  571. data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +10 -0
  572. data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +10 -0
  573. data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +10 -0
  574. data/vendor/board-maps/yaml/TWATCH_BASE.yml +10 -0
  575. data/vendor/board-maps/yaml/TWatch.yml +10 -0
  576. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +18 -0
  577. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +18 -0
  578. data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +48 -0
  579. data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +43 -0
  580. data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +48 -0
  581. data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +23 -0
  582. data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +23 -0
  583. data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +48 -0
  584. data/vendor/board-maps/yaml/WATCHY.yml +7 -0
  585. data/vendor/board-maps/yaml/WATCHY_V10.yml +7 -0
  586. data/vendor/board-maps/yaml/WATCHY_V15.yml +7 -0
  587. data/vendor/board-maps/yaml/WATCHY_V20.yml +7 -0
  588. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +47 -0
  589. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +47 -0
  590. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +47 -0
  591. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +48 -0
  592. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +47 -0
  593. data/vendor/board-maps/yaml/WESP32.yml +17 -0
  594. data/vendor/board-maps/yaml/WIDORA_AIR.yml +34 -0
  595. data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +23 -0
  596. data/vendor/board-maps/yaml/WIFINFO.yml +20 -0
  597. data/vendor/board-maps/yaml/WIPY3.yml +27 -0
  598. data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +48 -0
  599. data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +48 -0
  600. data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +48 -0
  601. data/vendor/board-maps/yaml/WT32_ETH01.yml +8 -0
  602. data/vendor/board-maps/yaml/WiFiduino32S3.yml +27 -0
  603. data/vendor/board-maps/yaml/WiFiduinoV2.yml +27 -0
  604. data/vendor/board-maps/yaml/Wifiduino32.yml +40 -0
  605. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +22 -0
  606. data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +36 -0
  607. data/vendor/board-maps/yaml/YD_RP2040.yml +48 -0
  608. data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +30 -0
  609. data/vendor/board-maps/yaml/connaxio_espoir.yml +18 -0
  610. data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +22 -0
  611. data/vendor/board-maps/yaml/fm_devkit.yml +15 -0
  612. data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +31 -0
  613. data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +28 -0
  614. data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +32 -0
  615. data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +27 -0
  616. data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +27 -0
  617. data/vendor/board-maps/yaml/heltec_wireless_stick.yml +27 -0
  618. data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +27 -0
  619. data/vendor/board-maps/yaml/openkb.yml +27 -0
  620. data/vendor/board-maps/yaml/roboheart_hercules.yml +17 -0
  621. data/vendor/board-maps/yaml/sensesiot_weizen.yml +26 -0
  622. data/vendor/board-maps/yaml/uPesy_WROOM.yml +27 -0
  623. data/vendor/board-maps/yaml/uPesy_WROVER.yml +27 -0
  624. data/vendor/board-maps/yaml/unphone8.yml +32 -0
  625. data/vendor/board-maps/yaml/unphone9.yml +32 -0
  626. data/vendor/board-maps/yaml/wifi_kit_8.yml +15 -0
  627. metadata +800 -0
@@ -0,0 +1,322 @@
1
+ #include "Denko.h"
2
+
3
+ // CMD = 00
4
+ // Set up a single pin for the desired type of input or output.
5
+ void Denko::setMode(byte p, byte m) {
6
+ //
7
+ // Use the lowest 3 bits of m to set different input/output modes, and enable
8
+ // or disable needed peripherals on different platforms.
9
+ //
10
+ // OUTPUT MODES:
11
+ // 000 = Digital Output
12
+ // 010 = PWM Ouptut
13
+ // 100 = DAC Output
14
+ //
15
+ // INPUT MODES
16
+ // 001 = Digital Input
17
+ // 011 = Digital Input with internal pulldown if available.
18
+ // 101 = Digital Input with internal pullup if available.
19
+ // 111 = Digital Input/Output (ESP32 Only?)
20
+ m = m & 0b00000111;
21
+
22
+ #if defined(ESP32) && defined(SOC_DAC_SUPPORTED)
23
+ // Free the LEDC channel if leaving PWM mode.
24
+ if (m != 0b010) releaseLEDC(p);
25
+
26
+ // Disable attached DAC if leaving DAC mode.
27
+ if (m != 0b100) dacDisable(p);
28
+ #endif
29
+
30
+ // On the SAMD21, mode needs to be INPUT when using the DAC.
31
+ #ifdef __SAMD21G18A__
32
+ if (m == 0b100){
33
+ pinMode(p, INPUT);
34
+ return;
35
+ }
36
+ #endif
37
+
38
+ // Handle the named INPUT_* states on boards implementing them.
39
+ #ifdef INPUT_PULLDOWN
40
+ if (m == 0b011) {
41
+ pinMode(p, INPUT_PULLDOWN);
42
+ return;
43
+ }
44
+ #endif
45
+
46
+ #ifdef INPUT_OUTPUT
47
+ if (m == 0b111) {
48
+ pinMode(p, INPUT_OUTPUT);
49
+ return;
50
+ }
51
+ #endif
52
+
53
+ #ifdef INPUT_PULLUP
54
+ if (m == 0b101) {
55
+ pinMode(p, INPUT_PULLUP);
56
+ return;
57
+ }
58
+ #endif
59
+
60
+ // Handle the standard INPUT and OUTPUT states.
61
+ // Allows INPUT_* to fallback to INPUT when not implemented.
62
+ if (bitRead(m, 0) == 0) {
63
+ pinMode(p, OUTPUT);
64
+ } else {
65
+ pinMode(p, INPUT);
66
+ }
67
+
68
+ // Write high to set pullup for AVRs that use this method.
69
+ #ifdef __AVR__
70
+ if (m == 0b101) digitalWrite(p, HIGH);
71
+ #endif
72
+ }
73
+
74
+ // CMD = 01
75
+ // Write a digital output pin. 0 for LOW, 1 or >0 for HIGH.
76
+ void Denko::dWrite(byte p, byte v, boolean echo) {
77
+
78
+ #ifdef __SAMD21G18A__
79
+ // digitalWrite doesn't implicitly disconnect PWM on the SAMD21.
80
+ pinMode(p, OUTPUT);
81
+ #endif
82
+
83
+ #ifdef ESP32
84
+ // Disconnect any DAC or LEDC peripheral the pin was using.
85
+ // Without this, setting GPIO level has no effect.
86
+ // NOTE: Does not release the LEDC channel or config. Can reattach in aWrite.
87
+ #if defined(SOC_DAC_SUPPORTED)
88
+ dacDisable(p);
89
+ #endif
90
+ ledcDetachPin(p);
91
+ #endif
92
+
93
+ if (v == 0) {
94
+ digitalWrite(p, LOW);
95
+ }
96
+ else {
97
+ digitalWrite(p, HIGH);
98
+ }
99
+ if (echo) coreResponse(p, v);
100
+ }
101
+
102
+ // CMD = 02
103
+ // Read a digital input pin. 0 for LOW, 1 for HIGH.
104
+ byte Denko::dRead(byte p) {
105
+ byte rval = digitalRead(p);
106
+ coreResponse(p, rval);
107
+ return rval;
108
+ }
109
+
110
+ // CMD = 03
111
+ // Write an analog output pin. 0 for LOW, up to 255 for HIGH @ 8-bit resolution.
112
+ void Denko::pwmWrite(byte p, int v, boolean echo) {
113
+ #ifdef ESP32
114
+ // Assign new or find existing LEDC channel for this pin.
115
+ byte channel = ledcChannel(p);
116
+
117
+ // Reattach the pin in case dWrite detached it.
118
+ ledcAttachPin(p, channel);
119
+
120
+ ledcWrite(channel, v);
121
+ #else
122
+ analogWrite(p,v);
123
+ #endif
124
+
125
+ if (echo) coreResponse(p, v);
126
+ }
127
+
128
+ //
129
+ // Manage ESP32 LEDC channels so we can do PWM write.
130
+ //
131
+ #ifdef ESP32
132
+ byte Denko::ledcChannel(byte p) {
133
+ // Search for enabled LEDC channel with given pin and use that if found.
134
+ for (int i = LEDC_CHANNEL_COUNT -1; i > 0; i--){
135
+ if ((ledcPins[i][0] == 1) && (ledcPins[i][1] == p)){
136
+ return i;
137
+ }
138
+ }
139
+
140
+ // We didn't find a channel to reuse.
141
+ for (int i = LEDC_CHANNEL_COUNT -1; i > 0; i--){
142
+ // If the channel isn't initialized and it isn't marked as used, use it.
143
+ // should find some way to check if the channel itslef is being used
144
+ if ((ledcPins[i][0] == 0)) {
145
+ assignLEDC(i, p);
146
+ return i;
147
+ }
148
+ }
149
+
150
+ // Return a useless channel if none available.
151
+ return 255;
152
+ };
153
+
154
+ // Assign a LEDC channel to a pin and save it.
155
+ byte Denko::assignLEDC(byte channel, byte p){
156
+ // First 8 channels: up to 40Mhz @ 16-bits
157
+ // Last 8 channels: up to 500kHz @ 13-bits
158
+ // Just use similar settings to ATmega for now.
159
+ ledcSetup(channel, 1000, 8);
160
+ ledcAttachPin(p, channel);
161
+
162
+ // Save the pin and mark it as in use.
163
+ ledcPins[channel][0] = 1;
164
+ ledcPins[channel][1] = p;
165
+ return channel;
166
+ }
167
+
168
+ // Release a LEDC channel when done with it.
169
+ void Denko::releaseLEDC(byte p){
170
+ // Detach the pin from the channel.
171
+ ledcDetachPin(p);
172
+
173
+ // Mark any channel associated with the pin as unused.
174
+ for (int i = LEDC_CHANNEL_COUNT -1; i > 0; i--){
175
+ if (ledcPins[i][1] == p) ledcPins[i][0] = 0;
176
+ }
177
+ }
178
+
179
+ // Clear all the LEDC channels on reset.
180
+ void Denko::clearLedcChannels(){
181
+ for (int i = LEDC_CHANNEL_COUNT -1; i > 0; i--){
182
+ // Stop the channel if it was still enabled.
183
+ if (ledcPins[i][0] != 0) ledcDetachPin(ledcPins[i][1]);
184
+
185
+ // Mark the channel as unused.
186
+ ledcPins[i][0] = 0;
187
+ }
188
+ }
189
+ #endif
190
+
191
+ // CMD = 04
192
+ // Write to a DAC (digital to analog converter) pin.
193
+ // This outputs a true analog resolution, unlike PWM.
194
+ void Denko::dacWrite(byte p, int v, boolean echo) {
195
+ #if defined(ESP32) && defined(SOC_DAC_SUPPORTED)
196
+ ::dacWrite(p, v);
197
+ #endif
198
+
199
+ #if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
200
+ analogWrite(p, v);
201
+ #endif
202
+ }
203
+
204
+ // CMD = 05
205
+ // Read an analog input pin. 0 for LOW, up to 1023 for HIGH @ 10-bit resolution.
206
+ int Denko::aRead(byte p) {
207
+ int rval = analogRead(p);
208
+ coreResponse(p, rval);
209
+ return rval;
210
+ }
211
+
212
+ // Simple response for core listeners, or any response with the pin:value pattern.
213
+ void Denko::coreResponse(int p, int v){
214
+ stream->print(p);
215
+ stream->print(':');
216
+ stream->print(v);
217
+ stream->print('\n');
218
+ }
219
+
220
+ // CMD = 06
221
+ // Enable, disable and change settings for core (digital/analog) listeners.
222
+ // See Denko.h for settings and mask layout.
223
+ void Denko::setListener(byte p, boolean enabled, byte analog, byte exponent, boolean local){
224
+ // Pre-format the settings into a mask byte.
225
+ byte settingMask = 0;
226
+ if (enabled) settingMask = settingMask | 0b10000000;
227
+ if (analog) settingMask = settingMask | 0b1000000;
228
+ if (local) settingMask = settingMask | 0b0010000;
229
+ settingMask = settingMask | exponent;
230
+
231
+ // If an existing listener was already using this pin, just update settings.
232
+ boolean found = false;
233
+ for(byte i=0; i<PIN_COUNT; i++){
234
+ if (listeners[i][1] == p){
235
+ found = true;
236
+ if (bitRead(listeners[i][0], 4) == 0) {
237
+ listeners[i][0] = settingMask;
238
+ } else if(local) {
239
+ // Only allow local code to update local listeners.
240
+ listeners[i][0] = settingMask;
241
+ }
242
+ break;
243
+ }
244
+ }
245
+
246
+ // If this pin wasn't used before, take the lowest index inactive listener.
247
+ if (!found){
248
+ for(byte i=0; i<PIN_COUNT; i++){
249
+ if (bitRead(listeners[i][0], 7) == 0){
250
+ listeners[i][0] = settingMask;
251
+ listeners[i][1] = p;
252
+ break;
253
+ }
254
+ }
255
+ }
256
+
257
+ // Keep track of how far into the listener array to go when updating.
258
+ findLastActiveListener();
259
+ }
260
+
261
+ // Runs once on every loop to update necessary listeners.
262
+ void Denko::updateCoreListeners() {
263
+ for (byte i = 0; i <= lastActiveListener; i++){
264
+ // Check if active.
265
+ if (bitRead(listeners[i][0], 7) == 1){
266
+ // Check if to update it on this tick.
267
+ // Divider exponent is last 3 bits of settings.
268
+ byte exponent = listeners[i][0] & 0B00000111;
269
+ byte divider = dividerMap[exponent];
270
+ if(tickCount % divider == 0){
271
+ // Check if digital or analog.
272
+ if (bitRead(listeners[i][0], 6) == 1){
273
+ analogListenerUpdate(i);
274
+ } else {
275
+ digitalListenerUpdate(i);
276
+ }
277
+ }
278
+ }
279
+ }
280
+ }
281
+
282
+ // Handle a single analog listener when it needs to read.
283
+ void Denko::analogListenerUpdate(byte i){
284
+ int rval = analogRead(listeners[i][1]);
285
+ analogListenCallback(listeners[i][1], rval);
286
+ coreResponse(listeners[i][1], rval);
287
+ }
288
+
289
+ // Handle a single digital listener when it needs to read.
290
+ void Denko::digitalListenerUpdate(byte i){
291
+ byte rval = digitalRead(listeners[i][1]);
292
+
293
+ if (rval != bitRead(listeners[i][0], 5)){
294
+ // State for digital listeners is stored in byte 5 of the listener itself.
295
+ bitWrite(listeners[i][0], 5, rval);
296
+ digitalListenCallback(listeners[i][1], rval);
297
+ coreResponse(listeners[i][1], rval);
298
+ }
299
+ }
300
+
301
+ // Gets called by Denko::reset to clear all listeners set by the remote client.
302
+ void Denko::clearCoreListeners(){
303
+ for (int i = 0; i < PIN_COUNT; i++){
304
+ // Only clear listeners if they were started by the remote client.
305
+ // Leaves listeners started by local code running.
306
+ if (bitRead(listeners[i][0], 4) == 0) {
307
+ listeners[i][0] = 0;
308
+ listeners[i][1] = 0;
309
+ }
310
+ }
311
+ findLastActiveListener();
312
+ }
313
+
314
+ // Track the last active listener whenever changes are made.
315
+ // Call this after setting or clearing any listeners.
316
+ void Denko::findLastActiveListener(){
317
+ for(byte i=0; i<PIN_COUNT; i++){
318
+ if (bitRead(listeners[i][0], 7) == 1){
319
+ lastActiveListener = i;
320
+ }
321
+ }
322
+ }
@@ -0,0 +1,116 @@
1
+ // If using Wi-Fi or Ethernet shield, uncomment this to let the SPI library know.
2
+ // #define TXRX_SPI
3
+
4
+ // Uncomment this line to enable debugging mode.
5
+ // #define debug
6
+
7
+ // Define the version of Denko the board was flashed with so we can verify in Ruby.
8
+ #define DENKO_VERSION __VERSION__
9
+
10
+ // Uncomment these to include features beyond core features.
11
+ // #define DENKO_ONE_WIRE
12
+ // #define DENKO_TONE
13
+ // #define DENKO_SPI_BB
14
+ // #define DENKO_I2C
15
+ // #define DENKO_SPI
16
+ // #define DENKO_SERVO
17
+ // #define DENKO_UART
18
+ // #define DENKO_UART_BB
19
+ // #define DENKO_IR_OUT
20
+ // #define DENKO_LED_ARRAY
21
+
22
+ // Include libraries for specific LED array protocols.
23
+ #ifdef DENKO_LED_ARRAY
24
+ #define DENKO_LED_WS2812
25
+ #endif
26
+
27
+ // Define number of pins to set up listener storage.
28
+ #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
29
+ #define PIN_COUNT 70
30
+ #elif defined(__SAM3X8E__)
31
+ #define PIN_COUNT 72
32
+ #elif defined(ESP8266)
33
+ #define PIN_COUNT 18
34
+ #elif defined(ESP32)
35
+ #define PIN_COUNT 40
36
+ #elif defined(ARDUINO_ARCH_RP2040)
37
+ #define PIN_COUNT 26
38
+ #else
39
+ #define PIN_COUNT 22
40
+ #endif
41
+
42
+ // No EEPROM on the Due or Zero.
43
+ #if !defined(__SAM3X8E__) && !defined(__SAMD21G18A__)
44
+ #define EEPROM_PRESENT
45
+ #include <EEPROM.h>
46
+ #endif
47
+
48
+ // Emulate 512 bytes of EEPROM on ESP chips and the RP2040.
49
+ #if defined(ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
50
+ # define EEPROM_EMULATED
51
+ # define EMULATED_EEPROM_LENGTH 512
52
+ #endif
53
+
54
+ // Figure out how many LEDC channels are available on ESP32 boards.
55
+ #ifdef ESP32
56
+ #define LEDC_CHANNEL_COUNT 16
57
+ #endif
58
+
59
+ // Filter for boards that can set their analog write resolution.
60
+ #if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(ESP8266)
61
+ #define WRITE_RESOLUTION_SETTER
62
+ #endif
63
+
64
+ // Filter for boards that can set their analog read resolution.
65
+ #if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
66
+ #define READ_RESOLUTION_SETTER
67
+ #endif
68
+
69
+ // Figure out how many open (not connected to a USB port) hardware UARTS there are on the board.
70
+ #ifdef DENKO_UART
71
+ // Look for TX pin definitions on RP2040.
72
+ #if defined(RP2040)
73
+ #if defined(PIN_SERIAL2_TX)
74
+ #define DENKO_UARTS 2
75
+ #elif defined(PIN_SERIAL_1_TX)
76
+ #define DENKO_UARTS 1
77
+ #endif
78
+
79
+ // ESP32 has either 1 or 2 extra UARTS enabled, depending on chip and board.
80
+ #elif defined(ESP32)
81
+ #if SOC_UART_NUM == 3
82
+ #define DENKO_UARTS 2
83
+ #elif SOC_UART_NUM == 2
84
+ #define DENKO_UARTS 1
85
+ #endif
86
+
87
+ // ESP8266 has a single open transmit-only UART.
88
+ #elif defined(ESP8266) && defined(SERIAL_PORT_HARDWARE_OPEN)
89
+ #define DENKO_UARTS 1
90
+
91
+ // This works for all the Atmel cores.
92
+ #else
93
+ #if defined(SERIAL_PORT_HARDWARE3)
94
+ #define DENKO_UARTS 3
95
+ #elif defined(SERIAL_PORT_HARDWARE2)
96
+ #define DENKO_UARTS 2
97
+ #elif defined(SERIAL_PORT_HARDWARE1)
98
+ #define DENKO_UARTS 1
99
+ #endif
100
+ #endif
101
+ #endif
102
+
103
+ #ifdef DENKO_UART_BB
104
+ #include <SoftwareSerial.h>
105
+ #endif
106
+
107
+ // If no high usage features (core sketch), 32 + 16.
108
+ #if !defined(DENKO_SHIFT) && !defined (DENKO_I2C) && !defined(DENKO_SPI) && !defined(DENKO_UARTS) && !defined(DENKO_UART_BB) && !defined(DENKO_IR_OUT) && !defined(DENKO_LED_ARRAY)
109
+ #define AUX_SIZE 48
110
+ // If using IR_OUT or LED_ARRAY, and not on the ATmega168, 512 + 16.
111
+ #elif (defined(DENKO_IR_OUT) || defined(DENKO_LED_ARRAY)) && !defined(__AVR_ATmega168__)
112
+ #define AUX_SIZE 528
113
+ // Default aux message size to 256 + 16 bytes.
114
+ #else
115
+ #define AUX_SIZE 272
116
+ #endif
@@ -0,0 +1,64 @@
1
+ //
2
+ // Basic EEPROM read and write functionality.
3
+ //
4
+ #include "Denko.h"
5
+
6
+ #ifdef EEPROM_PRESENT
7
+ // CMD = 6
8
+ // Read from the microcontroller's EEPROM.
9
+ //
10
+ // pin = empty
11
+ // val = number of bytes to read
12
+ // auxMsg[0-1] = start address
13
+ //
14
+ void Denko::eepromRead(){
15
+ if (val > 0) {
16
+ #if defined(EEPROM_EMULATED)
17
+ EEPROM.begin(EMULATED_EEPROM_LENGTH);
18
+ #endif
19
+
20
+ uint16_t startAddress = ((uint16_t)auxMsg[1] << 8) | auxMsg[0];
21
+
22
+ // Use pin 254 as a "virtual pin" for the built-in EEPROM.
23
+ stream->print("254");
24
+ stream->print(':');
25
+ stream->print(startAddress);
26
+ stream->print('-');
27
+
28
+ for (byte i = 0; (i < val); i++) {
29
+ stream->print(EEPROM.read(startAddress + i));
30
+ stream->print((i+1 == val) ? '\n' : ',');
31
+ }
32
+
33
+ #if defined(EEPROM_EMULATED)
34
+ EEPROM.end();
35
+ #endif
36
+ }
37
+ }
38
+
39
+ // CMD = 7
40
+ // Write to the microcontroller's EEPROM.
41
+ //
42
+ // pin = empty
43
+ // val = number of bytes to write
44
+ // auxMsg[0-1] = start address
45
+ // auxMsg[2+] = bytes to write
46
+ //
47
+ void Denko::eepromWrite(){
48
+ if (val > 0) {
49
+ #if defined(EEPROM_EMULATED)
50
+ EEPROM.begin(EMULATED_EEPROM_LENGTH);
51
+ #endif
52
+
53
+ uint16_t startAddress = ((uint16_t)auxMsg[1] << 8) | auxMsg[0];
54
+
55
+ for (byte i = 0; (i < val); i++) {
56
+ EEPROM.write(startAddress + i, auxMsg[2+i]);
57
+ }
58
+
59
+ #if defined(EEPROM_EMULATED)
60
+ EEPROM.end();
61
+ #endif
62
+ }
63
+ }
64
+ #endif
@@ -0,0 +1,155 @@
1
+ //
2
+ // This file adds to the Denko class only if DENKO_I2C is defined in Denko.h.
3
+ //
4
+ #include "Denko.h"
5
+ #ifdef DENKO_I2C
6
+
7
+ #include <Wire.h>
8
+
9
+ bool i2cStarted = false;
10
+
11
+ // Only start the I2C interface if not already started.
12
+ // Lazy initialization in case user wants to use I2C pins for something else.
13
+ void Denko::i2cBegin() {
14
+ if (!i2cStarted) {
15
+ Wire.begin();
16
+ i2cStarted = true;
17
+ }
18
+ }
19
+
20
+ // End the I2C interface.
21
+ // This is mostly used as a Reset in Denko::handshake.
22
+ void Denko::i2cEnd(){
23
+ // ESP8266 core does not define Wire.end()
24
+ #ifndef ESP8266
25
+ Wire.end();
26
+ #endif
27
+ i2cStarted = false;
28
+ }
29
+
30
+ // Configurable I2C speed each time read or write is called.
31
+ void Denko::i2cSetSpeed(uint8_t code) {
32
+ switch(code) {
33
+ case 0: Wire.setClock(100000); break;
34
+ case 1: Wire.setClock(400000); break;
35
+ case 2: Wire.setClock(1000000); break;
36
+ case 3: Wire.setClock(3400000); break;
37
+ default: Wire.setClock(100000); break;
38
+ }
39
+ }
40
+
41
+ // CMD = 33
42
+ // Ask each address for a single byte to see if it exists on the bus.
43
+ void Denko::i2cSearch() {
44
+ byte error;
45
+ uint8_t addr;
46
+ i2cBegin();
47
+ stream->print(SDA);
48
+
49
+ // Only addresses from 0x08 to 0x77 are usable (8 to 127).
50
+ for (addr = 0x08; addr < 0x78; addr++) {
51
+ Wire.beginTransmission(addr);
52
+ error = Wire.endTransmission();
53
+ if (error == 0){
54
+ stream->print(':'); stream->print(addr);
55
+ }
56
+ }
57
+ stream->print('\n');
58
+ }
59
+
60
+ // CMD = 34
61
+ // Write to an I2C device over a harwdare I2C interface.
62
+ //
63
+ // pin
64
+ // bits 0..6 = Device address
65
+ // bit 7 = Send stop condition. 0 = no, repeated start. 1 = yes.
66
+ //
67
+ // val
68
+ // bits 0..4 = Data length. NOTE: maximum of 32. Anything more is ignored.
69
+ //
70
+ // auxMsg[0] = I2C settings. Just speed selection for now.
71
+ //
72
+ // auxMsg[1]+ = data
73
+ //
74
+ void Denko::i2cWrite() {
75
+ // Get parameters from message.
76
+ uint8_t address = (uint8_t)pin & 0b01111111;
77
+ uint8_t dataLength = (uint8_t)val;
78
+
79
+ // Limit to 32 bytes.
80
+ if (dataLength > 32) dataLength = 32;
81
+
82
+ i2cBegin();
83
+ i2cSetSpeed(auxMsg[0]);
84
+
85
+ Wire.beginTransmission(address);
86
+ Wire.write(&auxMsg[1], dataLength);
87
+
88
+ // No repeated start on ESP32.
89
+ #if defined(ESP32)
90
+ Wire.endTransmission();
91
+ #else
92
+ uint8_t sendStop = (uint8_t)pin >> 7;
93
+ Wire.endTransmission(sendStop);
94
+ #endif
95
+ }
96
+
97
+ // CMD = 35
98
+ // Read from an I2C device over a harwdare I2C interface.
99
+ //
100
+ // pin
101
+ // bits 0..6 = Device address
102
+ // bit 7 = Send stop condition. 0 = no, repeated start. 1 = yes.
103
+ //
104
+ // val
105
+ // bits 0..4 = Data length. NOTE: maximum of 32. Anything more is ignored.
106
+ //
107
+ // auxMsg[0] = I2C settings. Just speed selection for now.
108
+ //
109
+ // auxMsg[1] = If > 0, write a register address of that many bytes before reading.
110
+ // auxMsg[2]+ = Register address bytes in order.
111
+ //
112
+ void Denko::i2cRead() {
113
+ // Get parameters from message.
114
+ uint8_t address = (uint8_t)pin & 0b01111111;
115
+ uint8_t sendStop = (uint8_t)pin >> 7;
116
+ uint8_t dataLength = (uint8_t)val;
117
+
118
+ // Limit to 32 bytes.
119
+ if (dataLength > 32) dataLength = 32;
120
+
121
+ i2cBegin();
122
+ i2cSetSpeed(auxMsg[0]);
123
+
124
+ // Optionally write up to a 4 byte register address before reading.
125
+ if ((auxMsg[1] > 0) && (auxMsg[1] < 5)) {
126
+ Wire.beginTransmission(address);
127
+ Wire.write(&auxMsg[2], auxMsg[1]);
128
+ Wire.endTransmission(sendStop);
129
+ }
130
+
131
+ // ESP32 crashes if requestFrom gets the 3rd arg.
132
+ #if defined(ESP32)
133
+ Wire.requestFrom(address, dataLength);
134
+ #else
135
+ Wire.requestFrom(address, dataLength, sendStop);
136
+ #endif
137
+
138
+ // Send data as if coming from SDA pin. Prefix with device adddress.
139
+ // Fail silently if no bytes read / invalid device address.
140
+ stream->print(SDA); stream->print(':');
141
+ stream->print(address); stream->print('-');
142
+ while(Wire.available()){
143
+ stream->print(Wire.read());
144
+ stream->print(',');
145
+ }
146
+ stream->print('\n');
147
+
148
+ // No repeated start on ESP32.
149
+ #if defined(ESP32)
150
+ Wire.endTransmission();
151
+ #else
152
+ Wire.endTransmission(sendStop);
153
+ #endif
154
+ }
155
+ #endif
@@ -0,0 +1,33 @@
1
+ //
2
+ // This file adds to the Denko class only if DENKO_IR_OUT is defined in Denko.h.
3
+ //
4
+ #include "Denko.h"
5
+ #if defined(DENKO_IR_OUT) && !defined(ESP8266) && !defined(ESP32)
6
+
7
+ // Save memory by disabling receiver.
8
+ #undef RAW_BUFFER_LENGTH
9
+ #define RAW_BUFFER_LENGTH 0
10
+ #define DISABLE_CODE_FOR_RECEIVER
11
+
12
+ // Save more memory.
13
+ #define IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK true
14
+ #define EXCLUDE_UNIVERSAL_PROTOCOLS
15
+ #define EXCLUDE_EXOTIC_PROTOCOLS
16
+ #define NO_LED_FEEDBACK_CODE
17
+
18
+ #include <IRremote.hpp>
19
+
20
+ // CMD = 16
21
+ // Send an infrared signal.
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.
27
+ IrSender.setSendPin(pin);
28
+
29
+ // auxMsg[0] contains number of uint16_t
30
+ // Val contains frequency
31
+ IrSender.sendRaw(pulseArray, auxMsg[0], val);
32
+ }
33
+ #endif