denko 0.13.1 → 0.13.3

Sign up to get free protection for your applications and to get access to all the features.
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