denko 0.13.6 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +19 -18
  3. data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +19 -18
  4. data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +18 -17
  5. data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +19 -18
  6. data/.github/workflows/build_esp32.yml +19 -18
  7. data/.github/workflows/build_esp32c3.yml +58 -0
  8. data/.github/workflows/build_esp32c6.yml +59 -0
  9. data/.github/workflows/build_esp32h2.yml +58 -0
  10. data/.github/workflows/build_esp32s2.yml +59 -0
  11. data/.github/workflows/build_esp32s3.yml +59 -0
  12. data/.github/workflows/build_esp8266.yml +16 -15
  13. data/.github/workflows/build_ra4m1.yml +17 -16
  14. data/.github/workflows/build_rp2040.yml +19 -17
  15. data/.github/workflows/ruby.yml +20 -20
  16. data/CHANGELOG.md +398 -11
  17. data/DEPS_CLI.md +16 -16
  18. data/DEPS_IDE.md +39 -39
  19. data/MICROCONTROLLERS.md +103 -0
  20. data/PERIPHERALS.md +178 -0
  21. data/README.md +73 -58
  22. data/Rakefile +1 -1
  23. data/build +1 -1
  24. data/denko.gemspec +11 -3
  25. data/lib/denko/analog_io/ads1100.rb +127 -0
  26. data/lib/denko/analog_io/ads1115.rb +8 -25
  27. data/lib/denko/analog_io/ads1118.rb +12 -27
  28. data/lib/denko/analog_io/ads111x.rb +39 -21
  29. data/lib/denko/analog_io/input.rb +29 -55
  30. data/lib/denko/analog_io/input_helper.rb +42 -0
  31. data/lib/denko/analog_io/joystick.rb +87 -0
  32. data/lib/denko/analog_io/output.rb +5 -5
  33. data/lib/denko/analog_io/potentiometer.rb +3 -9
  34. data/lib/denko/analog_io.rb +22 -7
  35. data/lib/denko/behaviors/board_proxy.rb +13 -1
  36. data/lib/denko/behaviors/bus_controller.rb +3 -1
  37. data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
  38. data/lib/denko/behaviors/bus_peripheral.rb +3 -4
  39. data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
  40. data/lib/denko/behaviors/callbacks.rb +18 -14
  41. data/lib/denko/behaviors/component.rb +12 -14
  42. data/lib/denko/behaviors/input_pin.rb +14 -15
  43. data/lib/denko/behaviors/lifecycle.rb +51 -0
  44. data/lib/denko/behaviors/listener.rb +9 -3
  45. data/lib/denko/behaviors/multi_pin.rb +22 -20
  46. data/lib/denko/behaviors/output_pin.rb +9 -4
  47. data/lib/denko/behaviors/poller.rb +11 -2
  48. data/lib/denko/behaviors/reader.rb +109 -21
  49. data/lib/denko/behaviors/single_pin.rb +3 -4
  50. data/lib/denko/behaviors/state.rb +24 -13
  51. data/lib/denko/behaviors/subcomponents.rb +72 -12
  52. data/lib/denko/behaviors/threaded.rb +19 -8
  53. data/lib/denko/behaviors.rb +36 -22
  54. data/lib/denko/board/core.rb +36 -18
  55. data/lib/denko/board/eeprom.rb +1 -1
  56. data/lib/denko/board/i2c.rb +15 -15
  57. data/lib/denko/board/i2c_bit_bang.rb +53 -0
  58. data/lib/denko/board/infrared.rb +6 -6
  59. data/lib/denko/board/led_array.rb +6 -5
  60. data/lib/denko/board/map.rb +6 -2
  61. data/lib/denko/board/one_wire.rb +3 -3
  62. data/lib/denko/board/spi.rb +35 -30
  63. data/lib/denko/board/spi_bit_bang.rb +14 -15
  64. data/lib/denko/board.rb +41 -36
  65. data/lib/denko/connection/binary_echo.rb +17 -0
  66. data/lib/denko/connection/flow_control.rb +12 -16
  67. data/lib/denko/connection/handshake.rb +2 -0
  68. data/lib/denko/connection/serial.rb +5 -5
  69. data/lib/denko/digital_io/button.rb +4 -0
  70. data/lib/denko/digital_io/c_bit_bang.rb +15 -0
  71. data/lib/denko/digital_io/input.rb +4 -5
  72. data/lib/denko/digital_io/output.rb +19 -10
  73. data/lib/denko/digital_io/pcf8574.rb +114 -0
  74. data/lib/denko/digital_io/relay.rb +2 -0
  75. data/lib/denko/digital_io/rotary_encoder.rb +83 -61
  76. data/lib/denko/digital_io.rb +24 -5
  77. data/lib/denko/display/canvas.rb +350 -157
  78. data/lib/denko/display/font/bmp_5x7.rb +142 -0
  79. data/lib/denko/display/font/bmp_6x8.rb +142 -0
  80. data/lib/denko/display/font/bmp_8x16.rb +141 -0
  81. data/lib/denko/display/font.rb +22 -0
  82. data/lib/denko/display/hd44780.rb +152 -105
  83. data/lib/denko/display/il0373.rb +186 -0
  84. data/lib/denko/display/mono_oled.rb +193 -0
  85. data/lib/denko/display/pcd8544.rb +154 -0
  86. data/lib/denko/display/pixel_common.rb +83 -0
  87. data/lib/denko/display/sh1106.rb +38 -0
  88. data/lib/denko/display/sh1107.rb +10 -0
  89. data/lib/denko/display/spi_common.rb +35 -0
  90. data/lib/denko/display/spi_epaper_common.rb +30 -0
  91. data/lib/denko/display/ssd1306.rb +6 -168
  92. data/lib/denko/display/ssd1680.rb +14 -0
  93. data/lib/denko/display/ssd1681.rb +8 -0
  94. data/lib/denko/display/ssd168x.rb +227 -0
  95. data/lib/denko/display/st7302.rb +207 -0
  96. data/lib/denko/display/st7565.rb +166 -0
  97. data/lib/denko/display.rb +40 -3
  98. data/lib/denko/eeprom/at24c.rb +67 -0
  99. data/lib/denko/eeprom/board.rb +69 -0
  100. data/lib/denko/eeprom.rb +15 -1
  101. data/lib/denko/helpers/engine_check.rb +13 -0
  102. data/lib/denko/helpers/mutex_stub.rb +13 -0
  103. data/lib/denko/helpers.rb +6 -0
  104. data/lib/denko/i2c/bit_bang.rb +32 -0
  105. data/lib/denko/i2c/bus.rb +8 -36
  106. data/lib/denko/i2c/bus_common.rb +50 -0
  107. data/lib/denko/i2c/peripheral.rb +32 -19
  108. data/lib/denko/i2c.rb +17 -2
  109. data/lib/denko/led/apa102.rb +42 -30
  110. data/lib/denko/led/base.rb +13 -2
  111. data/lib/denko/led/rgb.rb +18 -14
  112. data/lib/denko/led/seven_segment.rb +24 -9
  113. data/lib/denko/led/ws2812.rb +10 -7
  114. data/lib/denko/led.rb +17 -8
  115. data/lib/denko/message.rb +5 -0
  116. data/lib/denko/motor/{stepper.rb → a3967.rb} +12 -15
  117. data/lib/denko/motor/l298.rb +11 -10
  118. data/lib/denko/motor/servo.rb +37 -15
  119. data/lib/denko/motor.rb +16 -3
  120. data/lib/denko/one_wire/bus.rb +31 -23
  121. data/lib/denko/one_wire/bus_enumerator.rb +25 -14
  122. data/lib/denko/one_wire/helper.rb +4 -2
  123. data/lib/denko/one_wire/peripheral.rb +0 -3
  124. data/lib/denko/one_wire.rb +18 -5
  125. data/lib/denko/pulse_io/buzzer.rb +11 -9
  126. data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +6 -5
  127. data/lib/denko/pulse_io/pwm_output.rb +94 -15
  128. data/lib/denko/pulse_io.rb +17 -3
  129. data/lib/denko/rtc/ds3231.rb +13 -14
  130. data/lib/denko/rtc.rb +14 -1
  131. data/lib/denko/sensor/aht.rb +35 -38
  132. data/lib/denko/sensor/bme280.rb +76 -92
  133. data/lib/denko/sensor/bmp180.rb +46 -48
  134. data/lib/denko/sensor/dht.rb +34 -7
  135. data/lib/denko/sensor/ds18b20.rb +41 -34
  136. data/lib/denko/sensor/hcsr04.rb +7 -5
  137. data/lib/denko/sensor/hdc1080.rb +174 -0
  138. data/lib/denko/sensor/helper.rb +37 -0
  139. data/lib/denko/sensor/htu21d.rb +57 -57
  140. data/lib/denko/sensor/htu31d.rb +36 -36
  141. data/lib/denko/sensor/jsnsr04t.rb +49 -0
  142. data/lib/denko/sensor/qmp6988.rb +34 -48
  143. data/lib/denko/sensor/rcwl9620.rb +3 -5
  144. data/lib/denko/sensor/sht3x.rb +27 -24
  145. data/lib/denko/sensor/sht4x.rb +125 -0
  146. data/lib/denko/sensor/vl53l0x.rb +58 -0
  147. data/lib/denko/sensor.rb +33 -16
  148. data/lib/denko/spi/base_register.rb +25 -21
  149. data/lib/denko/spi/bit_bang.rb +17 -51
  150. data/lib/denko/spi/bus.rb +15 -29
  151. data/lib/denko/spi/bus_common.rb +33 -0
  152. data/lib/denko/spi/input_register.rb +37 -31
  153. data/lib/denko/spi/output_register.rb +33 -39
  154. data/lib/denko/spi/peripheral.rb +81 -14
  155. data/lib/denko/spi.rb +21 -6
  156. data/lib/denko/uart/bit_bang.rb +7 -30
  157. data/lib/denko/uart/common.rb +33 -0
  158. data/lib/denko/uart/hardware.rb +10 -34
  159. data/lib/denko/uart.rb +16 -2
  160. data/lib/denko/version.rb +1 -1
  161. data/lib/denko.rb +23 -16
  162. data/lib/denko_cli/generator.rb +2 -2
  163. data/lib/denko_cli/packages.rb +8 -10
  164. data/lib/denko_cli/targets.rb +13 -13
  165. data/lib/denko_cli/targets.txt +23 -24
  166. data/lib/denko_cli/usage.txt +1 -1
  167. data/src/denko_ethernet.ino +0 -14
  168. data/src/denko_serial.ino +0 -14
  169. data/src/denko_wifi.ino +6 -15
  170. data/src/lib/Denko.cpp +65 -16
  171. data/src/lib/Denko.h +46 -30
  172. data/src/lib/DenkoCoreIO.cpp +57 -102
  173. data/src/lib/DenkoDefines.h +32 -46
  174. data/src/lib/DenkoI2C.cpp +54 -45
  175. data/src/lib/DenkoI2CBB.cpp +238 -0
  176. data/src/lib/DenkoIROut.cpp +12 -7
  177. data/src/lib/DenkoLEDArray.cpp +29 -13
  178. data/src/lib/DenkoSPI.cpp +36 -33
  179. data/src/lib/DenkoSPIBB.cpp +19 -20
  180. data/target.yml +37 -2
  181. data/test/analog_io/input_test.rb +1 -1
  182. data/test/analog_io/potentiometer_test.rb +12 -12
  183. data/test/behaviors/board_proxy_test.rb +1 -1
  184. data/test/behaviors/bus_peripheral_test.rb +4 -4
  185. data/test/behaviors/callbacks_test.rb +28 -10
  186. data/test/behaviors/component_test.rb +32 -14
  187. data/test/behaviors/input_pin_test.rb +14 -9
  188. data/test/behaviors/multi_pin_test.rb +14 -4
  189. data/test/behaviors/output_pin_test.rb +11 -8
  190. data/test/behaviors/poller_test.rb +1 -0
  191. data/test/behaviors/reader_test.rb +3 -2
  192. data/test/behaviors/subcomponents_test.rb +22 -2
  193. data/test/board/board_test.rb +9 -9
  194. data/test/board/core_test.rb +15 -11
  195. data/test/board/i2c_test.rb +39 -33
  196. data/test/board/infrared_test.rb +1 -1
  197. data/test/board/message_test.rb +17 -11
  198. data/test/board/one_wire_test.rb +25 -14
  199. data/test/board/spi_test.rb +45 -29
  200. data/test/digital_io/button_test.rb +15 -0
  201. data/test/digital_io/input_test.rb +2 -2
  202. data/test/digital_io/relay_test.rb +18 -0
  203. data/test/digital_io/rotary_encoder_test.rb +80 -60
  204. data/test/display/canvas_test.rb +306 -0
  205. data/test/display/hd44780_test.rb +34 -7
  206. data/test/eeprom/board_test.rb +45 -0
  207. data/test/helpers/mruby_minitest.rb +95 -0
  208. data/test/helpers/mruby_runner.rb +13 -0
  209. data/test/i2c/bus_test.rb +108 -29
  210. data/test/i2c/peripheral_test.rb +38 -19
  211. data/test/led/apa102_test.rb +24 -0
  212. data/test/led/base_test.rb +2 -1
  213. data/test/led/rgb_test.rb +9 -9
  214. data/test/led/seven_segment_test.rb +7 -7
  215. data/test/motor/{stepper_test.rb → a3967_test.rb} +4 -4
  216. data/test/motor/servo_test.rb +1 -1
  217. data/test/one_wire/bus_enumerator_test.rb +1 -1
  218. data/test/one_wire/bus_test.rb +43 -35
  219. data/test/one_wire/peripheral_test.rb +5 -17
  220. data/test/pulse_io/buzzer_test.rb +7 -4
  221. data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +15 -10
  222. data/test/pulse_io/pwm_output_test.rb +74 -18
  223. data/test/rtc/ds3231_test.rb +13 -14
  224. data/test/sensor/dht_test.rb +12 -12
  225. data/test/sensor/ds18b20_test.rb +4 -8
  226. data/test/spi/bitbang_test.rb +27 -0
  227. data/test/spi/bus_test.rb +24 -34
  228. data/test/spi/input_register_test.rb +17 -17
  229. data/test/spi/output_register_test.rb +10 -28
  230. data/test/spi/peripheral_test.rb +73 -0
  231. data/test/test_helper.rb +44 -121
  232. data/vendor/board-maps/BoardMap.h +678 -54
  233. data/vendor/board-maps/lib/header_parser.rb +12 -2
  234. data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +2 -2
  235. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
  236. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +1 -1
  237. data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
  238. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +1 -0
  239. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +1 -0
  240. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +1 -0
  241. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +1 -0
  242. data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +1 -0
  243. data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
  244. data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
  245. data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
  246. data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
  247. data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
  248. data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
  249. data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
  250. data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
  251. data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
  252. data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
  253. data/vendor/board-maps/yaml/BLING.yml +25 -0
  254. data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
  255. data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -1
  256. data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
  257. data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
  258. data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
  259. data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
  260. data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
  261. data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
  262. data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
  263. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
  264. data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
  265. data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
  266. data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
  267. data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
  268. data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
  269. data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
  270. data/vendor/board-maps/yaml/ESP32C6_DEV.yml +14 -0
  271. data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
  272. data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
  273. data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +14 -0
  274. data/vendor/board-maps/yaml/ESP32H2_DEV.yml +12 -0
  275. data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +12 -0
  276. data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
  277. data/vendor/board-maps/yaml/{RMP.yml → ESP32S2_DEVKIT_LIPO.yml} +1 -1
  278. data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +43 -0
  279. data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
  280. data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
  281. data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
  282. data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
  283. data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
  284. data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
  285. data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
  286. data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
  287. data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +13 -0
  288. data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
  289. data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
  290. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
  291. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
  292. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
  293. data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
  294. data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
  295. data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
  296. data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
  297. data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
  298. data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
  299. data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
  300. data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
  301. data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
  302. data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
  303. data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +1 -1
  304. data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
  305. data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
  306. data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
  307. data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
  308. data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
  309. data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
  310. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
  311. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
  312. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
  313. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
  314. data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
  315. data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
  316. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
  317. data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +13 -0
  318. data/vendor/board-maps/yaml/LOLIN_S3.yml +1 -0
  319. data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
  320. data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -2
  321. data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
  322. data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
  323. data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
  324. data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
  325. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -2
  326. data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
  327. data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
  328. data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
  329. data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
  330. data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
  331. data/vendor/board-maps/yaml/{M5Stick_C.yml → M5STACK_STICKC.yml} +0 -1
  332. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
  333. data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
  334. data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
  335. data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
  336. data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
  337. data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -1
  338. data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
  339. data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
  340. data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
  341. data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
  342. data/vendor/board-maps/yaml/NEBULAS3.yml +0 -1
  343. data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
  344. data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
  345. data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
  346. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
  347. data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
  348. data/vendor/board-maps/yaml/OMGS3.yml +25 -0
  349. data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
  350. data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
  351. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
  352. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
  353. data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
  354. data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
  355. data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -1
  356. data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
  357. data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
  358. data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
  359. data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
  360. data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
  361. data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
  362. data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
  363. data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
  364. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
  365. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +14 -0
  366. data/vendor/board-maps/yaml/TINYC6.yml +25 -0
  367. data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
  368. data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
  369. data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
  370. data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
  371. data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
  372. data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
  373. data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
  374. data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
  375. data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
  376. data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
  377. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
  378. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
  379. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
  380. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
  381. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
  382. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
  383. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
  384. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
  385. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
  386. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
  387. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
  388. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
  389. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
  390. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
  391. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
  392. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
  393. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
  394. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
  395. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
  396. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
  397. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
  398. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
  399. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
  400. data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
  401. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +1 -0
  402. data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
  403. data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +1 -0
  404. data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
  405. data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
  406. data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
  407. data/vendor/board-maps/yaml/WiFiduinoV2.yml +1 -0
  408. data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -1
  409. data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
  410. data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
  411. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
  412. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
  413. data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
  414. data/vendor/board-maps/yaml/mercury.yml +20 -0
  415. data/vendor/board-maps/yaml/unphone9.yml +8 -0
  416. metadata +259 -105
  417. data/.vscode/settings.json +0 -5
  418. data/.vscode/tasks.json +0 -20
  419. data/HARDWARE.md +0 -264
  420. data/benchmarks/i2c_ssd1306_refresh.rb +0 -84
  421. data/examples/advanced/m5_env.rb +0 -48
  422. data/examples/advanced/rotary_encoder_mac_volume.rb +0 -48
  423. data/examples/advanced/ssd1306_time_temp_rh.rb +0 -48
  424. data/examples/analog_io/ads1115.rb +0 -57
  425. data/examples/analog_io/ads1118.rb +0 -73
  426. data/examples/analog_io/dac_loopback.rb +0 -34
  427. data/examples/analog_io/input.rb +0 -55
  428. data/examples/connection/tcp.rb +0 -34
  429. data/examples/digital_io/button.rb +0 -13
  430. data/examples/digital_io/rotary_encoder.rb +0 -26
  431. data/examples/display/hd44780.png +0 -0
  432. data/examples/display/hd44780.rb +0 -39
  433. data/examples/display/ssd1306.rb +0 -40
  434. data/examples/display/ssd1306_s2_pico.rb +0 -29
  435. data/examples/eeprom/built_in.rb +0 -32
  436. data/examples/i2c/search.rb +0 -55
  437. data/examples/led/apa102_bounce.rb +0 -33
  438. data/examples/led/apa102_breathe.rb +0 -45
  439. data/examples/led/builtin_blink.rb +0 -12
  440. data/examples/led/seven_segment_char_echo.rb +0 -15
  441. data/examples/led/ws2812_bounce.rb +0 -32
  442. data/examples/led/ws2812_builtin_blink.rb +0 -21
  443. data/examples/motor/l298.rb +0 -43
  444. data/examples/motor/servo.rb +0 -16
  445. data/examples/motor/stepper.png +0 -0
  446. data/examples/motor/stepper.rb +0 -43
  447. data/examples/pulse_io/buzzer.rb +0 -30
  448. data/examples/pulse_io/ir_transmitter.rb +0 -55
  449. data/examples/rtc/ds3231.rb +0 -48
  450. data/examples/sensor/aht10.rb +0 -19
  451. data/examples/sensor/aht20.rb +0 -19
  452. data/examples/sensor/bme280.rb +0 -38
  453. data/examples/sensor/bmp180.rb +0 -22
  454. data/examples/sensor/dht.rb +0 -24
  455. data/examples/sensor/ds18b20.rb +0 -58
  456. data/examples/sensor/generic_pir.rb +0 -25
  457. data/examples/sensor/hcsr04.rb +0 -14
  458. data/examples/sensor/htu21d.rb +0 -54
  459. data/examples/sensor/htu31d.rb +0 -35
  460. data/examples/sensor/neat_tph_readings.rb +0 -26
  461. data/examples/sensor/qmp6988.rb +0 -53
  462. data/examples/sensor/rcwl9620.rb +0 -15
  463. data/examples/sensor/sht3x.rb +0 -34
  464. data/examples/spi/input_register.rb +0 -50
  465. data/examples/spi/output_register.rb +0 -49
  466. data/examples/spi/ssd_through_register.rb +0 -40
  467. data/examples/spi/two_registers.rb +0 -46
  468. data/examples/uart/bit_bang_read.rb +0 -16
  469. data/examples/uart/bit_bang_write.rb +0 -16
  470. data/examples/uart/board_passthrough.rb +0 -34
  471. data/examples/uart/hardware_loopback.rb +0 -16
  472. data/lib/denko/analog_io/sensor.rb +0 -6
  473. data/lib/denko/eeprom/built_in.rb +0 -69
  474. data/lib/denko/fonts.rb +0 -106
  475. data/lib/denko/sensor/virtual.rb +0 -42
  476. data/src/lib/DenkoIROutESP.cpp +0 -26
  477. data/test/eeprom/built_in_test.rb +0 -61
  478. data/tutorial/01-led/led.fzz +0 -0
  479. data/tutorial/01-led/led.pdf +0 -0
  480. data/tutorial/01-led/led.rb +0 -73
  481. data/tutorial/02-button/button.fzz +0 -0
  482. data/tutorial/02-button/button.pdf +0 -0
  483. data/tutorial/02-button/button.rb +0 -64
  484. data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
  485. data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
  486. data/tutorial/03-potentiometer/potentiometer.rb +0 -62
  487. data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
  488. data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
  489. data/tutorial/04-pwm_led/pwm_led.rb +0 -66
  490. data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
  491. data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
  492. data/tutorial/05-rgb_led/rgb_led.rb +0 -58
  493. data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
  494. data/vendor/board-maps/yaml/STAMP_S3.yml +0 -8
  495. /data/vendor/board-maps/yaml/{BRIDGETEK_IDM2040-7A.yml → BRIDGETEK_IDM2040_43A.yml} +0 -0
  496. /data/vendor/board-maps/yaml/{heltec_wifi_32_lora_V3.yml → HELTEC_WIRELESS_STICK_V3.yml} +0 -0
  497. /data/vendor/board-maps/yaml/{M5Stack_Core_ESP32.yml → M5STACK_CORE.yml} +0 -0
  498. /data/vendor/board-maps/yaml/{M5Stamp_Pico.yml → M5STACK_STAMP_PICO.yml} +0 -0
  499. /data/vendor/board-maps/yaml/{M5Stack-Timer-CAM.yml → M5STACK_TIMER_CAM.yml} +0 -0
@@ -2,6 +2,9 @@ require_relative '../test_helper'
2
2
 
3
3
  class I2CPeripheralBase
4
4
  include Denko::I2C::Peripheral
5
+ I2C_ADDRESS = 0x30
6
+ I2C_FREQUENCY = 400_000
7
+ I2C_REPEATED_START = true
5
8
  end
6
9
 
7
10
  class I2CPeripheralTest < Minitest::Test
@@ -10,41 +13,57 @@ class I2CPeripheralTest < Minitest::Test
10
13
  end
11
14
 
12
15
  def bus
13
- return @bus if @bus
14
- @bus = Denko::I2C::Bus.new(board: board, pin:5)
15
- @bus
16
+ @bus ||= Denko::I2C::Bus.new(board: board, pin:5)
16
17
  end
17
-
18
+
18
19
  def part
19
- @part ||= I2CPeripheralBase.new(bus: bus, i2c_address: 0x30)
20
+ @part ||= I2CPeripheralBase.new(bus: bus)
21
+ end
22
+
23
+ def test_address
24
+ assert_equal 0x30, part.address
25
+ part2 = I2CPeripheralBase.new(bus: bus, address: 0x31)
26
+ assert_equal 0x31, part2.address
20
27
  end
21
-
28
+
22
29
  def test_write_and_repeated_start
23
- part.i2c_repeated_start = true
24
-
25
- mock = Minitest::Mock.new.expect :call, nil, [0x30, [1,2], 100000, true]
30
+ assert_equal true, part.i2c_repeated_start
31
+ mock = Minitest::Mock.new.expect :call, nil, [0x30, [1,2], 400_000, true]
32
+ bus.stub(:write, mock) do
33
+ part.i2c_write [1,2]
34
+ end
35
+
36
+ part.i2c_repeated_start = false
37
+ assert_equal false, part.i2c_repeated_start
38
+ mock = Minitest::Mock.new.expect :call, nil, [0x30, [1,2], 400_000, false]
26
39
  bus.stub(:write, mock) do
27
40
  part.i2c_write [1,2]
28
41
  end
29
42
  end
30
43
 
31
44
  def test_frequency
32
- part.i2c_frequency = 400000
33
-
34
- mock = Minitest::Mock.new.expect :call, nil, [0x30, [1,2], 400000, false]
45
+ assert_equal 400_000, part.i2c_frequency
46
+ mock = Minitest::Mock.new.expect :call, nil, [0x30, [1,2], 400_000, true]
47
+ bus.stub(:write, mock) do
48
+ part.i2c_write [1,2]
49
+ end
50
+
51
+ part.i2c_frequency = 100_000
52
+ assert_equal 100_000, part.i2c_frequency
53
+ mock = Minitest::Mock.new.expect :call, nil, [0x30, [1,2], 100_000, true]
35
54
  bus.stub(:write, mock) do
36
55
  part.i2c_write [1,2]
37
56
  end
38
57
  end
39
-
40
- def test__read_and_repeated_start
58
+
59
+ def test_read_and_repeated_start
41
60
  part.i2c_repeated_start = true
42
-
43
- board.inject_read_for_component(part, 5, "48-127,127,127,127,127,127")
44
-
45
- mock = Minitest::Mock.new.expect :call, nil, [0x30, 0x03, 6, 100000, true]
61
+
62
+ board.inject_component_update(part, "48-127,127,127,127,127,127")
63
+
64
+ mock = Minitest::Mock.new.expect :call, nil, [0x30, 0x03, 6, 400_000, true]
46
65
  bus.stub(:read, mock) do
47
- part.i2c_read(0x03, 6)
66
+ part.i2c_read(6, register: 0x03)
48
67
  end
49
68
  end
50
69
  end
@@ -0,0 +1,24 @@
1
+ require_relative '../test_helper'
2
+
3
+ class APA102Test < Minitest::Test
4
+ def board
5
+ @board ||= BoardMock.new
6
+ end
7
+
8
+ def bus
9
+ @bus ||= Denko::SPI::Bus.new(board: board)
10
+ end
11
+
12
+ def options
13
+ { bus: bus }
14
+ end
15
+
16
+ def part
17
+ @part ||= Denko::LED::APA102.new(options)
18
+ end
19
+
20
+ def test_added_to_bus_components
21
+ part
22
+ assert bus.components.include?(part)
23
+ end
24
+ end
@@ -14,11 +14,12 @@ class BaseLEDTest < Minitest::Test
14
14
  assert_equal Denko::LED::Base, part.class
15
15
  end
16
16
 
17
- def test_blink_runs_in_thread
17
+ def test_blink_runs_in_thread_and_sets_ivar
18
18
  mock = Minitest::Mock.new.expect :call, nil
19
19
  part.stub(:threaded_loop, mock) do
20
20
  part.blink(0.5)
21
21
  end
22
22
  mock.verify
23
+ assert_equal 0.5, part.blink_interval
23
24
  end
24
25
  end
data/test/led/rgb_test.rb CHANGED
@@ -20,14 +20,14 @@ class RGBLEDTest < Minitest::Test
20
20
  end
21
21
 
22
22
  def test_write
23
- red_mock = Minitest::Mock.new.expect :write, nil, [0]
24
- green_mock = Minitest::Mock.new.expect :write, nil, [128]
25
- blue_mock = Minitest::Mock.new.expect :write, nil, [0]
23
+ red_mock = Minitest::Mock.new.expect :duty=, nil, [0]
24
+ green_mock = Minitest::Mock.new.expect :duty=, nil, [50]
25
+ blue_mock = Minitest::Mock.new.expect :duty=, nil, [0]
26
26
 
27
27
  part.stub(:red, red_mock) do
28
28
  part.stub(:green, green_mock) do
29
29
  part.stub(:blue, blue_mock) do
30
- part.write [0, 128, 0]
30
+ part.write(0, 50, 0)
31
31
  end
32
32
  end
33
33
  end
@@ -36,10 +36,10 @@ class RGBLEDTest < Minitest::Test
36
36
  blue_mock.verify
37
37
  end
38
38
 
39
- def test_color_array
40
- mock = Minitest::Mock.new.expect :call, nil, [[128,0,0]]
39
+ def test_raw_rgb_values
40
+ mock = Minitest::Mock.new.expect :call, nil, [128,0,0]
41
41
  part.stub(:write, mock) do
42
- part.color = [128,0,0]
42
+ part.write(128,0,0)
43
43
  end
44
44
  mock.verify
45
45
  end
@@ -49,8 +49,8 @@ class RGBLEDTest < Minitest::Test
49
49
 
50
50
  mock = Minitest::Mock.new
51
51
  colors.each_value do |color|
52
- mock.expect :call, nil, [color]
53
- mock.expect :call, nil, [color]
52
+ mock.expect :call, nil, [*color]
53
+ mock.expect :call, nil, [*color]
54
54
  end
55
55
 
56
56
  part.stub(:write, mock) do
@@ -87,13 +87,13 @@ class SevenSegmentLEDTest < Minitest::Test
87
87
  part.segments.each do
88
88
  mocks << Minitest::Mock.new.expect(:call, nil, [1])
89
89
  end
90
- part.segments[0].stub(:write, mocks[0]) do
91
- part.segments[1].stub(:write, mocks[1]) do
92
- part.segments[2].stub(:write, mocks[2]) do
93
- part.segments[3].stub(:write, mocks[3]) do
94
- part.segments[4].stub(:write, mocks[4]) do
95
- part.segments[5].stub(:write, mocks[5]) do
96
- part.segments[6].stub(:write, mocks[6]) do
90
+ part.segments[0].stub(:digital_write, mocks[0]) do
91
+ part.segments[1].stub(:digital_write, mocks[1]) do
92
+ part.segments[2].stub(:digital_write, mocks[2]) do
93
+ part.segments[3].stub(:digital_write, mocks[3]) do
94
+ part.segments[4].stub(:digital_write, mocks[4]) do
95
+ part.segments[5].stub(:digital_write, mocks[5]) do
96
+ part.segments[6].stub(:digital_write, mocks[6]) do
97
97
  part.display('+')
98
98
  end
99
99
  end
@@ -1,12 +1,12 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- class StepperMotorTest < Minitest::Test
3
+ class A3967MotorTest < Minitest::Test
4
4
  def board
5
5
  @board ||= BoardMock.new
6
6
  end
7
7
 
8
8
  def part
9
- @part ||= Denko::Motor::Stepper.new board: board,
9
+ @part ||= Denko::Motor::A3967.new board: board,
10
10
  pins: {step: 9, direction: 10}
11
11
  end
12
12
 
@@ -32,7 +32,7 @@ class StepperMotorTest < Minitest::Test
32
32
  step_mock.verify
33
33
  end
34
34
 
35
- def test_step_cc
35
+ def test_step_ccw
36
36
  dir_mock = Minitest::Mock.new
37
37
  dir_mock.expect :high?, false
38
38
  dir_mock.expect :high, nil
@@ -42,7 +42,7 @@ class StepperMotorTest < Minitest::Test
42
42
 
43
43
  part.stub(:direction, dir_mock) do
44
44
  part.stub(:step, step_mock) do
45
- part.step_cc
45
+ part.step_ccw
46
46
  end
47
47
  end
48
48
  dir_mock.verify
@@ -10,7 +10,7 @@ class ServoMotorTest < Minitest::Test
10
10
  end
11
11
 
12
12
  def test_toggle_on_initialize
13
- mock = Minitest::Mock.new.expect(:call, nil, [1, :on], min: 544, max: 2400)
13
+ mock = Minitest::Mock.new.expect(:call, nil, [1, :on], min: 500, max: 2500)
14
14
  board.stub(:servo_toggle, mock) do
15
15
  Denko::Motor::Servo.new(board: board, pin:1)
16
16
  end
@@ -65,7 +65,7 @@ class BoardSimulator
65
65
  end
66
66
 
67
67
  def search(branch_mask)
68
- output_string = ""
68
+ output_string = String.new
69
69
  (0..7).each do |i|
70
70
  addr = 0
71
71
  comp = 0
@@ -4,7 +4,7 @@ class OneWireBusTest < Minitest::Test
4
4
  def board
5
5
  @board ||= BoardMock.new
6
6
  end
7
-
7
+
8
8
  def part
9
9
  return @part if @part
10
10
  # Respond with disabled parasite power.
@@ -18,24 +18,25 @@ class OneWireBusTest < Minitest::Test
18
18
  assert bus2.parasite_power
19
19
  end
20
20
 
21
- def test_read_power_supply_locks_mutex
22
- mock = Minitest::Mock.new.expect(:call, nil)
23
- part.mutex.stub(:synchronize, mock) do
24
- part.read_power_supply
21
+ def test_read_power_supply
22
+ board.inject_component_update(part, "0")
23
+
24
+ lock_mock = Minitest::Mock.new.expect(:call, nil)
25
+ unlock_mock = Minitest::Mock.new.expect(:call, nil)
26
+
27
+ part.mutex.stub(:lock, lock_mock) do
28
+ part.mutex.stub(:unlock, unlock_mock) do
29
+ part.read_power_supply
30
+ end
25
31
  end
26
- mock.verify
27
- end
28
32
 
29
- def test_read_power_supply
30
- part
33
+ lock_mock.verify
34
+ unlock_mock.verify
35
+ assert part.parasite_power
31
36
 
32
- board.inject_read_for_component(part, 1, "1")
37
+ board.inject_component_update(part, "1")
33
38
  part.read_power_supply
34
39
  refute part.parasite_power
35
-
36
- board.inject_read_for_component(part, 1, "0")
37
- part.read_power_supply
38
- assert part.parasite_power
39
40
  end
40
41
 
41
42
  def test_read_power_supply_sends_board_commands
@@ -43,7 +44,7 @@ class OneWireBusTest < Minitest::Test
43
44
  board_mock.expect(:set_pin_mode, nil, [part.pin, :output])
44
45
  board_mock.expect(:low, 0)
45
46
  board_mock.expect(:digital_write, nil, [part.pin, 0])
46
- board_mock.expect(:one_wire_reset, nil, [part.pin, 0])
47
+ board_mock.expect(:one_wire_reset, nil, [part.pin, false])
47
48
  board_mock.expect(:one_wire_write, nil, [part.pin, false, [0xCC, 0xB4]])
48
49
 
49
50
  # Stub the parasite power response from the board.
@@ -62,28 +63,34 @@ class OneWireBusTest < Minitest::Test
62
63
  end
63
64
 
64
65
  def test_device_present_in_mutex
65
- # part.device_present calls #reset which expects a response.
66
- board.inject_read_for_component(part, 1, "1")
66
+ # part.device_present calls #reset which expects a response.
67
+ board.inject_component_update(part, "1")
68
+
69
+ lock_mock = Minitest::Mock.new.expect(:call, nil)
70
+ unlock_mock = Minitest::Mock.new.expect(:call, nil)
67
71
 
68
- mock = Minitest::Mock.new.expect(:call, nil)
69
- part.mutex.stub(:synchronize, mock) do
70
- part.device_present
72
+ part.mutex.stub(:lock, lock_mock) do
73
+ part.mutex.stub(:unlock, unlock_mock) do
74
+ part.device_present
75
+ end
71
76
  end
72
- mock.verify
77
+
78
+ lock_mock.verify
79
+ unlock_mock.verify
73
80
  end
74
81
 
75
82
  def test_set_device_present
76
83
  mock = Minitest::Mock.new
77
- mock.expect(:call, nil, [1])
78
- mock.expect(:call, nil, [1])
79
-
84
+ mock.expect(:call, nil, [true])
85
+ mock.expect(:call, nil, [true])
86
+
80
87
  part.stub(:reset, mock) do
81
88
  # Give 0 for first reading, device present
82
- board.inject_read_for_component(part, 1, "0")
89
+ board.inject_component_update(part, "0")
83
90
  assert part.device_present
84
-
91
+
85
92
  # Give 1 for second reading, no device
86
- board.inject_read_for_component(part, 1, "1")
93
+ board.inject_component_update(part, "1")
87
94
  refute part.device_present
88
95
  end
89
96
  mock.verify
@@ -92,26 +99,27 @@ class OneWireBusTest < Minitest::Test
92
99
  def test_pre_callback_filter
93
100
  assert_equal [255, 180, 120], part.pre_callback_filter("255,180,120")
94
101
  assert_equal 127, part.pre_callback_filter("127")
102
+ assert_equal [123, 111, 187], part.pre_callback_filter([123,111,187])
95
103
  end
96
104
 
97
105
  def test_reset
98
106
  part
99
107
  mock = Minitest::Mock.new
100
- mock.expect :call, nil, [1, 1]
101
- mock.expect :call, nil, [1, 0]
108
+ mock.expect :call, nil, [1, true]
109
+ mock.expect :call, nil, [1, false]
102
110
 
103
111
  board.stub(:one_wire_reset, mock) do
104
- part.reset(1)
112
+ part.reset(true)
105
113
  part.reset
106
114
  end
107
115
  mock.verify
108
116
  end
109
-
117
+
110
118
  def test__read
111
119
  part
112
120
  mock = Minitest::Mock.new.expect :call, nil, [1, 4]
113
121
  board.stub(:one_wire_read, mock) do
114
- part._read(4)
122
+ part.read_nb(4)
115
123
  end
116
124
  mock.verify
117
125
  end
@@ -123,16 +131,16 @@ class OneWireBusTest < Minitest::Test
123
131
  mock.expect :call, nil, [1, true, [255, 177, 0x48]]
124
132
  mock.expect :call, nil, [1, false, [255, 177, 0x55]]
125
133
  mock.expect :call, nil, [1, false, [255, 177, 0x44]]
126
-
134
+
127
135
  board.stub(:one_wire_write, mock) do
128
136
  # Parasite power on and parasite power functions.
129
137
  part.instance_variable_set(:@parasite_power, true)
130
138
  part.write [255, 177, 0x44]
131
139
  part.write [255, 177, 0x48]
132
-
140
+
133
141
  # Parasite power on and not parasite power functions.
134
142
  part.write [255, 177, 0x55]
135
-
143
+
136
144
  # Parasite power off and would-be parasite power function.
137
145
  part.instance_variable_set(:@parasite_power, false)
138
146
  part.write [255, 177, 0x44]
@@ -90,10 +90,7 @@ class OneWirePeripheralTest < Minitest::Test
90
90
  end
91
91
 
92
92
  def test_read_scratch_is_atomic
93
- # Pre-initialize the bus.
94
- bus
95
- # Will read 9 bytes.
96
- board.inject_read_for_component(bus, 1, "255,255,255,255,255,255,255,255")
93
+ board.inject_component_update(bus, "255,255,255,255,255,255,255,255")
97
94
 
98
95
  mock = Minitest::Mock.new.expect(:call, nil)
99
96
  part.stub(:atomically, mock) { part.read_scratch(9) }
@@ -101,10 +98,7 @@ class OneWirePeripheralTest < Minitest::Test
101
98
  end
102
99
 
103
100
  def test_read_scratch_matches_first
104
- # Pre-initialize the bus.
105
- bus
106
- # Will read 9 bytes.
107
- board.inject_read_for_component(bus, 1, "255,255,255,255,255,255,255,255")
101
+ board.inject_component_update(bus, "255,255,255,255,255,255,255,255")
108
102
 
109
103
  mock = Minitest::Mock.new.expect(:call, nil)
110
104
  part.stub(:match, mock) { part.read_scratch(9) }
@@ -112,10 +106,7 @@ class OneWirePeripheralTest < Minitest::Test
112
106
  end
113
107
 
114
108
  def test_read_scratch_sends_the_command
115
- # Pre-initialize the bus.
116
- bus
117
- # Will read 9 bytes.
118
- board.inject_read_for_component(bus, 1, "255,255,255,255,255,255,255,255")
109
+ board.inject_component_update(bus, "255,255,255,255,255,255,255,255")
119
110
 
120
111
  mock = Minitest::Mock.new
121
112
  mock.expect(:call, nil, [0xCC])
@@ -125,16 +116,13 @@ class OneWirePeripheralTest < Minitest::Test
125
116
  end
126
117
 
127
118
  def test_read_scratch_reads_bytes_from_bus
128
- # Pre-initialize the bus.
129
- bus
130
- # Will read 9 bytes.
131
- board.inject_read_for_component(bus, 1, "255,255,255,255,255,255,255,255")
119
+ board.inject_component_update(bus, "255,255,255,255,255,255,255,255")
132
120
 
133
121
  mock = Minitest::Mock.new.expect(:call, nil, [9])
134
122
  bus.stub(:read, mock) { part.read_scratch(9) }
135
123
  mock.verify
136
124
  end
137
-
125
+
138
126
  def test_write_scratch_is_atomic
139
127
  mock = Minitest::Mock.new.expect(:call, nil)
140
128
  part.stub(:atomically, mock) { part.write_scratch(1) }
@@ -10,9 +10,12 @@ class BuzzerTest < Minitest::Test
10
10
  end
11
11
 
12
12
  def test_low_on_initialize
13
- assert_equal part.state, board.low
13
+ mock = Minitest::Mock.new.expect :call, [part.pin]
14
+ board.stub(:no_tone, mock) do
15
+ part
16
+ end
14
17
  end
15
-
18
+
16
19
  def test_tone
17
20
  mock = Minitest::Mock.new
18
21
  mock.expect :call, nil, [part.pin, 60, nil]
@@ -23,7 +26,7 @@ class BuzzerTest < Minitest::Test
23
26
  end
24
27
  mock.verify
25
28
  end
26
-
29
+
27
30
  def test_no_tone
28
31
  part
29
32
  mock = Minitest::Mock.new
@@ -33,7 +36,7 @@ class BuzzerTest < Minitest::Test
33
36
  end
34
37
  mock.verify
35
38
  end
36
-
39
+
37
40
  def stop
38
41
  mock = Minitest::Mock.new
39
42
  mock.expect :call, nil
@@ -1,37 +1,42 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- class IRTransmitterTest < Minitest::Test
3
+ class IROutPutTest < Minitest::Test
4
4
  def board
5
5
  @board ||= BoardMock.new
6
6
  end
7
7
 
8
8
  def part
9
- @part ||= Denko::PulseIO::IRTransmitter.new(board: board, pin:1)
9
+ @part ||= Denko::PulseIO::IROutput.new(board: board, pin:1)
10
10
  end
11
-
11
+
12
+ def test_does_not_set_pin_mode
13
+ refute part.params[:mode]
14
+ refute part.mode
15
+ end
16
+
12
17
  def test_pulse_count_validation
13
18
  assert_raises(ArgumentError) do
14
- part.emit Array.new(257) { 0 }
19
+ part.write Array.new(256) { 0 }
15
20
  end
16
21
  end
17
-
22
+
18
23
  def test_numeric_validation
19
24
  assert_raises(ArgumentError) do
20
- part.emit ["a", "b", "c"]
25
+ part.write ["a", "b", "c"]
21
26
  end
22
27
  end
23
-
28
+
24
29
  def test_pulse_length_validation
25
30
  assert_raises(ArgumentError) do
26
- part.emit [65536]
31
+ part.write [65536]
27
32
  end
28
33
  end
29
-
34
+
30
35
  def test_emits
31
36
  part
32
37
  mock = Minitest::Mock.new.expect(:call, nil, [1, 38, [127,0]])
33
38
  board.stub(:infrared_emit, mock) do
34
- part.emit([127,0])
39
+ part.write([127,0])
35
40
  end
36
41
  mock.verify
37
42
  end
@@ -8,12 +8,34 @@ class PWMOutTest < Minitest::Test
8
8
  def part
9
9
  @part ||= Denko::PulseIO::PWMOutput.new(board: board, pin: 14)
10
10
  end
11
-
11
+
12
+ def part2
13
+ @part2 ||= Denko::PulseIO::PWMOutput.new(board: board, pin: 6, frequency: 1000, resolution: 12)
14
+ end
15
+
16
+ def test_initialize_stores_settings
17
+ assert_equal 12, part2.resolution
18
+ assert_equal 1000, part2.frequency
19
+ assert_equal (2**12-1), part2.pwm_high
20
+ end
21
+
22
+ def test_duty
23
+ mock = Minitest::Mock.new
24
+ mock.expect :call, nil, [14, 0]
25
+ mock.expect :call, nil, [14, 128]
26
+ mock.expect :call, nil, [14, 255]
27
+ board.stub(:pwm_write, mock) do
28
+ part.duty = 0
29
+ part.duty = 50
30
+ part.duty = 100
31
+ end
32
+ end
33
+
12
34
  def test_pwm_write
13
35
  enable_mock = Minitest::Mock.new.expect :call, nil
14
36
  write_mock = Minitest::Mock.new
15
37
  write_mock.expect :call, nil, [14, 128]
16
-
38
+
17
39
  board.stub(:pwm_write, write_mock) do
18
40
  part.stub(:pwm_enable, enable_mock) do
19
41
  assert_equal :output, part.mode
@@ -21,7 +43,7 @@ class PWMOutTest < Minitest::Test
21
43
  assert_equal 128, part.state
22
44
  end
23
45
  end
24
-
46
+
25
47
  part.pwm_write(64)
26
48
  assert_equal 64, part.state
27
49
  assert_equal :output_pwm, part.mode
@@ -30,35 +52,68 @@ class PWMOutTest < Minitest::Test
30
52
  enable_mock.verify
31
53
  end
32
54
 
33
- def test_write_uses_digital_write_at_limits
55
+ def test_write_uses_board_pwm_write_always
56
+ mock = Minitest::Mock.new.expect :call, nil, [14, 128]
57
+ board.stub(:pwm_write, mock) do
58
+ part.write(128)
59
+ end
60
+ mock.verify
61
+ end
62
+
63
+ def test_pwm_enable
64
+ part
34
65
  mock = Minitest::Mock.new
35
- mock.expect :call, nil, [board.high]
36
- mock.expect :call, nil, [board.low]
37
- part.stub(:digital_write, mock) do
38
- part.write(board.pwm_high)
39
- part.write(board.low)
66
+ if (RUBY_VERSION.split(".")[0].to_i < 3)
67
+ mock.expect :call, nil, [14, :output_pwm], {frequency: 1000, :period=>1000000, resolution: 8}
68
+ else
69
+ mock.expect :call, nil, [14, :output_pwm, {frequency: 1000, :period=>1000000, resolution: 8}]
70
+ end
71
+
72
+ board.stub(:set_pin_mode, mock) do
73
+ part.pwm_enable
40
74
  end
41
75
  mock.verify
76
+ assert_equal :output_pwm, part.mode
77
+ assert_equal true, part.pwm_enabled?
42
78
  end
43
79
 
44
- def test_write_uses_analog_write_between_limits
45
- mock = Minitest::Mock.new.expect :call, nil, [128]
46
- part.stub(:pwm_write, mock) do
47
- part.write(128)
80
+ def test_pwm_enable_uses_stored_settings
81
+ part2
82
+ mock = Minitest::Mock.new
83
+ if (RUBY_VERSION.split(".")[0].to_i < 3)
84
+ mock.expect :call, nil, [6, :output_pwm], {frequency: 1000, :period=>1000000, resolution: 12}
85
+ else
86
+ mock.expect :call, nil, [6, :output_pwm, {frequency: 1000, :period=>1000000, resolution: 12}]
87
+ end
88
+
89
+ board.stub(:set_pin_mode, mock) do
90
+ part2.pwm_enable
48
91
  end
49
92
  mock.verify
93
+ assert_equal :output_pwm, part2.mode
94
+ assert_equal true, part2.pwm_enabled?
50
95
  end
51
-
52
- def test_pwm_enable
96
+
97
+ def test_pwm_enable_uses_arg_settings
53
98
  part
54
- mock = Minitest::Mock.new.expect :call, nil, [14, :output_pwm]
99
+ mock = Minitest::Mock.new
100
+ if (RUBY_VERSION.split(".")[0].to_i < 3)
101
+ mock.expect :call, nil, [14, :output_pwm], {frequency: 500, :period=>2000000, resolution: 14}
102
+ else
103
+ mock.expect :call, nil, [14, :output_pwm, {frequency: 500, :period=>2000000, resolution: 14}]
104
+ end
105
+
55
106
  board.stub(:set_pin_mode, mock) do
56
- part.pwm_enable
107
+ part.pwm_enable(frequency: 500, resolution: 14)
57
108
  end
58
109
  mock.verify
59
110
  assert_equal :output_pwm, part.mode
111
+ assert_equal true, part.pwm_enabled?
112
+ assert_equal 14, part.resolution
113
+ assert_equal 500, part.frequency
114
+ assert_equal (2**14-1), part.pwm_high
60
115
  end
61
-
116
+
62
117
  def test_pwm_disable
63
118
  part.pwm_enable
64
119
  mock = Minitest::Mock.new
@@ -68,5 +123,6 @@ class PWMOutTest < Minitest::Test
68
123
  end
69
124
  mock.verify
70
125
  assert_equal :output, part.mode
126
+ assert_equal false, part.pwm_enabled?
71
127
  end
72
128
  end