From 7abceb946e8e7e8fe404cbc0bb05a16ac395b65c Mon Sep 17 00:00:00 2001 From: imonlinux <39863321+imonlinux@users.noreply.github.com> Date: Sun, 11 Jan 2026 15:47:56 -0800 Subject: [PATCH] Delete docs/xvf3800_usb_led_testing.md Obsolete --- docs/xvf3800_usb_led_testing.md | 158 -------------------------------- 1 file changed, 158 deletions(-) delete mode 100644 docs/xvf3800_usb_led_testing.md diff --git a/docs/xvf3800_usb_led_testing.md b/docs/xvf3800_usb_led_testing.md deleted file mode 100644 index 86ba69a..0000000 --- a/docs/xvf3800_usb_led_testing.md +++ /dev/null @@ -1,158 +0,0 @@ -# XVF3800 USB LED and Mute Button Support in `linux-voice-assistant` - -The XVF3800 branch now includes **USB-based LED ring support** using the XVF3800’s legacy LED control commands (`LED_EFFECT`, `LED_BRIGHTNESS`, `LED_SPEED`, `LED_COLOR`). This post outlines how to pull the branch, refresh your virtualenv, and enable XVF3800 support in `config.json`. I fully expect bugs and you should too. Let me know if it works first try and I will by some lottery tickets as well. - ---- - -## 1. Get the XVF3800 Branch - -If you **already have** the repo: - -```bash -cd ~/linux-voice-assistant -git fetch origin -git switch XVF3800 # or: git checkout xvf3800 -git pull -``` - -If you’re **cloning fresh**: - -```bash -cd ~ -git clone --branch XVF3800 --single-branch https://github.com/imonlinux/linux-voice-assistant.git -``` - ---- - -## 2. Install/Refresh the Virtualenv (New Dependencies) - -The XVF3800 backend uses **pyusb** and system libusb. - -From the project root: - -```bash -cd ~/linux-voice-assistant - -# remove the linux_voice_assistant.egg-info folder if it exists -rm -rf linux_voice_assistant.egg-info - -# Create venv if you don't already have one -script/setup -``` -On Debian/RPi OS, make sure libusb is installed: - - -```bash -sudo apt update -sudo apt install libusb-1.0-0 -``` - -No extra `hidapi` is required for the LED integration (this path is pure pyusb). - -## 3. Copy the udev rule for the XVF3800 - -On the Pi: - -```bash -sudo cp ~linux-voice-assistant/XVF3800/99-respeaker-xvf3800.rules /etc/udev/rules.d/99-respeaker-xvf3800.rules -``` - -This does: - -- Matches the XVF3800 by VID/PID (2886:001a) - -- Sets permissions to 0660 - -- Assigns it to the plugdev group - -- Tags it for desktop access (uaccess) - -### Add user (pi) to the plugdev group -**use the user name that you have created if not pi** - -```bash -sudo usermod -aG plugdev pi -``` - -Then log out and back in (or reboot) so the new group membership takes effect. - -### Reload udev rules and replug the device - -If you didn't reboot, reload the udev rules: - -```bash -sudo udevadm control --reload-rules -sudo udevadm trigger -``` - -Then unplug/replug the XVF3800 USB cable. - -You can sanity-check permissions with: - -```bash -ls -l /dev/bus/usb/*/* -``` - -Look for the device entry that corresponds to 2886:001a (you can pair it with lsusb), and confirm it’s root plugdev with crw-rw----. - - -## 4. Enable XVF3800 Support in `config.json` - -Edit `linux_voice_assistant/config.json` and set the `led` block to use the XVF3800 USB backend. If you want to test the mute button, add the following button section as well. See the `linux_voice_assistant/config.json.example` file for additional options. - -Minimal example: - -```jsonc -{ - "app": { - "name": "Linux Voice Assistant XVF3800" - }, - "led": { - "enabled": true, - "led_type": "xvf3800", - "interface": "usb" - }, - "button": { - "enabled": true, - "mode": "xvf3800" - }, - "mqtt": { - "host": "192.168.1.2", - "port": 1883, - "username": "mqtt_username", - "password": "mqtt_password" - } -} -``` - ---- - -## 5. Run the Assistant with XVF3800 LEDs - -Stop any running systemd units: - -```bash -systemctl --user stop linux-voice-assistant.service -``` - - -From the project root: - -```bash -cd ~/linux-voice-assistant -script/run --debug -``` - -With the XVF3800 branch + config above, the **USB LED ring** should now: - -- Show the configured **idle / listening / thinking / responding / error** effects -- Turn **solid dim red** when the mic is muted -- Track changes coming from the MQTT LED state entities - -The mute button should now: - -- Keep hardware mute & software/LVA mute fully in sync. -- No short/long press differentiation: - One physical control, one responsibility: mute/unmute. - -`Wake/stop is still done via wake word or a separate GPIO button (you can still wire a standalone Pi button and run mode="gpio" in parallel if desired).`