denko 0.14.0 → 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 (344) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_atmega_avr.yml +2 -1
  3. data/.github/workflows/build_atmega_megaavr.yml +2 -1
  4. data/.github/workflows/build_atsam3x.yml +1 -0
  5. data/.github/workflows/build_atsamd21.yml +2 -1
  6. data/.github/workflows/build_esp32.yml +4 -2
  7. data/.github/workflows/build_esp32c3.yml +4 -3
  8. data/.github/workflows/build_esp32c6.yml +4 -2
  9. data/.github/workflows/build_esp32h2.yml +4 -2
  10. data/.github/workflows/build_esp32s2.yml +4 -2
  11. data/.github/workflows/build_esp32s3.yml +4 -2
  12. data/.github/workflows/build_esp8266.yml +2 -1
  13. data/.github/workflows/build_ra4m1.yml +1 -0
  14. data/.github/workflows/build_rp2040.yml +4 -3
  15. data/.github/workflows/ruby.yml +1 -1
  16. data/CHANGELOG.md +203 -0
  17. data/DEPS_CLI.md +16 -16
  18. data/DEPS_IDE.md +31 -30
  19. data/MICROCONTROLLERS.md +103 -0
  20. data/PERIPHERALS.md +178 -0
  21. data/README.md +28 -21
  22. data/denko.gemspec +6 -1
  23. data/lib/denko/analog_io/ads1118.rb +5 -5
  24. data/lib/denko/analog_io/ads111x.rb +23 -19
  25. data/lib/denko/analog_io/joystick.rb +87 -0
  26. data/lib/denko/analog_io/potentiometer.rb +1 -5
  27. data/lib/denko/analog_io.rb +22 -8
  28. data/lib/denko/behaviors/bus_controller.rb +2 -1
  29. data/lib/denko/behaviors/bus_peripheral.rb +1 -1
  30. data/lib/denko/behaviors/callbacks.rb +18 -16
  31. data/lib/denko/behaviors/component.rb +0 -4
  32. data/lib/denko/behaviors/lifecycle.rb +1 -1
  33. data/lib/denko/behaviors/listener.rb +9 -3
  34. data/lib/denko/behaviors/multi_pin.rb +4 -6
  35. data/lib/denko/behaviors/poller.rb +11 -2
  36. data/lib/denko/behaviors/reader.rb +109 -21
  37. data/lib/denko/behaviors/single_pin.rb +2 -4
  38. data/lib/denko/behaviors/state.rb +18 -13
  39. data/lib/denko/behaviors/threaded.rb +19 -8
  40. data/lib/denko/behaviors.rb +36 -23
  41. data/lib/denko/board/eeprom.rb +1 -1
  42. data/lib/denko/board/i2c.rb +1 -1
  43. data/lib/denko/board/i2c_bit_bang.rb +9 -5
  44. data/lib/denko/board/map.rb +6 -2
  45. data/lib/denko/board/one_wire.rb +3 -3
  46. data/lib/denko/board/spi.rb +30 -30
  47. data/lib/denko/board/spi_bit_bang.rb +8 -11
  48. data/lib/denko/board.rb +6 -3
  49. data/lib/denko/connection/flow_control.rb +1 -1
  50. data/lib/denko/connection/serial.rb +5 -5
  51. data/lib/denko/digital_io/output.rb +12 -4
  52. data/lib/denko/digital_io/pcf8574.rb +114 -0
  53. data/lib/denko/digital_io/rotary_encoder.rb +10 -6
  54. data/lib/denko/digital_io.rb +24 -6
  55. data/lib/denko/display/canvas.rb +350 -157
  56. data/lib/denko/display/font/bmp_5x7.rb +142 -0
  57. data/lib/denko/display/font/bmp_6x8.rb +142 -0
  58. data/lib/denko/display/font/bmp_8x16.rb +141 -0
  59. data/lib/denko/display/font.rb +22 -0
  60. data/lib/denko/display/hd44780.rb +24 -20
  61. data/lib/denko/display/il0373.rb +186 -0
  62. data/lib/denko/display/mono_oled.rb +193 -0
  63. data/lib/denko/display/pcd8544.rb +154 -0
  64. data/lib/denko/display/pixel_common.rb +83 -0
  65. data/lib/denko/display/sh1106.rb +17 -21
  66. data/lib/denko/display/sh1107.rb +10 -0
  67. data/lib/denko/display/spi_common.rb +35 -0
  68. data/lib/denko/display/spi_epaper_common.rb +30 -0
  69. data/lib/denko/display/ssd1306.rb +6 -228
  70. data/lib/denko/display/ssd1680.rb +14 -0
  71. data/lib/denko/display/ssd1681.rb +8 -0
  72. data/lib/denko/display/ssd168x.rb +227 -0
  73. data/lib/denko/display/st7302.rb +207 -0
  74. data/lib/denko/display/st7565.rb +166 -0
  75. data/lib/denko/display.rb +40 -4
  76. data/lib/denko/eeprom/at24c.rb +67 -0
  77. data/lib/denko/eeprom/board.rb +69 -0
  78. data/lib/denko/eeprom.rb +15 -1
  79. data/lib/denko/helpers/engine_check.rb +13 -0
  80. data/lib/denko/{mutex_stub.rb → helpers/mutex_stub.rb} +6 -0
  81. data/lib/denko/helpers.rb +6 -0
  82. data/lib/denko/i2c/bit_bang.rb +1 -0
  83. data/lib/denko/i2c/bus_common.rb +9 -4
  84. data/lib/denko/i2c/peripheral.rb +5 -1
  85. data/lib/denko/i2c.rb +17 -4
  86. data/lib/denko/led/apa102.rb +1 -3
  87. data/lib/denko/led/base.rb +5 -0
  88. data/lib/denko/led/rgb.rb +16 -10
  89. data/lib/denko/led/seven_segment.rb +1 -1
  90. data/lib/denko/led.rb +17 -8
  91. data/lib/denko/motor/{stepper.rb → a3967.rb} +1 -1
  92. data/lib/denko/motor/servo.rb +16 -6
  93. data/lib/denko/motor.rb +16 -3
  94. data/lib/denko/one_wire/bus.rb +20 -16
  95. data/lib/denko/one_wire/bus_enumerator.rb +25 -14
  96. data/lib/denko/one_wire/helper.rb +4 -2
  97. data/lib/denko/one_wire.rb +18 -5
  98. data/lib/denko/pulse_io/buzzer.rb +2 -6
  99. data/lib/denko/pulse_io/ir_output.rb +1 -5
  100. data/lib/denko/pulse_io/pwm_output.rb +56 -31
  101. data/lib/denko/pulse_io.rb +17 -3
  102. data/lib/denko/rtc/ds3231.rb +4 -3
  103. data/lib/denko/rtc.rb +14 -1
  104. data/lib/denko/sensor/aht.rb +16 -20
  105. data/lib/denko/sensor/bme280.rb +23 -36
  106. data/lib/denko/sensor/bmp180.rb +8 -13
  107. data/lib/denko/sensor/dht.rb +17 -7
  108. data/lib/denko/sensor/ds18b20.rb +5 -4
  109. data/lib/denko/sensor/hdc1080.rb +174 -0
  110. data/lib/denko/sensor/htu21d.rb +17 -6
  111. data/lib/denko/sensor/htu31d.rb +6 -5
  112. data/lib/denko/sensor/jsnsr04t.rb +49 -0
  113. data/lib/denko/sensor/qmp6988.rb +14 -30
  114. data/lib/denko/sensor/rcwl9620.rb +1 -0
  115. data/lib/denko/sensor/sht3x.rb +6 -5
  116. data/lib/denko/sensor/sht4x.rb +125 -0
  117. data/lib/denko/sensor/vl53l0x.rb +58 -0
  118. data/lib/denko/sensor.rb +33 -15
  119. data/lib/denko/spi/base_register.rb +11 -7
  120. data/lib/denko/spi/bus_common.rb +12 -15
  121. data/lib/denko/spi/input_register.rb +6 -6
  122. data/lib/denko/spi/output_register.rb +13 -4
  123. data/lib/denko/spi/peripheral.rb +82 -84
  124. data/lib/denko/spi.rb +20 -10
  125. data/lib/denko/uart/bit_bang.rb +2 -27
  126. data/lib/denko/uart/common.rb +33 -0
  127. data/lib/denko/uart/hardware.rb +1 -26
  128. data/lib/denko/uart.rb +16 -2
  129. data/lib/denko/version.rb +1 -1
  130. data/lib/denko.rb +22 -25
  131. data/lib/denko_cli/targets.rb +7 -7
  132. data/lib/denko_cli/targets.txt +19 -20
  133. data/src/lib/Denko.cpp +26 -13
  134. data/src/lib/Denko.h +4 -4
  135. data/src/lib/DenkoDefines.h +7 -26
  136. data/src/lib/DenkoLEDArray.cpp +1 -8
  137. data/src/lib/DenkoSPI.cpp +31 -29
  138. data/src/lib/DenkoSPIBB.cpp +12 -14
  139. data/test/analog_io/input_test.rb +1 -1
  140. data/test/analog_io/potentiometer_test.rb +2 -2
  141. data/test/behaviors/bus_peripheral_test.rb +4 -4
  142. data/test/behaviors/callbacks_test.rb +20 -10
  143. data/test/behaviors/component_test.rb +18 -8
  144. data/test/board/board_test.rb +9 -9
  145. data/test/board/one_wire_test.rb +25 -14
  146. data/test/board/spi_test.rb +31 -15
  147. data/test/digital_io/input_test.rb +2 -2
  148. data/test/display/canvas_test.rb +306 -0
  149. data/test/display/hd44780_test.rb +34 -7
  150. data/test/eeprom/board_test.rb +45 -0
  151. data/test/helpers/mruby_minitest.rb +95 -0
  152. data/test/helpers/mruby_runner.rb +13 -0
  153. data/test/i2c/bus_test.rb +93 -30
  154. data/test/i2c/peripheral_test.rb +2 -2
  155. data/test/led/apa102_test.rb +24 -0
  156. data/test/led/rgb_test.rb +4 -4
  157. data/test/motor/{stepper_test.rb → a3967_test.rb} +2 -2
  158. data/test/one_wire/bus_enumerator_test.rb +1 -1
  159. data/test/one_wire/bus_test.rb +42 -35
  160. data/test/one_wire/peripheral_test.rb +5 -17
  161. data/test/pulse_io/ir_output_test.rb +5 -0
  162. data/test/pulse_io/pwm_output_test.rb +10 -10
  163. data/test/rtc/ds3231_test.rb +3 -2
  164. data/test/sensor/dht_test.rb +11 -11
  165. data/test/spi/bitbang_test.rb +27 -0
  166. data/test/spi/bus_test.rb +19 -29
  167. data/test/spi/input_register_test.rb +2 -2
  168. data/test/spi/{peripheral_multi_pin_test.rb → peripheral_test.rb} +25 -5
  169. data/test/test_helper.rb +44 -124
  170. data/vendor/board-maps/BoardMap.h +264 -0
  171. data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
  172. data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
  173. data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
  174. data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
  175. data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
  176. data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +0 -1
  177. data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
  178. data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
  179. data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
  180. data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
  181. data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
  182. data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
  183. data/vendor/board-maps/yaml/ESP32C6_DEV.yml +3 -4
  184. data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +0 -1
  185. data/vendor/board-maps/yaml/ESP32H2_DEV.yml +0 -1
  186. data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +0 -1
  187. data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
  188. data/vendor/board-maps/yaml/ESP32S2_DEV.yml +0 -1
  189. data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO.yml +0 -1
  190. data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +0 -1
  191. data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
  192. data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
  193. data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
  194. data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +0 -1
  195. data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
  196. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
  197. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
  198. data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
  199. data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
  200. data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
  201. data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
  202. data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
  203. data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
  204. data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
  205. data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
  206. data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
  207. data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +1 -2
  208. data/vendor/board-maps/yaml/LoPy.yml +0 -1
  209. data/vendor/board-maps/yaml/LoPy4.yml +0 -1
  210. data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
  211. data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -1
  212. data/vendor/board-maps/yaml/OMGS3.yml +25 -0
  213. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
  214. data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
  215. data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
  216. data/vendor/board-maps/yaml/PYCOM_GPY.yml +0 -1
  217. data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +1 -1
  218. data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
  219. data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
  220. data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
  221. data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
  222. data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
  223. data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +0 -1
  224. data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
  225. data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
  226. data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
  227. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
  228. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
  229. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
  230. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
  231. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
  232. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
  233. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
  234. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
  235. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
  236. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
  237. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
  238. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
  239. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
  240. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
  241. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
  242. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
  243. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
  244. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
  245. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
  246. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
  247. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
  248. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
  249. data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
  250. data/vendor/board-maps/yaml/WIPY3.yml +0 -1
  251. data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
  252. data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
  253. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
  254. data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
  255. data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
  256. data/vendor/board-maps/yaml/mercury.yml +20 -0
  257. metadata +116 -101
  258. data/.vscode/settings.json +0 -5
  259. data/.vscode/tasks.json +0 -20
  260. data/HARDWARE.md +0 -263
  261. data/benchmarks/analog_listen.rb +0 -49
  262. data/benchmarks/digital_write.rb +0 -28
  263. data/benchmarks/i2c_ssd1306_refresh.rb +0 -91
  264. data/examples/advanced/m5_env3.rb +0 -46
  265. data/examples/advanced/rotary_encoder_mac_volume.rb +0 -53
  266. data/examples/advanced/ssd1306_time_temp_rh.rb +0 -43
  267. data/examples/analog_io/ads1100.rb +0 -48
  268. data/examples/analog_io/ads1115.rb +0 -57
  269. data/examples/analog_io/ads1118.rb +0 -65
  270. data/examples/analog_io/dac_loopback.rb +0 -34
  271. data/examples/analog_io/input.rb +0 -56
  272. data/examples/analog_io/input_smoothing.rb +0 -27
  273. data/examples/analog_io/potentiometer.rb +0 -31
  274. data/examples/connection/binary_echo.rb +0 -34
  275. data/examples/connection/tcp.rb +0 -19
  276. data/examples/digital_io/button.rb +0 -17
  277. data/examples/digital_io/relay.rb +0 -17
  278. data/examples/digital_io/rotary_encoder.rb +0 -36
  279. data/examples/display/hd44780.png +0 -0
  280. data/examples/display/hd44780.rb +0 -47
  281. data/examples/display/ssd1306.rb +0 -43
  282. data/examples/display/ssd1306_s2_pico.rb +0 -29
  283. data/examples/eeprom/built_in.rb +0 -32
  284. data/examples/i2c/search.rb +0 -39
  285. data/examples/led/apa102_bounce.rb +0 -32
  286. data/examples/led/apa102_fade.rb +0 -44
  287. data/examples/led/builtin_blink.rb +0 -14
  288. data/examples/led/builtin_fade.rb +0 -19
  289. data/examples/led/rgb_led.rb +0 -31
  290. data/examples/led/seven_segment_char_echo.rb +0 -17
  291. data/examples/led/ws2812_bounce.rb +0 -30
  292. data/examples/led/ws2812_builtin_blink.rb +0 -22
  293. data/examples/led/ws2812_fade.rb +0 -43
  294. data/examples/motor/l298.rb +0 -45
  295. data/examples/motor/servo.rb +0 -17
  296. data/examples/motor/stepper.png +0 -0
  297. data/examples/motor/stepper.rb +0 -43
  298. data/examples/one_wire/search.rb +0 -32
  299. data/examples/pulse_io/buzzer.rb +0 -35
  300. data/examples/pulse_io/ir_output.rb +0 -51
  301. data/examples/pulse_io/pwm_output.rb +0 -30
  302. data/examples/rtc/ds3231.rb +0 -31
  303. data/examples/sensor/aht10.rb +0 -17
  304. data/examples/sensor/aht20.rb +0 -17
  305. data/examples/sensor/bme280.rb +0 -38
  306. data/examples/sensor/bmp180.rb +0 -26
  307. data/examples/sensor/dht.rb +0 -29
  308. data/examples/sensor/ds18b20.rb +0 -57
  309. data/examples/sensor/generic_pir.rb +0 -27
  310. data/examples/sensor/hcsr04.rb +0 -17
  311. data/examples/sensor/htu21d.rb +0 -43
  312. data/examples/sensor/htu31d.rb +0 -33
  313. data/examples/sensor/neat_tph_readings.rb +0 -32
  314. data/examples/sensor/qmp6988.rb +0 -51
  315. data/examples/sensor/rcwl9620.rb +0 -15
  316. data/examples/sensor/sht3x.rb +0 -32
  317. data/examples/spi/bitbang_loopback.rb +0 -46
  318. data/examples/spi/input_register.rb +0 -40
  319. data/examples/spi/output_register.rb +0 -41
  320. data/examples/spi/ssd_through_registers.rb +0 -28
  321. data/examples/spi/two_registers.rb +0 -40
  322. data/examples/uart/bit_bang_demo.rb +0 -25
  323. data/examples/uart/board_passthrough.rb +0 -40
  324. data/examples/uart/hardware_loopback.rb +0 -16
  325. data/lib/denko/eeprom/built_in.rb +0 -72
  326. data/lib/denko/fonts.rb +0 -106
  327. data/test/eeprom/built_in_test.rb +0 -61
  328. data/test/spi/peripheral_single_pin_test.rb +0 -48
  329. data/tutorial/01-led/led.fzz +0 -0
  330. data/tutorial/01-led/led.pdf +0 -0
  331. data/tutorial/01-led/led.rb +0 -73
  332. data/tutorial/02-button/button.fzz +0 -0
  333. data/tutorial/02-button/button.pdf +0 -0
  334. data/tutorial/02-button/button.rb +0 -65
  335. data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
  336. data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
  337. data/tutorial/03-potentiometer/potentiometer.rb +0 -66
  338. data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
  339. data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
  340. data/tutorial/04-pwm_led/pwm_led.rb +0 -64
  341. data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
  342. data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
  343. data/tutorial/05-rgb_led/rgb_led.rb +0 -58
  344. data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
@@ -56,10 +56,10 @@ class I2CPeripheralTest < Minitest::Test
56
56
  end
57
57
  end
58
58
 
59
- def test__read_and_repeated_start
59
+ def test_read_and_repeated_start
60
60
  part.i2c_repeated_start = true
61
61
 
62
- board.inject_read_for_component(part, 5, "48-127,127,127,127,127,127")
62
+ board.inject_component_update(part, "48-127,127,127,127,127,127")
63
63
 
64
64
  mock = Minitest::Mock.new.expect :call, nil, [0x30, 0x03, 6, 400_000, true]
65
65
  bus.stub(:read, mock) do
@@ -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
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
@@ -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
 
@@ -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
@@ -98,21 +105,21 @@ class OneWireBusTest < Minitest::Test
98
105
  def test_reset
99
106
  part
100
107
  mock = Minitest::Mock.new
101
- mock.expect :call, nil, [1, 1]
102
- mock.expect :call, nil, [1, 0]
108
+ mock.expect :call, nil, [1, true]
109
+ mock.expect :call, nil, [1, false]
103
110
 
104
111
  board.stub(:one_wire_reset, mock) do
105
- part.reset(1)
112
+ part.reset(true)
106
113
  part.reset
107
114
  end
108
115
  mock.verify
109
116
  end
110
-
117
+
111
118
  def test__read
112
119
  part
113
120
  mock = Minitest::Mock.new.expect :call, nil, [1, 4]
114
121
  board.stub(:one_wire_read, mock) do
115
- part._read(4)
122
+ part.read_nb(4)
116
123
  end
117
124
  mock.verify
118
125
  end
@@ -124,16 +131,16 @@ class OneWireBusTest < Minitest::Test
124
131
  mock.expect :call, nil, [1, true, [255, 177, 0x48]]
125
132
  mock.expect :call, nil, [1, false, [255, 177, 0x55]]
126
133
  mock.expect :call, nil, [1, false, [255, 177, 0x44]]
127
-
134
+
128
135
  board.stub(:one_wire_write, mock) do
129
136
  # Parasite power on and parasite power functions.
130
137
  part.instance_variable_set(:@parasite_power, true)
131
138
  part.write [255, 177, 0x44]
132
139
  part.write [255, 177, 0x48]
133
-
140
+
134
141
  # Parasite power on and not parasite power functions.
135
142
  part.write [255, 177, 0x55]
136
-
143
+
137
144
  # Parasite power off and would-be parasite power function.
138
145
  part.instance_variable_set(:@parasite_power, false)
139
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) }
@@ -9,6 +9,11 @@ class IROutPutTest < Minitest::Test
9
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
19
  part.write Array.new(256) { 0 }
@@ -64,9 +64,9 @@ class PWMOutTest < Minitest::Test
64
64
  part
65
65
  mock = Minitest::Mock.new
66
66
  if (RUBY_VERSION.split(".")[0].to_i < 3)
67
- mock.expect :call, nil, [14, :output_pwm], {frequency: 1000, resolution: 8}
67
+ mock.expect :call, nil, [14, :output_pwm], {frequency: 1000, :period=>1000000, resolution: 8}
68
68
  else
69
- mock.expect :call, nil, [14, :output_pwm, {frequency: 1000, resolution: 8}]
69
+ mock.expect :call, nil, [14, :output_pwm, {frequency: 1000, :period=>1000000, resolution: 8}]
70
70
  end
71
71
 
72
72
  board.stub(:set_pin_mode, mock) do
@@ -74,16 +74,16 @@ class PWMOutTest < Minitest::Test
74
74
  end
75
75
  mock.verify
76
76
  assert_equal :output_pwm, part.mode
77
- assert_equal true, part.pwm_enabled
77
+ assert_equal true, part.pwm_enabled?
78
78
  end
79
79
 
80
80
  def test_pwm_enable_uses_stored_settings
81
81
  part2
82
82
  mock = Minitest::Mock.new
83
83
  if (RUBY_VERSION.split(".")[0].to_i < 3)
84
- mock.expect :call, nil, [6, :output_pwm], {frequency: 1000, resolution: 12}
84
+ mock.expect :call, nil, [6, :output_pwm], {frequency: 1000, :period=>1000000, resolution: 12}
85
85
  else
86
- mock.expect :call, nil, [6, :output_pwm, {frequency: 1000, resolution: 12}]
86
+ mock.expect :call, nil, [6, :output_pwm, {frequency: 1000, :period=>1000000, resolution: 12}]
87
87
  end
88
88
 
89
89
  board.stub(:set_pin_mode, mock) do
@@ -91,16 +91,16 @@ class PWMOutTest < Minitest::Test
91
91
  end
92
92
  mock.verify
93
93
  assert_equal :output_pwm, part2.mode
94
- assert_equal true, part2.pwm_enabled
94
+ assert_equal true, part2.pwm_enabled?
95
95
  end
96
96
 
97
97
  def test_pwm_enable_uses_arg_settings
98
98
  part
99
99
  mock = Minitest::Mock.new
100
100
  if (RUBY_VERSION.split(".")[0].to_i < 3)
101
- mock.expect :call, nil, [14, :output_pwm], {frequency: 500, resolution: 14}
101
+ mock.expect :call, nil, [14, :output_pwm], {frequency: 500, :period=>2000000, resolution: 14}
102
102
  else
103
- mock.expect :call, nil, [14, :output_pwm, {frequency: 500, resolution: 14}]
103
+ mock.expect :call, nil, [14, :output_pwm, {frequency: 500, :period=>2000000, resolution: 14}]
104
104
  end
105
105
 
106
106
  board.stub(:set_pin_mode, mock) do
@@ -108,7 +108,7 @@ class PWMOutTest < Minitest::Test
108
108
  end
109
109
  mock.verify
110
110
  assert_equal :output_pwm, part.mode
111
- assert_equal true, part.pwm_enabled
111
+ assert_equal true, part.pwm_enabled?
112
112
  assert_equal 14, part.resolution
113
113
  assert_equal 500, part.frequency
114
114
  assert_equal (2**14-1), part.pwm_high
@@ -123,6 +123,6 @@ class PWMOutTest < Minitest::Test
123
123
  end
124
124
  mock.verify
125
125
  assert_equal :output, part.mode
126
- assert_equal false, part.pwm_enabled
126
+ assert_equal false, part.pwm_enabled?
127
127
  end
128
128
  end
@@ -34,10 +34,10 @@ class DS3231Test < Minitest::Test
34
34
  end
35
35
 
36
36
  def test_read
37
- board.inject_read_for_i2c(0, "104-0,0,0,6,1,1,48")
37
+ board.inject_component_update(bus, "104-0,0,0,6,1,1,48")
38
38
 
39
39
  mock = Minitest::Mock.new.expect :call, nil, [part.address, 0x00, 7, 100000, false]
40
- bus.stub(:_read, mock) do
40
+ bus.stub(:read_nb, mock) do
41
41
  part.time
42
42
  end
43
43
  mock.verify
@@ -45,6 +45,7 @@ class DS3231Test < Minitest::Test
45
45
 
46
46
  def test_pre_callback_filter
47
47
  mock = Minitest::Mock.new.expect :call, nil, [Time.new(2000, 1, 1, 0, 0, 0.0)]
48
+ part.read_nb
48
49
  part.stub(:update_state, mock) do
49
50
  bus.send(:update, "104-0,0,0,6,1,1,48")
50
51
  end
@@ -2,19 +2,19 @@ require_relative '../test_helper'
2
2
 
3
3
  class DHTTest < Minitest::Test
4
4
  PIN = 1
5
-
5
+
6
6
  # Actual raw data from a sensor
7
7
  GOOD_STRING = "14,82,77,57,26,52,26,57,26,51,32,51,26,57,26,52,72,57,26,67,72,57,26,51,27,56,72,52,77,52,77,51,26,57,72,67,26,52,26,57,26,52,26,57,26,51,31,52,26,57,72,67,26,52,26,56,72,57,26,52,26,57,72,52,77,51,72,67,72,57,72,51,32,51,26,57,26,52,72,57,72,56,72,47"
8
8
  GOOD_ARRAY = [14, 82, 77, 57, 26, 52, 26, 57, 26, 51, 32, 51, 26, 57, 26, 52, 72, 57, 26, 67, 72, 57, 26, 51, 27, 56, 72, 52, 77, 52, 77, 51, 26, 57, 72, 67, 26, 52, 26, 57, 26, 52, 26, 57, 26, 51, 31, 52, 26, 57, 72, 67, 26, 52, 26, 56, 72, 57, 26, 52, 26, 57, 72, 52, 77, 51, 72, 67, 72, 57, 72, 51, 32, 51, 26, 57, 26, 52, 72, 57, 72, 56, 72, 47]
9
9
  SHORT_ARRAY = [1,2,3,4,5,6]
10
-
10
+
11
11
  # Make test data with a bad CRC byte (all 1s = 255).
12
12
  def bad_crc
13
13
  bad_crc = GOOD_ARRAY.dup
14
14
  (67..82).each { |i| bad_crc[i] = 56 }
15
15
  bad_crc
16
16
  end
17
-
17
+
18
18
  def board
19
19
  @board ||= BoardMock.new
20
20
  end
@@ -22,17 +22,17 @@ class DHTTest < Minitest::Test
22
22
  def part
23
23
  @part ||= Denko::Sensor::DHT.new(board: board, pin:PIN)
24
24
  end
25
-
25
+
26
26
  # It should tell the board to do a #pulse_read
27
27
  def test__read
28
28
  part
29
- mock = Minitest::Mock.new.expect(:call, nil, [PIN], reset: board.low, reset_time: 20000, pulse_limit: 84, timeout: 100)
29
+ mock = Minitest::Mock.new.expect(:call, nil, [PIN], reset: board.low, reset_time: 10_000, pulse_limit: 84, timeout: 100)
30
30
  board.stub(:pulse_read, mock) do
31
- part._read
31
+ part.read_nb
32
32
  end
33
33
  mock.verify
34
34
  end
35
-
35
+
36
36
  # Callback pre filter should convert string of bytes to array and call #decode with it.
37
37
  def test_pre_callback_filter
38
38
  part
@@ -41,23 +41,23 @@ class DHTTest < Minitest::Test
41
41
  part.update(GOOD_STRING)
42
42
  end
43
43
  end
44
-
44
+
45
45
  def test_decode
46
46
  # Error message in output if data is missing.
47
47
  result = part.decode(SHORT_ARRAY)
48
48
  assert result.keys.include? :error
49
49
  assert result[:error].match(/missing/i)
50
-
50
+
51
51
  # Error message in output if bad CRC.
52
52
  result = part.decode(bad_crc)
53
53
  assert result.keys.include? :error
54
54
  assert result[:error].match(/crc/i)
55
-
55
+
56
56
  # It should calculate output correctly.
57
57
  result = part.decode(GOOD_ARRAY)
58
58
  assert_equal result, {temperature: 29.5, humidity: 66.9}
59
59
  end
60
-
60
+
61
61
  def test_crc
62
62
  refute part.crc(bad_crc)
63
63
  end
@@ -0,0 +1,27 @@
1
+ require_relative '../test_helper'
2
+
3
+ class TempSpiPeripheral
4
+ include Denko::SPI::Peripheral
5
+ end
6
+
7
+ class SPIBitBangTest < Minitest::Test
8
+ def board
9
+ @board ||= BoardMock.new
10
+ end
11
+
12
+ def part
13
+ @bus ||= Denko::SPI::BitBang.new(board: board, pins: {mosi: 4, miso: 5, clock: 6})
14
+ end
15
+
16
+ def test_no_miso
17
+ no_miso = Denko::SPI::BitBang.new(board: board, pins: {mosi: 4, clock: 6})
18
+ refute no_miso.params[:pins][:input]
19
+ refute no_miso.pins[:input]
20
+ end
21
+
22
+ def test_no_mosi
23
+ no_mosi = Denko::SPI::BitBang.new(board: board, pins: {miso: 5, clock: 6})
24
+ refute no_mosi.params[:pins][:output]
25
+ refute no_mosi.pins[:output]
26
+ end
27
+ end
data/test/spi/bus_test.rb CHANGED
@@ -1,11 +1,7 @@
1
1
  require_relative '../test_helper'
2
2
 
3
3
  class TempSpiPeripheral
4
- def initialize(pin)
5
- @pin = pin
6
- end
7
-
8
- attr_reader :pin
4
+ include Denko::SPI::Peripheral
9
5
  end
10
6
 
11
7
  class SPIBusTest < Minitest::Test
@@ -20,6 +16,22 @@ class SPIBusTest < Minitest::Test
20
16
  PIN = 9
21
17
  OPTIONS = { read: 2, frequency: 800000, mode: 2, bit_order: :lsbfirst }
22
18
 
19
+ def test_automatically_adds_and_removes_component
20
+ obj = TempSpiPeripheral.new(bus: part, pin: 1)
21
+ assert part.components.include?(obj)
22
+
23
+ part.remove_component(obj)
24
+ refute part.components.include?(obj)
25
+ end
26
+
27
+ def test_unique_select_pins
28
+ TempSpiPeripheral.new(bus: part, pin: 1)
29
+
30
+ assert_raises do
31
+ TempSpiPeripheral.new(bus: part, pin: 1)
32
+ end
33
+ end
34
+
23
35
  def test_transfer
24
36
  mock = Minitest::Mock.new.expect :call, nil, [5, PIN], **OPTIONS
25
37
  board.stub(:spi_transfer, mock) do
@@ -36,7 +48,7 @@ class SPIBusTest < Minitest::Test
36
48
  mock.verify
37
49
  end
38
50
 
39
- def test_stop
51
+ def test_stop_forwarded
40
52
  mock = Minitest::Mock.new.expect :call, nil, [PIN]
41
53
  board.stub(:spi_stop, mock) do
42
54
  part.stop(PIN)
@@ -44,33 +56,11 @@ class SPIBusTest < Minitest::Test
44
56
  mock.verify
45
57
  end
46
58
 
47
- def test_add_and_remove_component
48
- obj = TempSpiPeripheral.new(1)
49
- part.add_component(obj)
50
- assert board.components.include?(obj)
51
-
52
- part.remove_component(obj)
53
- refute board.components.include?(obj)
54
- end
55
-
56
- def test_set_pin_mode
59
+ def test_set_pin_mode_forwarded
57
60
  mock = Minitest::Mock.new.expect :call, nil, [9, :output]
58
61
  board.stub(:set_pin_mode, mock) do
59
62
  part.set_pin_mode(9, :output)
60
63
  end
61
64
  mock.verify
62
65
  end
63
-
64
- def test_unique_select_pins
65
- part.add_component TempSpiPeripheral.new(1)
66
-
67
- assert_raises do
68
- part.add_component TempSpiPeripheral.new(1)
69
- end
70
- end
71
-
72
- def test_no_select_pin
73
- part.add_component TempSpiPeripheral.new(nil)
74
- assert_empty part.components
75
- end
76
66
  end
@@ -130,10 +130,10 @@ class InputRegisterTest < Minitest::Test
130
130
  refute part.any_listening
131
131
  end
132
132
 
133
- def test_gets_reads_through_pin
133
+ def test_gets_reads_through_select
134
134
  mock = Minitest::Mock.new.expect :call, nil, ["127,255"]
135
135
  part.stub(:update, mock) do
136
- board.update("#{part.pin}:127,255")
136
+ board.update("#{part.select.pin}:127,255")
137
137
  end
138
138
  mock.verify
139
139
  end
@@ -1,18 +1,22 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- class SPITesterMulti
4
- include Denko::SPI::Peripheral::MultiPin
3
+ class SPITester
4
+ include Denko::SPI::Peripheral
5
5
 
6
6
  def initialize_pins(options={})
7
7
  super(options)
8
- proxy_pin :other_pin, Denko::DigitalIO::Output, board: bus.board
8
+ proxy_pin :other_pin, Denko::DigitalIO::Output
9
9
  end
10
10
 
11
11
  def some_callback(data)
12
12
  end
13
13
  end
14
14
 
15
- class SPIPeripheralMultiPinTest < Minitest::Test
15
+ class SPITesterSingle
16
+ include Denko::SPI::Peripheral
17
+ end
18
+
19
+ class SPIPeripheralTest < Minitest::Test
16
20
  def board
17
21
  @board ||= BoardMock.new
18
22
  end
@@ -26,7 +30,7 @@ class SPIPeripheralMultiPinTest < Minitest::Test
26
30
  end
27
31
 
28
32
  def part
29
- @part ||= SPITesterMulti.new(options)
33
+ @part ||= SPITester.new(options)
30
34
  end
31
35
 
32
36
  def test_string_data_converts_to_bytes_for_callbacks
@@ -50,4 +54,20 @@ class SPIPeripheralMultiPinTest < Minitest::Test
50
54
  end
51
55
  mock.verify
52
56
  end
57
+
58
+ def test_allows_pin_alone
59
+ part2 = SPITesterSingle.new(bus: bus, pin: 5)
60
+ assert bus.components.include?(part2)
61
+ end
62
+
63
+ def test_subcomponents_attach_to_board_not_bus
64
+ part
65
+ assert board, part.select.board
66
+ assert board, part.other_pin.board
67
+ end
68
+
69
+ def test_added_to_bus
70
+ part
71
+ assert bus.components.include?(part)
72
+ end
53
73
  end