dreamshader - Danke aber wie krieg ich denn dann die Pinnummer in die Funktion myInterrupt wenn ich da keinen Parameter übergeben darf? Für jeden Interrupt eine eigene Funktion schreiben kann ja auch nicht die Lösung sein oder?
Beiträge von mittererr
-
-
Da hast Du natürlich vollkommen recht - das habe ich angepasst.
Was mir allerdings mehr sorgen macht - wie kriege ich die Pinnummer in die Methode "myInterrupt"? Mit dem Aufruf "&myInterrupt(i)" bekomme ich den Compiler Fehler - ohne das "&" bekommen ich den Speicherzugriffsfehler?
Ich denke daran scheitert das ganze Projekt aktuell. -
Ich bin als root eingeloggt um alle Eventualitäten ausschließen zu können.
in der Ausgabe erhalte ich:
Waiting ... Done. counter: 1
Wenn ich einen Interrupt auslöse (Funktionsgenerator) dann kommt:
Waiting ... Speicherzugriffsfehler
-
Danke - ich hab das mal korrigiert. Wenn ich das "&" vor den Funktionsaufruf "myInterrupt(i)" setze bekomme ich einen Compilerfehler. Der lautet "error: lvalue required as unary '&' operand"
Der Code sieht jetzt so aus:
C
Alles anzeigen#include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include <wiringPi.h> static volatile int globalCounter[17] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* * myInterrupt: ********************************************************************************* */ void myInterrupt(int pinNo) { globalCounter[pinNo]++; } /* ********************************************************************************* * main ********************************************************************************* */ void main(void) { int myCounter = 0; // Setup Wiring Pi if (wiringPiSetup() < 0) { fprintf(stderr, "Unable to setup wiringPi: %s\n", strerror(errno)); } // Setup Pins int i; for(i = 0; i <= 17; i++) { if (wiringPiISR(i, INT_EDGE_RISING, &myInterrupt(i)) < 0) { fprintf(stderr, "Unable to setup ISR: %s\n", strerror(errno)); } } // TEST OUTPUT for (; { printf("Waiting ... "); fflush(stdout); while (myCounter == globalCounter) delay(100); printf(" Done. counter: %5d\n", globalCounter[0]); myCounter = globalCounter; } }
-
Schönen Nachmittag,
ich bin gerade dabei das WiringPi Beispiel hier für meinen Bedarf abzuwandeln. Leider sind meine C-Kenntnisse aus Schulzeiten schon sehr eingerostet.
Was will ich erreichen:
Ich will die Interrupts für alle GPIO Pins auswerten.Mein aktueller Code:
C
Alles anzeigen#include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> #include <wiringPi.h> // What GPIO input are we using? // This is a wiringPi pin number #define BUTTON_PIN 0 // globalCounter: // Global variable to count interrupts // Should be declared volatile to make sure the compiler doesn't cache it. //static volatile int globalCounter = 0; static volatile int globalCounter[17] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* * myInterrupt: ********************************************************************************* */ int myInterrupt(int pinNo) { globalCounter[pinNo]++; return &globalCounter; } /* ********************************************************************************* * main ********************************************************************************* */ void main(void) { int myCounter = 0; // Setup Wiring Pi if (wiringPiSetup() < 0) { fprintf(stderr, "Unable to setup wiringPi: %s\n", strerror(errno)); } // Setup Pins int i; for(i = 0; i <= 17; i++) { if (wiringPiISR(i, INT_EDGE_RISING, myInterrupt(i)) < 0) { fprintf(stderr, "Unable to setup ISR: %s\n", strerror(errno)); } } // TEST OUTPUT for (;; ) { printf("Waiting ... "); fflush(stdout); while (myCounter == globalCounter) delay(100); printf(" Done. counter: %5d\n", globalCounter[0]); myCounter = globalCounter; } }
Wenn ich diesen Code am RPi laufen lasse bekomme ich einen "Speicherzugriffsfehler"?
Kann mir jemand einen Tipp geben, wie ich den Code korrigieren muss?
Danke
-
Guten Morgen,
ich versuche das Paket "btscanner" zu installieren.
Kennt jemand das Paket? Warum kann ich das nicht installieren? Muss ich dafür ein eigenes Repository angeben? Andere Pakete wie "dnsutils" konnte ich problemlos installieren.
Danke für Eure Hilfe
-
Schönen guten Abend,
hat jemand den E355 von HUAWEI und Arch laufen. Ich hab den Treiber unter http://www.huaweidevice.com/worldwide/down…softid=NDcwMzU=
runtergeladen. Jetzt stehe ich allerdings etwas auf dem Schlauch wie ich das in Arch gebacken kriege.Danke für Eure Hilfe
-
Nö das hat's leider auch nicht gebracht. Dauert zwar eine Weile aber es ändert sich nichts.
Wenn ich das Modem samt USB Hub vom RPi trenne dann bleibt das Modem trotzdem im "online Mode"! Das Ding checkt also nichtmal wenn die USB Verbindung unterbrochen wird!
Wenn ich den Hub dann an einem Windows Rechner anschließe und die Windows Software von dem Stick aufrufe wird der Stick sofort in den "command Mode" versetzt.Es muss also eine Lösung geben softwaremäßig diesen Reset durchzuführen?
Hab jetzt einen anderen Stick probiert - damit hat es sofort geklappt. TP-Link wandert in die Elektroschrott Kiste . . .Danke für Eure Hilfe!
-
Das ist alles schön und gut aber mein Modem nimmt keine AT - Commands entgegen . . .
Code[root@alarmpi etc]# wvdial signal --> WvDial: Internet dialer version 1.61 --> Cannot get information for serial port. --> Initializing modem. --> Sending: ATH0 --> Sending: ATQ0 --> Re-Sending: ATH0 --> Modem not responding.
Kann ich vielleicht das Modem so konfigurieren, dass die Verbindung zum Netzbetreiber abbricht sobald die Verbindung zu wvdial abbricht? Dann komme ich garnicht in die Situation, dass der Stick nicht mehr reagiert.
-
Hallo zusammen,
ich habe meinen UMTS Stick (TP-Link, MA180) am RPi laufen (über powered USB Hub). Das läuft für einige Stunden recht gut. Irgendwann bricht wvdial die Verbindung ab - keine Ahnung warum. Das wäre auch noch nicht weiter tragisch, das Problem ist vielmehr, dass das Modem vom dem Abbruch nichts mitbekommt und im "online mode" bleibt.
Ich nun aber nicht mehr auf das Modem zugreifen:Code[root@alarmpi /]# wvdial signal --> WvDial: Internet dialer version 1.61 --> Cannot get information for serial port. --> Initializing modem. --> Sending: ATZ --> Sending: ATQ0 --> Re-Sending: ATZ --> Modem not responding.
Der einzige weg der hilft ist es den Stick aus- und wieder einzustecken. Das will ich aber nicht, weil die Hardware so mal extern laufen soll und ich keine Lust habe da jeden Tag hinzufahren .Ich habe gelesen, dass man ein Modem mit einem "+++" String aus dem "online Mode" in den "command Mode" holen kann. Ich habe das mal so an das Modem geschickt:
Hat aber leider keine Wirkung.
Danke für Eure Tipps . . .
-
-
Ich muss die Sache nochmal aufwärmen. Leider kann ich noch immer nicht auf das Modem zugreifen wenn es online ist.
Zusätzlich habe ich das Problem, dass wenn die Verbindung abbricht ich das Modem nicht mehr aus dem "online Mode" bekomme.
Hier http://www.tldp.org/HOWTO/Modem-HOWTO-18.html ist das Problem ganz genau beschrieben allerdings kann ich dem Modem keine Befehle mehr schicken. Ich habe mir mal ein Script mit dem "+++" Befehl gebaut aber das greift leider auch nicht.
Kann mir jemand sagen wie ich das Modem wieder in den "Command Mode" bekomme??
-
Achtung jetzt wird's richtig spannend:
ich habe heute Nachmittag meine neuen RPi - Version B geliefert bekommen. Hab also aus der alten Kiste die SD-Card rausgenommen und in einen neuen RPi Version B eingesteckt, gebootet und siehe da es funktioniert. Der Stick wird als /dev/ma180zerocd gemountet!
Wie kann ich mir das erklären??
-
Nein ich glaube nicht das 0200 falsch ist.
Wenn der Stick eingesteckt wird erscheint er unter lsusb als 2357:0200 - erst nach eject /dev/sr0 wird er zu 2357:0201!
Ich möchte aber das eject /dev/sr0 auf eject /dev/ma180zerocd bekommen haben. Ich kann ja nicht sicher sein, dass das sr0 nicht plötzlich mal sr1 ist oder?
-
Nö die Rule verweigert immer noch.
die Rule schaut jetzt so aus:
Ausgaben:
Code
Alles anzeigenlsusb -v | grep -e idVendor -e idProductidVendor 0x2357 idProduct 0x0200 idVendor 0x0424 Standard Microsystems Corp. idProduct 0xec00 SMSC9512/9514 Fast Ethernet Adapter idVendor 0x0424 Standard Microsystems Corp. idProduct 0x9512 LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub idVendor 0x1d6b Linux Foundation idProduct 0x0002 2.0 root hub udevadm info -n /dev/ttyUSB2 -a Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.3/ttyUSB2/tty/ttyUSB2': KERNEL=="ttyUSB2" SUBSYSTEM=="tty" DRIVER=="" looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.3/ttyUSB2': KERNELS=="ttyUSB2" SUBSYSTEMS=="usb-serial" DRIVERS=="generic" ATTRS{port_number}=="0" looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.3': KERNELS=="1-1.3:1.3" SUBSYSTEMS=="usb" DRIVERS=="usbserial_generic" ATTRS{bInterfaceClass}=="ff" ATTRS{bInterfaceSubClass}=="ff" ATTRS{bInterfaceProtocol}=="ff" ATTRS{bNumEndpoints}=="03" ATTRS{supports_autosuspend}=="1" ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceNumber}=="03" looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1/1-1.3': KERNELS=="1-1.3" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{devpath}=="1.3" ATTRS{idVendor}=="2357" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 5" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{busnum}=="1" ATTRS{devnum}=="25" ATTRS{configuration}=="TP-LINK Configuration" ATTRS{bMaxPower}=="500mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="0" ATTRS{bcdDevice}=="0000" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{serial}=="863077010361362" ATTRS{version}==" 2.00" ATTRS{urbnum}=="357" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="TP-LINK, Incorporated" ATTRS{removable}=="removable" ATTRS{idProduct}=="0201" ATTRS{bDeviceClass}=="00" ATTRS{product}=="TP-LINK HSUPA Modem" looking at parent device '/devices/platform/bcm2708_usb/usb1/1-1': KERNELS=="1-1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="02" ATTRS{devpath}=="1" ATTRS{idVendor}=="0424" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{busnum}=="1" ATTRS{devnum}=="2" ATTRS{configuration}=="" ATTRS{bMaxPower}==" 2mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="3" ATTRS{bcdDevice}=="0200" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{version}==" 2.00" ATTRS{urbnum}=="626" ATTRS{ltm_capable}=="no" ATTRS{removable}=="unknown" ATTRS{idProduct}=="9512" ATTRS{bDeviceClass}=="09" looking at parent device '/devices/platform/bcm2708_usb/usb1': KERNELS=="usb1" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="01" ATTRS{devpath}=="0" ATTRS{idVendor}=="1d6b" ATTRS{speed}=="480" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bMaxPacketSize0}=="64" ATTRS{authorized_default}=="1" ATTRS{busnum}=="1" ATTRS{devnum}=="1" ATTRS{configuration}=="" ATTRS{bMaxPower}==" 0mA" ATTRS{authorized}=="1" ATTRS{bmAttributes}=="e0" ATTRS{bNumConfigurations}=="1" ATTRS{maxchild}=="1" ATTRS{bcdDevice}=="0306" ATTRS{avoid_reset_quirk}=="0" ATTRS{quirks}=="0x0" ATTRS{serial}=="bcm2708_usb" ATTRS{version}==" 2.00" ATTRS{urbnum}=="36" ATTRS{ltm_capable}=="no" ATTRS{manufacturer}=="Linux 3.6.11-17-ARCH+ dwc_otg_hcd" ATTRS{removable}=="unknown" ATTRS{idProduct}=="0002" ATTRS{bDeviceClass}=="09" ATTRS{product}=="DWC OTG Controller" looking at parent device '/devices/platform/bcm2708_usb': KERNELS=="bcm2708_usb" SUBSYSTEMS=="platform" DRIVERS=="dwc_otg" ATTRS{hnp}=="HstNegScs = 0x0" ATTRS{srp}=="SesReqScs = 0x1" ATTRS{regvalue}=="invalid offset" ATTRS{hsic_connect}=="HSIC Connect = 0x1" ATTRS{guid}=="GUID = 0x2708a000" ATTRS{mode}=="Mode = 0x1" ATTRS{srpcapable}=="SRPCapable = 0x1" ATTRS{regdump}=="Register Dump" ATTRS{gpvndctl}=="GPVNDCTL = 0x00000000" ATTRS{ggpio}=="GGPIO = 0x00000000" ATTRS{hprt0}=="HPRT0 = 0x00001005" ATTRS{wr_reg_test}=="Time to write GNPTXFSIZ reg 10000000 times: 400 msecs (40 jiffies)" ATTRS{hcd_frrem}=="HCD Dump Frame Remaining" ATTRS{mode_ch_tim_en}=="Mode Change Ready Timer Enable = 0x0" ATTRS{gnptxfsiz}=="GNPTXFSIZ = 0x01000306" ATTRS{remote_wakeup}=="Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0" ATTRS{busconnected}=="Bus Connected = 0x1" ATTRS{hcddump}=="HCD Dump" ATTRS{gotgctl}=="GOTGCTL = 0x001c0001" ATTRS{spramdump}=="SPRAM Dump" ATTRS{grxfsiz}=="GRXFSIZ = 0x00000306" ATTRS{gsnpsid}=="GSNPSID = 0x4f54280a" ATTRS{gusbcfg}=="GUSBCFG = 0x00001700" ATTRS{hptxfsiz}=="HPTXFSIZ = 0x02000406" ATTRS{devspeed}=="Device Speed = 0x0" ATTRS{fr_interval}=="Frame Interval = 0x1d4c" ATTRS{rem_wakeup_pwrdn}=="" ATTRS{bussuspend}=="Bus Suspend = 0x0" ATTRS{buspower}=="Bus Power = 0x1" ATTRS{hnpcapable}=="HNPCapable = 0x1" ATTRS{rd_reg_test}=="Time to read GNPTXFSIZ reg 10000000 times: 1140 msecs (114 jiffies)" ATTRS{enumspeed}=="Device Enumeration Speed = 0x1" ATTRS{inv_sel_hsic}=="Invert Select HSIC = 0x0" ATTRS{regoffset}=="0xffffffff" looking at parent device '/devices/platform': KERNELS=="platform" SUBSYSTEMS=="" DRIVERS==""
-
Den Artikel kannte ich schon.
ich habe hier noch einen gefunden: http://doc.opensuse.org/documentation/…e/cha.udev.html
Da ist udev recht gut beschrieben.
Mir fehlt aber nach wie vor der Ansatz - meine Regeln greifen einfach nicht.
Aktuell habe ich unter /dev/udev/rules.d/10-tplink.rules:
CodeKERNEL=="scsi_device", ATTRS{idVendor}=="2357", ATTRS{idProduct}=="0200", SYMLINK+="ma180zerocd"
Sollte meiner Meinung nach unter /etc einen Symlink names ma180zerocd erzeugen oder?
-
Schönen Nachmittag,
hab schon wieder eine Frage zu meinem UMTS Stick .
Ich will die Internetverbindung beim Booten automatisch herstellen. Dazu fehlen mir allerdings noch ein paar Bausteine.
Manuell mache ich das jetzt so:1. UMTS Stick am RPi stecken, Strom ein
2. RPi hat gebootet, UMTS Stick befindet sich im "ZeroCD" Mode (2357:0200)
3. Stick auf UMTS Mode umschalten (2357:0201)
4. Stick Interface definieren
Jetzt ist das Modem ansprechbar. Allerdings finde ich Schritt 3 und 4 total besch.... Vor allem bei Schritt 4 ist mir aufgefallen das der Stick einmal unter ttyUSB0 und einmal unter ttyUSB2 verfügbar ist. Das geht natürlich garnicht.
Das Heilmittel sollte doch udev sein oder? Mir fehlt leider das Fachwisse so eine Regel auf die Reihe zu bekommen.
Ah ja - usb_modeswitch hat ich probiert - scheitert aber am USB-Hub an dem der Stick gesteckt ist.
Danke für Eure Tipps!
-
Danke - das funktioniert soweit.
Diese Methode ist aber nicht gleichwertig mit Stick ausstecken und wieder einstecken oder? Wenn sich der Stick wirklich aufhängt werde ich ihn damit wohl auch nicht aus der Versenkung holen können?
-
Ich habe mich unklar ausgedrückt. Ich möchte das USB Device an sich reseten.
Beispiel: Der UMTS Stick am RPi hängt sich aus irgendeinem Grund auf. Der Soll dann per RPi resetet werden. Der RPi braucht in dem Fall keinen Reset.
-
Guten Abend,
ich habe schon wieder eine Frage. Gibt es eine Möglichkeiten ein USB Device (WLAN Stick, Bluetooth Stick, UMTS Stick, etc.) per RPi Betriebssystem (in meinem Fall Arch) in den Reset zu schicken?
Wenn man keine Möglichkeit hat das Gerät aus- und wieder einzustecken möchte ich gerne diese Variante für einen Reset nutzen können.
Danke