Inputs am IOWarrior 40 konfigurieren
Moderator: Guido Körber
Inputs am IOWarrior 40 konfigurieren
Hallo,
ich habe mir das IOW40 Starterkit gekauft. Ich versuche im Moment den Schalter auf Port 0.0 abzufragen. Habe mich bereits durch alle Manuals durchgearbeitet doch es funktioniert nicht Ordnungsgemäß. Ich habe meinen C++ Code angehängt alle Funktionen funktionieren wie gewünscht bis auf getportstatus() und getportstatusdirect(). Hier wird anscheinend nicht der richtige Wert abgefragt obwohl Port/Pin Werte stimmen.
C++ Code: https://dl.dropboxusercontent.com/u/5339358/src.zip
Meine System Daten:
Win 8.1
USB 2.0
VS 2012
Ich hoffe mir kann jemand weiterhelfen.
ich habe mir das IOW40 Starterkit gekauft. Ich versuche im Moment den Schalter auf Port 0.0 abzufragen. Habe mich bereits durch alle Manuals durchgearbeitet doch es funktioniert nicht Ordnungsgemäß. Ich habe meinen C++ Code angehängt alle Funktionen funktionieren wie gewünscht bis auf getportstatus() und getportstatusdirect(). Hier wird anscheinend nicht der richtige Wert abgefragt obwohl Port/Pin Werte stimmen.
C++ Code: https://dl.dropboxusercontent.com/u/5339358/src.zip
Meine System Daten:
Win 8.1
USB 2.0
VS 2012
Ich hoffe mir kann jemand weiterhelfen.
MfG Oliver Becker
-----------------------------------------------
What's hard to write mus be hard to read
-----------------------------------------------
What's hard to write mus be hard to read
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Inputs am IOWarrior 40 konfigurieren
Was genau funktioniert denn nicht wie gewünscht? Ohne zu wissen was denn rauskommt und was rauskommen soll ist es schwer darauf zu Antworten.
EDIT:
Wer lesen kann.....
Ich bin erst Montag wieder im Büro um dir das anzuschauen.
Aber beim groben drüberschauen ist mir nichts aufgefallen.
Evtl, irgendwo falsch herum ODER oder UND verwendet?
EDIT:
Wer lesen kann.....
Ich bin erst Montag wieder im Büro um dir das anzuschauen.
Aber beim groben drüberschauen ist mir nichts aufgefallen.
Evtl, irgendwo falsch herum ODER oder UND verwendet?
Re: Inputs am IOWarrior 40 konfigurieren
Hallo,
in der getpinstatus() Methode wird true zurückgeliefert unabhängig ob der Schalter gedrückt ist oder nicht. Daher habe ich den Eindruck, dass ich hier einen Konfigurationsfehler im Aufruf IowKitRead() habe.
Danke für die Rasche Antwort
in der getpinstatus() Methode wird true zurückgeliefert unabhängig ob der Schalter gedrückt ist oder nicht. Daher habe ich den Eindruck, dass ich hier einen Konfigurationsfehler im Aufruf IowKitRead() habe.
Danke für die Rasche Antwort
MfG Oliver Becker
-----------------------------------------------
What's hard to write mus be hard to read
-----------------------------------------------
What's hard to write mus be hard to read
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Inputs am IOWarrior 40 konfigurieren
Wie ist denn der Schalter angeschlossen?
Re: Inputs am IOWarrior 40 konfigurieren
Hallo,
der Schalter ist an Port 0.0 angeschlossen ein Schaltplan (des Starterkits) ist hier:
https://dl.dropboxusercontent.com/u/533 ... terkit.JPG
der Schalter ist an Port 0.0 angeschlossen ein Schaltplan (des Starterkits) ist hier:
https://dl.dropboxusercontent.com/u/533 ... terkit.JPG
MfG Oliver Becker
-----------------------------------------------
What's hard to write mus be hard to read
-----------------------------------------------
What's hard to write mus be hard to read
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: Inputs am IOWarrior 40 konfigurieren
Ah, OK, hätte richtig lesen sollen…
Kann sein, dass da Werte aus dem Puffer gelesen werden.
Kann sein, dass da Werte aus dem Puffer gelesen werden.
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Inputs am IOWarrior 40 konfigurieren
Ein Versuchen wäre mal mit dem Special-Mode 0xFF (Getting Pin Status oder so) die IO-Ports auszulesen.
Vielleicht behebt das den Fehler.
Vielleicht behebt das den Fehler.
Re: Inputs am IOWarrior 40 konfigurieren
Hallo,
ich habe den Special Mode eingebaut. Das senden Funktioniert soweit auch, doch im Report steht danach immer noch nicht der gewünschte Wert 0x01 bzw 0xFE. Ich habe leider auch kein konkretes Beispiel gefunden wie man bei dem I OWarrior stupf den Input auslesen kann. Kann doch eigentlich nicht so schwer sein oder?
ich habe den Special Mode eingebaut. Das senden Funktioniert soweit auch, doch im Report steht danach immer noch nicht der gewünschte Wert 0x01 bzw 0xFE. Ich habe leider auch kein konkretes Beispiel gefunden wie man bei dem I OWarrior stupf den Input auslesen kann. Kann doch eigentlich nicht so schwer sein oder?
Code: Select all
#define PIN0 0x01;
#define PIN1 0x02;
#define PIN2 0x04;
#define PIN3 0x08;
#define PIN4 0x10;
#define PIN5 0x20;
#define PIN6 0x40;
#define PIN7 0x80;
unsigned char IOWARRIOR::getpin(int pin)
{
switch(pin+1)
{
case 1: return PIN0;
break;
case 2: return PIN1;
break;
case 3: return PIN2;
break;
case 4: return PIN3;
break;
case 5: return PIN4;
break;
case 6: return PIN5;
break;
case 7: return PIN6;
break;
case 8: return PIN7;
break;
default: return '0x18';
}
}
bool IOWARRIOR::send(int port, unsigned char byte, bool spec)
{
if(m_eState==USB_S_INIT)
{
ULONG numberofbytes = 0;
if(!spec)
{
m_report.Bytes[port] = ~byte;
numberofbytes = IowKitWrite(m_handle,IOW_PIPE_IO_PINS,(PCHAR)&m_report,IOWKIT40_IO_REPORT_SIZE);
if(numberofbytes == IOWKIT40_IO_REPORT_SIZE)
{
return true;
}
else
{
m_elastError = IOW_SEND_ERR;
uninit();
return false;
}
}
else
{
m_report.Bytes[port] = 0;
m_report.ReportID = 0xFF;
numberofbytes = IowKitWrite(m_handle,IOW_PIPE_SPECIAL_MODE,(PCHAR)&m_report,IOWKIT_SPECIAL_REPORT_SIZE);
}
if(numberofbytes == IOWKIT_SPECIAL_REPORT_SIZE)
{
return true;
}
else
{
m_elastError = IOW_SEND_ERR;
uninit();
return false;
}
}
else
{
m_elastError = USB_NOTINIT;
return false;
}
}
bool IOWARRIOR::getportstatus(int port, int pin)
{
send(port,pin,true); //Special Report 0xFF abfragen
int bit = m_report.Bytes[port];
bit = bit&getpin(pin); //Ergebnis des gewünschten Prots mit gewünschtem Pin verunden
if(bit != getpin(pin))
{
return false;
}
}
Main:
int Auswahl = 0;
IOWARRIOR KIT1;
cout << "Bitte geben Sie den Pin an, dessen Input Sie detektieren m" << "\x94" << "chten: (1-32): ";
cin >> Auswahl;
int port = (Auswahl-1)/8;
int pin = KIT1.getpin((Auswahl-1)%8);
if(KIT1.send(port,pin)) //Pin auf high setzen
{
for(int i = 0;i < 5; i++)
{
if(KIT1.getportstatus(port,pin)) //Alle Pins Lesen und auf gewünschten Pin auswerten
{
cout << "PRESSED!" << endl;
}
}
}
MfG Oliver Becker
-----------------------------------------------
What's hard to write mus be hard to read
-----------------------------------------------
What's hard to write mus be hard to read
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Inputs am IOWarrior 40 konfigurieren
Irgendwie fehlt da ein IowKitRead() wo die Werte ausgelesen werden sollten.
Im Groben so:
Im Groben so:
Code: Select all
m_report.ReportID = 0xFF;
IowKitWrite(m_handle,IOW_PIPE_SPECIAL_MODE,(PCHAR)&m_report,IOWKIT_SPECIAL_REPORT_SIZE);
IowKitRead(m_handle,IOW_PIPE_SPECIAL_MODE,(PCHAR)&m_report,IOWKIT_SPECIAL_REPORT_SIZE);
//Status der Ports steht in den einzelnen m_report.Byte[]
Re: Inputs am IOWarrior 40 konfigurieren
Konnte das Problem so lösen. Vielen Dank.
MfG Oliver Becker
-----------------------------------------------
What's hard to write mus be hard to read
-----------------------------------------------
What's hard to write mus be hard to read
- Christoph Jung
- Posts: 670
- Joined: Sun Oct 08, 2006 3:43 pm
- Location: Germany / Berlin
- Contact:
Re: Inputs am IOWarrior 40 konfigurieren
Was war es denn?