- discoverChars uses properties (write/notify) to distinguish FFE1 command characteristic from FFE1 service UUID - handleValueChange: vendor_33 mode emits vendor_status (FFE4 heartbeat) and vendor_data separately, no longer tries parseFrame on raw bytes - parseVendorStatus handles 1-byte heartbeat and 33-byte state readback with proper IO1-IO5 field parsing