duaw Posted April 30, 2019 at 07:37 PM Posted April 30, 2019 at 07:37 PM Hallo! Das simple Beispiel aus der Doku läuft nicht mehr ... und ich habe keine Ahnung, warum das so ist! Also: Der Code in example_simple.c liefert beim Aufruf von rotary_poti_get_position den Wert < 0 , also Fehler. example_callback.c macht ... nichts. Ja, ich habe die UID angepasst. In der VirtualBox mit Windows (Cygwin) geht's. Binding 2.1.24, Netbeans 8.2 unter macOS, der "gcc" ist clang-1001.0.46.4. Egal, ob C11, C99 oder C89. (gdb mag nicht.) Identische Projekte (ausser dem Code in der Datei, in der auch main ist). Interessant: Das dritte IDENTISCHE Projekt, in dem erst enumeriert wird, und dann rotary_poti_get_position aufgerufen wird, liefert die Poti-Stellung (Siehe Anhang). Also irgendwo ist da irgendwas oberfaul. Kann das jemand nachstellen? Hat jemand eine Arbeitshypothese oder Richtung, in die ich forschen kann? Wo finde ich die alten C-Bindings, um den schwarzen Peter dem Binding zuzuschustern ;-) Firmwares, Dämon sind aktuell. Jede Anregung ist willkommen, Uwe tfrotaryenum.c Quote
remotecontrol Posted May 1, 2019 at 07:45 AM Posted May 1, 2019 at 07:45 AM Hast Du mal versucht, die ipcon_register_callback vor dem ipcon_connect zu machen ? So mache ich das zumindest und habe damit keine Probleme. Denn sonst könnte Dir der Connect-Event verloren gehen. Quote
duaw Posted May 1, 2019 at 04:31 PM Author Posted May 1, 2019 at 04:31 PM Hallo, remotecontrol, das Einfachst-Beispiel von der Webseite funktioniert nicht. Da wird nur via rotary_poti_get_position ein einziges mal abgefragt. Und das Abfragen funktioniert, wenn ich (wie im Bsp-Code) dynamisch enumeriere. So macht das der Brick-Viewer ja auch: connecten, USB abziehen, USB anstecken, automatisch re-connecten, geht. Das ist das, was mich irritiert. Beim RGBLED im selben Aufbau funktioniert das Simpel-Beispiel. Sehr irritiert, Uwe Quote
borg Posted May 1, 2019 at 04:44 PM Posted May 1, 2019 at 04:44 PM Also: Der Code in example_simple.c liefert beim Aufruf von rotary_poti_get_position den Wert < 0 , also Fehler. Welcher Wert < 0 wird denn zurück gegeben? Wo finde ich die alten C-Bindings, um den schwarzen Peter dem Binding zuzuschustern ;-) http://download.tinkerforge.com/bindings/c/ Quote
photron Posted May 2, 2019 at 08:25 AM Posted May 2, 2019 at 08:25 AM Ich habe das gerade getestet und kann das Problem nicht nachstellen. Folgende Schritte: - http://download.tinkerforge.com/bindings/c/tinkerforge_c_bindings_2_1_24.zip herunterladen und entpacken. - Das example_simple.c Beispiel für das Rotary Poti Bricklet und die ip_connection.[ch] und bricklet_rotary_poti.[ch] Dateien zusammen in ein leeres Verzeichnis kopiert. - In example_simple.c die UID angepasst. - Dort im Terminal mittels "gcc -Wall -pthread -I. *.c" kompiliert - Im Terminal mit "./a.out" ausgeführt - Funktioniert, Programm gibt aktuelle Position aus. Quote
duaw Posted May 3, 2019 at 02:51 PM Author Posted May 3, 2019 at 02:51 PM Hallo! Ich habe das gerade GENAU WIE DU getestet und KANN DAS PROBLEM NACHSTELLEN: fdet-uw-imac:test1 uwe$ ls -ls total 240 40 -rw-r--r-- 1 uwe staff 18113 3 Mai 16:49 bricklet_rotary_poti.c 32 -rw-r--r-- 1 uwe staff 14381 3 Mai 16:49 bricklet_rotary_poti.h 8 -rw-r--r-- 1 uwe staff 920 3 Mai 16:47 example_simple.c 128 -rw-r--r-- 1 uwe staff 65417 3 Mai 16:48 ip_connection.c 32 -rw-r--r-- 1 uwe staff 16139 3 Mai 16:48 ip_connection.h fdet-uw-imac:test1 uwe$ gcc -Wall -pthread -I. *.c fdet-uw-imac:test1 uwe$ ./a.out Could not get position, probably timeout fdet-uw-imac:test1 uwe$ Der Fehlercode ist -1 Mein gepostetes Test-Programm, das erst enumeriert, dann abfragt funktioniert (so, wie der Brickv) fdet-uw-imac:test2 uwe$ ls -la total 240 drwxr-xr-x 7 uwe staff 224 3 Mai 16:36 . drwxr-xr-x@ 130 uwe staff 4160 3 Mai 16:27 .. -rw-r--r--@ 1 uwe staff 18113 3 Mai 16:30 bricklet_rotary_poti.c -rw-r--r--@ 1 uwe staff 14381 3 Mai 16:30 bricklet_rotary_poti.h -rw-r--r--@ 1 uwe staff 65417 3 Mai 16:30 ip_connection.c -rw-r--r--@ 1 uwe staff 16139 3 Mai 16:30 ip_connection.h -rw-r--r--@ 1 uwe staff 4057 3 Mai 16:36 rotpot1.c fdet-uw-imac:test2 uwe$ gcc -Wall -pthread -I. *.c fdet-uw-imac:test2 uwe$ ./a.out Example Program: rotpot1.c Hardware recognition: Dynamically detecting Rotary Bricklet USB disconnect and connect triggers callback! Application logic ..: N/A (no application) Source files .......: Just one (Monolithic). Press return to start ... Example code: read poti once .. Waiting for Rotary Poti Bricklet! ... Connected to demon. Enumeration requested. Rotary Poti Bricklet y6V available. Position: -122 Position: -122 Mein "gcc" ist fdet-uw-imac:test1 uwe$ gcc --version Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.5.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin fdet-uw-imac:test1 uwe$ Jetzt bin ich verwirrt ... Zumal das ja auch bei mir mal ging. Was kann die Ursache sein? Uwe Nachtrag: Das log des brickd <I> <main_macos.c:168> Brick Daemon 2.3.2 started (pid: 125, daemonized: 0) 2019-05-03 17:14:34.503472 <I> <libusb:darwin_claim_interface> no interface found; setting configuration: 1 2019-05-03 17:14:34.521378 <I> <usb.c:193> Added USB device (bus: 20, device: 4) at index 0: Master Brick [62AKJh] 2019-05-03 17:15:31.927127 <I> <network.c:260> Added new client (N: 127.0.0.1:49273, T: plain-socket, H: 22/22, A: disabled) 2019-05-03 17:15:34.429387 <I> <client.c:251> Client (N: 127.0.0.1:49273, T: plain-socket, H: 22/22, A: disabled) disconnected by peer 2019-05-03 17:15:34.429458 <W> <client.c:419> Destroying client (N: 127.0.0.1:49273, T: plain-socket, H: 22/22, A: disabled) while 1 request(s) are still pending 2019-05-03 17:15:35.504135 <W> <zombie.c:95> Destroying zombie (id: 0) while 1 request(s) are still pending Quote
borg Posted May 3, 2019 at 03:09 PM Posted May 3, 2019 at 03:09 PM Ein Rückgabewert von -1 bedeutet Timeout. Kannst du nochmal überprüfen ob du wirklich "y6V" als UID eingetragen hast? Quote
duaw Posted May 3, 2019 at 04:20 PM Author Posted May 3, 2019 at 04:20 PM HEUREKA! Um auch GAAAANZ sicher zu gehen (ja, ich hab's mit den Augen ... ) habe ich die UID im BrickV im Poti-Tab oben links markiert, kopiert, gepastet: "y6V". Und ja, ich hab' mich auch schon bei drei Buchstaben vertippt. Erneutes Testen. Geht! Warum denn Beim erneuten Testen habe ich die UID getippt. Habe dann mal einen Diff gemacht. Siehe da, "y6V" kann etwas anderes als "y6V" sein. Siehe Anhang. Beim Markieren/Kopieren/Pasten aus dem BrickV gab es lt. Hexdump in der UID die drei Bytes EF BB BF vor dem 'y'. Das kann ich auch in meinem Netbeans-Editor bzw. BBEdit merken, aber nur, wenn ich mit Cursor-Rechts/-Links drüber fahre, was ich aber normalerweise nicht mache. nano hätte mir ein space gezeigt, wenn ich das rechtzeitig gemacht hätte. Back to the basic tools ... GRRRR Ist das nur bei mir so oder kann das jemand nachstellen? Ok, die Bindings sind nach wie vor ok!!! Unter Windows passiert das mit den Extra-Bytes nicht bzw. zumindest nicht so, dass ich es im Netbeans-Editor am Cursor-Verhalten merke. (Habe ich aber nicht weiter gecheckt.) Wieder etwas gelernt ... Gruß, Uwe Quote
photron Posted May 3, 2019 at 04:49 PM Posted May 3, 2019 at 04:49 PM Die Extra Bytes da sind der "UTF-8 Byte Order Mark", der bei UTF-8 optional ist. Kann ich allerdings nicht nachstellen. Wenn ich unter macOS 10.11.6 mit Brick Viewer 2.4.2 die UID aus der Setup Tab Tabelle oder dem Device Tab kopieren und in nano einfüge bekomme ich nur exakt die Bytes die ich erwarte. Eigentlich ist ein "Byte Order Mark" nur am Anfang erlaubt. Bei dir steht er dann aber in der Mitte der Datei und dein Editor lässt dir das durchgehen. Dazu erschwerend kommt, dass die C/C++ Bindings beim Base58 dekodieren nicht so streng sind wie die anderen Bindings und dir 0xEF, 0xBB, 0xBF durchgehen lassen, dadurch die UID aber falsch dekodieren. Dadurch schicken die Bindings dann intern an die falsche UID und du bekommst einen Timeout. Ich setze mir das mal auf die TODO Liste, dass in den C/C++ Bindings zu verbessern und bei ungültiger UID das auch so als Fehler zu melden, anstatt das still hinzunehmen. Quote
duaw Posted May 3, 2019 at 07:37 PM Author Posted May 3, 2019 at 07:37 PM Hallo, Photron, ich benutze 10.14.4 und auch 2.4.2. (Wie finde ich raus, welches python etc. Brickv verwendet? Oder liefert er alles mit, was er braucht?) Ich habe NICHT gesagt, dass ich nach nano kopiere! nano macht alles richtig beim Kopieren! Ich habe im Netbeans-Editor (8.2) die kopierte Zeichenkette zwischen zwei Anführungszeichen eingefügt. Da wird nichts angezeigt, die Bytes sind aber da, und sie bleiben beim Speichern. Wenn nano diese Datei öffnet, dann zeigt nano ein Extra-Space an. Der Netbeans-Editor weist das Verhalten nur auf, wenn zwischen Anführungszeichen eingefügt wird. (seems to be feature, not a bug ... ) Ich hab mal aus ein paar anderen Apps Text aus Masken und Menüs kopiert und im Editor von Netbeans zwischen zwei "" eingefügt. NUR beim Text, der aus dem Brickv kopiert wurde, wird in meinen Versuchen diese UTF-8 Byte Order Mark mit eingefügt. Das lässt mich denken, dass beim Markieren und Kopieren aus dem Brickv diese Information der Zwischenablage mit übergeben bzw. dort hinzugefügt wird. Vielleicht kann man dieses Verhalten abschalten? Danke für das ToDo! Schönes Wochenende, Uwe P.S. Wie kann man aus der Setup-Tabelle des Brickv die UID kopieren? Ein Klick markiert die Zeile, ein Doppelklick wechselt direkt zum Tab und ein Rechtsklick bewirkt bei mir gar nichts. Quote
photron Posted May 6, 2019 at 11:59 AM Posted May 6, 2019 at 11:59 AM Okay, ich habe mir NetBeans 8.2 installiert und kann das Problem nachstellen. Das scheint eine bisher ungefixter Bug in Qt 5 unter macOS zu sein, dass der BOM beim Kopieren damit dran gepackt wird: https://bugreports.qt.io/browse/QTBUG-61562 Teste mal bitte diese Brick Viewer Version, die einen Workaround für dieses Bug beinhaltet: http://download.tinkerforge.com/_stuff/brickv_macos_2_4_2_utfbom_fix.dmg Auf dem Setup Tab kannst du die UID in der Baumansicht markieren und per Cmd+C kopieren. Quote
duaw Posted May 6, 2019 at 03:03 PM Author Posted May 6, 2019 at 03:03 PM Copy in / Paste aus BrickV: Geht. Auf dem Setup Tab kannst du die UID in der Baumansicht markieren und per Cmd+C kopieren. Oh mann, die Blau-Nuancen sind sich SO ähnlich, dass ich bis eben nicht gesehen habe, dass sie unterschiedlich sind. Habe noch nie gesehen, dass da etwas "markiert" war ... Habe ergo noch nie versucht, da etwas zu kopieren ... Weder hier noch unter Windows, seit ALLEN Versionen bisher ... Danke für die Aufklärung! Gruß, Uwe Quote
photron Posted May 10, 2019 at 03:08 PM Posted May 10, 2019 at 03:08 PM Das UTF-8 BOM Problem ist jetzt in Brick Viewer 2.4.3 behoben. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.