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/lib/denko/board.rb CHANGED
@@ -1,42 +1,54 @@
1
1
  # Require all files in board folder relative to this file.
2
- Dir["#{Denko.root}/lib/denko/board/*.rb"].each {|file| require file }
2
+ Dir["#{Denko.root}/lib/denko/board/*.rb"].each { |file| require file }
3
3
 
4
4
  module Denko
5
5
  class Board
6
- attr_reader :board_name, :version, :aux_limit, :eeprom_length
6
+ attr_reader :name, :version, :serial_buffer_size, :aux_limit, :eeprom_length
7
7
  attr_reader :low, :high, :analog_write_high, :analog_read_high
8
8
 
9
- def initialize(io, options={})
10
- # Connect the IO, and get the ACK.
11
- @io = io
12
- ack = io.handshake
13
- @name, @version, @aux_limit, @eeprom_length = ack.split(",")
9
+ def initialize(transport, options={})
10
+ # Shake hands
11
+ @transport = transport
12
+ ack = transport.handshake
14
13
 
15
- # Parse map, version and eeprom_legnth.
16
- @name = nil if @name.empty?
17
- @version = nil if @version.empty?
18
- @eeprom_length = @eeprom_length.to_i
14
+ # Split handshake acknowledgement into separate values.
15
+ @name, @version, @serial_buffer_size, @aux_limit, @eeprom_length, @i2c_limit = ack.split(",")
16
+
17
+ # Tell transport how much serial buffer the board has, for flow control.
18
+ @serial_buffer_size = @serial_buffer_size.to_i
19
+ raise StandardError, "no serial buffer size given in handshake" if @serial_buffer_size < 1
20
+ @transport.remote_buffer_size = @serial_buffer_size
21
+
22
+ # Load board map by name.
23
+ @name = nil if @name.empty?
24
+ load_map(@name)
19
25
 
20
26
  # Leave room for null termination of aux messages.
21
27
  @aux_limit = @aux_limit.to_i - 1
22
28
 
23
- # Load the board map.
24
- @map = load_map(@name)
29
+ # Set I2C transaction size limit. Safe minimum is 32.
30
+ # This makes I2C fail silently if board does not implement.
31
+ @i2c_limit = @i2c_limit.to_i
32
+ @i2c_limit = 32 if @i2c_limit == 0
33
+
34
+ # Remaining settings
35
+ @version = nil if @version.empty?
36
+ @eeprom_length = @eeprom_length.to_i
25
37
 
26
- # Allow the IO to call #update on the board when messages received.
27
- io.add_observer(self)
38
+ # Transport calls #update on board when data is received.
39
+ transport.add_observer(self)
28
40
 
29
41
  # Set digital and analog IO levels.
30
42
  @low = 0
31
43
  @high = 1
32
44
  self.analog_write_resolution = options[:write_bits] || 8
33
- self.analog_read_resolution = options[:read_bits] || 10
45
+ self.analog_read_resolution = options[:read_bits] || 10
34
46
  end
35
47
 
36
48
  def finish_write
37
- sleep 0.001 while @io.writing?
49
+ sleep 0.001 while @transport.writing?
38
50
  write "\n91\n"
39
- sleep 0.001 while @io.writing?
51
+ sleep 0.001 while @transport.writing?
40
52
  end
41
53
 
42
54
  def analog_write_resolution=(value)
@@ -64,7 +76,7 @@ module Denko
64
76
  alias :adc_high :analog_read_high
65
77
 
66
78
  def write(msg)
67
- @io.write(msg)
79
+ @transport.write(msg)
68
80
  end
69
81
 
70
82
  #
@@ -78,7 +90,7 @@ module Denko
78
90
  # signal is read by the TxRx, telling it to resume transmisison.
79
91
  #
80
92
  def write_and_halt(msg)
81
- @io.write(msg, true)
93
+ @transport.write(msg, true)
82
94
  end
83
95
 
84
96
  #
@@ -1,11 +1,11 @@
1
1
  module Denko
2
2
  module Connection
3
3
  class BoardUART < Base
4
- BAUD = 115200
4
+ DEFAULT_BAUD = 115200
5
5
 
6
- def initialize(uart, options={})
6
+ def initialize(uart, baud: DEFAULT_BAUD)
7
7
  @uart = uart
8
- @uart.start(options[:baud] || BAUD)
8
+ @uart.start(baud)
9
9
  end
10
10
 
11
11
  def baud
@@ -1,11 +1,19 @@
1
1
  module Denko
2
2
  module Connection
3
3
  module FlowControl
4
- BOARD_BUFFER = 63
5
4
  SLEEP_TIME = 0.001
6
5
 
6
+ # Let Board object tell us the remote buffer size after parsing handshake.
7
+ def remote_buffer_size=(size)
8
+ @transit_mutex.synchronize { @remote_buffer_size = size }
9
+ end
10
+
7
11
  def initialize(*args)
8
12
  super(*args)
13
+ # Start with minimum known buffer size. Board will update after handshake.
14
+ # WARNING: If not updated, and ack threshold on the board is > minimum,
15
+ # FlowControl will stop sending data, and appear to hang. Fix this.
16
+ @remote_buffer_size = 63
9
17
  reset_flow_control
10
18
  tx_resume
11
19
  end
@@ -93,7 +101,7 @@ module Denko
93
101
  # Keep transit mutex as short as possible, by only reserving bytes, and writing outside.
94
102
  def reserve_bytes(length)
95
103
  @transit_mutex.synchronize do
96
- available = BOARD_BUFFER - @transit_bytes
104
+ available = @remote_buffer_size - @transit_bytes
97
105
  reserved = (length > available) ? available : length
98
106
  @transit_bytes += reserved
99
107
  reserved
@@ -16,7 +16,7 @@ module Denko
16
16
  end
17
17
 
18
18
  def digital_write(value)
19
- board.digital_write(pin, value)
19
+ @board.digital_write(@pin, value)
20
20
  self.state = value
21
21
  end
22
22
 
@@ -63,7 +63,7 @@ module Denko
63
63
  end
64
64
 
65
65
  def after_initialize(options={})
66
- super(options) if defined?(super)
66
+ super(options)
67
67
 
68
68
  # Default to 16x2 display if no options given.
69
69
  @columns = options[:columns] || 16
@@ -212,7 +212,7 @@ module Denko
212
212
  send(byte, board.low)
213
213
  end
214
214
 
215
- def write(byte);
215
+ def write(byte)
216
216
  send(byte, board.high)
217
217
  end
218
218
 
@@ -229,27 +229,27 @@ module Denko
229
229
  end
230
230
 
231
231
  def write4(bits)
232
- d4.write bits[4]
233
- d5.write bits[5]
234
- d6.write bits[6]
235
- d7.write bits[7]
232
+ d4.write bits[4].to_i
233
+ d5.write bits[5].to_i
234
+ d6.write bits[6].to_i
235
+ d7.write bits[7].to_i
236
236
  pulse_enable
237
- d4.write bits[0]
238
- d5.write bits[1]
239
- d6.write bits[2]
240
- d7.write bits[3]
237
+ d4.write bits[0].to_i
238
+ d5.write bits[1].to_i
239
+ d6.write bits[2].to_i
240
+ d7.write bits[3].to_i
241
241
  pulse_enable
242
242
  end
243
243
 
244
244
  def write8(bits)
245
- d0.write bits[0]
246
- d1.write bits[1]
247
- d2.write bits[2]
248
- d3.write bits[3]
249
- d4.write bits[4]
250
- d5.write bits[5]
251
- d6.write bits[6]
252
- d7.write bits[7]
245
+ d0.write bits[0].to_i
246
+ d1.write bits[1].to_i
247
+ d2.write bits[2].to_i
248
+ d3.write bits[3].to_i
249
+ d4.write bits[4].to_i
250
+ d5.write bits[5].to_i
251
+ d6.write bits[6].to_i
252
+ d7.write bits[7].to_i
253
253
  pulse_enable
254
254
  end
255
255
 
@@ -3,6 +3,9 @@ module Denko
3
3
  class SevenSegment
4
4
  include Behaviors::MultiPin
5
5
 
6
+ ALL_OFF = [0,0,0,0,0,0,0]
7
+ BLANK = " "
8
+
6
9
  def initialize_pins(options={})
7
10
  [:a, :b, :c, :d, :e, :f, :g].each do |symbol|
8
11
  proxy_pin(symbol, DigitalIO::Output)
@@ -20,28 +23,30 @@ module Denko
20
23
  attr_reader :segments
21
24
 
22
25
  def clear
23
- segments.each do |pin|
24
- pin.low if cathode
25
- pin.high if anode
26
- end
26
+ write(BLANK)
27
27
  end
28
28
 
29
- def display(char)
30
- char = char.to_s
31
- return scroll(char) if char.length > 1
32
- off; write(char); on
29
+ def display(string)
30
+ on unless on?
31
+ string = string.to_s.upcase
32
+ (string.length > 1) ? scroll(string) : write(string)
33
33
  end
34
34
 
35
35
  def on
36
36
  anode.high if anode
37
37
  cathode.low if cathode
38
+ @on = true
38
39
  end
39
40
 
40
41
  def off
41
42
  anode.low if anode
42
43
  cathode.high if cathode
44
+ @on = false
43
45
  end
44
46
 
47
+ def on?; @on; end
48
+ def off?; !@on; end
49
+
45
50
  CHARACTERS = {
46
51
  '0' => [1,1,1,1,1,1,0],
47
52
  '1' => [0,1,1,0,0,0,0],
@@ -87,22 +92,16 @@ module Denko
87
92
  private
88
93
 
89
94
  def write(char)
90
- bits = CHARACTERS[char.to_s.upcase]
91
- unless bits
92
- clear
93
- else
94
- bits.each_with_index do |bit, index|
95
- if anode
96
- bit == 0 ? bit = 1 : bit = 0
97
- end
98
- segments[index].write(bit) unless (segments[index].state == bit)
99
- end
95
+ bits = CHARACTERS[char] || ALL_OFF
96
+ bits.each_with_index do |bit, index|
97
+ bit = 1^bit if anode
98
+ segments[index].write(bit) unless (segments[index].state == bit)
100
99
  end
101
100
  end
102
101
 
103
102
  def scroll(string)
104
103
  string.chars.each do |char|
105
- display(char)
104
+ write(char)
106
105
  sleep(0.5)
107
106
  end
108
107
  end
data/lib/denko/message.rb CHANGED
@@ -11,7 +11,7 @@ module Denko
11
11
  aux_message = aux_message.to_s
12
12
 
13
13
  # Validate aux_message before escaping characters.
14
- raise ArgumentError, 'aux_message is limited to 528 characters' if aux_message.length > 528
14
+ raise ArgumentError, 'aux_message is limited to 528 characters' if aux_message.length > 784
15
15
 
16
16
  # Escape \ and \n.
17
17
  aux_message = aux_message.gsub("\\","\\\\\\\\").gsub("\n", "\\\n")
@@ -57,7 +57,7 @@ module Denko
57
57
  message = "#{command}#{message}\n"
58
58
  end
59
59
 
60
- def self.pack(type, data, options={})
60
+ def self.pack(type, data, min: nil, max: nil)
61
61
  # Always pack as little endian.
62
62
  template = case type
63
63
  when :uint64 then 'Q<*'
@@ -70,20 +70,12 @@ module Denko
70
70
  # Can pass a single integer to get packed if we always [] then flatten.
71
71
  str = [data].flatten.pack(template)
72
72
 
73
- # Pad right with null bytes if asked.
74
- if options[:pad] && options[:pad] > str.length
75
- (options[:pad] - str.length).times do
76
- str = str + "\x00"
77
- end
78
- end
79
-
80
- if options[:min] && str.length < options[:min]
81
- raise ArgumentError, "too few bytes given (expected at least #{options[:min]})"
73
+ # Enforce min and max.
74
+ if min && str.length < min
75
+ raise ArgumentError, "too few bytes given (expected at least #{min})"
82
76
  end
83
-
84
- # Max should probably always be set to avoid overruning aux message RAM.
85
- if options[:max] && str.length > options[:max]
86
- raise ArgumentError, "too many bytes given (expected at most #{options[:max]})"
77
+ if max && str.length > max
78
+ raise ArgumentError, "too many bytes given (expected at most #{max})"
87
79
  end
88
80
 
89
81
  str
@@ -3,7 +3,7 @@ module Denko
3
3
  class IRTransmitter
4
4
  include Behaviors::OutputPin
5
5
 
6
- def emit(pulses=[], options={})
6
+ def emit(pulses=[], frequency: 38)
7
7
  if pulses.length > 256 || pulses.length < 1
8
8
  raise ArgumentError, 'wrong number of IR pulses (expected 1 to 256)'
9
9
  end
@@ -14,7 +14,6 @@ module Denko
14
14
  raise ArgumentError, 'pulse too long (max 65535 ms)' if pulse > 65535
15
15
  end
16
16
 
17
- frequency = options[:frequency] || 38
18
17
  board.infrared_emit(pin, frequency, pulses)
19
18
  end
20
19
  end
data/lib/denko/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Denko
2
- VERSION = "0.13.1"
2
+ VERSION = "0.13.3"
3
3
  end
@@ -12,10 +12,16 @@ PACKAGES = {
12
12
  "Denko.cpp",
13
13
  "DenkoCoreIO.cpp",
14
14
  "DenkoPulseInput.cpp",
15
- "DenkoEEPROM.cpp",
16
15
  "../../vendor/board-maps/BoardMap.h",
17
16
  ]
18
17
  },
18
+ eeprom: {
19
+ description: "Built-in EEPROM support",
20
+ directive: "DENKO_EEPROM",
21
+ files: [
22
+ "DenkoEEPROM.cpp",
23
+ ]
24
+ },
19
25
  one_wire: {
20
26
  description: "OneWire bus support",
21
27
  directive: "DENKO_ONE_WIRE",
@@ -11,14 +11,17 @@ class DenkoCLI::Generator
11
11
  mega168: [:core, :one_wire, :tone, :i2c, :spi, :servo],
12
12
 
13
13
  # Other ATmega chips do everything.
14
- # Add bit bang serial for 328p / UNO since ith as no extra hardware UART.
14
+ # Add bit bang serial for 328p / UNO since it has no extra hardware UART.
15
15
  mega: STANDARD_PACKAGES + [:uart_bb],
16
16
 
17
- # No tone or IR support on SAM3X / Due.
18
- sam3x: STANDARD_PACKAGES - [:tone, :ir_out],
17
+ # No tone, infrared or EEPROM on SAM3X / Due.
18
+ sam3x: STANDARD_PACKAGES - [:tone, :ir_out, :eeprom],
19
19
 
20
- # SAMD includes all standard packages.
21
- samd: STANDARD_PACKAGES,
20
+ # No EEPROM on SAMD / Zero.
21
+ samd: STANDARD_PACKAGES - [:eeprom],
22
+
23
+ # No IR out and WS2812 on the UNO R4. WS2812 compiles but doesn't work.
24
+ ra4m1: STANDARD_PACKAGES - [:ir_out, :led_array],
22
25
 
23
26
  # ESP8266 + ESP32 use a different IR library.
24
27
  esp8266: STANDARD_PACKAGES - [:ir_out] + [:ir_out_esp],
@@ -1,8 +1,10 @@
1
1
 
2
2
  Usage:
3
+
3
4
  denko task [options]
4
5
 
5
6
  Tasks:
7
+
6
8
  sketch SKETCH [options]
7
9
  help
8
10
  targets
@@ -12,23 +14,25 @@
12
14
  --target TARGET (default: mega. Run 'denko targets' for more info)
13
15
  --debug (default: off)
14
16
 
15
- Available sketches and sketch for each sketch:
17
+ Available sketches and options specific to each sketch:
16
18
 
17
19
  serial
18
- --baud BAUD (default: 115200)
20
+ --baud BAUD (default: 115200)
19
21
 
20
22
  ethernet
21
23
  --mac XX:XX:XX:XX:XX:XX (required)
22
24
  --ip XXX.XXX.XXX.XXX (required, no DHCP)
23
25
  --port PORT (default: 3466)
26
+ --baud BAUD (default: 115200, serial fallback)
24
27
 
25
28
  wifi
26
29
  --ssid SSID (required)
27
30
  --password PASSWORD (required)
28
31
  --port PORT (default: 3466)
32
+ --baud BAUD (default: 115200, serial fallback)
29
33
 
30
34
  Examples:
31
35
 
32
36
  denko sketch ethernet --mac 12:34:56:78:90:12 --ip 192.168.1.2
33
- denko sketch serial --baud 57600
34
- denko sketch serial --baud 9600 -target core
37
+ denko sketch serial --baud 57600 --target esp32
38
+ denko sketch serial --baud 9600 --target core
@@ -2,17 +2,6 @@
2
2
  #include <SPI.h>
3
3
  #include <Ethernet.h>
4
4
 
5
- // Define 'serial' as the serial interface to use.
6
- // Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
7
- // On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
8
- #if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
9
- #define serial SerialUSB
10
- // Use this for Programming USB port (right) on Due and Zero.
11
- // #define serial Serial
12
- #else
13
- #define serial Serial
14
- #endif
15
-
16
5
  // Configure your MAC address, IP address, and HTTP port here.
17
6
  byte mac[] = { 0xDE, 0xAD, 0xBE, 0x30, 0x31, 0x32 };
18
7
  IPAddress ip(192,168,0,77);
@@ -31,8 +20,8 @@ void printEthernetStatus() {
31
20
 
32
21
  void setup() {
33
22
  // Wait for serial ready.
34
- serial.begin(115200);
35
- while(!serial);
23
+ DENKO_SERIAL_IF.begin(115200);
24
+ while(!DENKO_SERIAL_IF);
36
25
 
37
26
  // Explicitly disable the SD card.
38
27
  pinMode(4,OUTPUT);
@@ -41,9 +30,7 @@ void setup() {
41
30
  // Start up the network connection and server.
42
31
  Ethernet.begin(mac, ip);
43
32
  server.begin();
44
- #ifdef debug
45
- printEthernetStatus();
46
- #endif
33
+ printEthernetStatus();
47
34
 
48
35
  // Add listener callbacks for local logic.
49
36
  denko.digitalListenCallback = onDigitalListen;
@@ -51,20 +38,25 @@ void setup() {
51
38
  }
52
39
 
53
40
  void loop() {
41
+ // End connection if client disconnects.
42
+ if (client && !client.connected()) {
43
+ client.stop();
44
+ }
45
+
54
46
  // Allow one client at a time to be connected. Set it as the denko IO stream.
55
47
  if (!client){
56
48
  client = server.available();
57
- if (client) denko.stream = &client;
49
+ if (client) {
50
+ // TCP Client
51
+ denko.stream = &client;
52
+ } else {
53
+ // Serial fallback
54
+ denko.stream = &DENKO_SERIAL_IF;
55
+ }
58
56
  }
59
57
 
60
58
  // Main loop of the denko library.
61
59
  denko.run();
62
-
63
- // End the connection when client disconnects and revert to serial IO.
64
- if (client && !client.connected()){
65
- client.stop();
66
- denko.stream = &serial;
67
- }
68
60
  }
69
61
 
70
62
  // This runs every time a digital pin that denko is listening to changes value.
data/src/denko_serial.ino CHANGED
@@ -2,24 +2,13 @@
2
2
 
3
3
  Denko denko;
4
4
 
5
- // Define 'serial' as the serial interface to use.
6
- // Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
7
- // On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
8
- #if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
9
- #define serial SerialUSB
10
- // Use this for Programming USB port (right) on Due and Zero.
11
- // #define serial Serial
12
- #else
13
- #define serial Serial
14
- #endif
15
-
16
5
  void setup() {
17
6
  // Wait for serial ready.
18
- serial.begin(115200);
19
- while(!serial);
7
+ DENKO_SERIAL_IF.begin(115200);
8
+ while(!DENKO_SERIAL_IF);
20
9
 
21
10
  // Pass serial stream to denko so it can read/write.
22
- denko.stream = &serial;
11
+ denko.stream = &DENKO_SERIAL_IF;
23
12
 
24
13
  // Add listener callbacks for local logic.
25
14
  denko.digitalListenCallback = onDigitalListen;