[LINUX] [C] IOW56D Fragen und ungereimtheiten....
Moderator: Guido Körber
[LINUX] [C] IOW56D Fragen und ungereimtheiten....
Hallo liebe Codemercs Community,
ich habe seit kurzem den IO warrior 56 USB Dongle. Jedoch bekomme ich immer einen Fehler der wohl mit dieser Zeile zusammenhängt: "devHandle = IowKitOpenDevice()" -> anbei mal der Komplette Code drumrum... http://pastebin.com/M3feQDum Die normalen Standard- und Beispielcodes funktionieren alle und der IOwarrior wird richtig erkannt. Nur wenn ich diese Zeile reinnehme, bekomme ich einen Fehler 20 oder so, der mir sagt: "Gerät nicht gefunden". (komischerweise ist das Gerät aber da und wird ohne diese Zeile/ von anderen Programmen erkannt.... )
Mein Ziel ist eigentlich mich per SPI mit einem Funkchip zu verbinden... oder wahlweise auch mit dem Mikrocontroller vor dem Funkchip... allerdings erwartet der RFM02 (HopeRF funkchip) 10 16-bit lange Configurationsbits. Ich habe versucht die zu senden, aber irgendwie sehe ich auf Oszi nichts. Habe auch schon die Forumsuche benutzt, aber (leider) verwenden die meisten Java und Windows, weshalb ich ein extra Thema erstellt habe.
Um möglichst viele Fehlerquellen auszuschließen beschreibe ich noch kurz mein Testsystem. Den IOwarrior habe ich folgendermaßen verbunden:
IOWarrior RFM02
SCK - CLK
MOSI - SDO
MISO - SDI
SS - SS
RDY - nIRQ
Ich habe dabei jetzt den RFM als SPI master gedacht, da der IOwarrior ja keinen Clock erzeugen kann!? Strukturmäßig könnte ich den SS weglassen, da der RFM ja der einzige ist, oder? Weiterhin ist der RFM02 ja ein Sender- das heißt ich brauche auch den MOSI nicht!? D.h. 2 pins Einsparung wären möglich oder klappt es dann erst recht nicht.
Danke schon mal für die Hilfe. =)
LG Christian
ich habe seit kurzem den IO warrior 56 USB Dongle. Jedoch bekomme ich immer einen Fehler der wohl mit dieser Zeile zusammenhängt: "devHandle = IowKitOpenDevice()" -> anbei mal der Komplette Code drumrum... http://pastebin.com/M3feQDum Die normalen Standard- und Beispielcodes funktionieren alle und der IOwarrior wird richtig erkannt. Nur wenn ich diese Zeile reinnehme, bekomme ich einen Fehler 20 oder so, der mir sagt: "Gerät nicht gefunden". (komischerweise ist das Gerät aber da und wird ohne diese Zeile/ von anderen Programmen erkannt.... )
Mein Ziel ist eigentlich mich per SPI mit einem Funkchip zu verbinden... oder wahlweise auch mit dem Mikrocontroller vor dem Funkchip... allerdings erwartet der RFM02 (HopeRF funkchip) 10 16-bit lange Configurationsbits. Ich habe versucht die zu senden, aber irgendwie sehe ich auf Oszi nichts. Habe auch schon die Forumsuche benutzt, aber (leider) verwenden die meisten Java und Windows, weshalb ich ein extra Thema erstellt habe.
Um möglichst viele Fehlerquellen auszuschließen beschreibe ich noch kurz mein Testsystem. Den IOwarrior habe ich folgendermaßen verbunden:
IOWarrior RFM02
SCK - CLK
MOSI - SDO
MISO - SDI
SS - SS
RDY - nIRQ
Ich habe dabei jetzt den RFM als SPI master gedacht, da der IOwarrior ja keinen Clock erzeugen kann!? Strukturmäßig könnte ich den SS weglassen, da der RFM ja der einzige ist, oder? Weiterhin ist der RFM02 ja ein Sender- das heißt ich brauche auch den MOSI nicht!? D.h. 2 pins Einsparung wären möglich oder klappt es dann erst recht nicht.
Danke schon mal für die Hilfe. =)
LG Christian
- Christoph Jung
- Posts: 671
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Die Mischung aus unserer API und den Linux-USB funktionen ist schon seltsam.
Welches Linux wird denn verwendet?
Wurde die IO-Warrior API installiert?
Ist die 10-iowarrior.rules in den etc/udev/rules.d/ kopiert worden?
Welches Linux wird denn verwendet?
Wurde die IO-Warrior API installiert?
Ist die 10-iowarrior.rules in den etc/udev/rules.d/ kopiert worden?
-
- Site Admin
- Posts: 2857
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Also für die nächste Überarbeitung des Datenblattes vom IO-Warrior würde mich mal interessieren welche Informationen aus dem Datenblatt zu diesem grundlegenden Fehlverständnis geführt haben?chrischa wrote:Ich habe dabei jetzt den RFM als SPI master gedacht, da der IOwarrior ja keinen Clock erzeugen kann!? Strukturmäßig könnte ich den SS weglassen, da der RFM ja der einzige ist, oder? Weiterhin ist der RFM02 ja ein Sender- das heißt ich brauche auch den MOSI nicht!? D.h. 2 pins Einsparung wären möglich oder klappt es dann erst recht nicht.
Es ist absolut unmöglich den IO-Warrior56 als SPI Slave anzusteuern. Der IO-Warrior56 ist ein SPI Master und erzeugt selbstverständlich selber den Takt für die Datenübertragung. /SS kann man bei keinem (ordentlichen) SPI Slave weglassen, weil mit diesem Signal Anfang und Ende einer Kommunikation signalisiert werden. Da der IO-Warrior der Master ist, ist MOSI der Pin über den er seine Daten sendet, auf der Gegenseite geht das an SDI.
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Superschnelle Antwort =) - Ja das ist etwas wild, da ich nach dem "normalen" einrichten und installieren Fehler bekommen habe. Deshalb habe ich dann mit experimentieren angefangen und das irgendwie alles ineinander getan. Das Problem ist, das es etwas unübersichtlich ist. Ein richtiges Linux "howto" oder ein codemercs wiki wäre bestimmt nicht nur für mich hilfreich =)
linux ist "ubuntu lucid lynx 10.04" bzw 12.04 ... beide weit nach kernel 2.62.
IOwarrior rules habe ich kopiert und iowarrior.h und iowkit.h liegen im Verzeichnis...
Danke schon mal für die Antworten =)
Christian
Edit:
habe die Pins jetzt so geändert das es stimmen sollte. - Danke dafür =)
linux ist "ubuntu lucid lynx 10.04" bzw 12.04 ... beide weit nach kernel 2.62.
IOwarrior rules habe ich kopiert und iowarrior.h und iowkit.h liegen im Verzeichnis...
Danke schon mal für die Antworten =)
Christian
Edit:
Hier habe ich einfach nicht gründlich recherchiert...Guido Körber wrote:chrischa wrote:Ich habe dabei jetzt den RFM als SPI master gedacht, da der IOwarrior ja keinen Clock erzeugen kann!? Strukturmäßig könnte ich den SS weglassen, da der RFM ja der einzige ist, oder? Weiterhin ist der RFM02 ja ein Sender- das heißt ich brauche auch den MOSI nicht!? D.h. 2 pins Einsparung wären möglich oder klappt es dann erst recht nicht.
Also für die nächste Überarbeitung des Datenblattes vom IO-Warrior würde mich mal interessieren welche Informationen aus dem Datenblatt zu diesem grundlegenden Fehlverständnis geführt haben?
habe die Pins jetzt so geändert das es stimmen sollte. - Danke dafür =)
- Christoph Jung
- Posts: 671
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Für die installation des IO-Warrior unter Ubuntu folgendes ausführen (bezogen auf den iowkit Ordner):
sudo cp 10-iowarrior.rules /etc/udev/rules.d/
Wenn alles ohne Fehler funktioniert sollte das IOWKIT ins System installiert sein. Ab dem Linux Kernel 2.6 ist der
IO-Warrior (mit den Standard Produkt IDs) im System integriert. Die Programme, die man also erstellt sollten auch Ohne die Installation
des SDKs funktionieren.
- cd libiowkit-1.5.0
sudo ./configure
sudo make
sudo make install
sudo cp 10-iowarrior.rules /etc/udev/rules.d/
Wenn alles ohne Fehler funktioniert sollte das IOWKIT ins System installiert sein. Ab dem Linux Kernel 2.6 ist der
IO-Warrior (mit den Standard Produkt IDs) im System integriert. Die Programme, die man also erstellt sollten auch Ohne die Installation
des SDKs funktionieren.
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Danke wieder für die Superschnelle Antwort.. allerdings habe ich das (,wie schon oben geschrieben,) bereits getan ... wenn das vielleicht der Verweis sein sollte dass ich das nochmal machen soll, kann ich dies gerne tun..Christoph Jung wrote:Für die installation des IO-Warrior unter Ubuntu folgendes ausführen (bezogen auf den iowkit Ordner):
Zur vollstängikeit halber nicht vergessen die Regeln kopieren (im libiowkit-1.5.0 Ordner):
- cd libiowkit-1.5.0
sudo ./configure
sudo make
sudo make install
sudo cp 10-iowarrior.rules /etc/udev/rules.d/
Wenn alles ohne Fehler funktioniert sollte das IOWKIT ins System installiert sein. Ab dem Linux Kernel 2.6 ist der
IO-Warrior (mit den Standard Produkt IDs) im System integriert. Die Programme, die man also erstellt sollten auch Ohne die Installation
des SDKs funktionieren.
kann ich dann einfach iowkit.h und iowarrior.h überall einbinden oder muss ich die dann trotzdem kopieren. Da nach meiner bisherigen Installation ohne das hinterherkopieren der headerdateien gar nichts ging.
MfG Christian
- Christoph Jung
- Posts: 671
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Nein das war keine Aufforderung. Das war nur der Vollständigkeit halber.
Mit welcher Entwicklungsumgebung wird denn gearbeitet?
Mit welcher Entwicklungsumgebung wird denn gearbeitet?
- Christoph Jung
- Posts: 671
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Hier mal ein kurzes Beispiel (zum IO-Warrior40) welches ausschließlich die IOW-Kit Funktionen nutzt.
Code: Select all
// compile with :
// gcc -Wall -g -liowkit <FILE>.c iowkit.c -o <AppName>
//
// start with : ./<AppName>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <linux/ioctl.h>
#include <errno.h>
#include <sys/time.h>
#include <time.h>
#include <iowkit.h>
#include <iowarrior.h>
BOOLEAN WriteSimple(IOWKIT_HANDLE devHandle, UCHAR value)
{
IOWKIT40_IO_REPORT rep;
// Init report
memset(&rep, 0xff, sizeof(rep));
rep.ReportID = 0;
rep.Bytes[3] = (UCHAR) value;
return IowKitWrite(devHandle, IOW_PIPE_IO_PINS,(PCHAR) &rep, IOWKIT40_IO_REPORT_SIZE) == IOWKIT40_IO_REPORT_SIZE;
}
//Random for Set LEDs
int myrand(void)
{
srand(time(NULL));
return (int)(((rand()/(float)RAND_MAX)*255)+0);
}
int main (void)
{
IOWKIT_HANDLE devHandle;
unsigned short serial[9];
char serial_t[9];
int j;
//Öffne IO-Warrior
devHandle = IowKitOpenDevice(); // devHandle ist der Erste IO-Warrior, der gefunden wurde !
//int numIows = IowKitGetNumDevs(); // Anzahl der IO-Warrior
if(devHandle == NULL)
{
printf( "iowarrior open failed %d\n",errno );
return 0;
}
//Bsp. für ProductID abgleich
if(IowKitGetProductId(devHandle) == IOWKIT_PRODUCT_ID_IOW40)
printf( "Found IO-Warrior40\n" );
IowKitGetSerialNumber(devHandle, serial); // Seriennummer ermitteln und in "serial" speichert
/*Work aroung for Serial*/
for (j = 0; j < 9; j++)
serial_t[j] = serial[j];
printf("Serial = %s\n", serial_t);
printf("Revision = %04x\n",(unsigned int) IowKitGetRevision(devHandle));
int i;
for(i=0; i<10; i++)
{
//Schreibfunktion (siehe oben)
WriteSimple(devHandle, myrand());
usleep(500000);
}
//Schließen !!!!!!!
IowKitCloseDevice(devHandle);
return 1;
}
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Hallo, ich verwende ganz normal gedit bzw. vim mit Syntax highlight. Habe aber schon überlegt eclipse zu nehmen... zwecks debugging etc.
zu dem Beispiel welches Sie gepostet haben: Hat das einen speziellen Grund warum das Beispiel für den iow40 ist? ... ich habe den 56 und im Beispielcode gab es dafür eine extra Routinen - oder ist das egal?
Vielen Dank,
Christian
zu dem Beispiel welches Sie gepostet haben: Hat das einen speziellen Grund warum das Beispiel für den iow40 ist? ... ich habe den 56 und im Beispielcode gab es dafür eine extra Routinen - oder ist das egal?
Vielen Dank,
Christian
- Christoph Jung
- Posts: 671
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Ist im Prinzip egal. Aber beim IO-Warrior40 Starterkit sind LEDs drauf und das ist zum Testen immer ganz Praktisch. Da muss ich mir nichts hier zusammenbasteln oder lange suchen.
Beim 56er sind halt die report Variablen anders und halt die Anzahl der Ports und Bytes. Alles andere ist gleich, es geht hauptsächlich darum zu zeigen wie man es machen sollte/könnte.
Es fehlen natürlich Sicherheitsabfragen wie z.B. Hat das Write geklpatt, ist der IO-Warrior noch da und dergleichen.
Ich nutzt QT und den CodeLite Editor. Aber Eclipse oder Netbeans sind auch gute Compiler.
Beim 56er sind halt die report Variablen anders und halt die Anzahl der Ports und Bytes. Alles andere ist gleich, es geht hauptsächlich darum zu zeigen wie man es machen sollte/könnte.
Es fehlen natürlich Sicherheitsabfragen wie z.B. Hat das Write geklpatt, ist der IO-Warrior noch da und dergleichen.
Ich nutzt QT und den CodeLite Editor. Aber Eclipse oder Netbeans sind auch gute Compiler.
Re: [LINUX] [C] IOW56D Fragen und ungereimtheiten....
Danke für das gute Beispiel, damit lässt sich auf jeden Fall arbeiten!Christoph Jung wrote:Hier mal ein kurzes Beispiel (zum IO-Warrior40) welches ausschließlich die IOW-Kit Funktionen nutzt.
...
Mal sehen wie weit ich komme.