denko 0.13.1 → 0.13.3

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 (455) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_avr.yml +2 -4
  3. data/.github/workflows/build_esp32.yml +2 -3
  4. data/.github/workflows/build_esp8266.yml +2 -3
  5. data/.github/workflows/build_megaavr.yml +3 -5
  6. data/.github/workflows/build_ra4m1.yml +57 -0
  7. data/.github/workflows/build_rp2040.yml +2 -4
  8. data/.github/workflows/build_sam3x.yml +1 -3
  9. data/.github/workflows/build_samd.yml +2 -4
  10. data/CHANGELOG.md +100 -0
  11. data/DEPS_CLI.md +13 -6
  12. data/DEPS_IDE.md +14 -7
  13. data/HARDWARE.md +104 -80
  14. data/README.md +19 -28
  15. data/benchmarks/i2c_ssd1306_refresh.rb +79 -0
  16. data/examples/analog_io/ads1115.rb +57 -0
  17. data/examples/analog_io/ads1118.rb +8 -9
  18. data/examples/analog_io/dac_loopback.rb +6 -4
  19. data/examples/analog_io/input.rb +39 -36
  20. data/examples/connection/tcp.rb +1 -1
  21. data/examples/display/hd44780.rb +3 -3
  22. data/examples/display/ssd1306.rb +1 -1
  23. data/lib/denko/analog_io/ads1115.rb +61 -0
  24. data/lib/denko/analog_io/ads1118.rb +10 -120
  25. data/lib/denko/analog_io/ads111x.rb +123 -0
  26. data/lib/denko/analog_io/output.rb +2 -1
  27. data/lib/denko/analog_io.rb +2 -0
  28. data/lib/denko/behaviors/reader.rb +14 -13
  29. data/lib/denko/behaviors/subcomponents.rb +2 -2
  30. data/lib/denko/board/core.rb +1 -1
  31. data/lib/denko/board/i2c.rb +1 -4
  32. data/lib/denko/board/led_array.rb +3 -6
  33. data/lib/denko/board/map.rb +9 -0
  34. data/lib/denko/board/servo.rb +2 -6
  35. data/lib/denko/board.rb +32 -20
  36. data/lib/denko/connection/board_uart.rb +3 -3
  37. data/lib/denko/connection/flow_control.rb +10 -2
  38. data/lib/denko/digital_io/output.rb +1 -1
  39. data/lib/denko/display/hd44780.rb +18 -18
  40. data/lib/denko/led/seven_segment.rb +18 -19
  41. data/lib/denko/message.rb +7 -15
  42. data/lib/denko/pulse_io/ir_transmitter.rb +1 -2
  43. data/lib/denko/version.rb +1 -1
  44. data/lib/denko_cli/packages.rb +7 -1
  45. data/lib/denko_cli/targets.rb +8 -5
  46. data/lib/denko_cli/usage.txt +8 -4
  47. data/src/denko_ethernet.ino +15 -23
  48. data/src/denko_serial.ino +3 -14
  49. data/src/denko_wifi.ino +72 -52
  50. data/src/lib/Denko.cpp +14 -6
  51. data/src/lib/Denko.h +6 -17
  52. data/src/lib/DenkoCoreIO.cpp +3 -3
  53. data/src/lib/DenkoDefines.h +73 -19
  54. data/src/lib/DenkoEEPROM.cpp +9 -1
  55. data/src/lib/DenkoI2C.cpp +11 -9
  56. data/src/lib/DenkoLEDArray.cpp +5 -11
  57. data/test/analog_io/input_test.rb +3 -3
  58. data/test/analog_io/output_test.rb +1 -1
  59. data/test/analog_io/potentiometer_test.rb +2 -2
  60. data/test/behaviors/bus_peripheral_addressed.rb +1 -1
  61. data/test/behaviors/bus_peripheral_test.rb +1 -1
  62. data/test/behaviors/callbacks_test.rb +4 -4
  63. data/test/behaviors/component_test.rb +2 -2
  64. data/test/behaviors/listener_test.rb +3 -3
  65. data/test/behaviors/poller_test.rb +3 -3
  66. data/test/behaviors/reader_test.rb +11 -4
  67. data/test/behaviors/subcomponents_test.rb +1 -1
  68. data/test/behaviors/threaded_test.rb +7 -7
  69. data/test/board/board_test.rb +8 -8
  70. data/test/board/core_test.rb +12 -12
  71. data/test/board/eeprom_test.rb +2 -2
  72. data/test/board/helper_test.rb +0 -4
  73. data/test/board/i2c_test.rb +5 -5
  74. data/test/board/infrared_test.rb +1 -1
  75. data/test/board/message_test.rb +1 -1
  76. data/test/board/one_wire_test.rb +4 -4
  77. data/test/board/pulse_test.rb +2 -2
  78. data/test/board/servo_test.rb +3 -3
  79. data/test/board/spi_test.rb +3 -3
  80. data/test/board/tone_test.rb +2 -2
  81. data/test/connection/serial_test.rb +13 -13
  82. data/test/digital_io/input_test.rb +7 -7
  83. data/test/digital_io/output_test.rb +5 -5
  84. data/test/digital_io/rotary_encoder_test.rb +4 -4
  85. data/test/display/hd44780_test.rb +11 -1
  86. data/test/eeprom/built_in_test.rb +1 -1
  87. data/test/i2c/bus_test.rb +5 -5
  88. data/test/i2c/peripheral_test.rb +4 -4
  89. data/test/led/base_test.rb +2 -2
  90. data/test/led/rgb_test.rb +6 -6
  91. data/test/led/seven_segment_test.rb +36 -14
  92. data/test/motor/servo_test.rb +6 -6
  93. data/test/motor/stepper_test.rb +5 -5
  94. data/test/one_wire/bus_test.rb +9 -9
  95. data/test/one_wire/peripheral_test.rb +17 -17
  96. data/test/pulse_io/buzzer_test.rb +4 -4
  97. data/test/pulse_io/ir_transmitter_test.rb +2 -2
  98. data/test/pulse_io/pwm_output_test.rb +4 -4
  99. data/test/rtc/ds3231_test.rb +4 -4
  100. data/test/sensor/dht_test.rb +3 -3
  101. data/test/sensor/ds18b20_test.rb +9 -9
  102. data/test/spi/bus_test.rb +4 -4
  103. data/test/spi/input_register_test.rb +8 -8
  104. data/test/spi/output_register_test.rb +4 -4
  105. data/test/test_helper.rb +17 -2
  106. data/test/uart/bitbang_test.rb +3 -3
  107. metadata +7 -350
  108. data/vendor/board-maps/.gitignore +0 -56
  109. data/vendor/board-maps/.gitmodules +0 -21
  110. data/vendor/board-maps/BoardMap.h +0 -1364
  111. data/vendor/board-maps/README.md +0 -51
  112. data/vendor/board-maps/lib/boards_parser.rb +0 -66
  113. data/vendor/board-maps/lib/header_parser.rb +0 -164
  114. data/vendor/board-maps/run.rb +0 -47
  115. data/vendor/board-maps/yaml/0XCB_HELIOS.yml +0 -48
  116. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +0 -25
  117. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +0 -25
  118. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +0 -27
  119. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +0 -29
  120. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +0 -29
  121. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +0 -25
  122. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +0 -27
  123. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +0 -30
  124. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +0 -48
  125. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +0 -48
  126. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +0 -48
  127. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +0 -48
  128. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +0 -48
  129. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +0 -48
  130. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +0 -48
  131. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +0 -48
  132. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +0 -24
  133. data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +0 -48
  134. data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +0 -48
  135. data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +0 -48
  136. data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +0 -16
  137. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +0 -12
  138. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +0 -22
  139. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +0 -20
  140. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +0 -27
  141. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +0 -48
  142. data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +0 -48
  143. data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +0 -48
  144. data/vendor/board-maps/yaml/ALKS.yml +0 -34
  145. data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +0 -16
  146. data/vendor/board-maps/yaml/AVR_ADK.yml +0 -24
  147. data/vendor/board-maps/yaml/AVR_BT.yml +0 -16
  148. data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +0 -14
  149. data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +0 -16
  150. data/vendor/board-maps/yaml/AVR_ESPLORA.yml +0 -20
  151. data/vendor/board-maps/yaml/AVR_ETHERNET.yml +0 -16
  152. data/vendor/board-maps/yaml/AVR_FIO.yml +0 -16
  153. data/vendor/board-maps/yaml/AVR_GEMMA.yml +0 -6
  154. data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +0 -20
  155. data/vendor/board-maps/yaml/AVR_LEONARDO.yml +0 -20
  156. data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +0 -20
  157. data/vendor/board-maps/yaml/AVR_LILYPAD.yml +0 -16
  158. data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +0 -20
  159. data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +0 -20
  160. data/vendor/board-maps/yaml/AVR_MEGA.yml +0 -24
  161. data/vendor/board-maps/yaml/AVR_MEGA2560.yml +0 -24
  162. data/vendor/board-maps/yaml/AVR_MICRO.yml +0 -20
  163. data/vendor/board-maps/yaml/AVR_MINI.yml +0 -16
  164. data/vendor/board-maps/yaml/AVR_NANO.yml +0 -16
  165. data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +0 -22
  166. data/vendor/board-maps/yaml/AVR_NG.yml +0 -16
  167. data/vendor/board-maps/yaml/AVR_PRO.yml +0 -16
  168. data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +0 -22
  169. data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +0 -19
  170. data/vendor/board-maps/yaml/AVR_UNO.yml +0 -16
  171. data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +0 -16
  172. data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +0 -22
  173. data/vendor/board-maps/yaml/AVR_YUN.yml +0 -20
  174. data/vendor/board-maps/yaml/AVR_YUNMINI.yml +0 -20
  175. data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +0 -14
  176. data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +0 -39
  177. data/vendor/board-maps/yaml/BPI_BIT.yml +0 -9
  178. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +0 -31
  179. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040-7A.yml +0 -48
  180. data/vendor/board-maps/yaml/BeeMotionS3.yml +0 -40
  181. data/vendor/board-maps/yaml/Bee_Motion.yml +0 -27
  182. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +0 -1
  183. data/vendor/board-maps/yaml/Bee_S3.yml +0 -38
  184. data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +0 -39
  185. data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +0 -38
  186. data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +0 -32
  187. data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +0 -36
  188. data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +0 -39
  189. data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +0 -39
  190. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +0 -42
  191. data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +0 -38
  192. data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +0 -38
  193. data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +0 -19
  194. data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +0 -26
  195. data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +0 -48
  196. data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +0 -48
  197. data/vendor/board-maps/yaml/CoreESP32.yml +0 -49
  198. data/vendor/board-maps/yaml/D1_MINI32.yml +0 -36
  199. data/vendor/board-maps/yaml/D1_UNO32.yml +0 -28
  200. data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +0 -48
  201. data/vendor/board-maps/yaml/DENKY.yml +0 -26
  202. data/vendor/board-maps/yaml/DENKY_PICOV3.yml +0 -26
  203. data/vendor/board-maps/yaml/DENKY_WROOM32.yml +0 -26
  204. data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +0 -26
  205. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +0 -14
  206. data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +0 -48
  207. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +0 -44
  208. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +0 -38
  209. data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +0 -7
  210. data/vendor/board-maps/yaml/DPU_ESP32.yml +0 -26
  211. data/vendor/board-maps/yaml/DYDK.yml +0 -38
  212. data/vendor/board-maps/yaml/DYDK1A.yml +0 -37
  213. data/vendor/board-maps/yaml/DYDK1Av2.yml +0 -45
  214. data/vendor/board-maps/yaml/DYG.yml +0 -20
  215. data/vendor/board-maps/yaml/DYM.yml +0 -40
  216. data/vendor/board-maps/yaml/DYMv2.yml +0 -39
  217. data/vendor/board-maps/yaml/D_Duino_32.yml +0 -29
  218. data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +0 -44
  219. data/vendor/board-maps/yaml/ESP320.yml +0 -8
  220. data/vendor/board-maps/yaml/ESP32C3_DEV.yml +0 -14
  221. data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +0 -13
  222. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +0 -33
  223. data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +0 -34
  224. data/vendor/board-maps/yaml/ESP32S2_USB.yml +0 -33
  225. data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +0 -7
  226. data/vendor/board-maps/yaml/ESP32S3_DEV.yml +0 -38
  227. data/vendor/board-maps/yaml/ESP32_DEV.yml +0 -26
  228. data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +0 -26
  229. data/vendor/board-maps/yaml/ESP32_EVB.yml +0 -7
  230. data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +0 -13
  231. data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +0 -13
  232. data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +0 -13
  233. data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +0 -13
  234. data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +0 -27
  235. data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +0 -24
  236. data/vendor/board-maps/yaml/ESP32_PICO.yml +0 -26
  237. data/vendor/board-maps/yaml/ESP32_POE.yml +0 -7
  238. data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +0 -7
  239. data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +0 -16
  240. data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +0 -11
  241. data/vendor/board-maps/yaml/ESP32_THING.yml +0 -27
  242. data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +0 -30
  243. data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +0 -30
  244. data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +0 -26
  245. data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +0 -26
  246. data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +0 -9
  247. data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +0 -8
  248. data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +0 -7
  249. data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +0 -7
  250. data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +0 -9
  251. data/vendor/board-maps/yaml/ESP8266_ESP01.yml +0 -9
  252. data/vendor/board-maps/yaml/ESP8266_ESP07.yml +0 -20
  253. data/vendor/board-maps/yaml/ESP8266_ESP12.yml +0 -20
  254. data/vendor/board-maps/yaml/ESP8266_ESP13.yml +0 -17
  255. data/vendor/board-maps/yaml/ESP8266_ESP210.yml +0 -9
  256. data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +0 -9
  257. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +0 -9
  258. data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +0 -9
  259. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +0 -9
  260. data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +0 -9
  261. data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +0 -9
  262. data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +0 -22
  263. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +0 -20
  264. data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +0 -20
  265. data/vendor/board-maps/yaml/ESP8266_OAK.yml +0 -9
  266. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +0 -9
  267. data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +0 -9
  268. data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +0 -25
  269. data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +0 -9
  270. data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +0 -9
  271. data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +0 -9
  272. data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +0 -9
  273. data/vendor/board-maps/yaml/ESP8266_THING.yml +0 -9
  274. data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +0 -9
  275. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +0 -18
  276. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +0 -18
  277. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +0 -18
  278. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +0 -25
  279. data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +0 -18
  280. data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +0 -9
  281. data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +0 -9
  282. data/vendor/board-maps/yaml/ESPECTRO32.yml +0 -27
  283. data/vendor/board-maps/yaml/ESPea32.yml +0 -27
  284. data/vendor/board-maps/yaml/ESPino32.yml +0 -27
  285. data/vendor/board-maps/yaml/ET-Board.yml +0 -26
  286. data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +0 -46
  287. data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +0 -7
  288. data/vendor/board-maps/yaml/FEATHERS2.yml +0 -33
  289. data/vendor/board-maps/yaml/FEATHERS2NEO.yml +0 -30
  290. data/vendor/board-maps/yaml/FEATHERS3.yml +0 -29
  291. data/vendor/board-maps/yaml/FEATHER_ESP32.yml +0 -28
  292. data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +0 -48
  293. data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +0 -33
  294. data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +0 -33
  295. data/vendor/board-maps/yaml/FROG_ESP32.yml +0 -26
  296. data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +0 -22
  297. data/vendor/board-maps/yaml/GEN4_IOD.yml +0 -9
  298. data/vendor/board-maps/yaml/GENERIC_RP2040.yml +0 -48
  299. data/vendor/board-maps/yaml/HEALTHYPI_4.yml +0 -27
  300. data/vendor/board-maps/yaml/HONEYLEMON.yml +0 -27
  301. data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +0 -27
  302. data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +0 -16
  303. data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +0 -47
  304. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +0 -19
  305. data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +0 -34
  306. data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +0 -26
  307. data/vendor/board-maps/yaml/LOLIN32.yml +0 -27
  308. data/vendor/board-maps/yaml/LOLIN32_LITE.yml +0 -27
  309. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -14
  310. data/vendor/board-maps/yaml/LOLIN_D32.yml +0 -27
  311. data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +0 -27
  312. data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +0 -34
  313. data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +0 -34
  314. data/vendor/board-maps/yaml/LOLIN_S3.yml +0 -32
  315. data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +0 -32
  316. data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +0 -32
  317. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -18
  318. data/vendor/board-maps/yaml/LoPy.yml +0 -27
  319. data/vendor/board-maps/yaml/LoPy4.yml +0 -27
  320. data/vendor/board-maps/yaml/M5STACK_CORES3.yml +0 -8
  321. data/vendor/board-maps/yaml/M5STACK_Core2.yml +0 -9
  322. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +0 -10
  323. data/vendor/board-maps/yaml/M5Stack-Timer-CAM.yml +0 -10
  324. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -10
  325. data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +0 -7
  326. data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +0 -9
  327. data/vendor/board-maps/yaml/M5Stack_Core_ESP32.yml +0 -10
  328. data/vendor/board-maps/yaml/M5Stack_Station.yml +0 -10
  329. data/vendor/board-maps/yaml/M5Stick_C.yml +0 -10
  330. data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +0 -21
  331. data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +0 -48
  332. data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +0 -48
  333. data/vendor/board-maps/yaml/METRO_ESP32S2.yml +0 -34
  334. data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +0 -27
  335. data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +0 -27
  336. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +0 -27
  337. data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +0 -27
  338. data/vendor/board-maps/yaml/MICROS2.yml +0 -34
  339. data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +0 -9
  340. data/vendor/board-maps/yaml/Metro.yml +0 -8
  341. data/vendor/board-maps/yaml/NANO32.yml +0 -27
  342. data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +0 -35
  343. data/vendor/board-maps/yaml/NEBULAS3.yml +0 -33
  344. data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +0 -48
  345. data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +0 -48
  346. data/vendor/board-maps/yaml/Node32s.yml +0 -27
  347. data/vendor/board-maps/yaml/NodeMCU_32S.yml +0 -27
  348. data/vendor/board-maps/yaml/ODROID_ESP32.yml +0 -10
  349. data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +0 -24
  350. data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +0 -33
  351. data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +0 -48
  352. data/vendor/board-maps/yaml/PROS3.yml +0 -28
  353. data/vendor/board-maps/yaml/PYCOM_GPY.yml +0 -27
  354. data/vendor/board-maps/yaml/Piranha.yml +0 -16
  355. data/vendor/board-maps/yaml/Pocket32.yml +0 -27
  356. data/vendor/board-maps/yaml/QUANTUM.yml +0 -26
  357. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +0 -48
  358. data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +0 -48
  359. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -32
  360. data/vendor/board-maps/yaml/RMP.yml +0 -33
  361. data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +0 -12
  362. data/vendor/board-maps/yaml/SAMD_MKR1000.yml +0 -20
  363. data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +0 -19
  364. data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +0 -15
  365. data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +0 -15
  366. data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +0 -19
  367. data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +0 -18
  368. data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +0 -18
  369. data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +0 -19
  370. data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +0 -19
  371. data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +0 -13
  372. data/vendor/board-maps/yaml/SAMD_TIAN.yml +0 -15
  373. data/vendor/board-maps/yaml/SAMD_ZERO.yml +0 -14
  374. data/vendor/board-maps/yaml/SAM_DUE.yml +0 -26
  375. data/vendor/board-maps/yaml/SAM_ZERO.yml +0 -15
  376. data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +0 -47
  377. data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +0 -29
  378. data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +0 -48
  379. data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +0 -26
  380. data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +0 -48
  381. data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +0 -48
  382. data/vendor/board-maps/yaml/STAMP_S3.yml +0 -4
  383. data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +0 -31
  384. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +0 -23
  385. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +0 -23
  386. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +0 -23
  387. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +0 -23
  388. data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +0 -23
  389. data/vendor/board-maps/yaml/TBeam.yml +0 -23
  390. data/vendor/board-maps/yaml/TINYPICO.yml +0 -26
  391. data/vendor/board-maps/yaml/TINYS2.yml +0 -33
  392. data/vendor/board-maps/yaml/TINYS3.yml +0 -25
  393. data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +0 -11
  394. data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +0 -28
  395. data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +0 -28
  396. data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +0 -28
  397. data/vendor/board-maps/yaml/TTGO_T1.yml +0 -27
  398. data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +0 -27
  399. data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +0 -27
  400. data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +0 -10
  401. data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +0 -10
  402. data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +0 -10
  403. data/vendor/board-maps/yaml/TWATCH_BASE.yml +0 -10
  404. data/vendor/board-maps/yaml/TWatch.yml +0 -10
  405. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +0 -18
  406. data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +0 -18
  407. data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +0 -48
  408. data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +0 -43
  409. data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +0 -48
  410. data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +0 -23
  411. data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +0 -23
  412. data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +0 -48
  413. data/vendor/board-maps/yaml/WATCHY.yml +0 -7
  414. data/vendor/board-maps/yaml/WATCHY_V10.yml +0 -7
  415. data/vendor/board-maps/yaml/WATCHY_V15.yml +0 -7
  416. data/vendor/board-maps/yaml/WATCHY_V20.yml +0 -7
  417. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +0 -47
  418. data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +0 -47
  419. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +0 -47
  420. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +0 -48
  421. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +0 -47
  422. data/vendor/board-maps/yaml/WESP32.yml +0 -17
  423. data/vendor/board-maps/yaml/WIDORA_AIR.yml +0 -34
  424. data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +0 -23
  425. data/vendor/board-maps/yaml/WIFINFO.yml +0 -20
  426. data/vendor/board-maps/yaml/WIPY3.yml +0 -27
  427. data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +0 -48
  428. data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +0 -48
  429. data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +0 -48
  430. data/vendor/board-maps/yaml/WT32_ETH01.yml +0 -8
  431. data/vendor/board-maps/yaml/WiFiduino32S3.yml +0 -27
  432. data/vendor/board-maps/yaml/WiFiduinoV2.yml +0 -27
  433. data/vendor/board-maps/yaml/Wifiduino32.yml +0 -40
  434. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -22
  435. data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +0 -36
  436. data/vendor/board-maps/yaml/YD_RP2040.yml +0 -48
  437. data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +0 -30
  438. data/vendor/board-maps/yaml/connaxio_espoir.yml +0 -18
  439. data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +0 -22
  440. data/vendor/board-maps/yaml/fm_devkit.yml +0 -15
  441. data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +0 -31
  442. data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +0 -28
  443. data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +0 -32
  444. data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +0 -27
  445. data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +0 -27
  446. data/vendor/board-maps/yaml/heltec_wireless_stick.yml +0 -27
  447. data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +0 -27
  448. data/vendor/board-maps/yaml/openkb.yml +0 -27
  449. data/vendor/board-maps/yaml/roboheart_hercules.yml +0 -17
  450. data/vendor/board-maps/yaml/sensesiot_weizen.yml +0 -26
  451. data/vendor/board-maps/yaml/uPesy_WROOM.yml +0 -27
  452. data/vendor/board-maps/yaml/uPesy_WROVER.yml +0 -27
  453. data/vendor/board-maps/yaml/unphone8.yml +0 -32
  454. data/vendor/board-maps/yaml/unphone9.yml +0 -32
  455. data/vendor/board-maps/yaml/wifi_kit_8.yml +0 -15
data/src/denko_wifi.ino CHANGED
@@ -1,3 +1,25 @@
1
+ // NOTE!!!
2
+ // For some boards the standard <WiFi.h> header file does not work.
3
+ //
4
+ // Make sure to define:
5
+ // WIFI_101 if using the WiFi Shield 101, or any board that uses the ATWINC1500 for Wi-Fi.
6
+ // WIFI_NINA if using any board with the NINA-W102 WiFi chip.
7
+ //
8
+ // Some known boards are handled automatically.
9
+ //
10
+ // #define WIFI_101
11
+ // #define WIFI_NINA
12
+
13
+ // WiFi101 Boards
14
+ #ifdef ARDUINO_SAMD_MKR1000
15
+ #define WIFI_101
16
+ #endif
17
+
18
+ // Nina WiFi Boards
19
+ #if defined(ARDUINO_SAMD_MKRWIFI1010) || defined(ARDUINO_AVR_UNO_WIFI_REV2) || defined(ARDUINO_SAMD_NANO_33_IOT)
20
+ #define WIFI_NINA
21
+ #endif
22
+
1
23
  #include "Denko.h"
2
24
  #if defined(ESP8266)
3
25
  #include <ESP8266WiFi.h>
@@ -12,21 +34,17 @@
12
34
  // #include <ArduinoOTA.h>
13
35
  #define WIFI_STATUS_LED 2
14
36
  #else
15
- #include <SPI.h>
16
- #include <WiFi.h>
17
37
  #define WIFI_STATUS_LED 13
18
- #endif
19
-
20
-
21
- // Define 'serial' as the serial interface to use.
22
- // Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
23
- // On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
24
- #if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
25
- #define serial SerialUSB
26
- // Use this for Programming USB port (right) on Due and Zero.
27
- // #define serial Serial
28
- #else
29
- #define serial Serial
38
+ #if defined(WIFI_101)
39
+ #include <WiFi101.h>
40
+ #elif defined(WIFI_NINA)
41
+ #include <WiFiNINA.h>
42
+ #elif defined(ARDUINO_UNOWIFIR4)
43
+ #include <WiFiS3.h>
44
+ #else
45
+ #include <SPI.h>
46
+ #include <WiFi.h>
47
+ #endif
30
48
  #endif
31
49
 
32
50
  // Configure your WiFi options here. IP address is not configurable. Uses DHCP.
@@ -50,16 +68,21 @@ void indicateWiFi(byte value) {
50
68
  }
51
69
 
52
70
  void printWifiStatus() {
53
- serial.println("WiFi Connected");
54
- serial.print("SSID: ");
55
- serial.println(WiFi.SSID());
56
- serial.print("Signal Strength (RSSI):");
57
- serial.print(WiFi.RSSI());
58
- serial.println(" dBm");
59
- serial.print("IP Address: ");
60
- serial.println(WiFi.localIP());
61
- serial.print("Denko TCP Port: ");
62
- serial.println(port);
71
+ DENKO_SERIAL_IF.println("WiFi Connected");
72
+ DENKO_SERIAL_IF.print("SSID: ");
73
+ DENKO_SERIAL_IF.println(WiFi.SSID());
74
+ DENKO_SERIAL_IF.print("Signal Strength (RSSI):");
75
+ DENKO_SERIAL_IF.print(WiFi.RSSI());
76
+ DENKO_SERIAL_IF.println(" dBm");
77
+ DENKO_SERIAL_IF.print("IP Address: ");
78
+ #ifdef WIFI_101
79
+ IPAddress ip = WiFi.localIP();
80
+ DENKO_SERIAL_IF.println(ip);
81
+ #else
82
+ DENKO_SERIAL_IF.println(WiFi.localIP());
83
+ #endif
84
+ DENKO_SERIAL_IF.print("Denko TCP Port: ");
85
+ DENKO_SERIAL_IF.println(port);
63
86
  indicateWiFi(true);
64
87
  }
65
88
 
@@ -70,37 +93,29 @@ void connect(){
70
93
  #endif
71
94
 
72
95
  // Try to connect.
73
- serial.print("Connecting to WiFi ");
96
+ DENKO_SERIAL_IF.print("Connecting to WiFi ");
74
97
  WiFi.begin(ssid, pass);
75
98
 
76
99
  // Delay until connected.
77
100
  while (WiFi.status() != WL_CONNECTED) {
78
101
  delay(500);
79
- serial.print(".");
102
+ DENKO_SERIAL_IF.print(".");
80
103
  }
81
104
  connected = true;
105
+ printWifiStatus();
82
106
  }
83
107
 
84
108
  void maintainWiFi(){
85
- if (connected == true){
86
- if (WiFi.status() == WL_CONNECTED) return;
109
+ if (WiFi.status() != WL_CONNECTED) {
87
110
  connected = false;
88
111
  connect();
89
112
  }
90
- if (connected == false){
91
- if (WiFi.status() != WL_CONNECTED) {
92
- connect();
93
- return;
94
- }
95
- connected = true;
96
- printWifiStatus();
97
- }
98
113
  }
99
114
 
100
115
  void setup() {
101
116
  // Wait for serial ready.
102
- serial.begin(115200);
103
- while(!serial);
117
+ DENKO_SERIAL_IF.begin(115200);
118
+ while(!DENKO_SERIAL_IF);
104
119
 
105
120
  // Enable over the air updates on the ESP8266.
106
121
  #if defined(ESP8266)
@@ -117,33 +132,38 @@ void setup() {
117
132
  denko.digitalListenCallback = onDigitalListen;
118
133
  denko.analogListenCallback = onAnalogListen;
119
134
 
120
- // Use serial as the denko IO stream until we get a TCP connection.
121
- denko.stream = &serial;
135
+ // Use DENKO_SERIAL_IF as the denko IO stream until we get a TCP connection.
136
+ denko.stream = &DENKO_SERIAL_IF;
122
137
  }
123
138
 
124
139
  void loop() {
125
140
  // Reconnect if we've lost WiFi.
126
141
  maintainWiFi();
127
142
 
143
+ // Handle OTA updates.
144
+ #if defined(ESP8266)
145
+ ArduinoOTA.handle();
146
+ #endif
147
+
148
+ // End connection if client disconnects.
149
+ if (client && !client.connected()) {
150
+ client.stop();
151
+ }
152
+
128
153
  // Allow one client at a time to be connected. Set it as the denko IO stream.
129
154
  if (!client){
130
155
  client = server.available();
131
- if (client) denko.stream = &client;
156
+ if (client) {
157
+ // TCP Client
158
+ denko.stream = &client;
159
+ } else {
160
+ // Serial fallback
161
+ denko.stream = &DENKO_SERIAL_IF;
162
+ }
132
163
  }
133
164
 
134
165
  // Main loop of the denko library.
135
166
  denko.run();
136
-
137
- // End the connection when client disconnects and revert to serial IO.
138
- if (client && !client.connected()){
139
- client.stop();
140
- denko.stream = &serial;
141
- }
142
-
143
- // Handle OTA updates.
144
- #if defined(ESP8266)
145
- ArduinoOTA.handle();
146
- #endif
147
167
  }
148
168
 
149
169
  // This runs every time a digital pin that denko is listening to changes value.
data/src/lib/Denko.cpp CHANGED
@@ -36,7 +36,7 @@ void Denko::run(){
36
36
  parse(stream->read());
37
37
  rxBytes ++;
38
38
  // Acknowledge when we've received half as many bytes as the serial buffer.
39
- if (rxBytes >= rxNotifyLimit) rxNotify();
39
+ if (rxBytes >= DENKO_RX_ACK_INTERVAL) rxNotify();
40
40
  }
41
41
 
42
42
  #ifdef DENKO_UARTS
@@ -113,7 +113,7 @@ void Denko::process() {
113
113
  case 6: setListener (pin, val, auxMsg[0], auxMsg[1], false); break;
114
114
 
115
115
  // Implemented in DenkoEEPROM.cpp
116
- #ifdef EEPROM_PRESENT
116
+ #ifdef DENKO_EEPROM
117
117
  case 7: eepromRead (); break;
118
118
  case 8: eepromWrite (); break;
119
119
  #endif
@@ -262,19 +262,27 @@ void Denko::handshake() {
262
262
  #ifdef DENKO_VERSION
263
263
  stream->print(DENKO_VERSION);
264
264
  #endif
265
+
266
+ // Third is serial buffer size.
267
+ stream->print(',');
268
+ stream->print(DENKO_SERIAL_BUFFER_SIZE);
265
269
 
266
- // Third is AUX_SIZE.
270
+ // Fourth is AUX_SIZE.
267
271
  stream->print(',');
268
272
  stream->print(AUX_SIZE);
269
273
 
270
- // Fourth is EEPROM size in bytes. None on Due or Zero.
274
+ // Fifth is EEPROM size. None on Due or Zero.
271
275
  stream->print(',');
272
276
  #if defined(EEPROM_EMULATED)
273
277
  stream->print(EMULATED_EEPROM_LENGTH);
274
278
  #elif defined(EEPROM_PRESENT)
275
279
  stream->print(EEPROM.length());
276
- #else
277
- stream->print('0');
280
+ #endif
281
+
282
+ // Sixth is I2C buffer size.
283
+ stream->print(',');
284
+ #ifdef DENKO_I2C
285
+ stream->print(DENKO_I2C_BUFFER_SIZE);
278
286
  #endif
279
287
 
280
288
  // End
data/src/lib/Denko.h CHANGED
@@ -154,6 +154,8 @@ class Denko {
154
154
  void spiClearListeners ();
155
155
 
156
156
  // I2C
157
+ bool i2cStarted = false;
158
+ byte i2cSpeed = 0;
157
159
  void i2cBegin ();
158
160
  void i2cEnd ();
159
161
  void i2cSetSpeed (uint8_t code);
@@ -199,36 +201,23 @@ class Denko {
199
201
  // Parsed message storage.
200
202
  byte cmdStr[4]; byte cmd;
201
203
  byte pinStr[4]; byte pin;
202
- byte valStr[4]; byte val;
204
+ byte valStr[4]; uint16_t val;
203
205
  byte auxMsg[AUX_SIZE];
204
206
 
205
207
  //
206
208
  // Flow control stuff.
207
209
  //
208
- // Notify the computer when the board has received half a serial buffer of bytes.
209
- //
210
+ // Notify computer that board has received bytes.
210
211
  void rxNotify();
211
212
  uint8_t rxBytes = 0;
212
- //
213
- // ESP32 uses a 128 byte FIFO buffer for UART Rx. Notify every 63 bytes instead of 32
214
- // so serial over native USB performs better.
215
- //
216
- // Using 63 instead of 64 since the ATmega32u4 (Leonardo) is limited to 63.
217
- //
218
- #ifdef ESP32
219
- uint8_t rxNotifyLimit = 63;
220
- #else
221
- uint8_t rxNotifyLimit = 32;
222
- #endif
223
-
224
213
  //
225
214
  // Tell the computer to halt or resume sending data to the board.
226
215
  //
227
- // Only use these if running a function on the board that disables interrupts for
216
+ // Use these if running a function on the board that disables interrupts for
228
217
  // longer than a single serial character (~85us at 115,200 baud).
229
218
  //
230
219
  // If the function was initiated by the computer (eg. writing to a WS2812 strip), do
231
- // not call sendHalt(). The computer should have halted transmission itself after sending
220
+ // not call sendHalt(). The computer should halt transmission itself after sending
232
221
  // the WS2812 command. Only call sendReady() after data is written out to the strip.
233
222
  //
234
223
  // If the function was initiated on the board (eg. New IR input triggered by an interrupt),
@@ -27,8 +27,8 @@ void Denko::setMode(byte p, byte m) {
27
27
  if (m != 0b100) dacDisable(p);
28
28
  #endif
29
29
 
30
- // On the SAMD21, mode needs to be INPUT when using the DAC.
31
- #ifdef __SAMD21G18A__
30
+ // On the SAMD21 and RA4M1, mode needs to be INPUT when using the DAC.
31
+ #if defined(__SAMD21G18A__) || defined(_RENESAS_RA_)
32
32
  if (m == 0b100){
33
33
  pinMode(p, INPUT);
34
34
  return;
@@ -196,7 +196,7 @@ void Denko::dacWrite(byte p, int v, boolean echo) {
196
196
  ::dacWrite(p, v);
197
197
  #endif
198
198
 
199
- #if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
199
+ #if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_)
200
200
  analogWrite(p, v);
201
201
  #endif
202
202
  }
@@ -8,6 +8,7 @@
8
8
  #define DENKO_VERSION __VERSION__
9
9
 
10
10
  // Uncomment these to include features beyond core features.
11
+ // #define DENKO_EEPROM
11
12
  // #define DENKO_ONE_WIRE
12
13
  // #define DENKO_TONE
13
14
  // #define DENKO_SPI_BB
@@ -39,30 +40,24 @@
39
40
  #define PIN_COUNT 22
40
41
  #endif
41
42
 
42
- // No EEPROM on the Due or Zero.
43
- #if !defined(__SAM3X8E__) && !defined(__SAMD21G18A__)
44
- #define EEPROM_PRESENT
45
- #include <EEPROM.h>
46
- #endif
47
-
48
- // Emulate 512 bytes of EEPROM on ESP chips and the RP2040.
49
- #if defined(ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
50
- # define EEPROM_EMULATED
51
- # define EMULATED_EEPROM_LENGTH 512
52
- #endif
53
-
54
43
  // Figure out how many LEDC channels are available on ESP32 boards.
55
44
  #ifdef ESP32
56
- #define LEDC_CHANNEL_COUNT 16
45
+ #if CONFIG_IDF_TARGET_ESP32
46
+ #define LEDC_CHANNEL_COUNT 16
47
+ #elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
48
+ #define LEDC_CHANNEL_COUNT 8
49
+ #elif CONFIG_IDF_TARGET_ESP32C3
50
+ #define LEDC_CHANNEL_COUNT 6
51
+ #endif
57
52
  #endif
58
53
 
59
54
  // Filter for boards that can set their analog write resolution.
60
- #if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(ESP8266)
55
+ #if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040) || defined(ESP8266)
61
56
  #define WRITE_RESOLUTION_SETTER
62
57
  #endif
63
58
 
64
59
  // Filter for boards that can set their analog read resolution.
65
- #if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
60
+ #if defined(__SAM3X8E__) || defined(__SAMD21G18A__) || defined(_RENESAS_RA_) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
66
61
  #define READ_RESOLUTION_SETTER
67
62
  #endif
68
63
 
@@ -70,7 +65,7 @@
70
65
  #ifdef DENKO_UART
71
66
  // Look for TX pin definitions on RP2040.
72
67
  #if defined(RP2040)
73
- #if defined(PIN_SERIAL2_TX)
68
+ #if defined(PIN_SERIAL2_TX)
74
69
  #define DENKO_UARTS 2
75
70
  #elif defined(PIN_SERIAL_1_TX)
76
71
  #define DENKO_UARTS 1
@@ -88,7 +83,15 @@
88
83
  #elif defined(ESP8266) && defined(SERIAL_PORT_HARDWARE_OPEN)
89
84
  #define DENKO_UARTS 1
90
85
 
91
- // This works for all the Atmel cores.
86
+ // Define 1 UART for UNO R4 boards. Always use Serial1.
87
+ #elif defined(_RENESAS_RA_)
88
+ #define DENKO_UARTS 1
89
+
90
+ // Define 1 UART for ATmega4809.
91
+ #elif defined(__AVR_ATmega4809__) && defined(SERIAL_PORT_HARDWARE)
92
+ #define DENKO_UARTS 1
93
+
94
+ // This works for all the Atmel cores exept ATmega4809.
92
95
  #else
93
96
  #if defined(SERIAL_PORT_HARDWARE3)
94
97
  #define DENKO_UARTS 3
@@ -107,10 +110,61 @@
107
110
  // If no high usage features (core sketch), 32 + 16.
108
111
  #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
112
  #define AUX_SIZE 48
110
- // If using IR_OUT or LED_ARRAY, and not on the ATmega168, 512 + 16.
113
+ // If using IR_OUT or LED_ARRAY, and not on the ATmega168, 768 + 16.
111
114
  #elif (defined(DENKO_IR_OUT) || defined(DENKO_LED_ARRAY)) && !defined(__AVR_ATmega168__)
112
- #define AUX_SIZE 528
115
+ #define AUX_SIZE 784
113
116
  // Default aux message size to 256 + 16 bytes.
114
117
  #else
115
118
  #define AUX_SIZE 272
116
119
  #endif
120
+
121
+ // Define 'DENKO_SERIAL_IF' as the serial interface to use.
122
+ // Uses SerialUSB (left port), which is native USB, on Arduino Due & Zero, or Serial otherwise.
123
+ // On many boards, eg. Arduino Leonardo, RP2040, ESP32-S3, Serial is native USB regardless.
124
+ #if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
125
+ #define DENKO_SERIAL_IF SerialUSB
126
+ #define DENKO_USB_CDC
127
+ // To use programming USB (right) on Due and Zero, comment 2 lines above, uncomment 1 line below.
128
+ // #define DENKO_SERIAL_IF Serial
129
+ #else
130
+ #define DENKO_SERIAL_IF Serial
131
+ #endif
132
+
133
+ // Figure out how much serial buffer we have, tell the computer, and set the ack interval.
134
+ // Best performance acknowledging at 64 bytes, or 32 if buffer is only 64.
135
+ //
136
+ // These are 256/64 regardless of whether native USB CDC or UART bridge.
137
+ #if defined(ARDUINO_ARCH_RP2040) || defined(ESP32) || defined(ESP8266) || defined(__SAM3X8E__)
138
+ #define DENKO_SERIAL_BUFFER_SIZE 256
139
+ #define DENKO_RX_ACK_INTERVAL 64
140
+ // RA4M1 has a 512 Serial buffer.
141
+ #elif defined(_RENESAS_RA_)
142
+ #define DENKO_SERIAL_BUFFER_SIZE 512
143
+ #define DENKO_RX_ACK_INTERVAL 64
144
+ // SAMD21 is 256/128 in native USB mode ONLY. Must use defaults on programming port to avoid data loss.
145
+ #elif defined(__SAMD21G18A__) && defined(DENKO_USB_CDC)
146
+ #define DENKO_SERIAL_BUFFER_SIZE 256
147
+ #define DENKO_RX_ACK_INTERVAL 128
148
+ // 32u4 is odd. Size is 63 instead of 64. Interval must be 31. 32 doesn't work at all. Off by 1 errors?
149
+ #elif defined(__AVR_ATmega32U4__)
150
+ #define DENKO_SERIAL_BUFFER_SIZE 63
151
+ #define DENKO_RX_ACK_INTERVAL 31
152
+ // Defaults
153
+ #else
154
+ #define DENKO_SERIAL_BUFFER_SIZE 64
155
+ #define DENKO_RX_ACK_INTERVAL 32
156
+ #endif
157
+
158
+ // Figure out how big the buffer is on the built-in Wire / I2C library.
159
+ #ifdef DENKO_I2C
160
+ // RP2040 and SAMD21 can do up to 256, but 255 since 1 byte for length.
161
+ #if defined(ARDUINO_ARCH_RP2040) || defined(__SAMD21G18A__)
162
+ #define DENKO_I2C_BUFFER_SIZE 255
163
+ // ESP32, ESP8266 and megaAVR can do up to 128.
164
+ #elif defined(ESP32) || defined(ESP8266) || defined(__AVR_ATmega4809__)
165
+ #define DENKO_I2C_BUFFER_SIZE 128
166
+ // Fall back to 32 bytes.
167
+ #else
168
+ #define DENKO_I2C_BUFFER_SIZE 32
169
+ #endif
170
+ #endif
@@ -3,7 +3,15 @@
3
3
  //
4
4
  #include "Denko.h"
5
5
 
6
- #ifdef EEPROM_PRESENT
6
+ #ifdef DENKO_EEPROM
7
+ #include <EEPROM.h>
8
+
9
+ // Emulate 512 bytes of EEPROM on ESP chips and the RP2040.
10
+ #if defined(ESP8266) || defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
11
+ #define EEPROM_EMULATED
12
+ #define EMULATED_EEPROM_LENGTH 512
13
+ #endif
14
+
7
15
  // CMD = 6
8
16
  // Read from the microcontroller's EEPROM.
9
17
  //
data/src/lib/DenkoI2C.cpp CHANGED
@@ -6,20 +6,20 @@
6
6
 
7
7
  #include <Wire.h>
8
8
 
9
- bool i2cStarted = false;
10
-
11
9
  // Only start the I2C interface if not already started.
12
10
  // Lazy initialization in case user wants to use I2C pins for something else.
13
11
  void Denko::i2cBegin() {
14
12
  if (!i2cStarted) {
15
13
  Wire.begin();
16
14
  i2cStarted = true;
15
+ i2cSetSpeed(0);
17
16
  }
18
17
  }
19
18
 
20
19
  // End the I2C interface.
21
20
  // This is mostly used as a Reset in Denko::handshake.
22
21
  void Denko::i2cEnd(){
22
+ i2cSetSpeed(0);
23
23
  // ESP8266 core does not define Wire.end()
24
24
  #ifndef ESP8266
25
25
  Wire.end();
@@ -36,6 +36,7 @@ void Denko::i2cSetSpeed(uint8_t code) {
36
36
  case 3: Wire.setClock(3400000); break;
37
37
  default: Wire.setClock(100000); break;
38
38
  }
39
+ i2cSpeed = code;
39
40
  }
40
41
 
41
42
  // CMD = 33
@@ -43,7 +44,8 @@ void Denko::i2cSetSpeed(uint8_t code) {
43
44
  void Denko::i2cSearch() {
44
45
  byte error;
45
46
  uint8_t addr;
46
- i2cBegin();
47
+ if (!i2cStarted) i2cBegin();
48
+ i2cSetSpeed(0);
47
49
  stream->print(SDA);
48
50
 
49
51
  // Only addresses from 0x08 to 0x77 are usable (8 to 127).
@@ -77,10 +79,10 @@ void Denko::i2cWrite() {
77
79
  uint8_t dataLength = (uint8_t)val;
78
80
 
79
81
  // Limit to 32 bytes.
80
- if (dataLength > 32) dataLength = 32;
82
+ if (dataLength > DENKO_I2C_BUFFER_SIZE) dataLength = DENKO_I2C_BUFFER_SIZE;
81
83
 
82
- i2cBegin();
83
- i2cSetSpeed(auxMsg[0]);
84
+ if (!i2cStarted) i2cBegin();
85
+ if (i2cSpeed != auxMsg[0]) i2cSetSpeed(auxMsg[0]);
84
86
 
85
87
  Wire.beginTransmission(address);
86
88
  Wire.write(&auxMsg[1], dataLength);
@@ -116,10 +118,10 @@ void Denko::i2cRead() {
116
118
  uint8_t dataLength = (uint8_t)val;
117
119
 
118
120
  // Limit to 32 bytes.
119
- if (dataLength > 32) dataLength = 32;
121
+ if (dataLength > DENKO_I2C_BUFFER_SIZE) dataLength = DENKO_I2C_BUFFER_SIZE;
120
122
 
121
- i2cBegin();
122
- i2cSetSpeed(auxMsg[0]);
123
+ if (!i2cStarted) i2cBegin();
124
+ if (i2cSpeed != auxMsg[0]) i2cSetSpeed(auxMsg[0]);
123
125
 
124
126
  // Optionally write up to a 4 byte register address before reading.
125
127
  if ((auxMsg[1] > 0) && (auxMsg[1] < 5)) {
@@ -8,7 +8,7 @@
8
8
  // WS2812 / NeoPixel support using Adafruit library from:
9
9
  // https://github.com/adafruit/Adafruit_NeoPixel
10
10
  //
11
- # ifdef DENKO_LED_WS2812
11
+ #ifdef DENKO_LED_WS2812
12
12
  #include <Adafruit_NeoPixel.h>
13
13
  #endif
14
14
 
@@ -17,7 +17,7 @@
17
17
  // Write data to a WS2812 LED array. Will generalize to other types later.
18
18
  //
19
19
  // pin = Microcontroller pin connected to Data In pin of the LED array.
20
- // val = Number of RGB or RGBW LEDS (aka pixels) in the array.
20
+ // val = Number of raw pixel data bytes to expect. Max 9999.
21
21
  // auxMsg[0..3] = Reserved for future settings.
22
22
  // auxMsg[4+] = Raw pixel data, already in correct byte order (GRB, RGB, etc.).
23
23
  //
@@ -27,18 +27,12 @@ void Denko::showLEDArray() {
27
27
  ledArray.begin();
28
28
 
29
29
  // Copy LED data into the pixel buffer.
30
- // NOTE: val * 3 will have to change to val * 4 for RGBW leds.
31
- memcpy(ledArray.getPixels(), &auxMsg[4], val * 3);
30
+ memcpy(ledArray.getPixels(), &auxMsg[4], val);
32
31
 
33
- // I have NO idea what causes the first green LED to stay stuck on.
34
- // A small delay here seems like a consistent fix. ESP32 doesn't need it.
35
- // AVR can get away with 32us, but others need 64.
36
- #if defined(ESP8266) || defined(__SAMD21G18A__) || defined(__SAM3X8E__)
32
+ // ATmega4809 still needs this delay to avoid corrupt data. Not sure why.
33
+ #if defined(__AVR_ATmega4809__)
37
34
  delayMicroseconds(64);
38
35
  #endif
39
- #ifdef __AVR__
40
- delayMicroseconds(32);
41
- #endif
42
36
 
43
37
  // Write the pixel buffer to the array.
44
38
  ledArray.show();
@@ -10,7 +10,7 @@ class AnalogIOInputTest < Minitest::Test
10
10
  end
11
11
 
12
12
  def test__read
13
- mock = MiniTest::Mock.new.expect :call, nil, [14, nil, nil, nil]
13
+ mock = Minitest::Mock.new.expect :call, nil, [14, nil, nil, nil]
14
14
  board.stub(:analog_read, mock) do
15
15
  part._read
16
16
  end
@@ -18,7 +18,7 @@ class AnalogIOInputTest < Minitest::Test
18
18
  end
19
19
 
20
20
  def test__listen
21
- mock = MiniTest::Mock.new
21
+ mock = Minitest::Mock.new
22
22
  mock.expect :call, nil, [14, 16]
23
23
  mock.expect :call, nil, [14, 32]
24
24
  board.stub(:analog_listen, mock) do
@@ -29,7 +29,7 @@ class AnalogIOInputTest < Minitest::Test
29
29
  end
30
30
 
31
31
  def test__stop_listen
32
- mock = MiniTest::Mock.new.expect :call, nil, [14]
32
+ mock = Minitest::Mock.new.expect :call, nil, [14]
33
33
  board.stub(:stop_listener, mock) do
34
34
  part._stop_listener
35
35
  end
@@ -14,7 +14,7 @@ class AnalogIOOutputTest < Minitest::Test
14
14
  end
15
15
 
16
16
  def test_dac_write
17
- mock = MiniTest::Mock.new.expect :call, nil, [14, 128]
17
+ mock = Minitest::Mock.new.expect :call, nil, [14, 128]
18
18
 
19
19
  board.stub(:dac_write, mock) do
20
20
  part.write 128
@@ -1,6 +1,6 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- class AnalogIOPotentiometerTest < MiniTest::Test
3
+ class AnalogIOPotentiometerTest < Minitest::Test
4
4
  def board
5
5
  @board ||= BoardMock.new
6
6
  end
@@ -10,7 +10,7 @@ class AnalogIOPotentiometerTest < MiniTest::Test
10
10
  end
11
11
 
12
12
  def test_setup
13
- mock = MiniTest::Mock.new.expect(:call, nil, [14,8])
13
+ mock = Minitest::Mock.new.expect(:call, nil, [14,8])
14
14
  board.stub(:analog_listen, mock) do
15
15
  part
16
16
  end
@@ -33,7 +33,7 @@ class BusPeripheralAddressedTest < Minitest::Test
33
33
  end
34
34
 
35
35
  def test_can_use_bus_atomically
36
- mock = MiniTest::Mock.new
36
+ mock = Minitest::Mock.new
37
37
  1.times {mock.expect(:call, nil)}
38
38
 
39
39
  bus.mutex.stub(:synchronize, mock) do
@@ -28,7 +28,7 @@ class BusPeripheralTest < Minitest::Test
28
28
  end
29
29
 
30
30
  def test_can_use_bus_atomically
31
- mock = MiniTest::Mock.new
31
+ mock = Minitest::Mock.new
32
32
  1.times {mock.expect(:call, nil)}
33
33
 
34
34
  bus.mutex.stub(:synchronize, mock) do
@@ -29,7 +29,7 @@ class CallbacksTest < Minitest::Test
29
29
 
30
30
  def test_callback_mutex
31
31
  callback = Proc.new{}
32
- mock = MiniTest::Mock.new
32
+ mock = Minitest::Mock.new
33
33
  3.times {mock.expect(:call, nil)}
34
34
 
35
35
  part.callback_mutex.stub(:synchronize, mock) do
@@ -73,8 +73,8 @@ class CallbacksTest < Minitest::Test
73
73
  end
74
74
 
75
75
  def test_update_runs_callbacks_and_removes_read_callbacks
76
- cb1 = MiniTest::Mock.new.expect :call, nil
77
- cb2 = MiniTest::Mock.new.expect :call, nil
76
+ cb1 = Minitest::Mock.new.expect :call, nil
77
+ cb2 = Minitest::Mock.new.expect :call, nil
78
78
  part.add_callback { cb1.call }
79
79
  part.add_callback(:read) { cb2.call }
80
80
  part.update("data")
@@ -84,7 +84,7 @@ class CallbacksTest < Minitest::Test
84
84
  end
85
85
 
86
86
  def test_pre_callback_filter_modifies_data
87
- cb = MiniTest::Mock.new.expect :call, nil, ["denko: value"]
87
+ cb = Minitest::Mock.new.expect :call, nil, ["denko: value"]
88
88
  part.add_callback { |x| cb.call(x) }
89
89
  part.update("value")
90
90
  cb.verify