- Fix CompanionDeviceManager association path (Android 12+) not updating
interface name when a device is selected
- Extract identifier from Bluetooth device name (e.g., "RNode 958F" -> "958F")
- Add BLE/BT suffix based on device type (e.g., "RNode 958F BLE")
- Remove unused device hash query code from KotlinUSBBridge, usb_bridge.py,
and reticulum_wrapper.py
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove device hash query complexity for USB RNodes since CMD_DEV_HASH
returns a different hash than what's used for Bluetooth naming. USB
interfaces now simply use "RNode USB" as the default name.
The device hash query code is retained in KotlinUSBBridge for potential
future use (debugging, device identification).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use SQLite json_extract() for reliable VID/PID queries instead of
fragile LIKE pattern matching in InterfaceDao
- Fix Chaquopy interop: use .size() for Java ArrayList instead of len()
- Fix Kotlin data class property access: use getter methods (getDeviceId())
instead of direct property access
- Add debug logging for USB device lookup flow
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add USB serial support for RNode devices with two modes:
1. USB Serial Mode: Operate RNode entirely over USB cable
2. Bluetooth Pairing Mode: Pair RNode via USB (for T114 and devices without user button)
Key changes:
- Add KotlinUSBBridge for USB serial communication using usb-serial-for-android library
- Support FTDI, CP210x, CH340, PL2303, and CDC-ACM USB serial drivers
- Create Python usb_bridge.py module for Python-side USB access
- Extend rnode_interface.py with MODE_USB and Bluetooth pairing commands
- Add USB tab to RNode wizard UI with device enumeration and permission handling
- Implement Bluetooth pairing mode flow with PIN display
- Add DiscoveredUsbDevice data class for USB device information
- Update InterfaceConfig.RNode with usbDeviceId field
- Add USB host feature declaration to AndroidManifest
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>