denko 0.13.1 → 0.13.3
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 +2 -4
- data/.github/workflows/build_esp32.yml +2 -3
- data/.github/workflows/build_esp8266.yml +2 -3
- data/.github/workflows/build_megaavr.yml +3 -5
- data/.github/workflows/build_ra4m1.yml +57 -0
- data/.github/workflows/build_rp2040.yml +2 -4
- data/.github/workflows/build_sam3x.yml +1 -3
- data/.github/workflows/build_samd.yml +2 -4
- data/CHANGELOG.md +100 -0
- data/DEPS_CLI.md +13 -6
- data/DEPS_IDE.md +14 -7
- data/HARDWARE.md +104 -80
- data/README.md +19 -28
- data/benchmarks/i2c_ssd1306_refresh.rb +79 -0
- data/examples/analog_io/ads1115.rb +57 -0
- data/examples/analog_io/ads1118.rb +8 -9
- data/examples/analog_io/dac_loopback.rb +6 -4
- data/examples/analog_io/input.rb +39 -36
- data/examples/connection/tcp.rb +1 -1
- data/examples/display/hd44780.rb +3 -3
- data/examples/display/ssd1306.rb +1 -1
- data/lib/denko/analog_io/ads1115.rb +61 -0
- data/lib/denko/analog_io/ads1118.rb +10 -120
- data/lib/denko/analog_io/ads111x.rb +123 -0
- data/lib/denko/analog_io/output.rb +2 -1
- data/lib/denko/analog_io.rb +2 -0
- data/lib/denko/behaviors/reader.rb +14 -13
- data/lib/denko/behaviors/subcomponents.rb +2 -2
- data/lib/denko/board/core.rb +1 -1
- data/lib/denko/board/i2c.rb +1 -4
- data/lib/denko/board/led_array.rb +3 -6
- data/lib/denko/board/map.rb +9 -0
- data/lib/denko/board/servo.rb +2 -6
- data/lib/denko/board.rb +32 -20
- data/lib/denko/connection/board_uart.rb +3 -3
- data/lib/denko/connection/flow_control.rb +10 -2
- data/lib/denko/digital_io/output.rb +1 -1
- data/lib/denko/display/hd44780.rb +18 -18
- data/lib/denko/led/seven_segment.rb +18 -19
- data/lib/denko/message.rb +7 -15
- data/lib/denko/pulse_io/ir_transmitter.rb +1 -2
- data/lib/denko/version.rb +1 -1
- data/lib/denko_cli/packages.rb +7 -1
- data/lib/denko_cli/targets.rb +8 -5
- data/lib/denko_cli/usage.txt +8 -4
- data/src/denko_ethernet.ino +15 -23
- data/src/denko_serial.ino +3 -14
- data/src/denko_wifi.ino +72 -52
- data/src/lib/Denko.cpp +14 -6
- data/src/lib/Denko.h +6 -17
- data/src/lib/DenkoCoreIO.cpp +3 -3
- data/src/lib/DenkoDefines.h +73 -19
- data/src/lib/DenkoEEPROM.cpp +9 -1
- data/src/lib/DenkoI2C.cpp +11 -9
- data/src/lib/DenkoLEDArray.cpp +5 -11
- data/test/analog_io/input_test.rb +3 -3
- data/test/analog_io/output_test.rb +1 -1
- data/test/analog_io/potentiometer_test.rb +2 -2
- data/test/behaviors/bus_peripheral_addressed.rb +1 -1
- data/test/behaviors/bus_peripheral_test.rb +1 -1
- data/test/behaviors/callbacks_test.rb +4 -4
- data/test/behaviors/component_test.rb +2 -2
- data/test/behaviors/listener_test.rb +3 -3
- data/test/behaviors/poller_test.rb +3 -3
- data/test/behaviors/reader_test.rb +11 -4
- data/test/behaviors/subcomponents_test.rb +1 -1
- data/test/behaviors/threaded_test.rb +7 -7
- data/test/board/board_test.rb +8 -8
- data/test/board/core_test.rb +12 -12
- data/test/board/eeprom_test.rb +2 -2
- data/test/board/helper_test.rb +0 -4
- data/test/board/i2c_test.rb +5 -5
- data/test/board/infrared_test.rb +1 -1
- data/test/board/message_test.rb +1 -1
- data/test/board/one_wire_test.rb +4 -4
- data/test/board/pulse_test.rb +2 -2
- data/test/board/servo_test.rb +3 -3
- data/test/board/spi_test.rb +3 -3
- data/test/board/tone_test.rb +2 -2
- data/test/connection/serial_test.rb +13 -13
- data/test/digital_io/input_test.rb +7 -7
- data/test/digital_io/output_test.rb +5 -5
- data/test/digital_io/rotary_encoder_test.rb +4 -4
- data/test/display/hd44780_test.rb +11 -1
- data/test/eeprom/built_in_test.rb +1 -1
- data/test/i2c/bus_test.rb +5 -5
- data/test/i2c/peripheral_test.rb +4 -4
- data/test/led/base_test.rb +2 -2
- data/test/led/rgb_test.rb +6 -6
- data/test/led/seven_segment_test.rb +36 -14
- data/test/motor/servo_test.rb +6 -6
- data/test/motor/stepper_test.rb +5 -5
- data/test/one_wire/bus_test.rb +9 -9
- data/test/one_wire/peripheral_test.rb +17 -17
- data/test/pulse_io/buzzer_test.rb +4 -4
- data/test/pulse_io/ir_transmitter_test.rb +2 -2
- data/test/pulse_io/pwm_output_test.rb +4 -4
- data/test/rtc/ds3231_test.rb +4 -4
- data/test/sensor/dht_test.rb +3 -3
- data/test/sensor/ds18b20_test.rb +9 -9
- data/test/spi/bus_test.rb +4 -4
- data/test/spi/input_register_test.rb +8 -8
- data/test/spi/output_register_test.rb +4 -4
- data/test/test_helper.rb +17 -2
- data/test/uart/bitbang_test.rb +3 -3
- metadata +7 -350
- data/vendor/board-maps/.gitignore +0 -56
- data/vendor/board-maps/.gitmodules +0 -21
- data/vendor/board-maps/BoardMap.h +0 -1364
- data/vendor/board-maps/README.md +0 -51
- data/vendor/board-maps/lib/boards_parser.rb +0 -66
- data/vendor/board-maps/lib/header_parser.rb +0 -164
- data/vendor/board-maps/run.rb +0 -47
- data/vendor/board-maps/yaml/0XCB_HELIOS.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2.yml +0 -25
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_REVTFT.yml +0 -25
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S2_TFT.yml +0 -27
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3.yml +0 -29
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_NOPSRAM.yml +0 -29
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_REVTFT.yml +0 -25
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32S3_TFT.yml +0 -27
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_ESP32_V2.yml +0 -30
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_CAN.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_DVI.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_PROP_MAKER.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_RFM.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_SCORPIO.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_THINKINK.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_FEATHER_RP2040_USB_HOST.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_ESP32.yml +0 -24
- data/vendor/board-maps/yaml/ADAFRUIT_ITSYBITSY_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_KB2040_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_MACROPAD_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_MATRIXPORTAL_ESP32S3.yml +0 -16
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32C3.yml +0 -12
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S2.yml +0 -22
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32S3_NOPSRAM.yml +0 -20
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_ESP32_PICO.yml +0 -27
- data/vendor/board-maps/yaml/ADAFRUIT_QTPY_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_STEMMAFRIEND_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/ADAFRUIT_TRINKEYQT_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/ALKS.yml +0 -34
- data/vendor/board-maps/yaml/AMPERKA_WIFI_SLOT.yml +0 -16
- data/vendor/board-maps/yaml/AVR_ADK.yml +0 -24
- data/vendor/board-maps/yaml/AVR_BT.yml +0 -16
- data/vendor/board-maps/yaml/AVR_CIRCUITPLAY.yml +0 -14
- data/vendor/board-maps/yaml/AVR_DUEMILANOVE.yml +0 -16
- data/vendor/board-maps/yaml/AVR_ESPLORA.yml +0 -20
- data/vendor/board-maps/yaml/AVR_ETHERNET.yml +0 -16
- data/vendor/board-maps/yaml/AVR_FIO.yml +0 -16
- data/vendor/board-maps/yaml/AVR_GEMMA.yml +0 -6
- data/vendor/board-maps/yaml/AVR_INDUSTRIAL101.yml +0 -20
- data/vendor/board-maps/yaml/AVR_LEONARDO.yml +0 -20
- data/vendor/board-maps/yaml/AVR_LEONARDO_ETH.yml +0 -20
- data/vendor/board-maps/yaml/AVR_LILYPAD.yml +0 -16
- data/vendor/board-maps/yaml/AVR_LILYPAD_USB.yml +0 -20
- data/vendor/board-maps/yaml/AVR_LININO_ONE.yml +0 -20
- data/vendor/board-maps/yaml/AVR_MEGA.yml +0 -24
- data/vendor/board-maps/yaml/AVR_MEGA2560.yml +0 -24
- data/vendor/board-maps/yaml/AVR_MICRO.yml +0 -20
- data/vendor/board-maps/yaml/AVR_MINI.yml +0 -16
- data/vendor/board-maps/yaml/AVR_NANO.yml +0 -16
- data/vendor/board-maps/yaml/AVR_NANO_EVERY.yml +0 -22
- data/vendor/board-maps/yaml/AVR_NG.yml +0 -16
- data/vendor/board-maps/yaml/AVR_PRO.yml +0 -16
- data/vendor/board-maps/yaml/AVR_ROBOT_CONTROL.yml +0 -22
- data/vendor/board-maps/yaml/AVR_ROBOT_MOTOR.yml +0 -19
- data/vendor/board-maps/yaml/AVR_UNO.yml +0 -16
- data/vendor/board-maps/yaml/AVR_UNO_WIFI_DEV_ED.yml +0 -16
- data/vendor/board-maps/yaml/AVR_UNO_WIFI_REV2.yml +0 -22
- data/vendor/board-maps/yaml/AVR_YUN.yml +0 -20
- data/vendor/board-maps/yaml/AVR_YUNMINI.yml +0 -20
- data/vendor/board-maps/yaml/AirM2M_CORE_ESP32C3.yml +0 -14
- data/vendor/board-maps/yaml/BEE_DATA_LOGGER.yml +0 -39
- data/vendor/board-maps/yaml/BPI_BIT.yml +0 -9
- data/vendor/board-maps/yaml/BPI_LEAF_S3.yml +0 -31
- data/vendor/board-maps/yaml/BRIDGETEK_IDM2040-7A.yml +0 -48
- data/vendor/board-maps/yaml/BeeMotionS3.yml +0 -40
- data/vendor/board-maps/yaml/Bee_Motion.yml +0 -27
- data/vendor/board-maps/yaml/Bee_Motion_Mini.yml +0 -1
- data/vendor/board-maps/yaml/Bee_S3.yml +0 -38
- data/vendor/board-maps/yaml/CHALLENGER_2040_LORA_RP2040.yml +0 -39
- data/vendor/board-maps/yaml/CHALLENGER_2040_LTE_RP2040.yml +0 -38
- data/vendor/board-maps/yaml/CHALLENGER_2040_NFC_RP2040.yml +0 -32
- data/vendor/board-maps/yaml/CHALLENGER_2040_SDRTC_RP2040.yml +0 -36
- data/vendor/board-maps/yaml/CHALLENGER_2040_SUBGHZ_RP2040.yml +0 -39
- data/vendor/board-maps/yaml/CHALLENGER_2040_UWB_RP2040.yml +0 -39
- data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_BLE_RP2040.yml +0 -42
- data/vendor/board-maps/yaml/CHALLENGER_2040_WIFI_RP2040.yml +0 -38
- data/vendor/board-maps/yaml/CHALLENGER_NB_2040_WIFI_RP2040.yml +0 -38
- data/vendor/board-maps/yaml/CRABIK_SLOT_ESP32_S3.yml +0 -19
- data/vendor/board-maps/yaml/CYTRON_MAKER_FEATHER_AIOT_S3.yml +0 -26
- data/vendor/board-maps/yaml/CYTRON_MAKER_NANO_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/CYTRON_MAKER_PI_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/CoreESP32.yml +0 -49
- data/vendor/board-maps/yaml/D1_MINI32.yml +0 -36
- data/vendor/board-maps/yaml/D1_UNO32.yml +0 -28
- data/vendor/board-maps/yaml/DATANOISETV_PICOADK.yml +0 -48
- data/vendor/board-maps/yaml/DENKY.yml +0 -26
- data/vendor/board-maps/yaml/DENKY_PICOV3.yml +0 -26
- data/vendor/board-maps/yaml/DENKY_WROOM32.yml +0 -26
- data/vendor/board-maps/yaml/DEPARTMENT_OF_ALCHEMY_MINIMAIN_ESP32S2.yml +0 -26
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_ESP32_C3.yml +0 -14
- data/vendor/board-maps/yaml/DFROBOT_BEETLE_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32E.yml +0 -44
- data/vendor/board-maps/yaml/DFROBOT_FIREBEETLE_2_ESP32S3.yml +0 -38
- data/vendor/board-maps/yaml/DFROBOT_ROMEO_ESP32S3.yml +0 -7
- data/vendor/board-maps/yaml/DPU_ESP32.yml +0 -26
- data/vendor/board-maps/yaml/DYDK.yml +0 -38
- data/vendor/board-maps/yaml/DYDK1A.yml +0 -37
- data/vendor/board-maps/yaml/DYDK1Av2.yml +0 -45
- data/vendor/board-maps/yaml/DYG.yml +0 -20
- data/vendor/board-maps/yaml/DYM.yml +0 -40
- data/vendor/board-maps/yaml/DYMv2.yml +0 -39
- data/vendor/board-maps/yaml/D_Duino_32.yml +0 -29
- data/vendor/board-maps/yaml/ELECTRONICCATS_HUNTERCAT_NFC.yml +0 -44
- data/vendor/board-maps/yaml/ESP320.yml +0 -8
- data/vendor/board-maps/yaml/ESP32C3_DEV.yml +0 -14
- data/vendor/board-maps/yaml/ESP32C3_M1_I_KIT.yml +0 -13
- data/vendor/board-maps/yaml/ESP32S2_DEV.yml +0 -33
- data/vendor/board-maps/yaml/ESP32S2_THING_PLUS.yml +0 -34
- data/vendor/board-maps/yaml/ESP32S2_USB.yml +0 -33
- data/vendor/board-maps/yaml/ESP32S3_CAM_LCD.yml +0 -7
- data/vendor/board-maps/yaml/ESP32S3_DEV.yml +0 -38
- data/vendor/board-maps/yaml/ESP32_DEV.yml +0 -26
- data/vendor/board-maps/yaml/ESP32_DEVKIT_LIPO.yml +0 -26
- data/vendor/board-maps/yaml/ESP32_EVB.yml +0 -7
- data/vendor/board-maps/yaml/ESP32_GATEWAY.yml +0 -13
- data/vendor/board-maps/yaml/ESP32_GATEWAY_C.yml +0 -13
- data/vendor/board-maps/yaml/ESP32_GATEWAY_E.yml +0 -13
- data/vendor/board-maps/yaml/ESP32_GATEWAY_F.yml +0 -13
- data/vendor/board-maps/yaml/ESP32_IOT_REDBOARD.yml +0 -27
- data/vendor/board-maps/yaml/ESP32_MICROMOD.yml +0 -24
- data/vendor/board-maps/yaml/ESP32_PICO.yml +0 -26
- data/vendor/board-maps/yaml/ESP32_POE.yml +0 -7
- data/vendor/board-maps/yaml/ESP32_POE_ISO.yml +0 -7
- data/vendor/board-maps/yaml/ESP32_S3_BOX.yml +0 -16
- data/vendor/board-maps/yaml/ESP32_S3_USB_OTG.yml +0 -11
- data/vendor/board-maps/yaml/ESP32_THING.yml +0 -27
- data/vendor/board-maps/yaml/ESP32_THING_PLUS.yml +0 -30
- data/vendor/board-maps/yaml/ESP32_THING_PLUS_C.yml +0 -30
- data/vendor/board-maps/yaml/ESP32_WROOM_DA.yml +0 -26
- data/vendor/board-maps/yaml/ESP32_WROVER_KIT.yml +0 -26
- data/vendor/board-maps/yaml/ESP8266_ADAFRUIT_HUZZAH.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_AGRUMINO_LEMON_V4.yml +0 -8
- data/vendor/board-maps/yaml/ESP8266_ARDUINO_PRIMO.yml +0 -7
- data/vendor/board-maps/yaml/ESP8266_ARDUINO_STAR_OTTO.yml +0 -7
- data/vendor/board-maps/yaml/ESP8266_ARDUINO_UNOWIFI.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_ESP01.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_ESP07.yml +0 -20
- data/vendor/board-maps/yaml/ESP8266_ESP12.yml +0 -20
- data/vendor/board-maps/yaml/ESP8266_ESP13.yml +0 -17
- data/vendor/board-maps/yaml/ESP8266_ESP210.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_ESPECTRO_CORE.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP12.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_ESPINO_ESP13.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V1.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_ESPRESSO_LITE_V2.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_GENERIC.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_INVENT_ONE.yml +0 -22
- data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12.yml +0 -20
- data/vendor/board-maps/yaml/ESP8266_NODEMCU_ESP12E.yml +0 -20
- data/vendor/board-maps/yaml/ESP8266_OAK.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_PHOENIX_V1.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_PHOENIX_V2.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_SCHIRMILABS_EDUINO_WIFI.yml +0 -25
- data/vendor/board-maps/yaml/ESP8266_SONOFF_BASIC.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_SONOFF_S20.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_SONOFF_SV.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_SONOFF_TH.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_THING.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_THING_DEV.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINI.yml +0 -18
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINILITE.yml +0 -18
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1MINIPRO.yml +0 -18
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1R1.yml +0 -25
- data/vendor/board-maps/yaml/ESP8266_WEMOS_D1WROOM02.yml +0 -18
- data/vendor/board-maps/yaml/ESP8266_WIO_LINK.yml +0 -9
- data/vendor/board-maps/yaml/ESP8266_XINABOX_CW01.yml +0 -9
- data/vendor/board-maps/yaml/ESPECTRO32.yml +0 -27
- data/vendor/board-maps/yaml/ESPea32.yml +0 -27
- data/vendor/board-maps/yaml/ESPino32.yml +0 -27
- data/vendor/board-maps/yaml/ET-Board.yml +0 -26
- data/vendor/board-maps/yaml/EXTREMEELEXTRONICS_RC2040.yml +0 -46
- data/vendor/board-maps/yaml/Edgebox-ESP-100.yml +0 -7
- data/vendor/board-maps/yaml/FEATHERS2.yml +0 -33
- data/vendor/board-maps/yaml/FEATHERS2NEO.yml +0 -30
- data/vendor/board-maps/yaml/FEATHERS3.yml +0 -29
- data/vendor/board-maps/yaml/FEATHER_ESP32.yml +0 -28
- data/vendor/board-maps/yaml/FLYBOARD2040_CORE.yml +0 -48
- data/vendor/board-maps/yaml/FRANZININHO_WIFI.yml +0 -33
- data/vendor/board-maps/yaml/FRANZININHO_WIFI_MSC.yml +0 -33
- data/vendor/board-maps/yaml/FROG_ESP32.yml +0 -26
- data/vendor/board-maps/yaml/FUNHOUSE_ESP32S2.yml +0 -22
- data/vendor/board-maps/yaml/GEN4_IOD.yml +0 -9
- data/vendor/board-maps/yaml/GENERIC_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/HEALTHYPI_4.yml +0 -27
- data/vendor/board-maps/yaml/HONEYLEMON.yml +0 -27
- data/vendor/board-maps/yaml/HORNBILL_ESP32_DEV.yml +0 -27
- data/vendor/board-maps/yaml/HORNBILL_ESP32_MINIMA.yml +0 -16
- data/vendor/board-maps/yaml/ILABS_2040_RPICO32_RP2040.yml +0 -47
- data/vendor/board-maps/yaml/IMBRIOS_LOGSENS_V1P1.yml +0 -19
- data/vendor/board-maps/yaml/INTOROBOT_ESP32_DEV.yml +0 -34
- data/vendor/board-maps/yaml/LILYGO_T_DISPLAY_S3.yml +0 -26
- data/vendor/board-maps/yaml/LOLIN32.yml +0 -27
- data/vendor/board-maps/yaml/LOLIN32_LITE.yml +0 -27
- data/vendor/board-maps/yaml/LOLIN_C3_MINI.yml +0 -14
- data/vendor/board-maps/yaml/LOLIN_D32.yml +0 -27
- data/vendor/board-maps/yaml/LOLIN_D32_PRO.yml +0 -27
- data/vendor/board-maps/yaml/LOLIN_S2_MINI.yml +0 -34
- data/vendor/board-maps/yaml/LOLIN_S2_PICO.yml +0 -34
- data/vendor/board-maps/yaml/LOLIN_S3.yml +0 -32
- data/vendor/board-maps/yaml/LOLIN_S3_MINI.yml +0 -32
- data/vendor/board-maps/yaml/LOLIN_S3_PRO.yml +0 -32
- data/vendor/board-maps/yaml/Lion_Bit_Dev_Board.yml +0 -18
- data/vendor/board-maps/yaml/LoPy.yml +0 -27
- data/vendor/board-maps/yaml/LoPy4.yml +0 -27
- data/vendor/board-maps/yaml/M5STACK_CORES3.yml +0 -8
- data/vendor/board-maps/yaml/M5STACK_Core2.yml +0 -9
- data/vendor/board-maps/yaml/M5STACK_FIRE.yml +0 -10
- data/vendor/board-maps/yaml/M5Stack-Timer-CAM.yml +0 -10
- data/vendor/board-maps/yaml/M5Stack_ATOM.yml +0 -10
- data/vendor/board-maps/yaml/M5Stack_ATOMS3.yml +0 -7
- data/vendor/board-maps/yaml/M5Stack_CoreInk.yml +0 -9
- data/vendor/board-maps/yaml/M5Stack_Core_ESP32.yml +0 -10
- data/vendor/board-maps/yaml/M5Stack_Station.yml +0 -10
- data/vendor/board-maps/yaml/M5Stick_C.yml +0 -10
- data/vendor/board-maps/yaml/MAGTAG29_ESP32S2.yml +0 -21
- data/vendor/board-maps/yaml/MELOPERO_COOKIE_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/MELOPERO_SHAKE_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/METRO_ESP32S2.yml +0 -34
- data/vendor/board-maps/yaml/MGBOT_IOTIK32A.yml +0 -27
- data/vendor/board-maps/yaml/MGBOT_IOTIK32B.yml +0 -27
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32DEVKIT.yml +0 -27
- data/vendor/board-maps/yaml/MH_ET_LIVE_ESP32MINIKIT.yml +0 -27
- data/vendor/board-maps/yaml/MICROS2.yml +0 -34
- data/vendor/board-maps/yaml/MOD_WIFI_ESP8266.yml +0 -9
- data/vendor/board-maps/yaml/Metro.yml +0 -8
- data/vendor/board-maps/yaml/NANO32.yml +0 -27
- data/vendor/board-maps/yaml/NANO_RP2040_CONNECT.yml +0 -35
- data/vendor/board-maps/yaml/NEBULAS3.yml +0 -33
- data/vendor/board-maps/yaml/NEKOSYSTEMS_BL2040_MINI.yml +0 -48
- data/vendor/board-maps/yaml/NULLBITS_BIT_C_PRO.yml +0 -48
- data/vendor/board-maps/yaml/Node32s.yml +0 -27
- data/vendor/board-maps/yaml/NodeMCU_32S.yml +0 -27
- data/vendor/board-maps/yaml/ODROID_ESP32.yml +0 -10
- data/vendor/board-maps/yaml/ONEHORSE_ESP32_DEV.yml +0 -24
- data/vendor/board-maps/yaml/OROCA_EDUBOT.yml +0 -33
- data/vendor/board-maps/yaml/PIMORONI_PGA2040.yml +0 -48
- data/vendor/board-maps/yaml/PROS3.yml +0 -28
- data/vendor/board-maps/yaml/PYCOM_GPY.yml +0 -27
- data/vendor/board-maps/yaml/Piranha.yml +0 -16
- data/vendor/board-maps/yaml/Pocket32.yml +0 -27
- data/vendor/board-maps/yaml/QUANTUM.yml +0 -26
- data/vendor/board-maps/yaml/RASPBERRY_PI_PICO.yml +0 -48
- data/vendor/board-maps/yaml/RASPBERRY_PI_PICO_W.yml +0 -48
- data/vendor/board-maps/yaml/REDPILL_ESP32S3.yml +0 -32
- data/vendor/board-maps/yaml/RMP.yml +0 -33
- data/vendor/board-maps/yaml/SAMD_CIRCUITPLAYGROUND_EXPRESS.yml +0 -12
- data/vendor/board-maps/yaml/SAMD_MKR1000.yml +0 -20
- data/vendor/board-maps/yaml/SAMD_MKRFox1200.yml +0 -19
- data/vendor/board-maps/yaml/SAMD_MKRGSM1400.yml +0 -15
- data/vendor/board-maps/yaml/SAMD_MKRNB1500.yml +0 -15
- data/vendor/board-maps/yaml/SAMD_MKRVIDOR4000.yml +0 -19
- data/vendor/board-maps/yaml/SAMD_MKRWAN1300.yml +0 -18
- data/vendor/board-maps/yaml/SAMD_MKRWAN1310.yml +0 -18
- data/vendor/board-maps/yaml/SAMD_MKRWIFI1010.yml +0 -19
- data/vendor/board-maps/yaml/SAMD_MKRZERO.yml +0 -19
- data/vendor/board-maps/yaml/SAMD_NANO_33_IOT.yml +0 -13
- data/vendor/board-maps/yaml/SAMD_TIAN.yml +0 -15
- data/vendor/board-maps/yaml/SAMD_ZERO.yml +0 -14
- data/vendor/board-maps/yaml/SAM_DUE.yml +0 -26
- data/vendor/board-maps/yaml/SAM_ZERO.yml +0 -15
- data/vendor/board-maps/yaml/SEEED_INDICATOR_RP2040.yml +0 -47
- data/vendor/board-maps/yaml/SEEED_XIAO_RP2040.yml +0 -29
- data/vendor/board-maps/yaml/SOLDERPARTY_RP2040_STAMP.yml +0 -48
- data/vendor/board-maps/yaml/SONOFF_DUALR3.yml +0 -26
- data/vendor/board-maps/yaml/SPARKFUN_PROMICRO_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/SPARKFUN_THINGPLUS_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/STAMP_S3.yml +0 -4
- data/vendor/board-maps/yaml/TAMC_TERMOD_S3.yml +0 -31
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1262.yml +0 -23
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1268.yml +0 -23
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1276.yml +0 -23
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1278.yml +0 -23
- data/vendor/board-maps/yaml/TBEAM_USE_RADIO_SX1280.yml +0 -23
- data/vendor/board-maps/yaml/TBeam.yml +0 -23
- data/vendor/board-maps/yaml/TINYPICO.yml +0 -26
- data/vendor/board-maps/yaml/TINYS2.yml +0 -33
- data/vendor/board-maps/yaml/TINYS3.yml +0 -25
- data/vendor/board-maps/yaml/TTGO-T-OI-PLUS_DEV.yml +0 -11
- data/vendor/board-maps/yaml/TTGO_LoRa32_V1.yml +0 -28
- data/vendor/board-maps/yaml/TTGO_LoRa32_V2.yml +0 -28
- data/vendor/board-maps/yaml/TTGO_LoRa32_v21new.yml +0 -28
- data/vendor/board-maps/yaml/TTGO_T1.yml +0 -27
- data/vendor/board-maps/yaml/TTGO_T7_V13_Mini32.yml +0 -27
- data/vendor/board-maps/yaml/TTGO_T7_V14_Mini32.yml +0 -27
- data/vendor/board-maps/yaml/TWATCH_2020_V1.yml +0 -10
- data/vendor/board-maps/yaml/TWATCH_2020_V2.yml +0 -10
- data/vendor/board-maps/yaml/TWATCH_2020_V3.yml +0 -10
- data/vendor/board-maps/yaml/TWATCH_BASE.yml +0 -10
- data/vendor/board-maps/yaml/TWatch.yml +0 -10
- data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver.yml +0 -18
- data/vendor/board-maps/yaml/Trueverit_ESP32_Universal_IoT_Driver_MK_II.yml +0 -18
- data/vendor/board-maps/yaml/UBLOX_NINA_W10.yml +0 -48
- data/vendor/board-maps/yaml/UBLOX_NORA_W10.yml +0 -43
- data/vendor/board-maps/yaml/UPESY_RP2040_DEVKIT.yml +0 -48
- data/vendor/board-maps/yaml/VALTRACK_V4_MFW_ESP32_C3.yml +0 -23
- data/vendor/board-maps/yaml/VALTRACK_V4_VTS_ESP32_C3.yml +0 -23
- data/vendor/board-maps/yaml/VIYALAB_MIZU_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/WATCHY.yml +0 -7
- data/vendor/board-maps/yaml/WATCHY_V10.yml +0 -7
- data/vendor/board-maps/yaml/WATCHY_V15.yml +0 -7
- data/vendor/board-maps/yaml/WATCHY_V20.yml +0 -7
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_0_96.yml +0 -47
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_LCD_1_28.yml +0 -47
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ONE.yml +0 -47
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_PLUS.yml +0 -48
- data/vendor/board-maps/yaml/WAVESHARE_RP2040_ZERO.yml +0 -47
- data/vendor/board-maps/yaml/WESP32.yml +0 -17
- data/vendor/board-maps/yaml/WIDORA_AIR.yml +0 -34
- data/vendor/board-maps/yaml/WIFIDUINO_ESP8266.yml +0 -23
- data/vendor/board-maps/yaml/WIFINFO.yml +0 -20
- data/vendor/board-maps/yaml/WIPY3.yml +0 -27
- data/vendor/board-maps/yaml/WIZNET_5100S_EVB_PICO.yml +0 -48
- data/vendor/board-maps/yaml/WIZNET_5500_EVB_PICO.yml +0 -48
- data/vendor/board-maps/yaml/WIZNET_WIZFI360_EVB_PICO.yml +0 -48
- data/vendor/board-maps/yaml/WT32_ETH01.yml +0 -8
- data/vendor/board-maps/yaml/WiFiduino32S3.yml +0 -27
- data/vendor/board-maps/yaml/WiFiduinoV2.yml +0 -27
- data/vendor/board-maps/yaml/Wifiduino32.yml +0 -40
- data/vendor/board-maps/yaml/XIAO_ESP32C3.yml +0 -22
- data/vendor/board-maps/yaml/XIAO_ESP32S3.yml +0 -36
- data/vendor/board-maps/yaml/YD_RP2040.yml +0 -48
- data/vendor/board-maps/yaml/atmegazero_esp32s2.yml +0 -30
- data/vendor/board-maps/yaml/connaxio_espoir.yml +0 -18
- data/vendor/board-maps/yaml/esp32vn_iot_uno.yml +0 -22
- data/vendor/board-maps/yaml/fm_devkit.yml +0 -15
- data/vendor/board-maps/yaml/heltec_wifi_32_lora_V3.yml +0 -31
- data/vendor/board-maps/yaml/heltec_wifi_kit_32.yml +0 -28
- data/vendor/board-maps/yaml/heltec_wifi_kit_32_V3.yml +0 -32
- data/vendor/board-maps/yaml/heltec_wifi_lora_32.yml +0 -27
- data/vendor/board-maps/yaml/heltec_wifi_lora_32_V2.yml +0 -27
- data/vendor/board-maps/yaml/heltec_wireless_stick.yml +0 -27
- data/vendor/board-maps/yaml/heltec_wireless_stick_LITE.yml +0 -27
- data/vendor/board-maps/yaml/openkb.yml +0 -27
- data/vendor/board-maps/yaml/roboheart_hercules.yml +0 -17
- data/vendor/board-maps/yaml/sensesiot_weizen.yml +0 -26
- data/vendor/board-maps/yaml/uPesy_WROOM.yml +0 -27
- data/vendor/board-maps/yaml/uPesy_WROVER.yml +0 -27
- data/vendor/board-maps/yaml/unphone8.yml +0 -32
- data/vendor/board-maps/yaml/unphone9.yml +0 -32
- data/vendor/board-maps/yaml/wifi_kit_8.yml +0 -15
data/lib/denko/board.rb
CHANGED
@@ -1,42 +1,54 @@
|
|
1
1
|
# Require all files in board folder relative to this file.
|
2
|
-
Dir["#{Denko.root}/lib/denko/board/*.rb"].each {|file| require file }
|
2
|
+
Dir["#{Denko.root}/lib/denko/board/*.rb"].each { |file| require file }
|
3
3
|
|
4
4
|
module Denko
|
5
5
|
class Board
|
6
|
-
attr_reader :
|
6
|
+
attr_reader :name, :version, :serial_buffer_size, :aux_limit, :eeprom_length
|
7
7
|
attr_reader :low, :high, :analog_write_high, :analog_read_high
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
#
|
11
|
-
@
|
12
|
-
ack =
|
13
|
-
@name, @version, @aux_limit, @eeprom_length = ack.split(",")
|
9
|
+
def initialize(transport, options={})
|
10
|
+
# Shake hands
|
11
|
+
@transport = transport
|
12
|
+
ack = transport.handshake
|
14
13
|
|
15
|
-
#
|
16
|
-
@name
|
17
|
-
|
18
|
-
|
14
|
+
# Split handshake acknowledgement into separate values.
|
15
|
+
@name, @version, @serial_buffer_size, @aux_limit, @eeprom_length, @i2c_limit = ack.split(",")
|
16
|
+
|
17
|
+
# Tell transport how much serial buffer the board has, for flow control.
|
18
|
+
@serial_buffer_size = @serial_buffer_size.to_i
|
19
|
+
raise StandardError, "no serial buffer size given in handshake" if @serial_buffer_size < 1
|
20
|
+
@transport.remote_buffer_size = @serial_buffer_size
|
21
|
+
|
22
|
+
# Load board map by name.
|
23
|
+
@name = nil if @name.empty?
|
24
|
+
load_map(@name)
|
19
25
|
|
20
26
|
# Leave room for null termination of aux messages.
|
21
27
|
@aux_limit = @aux_limit.to_i - 1
|
22
28
|
|
23
|
-
#
|
24
|
-
|
29
|
+
# Set I2C transaction size limit. Safe minimum is 32.
|
30
|
+
# This makes I2C fail silently if board does not implement.
|
31
|
+
@i2c_limit = @i2c_limit.to_i
|
32
|
+
@i2c_limit = 32 if @i2c_limit == 0
|
33
|
+
|
34
|
+
# Remaining settings
|
35
|
+
@version = nil if @version.empty?
|
36
|
+
@eeprom_length = @eeprom_length.to_i
|
25
37
|
|
26
|
-
#
|
27
|
-
|
38
|
+
# Transport calls #update on board when data is received.
|
39
|
+
transport.add_observer(self)
|
28
40
|
|
29
41
|
# Set digital and analog IO levels.
|
30
42
|
@low = 0
|
31
43
|
@high = 1
|
32
44
|
self.analog_write_resolution = options[:write_bits] || 8
|
33
|
-
self.analog_read_resolution
|
45
|
+
self.analog_read_resolution = options[:read_bits] || 10
|
34
46
|
end
|
35
47
|
|
36
48
|
def finish_write
|
37
|
-
sleep 0.001 while @
|
49
|
+
sleep 0.001 while @transport.writing?
|
38
50
|
write "\n91\n"
|
39
|
-
sleep 0.001 while @
|
51
|
+
sleep 0.001 while @transport.writing?
|
40
52
|
end
|
41
53
|
|
42
54
|
def analog_write_resolution=(value)
|
@@ -64,7 +76,7 @@ module Denko
|
|
64
76
|
alias :adc_high :analog_read_high
|
65
77
|
|
66
78
|
def write(msg)
|
67
|
-
@
|
79
|
+
@transport.write(msg)
|
68
80
|
end
|
69
81
|
|
70
82
|
#
|
@@ -78,7 +90,7 @@ module Denko
|
|
78
90
|
# signal is read by the TxRx, telling it to resume transmisison.
|
79
91
|
#
|
80
92
|
def write_and_halt(msg)
|
81
|
-
@
|
93
|
+
@transport.write(msg, true)
|
82
94
|
end
|
83
95
|
|
84
96
|
#
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Denko
|
2
2
|
module Connection
|
3
3
|
class BoardUART < Base
|
4
|
-
|
4
|
+
DEFAULT_BAUD = 115200
|
5
5
|
|
6
|
-
def initialize(uart,
|
6
|
+
def initialize(uart, baud: DEFAULT_BAUD)
|
7
7
|
@uart = uart
|
8
|
-
@uart.start(
|
8
|
+
@uart.start(baud)
|
9
9
|
end
|
10
10
|
|
11
11
|
def baud
|
@@ -1,11 +1,19 @@
|
|
1
1
|
module Denko
|
2
2
|
module Connection
|
3
3
|
module FlowControl
|
4
|
-
BOARD_BUFFER = 63
|
5
4
|
SLEEP_TIME = 0.001
|
6
5
|
|
6
|
+
# Let Board object tell us the remote buffer size after parsing handshake.
|
7
|
+
def remote_buffer_size=(size)
|
8
|
+
@transit_mutex.synchronize { @remote_buffer_size = size }
|
9
|
+
end
|
10
|
+
|
7
11
|
def initialize(*args)
|
8
12
|
super(*args)
|
13
|
+
# Start with minimum known buffer size. Board will update after handshake.
|
14
|
+
# WARNING: If not updated, and ack threshold on the board is > minimum,
|
15
|
+
# FlowControl will stop sending data, and appear to hang. Fix this.
|
16
|
+
@remote_buffer_size = 63
|
9
17
|
reset_flow_control
|
10
18
|
tx_resume
|
11
19
|
end
|
@@ -93,7 +101,7 @@ module Denko
|
|
93
101
|
# Keep transit mutex as short as possible, by only reserving bytes, and writing outside.
|
94
102
|
def reserve_bytes(length)
|
95
103
|
@transit_mutex.synchronize do
|
96
|
-
available =
|
104
|
+
available = @remote_buffer_size - @transit_bytes
|
97
105
|
reserved = (length > available) ? available : length
|
98
106
|
@transit_bytes += reserved
|
99
107
|
reserved
|
@@ -63,7 +63,7 @@ module Denko
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def after_initialize(options={})
|
66
|
-
super(options)
|
66
|
+
super(options)
|
67
67
|
|
68
68
|
# Default to 16x2 display if no options given.
|
69
69
|
@columns = options[:columns] || 16
|
@@ -212,7 +212,7 @@ module Denko
|
|
212
212
|
send(byte, board.low)
|
213
213
|
end
|
214
214
|
|
215
|
-
def write(byte)
|
215
|
+
def write(byte)
|
216
216
|
send(byte, board.high)
|
217
217
|
end
|
218
218
|
|
@@ -229,27 +229,27 @@ module Denko
|
|
229
229
|
end
|
230
230
|
|
231
231
|
def write4(bits)
|
232
|
-
d4.write bits[4]
|
233
|
-
d5.write bits[5]
|
234
|
-
d6.write bits[6]
|
235
|
-
d7.write bits[7]
|
232
|
+
d4.write bits[4].to_i
|
233
|
+
d5.write bits[5].to_i
|
234
|
+
d6.write bits[6].to_i
|
235
|
+
d7.write bits[7].to_i
|
236
236
|
pulse_enable
|
237
|
-
d4.write bits[0]
|
238
|
-
d5.write bits[1]
|
239
|
-
d6.write bits[2]
|
240
|
-
d7.write bits[3]
|
237
|
+
d4.write bits[0].to_i
|
238
|
+
d5.write bits[1].to_i
|
239
|
+
d6.write bits[2].to_i
|
240
|
+
d7.write bits[3].to_i
|
241
241
|
pulse_enable
|
242
242
|
end
|
243
243
|
|
244
244
|
def write8(bits)
|
245
|
-
d0.write bits[0]
|
246
|
-
d1.write bits[1]
|
247
|
-
d2.write bits[2]
|
248
|
-
d3.write bits[3]
|
249
|
-
d4.write bits[4]
|
250
|
-
d5.write bits[5]
|
251
|
-
d6.write bits[6]
|
252
|
-
d7.write bits[7]
|
245
|
+
d0.write bits[0].to_i
|
246
|
+
d1.write bits[1].to_i
|
247
|
+
d2.write bits[2].to_i
|
248
|
+
d3.write bits[3].to_i
|
249
|
+
d4.write bits[4].to_i
|
250
|
+
d5.write bits[5].to_i
|
251
|
+
d6.write bits[6].to_i
|
252
|
+
d7.write bits[7].to_i
|
253
253
|
pulse_enable
|
254
254
|
end
|
255
255
|
|
@@ -3,6 +3,9 @@ module Denko
|
|
3
3
|
class SevenSegment
|
4
4
|
include Behaviors::MultiPin
|
5
5
|
|
6
|
+
ALL_OFF = [0,0,0,0,0,0,0]
|
7
|
+
BLANK = " "
|
8
|
+
|
6
9
|
def initialize_pins(options={})
|
7
10
|
[:a, :b, :c, :d, :e, :f, :g].each do |symbol|
|
8
11
|
proxy_pin(symbol, DigitalIO::Output)
|
@@ -20,28 +23,30 @@ module Denko
|
|
20
23
|
attr_reader :segments
|
21
24
|
|
22
25
|
def clear
|
23
|
-
|
24
|
-
pin.low if cathode
|
25
|
-
pin.high if anode
|
26
|
-
end
|
26
|
+
write(BLANK)
|
27
27
|
end
|
28
28
|
|
29
|
-
def display(
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
def display(string)
|
30
|
+
on unless on?
|
31
|
+
string = string.to_s.upcase
|
32
|
+
(string.length > 1) ? scroll(string) : write(string)
|
33
33
|
end
|
34
34
|
|
35
35
|
def on
|
36
36
|
anode.high if anode
|
37
37
|
cathode.low if cathode
|
38
|
+
@on = true
|
38
39
|
end
|
39
40
|
|
40
41
|
def off
|
41
42
|
anode.low if anode
|
42
43
|
cathode.high if cathode
|
44
|
+
@on = false
|
43
45
|
end
|
44
46
|
|
47
|
+
def on?; @on; end
|
48
|
+
def off?; !@on; end
|
49
|
+
|
45
50
|
CHARACTERS = {
|
46
51
|
'0' => [1,1,1,1,1,1,0],
|
47
52
|
'1' => [0,1,1,0,0,0,0],
|
@@ -87,22 +92,16 @@ module Denko
|
|
87
92
|
private
|
88
93
|
|
89
94
|
def write(char)
|
90
|
-
bits = CHARACTERS[char
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
bits.each_with_index do |bit, index|
|
95
|
-
if anode
|
96
|
-
bit == 0 ? bit = 1 : bit = 0
|
97
|
-
end
|
98
|
-
segments[index].write(bit) unless (segments[index].state == bit)
|
99
|
-
end
|
95
|
+
bits = CHARACTERS[char] || ALL_OFF
|
96
|
+
bits.each_with_index do |bit, index|
|
97
|
+
bit = 1^bit if anode
|
98
|
+
segments[index].write(bit) unless (segments[index].state == bit)
|
100
99
|
end
|
101
100
|
end
|
102
101
|
|
103
102
|
def scroll(string)
|
104
103
|
string.chars.each do |char|
|
105
|
-
|
104
|
+
write(char)
|
106
105
|
sleep(0.5)
|
107
106
|
end
|
108
107
|
end
|
data/lib/denko/message.rb
CHANGED
@@ -11,7 +11,7 @@ module Denko
|
|
11
11
|
aux_message = aux_message.to_s
|
12
12
|
|
13
13
|
# Validate aux_message before escaping characters.
|
14
|
-
raise ArgumentError, 'aux_message is limited to 528 characters' if aux_message.length >
|
14
|
+
raise ArgumentError, 'aux_message is limited to 528 characters' if aux_message.length > 784
|
15
15
|
|
16
16
|
# Escape \ and \n.
|
17
17
|
aux_message = aux_message.gsub("\\","\\\\\\\\").gsub("\n", "\\\n")
|
@@ -57,7 +57,7 @@ module Denko
|
|
57
57
|
message = "#{command}#{message}\n"
|
58
58
|
end
|
59
59
|
|
60
|
-
def self.pack(type, data,
|
60
|
+
def self.pack(type, data, min: nil, max: nil)
|
61
61
|
# Always pack as little endian.
|
62
62
|
template = case type
|
63
63
|
when :uint64 then 'Q<*'
|
@@ -70,20 +70,12 @@ module Denko
|
|
70
70
|
# Can pass a single integer to get packed if we always [] then flatten.
|
71
71
|
str = [data].flatten.pack(template)
|
72
72
|
|
73
|
-
#
|
74
|
-
if
|
75
|
-
(
|
76
|
-
str = str + "\x00"
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
if options[:min] && str.length < options[:min]
|
81
|
-
raise ArgumentError, "too few bytes given (expected at least #{options[:min]})"
|
73
|
+
# Enforce min and max.
|
74
|
+
if min && str.length < min
|
75
|
+
raise ArgumentError, "too few bytes given (expected at least #{min})"
|
82
76
|
end
|
83
|
-
|
84
|
-
|
85
|
-
if options[:max] && str.length > options[:max]
|
86
|
-
raise ArgumentError, "too many bytes given (expected at most #{options[:max]})"
|
77
|
+
if max && str.length > max
|
78
|
+
raise ArgumentError, "too many bytes given (expected at most #{max})"
|
87
79
|
end
|
88
80
|
|
89
81
|
str
|
@@ -3,7 +3,7 @@ module Denko
|
|
3
3
|
class IRTransmitter
|
4
4
|
include Behaviors::OutputPin
|
5
5
|
|
6
|
-
def emit(pulses=[],
|
6
|
+
def emit(pulses=[], frequency: 38)
|
7
7
|
if pulses.length > 256 || pulses.length < 1
|
8
8
|
raise ArgumentError, 'wrong number of IR pulses (expected 1 to 256)'
|
9
9
|
end
|
@@ -14,7 +14,6 @@ module Denko
|
|
14
14
|
raise ArgumentError, 'pulse too long (max 65535 ms)' if pulse > 65535
|
15
15
|
end
|
16
16
|
|
17
|
-
frequency = options[:frequency] || 38
|
18
17
|
board.infrared_emit(pin, frequency, pulses)
|
19
18
|
end
|
20
19
|
end
|
data/lib/denko/version.rb
CHANGED
data/lib/denko_cli/packages.rb
CHANGED
@@ -12,10 +12,16 @@ PACKAGES = {
|
|
12
12
|
"Denko.cpp",
|
13
13
|
"DenkoCoreIO.cpp",
|
14
14
|
"DenkoPulseInput.cpp",
|
15
|
-
"DenkoEEPROM.cpp",
|
16
15
|
"../../vendor/board-maps/BoardMap.h",
|
17
16
|
]
|
18
17
|
},
|
18
|
+
eeprom: {
|
19
|
+
description: "Built-in EEPROM support",
|
20
|
+
directive: "DENKO_EEPROM",
|
21
|
+
files: [
|
22
|
+
"DenkoEEPROM.cpp",
|
23
|
+
]
|
24
|
+
},
|
19
25
|
one_wire: {
|
20
26
|
description: "OneWire bus support",
|
21
27
|
directive: "DENKO_ONE_WIRE",
|
data/lib/denko_cli/targets.rb
CHANGED
@@ -11,14 +11,17 @@ class DenkoCLI::Generator
|
|
11
11
|
mega168: [:core, :one_wire, :tone, :i2c, :spi, :servo],
|
12
12
|
|
13
13
|
# Other ATmega chips do everything.
|
14
|
-
# Add bit bang serial for 328p / UNO since
|
14
|
+
# Add bit bang serial for 328p / UNO since it has no extra hardware UART.
|
15
15
|
mega: STANDARD_PACKAGES + [:uart_bb],
|
16
16
|
|
17
|
-
# No tone or
|
18
|
-
sam3x: STANDARD_PACKAGES - [:tone, :ir_out],
|
17
|
+
# No tone, infrared or EEPROM on SAM3X / Due.
|
18
|
+
sam3x: STANDARD_PACKAGES - [:tone, :ir_out, :eeprom],
|
19
19
|
|
20
|
-
#
|
21
|
-
samd: STANDARD_PACKAGES,
|
20
|
+
# No EEPROM on SAMD / Zero.
|
21
|
+
samd: STANDARD_PACKAGES - [:eeprom],
|
22
|
+
|
23
|
+
# No IR out and WS2812 on the UNO R4. WS2812 compiles but doesn't work.
|
24
|
+
ra4m1: STANDARD_PACKAGES - [:ir_out, :led_array],
|
22
25
|
|
23
26
|
# ESP8266 + ESP32 use a different IR library.
|
24
27
|
esp8266: STANDARD_PACKAGES - [:ir_out] + [:ir_out_esp],
|
data/lib/denko_cli/usage.txt
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
|
2
2
|
Usage:
|
3
|
+
|
3
4
|
denko task [options]
|
4
5
|
|
5
6
|
Tasks:
|
7
|
+
|
6
8
|
sketch SKETCH [options]
|
7
9
|
help
|
8
10
|
targets
|
@@ -12,23 +14,25 @@
|
|
12
14
|
--target TARGET (default: mega. Run 'denko targets' for more info)
|
13
15
|
--debug (default: off)
|
14
16
|
|
15
|
-
Available sketches and
|
17
|
+
Available sketches and options specific to each sketch:
|
16
18
|
|
17
19
|
serial
|
18
|
-
--baud BAUD
|
20
|
+
--baud BAUD (default: 115200)
|
19
21
|
|
20
22
|
ethernet
|
21
23
|
--mac XX:XX:XX:XX:XX:XX (required)
|
22
24
|
--ip XXX.XXX.XXX.XXX (required, no DHCP)
|
23
25
|
--port PORT (default: 3466)
|
26
|
+
--baud BAUD (default: 115200, serial fallback)
|
24
27
|
|
25
28
|
wifi
|
26
29
|
--ssid SSID (required)
|
27
30
|
--password PASSWORD (required)
|
28
31
|
--port PORT (default: 3466)
|
32
|
+
--baud BAUD (default: 115200, serial fallback)
|
29
33
|
|
30
34
|
Examples:
|
31
35
|
|
32
36
|
denko sketch ethernet --mac 12:34:56:78:90:12 --ip 192.168.1.2
|
33
|
-
denko sketch serial
|
34
|
-
denko sketch serial
|
37
|
+
denko sketch serial --baud 57600 --target esp32
|
38
|
+
denko sketch serial --baud 9600 --target core
|
data/src/denko_ethernet.ino
CHANGED
@@ -2,17 +2,6 @@
|
|
2
2
|
#include <SPI.h>
|
3
3
|
#include <Ethernet.h>
|
4
4
|
|
5
|
-
// Define 'serial' as the serial interface to use.
|
6
|
-
// Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
|
7
|
-
// On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
|
8
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
9
|
-
#define serial SerialUSB
|
10
|
-
// Use this for Programming USB port (right) on Due and Zero.
|
11
|
-
// #define serial Serial
|
12
|
-
#else
|
13
|
-
#define serial Serial
|
14
|
-
#endif
|
15
|
-
|
16
5
|
// Configure your MAC address, IP address, and HTTP port here.
|
17
6
|
byte mac[] = { 0xDE, 0xAD, 0xBE, 0x30, 0x31, 0x32 };
|
18
7
|
IPAddress ip(192,168,0,77);
|
@@ -31,8 +20,8 @@ void printEthernetStatus() {
|
|
31
20
|
|
32
21
|
void setup() {
|
33
22
|
// Wait for serial ready.
|
34
|
-
|
35
|
-
while(!
|
23
|
+
DENKO_SERIAL_IF.begin(115200);
|
24
|
+
while(!DENKO_SERIAL_IF);
|
36
25
|
|
37
26
|
// Explicitly disable the SD card.
|
38
27
|
pinMode(4,OUTPUT);
|
@@ -41,9 +30,7 @@ void setup() {
|
|
41
30
|
// Start up the network connection and server.
|
42
31
|
Ethernet.begin(mac, ip);
|
43
32
|
server.begin();
|
44
|
-
|
45
|
-
printEthernetStatus();
|
46
|
-
#endif
|
33
|
+
printEthernetStatus();
|
47
34
|
|
48
35
|
// Add listener callbacks for local logic.
|
49
36
|
denko.digitalListenCallback = onDigitalListen;
|
@@ -51,20 +38,25 @@ void setup() {
|
|
51
38
|
}
|
52
39
|
|
53
40
|
void loop() {
|
41
|
+
// End connection if client disconnects.
|
42
|
+
if (client && !client.connected()) {
|
43
|
+
client.stop();
|
44
|
+
}
|
45
|
+
|
54
46
|
// Allow one client at a time to be connected. Set it as the denko IO stream.
|
55
47
|
if (!client){
|
56
48
|
client = server.available();
|
57
|
-
if (client)
|
49
|
+
if (client) {
|
50
|
+
// TCP Client
|
51
|
+
denko.stream = &client;
|
52
|
+
} else {
|
53
|
+
// Serial fallback
|
54
|
+
denko.stream = &DENKO_SERIAL_IF;
|
55
|
+
}
|
58
56
|
}
|
59
57
|
|
60
58
|
// Main loop of the denko library.
|
61
59
|
denko.run();
|
62
|
-
|
63
|
-
// End the connection when client disconnects and revert to serial IO.
|
64
|
-
if (client && !client.connected()){
|
65
|
-
client.stop();
|
66
|
-
denko.stream = &serial;
|
67
|
-
}
|
68
60
|
}
|
69
61
|
|
70
62
|
// This runs every time a digital pin that denko is listening to changes value.
|
data/src/denko_serial.ino
CHANGED
@@ -2,24 +2,13 @@
|
|
2
2
|
|
3
3
|
Denko denko;
|
4
4
|
|
5
|
-
// Define 'serial' as the serial interface to use.
|
6
|
-
// Uses SerialUSB (left port), which is native USB, on Arduino Due and Zero, or Serial otherwise.
|
7
|
-
// On many boards, eg. Arduino Due, RP2040, Serial may be native USB anyway.
|
8
|
-
#if defined(__SAM3X8E__) || defined(__SAMD21G18A__)
|
9
|
-
#define serial SerialUSB
|
10
|
-
// Use this for Programming USB port (right) on Due and Zero.
|
11
|
-
// #define serial Serial
|
12
|
-
#else
|
13
|
-
#define serial Serial
|
14
|
-
#endif
|
15
|
-
|
16
5
|
void setup() {
|
17
6
|
// Wait for serial ready.
|
18
|
-
|
19
|
-
while(!
|
7
|
+
DENKO_SERIAL_IF.begin(115200);
|
8
|
+
while(!DENKO_SERIAL_IF);
|
20
9
|
|
21
10
|
// Pass serial stream to denko so it can read/write.
|
22
|
-
denko.stream = &
|
11
|
+
denko.stream = &DENKO_SERIAL_IF;
|
23
12
|
|
24
13
|
// Add listener callbacks for local logic.
|
25
14
|
denko.digitalListenCallback = onDigitalListen;
|