@SeppJ Ach nein, es liegt doch nicht am >>... Das Programm braucht nach einiger Zeit einfach immer mehr Speicher, auch wenn ich nach /dev/null umleite... Ich hab das jetzt ein paar Tage lang beobachtet.
Aber ungeachtet dessen ist dieses Thema eigentlich schon done.
Hallo zusammen,
meine Hoffnung liegt gerade in der Schwarmintelligenz
Ich versuche ein USB gerät zu öffnen, dessen VendorID und pID mir bekannt ist um die Daten anschließend zu Verarbeiten.
Weil (wie ich das gelesen habe) libusb_open_device_with_vid_pid(...) keine guten Error werte gibt habe ich einen Umweg eingebaut.
MEIN CODE:
Ich erzeuge Erst eine Liste aller Devices und nehme mir das richtige Device heraus:
int main() {
libusb_context *context;
libusb_device **list;
size_t count = 0;
libusb_device *found;
const int vid = 1234;
libusb_init(&context);
count = libusb_get_device_list(context, &list);
assert(count > 0);
for (size_t idx = 0; idx < count; ++idx) {
libusb_device *device = list[idx];
libusb_device_descriptor desc;
libusb_get_device_descriptor(device, &desc);
if (desc.idVendor == vid) {
found = device;
}
}
libusb_free_device_list(list, count);
anschließend erzeuge ich die Verbindung mit dem USB gerät über einen Handle:
libusb_device_handle *devHanle;
int isOpen = libusb_open(found, &devHanle);
std::cout<<isOpen<<std::endl;
danach will ich die Daten auslesen und erst ein mal nur ausgeben
unsigned char data[2048];
int actual_length;
print(str(isOpen));
libusb_bulk_transfer(devHanle, 2, data, sizeof(data), &actual_length, 500);
std::cout<<data<<std::endl;
Mein Problem
an der 2. stelle ist 'isOpen' -3 ist... also 'libusb_open(...)' den folgen Error hat
LIBUSB_ERROR_ACCESS if the user has insufficient permissions
Die Frage:
kann ich mir rechte geben ohne das irgendwo in einer Datei nieder zu schreiben?
Das soll am ende ein portables Programm werden, das wenn möglich keine Änderungen in permanente Files schreibt und auch keine sudo rechte braucht.
Wie bekomme ich das hin?
Betriebssystem:
Habe Ubuntu (22.04). soll am ende für Mac, Linux und Windows laufen.
Liebe grüße und danke für die Antworten
EvD
@firefly sagte in (Ubunut) libs über x64 Linux VM für Linux arm64 downloaden?:
Und wenn apt nicht verfügbar ist, dann ist sehr wahrscheinlich auch dpkg nicht verfügbar.
Aber das alles ist pure spekulation da uns nicht bekannt ist, um was für ein system es sich da handelt.
du hast recht, dpkg ist auch nicht vorhanden...
@Cardiac danke für deine anleitung, das habe ich soweit auch "glaube" ich so gemacht. hmm.. und wo liegen dann die libs der jeweiligen archtiektur!? das habe ich nicht geblickt;)
normalerweise bin/ oder sbin/ oder k.a.:) wei kann ich das den auflisten?
@Tyrdal sagte in lesen/schreiben für shared memory:
@john-0 Umso besser, schick ihm das Buch.
Es geistern im Netz Kopien herum, wenn es denn einen Bedarf gibt. Ok, bei Archive.org wird man fündig.
@firefly sagte in make bricht mit Fehlermeldungen ab:
Ok stimmt nicht ganz das es schon aus dem support gefallen ist aber der support endet am
June 30, 2022.
https://wiki.debian.org/LTS
Und wegen mysql workbench.
Für debian 10 hab ich das hier gefunden:
das werden zwei varianten beschrieben (einmal nativ und einmal via snap)
https://idroot.us/install-mysql-workbench-debian-10/
Die snap variante funktioniert auch mit debian 11
Aber nicht auf meiner Kiste.
Hallo @SeppJ ,
danke für die Antwort.
Zu Deiner Frage. Nur was ganz einfaches; es werden drei Sprachen (deutsch, englisch und französisch) unterstützt und dementsprechende Text ausgegeben.
Die letzten Tage habe ich mich selbst darum bemüht ncursesw in einem Demo Programm zum Laufen zu bekommen. Leider ist die Doku für die wide Version nicht sonderlich gut. Es ist zwar jede Funktion sauber dokumentiert, aber es findet sich im Netz kaum etwas was korrekt beschreibt wie man die wide Version programmiert. Daher muss man sich die passenden Funktionen mühsam zusammensuchen. Falls es da Fragen gibt …
@john-0 sagte in Keyboard-Events für das Window-Resizing an ein Terminal Fenster unter Linux senden:
Nein, das muss nicht der Fall sein. Es gibt eine ganze Klassen von Anwendungen bei der das nicht der Fall ist: daemons. Ein daemon ist explizit von jedem Terminal entkoppelt. IO geht dann nur noch in Dateien und zum Steuerung eines daemons muss man explizit Signals verwenden. Damit das dann funktioniert muss man Signal Handler schreiben.
Ja, ich gehe an dere Stelle mal von dem Normalfall aus. Daemons sind da ein Spezialfall, schon allein wegen dem double-fork.
Anwendungen haben üblicherweise keinerlei Kontrolle über das Terminal. Das ergab früher auch keinerlei Sinn, weil das Terminal eine spezielle Hardware war, die man auch nicht per Programmcode in einen anderen Hardwaremodus schalten konnte. Bei einem Softwareterminal muss man die proprietären Protokolle des GUI Toolkits benutzen. Da würde ich aktuell auf DBus tippen.
Ja, das meinte ich. Als normaler User im System hat man da nicht viele Möglichkeiten. Das auch aus gutem Grund, mit derartigen Sachen kann man viel Blödsinn anstellen.
Allgemein wenn das Terminal programmieren will, sollte man die ncurses Library nutzen.
Naja, oder man verwendet eben ANSI Sequenzen. ncurses ist dagegen schon fast zu einfach und zieht es eben diverse Abhängigkeiten mit rein, wo ich mir nicht ganz sicher bin, ob man das haben will. Unicode ist dann auch etwas nervig.
@Tyrdal sagte in Windows IDE zur Linux cross compiling (debugging):
Wie meinst du das? Wsl2 ist im Grunde eine VM. Da musst du wie bei anderen VMs odfer Hardware halt ein OS drauf tun. In diesem speziellen Fall sind das bestimmte Linux-Distros. Auf denmen kannst du installieren was du lustig bist, inklusive Compiler, Skriptsprachen etc. Der XServer muss schon seit jeher auf der Maschine laufen auf der die Apps angezeigt werden sollen. Das wäre hier die Windows Maschine und die hat keinen mitgeliefert.
Sorry.. hab nicht nachgedacht bei der Antwort:) .. danke für deine Feedback
Ich habe jetzt die Pfade ohne "VS Platzhalter" eingesetzt, also quasi hart-kodiert. So funktioniert es. Nicht schön, aber ich kann bauen UND linken. Vielleicht gibt es doch irgendwelche Probleme mit Tilde, oder dergleichen.
Danke für eure Hilfe
lg Torsten
Hallo ToRein,
ich habe mir den Fall mal angeschaut und wäre von selbst nicht auf die Lösung gekommen.
Jetzt habe ich mal einen Blick auf deine Lösung geworden, interessant! Danke dafür!
@Quiche-Lorraine Vielen herzlichen Dank für deine Mühe! Das hätte ich nun wirklich nicht erwartet.
Ich war früher schon in einigen Foren unterwegs, aber so Hilfsbereit wie hier alle sind - das habe ich nicht erwartet. Ich bin allen sehr dankbar!
Ich werde es testen und werde anschließend berichten wie es gelaufen ist. Vielen Dank auch für den Link zur Doku von std::string auf cppreference - diese werde ich mir durchlesen. Dankeschön!
Da ich jetzt doch schon zu viel Zeit damit verbracht habe, dachte ich, ich poste hier eine Lösung auf eine eigene Frage.
Als ich eine externe Festplatte kaufte und an den Raspi 4 anschloss, viel mir auf, dass immer ein (spin-) Drehgeräusch bestand, egal ob die Fesplatte gemountet war oder nicht.
Das automount funktionierte bisher stabil mit systemd:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /media/hdd-linux auto noauto,nofail,x-systemd.automount,x-systemd.idle-timeout=5s,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s,_netdev,x-systemd.requires=network-online.target 0 2
Mit uhubctl und usb_drives_with_no_phantom_load versuchte ich dann lange den USB-Strom abzustellen und anzustellen, wenn das Laufwerk ungemountet bzw. gemountet wurde, was aber immer Fehler hervorbrachte.
Hier (rasberry-pi4-seagate-external-usb3-0-no-spin-down) fand ich dann die Lösung mit Seagate Dashboard wo es sich unter Windows einstellen lässt. Nachher habe ich es wieder an den Raspi angeschlossen und das Drehgeräusch verschwand, gemäss der eingestellten Zeit.
@Bashar sagte in Makefile in Textform ausgeben:
make -n
Super Danke. Das ist wonach ich gesucht habe. Ich muss mich in einen OpenSource einarbeiten und Makefile ist dort ziemlich kompliziert.
Kannst du dein Anliegen irgendwie anders beschreiben? Ich vermute, dass dir noch nicht ganz klar ist, wovon du redest, aber ich will da auch nicht raten.
@Timo_R
Ob du hier jemanden finden wirst der dir mit den Eigenheiten von USB Geräten oder libusb helfen kann weiss ich nicht (ich kann es nicht).
Was wir sicher können, ist dir mit dem C++ Teil der Sache zu helfen. Nur dazu musst du schon etwas mehr Informationen rausrücken, wie @Swordfish schon geschrieben hat:
Das bedeutet daß Dein Buildsystem keine ausführbare Datei erzeugen konnte. Es gibt sicher eine längere Ausgabe die Fehlermeldungen beinhaltet.
So lange du das nicht tust, bleibt mir nur zu sagen
@Timo_R sagte in Ansprechen und Auslesen von Daten USB 2.0:
Kannt ich schon -
Aha.
In make-samba-share-visible-in-windows-network wird eine Lösung gesucht, dass Netzlaufwerke, die mit Samba eingerichtet wurden, im Windows im Explorer unter Netzwerk angezeigt werden.
In diesem Beitrag handelt es sich zusätzlich beim Server um einen Raspi 4 mit Arch Linux ARM als OS.
Auszug aus /etc/samba/smb.conf (Konfiguration für den File-Server; z.B. das angegebene Verzeichnis bzw. das an dieses Verzeichnis gemountete Laufwerk)
[ntfs_share]
comment = Rasp NTFS Public Share
path = /home/share
browsable = yes
writable = yes
guest ok = yes
Erwähnt wird wsdd. Also mit git klonen und mit makepkg -si ziehen, erstellen, mögliche Abhängigkeiten installieren und wsdd2 installieren. Falls Schlüssel fehlen, gpg --recv-keys und gpg --lsign-key mit dem angezeigten fehlenden Schlüssel jeweils ausführen, dann sollte es gehen. Schlüssel standen auch schon in der PKGBUILD Datei.
Aber was passiert dann auf einem Raspi. Eine Fehlermeldung wird ausgegeben. Um den Fehler zu beheben, die Datei PKGBUILD öffnen und die Zeile mit arch=(x86_64) suchen und x86_64 mit armv7h ersetzen und erneut makepkg -si ausführen. Dies funktionierte auch schon mit anderen Packages. Der Tipp, dass dies funktionieren kann, stand bei den Kommentaren einer AUR-Package-Webseite, aber ich weiss jetzt gerade nicht mehr bei welchem Package.
Edit: Ich bin mir nicht mehr sicher ob noch systemctl start wsdd2.service und systemctl enable wsdd2.service ausgeführt werden muss. Der Status lässt sich mit systemctl status wsdd2.service abfragen. Der Server muss mit Samba fertig eingerichtet sein, wozu es Tutorials gibt. Mit "Netzlaufwerk verbinden..." lässt sich der Server auch ohne wsdd2 einbinden, wenn er mit Samba korrekt konfiguriert ist. Er wird einfach nicht unter Netzwerk angezeigt.
Edit: Funktionierte nur so lange es mit Kabel mit dem Router verbunden war. Als ich auf wlan wechselte, funktionierte es nicht mehr. Ich finde Netzwerke zu verstehen anspruchsvoll. Im Moment geht es zwar wieder, mit WLAN.