USB, HID, DDK? Kann mir einer den Weg ins Leicht zeigen?
-
Den Klassentreiber für HIDs.
-
is der quelloffen?
-
Nein.
-
schade
-
Notfalls findest Du im DDK Samples für Isochrone- und Bulk-Transfers. Ob Du damit etwas anfangen kannst weiß ich nicht. Ich weiß aber auch immer noch nicht, worauf Du eigentlich hinaus wolltest.
Zur erfolgreichen Anwendung des HID class drivers benötigst Du jedenfalls keinen Quell, das geht auch so.

-
So also erstmal ein großes Dankeschön.
Ich weis jetzt immerhin mal was so theoretisch alles abgeht wenn ich nen USB gerät anspreche

Will sagen dass ich nun endlich nen Überblick habe was zu machen ist.
So zum Gerät, es wird eigentlich nichts besonderes.
Es ist ein Computergesteuertes Regal, andem ein kleiner "roboter" meine CDs verwaltet.
der roboter selber wird ja via microcontroller -> ASM realisiert, also zu mindest sein "IQ" ^^, die USB schnittstelle dient lediglich um dem IC befehle zu senden, also müsste ich wahrscheinlich keinen eigenen Treiber verwenden da ich ja im Prinzip nur Daten über die USB Schnittstelle raushaue, wie sie zu interpretieren sind weis dann ja wieder der "Empfänger".
So weiterhin mal ein dankeschön für die Quellen (Bücher, websites, etc).
Weil via google etwas zu finden, naja fast ausgeschlossen
tausende von suchergebnissen ^^Kennt jemand ein gutes deutsches Buch zur Schnittstellen ansteuerung, vielleicht grad auf USB bezogen, weil meine Englisch Kenntnisse sind zwar nicht unbedingt schlecht, allerdings auch nicht grad die besten womit ich dann wohl leider mit große Zeiteinbusungen zu rechnen hätte.
Weiterhin denk ich mal werd ich dieses Forum zu meinem Lebendsinhalt erklären dürfen bis mein Projekt mal läuft *gg*
Das Prob ist halt die Zeit hab etwa ein Jahr noch Zeit und der Hauptschwerpunkt beim Projekt liegt bei mir eigentlich vor allem bei der Hardware, will say der roboter, die elektronik daher will ich so schnell wie möglich die software schreiben. um mich dann ganz allein der hardware witmen zu können.
mfg Alex
-
Da Du lediglich ein paar Bytes hin- und hersenden willst, brauchst Du mit Sicherheit keinen eigenen Treiber. Du kannst das Gerät als HID auslegen, und da hat Windows bereits alles nötige an Bord (auch wenn es hier Unterschiede zwische 98 und 98SE gibt).
Und ein gutes deutsches HID bezogenes Buch, das auch noch Beispiel-Quellen in ASM (Firmware) und Windows API enthält, habe ich bereits weiter oben erwähnt.
-
Hi Leute
wie vorausgesagt werd ich mich jetzt auch wieder melden 
Folgendes Problem:
Also um einfach mal die Kommunikation zwischen USB und rechner zu lernen hab ich mir im Laden eine Kartenlesegerät geholt für Smart Media Karten.
Nun hab ich vor einfach mal auszulesen was an der USB schnittstelle so abgeht bzw das Kartelesegerät anzusprechen. Dazu hab ich mir WinObj runtergeladen und nach der Vid/Pid wie auch immer des Geräts gekuckt, gesucht gefunden, sie lautet:
USBSTOR#Disk&Ven_Generic&Prod_STORAGE_DEVICE&Rev_0125#04601&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}So nun bin ich hergegangen und hab ne simple MFC anwendung erstellt.
In ihr ein Editfeld das einfach als Log Window dient und dann einen Start und Stop Button wann gelesen werden soll (Timer wird gesartet/gestoppt...)Hier mal der Code:
void CGhjghjDlg::OnButton2() { UpdateData(TRUE); char buf[200]; m_CtrlStart.EnableWindow(FALSE); m_CtrlStop.EnableWindow(TRUE); m_strLog=""; hTreiber = CreateFile("\\\\.\\USBSTOR#Disk&Ven_Generic&Prod_STORAGE_DEVICE&Rev_0125#04601&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}",GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0); if (hTreiber == INVALID_HANDLE_VALUE) { m_strLog="INVALID_HANDLE_VALUE!\r\n"; sprintf(buf,"GetLastError=%d",GetLastError()); m_strLog+=buf; m_strLog+="\n"; CloseHandle(hTreiber); m_CtrlStart.EnableWindow(TRUE); m_CtrlStop.EnableWindow(FALSE); UpdateData(FALSE); } else { m_strLog="USb Connection created!\r\n"; /*unsigned long BytesReturned; char read[200]; if(DeviceIoControl(hTreiber,IOCTL_STORAGE_LOAD_MEDIA,0,0,read,sizeof(read),&BytesReturned,0)!=0) { sprintf(read,"%x Bytes:%d",read,BytesReturned); MessageBox(read); } else { char buf[200]; sprintf(buf,"Fehler: %d",GetLastError()); MessageBox(buf); }*/ SetTimer(ID_TIMER,1000,NULL); UpdateData(FALSE); } } void CGhjghjDlg::OnButton3() { m_CtrlStart.EnableWindow(TRUE); m_CtrlStop.EnableWindow(FALSE); KillTimer(ID_TIMER); CloseHandle(hTreiber); } void CGhjghjDlg::OnTimer(UINT nIDEvent) { if(nIDEvent==ID_TIMER) { UpdateData(TRUE); char buf[200]; char getstring[800]; unsigned long BytesRead; int bResult = ReadFile(hTreiber, &getstring, 4, &BytesRead, NULL); if ((bResult && BytesRead) != 0) { sprintf(getstring,"%c",getstring); m_strLog+="P: "; m_strLog+=getstring; m_strLog+="\r\n"; UpdateData(FALSE); } else { sprintf(buf,"GetLastError=%d",GetLastError()); m_strLog+="N: "; m_strLog+=buf; m_strLog+="\r\n"; UpdateData(FALSE); } } CDialog::OnTimer(nIDEvent); }hTreiber ist public HANDLE hTreiber;
So in der Log sagt er mir dasder USB erfolgreich kontaktiert wurde (CreateFile ist also nicht INVALID!)
Aber sobald ie Lesenfuntion im Timer kommt spuckt er einen Fehler 87 aus was soviel heist wie ungültiger Parameter.
ABER welcher Parameter soll falsch sein, ist doch eigentlich richtig, oder wo ist der Fehler?HILFE

-
Hallo,
kurzes Drüberschauen zeigt mir erst mal einen Fehler:
int bResult = ReadFile(hTreiber, &getstring, 4, &BytesRead, NULL);das ist falsch, getstring ist doch schon ein Zeiger, richtiger ist das:
int bResult = ReadFile(hTreiber, getstring, 4, &BytesRead, NULL);Außerdem erst Array initialisieren:
char getstring[800] = {0,};falls String-Ausgaben passieren sollen. Das hier:
sprintf(getstring,"%c",getstring);paßt auch nicht, getstring ist ein Zeiger, und kein Zeichen, und das erste Zeichen von getstring wieder in getstring zu platzieren, kann gut gehen aber auch nicht (bei überlappenden Strings), deshalb besser eigene Variable definieren, z.B.:
sprintf(pBuf,"%c",*getstring);jetzt mal prüfen, was dann passiert.
MfG
-
So ok hab alle deine entdeckten Fehler ausgebessert, allerdings krieg ich beim Lesen immernoch Fehler 87, incorrect Parameter, der Code sieh´t mitlerweile so aus:
void CGhjghjDlg::OnButton2() { UpdateData(TRUE); char buf[200]; m_CtrlStart.EnableWindow(FALSE); m_CtrlStop.EnableWindow(TRUE); m_strLog=""; hTreiber = CreateFile("\\\\.\\USBSTOR#Disk&Ven_Generic&Prod_STORAGE_DEVICE&Rev_0125#04601&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}",GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,0,0); if (hTreiber == INVALID_HANDLE_VALUE) { m_strLog="INVALID_HANDLE_VALUE!\r\n"; sprintf(buf,"GetLastError=%d",GetLastError()); m_strLog+=buf; m_strLog+="\n"; CloseHandle(hTreiber); m_CtrlStart.EnableWindow(TRUE); m_CtrlStop.EnableWindow(FALSE); UpdateData(FALSE); } else { m_strLog="USb Connection created!\r\n"; SetTimer(ID_TIMER,1000,NULL); UpdateData(FALSE); } } void CGhjghjDlg::OnButton3() { m_CtrlStart.EnableWindow(TRUE); m_CtrlStop.EnableWindow(FALSE); KillTimer(ID_TIMER); CloseHandle(hTreiber); } void CGhjghjDlg::OnTimer(UINT nIDEvent) { if(nIDEvent==ID_TIMER) { UpdateData(TRUE); char buf[800]; char getstring[800]={0,}; unsigned long BytesRead; int bResult = ReadFile(hTreiber, getstring, sizeof(getstring), &BytesRead, NULL); if ((bResult && BytesRead) != 0) { sprintf(buf,"%c",*getstring); m_strLog+="P: "; m_strLog+=buf; m_strLog+="\r\n"; UpdateData(FALSE); } else { sprintf(buf,"GetLastError=%d",GetLastError()); m_strLog+="N: "; m_strLog+=buf; m_strLog+="\r\n"; UpdateData(FALSE); } } CDialog::OnTimer(nIDEvent); }
-
*push*

-
*push*

-
*push*

-
sagmal irgend jemand muss doch irgendeine Ahnung haben und mir helfen können!