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.
- checksums.yaml +4 -4
- data/.github/workflows/{build_avr.yml → build_atmega_avr.yml} +19 -18
- data/.github/workflows/{build_megaavr.yml → build_atmega_megaavr.yml} +19 -18
- data/.github/workflows/{build_sam3x.yml → build_atsam3x.yml} +18 -17
- data/.github/workflows/{build_samd.yml → build_atsamd21.yml} +19 -18
- data/.github/workflows/build_esp32.yml +19 -18
- data/.github/workflows/build_esp32c3.yml +58 -0
- data/.github/workflows/build_esp32c6.yml +59 -0
- data/.github/workflows/build_esp32h2.yml +58 -0
- data/.github/workflows/build_esp32s2.yml +59 -0
- data/.github/workflows/build_esp32s3.yml +59 -0
- data/.github/workflows/build_esp8266.yml +16 -15
- data/.github/workflows/build_ra4m1.yml +17 -16
- data/.github/workflows/build_rp2040.yml +19 -17
- data/.github/workflows/ruby.yml +20 -20
- data/CHANGELOG.md +398 -11
- data/DEPS_CLI.md +16 -16
- data/DEPS_IDE.md +39 -39
- data/MICROCONTROLLERS.md +103 -0
- data/PERIPHERALS.md +178 -0
- data/README.md +73 -58
- data/Rakefile +1 -1
- data/build +1 -1
- data/denko.gemspec +11 -3
- data/lib/denko/analog_io/ads1100.rb +127 -0
- data/lib/denko/analog_io/ads1115.rb +8 -25
- data/lib/denko/analog_io/ads1118.rb +12 -27
- data/lib/denko/analog_io/ads111x.rb +39 -21
- data/lib/denko/analog_io/input.rb +29 -55
- data/lib/denko/analog_io/input_helper.rb +42 -0
- data/lib/denko/analog_io/joystick.rb +87 -0
- data/lib/denko/analog_io/output.rb +5 -5
- data/lib/denko/analog_io/potentiometer.rb +3 -9
- data/lib/denko/analog_io.rb +22 -7
- data/lib/denko/behaviors/board_proxy.rb +13 -1
- data/lib/denko/behaviors/bus_controller.rb +3 -1
- data/lib/denko/behaviors/bus_controller_addressed.rb +1 -0
- data/lib/denko/behaviors/bus_peripheral.rb +3 -4
- data/lib/denko/behaviors/bus_peripheral_addressed.rb +8 -6
- data/lib/denko/behaviors/callbacks.rb +18 -14
- data/lib/denko/behaviors/component.rb +12 -14
- data/lib/denko/behaviors/input_pin.rb +14 -15
- data/lib/denko/behaviors/lifecycle.rb +51 -0
- data/lib/denko/behaviors/listener.rb +9 -3
- data/lib/denko/behaviors/multi_pin.rb +22 -20
- data/lib/denko/behaviors/output_pin.rb +9 -4
- data/lib/denko/behaviors/poller.rb +11 -2
- data/lib/denko/behaviors/reader.rb +109 -21
- data/lib/denko/behaviors/single_pin.rb +3 -4
- data/lib/denko/behaviors/state.rb +24 -13
- data/lib/denko/behaviors/subcomponents.rb +72 -12
- data/lib/denko/behaviors/threaded.rb +19 -8
- data/lib/denko/behaviors.rb +36 -22
- data/lib/denko/board/core.rb +36 -18
- data/lib/denko/board/eeprom.rb +1 -1
- data/lib/denko/board/i2c.rb +15 -15
- data/lib/denko/board/i2c_bit_bang.rb +53 -0
- data/lib/denko/board/infrared.rb +6 -6
- data/lib/denko/board/led_array.rb +6 -5
- data/lib/denko/board/map.rb +6 -2
- data/lib/denko/board/one_wire.rb +3 -3
- data/lib/denko/board/spi.rb +35 -30
- data/lib/denko/board/spi_bit_bang.rb +14 -15
- data/lib/denko/board.rb +41 -36
- data/lib/denko/connection/binary_echo.rb +17 -0
- data/lib/denko/connection/flow_control.rb +12 -16
- data/lib/denko/connection/handshake.rb +2 -0
- data/lib/denko/connection/serial.rb +5 -5
- data/lib/denko/digital_io/button.rb +4 -0
- data/lib/denko/digital_io/c_bit_bang.rb +15 -0
- data/lib/denko/digital_io/input.rb +4 -5
- data/lib/denko/digital_io/output.rb +19 -10
- data/lib/denko/digital_io/pcf8574.rb +114 -0
- data/lib/denko/digital_io/relay.rb +2 -0
- data/lib/denko/digital_io/rotary_encoder.rb +83 -61
- data/lib/denko/digital_io.rb +24 -5
- data/lib/denko/display/canvas.rb +350 -157
- data/lib/denko/display/font/bmp_5x7.rb +142 -0
- data/lib/denko/display/font/bmp_6x8.rb +142 -0
- data/lib/denko/display/font/bmp_8x16.rb +141 -0
- data/lib/denko/display/font.rb +22 -0
- data/lib/denko/display/hd44780.rb +152 -105
- data/lib/denko/display/il0373.rb +186 -0
- data/lib/denko/display/mono_oled.rb +193 -0
- data/lib/denko/display/pcd8544.rb +154 -0
- data/lib/denko/display/pixel_common.rb +83 -0
- data/lib/denko/display/sh1106.rb +38 -0
- data/lib/denko/display/sh1107.rb +10 -0
- data/lib/denko/display/spi_common.rb +35 -0
- data/lib/denko/display/spi_epaper_common.rb +30 -0
- data/lib/denko/display/ssd1306.rb +6 -168
- data/lib/denko/display/ssd1680.rb +14 -0
- data/lib/denko/display/ssd1681.rb +8 -0
- data/lib/denko/display/ssd168x.rb +227 -0
- data/lib/denko/display/st7302.rb +207 -0
- data/lib/denko/display/st7565.rb +166 -0
- data/lib/denko/display.rb +40 -3
- data/lib/denko/eeprom/at24c.rb +67 -0
- data/lib/denko/eeprom/board.rb +69 -0
- data/lib/denko/eeprom.rb +15 -1
- data/lib/denko/helpers/engine_check.rb +13 -0
- data/lib/denko/helpers/mutex_stub.rb +13 -0
- data/lib/denko/helpers.rb +6 -0
- data/lib/denko/i2c/bit_bang.rb +32 -0
- data/lib/denko/i2c/bus.rb +8 -36
- data/lib/denko/i2c/bus_common.rb +50 -0
- data/lib/denko/i2c/peripheral.rb +32 -19
- data/lib/denko/i2c.rb +17 -2
- data/lib/denko/led/apa102.rb +42 -30
- data/lib/denko/led/base.rb +13 -2
- data/lib/denko/led/rgb.rb +18 -14
- data/lib/denko/led/seven_segment.rb +24 -9
- data/lib/denko/led/ws2812.rb +10 -7
- data/lib/denko/led.rb +17 -8
- data/lib/denko/message.rb +5 -0
- data/lib/denko/motor/{stepper.rb → a3967.rb} +12 -15
- data/lib/denko/motor/l298.rb +11 -10
- data/lib/denko/motor/servo.rb +37 -15
- data/lib/denko/motor.rb +16 -3
- data/lib/denko/one_wire/bus.rb +31 -23
- data/lib/denko/one_wire/bus_enumerator.rb +25 -14
- data/lib/denko/one_wire/helper.rb +4 -2
- data/lib/denko/one_wire/peripheral.rb +0 -3
- data/lib/denko/one_wire.rb +18 -5
- data/lib/denko/pulse_io/buzzer.rb +11 -9
- data/lib/denko/pulse_io/{ir_transmitter.rb → ir_output.rb} +6 -5
- data/lib/denko/pulse_io/pwm_output.rb +94 -15
- data/lib/denko/pulse_io.rb +17 -3
- data/lib/denko/rtc/ds3231.rb +13 -14
- data/lib/denko/rtc.rb +14 -1
- data/lib/denko/sensor/aht.rb +35 -38
- data/lib/denko/sensor/bme280.rb +76 -92
- data/lib/denko/sensor/bmp180.rb +46 -48
- data/lib/denko/sensor/dht.rb +34 -7
- data/lib/denko/sensor/ds18b20.rb +41 -34
- data/lib/denko/sensor/hcsr04.rb +7 -5
- data/lib/denko/sensor/hdc1080.rb +174 -0
- data/lib/denko/sensor/helper.rb +37 -0
- data/lib/denko/sensor/htu21d.rb +57 -57
- data/lib/denko/sensor/htu31d.rb +36 -36
- data/lib/denko/sensor/jsnsr04t.rb +49 -0
- data/lib/denko/sensor/qmp6988.rb +34 -48
- data/lib/denko/sensor/rcwl9620.rb +3 -5
- data/lib/denko/sensor/sht3x.rb +27 -24
- data/lib/denko/sensor/sht4x.rb +125 -0
- data/lib/denko/sensor/vl53l0x.rb +58 -0
- data/lib/denko/sensor.rb +33 -16
- data/lib/denko/spi/base_register.rb +25 -21
- data/lib/denko/spi/bit_bang.rb +17 -51
- data/lib/denko/spi/bus.rb +15 -29
- data/lib/denko/spi/bus_common.rb +33 -0
- data/lib/denko/spi/input_register.rb +37 -31
- data/lib/denko/spi/output_register.rb +33 -39
- data/lib/denko/spi/peripheral.rb +81 -14
- data/lib/denko/spi.rb +21 -6
- data/lib/denko/uart/bit_bang.rb +7 -30
- data/lib/denko/uart/common.rb +33 -0
- data/lib/denko/uart/hardware.rb +10 -34
- data/lib/denko/uart.rb +16 -2
- data/lib/denko/version.rb +1 -1
- data/lib/denko.rb +23 -16
- data/lib/denko_cli/generator.rb +2 -2
- data/lib/denko_cli/packages.rb +8 -10
- data/lib/denko_cli/targets.rb +13 -13
- data/lib/denko_cli/targets.txt +23 -24
- data/lib/denko_cli/usage.txt +1 -1
- data/src/denko_ethernet.ino +0 -14
- data/src/denko_serial.ino +0 -14
- data/src/denko_wifi.ino +6 -15
- data/src/lib/Denko.cpp +65 -16
- data/src/lib/Denko.h +46 -30
- data/src/lib/DenkoCoreIO.cpp +57 -102
- data/src/lib/DenkoDefines.h +32 -46
- data/src/lib/DenkoI2C.cpp +54 -45
- data/src/lib/DenkoI2CBB.cpp +238 -0
- data/src/lib/DenkoIROut.cpp +12 -7
- data/src/lib/DenkoLEDArray.cpp +29 -13
- data/src/lib/DenkoSPI.cpp +36 -33
- data/src/lib/DenkoSPIBB.cpp +19 -20
- data/target.yml +37 -2
- data/test/analog_io/input_test.rb +1 -1
- data/test/analog_io/potentiometer_test.rb +12 -12
- data/test/behaviors/board_proxy_test.rb +1 -1
- data/test/behaviors/bus_peripheral_test.rb +4 -4
- data/test/behaviors/callbacks_test.rb +28 -10
- data/test/behaviors/component_test.rb +32 -14
- data/test/behaviors/input_pin_test.rb +14 -9
- data/test/behaviors/multi_pin_test.rb +14 -4
- data/test/behaviors/output_pin_test.rb +11 -8
- data/test/behaviors/poller_test.rb +1 -0
- data/test/behaviors/reader_test.rb +3 -2
- data/test/behaviors/subcomponents_test.rb +22 -2
- data/test/board/board_test.rb +9 -9
- data/test/board/core_test.rb +15 -11
- data/test/board/i2c_test.rb +39 -33
- data/test/board/infrared_test.rb +1 -1
- data/test/board/message_test.rb +17 -11
- data/test/board/one_wire_test.rb +25 -14
- data/test/board/spi_test.rb +45 -29
- data/test/digital_io/button_test.rb +15 -0
- data/test/digital_io/input_test.rb +2 -2
- data/test/digital_io/relay_test.rb +18 -0
- data/test/digital_io/rotary_encoder_test.rb +80 -60
- data/test/display/canvas_test.rb +306 -0
- data/test/display/hd44780_test.rb +34 -7
- data/test/eeprom/board_test.rb +45 -0
- data/test/helpers/mruby_minitest.rb +95 -0
- data/test/helpers/mruby_runner.rb +13 -0
- data/test/i2c/bus_test.rb +108 -29
- data/test/i2c/peripheral_test.rb +38 -19
- data/test/led/apa102_test.rb +24 -0
- data/test/led/base_test.rb +2 -1
- data/test/led/rgb_test.rb +9 -9
- data/test/led/seven_segment_test.rb +7 -7
- data/test/motor/{stepper_test.rb → a3967_test.rb} +4 -4
- data/test/motor/servo_test.rb +1 -1
- data/test/one_wire/bus_enumerator_test.rb +1 -1
- data/test/one_wire/bus_test.rb +43 -35
- data/test/one_wire/peripheral_test.rb +5 -17
- data/test/pulse_io/buzzer_test.rb +7 -4
- data/test/pulse_io/{ir_transmitter_test.rb → ir_output_test.rb} +15 -10
- data/test/pulse_io/pwm_output_test.rb +74 -18
- data/test/rtc/ds3231_test.rb +13 -14
- data/test/sensor/dht_test.rb +12 -12
- data/test/sensor/ds18b20_test.rb +4 -8
- data/test/spi/bitbang_test.rb +27 -0
- data/test/spi/bus_test.rb +24 -34
- data/test/spi/input_register_test.rb +17 -17
- data/test/spi/output_register_test.rb +10 -28
- data/test/spi/peripheral_test.rb +73 -0
- data/test/test_helper.rb +44 -121
- data/vendor/board-maps/BoardMap.h +678 -54
- data/vendor/board-maps/lib/header_parser.rb +12 -2
- data/vendor/board-maps/yaml/ADAFRUIT_CAMERA_ESP32S3.yml +2 -2
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32C6.yml +15 -0
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +1 -1
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_ADALOGGER.yml +44 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_N4R2.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +1 -0
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +1 -0
- data/vendor/board-maps/yaml/ALFREDO_NOU3.yml +2 -0
- data/vendor/board-maps/yaml/AMKEN_BB.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_ES.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP.yml +48 -0
- data/vendor/board-maps/yaml/AMKEN_REVELOP_PLUS.yml +48 -0
- data/vendor/board-maps/yaml/ASL_CAN_X2.yml +41 -0
- data/vendor/board-maps/yaml/ATD143_S3.yml +1 -0
- data/vendor/board-maps/yaml/BHARATPI_A7672S_4G.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_LORA.yml +14 -0
- data/vendor/board-maps/yaml/BHARATPI_NODE_WIFI.yml +14 -0
- data/vendor/board-maps/yaml/BLING.yml +25 -0
- data/vendor/board-maps/yaml/BRIDGETEK_IDM2040_7A.yml +48 -0
- data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +13 -1
- data/vendor/board-maps/yaml/Breadstick_Raspberry.yml +31 -0
- data/vendor/board-maps/yaml/CEZERIO_DEV_ESP32C6.yml +14 -0
- data/vendor/board-maps/yaml/CEZERIO_MINI_DEV_ESP32C6.yml +12 -0
- data/vendor/board-maps/yaml/CIRCUITART_ZERO_S3.yml +71 -0
- data/vendor/board-maps/yaml/CODECELLC3.yml +13 -0
- data/vendor/board-maps/yaml/CYOBOT_V2_ESP32S3.yml +7 -0
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32C6.yml +8 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32C6.yml +20 -0
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_ESP32.yml +46 -0
- data/vendor/board-maps/yaml/DPTECHNICS_WALTER.yml +39 -0
- data/vendor/board-maps/yaml/EDGES3D.yml +25 -0
- data/vendor/board-maps/yaml/ELECROW_CROWPANEL_7.yml +8 -0
- data/vendor/board-maps/yaml/ESP32C2_DEV.yml +12 -0
- data/vendor/board-maps/yaml/ESP32C3_DEVKIT_LIPO.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C6_DEV.yml +14 -0
- data/vendor/board-maps/yaml/ESP32C6_EVB.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_QWIIC_POCKET.yml +15 -0
- data/vendor/board-maps/yaml/ESP32C6_THING_PLUS.yml +14 -0
- data/vendor/board-maps/yaml/ESP32H2_DEV.yml +12 -0
- data/vendor/board-maps/yaml/ESP32H2_DEVKIT_LIPO.yml +12 -0
- data/vendor/board-maps/yaml/ESP32P4_DEV.yml +35 -0
- data/vendor/board-maps/yaml/{RMP.yml → ESP32S2_DEVKIT_LIPO.yml} +1 -1
- data/vendor/board-maps/yaml/ESP32S2_DEVKIT_LIPO_USB.yml +43 -0
- data/vendor/board-maps/yaml/ESP32S3_DEVKIT_LIPO.yml +42 -0
- data/vendor/board-maps/yaml/ESP32S3_POWERFEATHER.yml +22 -0
- data/vendor/board-maps/yaml/ESP32_2432S028R.yml +14 -0
- data/vendor/board-maps/yaml/ESP32_SBC_FABGL.yml +35 -0
- data/vendor/board-maps/yaml/EVN_ALPHA.yml +48 -0
- data/vendor/board-maps/yaml/FEATHERS3.yml +1 -1
- data/vendor/board-maps/yaml/FEATHERS3NEO.yml +32 -0
- data/vendor/board-maps/yaml/FRI3D_2024_ESP32S3.yml +43 -0
- data/vendor/board-maps/yaml/GEEKBLE_ESP32C3.yml +13 -0
- data/vendor/board-maps/yaml/GEEKBLE_NANO_ESP32S3.yml +25 -0
- data/vendor/board-maps/yaml/HELTEC_CAPSULE_SENSOR_V3.yml +43 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E290.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_E_213.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_VISION_MASTER_T190.yml +41 -0
- data/vendor/board-maps/yaml/HELTEC_WIFI_LORA_32_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_BRIDGE.yml +8 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_MINI_SHELL.yml +13 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_PAPER.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_SHELL_V3.yml +42 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_STICK_LITE_V3.yml +30 -0
- data/vendor/board-maps/yaml/HELTEC_WIRELESS_TRACKER.yml +41 -0
- data/vendor/board-maps/yaml/HT_DE01.yml +42 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF2.yml +5 -0
- data/vendor/board-maps/yaml/HUIDU_HD_WF4.yml +1 -0
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +1 -1
- data/vendor/board-maps/yaml/LILYGO_LORA_CC1101.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_LR1121.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SI4432.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1262.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_LORA_SX1280.yml +6 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_LR1121.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1262.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1276.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1278.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280.yml +9 -0
- data/vendor/board-maps/yaml/LILYGO_T3S3_SX1280PA.yml +8 -0
- data/vendor/board-maps/yaml/LILYGO_T_ETH_LITE.yml +21 -0
- data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -1
- data/vendor/board-maps/yaml/LOLIN_C3_PICO.yml +13 -0
- data/vendor/board-maps/yaml/LOLIN_S3.yml +1 -0
- data/vendor/board-maps/yaml/LOLIN_S3_MINI_PRO.yml +40 -0
- data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -2
- data/vendor/board-maps/yaml/M5STACK_CAPSULE.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_CARDPUTER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_DIAL.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_DINMETER.yml +8 -0
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +1 -2
- data/vendor/board-maps/yaml/M5STACK_NANOC6.yml +17 -0
- data/vendor/board-maps/yaml/M5STACK_PAPER.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_POE_CAM.yml +5 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_C3.yml +13 -0
- data/vendor/board-maps/yaml/M5STACK_STAMP_S3.yml +4 -0
- data/vendor/board-maps/yaml/{M5Stick_C.yml → M5STACK_STICKC.yml} +0 -1
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_STICKC_PLUS2.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_TOUGH.yml +9 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAM.yml +10 -0
- data/vendor/board-maps/yaml/M5STACK_UNIT_CAMS3.yml +4 -0
- data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -1
- data/vendor/board-maps/yaml/MAKERGO_C3_SUPERMINI.yml +14 -0
- data/vendor/board-maps/yaml/MARBLE_PICO.yml +48 -0
- data/vendor/board-maps/yaml/METEHOCA_AKANA_R1.yml +46 -0
- data/vendor/board-maps/yaml/NAMINO_BIANCO.yml +13 -0
- data/vendor/board-maps/yaml/NEBULAS3.yml +0 -1
- data/vendor/board-maps/yaml/NEWSAN_ARCHI.yml +48 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32C3_SUPER_MINI.yml +14 -0
- data/vendor/board-maps/yaml/NOLOGO_ESP32S3_PICO.yml +12 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_16MB.yml +48 -0
- data/vendor/board-maps/yaml/OLIMEX_RP2040_PICO30_2MB.yml +48 -0
- data/vendor/board-maps/yaml/OMGS3.yml +25 -0
- data/vendor/board-maps/yaml/OPTA_ANALOG.yml +7 -0
- data/vendor/board-maps/yaml/OPTA_DIGITAL.yml +5 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC3.yml +23 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHC6.yml +32 -0
- data/vendor/board-maps/yaml/PCBCUPID_GLYPHH2.yml +24 -0
- data/vendor/board-maps/yaml/PINTRONIX_PINMAX.yml +42 -0
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -1
- data/vendor/board-maps/yaml/SENSEBOX_MCU_ESP32S2.yml +12 -0
- data/vendor/board-maps/yaml/SPARKFUN_ESP32S3_THING_PLUS.yml +13 -0
- data/vendor/board-maps/yaml/SPARKFUN_MICROMOD_RP2040.yml +48 -0
- data/vendor/board-maps/yaml/SPARKFUN_PRO_MICRO_ESP32C3.yml +24 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONMINI_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SPARKLEMOTIONSTICK_ESP32.yml +11 -0
- data/vendor/board-maps/yaml/SPARKLEMOTION_ESP32.yml +12 -0
- data/vendor/board-maps/yaml/SQUIXL.yml +7 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER.yml +31 -0
- data/vendor/board-maps/yaml/THINGPULSE_EPULSE_FEATHER_C6.yml +14 -0
- data/vendor/board-maps/yaml/TINYC6.yml +25 -0
- data/vendor/board-maps/yaml/T_LORA_PAGER.yml +6 -0
- data/vendor/board-maps/yaml/T_WATCH_S3.yml +7 -0
- data/vendor/board-maps/yaml/T_WATCH_S3_ULTRA.yml +6 -0
- data/vendor/board-maps/yaml/UPESY_EDU_ESP32.yml +28 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_BASIC.yml +13 -0
- data/vendor/board-maps/yaml/UPESY_ESP32C3_MINI.yml +12 -0
- data/vendor/board-maps/yaml/UPESY_ESP32S3_BASIC.yml +42 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_01.yml +6 -0
- data/vendor/board-maps/yaml/VIRALINK_GATE32_11.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32S3_TOUCH_LCD_128.yml +8 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_147.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_RELAY_6CH.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_143.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_164.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_18.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_191.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_AMOLED_241.yml +7 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_146.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_169.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_185_BOX.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_21.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_28.yml +41 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_4.yml +36 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_43B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_5B.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_TOUCH_LCD_7.yml +38 -0
- data/vendor/board-maps/yaml/WAVESHARE_ESP32_S3_ZERO.yml +36 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_MATRIX.yml +48 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +1 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_PIZERO.yml +47 -0
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +1 -0
- data/vendor/board-maps/yaml/WEACT_STUDIO_ESP32C3.yml +14 -0
- data/vendor/board-maps/yaml/WS_ESP32_S3_MATRIX.yml +38 -0
- data/vendor/board-maps/yaml/WT32_SC01_PLUS.yml +7 -0
- data/vendor/board-maps/yaml/WiFiduinoV2.yml +1 -0
- data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -1
- data/vendor/board-maps/yaml/XIAO_ESP32C6.yml +22 -0
- data/vendor/board-maps/yaml/XIAO_ESP32S3_PLUS.yml +46 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V2.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_AMP_V3.yml +28 -0
- data/vendor/board-maps/yaml/YB_ESP32S3_ETH.yml +40 -0
- data/vendor/board-maps/yaml/mercury.yml +20 -0
- data/vendor/board-maps/yaml/unphone9.yml +8 -0
- metadata +259 -105
- data/.vscode/settings.json +0 -5
- data/.vscode/tasks.json +0 -20
- data/HARDWARE.md +0 -264
- data/benchmarks/i2c_ssd1306_refresh.rb +0 -84
- data/examples/advanced/m5_env.rb +0 -48
- data/examples/advanced/rotary_encoder_mac_volume.rb +0 -48
- data/examples/advanced/ssd1306_time_temp_rh.rb +0 -48
- data/examples/analog_io/ads1115.rb +0 -57
- data/examples/analog_io/ads1118.rb +0 -73
- data/examples/analog_io/dac_loopback.rb +0 -34
- data/examples/analog_io/input.rb +0 -55
- data/examples/connection/tcp.rb +0 -34
- data/examples/digital_io/button.rb +0 -13
- data/examples/digital_io/rotary_encoder.rb +0 -26
- data/examples/display/hd44780.png +0 -0
- data/examples/display/hd44780.rb +0 -39
- data/examples/display/ssd1306.rb +0 -40
- data/examples/display/ssd1306_s2_pico.rb +0 -29
- data/examples/eeprom/built_in.rb +0 -32
- data/examples/i2c/search.rb +0 -55
- data/examples/led/apa102_bounce.rb +0 -33
- data/examples/led/apa102_breathe.rb +0 -45
- data/examples/led/builtin_blink.rb +0 -12
- data/examples/led/seven_segment_char_echo.rb +0 -15
- data/examples/led/ws2812_bounce.rb +0 -32
- data/examples/led/ws2812_builtin_blink.rb +0 -21
- data/examples/motor/l298.rb +0 -43
- data/examples/motor/servo.rb +0 -16
- data/examples/motor/stepper.png +0 -0
- data/examples/motor/stepper.rb +0 -43
- data/examples/pulse_io/buzzer.rb +0 -30
- data/examples/pulse_io/ir_transmitter.rb +0 -55
- data/examples/rtc/ds3231.rb +0 -48
- data/examples/sensor/aht10.rb +0 -19
- data/examples/sensor/aht20.rb +0 -19
- data/examples/sensor/bme280.rb +0 -38
- data/examples/sensor/bmp180.rb +0 -22
- data/examples/sensor/dht.rb +0 -24
- data/examples/sensor/ds18b20.rb +0 -58
- data/examples/sensor/generic_pir.rb +0 -25
- data/examples/sensor/hcsr04.rb +0 -14
- data/examples/sensor/htu21d.rb +0 -54
- data/examples/sensor/htu31d.rb +0 -35
- data/examples/sensor/neat_tph_readings.rb +0 -26
- data/examples/sensor/qmp6988.rb +0 -53
- data/examples/sensor/rcwl9620.rb +0 -15
- data/examples/sensor/sht3x.rb +0 -34
- data/examples/spi/input_register.rb +0 -50
- data/examples/spi/output_register.rb +0 -49
- data/examples/spi/ssd_through_register.rb +0 -40
- data/examples/spi/two_registers.rb +0 -46
- data/examples/uart/bit_bang_read.rb +0 -16
- data/examples/uart/bit_bang_write.rb +0 -16
- data/examples/uart/board_passthrough.rb +0 -34
- data/examples/uart/hardware_loopback.rb +0 -16
- data/lib/denko/analog_io/sensor.rb +0 -6
- data/lib/denko/eeprom/built_in.rb +0 -69
- data/lib/denko/fonts.rb +0 -106
- data/lib/denko/sensor/virtual.rb +0 -42
- data/src/lib/DenkoIROutESP.cpp +0 -26
- data/test/eeprom/built_in_test.rb +0 -61
- data/tutorial/01-led/led.fzz +0 -0
- data/tutorial/01-led/led.pdf +0 -0
- data/tutorial/01-led/led.rb +0 -73
- data/tutorial/02-button/button.fzz +0 -0
- data/tutorial/02-button/button.pdf +0 -0
- data/tutorial/02-button/button.rb +0 -64
- data/tutorial/03-potentiometer/potentiometer.fzz +0 -0
- data/tutorial/03-potentiometer/potentiometer.pdf +0 -0
- data/tutorial/03-potentiometer/potentiometer.rb +0 -62
- data/tutorial/04-pwm_led/pwm_led.fzz +0 -0
- data/tutorial/04-pwm_led/pwm_led.pdf +0 -0
- data/tutorial/04-pwm_led/pwm_led.rb +0 -66
- data/tutorial/05-rgb_led/rgb_led.fzz +0 -0
- data/tutorial/05-rgb_led/rgb_led.pdf +0 -0
- data/tutorial/05-rgb_led/rgb_led.rb +0 -58
- data/tutorial/05-rgb_led/rgb_mapping.rb +0 -76
- data/vendor/board-maps/yaml/STAMP_S3.yml +0 -8
- /data/vendor/board-maps/yaml/{BRIDGETEK_IDM2040-7A.yml → BRIDGETEK_IDM2040_43A.yml} +0 -0
- /data/vendor/board-maps/yaml/{heltec_wifi_32_lora_V3.yml → HELTEC_WIRELESS_STICK_V3.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack_Core_ESP32.yml → M5STACK_CORE.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stamp_Pico.yml → M5STACK_STAMP_PICO.yml} +0 -0
- /data/vendor/board-maps/yaml/{M5Stack-Timer-CAM.yml → M5STACK_TIMER_CAM.yml} +0 -0
data/test/rtc/ds3231_test.rb
CHANGED
@@ -6,47 +6,46 @@ class DS3231Test < Minitest::Test
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def bus
|
9
|
-
|
10
|
-
@bus = Denko::I2C::Bus.new(board: board, pin:5)
|
11
|
-
@bus
|
9
|
+
@bus ||= Denko::I2C::Bus.new(board: board)
|
12
10
|
end
|
13
|
-
|
11
|
+
|
14
12
|
def part
|
15
|
-
@part ||= Denko::RTC::DS3231.new(bus: bus
|
13
|
+
@part ||= Denko::RTC::DS3231.new(bus: bus)
|
16
14
|
end
|
17
|
-
|
15
|
+
|
18
16
|
def test_time_to_bcd
|
19
17
|
time = Time.new(2000, 1, 1, 0, 0, 0.0)
|
20
18
|
bytes = part.time_to_bcd(time)
|
21
19
|
assert_equal bytes, [0, 0, 0, 6, 1, 1, 48]
|
22
20
|
end
|
23
|
-
|
21
|
+
|
24
22
|
def test_bcd_to_time
|
25
23
|
bytes = [0, 0, 0, 6, 1, 1, 48]
|
26
24
|
time = part.bcd_to_time(bytes)
|
27
25
|
assert_equal time, Time.new(2000, 1, 1, 0, 0, 0.0)
|
28
26
|
end
|
29
|
-
|
27
|
+
|
30
28
|
def test_time=
|
31
|
-
mock = Minitest::Mock.new.expect :call, nil, [[0,
|
29
|
+
mock = Minitest::Mock.new.expect :call, nil, [[0, 0, 0, 0, 6, 1, 1, 48]]
|
32
30
|
part.stub(:i2c_write, mock) do
|
33
31
|
part.time = Time.new(2000, 1, 1, 0, 0, 0.0)
|
34
32
|
end
|
35
33
|
mock.verify
|
36
34
|
end
|
37
|
-
|
35
|
+
|
38
36
|
def test_read
|
39
|
-
board.
|
40
|
-
|
37
|
+
board.inject_component_update(bus, "104-0,0,0,6,1,1,48")
|
38
|
+
|
41
39
|
mock = Minitest::Mock.new.expect :call, nil, [part.address, 0x00, 7, 100000, false]
|
42
|
-
bus.stub(:
|
40
|
+
bus.stub(:read_nb, mock) do
|
43
41
|
part.time
|
44
42
|
end
|
45
43
|
mock.verify
|
46
44
|
end
|
47
|
-
|
45
|
+
|
48
46
|
def test_pre_callback_filter
|
49
47
|
mock = Minitest::Mock.new.expect :call, nil, [Time.new(2000, 1, 1, 0, 0, 0.0)]
|
48
|
+
part.read_nb
|
50
49
|
part.stub(:update_state, mock) do
|
51
50
|
bus.send(:update, "104-0,0,0,6,1,1,48")
|
52
51
|
end
|
data/test/sensor/dht_test.rb
CHANGED
@@ -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:
|
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.
|
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
|
-
assert_equal result, {
|
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
|
data/test/sensor/ds18b20_test.rb
CHANGED
@@ -17,14 +17,10 @@ class DS18B20Test < Minitest::Test
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_decode_temperatures
|
20
|
-
assert_equal
|
21
|
-
|
22
|
-
assert_equal
|
23
|
-
|
24
|
-
assert_equal({ celsius: -10.125, fahrenheit: 13.775 },
|
25
|
-
part.decode_temperature([0b0101_1110,0b1111_1111]))
|
26
|
-
assert_equal({ celsius: -55, fahrenheit: -67 },
|
27
|
-
part.decode_temperature([0b1001_0000,0b1111_1100]))
|
20
|
+
assert_equal 125, part.decode_temperature([0b1101_0000,0b0000_0111])
|
21
|
+
assert_equal 0, part.decode_temperature([0b0000_0000,0b0000_0000])
|
22
|
+
assert_equal -10.125, part.decode_temperature([0b0101_1110,0b1111_1111])
|
23
|
+
assert_equal -55, part.decode_temperature([0b1001_0000,0b1111_1100])
|
28
24
|
end
|
29
25
|
|
30
26
|
def test_decode_resolution
|
@@ -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
|
-
|
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
|
@@ -14,29 +10,45 @@ class SPIBusTest < Minitest::Test
|
|
14
10
|
end
|
15
11
|
|
16
12
|
def part
|
17
|
-
@bus ||= Denko::SPI::Bus.new(board: board)
|
13
|
+
@bus ||= Denko::SPI::Bus.new(board: board, index: 5)
|
18
14
|
end
|
19
15
|
|
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
|
-
mock = Minitest::Mock.new.expect :call, nil, [PIN], **OPTIONS
|
36
|
+
mock = Minitest::Mock.new.expect :call, nil, [5, PIN], **OPTIONS
|
25
37
|
board.stub(:spi_transfer, mock) do
|
26
38
|
part.transfer(PIN, **OPTIONS)
|
27
39
|
end
|
28
40
|
mock.verify
|
29
41
|
end
|
30
|
-
|
42
|
+
|
31
43
|
def test_listen
|
32
|
-
mock = Minitest::Mock.new.expect :call, nil, [PIN], **OPTIONS
|
44
|
+
mock = Minitest::Mock.new.expect :call, nil, [5, PIN], **OPTIONS
|
33
45
|
board.stub(:spi_listen, mock) do
|
34
46
|
part.listen(PIN, **OPTIONS)
|
35
47
|
end
|
36
48
|
mock.verify
|
37
49
|
end
|
38
|
-
|
39
|
-
def
|
50
|
+
|
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
|
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(255)
|
74
|
-
assert_empty part.components
|
75
|
-
end
|
76
66
|
end
|
@@ -16,14 +16,14 @@ class InputRegisterTest < Minitest::Test
|
|
16
16
|
def part
|
17
17
|
@part ||= Denko::SPI::InputRegister.new(options)
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def button
|
21
21
|
@button ||= Denko::DigitalIO::Button.new(board: part, pin: 0)
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_state_setup
|
25
|
-
assert_equal
|
26
|
-
assert_equal
|
25
|
+
assert_equal Array.new(16) { false }, part.reading_pins
|
26
|
+
assert_equal Array.new(16) { false }, part.listening_pins
|
27
27
|
refute_nil part.callbacks[:board_proxy]
|
28
28
|
end
|
29
29
|
|
@@ -34,7 +34,7 @@ class InputRegisterTest < Minitest::Test
|
|
34
34
|
end
|
35
35
|
mock.verify
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
def test_listen
|
39
39
|
mock = Minitest::Mock.new.expect :call, nil, [9], read: 2, frequency: 800000, mode: 2, bit_order: :lsbfirst
|
40
40
|
bus.stub(:listen, mock) do
|
@@ -42,7 +42,7 @@ class InputRegisterTest < Minitest::Test
|
|
42
42
|
end
|
43
43
|
mock.verify
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def test_stop
|
47
47
|
mock = Minitest::Mock.new.expect :call, nil, [9]
|
48
48
|
bus.stub(:stop, mock) do
|
@@ -50,7 +50,7 @@ class InputRegisterTest < Minitest::Test
|
|
50
50
|
end
|
51
51
|
mock.verify
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
def test_updates_child_components
|
55
55
|
button
|
56
56
|
part.update("1")
|
@@ -58,7 +58,7 @@ class InputRegisterTest < Minitest::Test
|
|
58
58
|
part.update("0")
|
59
59
|
assert button.low?
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
def test_bit_array_conversion_and_state_update
|
63
63
|
part.update("127")
|
64
64
|
assert_equal [1,1,1,1,1,1,1,0], part.state
|
@@ -67,7 +67,7 @@ class InputRegisterTest < Minitest::Test
|
|
67
67
|
new_part.update("127,128")
|
68
68
|
assert_equal [1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1], new_part.state
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def test_callbacks_get_bit_array
|
72
72
|
mock = Minitest::Mock.new.expect :call, nil, [[1,1,1,1,1,1,1,0]]
|
73
73
|
part.add_callback do |data|
|
@@ -76,11 +76,11 @@ class InputRegisterTest < Minitest::Test
|
|
76
76
|
part.update("127")
|
77
77
|
mock.verify
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def test_read_proxy
|
81
81
|
# Stop automatic listening first.
|
82
82
|
button.stop
|
83
|
-
|
83
|
+
|
84
84
|
# Give #read some value so it stops blocking.
|
85
85
|
Thread.new do
|
86
86
|
sleep(0.01) while !part.callbacks[:force_update]
|
@@ -101,12 +101,12 @@ class InputRegisterTest < Minitest::Test
|
|
101
101
|
part.stub(:listen, mock) do
|
102
102
|
# Tells the register to start listening when it initializees.
|
103
103
|
button
|
104
|
-
|
104
|
+
|
105
105
|
# Should not make a second listen call to the board.
|
106
106
|
Denko::DigitalIO::Button.new(board: part, pin: 1)
|
107
107
|
end
|
108
108
|
mock.verify
|
109
|
-
|
109
|
+
|
110
110
|
expected_array = Array.new(options[:bytes] * 8) { false }
|
111
111
|
expected_array[0] = true
|
112
112
|
expected_array[1] = true
|
@@ -114,26 +114,26 @@ class InputRegisterTest < Minitest::Test
|
|
114
114
|
# Should be listening to the lowest 2 bits now.
|
115
115
|
assert_equal expected_array, part.instance_variable_get(:@listening_pins)
|
116
116
|
end
|
117
|
-
|
117
|
+
|
118
118
|
def test_stop_listener_proxy
|
119
119
|
button
|
120
|
-
|
120
|
+
|
121
121
|
# Calling stop on a child part, when only it is listening, should call stop on the register too.
|
122
122
|
mock = Minitest::Mock.new.expect :call, nil
|
123
123
|
part.stub(:stop, mock) do
|
124
124
|
button.stop
|
125
125
|
end
|
126
126
|
mock.verify
|
127
|
-
|
127
|
+
|
128
128
|
# Check listener tracking is correct.
|
129
129
|
assert_equal Array.new(options[:bytes] * 8) { false }, part.instance_variable_get(:@listening_pins)
|
130
130
|
refute part.any_listening
|
131
131
|
end
|
132
132
|
|
133
|
-
def
|
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
|
@@ -16,7 +16,7 @@ class OutputRegisterTest < Minitest::Test
|
|
16
16
|
def part
|
17
17
|
@part ||= Denko::SPI::OutputRegister.new(options)
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def led
|
21
21
|
@led ||= Denko::LED.new(board: part, pin: 0)
|
22
22
|
end
|
@@ -26,53 +26,42 @@ class OutputRegisterTest < Minitest::Test
|
|
26
26
|
mock = Minitest::Mock.new.expect :call, nil, [9], write: [255,127], frequency: 800000, mode: 2, bit_order: :lsbfirst
|
27
27
|
bus.stub(:transfer, mock) do
|
28
28
|
arr = Array.new(16) { 1 }; arr[7] = 0
|
29
|
-
part.instance_variable_set(:@state, arr)
|
29
|
+
part.instance_variable_set(:@state, arr)
|
30
30
|
part.write
|
31
31
|
end
|
32
32
|
mock.verify
|
33
33
|
end
|
34
|
-
|
35
|
-
def test_state_setup
|
36
|
-
assert_equal part.instance_variable_get(:@write_delay), 0.001
|
37
|
-
assert_equal part.instance_variable_get(:@buffer_writes), true
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_write_buffering_control
|
41
|
-
new_part = Denko::SPI::OutputRegister.new(options.merge(buffer_writes: false, write_delay: 0.5))
|
42
|
-
assert_equal new_part.instance_variable_get(:@write_delay), 0.5
|
43
|
-
assert_equal new_part.instance_variable_get(:@buffer_writes), false
|
44
|
-
end
|
45
|
-
|
34
|
+
|
46
35
|
def test_updates_and_writes_state_for_children
|
47
36
|
led
|
48
|
-
|
37
|
+
|
49
38
|
mock = Minitest::Mock.new.expect :call, nil, [9], write: [0, 1], frequency: 800000, mode: 2, bit_order: :lsbfirst
|
50
39
|
bus.stub(:transfer, mock) do
|
51
40
|
led.on
|
52
41
|
sleep 0.050
|
53
42
|
end
|
54
43
|
mock.verify
|
55
|
-
|
44
|
+
|
56
45
|
expected_state = Array.new(options[:bytes] * 8) { |i| 0 }
|
57
46
|
expected_state[0] = 1
|
58
47
|
|
59
48
|
assert_equal expected_state, part.state
|
60
49
|
end
|
61
|
-
|
50
|
+
|
62
51
|
def test_implements_digital_read_for_children
|
63
52
|
led
|
64
|
-
|
53
|
+
|
65
54
|
mock = Minitest::Mock.new.expect :call, nil, [0]
|
66
55
|
part.stub(:digital_read, mock) do
|
67
56
|
led.board.digital_read(led.pin)
|
68
57
|
end
|
69
58
|
mock.verify
|
70
59
|
end
|
71
|
-
|
60
|
+
|
72
61
|
def test_bit_and_byte_orders_correct
|
73
62
|
part.instance_variable_set(:@bytes, 2)
|
74
63
|
bit_array = "0101010100001111".split("")
|
75
|
-
|
64
|
+
|
76
65
|
mock = Minitest::Mock.new.expect :call, nil, [9], write: [0b11110000, 0b10101010], frequency: 800000, mode: 2, bit_order: :lsbfirst
|
77
66
|
bus.stub(:transfer, mock) do
|
78
67
|
part.instance_variable_set(:@state, bit_array)
|
@@ -80,14 +69,7 @@ class OutputRegisterTest < Minitest::Test
|
|
80
69
|
sleep 0.002
|
81
70
|
end
|
82
71
|
mock.verify
|
83
|
-
|
72
|
+
|
84
73
|
assert_equal part.state, bit_array
|
85
74
|
end
|
86
|
-
|
87
|
-
def test_disable_buffering
|
88
|
-
part.instance_variable_set(:@buffer_writes, false)
|
89
|
-
part.instance_variable_set(:@write_delay, 1)
|
90
|
-
led.on
|
91
|
-
assert_nil part.thread
|
92
|
-
end
|
93
75
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class SPITester
|
4
|
+
include Denko::SPI::Peripheral
|
5
|
+
|
6
|
+
def initialize_pins(options={})
|
7
|
+
super(options)
|
8
|
+
proxy_pin :other_pin, Denko::DigitalIO::Output
|
9
|
+
end
|
10
|
+
|
11
|
+
def some_callback(data)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class SPITesterSingle
|
16
|
+
include Denko::SPI::Peripheral
|
17
|
+
end
|
18
|
+
|
19
|
+
class SPIPeripheralTest < Minitest::Test
|
20
|
+
def board
|
21
|
+
@board ||= BoardMock.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def bus
|
25
|
+
@bus ||= Denko::SPI::Bus.new(board: board)
|
26
|
+
end
|
27
|
+
|
28
|
+
def options
|
29
|
+
{ bus: bus, pins: {select: 9, other_pin: 10}, spi_frequency: 800000, spi_mode: 2, spi_bit_order: :lsbfirst}
|
30
|
+
end
|
31
|
+
|
32
|
+
def part
|
33
|
+
@part ||= SPITester.new(options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_string_data_converts_to_bytes_for_callbacks
|
37
|
+
part.on_data do |bytes|
|
38
|
+
part.some_callback(bytes)
|
39
|
+
end
|
40
|
+
mock = Minitest::Mock.new.expect :call, nil, [[127,255]]
|
41
|
+
part.stub(:some_callback, mock) do
|
42
|
+
board.update("#{part.select.pin}:127,255")
|
43
|
+
end
|
44
|
+
mock.verify
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_array_data_reaches_callbacks
|
48
|
+
part.on_data do |bytes|
|
49
|
+
part.some_callback(bytes)
|
50
|
+
end
|
51
|
+
mock = Minitest::Mock.new.expect :call, nil, [[127,255]]
|
52
|
+
part.stub(:some_callback, mock) do
|
53
|
+
part.select.update([127,255])
|
54
|
+
end
|
55
|
+
mock.verify
|
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
|
73
|
+
end
|