Jump to content

C-Binding Rotary Poti unter macOS : FAIL


Recommended Posts

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

Link zu diesem Kommentar
Share on other sites

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

 

 

Link zu diesem Kommentar
Share on other sites

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.

Link zu diesem Kommentar
Share on other sites

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

 

 

Link zu diesem Kommentar
Share on other sites

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

Diff.png.69e12b17803679820efe58ee43914dfb.png

Link zu diesem Kommentar
Share on other sites

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.

Link zu diesem Kommentar
Share on other sites

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.

 

Link zu diesem Kommentar
Share on other sites

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.

Link zu diesem Kommentar
Share on other sites

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

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...