Author Topic: C-Binding Rotary Poti unter macOS : FAIL  (Read 533 times)

duaw

  • Jr. Member
  • **
  • Posts: 80
    • View Profile
C-Binding Rotary Poti unter macOS : FAIL
« on: April 30, 2019, 21:37:41 »
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

« Last Edit: April 30, 2019, 21:40:05 by duaw »

remotecontrol

  • Hero Member
  • *****
  • Posts: 585
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #1 on: May 01, 2019, 09:45:01 »
Hast Du mal versucht, die
Code: [Select]
ipcon_register_callback vor dem
Code: [Select]
ipcon_connect zu machen ?

So mache ich das zumindest und habe damit keine Probleme.
Denn sonst könnte Dir der Connect-Event verloren gehen.

duaw

  • Jr. Member
  • **
  • Posts: 80
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #2 on: May 01, 2019, 18:31:40 »
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


borg

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 3.119
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #3 on: May 01, 2019, 18:44:44 »
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/
Wir sind die Borg, Widerstand ist Spannung durch Stromstärke!

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.442
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #4 on: May 02, 2019, 10:25:34 »
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.

duaw

  • Jr. Member
  • **
  • Posts: 80
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #5 on: May 03, 2019, 16:51:53 »
Hallo!

Ich habe das gerade GENAU WIE DU getestet und KANN DAS PROBLEM NACHSTELLEN:

Code: [Select]
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)   
Code: [Select]
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
Code: [Select]
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
Code: [Select]
<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

« Last Edit: May 03, 2019, 17:17:22 by duaw »

borg

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 3.119
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #6 on: May 03, 2019, 17:09:35 »
Ein Rückgabewert von -1 bedeutet Timeout.

Kannst du nochmal überprüfen ob du wirklich "y6V" als UID eingetragen hast?
Wir sind die Borg, Widerstand ist Spannung durch Stromstärke!

duaw

  • Jr. Member
  • **
  • Posts: 80
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL -- SOLVED
« Reply #7 on: May 03, 2019, 18:20:23 »
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

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.442
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #8 on: May 03, 2019, 18:49:24 »
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.

duaw

  • Jr. Member
  • **
  • Posts: 80
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #9 on: May 03, 2019, 21:37:57 »
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.

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.442
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #10 on: May 06, 2019, 13:59:13 »
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.

duaw

  • Jr. Member
  • **
  • Posts: 80
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #11 on: May 06, 2019, 17:03:34 »
Copy in / Paste aus BrickV: Geht.
 
Quote
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

photron

  • Tinkerforge Staff
  • Administrator
  • Hero Member
  • *****
  • Posts: 2.442
    • View Profile
Re: C-Binding Rotary Poti unter macOS : FAIL
« Reply #12 on: May 10, 2019, 17:08:13 »
Das UTF-8 BOM Problem ist jetzt in Brick Viewer 2.4.3 behoben.