# LED GPIO Utilities This directory contains utility talking to RTL837x switch IC via I2C bus. These scripts are designed to help with monitoring, debugging GPIO, and identifying LED configurations. ## Hardware requirements To use these utilities, you need: - A hardware dongle that can communicate with I2C devices. One example is the [I2C-Pico-USB](https://github.com/dquadros/I2C-Pico-USB) which provides USB-to-I2C connectivity. - Connection between the hardware dongle and the RTL837x's I2C communication port. ## Scripts ### 1. `i2c_read_rtl_gpio.py` This script reads RTL GPIO register values via I2C and displays changes in GPIO states. **Features:** - Reads live RTL GPIO register values via I2C (default address 0x5C) - Monitors GPIO changes with delta detection - Allows specification of I2C bus, sleep interval, and ignored GPIO pins - Shows changes in real-time with GPIO index display **Usage:** ```bash # Basic usage (defaults to I2C bus 1, 2s sleep interval) python3 i2c_read_rtl_gpio.py # Specify I2C bus python3 i2c_read_rtl_gpio.py --i2c-bus 0 # Specify sleep interval in seconds python3 i2c_read_rtl_gpio.py --sleep-interval 5 # Ignore specific GPIO pins python3 i2c_read_rtl_gpio.py --ignored-ios 28 31 34 44 # Combine options python3 i2c_read_rtl_gpio.py --i2c-bus 2 --sleep-interval 1 --ignored-ios 28 31 ``` **Output Format:** - Displays register address and data in hex format - Shows GPIO pins that have changed since last read - Example: `0044: 00 00 00 00 00 00 00 00` ### 2. `i2c_dump_rtl_regs.py` This script dumps all register values from an RTL device via I2C. **Features:** - Dumps registers sequentially from address 0x0000 to 0xFFFF - Reads 16 bytes at a time for efficiency - Configurable I2C bus number - Provides complete register dump in hex format **Usage:** ```bash # Basic usage (defaults to I2C bus 1) python3 i2c_dump_rtl_regs.py >reg_dump.txt # Specify I2C bus python3 i2c_dump_rtl_regs.py --bus 0 >reg_dump.txt # Or using short option python3 i2c_dump_rtl_regs.py -b 2 >reg_dump.txt ``` **Output Format:** - Displays address and 16 bytes of data in hex format - Example: `0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00` ### 3. `dec_leds_from_dump.py` This script decodes LED configuration from a register dump file ( the output from `i2c_dump_rtl_regs.py`). **Features:** - Parses register dump files (reg_dump.txt format) - Decodes LED pad configurations and LED sets - Maps LED types to bit positions based on configuration - Outputs LED mux configuration and set mappings **Usage:** ```bash # Must be run in same directory as reg_dump.txt python3 dec_leds_from_dump.py ``` **Output Format:** - LED pad configuration (hex values for each pad) - LED set configurations with descriptions of LED types - Port selection mappings **Requirements:** - Requires a `reg_dump.txt` file containing the register dump output ## Requirements All scripts require: - Python 3 - `smbus2` Python package Install with: ```bash pip3 install smbus2 ``` ## Common Usage Patterns ### Monitoring GPIO Changes ```bash # Monitor GPIO changes on bus 1 with 1-second intervals python3 i2c_read_rtl_gpio.py --i2c-bus 1 --sleep-interval 1 ``` ### Register Analysis ```bash # Dump all device registers python3 i2c_dump_rtl_regs.py --bus 2 > reg_dump.txt # Analyze the register dump to understand LED configuration python3 dec_leds_from_dump.py ``` ## Configuration All scripts support command-line arguments for flexible configuration: - `--i2c-bus` or `-b`: Specify I2C bus (default: 1) - `--sleep-interval` or `-s`: Sleep between reads in seconds (default: 2) - `--ignored-ios` or `-i`: GPIO pins to ignore (default: [28, 31, 34, 44])