denko 0.13.6 → 0.15.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 (499) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +19 -18
  3. data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +19 -18
  4. data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +18 -17
  5. data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +19 -18
  6. data/.github/workflows/build_esp32.yml +19 -18
  7. data/.github/workflows/build_esp32c3.yml +58 -0
  8. data/.github/workflows/build_esp32c6.yml +59 -0
  9. data/.github/workflows/build_esp32h2.yml +58 -0
  10. data/.github/workflows/build_esp32s2.yml +59 -0
  11. data/.github/workflows/build_esp32s3.yml +59 -0
  12. data/.github/workflows/build_esp8266.yml +16 -15
  13. data/.github/workflows/build_ra4m1.yml +17 -16
  14. data/.github/workflows/build_rp2040.yml +19 -17
  15. data/.github/workflows/ruby.yml +20 -20
  16. data/CHANGELOG.md +398 -11
  17. data/DEPS_CLI.md +16 -16
  18. data/DEPS_IDE.md +39 -39
  19. data/MICROCONTROLLERS.md +103 -0
  20. data/PERIPHERALS.md +178 -0
  21. data/README.md +73 -58
  22. data/Rakefile +1 -1
  23. data/build +1 -1
  24. data/denko.gemspec +11 -3
  25. data/lib/denko/analog_io/ads1100.rb +127 -0
  26. data/lib/denko/analog_io/ads1115.rb +8 -25
  27. data/lib/denko/analog_io/ads1118.rb +12 -27
  28. data/lib/denko/analog_io/ads111x.rb +39 -21
  29. data/lib/denko/analog_io/input.rb +29 -55
  30. data/lib/denko/analog_io/input_helper.rb +42 -0
  31. data/lib/denko/analog_io/joystick.rb +87 -0
  32. data/lib/denko/analog_io/output.rb +5 -5
  33. data/lib/denko/analog_io/potentiometer.rb +3 -9
  34. data/lib/denko/analog_io.rb +22 -7
  35. data/lib/denko/behaviors/board_proxy.rb +13 -1
  36. data/lib/denko/behaviors/bus_controller.rb +3 -1
  37. data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
  38. data/lib/denko/behaviors/bus_peripheral.rb +3 -4
  39. data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
  40. data/lib/denko/behaviors/callbacks.rb +18 -14
  41. data/lib/denko/behaviors/component.rb +12 -14
  42. data/lib/denko/behaviors/input_pin.rb +14 -15
  43. data/lib/denko/behaviors/lifecycle.rb +51 -0
  44. data/lib/denko/behaviors/listener.rb +9 -3
  45. data/lib/denko/behaviors/multi_pin.rb +22 -20
  46. data/lib/denko/behaviors/output_pin.rb +9 -4
  47. data/lib/denko/behaviors/poller.rb +11 -2
  48. data/lib/denko/behaviors/reader.rb +109 -21
  49. data/lib/denko/behaviors/single_pin.rb +3 -4
  50. data/lib/denko/behaviors/state.rb +24 -13
  51. data/lib/denko/behaviors/subcomponents.rb +72 -12
  52. data/lib/denko/behaviors/threaded.rb +19 -8
  53. data/lib/denko/behaviors.rb +36 -22
  54. data/lib/denko/board/core.rb +36 -18
  55. data/lib/denko/board/eeprom.rb +1 -1
  56. data/lib/denko/board/i2c.rb +15 -15
  57. data/lib/denko/board/i2c_bit_bang.rb +53 -0
  58. data/lib/denko/board/infrared.rb +6 -6
  59. data/lib/denko/board/led_array.rb +6 -5
  60. data/lib/denko/board/map.rb +6 -2
  61. data/lib/denko/board/one_wire.rb +3 -3
  62. data/lib/denko/board/spi.rb +35 -30
  63. data/lib/denko/board/spi_bit_bang.rb +14 -15
  64. data/lib/denko/board.rb +41 -36
  65. data/lib/denko/connection/binary_echo.rb +17 -0
  66. data/lib/denko/connection/flow_control.rb +12 -16
  67. data/lib/denko/connection/handshake.rb +2 -0
  68. data/lib/denko/connection/serial.rb +5 -5
  69. data/lib/denko/digital_io/button.rb +4 -0
  70. data/lib/denko/digital_io/c_bit_bang.rb +15 -0
  71. data/lib/denko/digital_io/input.rb +4 -5
  72. data/lib/denko/digital_io/output.rb +19 -10
  73. data/lib/denko/digital_io/pcf8574.rb +114 -0
  74. data/lib/denko/digital_io/relay.rb +2 -0
  75. data/lib/denko/digital_io/rotary_encoder.rb +83 -61
  76. data/lib/denko/digital_io.rb +24 -5
  77. data/lib/denko/display/canvas.rb +350 -157
  78. data/lib/denko/display/font/bmp_5x7.rb +142 -0
  79. data/lib/denko/display/font/bmp_6x8.rb +142 -0
  80. data/lib/denko/display/font/bmp_8x16.rb +141 -0
  81. data/lib/denko/display/font.rb +22 -0
  82. data/lib/denko/display/hd44780.rb +152 -105
  83. data/lib/denko/display/il0373.rb +186 -0
  84. data/lib/denko/display/mono_oled.rb +193 -0
  85. data/lib/denko/display/pcd8544.rb +154 -0
  86. data/lib/denko/display/pixel_common.rb +83 -0
  87. data/lib/denko/display/sh1106.rb +38 -0
  88. data/lib/denko/display/sh1107.rb +10 -0
  89. data/lib/denko/display/spi_common.rb +35 -0
  90. data/lib/denko/display/spi_epaper_common.rb +30 -0
  91. data/lib/denko/display/ssd1306.rb +6 -168
  92. data/lib/denko/display/ssd1680.rb +14 -0
  93. data/lib/denko/display/ssd1681.rb +8 -0
  94. data/lib/denko/display/ssd168x.rb +227 -0
  95. data/lib/denko/display/st7302.rb +207 -0
  96. data/lib/denko/display/st7565.rb +166 -0
  97. data/lib/denko/display.rb +40 -3
  98. data/lib/denko/eeprom/at24c.rb +67 -0
  99. data/lib/denko/eeprom/board.rb +69 -0
  100. data/lib/denko/eeprom.rb +15 -1
  101. data/lib/denko/helpers/engine_check.rb +13 -0
  102. data/lib/denko/helpers/mutex_stub.rb +13 -0
  103. data/lib/denko/helpers.rb +6 -0
  104. data/lib/denko/i2c/bit_bang.rb +32 -0
  105. data/lib/denko/i2c/bus.rb +8 -36
  106. data/lib/denko/i2c/bus_common.rb +50 -0
  107. data/lib/denko/i2c/peripheral.rb +32 -19
  108. data/lib/denko/i2c.rb +17 -2
  109. data/lib/denko/led/apa102.rb +42 -30
  110. data/lib/denko/led/base.rb +13 -2
  111. data/lib/denko/led/rgb.rb +18 -14
  112. data/lib/denko/led/seven_segment.rb +24 -9
  113. data/lib/denko/led/ws2812.rb +10 -7
  114. data/lib/denko/led.rb +17 -8
  115. data/lib/denko/message.rb +5 -0
  116. data/lib/denko/motor/{stepper.rb → a3967.rb} +12 -15
  117. data/lib/denko/motor/l298.rb +11 -10
  118. data/lib/denko/motor/servo.rb +37 -15
  119. data/lib/denko/motor.rb +16 -3
  120. data/lib/denko/one_wire/bus.rb +31 -23
  121. data/lib/denko/one_wire/bus_enumerator.rb +25 -14
  122. data/lib/denko/one_wire/helper.rb +4 -2
  123. data/lib/denko/one_wire/peripheral.rb +0 -3
  124. data/lib/denko/one_wire.rb +18 -5
  125. data/lib/denko/pulse_io/buzzer.rb +11 -9
  126. data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +6 -5
  127. data/lib/denko/pulse_io/pwm_output.rb +94 -15
  128. data/lib/denko/pulse_io.rb +17 -3
  129. data/lib/denko/rtc/ds3231.rb +13 -14
  130. data/lib/denko/rtc.rb +14 -1
  131. data/lib/denko/sensor/aht.rb +35 -38
  132. data/lib/denko/sensor/bme280.rb +76 -92
  133. data/lib/denko/sensor/bmp180.rb +46 -48
  134. data/lib/denko/sensor/dht.rb +34 -7
  135. data/lib/denko/sensor/ds18b20.rb +41 -34
  136. data/lib/denko/sensor/hcsr04.rb +7 -5
  137. data/lib/denko/sensor/hdc1080.rb +174 -0
  138. data/lib/denko/sensor/helper.rb +37 -0
  139. data/lib/denko/sensor/htu21d.rb +57 -57
  140. data/lib/denko/sensor/htu31d.rb +36 -36
  141. data/lib/denko/sensor/jsnsr04t.rb +49 -0
  142. data/lib/denko/sensor/qmp6988.rb +34 -48
  143. data/lib/denko/sensor/rcwl9620.rb +3 -5
  144. data/lib/denko/sensor/sht3x.rb +27 -24
  145. data/lib/denko/sensor/sht4x.rb +125 -0
  146. data/lib/denko/sensor/vl53l0x.rb +58 -0
  147. data/lib/denko/sensor.rb +33 -16
  148. data/lib/denko/spi/base_register.rb +25 -21
  149. data/lib/denko/spi/bit_bang.rb +17 -51
  150. data/lib/denko/spi/bus.rb +15 -29
  151. data/lib/denko/spi/bus_common.rb +33 -0
  152. data/lib/denko/spi/input_register.rb +37 -31
  153. data/lib/denko/spi/output_register.rb +33 -39
  154. data/lib/denko/spi/peripheral.rb +81 -14
  155. data/lib/denko/spi.rb +21 -6
  156. data/lib/denko/uart/bit_bang.rb +7 -30
  157. data/lib/denko/uart/common.rb +33 -0
  158. data/lib/denko/uart/hardware.rb +10 -34
  159. data/lib/denko/uart.rb +16 -2
  160. data/lib/denko/version.rb +1 -1
  161. data/lib/denko.rb +23 -16
  162. data/lib/denko_cli/generator.rb +2 -2
  163. data/lib/denko_cli/packages.rb +8 -10
  164. data/lib/denko_cli/targets.rb +13 -13
  165. data/lib/denko_cli/targets.txt +23 -24
  166. data/lib/denko_cli/usage.txt +1 -1
  167. data/src/denko_ethernet.ino +0 -14
  168. data/src/denko_serial.ino +0 -14
  169. data/src/denko_wifi.ino +6 -15
  170. data/src/lib/Denko.cpp +65 -16
  171. data/src/lib/Denko.h +46 -30
  172. data/src/lib/DenkoCoreIO.cpp +57 -102
  173. data/src/lib/DenkoDefines.h +32 -46
  174. data/src/lib/DenkoI2C.cpp +54 -45
  175. data/src/lib/DenkoI2CBB.cpp +238 -0
  176. data/src/lib/DenkoIROut.cpp +12 -7
  177. data/src/lib/DenkoLEDArray.cpp +29 -13
  178. data/src/lib/DenkoSPI.cpp +36 -33
  179. data/src/lib/DenkoSPIBB.cpp +19 -20
  180. data/target.yml +37 -2
  181. data/test/analog_io/input_test.rb +1 -1
  182. data/test/analog_io/potentiometer_test.rb +12 -12
  183. data/test/behaviors/board_proxy_test.rb +1 -1
  184. data/test/behaviors/bus_peripheral_test.rb +4 -4
  185. data/test/behaviors/callbacks_test.rb +28 -10
  186. data/test/behaviors/component_test.rb +32 -14
  187. data/test/behaviors/input_pin_test.rb +14 -9
  188. data/test/behaviors/multi_pin_test.rb +14 -4
  189. data/test/behaviors/output_pin_test.rb +11 -8
  190. data/test/behaviors/poller_test.rb +1 -0
  191. data/test/behaviors/reader_test.rb +3 -2
  192. data/test/behaviors/subcomponents_test.rb +22 -2
  193. data/test/board/board_test.rb +9 -9
  194. data/test/board/core_test.rb +15 -11
  195. data/test/board/i2c_test.rb +39 -33
  196. data/test/board/infrared_test.rb +1 -1
  197. data/test/board/message_test.rb +17 -11
  198. data/test/board/one_wire_test.rb +25 -14
  199. data/test/board/spi_test.rb +45 -29
  200. data/test/digital_io/button_test.rb +15 -0
  201. data/test/digital_io/input_test.rb +2 -2
  202. data/test/digital_io/relay_test.rb +18 -0
  203. data/test/digital_io/rotary_encoder_test.rb +80 -60
  204. data/test/display/canvas_test.rb +306 -0
  205. data/test/display/hd44780_test.rb +34 -7
  206. data/test/eeprom/board_test.rb +45 -0
  207. data/test/helpers/mruby_minitest.rb +95 -0
  208. data/test/helpers/mruby_runner.rb +13 -0
  209. data/test/i2c/bus_test.rb +108 -29
  210. data/test/i2c/peripheral_test.rb +38 -19
  211. data/test/led/apa102_test.rb +24 -0
  212. data/test/led/base_test.rb +2 -1
  213. data/test/led/rgb_test.rb +9 -9
  214. data/test/led/seven_segment_test.rb +7 -7
  215. data/test/motor/{stepper_test.rb → a3967_test.rb} +4 -4
  216. data/test/motor/servo_test.rb +1 -1
  217. data/test/one_wire/bus_enumerator_test.rb +1 -1
  218. data/test/one_wire/bus_test.rb +43 -35
  219. data/test/one_wire/peripheral_test.rb +5 -17
  220. data/test/pulse_io/buzzer_test.rb +7 -4
  221. data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +15 -10
  222. data/test/pulse_io/pwm_output_test.rb +74 -18
  223. data/test/rtc/ds3231_test.rb +13 -14
  224. data/test/sensor/dht_test.rb +12 -12
  225. data/test/sensor/ds18b20_test.rb +4 -8
  226. data/test/spi/bitbang_test.rb +27 -0
  227. data/test/spi/bus_test.rb +24 -34
  228. data/test/spi/input_register_test.rb +17 -17
  229. data/test/spi/output_register_test.rb +10 -28
  230. data/test/spi/peripheral_test.rb +73 -0
  231. data/test/test_helper.rb +44 -121
  232. data/vendor/board-maps/BoardMap.h +678 -54
  233. data/vendor/board-maps/lib/header_parser.rb +12 -2
  234. data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +2 -2
  235. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
  236. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +1 -1
  237. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
  238. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +1 -0
  239. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +1 -0
  240. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +1 -0
  241. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +1 -0
  242. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +1 -0
  243. data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
  244. data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
  245. data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
  246. data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
  247. data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
  248. data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
  249. data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
  250. data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
  251. data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
  252. data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
  253. data/vendor/board-maps/yaml/BLING.yml +25 -0
  254. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
  255. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -1
  256. data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
  257. data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
  258. data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
  259. data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
  260. data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
  261. data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
  262. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
  263. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
  264. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
  265. data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
  266. data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
  267. data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
  268. data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
  269. data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
  270. data/vendor/board-maps/yaml/ESP32C6_DEV.yml +14 -0
  271. data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
  272. data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
  273. data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +14 -0
  274. data/vendor/board-maps/yaml/ESP32H2_DEV.yml +12 -0
  275. data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +12 -0
  276. data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
  277. data/vendor/board-maps/yaml/{RMP.yml → ESP32S2_DEVKIT_LIPO.yml} +1 -1
  278. data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +43 -0
  279. data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
  280. data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
  281. data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
  282. data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
  283. data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
  284. data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
  285. data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
  286. data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
  287. data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +13 -0
  288. data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
  289. data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
  290. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
  291. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
  292. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
  293. data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
  294. data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
  295. data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
  296. data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
  297. data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
  298. data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
  299. data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
  300. data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
  301. data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
  302. data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
  303. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +1 -1
  304. data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
  305. data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
  306. data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
  307. data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
  308. data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
  309. data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
  310. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
  311. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
  312. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
  313. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
  314. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
  315. data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
  316. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
  317. data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +13 -0
  318. data/vendor/board-maps/yaml/LOLIN_S3.yml +1 -0
  319. data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
  320. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -2
  321. data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
  322. data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
  323. data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
  324. data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
  325. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -2
  326. data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
  327. data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
  328. data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
  329. data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
  330. data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
  331. data/vendor/board-maps/yaml/{M5Stick_C.yml → M5STACK_STICKC.yml} +0 -1
  332. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
  333. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
  334. data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
  335. data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
  336. data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
  337. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -1
  338. data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
  339. data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
  340. data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
  341. data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
  342. data/vendor/board-maps/yaml/NEBULAS3.yml +0 -1
  343. data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
  344. data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
  345. data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
  346. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
  347. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
  348. data/vendor/board-maps/yaml/OMGS3.yml +25 -0
  349. data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
  350. data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
  351. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
  352. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
  353. data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
  354. data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
  355. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -1
  356. data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
  357. data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
  358. data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
  359. data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
  360. data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
  361. data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
  362. data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
  363. data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
  364. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
  365. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +14 -0
  366. data/vendor/board-maps/yaml/TINYC6.yml +25 -0
  367. data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
  368. data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
  369. data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
  370. data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
  371. data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
  372. data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
  373. data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
  374. data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
  375. data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
  376. data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
  377. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
  378. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
  379. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
  380. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
  381. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
  382. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
  383. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
  384. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
  385. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
  386. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
  387. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
  388. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
  389. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
  390. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
  391. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
  392. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
  393. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
  394. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
  395. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
  396. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
  397. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
  398. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
  399. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
  400. data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
  401. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +1 -0
  402. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
  403. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +1 -0
  404. data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
  405. data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
  406. data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
  407. data/vendor/board-maps/yaml/WiFiduinoV2.yml +1 -0
  408. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -1
  409. data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
  410. data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
  411. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
  412. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
  413. data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
  414. data/vendor/board-maps/yaml/mercury.yml +20 -0
  415. data/vendor/board-maps/yaml/unphone9.yml +8 -0
  416. metadata +259 -105
  417. data/.vscode/settings.json +0 -5
  418. data/.vscode/tasks.json +0 -20
  419. data/HARDWARE.md +0 -264
  420. data/benchmarks/i2c_ssd1306_refresh.rb +0 -84
  421. data/examples/advanced/m5_env.rb +0 -48
  422. data/examples/advanced/rotary_encoder_mac_volume.rb +0 -48
  423. data/examples/advanced/ssd1306_time_temp_rh.rb +0 -48
  424. data/examples/analog_io/ads1115.rb +0 -57
  425. data/examples/analog_io/ads1118.rb +0 -73
  426. data/examples/analog_io/dac_loopback.rb +0 -34
  427. data/examples/analog_io/input.rb +0 -55
  428. data/examples/connection/tcp.rb +0 -34
  429. data/examples/digital_io/button.rb +0 -13
  430. data/examples/digital_io/rotary_encoder.rb +0 -26
  431. data/examples/display/hd44780.png +0 -0
  432. data/examples/display/hd44780.rb +0 -39
  433. data/examples/display/ssd1306.rb +0 -40
  434. data/examples/display/ssd1306_s2_pico.rb +0 -29
  435. data/examples/eeprom/built_in.rb +0 -32
  436. data/examples/i2c/search.rb +0 -55
  437. data/examples/led/apa102_bounce.rb +0 -33
  438. data/examples/led/apa102_breathe.rb +0 -45
  439. data/examples/led/builtin_blink.rb +0 -12
  440. data/examples/led/seven_segment_char_echo.rb +0 -15
  441. data/examples/led/ws2812_bounce.rb +0 -32
  442. data/examples/led/ws2812_builtin_blink.rb +0 -21
  443. data/examples/motor/l298.rb +0 -43
  444. data/examples/motor/servo.rb +0 -16
  445. data/examples/motor/stepper.png +0 -0
  446. data/examples/motor/stepper.rb +0 -43
  447. data/examples/pulse_io/buzzer.rb +0 -30
  448. data/examples/pulse_io/ir_transmitter.rb +0 -55
  449. data/examples/rtc/ds3231.rb +0 -48
  450. data/examples/sensor/aht10.rb +0 -19
  451. data/examples/sensor/aht20.rb +0 -19
  452. data/examples/sensor/bme280.rb +0 -38
  453. data/examples/sensor/bmp180.rb +0 -22
  454. data/examples/sensor/dht.rb +0 -24
  455. data/examples/sensor/ds18b20.rb +0 -58
  456. data/examples/sensor/generic_pir.rb +0 -25
  457. data/examples/sensor/hcsr04.rb +0 -14
  458. data/examples/sensor/htu21d.rb +0 -54
  459. data/examples/sensor/htu31d.rb +0 -35
  460. data/examples/sensor/neat_tph_readings.rb +0 -26
  461. data/examples/sensor/qmp6988.rb +0 -53
  462. data/examples/sensor/rcwl9620.rb +0 -15
  463. data/examples/sensor/sht3x.rb +0 -34
  464. data/examples/spi/input_register.rb +0 -50
  465. data/examples/spi/output_register.rb +0 -49
  466. data/examples/spi/ssd_through_register.rb +0 -40
  467. data/examples/spi/two_registers.rb +0 -46
  468. data/examples/uart/bit_bang_read.rb +0 -16
  469. data/examples/uart/bit_bang_write.rb +0 -16
  470. data/examples/uart/board_passthrough.rb +0 -34
  471. data/examples/uart/hardware_loopback.rb +0 -16
  472. data/lib/denko/analog_io/sensor.rb +0 -6
  473. data/lib/denko/eeprom/built_in.rb +0 -69
  474. data/lib/denko/fonts.rb +0 -106
  475. data/lib/denko/sensor/virtual.rb +0 -42
  476. data/src/lib/DenkoIROutESP.cpp +0 -26
  477. data/test/eeprom/built_in_test.rb +0 -61
  478. data/tutorial/01-led/led.fzz +0 -0
  479. data/tutorial/01-led/led.pdf +0 -0
  480. data/tutorial/01-led/led.rb +0 -73
  481. data/tutorial/02-button/button.fzz +0 -0
  482. data/tutorial/02-button/button.pdf +0 -0
  483. data/tutorial/02-button/button.rb +0 -64
  484. data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
  485. data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
  486. data/tutorial/03-potentiometer/potentiometer.rb +0 -62
  487. data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
  488. data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
  489. data/tutorial/04-pwm_led/pwm_led.rb +0 -66
  490. data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
  491. data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
  492. data/tutorial/05-rgb_led/rgb_led.rb +0 -58
  493. data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
  494. data/vendor/board-maps/yaml/STAMP_S3.yml +0 -8
  495. /data/vendor/board-maps/yaml/{BRIDGETEK_IDM2040-7A.yml → BRIDGETEK_IDM2040_43A.yml} +0 -0
  496. /data/vendor/board-maps/yaml/{heltec_wifi_32_lora_V3.yml → HELTEC_WIRELESS_STICK_V3.yml} +0 -0
  497. /data/vendor/board-maps/yaml/{M5Stack_Core_ESP32.yml → M5STACK_CORE.yml} +0 -0
  498. /data/vendor/board-maps/yaml/{M5Stamp_Pico.yml → M5STACK_STAMP_PICO.yml} +0 -0
  499. /data/vendor/board-maps/yaml/{M5Stack-Timer-CAM.yml → M5STACK_TIMER_CAM.yml} +0 -0
data/lib/denko.rb CHANGED
@@ -1,36 +1,43 @@
1
- Thread.abort_on_exception = true
1
+ # Helpers needed during loading.
2
+ require_relative 'denko/helpers'
2
3
 
3
- module Denko
4
- def self.root
5
- File.expand_path '../..', __FILE__
4
+ unless Denko.in_mruby_build?
5
+ Thread.abort_on_exception = true
6
+
7
+ require 'bcd'
8
+
9
+ module Denko
10
+ def self.root
11
+ File.expand_path '../..', __FILE__
12
+ end
6
13
  end
7
14
  end
8
15
 
9
- # For method delegation.
10
- require 'forwardable'
11
-
12
- # Component support stuff.
16
+ # Early shared behavior
13
17
  require_relative 'denko/version'
14
18
  require_relative 'denko/behaviors'
15
- require_relative 'denko/fonts'
16
19
 
17
- # Board stuff.
18
- require_relative 'denko/message'
19
- require_relative 'denko/connection'
20
- require_relative 'denko/board'
20
+ # Denko::Board implementation for connected microcontrollers
21
+ unless Denko.in_mruby_build?
22
+ require_relative 'denko/message'
23
+ require_relative 'denko/connection'
24
+ require_relative 'denko/board'
25
+ # Diagnostics
26
+ require_relative 'denko/connection/binary_echo'
27
+ end
21
28
 
22
- # Basic IO components.
29
+ # Basic IO peripherals
23
30
  require_relative 'denko/digital_io'
24
31
  require_relative 'denko/analog_io'
25
32
  require_relative 'denko/pulse_io'
26
33
 
27
- # Buses and interfaces.
34
+ # Buses and interfaces
28
35
  require_relative 'denko/uart'
29
36
  require_relative 'denko/spi'
30
37
  require_relative 'denko/i2c'
31
38
  require_relative 'denko/one_wire'
32
39
 
33
- # Everything else.
40
+ # Everything else
34
41
  require_relative 'denko/display'
35
42
  require_relative 'denko/eeprom'
36
43
  require_relative 'denko/led'
@@ -15,10 +15,10 @@ class DenkoCLI::Generator
15
15
  end
16
16
 
17
17
  def append_target
18
- options[:target] = :mega unless options[:target]
18
+ options[:target] = :atmega unless options[:target]
19
19
  # Preserve the source sketch name, since we need to copy that file.
20
20
  options[:src_sketch_name] = options[:sketch_name].dup
21
- options[:sketch_name] << "_#{options[:target]}" unless options[:target] == :mega
21
+ options[:sketch_name] << "_#{options[:target]}"
22
22
  options[:sketch_name] << "_#{::Denko::VERSION}"
23
23
  end
24
24
 
@@ -29,6 +29,13 @@ PACKAGES = {
29
29
  "DenkoOneWire.cpp",
30
30
  ]
31
31
  },
32
+ i2c_bb: {
33
+ description: "Bit Bang I2C support",
34
+ directive: "DENKO_I2C_BB",
35
+ files: [
36
+ "DenkoI2CBB.cpp",
37
+ ]
38
+ },
32
39
  spi_bb: {
33
40
  description: "Bit Bang SPI support",
34
41
  directive: "DENKO_SPI_BB",
@@ -54,7 +61,7 @@ PACKAGES = {
54
61
  uart_bb: {
55
62
  description: "Bit bang serial output",
56
63
  directive: "DENKO_UART_BB",
57
- only: [:mega, :mega168],
64
+ only: [:atmega, :atmega168],
58
65
  files: [
59
66
  "DenkoUARTBB.cpp",
60
67
  ]
@@ -83,19 +90,10 @@ PACKAGES = {
83
90
  ir_out: {
84
91
  description: "Transmit infrared signals",
85
92
  directive: "DENKO_IR_OUT",
86
- exclude: [:esp8266, :esp32],
87
93
  files: [
88
94
  "DenkoIROut.cpp",
89
95
  ]
90
96
  },
91
- ir_out_esp: {
92
- description: "Transmit infrared signals with the ESP8266 and ESP32",
93
- directive: "DENKO_IR_OUT",
94
- only: [:esp8266, :esp32],
95
- files: [
96
- "DenkoIROutESP.cpp",
97
- ]
98
- },
99
97
  led_array: {
100
98
  description: "Support for various protocols that control (RGB) LED arrays.",
101
99
  directive: "DENKO_LED_ARRAY",
@@ -8,26 +8,26 @@ class DenkoCLI::Generator
8
8
  core: [:core],
9
9
 
10
10
  # Specific features for the old mega168 chips.
11
- mega168: [:core, :one_wire, :tone, :i2c, :spi, :servo],
11
+ atmega168: [:core, :tone, :i2c, :spi, :servo, :uart_bb],
12
12
 
13
13
  # Other ATmega chips do everything.
14
14
  # Add bit bang serial for 328p / UNO since it has no extra hardware UART.
15
- mega: STANDARD_PACKAGES + [:uart_bb],
15
+ atmega: STANDARD_PACKAGES + [:uart_bb],
16
16
 
17
17
  # No tone, infrared or EEPROM on SAM3X / Due.
18
- sam3x: STANDARD_PACKAGES - [:tone, :ir_out, :eeprom],
19
-
18
+ atsam3x: STANDARD_PACKAGES - [:tone, :ir_out, :eeprom],
19
+
20
20
  # No EEPROM on SAMD / Zero.
21
- samd: STANDARD_PACKAGES - [:eeprom],
21
+ atsamd21: STANDARD_PACKAGES - [:eeprom],
22
+
23
+ # Infrared library does not support the UNO R4.
24
+ ra4m1: STANDARD_PACKAGES - [:ir_out],
22
25
 
23
- # No IR out and WS2812 on the UNO R4. WS2812 compiles but doesn't work.
24
- ra4m1: STANDARD_PACKAGES - [:ir_out, :led_array],
26
+ # ESP8266 & ESP32
27
+ esp8266: STANDARD_PACKAGES,
28
+ esp32: STANDARD_PACKAGES,
25
29
 
26
- # ESP8266 + ESP32 use a different IR library.
27
- esp8266: STANDARD_PACKAGES - [:ir_out] + [:ir_out_esp],
28
- esp32: STANDARD_PACKAGES - [:ir_out] + [:ir_out_esp],
29
-
30
- # RP2040 can't use WS2812 yet.
31
- rp2040: STANDARD_PACKAGES - [:led_array],
30
+ # RP2040
31
+ rp2040: STANDARD_PACKAGES,
32
32
  }
33
33
  end
@@ -1,10 +1,10 @@
1
1
 
2
2
  Valid targets:
3
3
 
4
- mega (default)
4
+ atmega (default)
5
5
 
6
6
  Covers the Atmel/Microchip AVR 8-bit chips and associated Arduino boards.
7
- This is the default target. All component features are included.
7
+ This is the default target. All interfaces are included.
8
8
 
9
9
  Chips: ATmega328p, ATmega32u4, ATmega1280, ATmega2560
10
10
  Atmega4809 (unconfirmed)
@@ -17,20 +17,20 @@
17
17
  esp32
18
18
 
19
19
  For the the ESP32 chip by Espressif, with integrated 2.4Ghz WiFi.
20
- No WiFi OTA updates yet.
21
- This option includes all component features EXCEPT:
20
+ WiFi over-the-air updates are enabled by default.
21
+ This option includes all interfaces EXCEPT:
22
22
  SoftwareSerial
23
23
 
24
24
  Chips: ESP32, ESP32-S2, ESP32-S3
25
25
  Boards: ESP32 DevKit, LOLIN D32 / D32 Pro, LOLIN S2 Pico / Mini,
26
26
  LOLIN S3 Pico / Mini
27
-
27
+
28
28
 
29
29
  esp8266
30
30
 
31
31
  For the ESP8266 chip by Espressif, with integrated 2.4Ghz WiFi.
32
32
  WiFi over-the-air updates are enabled by default.
33
- This option includes all component features EXCEPT:
33
+ This option includes all interfaces EXCEPT:
34
34
  SoftwareSerial
35
35
 
36
36
  Chips: ES8266, ESP8285
@@ -41,44 +41,43 @@
41
41
 
42
42
  Note: After the initial upload via serial, the WiFi sketch for this target
43
43
  supports over-the-air updates from the Arduino IDE using ArduinoOTA.
44
-
45
-
44
+
45
+
46
46
  rp2040
47
47
 
48
- For the Raspberry Pi RP2040 microcontroller.
49
- Software Serial doesn't work. WiFi available only on the W version.
50
- This option includes all component features EXCEPT:
51
- SoftwareSerial, LEDArray
48
+ For the Raspberry Pi RP2040 microcontroller. WiFi available on the W version.
49
+ This option includes all interfaces EXCEPT:
50
+ SoftwareSerial
52
51
 
53
52
  Chips: RP2040
54
53
  Boards: Raspberry Pi Pico, Raspberry Pi Pico W, and many others
55
-
56
54
 
57
- samd
55
+
56
+ atsamd21
58
57
 
59
58
  For the ATSAMD21G18, with native USB and no EEPROM.
60
59
  Similar to the mega option, but Software Serial doesn't work.
61
- This option includes all component features EXCEPT:
60
+ This option includes all interfaces EXCEPT:
62
61
  EEPROM, SoftwareSerial
63
62
 
64
63
  Chips: ATSAMD21G18
65
64
  Boards: Arduino Zero, M0, M0 Pro
66
65
 
67
66
 
68
- sam3x
67
+ atsam3x
69
68
 
70
69
  Fpr the ATSAM3X8E, with native USB and no EEPROM.
71
70
  Similar to the mega option, but some features don't work.
72
- This option includes all component features EXCEPT:
71
+ This option includes all interfaces EXCEPT:
73
72
  EEPROM, SoftwareSerial, Tone, IR Out
74
73
 
75
74
  Chips: ATSAM3X8E
76
75
  Boards: Arduino Due
77
-
78
-
76
+
77
+
79
78
  core
80
79
 
81
- This includes only the core component feature set of denko:
80
+ This includes only the core interface set of denko:
82
81
  Set Pin Mode
83
82
  Digital Read/Write/Listen
84
83
  Analog Read/Write/Listen
@@ -87,12 +86,12 @@
87
86
  is the smallest sketch possible, and should be universally compatible.
88
87
 
89
88
 
90
- mega168
89
+ atmega168
91
90
 
92
91
  This targets the older ATmega168 chip used in early Arduinos.
93
92
  With half the RAM and flash available, we need to cut the sketch down.
94
- This option includes all component features EXCEPT:
95
- SoftwareSerial, IR Out
93
+ This option includes all interfaces EXCEPT:
94
+ EEPROM, OneWire, BitBang I2C, BitBang SPI, Hardware UART, IR Out, WS2812
96
95
 
97
96
  Chips: ATmega168
98
97
  Boards: Duemilanove, Diecimila, Pro (some), Pro Mini (some)
@@ -103,7 +102,7 @@
103
102
  There is not enough memory available for Wi-Fi or Ethernet.
104
103
  Try the core target instead to tradeoff features for networking.
105
104
 
106
- Note: Aux message is always limited to 264 bytes or less for the ATmega168.
105
+ Note: Aux message is always limited to 48 bytes or less for the ATmega168.
107
106
  Servo count is always limited to 6 (normally 12) for the ATmega168 chip.
108
107
  These limits apply as long as an Atmega168 is selected in the
109
108
  Arduino IDE, regardless of the options passed to this sketch generator.
@@ -11,7 +11,7 @@
11
11
 
12
12
  Global options:
13
13
 
14
- --target TARGET (default: mega. Run 'denko targets' for more info)
14
+ --target TARGET (default: atmega. Run 'denko targets' for more info)
15
15
  --debug (default: off)
16
16
 
17
17
  Available sketches and options specific to each sketch:
@@ -31,10 +31,6 @@ void setup() {
31
31
  Ethernet.begin(mac, ip);
32
32
  server.begin();
33
33
  printEthernetStatus();
34
-
35
- // Add listener callbacks for local logic.
36
- denko.digitalListenCallback = onDigitalListen;
37
- denko.analogListenCallback = onAnalogListen;
38
34
  }
39
35
 
40
36
  void loop() {
@@ -58,13 +54,3 @@ void loop() {
58
54
  // Main loop of the denko library.
59
55
  denko.run();
60
56
  }
61
-
62
- // This runs every time a digital pin that denko is listening to changes value.
63
- // p = pin number, v = current value
64
- void onDigitalListen(byte p, byte v){
65
- }
66
-
67
- // This runs every time an analog pin that denko is listening to gets read.
68
- // p = pin number, v = read value
69
- void onAnalogListen(byte p, int v){
70
- }
data/src/denko_serial.ino CHANGED
@@ -9,22 +9,8 @@ void setup() {
9
9
 
10
10
  // Pass serial stream to denko so it can read/write.
11
11
  denko.stream = &DENKO_SERIAL_IF;
12
-
13
- // Add listener callbacks for local logic.
14
- denko.digitalListenCallback = onDigitalListen;
15
- denko.analogListenCallback = onAnalogListen;
16
12
  }
17
13
 
18
14
  void loop() {
19
15
  denko.run();
20
16
  }
21
-
22
- // This runs every time a digital pin that denko is listening to changes value.
23
- // p = pin number, v = current value
24
- void onDigitalListen(byte p, byte v){
25
- }
26
-
27
- // This runs every time an analog pin that denko is listening to gets read.
28
- // p = pin number, v = read value
29
- void onAnalogListen(byte p, int v){
30
- }
data/src/denko_wifi.ino CHANGED
@@ -11,7 +11,7 @@
11
11
  // #define WIFI_NINA
12
12
 
13
13
  // WiFi101 Boards
14
- #ifdef ARDUINO_SAMD_MKR1000
14
+ #if defined(ARDUINO_SAMD_MKR1000) || defined(ADAFRUIT_FEATHER_M0)
15
15
  #define WIFI_101
16
16
  #endif
17
17
 
@@ -117,6 +117,11 @@ void setup() {
117
117
  DENKO_SERIAL_IF.begin(115200);
118
118
  while(!DENKO_SERIAL_IF);
119
119
 
120
+ // Adafruit Feather M0 Wi-Fi uses different pins.WiFi
121
+ #ifdef ADAFRUIT_FEATHER_M0
122
+ WiFi.setPins(8,7,4,2);
123
+ #endif
124
+
120
125
  // Attempt initial WiFi connection.
121
126
  connect();
122
127
 
@@ -153,10 +158,6 @@ void setup() {
153
158
  // Start the denko TCP server.
154
159
  server.begin();
155
160
 
156
- // Add listener callbacks for local logic.
157
- denko.digitalListenCallback = onDigitalListen;
158
- denko.analogListenCallback = onAnalogListen;
159
-
160
161
  // Use DENKO_SERIAL_IF as the denko IO stream until we get a TCP connection.
161
162
  denko.stream = &DENKO_SERIAL_IF;
162
163
  }
@@ -190,13 +191,3 @@ void loop() {
190
191
  // Main loop of the denko library.
191
192
  denko.run();
192
193
  }
193
-
194
- // This runs every time a digital pin that denko is listening to changes value.
195
- // p = pin number, v = current value
196
- void onDigitalListen(byte p, byte v){
197
- }
198
-
199
- // This runs every time an analog pin that denko is listening to gets read.
200
- // p = pin number, v = read value
201
- void onAnalogListen(byte p, int v){
202
- }
data/src/lib/Denko.cpp CHANGED
@@ -35,6 +35,8 @@ void Denko::sendReady() {
35
35
  }
36
36
 
37
37
  void Denko::run(){
38
+ if (rxBytes != 0) rxNotify();
39
+
38
40
  while(stream->available()) {
39
41
  parse(stream->read());
40
42
  rxBytes ++;
@@ -55,6 +57,11 @@ void Denko::run(){
55
57
  }
56
58
 
57
59
  void Denko::parse(byte c) {
60
+ if ((fragmentIndex == 0) && (charIndex == 0) && ((c & 0b10000000) != 0)) {
61
+ dWrite((c & 0b00111111), ((c & 0b01000000) >> 6), false);
62
+ return;
63
+ }
64
+
58
65
  if ((c == '\n') || (c == '\\')) {
59
66
  // If last char was a \, this \ or \n is escaped.
60
67
  if(escaping){
@@ -161,7 +168,14 @@ void Denko::process() {
161
168
 
162
169
  // Implemented in DenkoSPIBB.cpp
163
170
  #ifdef DENKO_SPI_BB
164
- case 21: spiBBtransfer (auxMsg[3], auxMsg[4], auxMsg[5], pin, auxMsg[0], auxMsg[1], auxMsg[2], &auxMsg[7]); break;
171
+ case 21: {
172
+ // Unpack read and write lengths from their 3 shared bytes.
173
+ uint16_t readLength = (((uint16_t)auxMsg[3] & 0xF0) << 4) | auxMsg[1];
174
+ uint16_t writeLength = (((uint16_t)auxMsg[3] & 0x0F) << 8) | auxMsg[2];
175
+
176
+ spiBBtransfer (auxMsg[4], auxMsg[5], auxMsg[6], pin, auxMsg[0], readLength, writeLength, &auxMsg[8]);
177
+ break;
178
+ }
165
179
  case 22: spiBBaddListener (); break;
166
180
  #endif
167
181
 
@@ -169,11 +183,17 @@ void Denko::process() {
169
183
  #ifdef DENKO_SPI
170
184
  case 26: {
171
185
  // Do this since RP2040 crashes with reinterpet_cast of uint32_t.
172
- uint32_t clockRate = (uint32_t)auxMsg[3];
173
- clockRate |= (uint32_t)auxMsg[4] << 8;
174
- clockRate |= (uint32_t)auxMsg[5] << 16;
175
- clockRate |= (uint32_t)auxMsg[6] << 24;
176
- spiTransfer(clockRate, pin, auxMsg[0], auxMsg[1], auxMsg[2], &auxMsg[7]); break;
186
+ uint32_t clockRate = (uint32_t)auxMsg[4];
187
+ clockRate |= (uint32_t)auxMsg[5] << 8;
188
+ clockRate |= (uint32_t)auxMsg[6] << 16;
189
+ clockRate |= (uint32_t)auxMsg[7] << 24;
190
+
191
+ // Unpack read and write lengths from their 3 shared bytes.
192
+ uint16_t readLength = (((uint16_t)auxMsg[3] & 0xF0) << 4) | auxMsg[1];
193
+ uint16_t writeLength = (((uint16_t)auxMsg[3] & 0x0F) << 8) | auxMsg[2];
194
+
195
+ spiTransfer(clockRate, pin, auxMsg[0], readLength, writeLength, &auxMsg[8]);
196
+ break;
177
197
  }
178
198
  case 27: spiAddListener (); break;
179
199
  #endif
@@ -182,7 +202,14 @@ void Denko::process() {
182
202
  #if defined(DENKO_SPI) || defined(DENKO_SPI_BB)
183
203
  case 28: spiRemoveListener(); break;
184
204
  #endif
185
-
205
+
206
+ // Implemented in DenkoI2CBB.cpp
207
+ #ifdef DENKO_I2C_BB
208
+ case 30: i2c_bb_search (); break;
209
+ case 31: i2c_bb_write (); break;
210
+ case 32: i2c_bb_read (); break;
211
+ #endif
212
+
186
213
  // Implemented in DenkoI2C.cpp
187
214
  #ifdef DENKO_I2C
188
215
  case 33: i2cSearch (); break;
@@ -205,6 +232,7 @@ void Denko::process() {
205
232
  case 95: setRegisterDivider (); break;
206
233
  case 96: setAnalogWriteResolution (); break;
207
234
  case 97: setAnalogReadResolution (); break;
235
+ case 98: binaryEcho (); break;
208
236
  case 99: microDelay(*reinterpret_cast<uint16_t*>(auxMsg)); break;
209
237
 
210
238
  // Should send a "feature not implemented" message as default.
@@ -224,11 +252,11 @@ void Denko::process() {
224
252
  void Denko::updateListeners() {
225
253
  currentTime = micros();
226
254
  timeDiff = currentTime - lastTime;
227
-
255
+
228
256
  if (timeDiff > 999) {
229
257
  // Add a tick for every 1000us passed.
230
258
  tickCount = tickCount + (timeDiff / 1000);
231
-
259
+
232
260
  // lastTime for next run is currentTime offset by remainder.
233
261
  lastTime = currentTime - (timeDiff % 1000);
234
262
 
@@ -254,7 +282,7 @@ void Denko::handshake() {
254
282
 
255
283
  // Reset this so we never send Rx along with ACK:
256
284
  rxBytes = 0;
257
-
285
+
258
286
  // First handshake value is BOARD_MAP if set.
259
287
  stream->print("ACK:");
260
288
  #ifdef BOARD_MAP
@@ -266,7 +294,7 @@ void Denko::handshake() {
266
294
  #ifdef DENKO_VERSION
267
295
  stream->print(DENKO_VERSION);
268
296
  #endif
269
-
297
+
270
298
  // Third is serial buffer size.
271
299
  stream->print(',');
272
300
  stream->print(DENKO_SERIAL_BUFFER_SIZE);
@@ -274,7 +302,7 @@ void Denko::handshake() {
274
302
  // Fourth is AUX_SIZE.
275
303
  stream->print(',');
276
304
  stream->print(AUX_SIZE);
277
-
305
+
278
306
  // Fifth is EEPROM size. None on Due or Zero.
279
307
  stream->print(',');
280
308
  #if defined(EEPROM_EMULATED)
@@ -288,7 +316,7 @@ void Denko::handshake() {
288
316
  #ifdef DENKO_I2C
289
317
  stream->print(DENKO_I2C_BUFFER_SIZE);
290
318
  #endif
291
-
319
+
292
320
  // End
293
321
  stream->print('\n');
294
322
  }
@@ -300,7 +328,7 @@ void Denko::resetState() {
300
328
  spiClearListeners();
301
329
  #endif
302
330
  #ifdef ESP32
303
- clearLedcChannels();
331
+ ledcDetachAll();
304
332
  #endif
305
333
  registerDivider = 8; // Update register listeners every ~8ms.
306
334
  fragmentIndex = 0;
@@ -319,7 +347,11 @@ void Denko::setRegisterDivider() {
319
347
  // Set the analog write resolution.
320
348
  void Denko::setAnalogWriteResolution() {
321
349
  #ifdef WRITE_RESOLUTION_SETTER
322
- analogWriteResolution(val);
350
+ #ifdef ESP32
351
+ esp32AnalogWRes = val;
352
+ #else
353
+ analogWriteResolution(val);
354
+ #endif
323
355
  #endif
324
356
  }
325
357
 
@@ -331,11 +363,28 @@ void Denko::setAnalogReadResolution() {
331
363
  #endif
332
364
  }
333
365
 
366
+ // CMD = 98
367
+ // Test to receive binary data and echo it back (as ASCII for now).
368
+ void Denko::binaryEcho() {
369
+ // Respond on whatever pin was given.
370
+ stream->print(pin);
371
+ stream->print(':');
372
+
373
+ // Echo bytes from aux back to stream. Val is data length.
374
+ for (uint16_t i=0; i<val; i++) {
375
+ stream->print(auxMsg[i]);
376
+ stream->print(',');
377
+ }
378
+
379
+ // End response.
380
+ stream->print('\n');
381
+ }
382
+
334
383
  // CMD = 99
335
384
  // Use a different blocking microsecond delay on different platforms.
336
385
  void Denko::microDelay(uint32_t microseconds){
337
386
  #if defined(ESP32)
338
- ets_delay_us(microseconds);
387
+ esp_rom_delay_us(microseconds);
339
388
  #else
340
389
  delayMicroseconds(microseconds);
341
390
  #endif