UT61 - USB Multimeter unter Linux auslesen
Die UT61-Geraeteserie ist eine recht preisguestige Baureihe
mit LCD-Anzeige und USB-Anschluss.
Darin sitzt ein HE2325U-Clone - der aber ein bisschen eigenwillig ist.
Und die Chinesen sind _ausserordentlich_ zurueckhaltend, was dessen
Datenblaetter angeht :-(
Messgeraet angeschlossen:
(Kernel 2.6.38 und 3.0.x)
Bus 003 Device 002: ID 1a86:e008 QinHeng Electronics HID-based USB-serial
converter, full-speed, similar to HE2325U
generic-usb 0003:1A86:E008.0001: hiddev0,hidraw0: USB HID v1.00 Device
[WCH.CN USB to Serial] on usb-0000:00:1d.1-2/input0
Und dann passiert erst einmal nichts....
Ich bekame keine Daten. Als ich schon aufgeben wollte, konnte ich am Morgen
des naechsten Tages ploetzlich welche lesen. Am Abend dann wieder nicht.
Es dauerte eine Weile, bis ich drauf kam, dass es am "suspend" lag.
Das Verhalten ist repoduzierbar - mit Kernel 2.6.x und mit Kernel 3.0x.
Messgeraet angeschlossen - Leseversuch:
./he2325u
[!] found 1 devices:
0003:0002:00
Unable to read product string
Product String:
ERROR: (null)Unable to send a feature report.
-data start-
Mit hidtest::
../hidapi-0.6.0/linux/hidtest
Device Found
type: 1a86 e008
path: 0003:0002:00
serial_number: (null)
Manufacturer: (null)
Product: (null)
Release: 1100
Interface: 0
Unable to read manufacturer string
Manufacturer String:
Unable to read product string
Product String:
Unable to read serial number string
Serial Number String: (0)
Unable to read indexed string 1
Indexed String 1:
Unable to send a feature report.
Unable to get a feature report.
(null)Unable to write()
Error: (null)
Unable to write() (2)
waiting...
Und das passiert nach einem pm-suspend und wakeup:
../hidapi-0.6.0/linux/hidtest
Device Found
type: 1a86 e008
path: 0003:0002:00
serial_number: (null)
Manufacturer: WCH.CN
Product: USB to Serial
Release: 1100
Interface: 0
Manufacturer String: WCH.CN
Product String: USB to Serial
Serial Number String: (1033) Љ
Indexed String 1: WCH.CN
Unable to get a feature report.
(null)Data read:
f0 00 00 00 00 00 00 00
Und auch das Auslesen klappt:
./he2325u
[!] found 1 devices:
0003:0002:00
Product String: USB to Serial
ERROR: (null)-data start-
+1052 41@
+1051 41@
+1051 41@
+1050 41@
+1050 41@
Ich vermutete, dass es an der Initialisierungssequenz liegt - aber Versuche mit
anderen Werten fuehrten auch zu nichts.
// Send a Feature Report to the device
buf[0] = 0x0; // report ID
buf[1] = bps;
buf[2] = bps>>8;
buf[3] = bps>>16;
buf[4] = bps>>24;
buf[5] = 0x03; // 3 = enable?
Wenn ich nach einem suspend/wakeup einen
hid_get_feature_report(handle, buf, 6)
aufrufe, dann steht da auch sowas drin:
00 00 4b 00 00 03
Wobei ihm die Baudrate voellig egal ist. Habe mehrere ausprobiert.
Ohne suspend/wakeup liefert er einfach keine Daten....
Dann war ich die Fehlersuche leid!
Ich habe nun ein Script geschrieben, dass den USB-Chip sucht und
in einen Suspend schickt.
Danach koennen die Messerte gelesen werden.
################### suspend.HE2325U.sh ##################################
#!/bin/bash
for dat in /sys/bus/usb/devices/*;
do
if test -e $dat/manufacturer; then
grep "WCH.CN" $dat/manufacturer>/dev/null&& echo auto >${dat}/power/level&&echo 0 > ${dat}/power/autosuspend
fi
done
##########################################################################
Man sollte statt dem "manufacturer" besser die Vendor-ID fuer die Suche nehmen -
aber da ich garantiert keinen weiteren Chip von "WCH.CN" habe, ist mir das jetzt egal ;-)
Das "he2325u.ccp" von Rainer Wetzel und viele weitere nuetzliche Links findet man ueberigenes bei
steffenvogel.de und
Henrik Haftmann
.
Vielen Dank an alle, die mir geholfen und die Ihre Sourcen und Dokus veroeffentlich haben.
Mit diesem Geraet aufgenommene Messwerte.