USB Ansprechen --> Zeichenkette senden via USB
-
Hi leute,
habe die Aufgabe bekommen eine Zeichenkette via usb an ein gerät zu senden, habe mich auch schon totgesucht nach einem richtigen Programmcode aber das meiste davon funktioniert nicht. Habe mich auch schon in diesem Forum drüber schlau gemacht wobei ich die Beispiele auch nciht gebrauchen kann.Zu dem Projekt:
An den Usb- Anschluss wird ein Gerät angeschlossen an welches man ein Maus und eine Tastatur anschließen kann. Anstatt dieser Maus oder Tastatur wird aber nun eine Control Unit über diese Leitung verbunden mir nur diesen zwei eingängen. Wie kann ich nun daten über diesen Prot senden. Also habe mir auch nen Code zusammengebastelt :
//Programm zur Verbindung mit dem USB_HID
#include <stdio.h>
#include <windows.h>int main()
{
HANDLE hTreiber = INVALID_HANDLE_VALUE;
int string [] = {0x10, 0x00, 0x00, 0x49, 0x49, 0x16};
char getstring[] = "";
unsigned long BytesWritten, BytesRead;
int i = 0;SetLastError(0);
//USB Schnittstelle konfigurieren
hTreiber = CreateFile("\\\.\\HID#Vid_046d&Pid_c00c#6&2b662242&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}",GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);if (hTreiber == INVALID_HANDLE_VALUE)
{
printf("Verbindung zum USB-HID konnte nicht hergestellt werden!\nError %u\n",
GetLastError());CloseHandle (hTreiber);
}
else
{
//printf("Verbindung zum USB-HID konnte hergstellt werden!\n");
WriteFile(hTreiber,
string,
sizeof(string),
&BytesWritten,
NULL);ReadFile(hTreiber,
getstring,
sizeof(getstring),
&BytesRead,
NULL);
printf("%x\n", getstring);CloseHandle(hTreiber);
}return 0;
}Wobei beim ausführen immer ein falscher Handel autritt die Funktion GetLastError gibt mir den den FehlerCode 5 Zurück wobei ich nicht weiß waß dieser Bedeutet.
Kann mir jemand helfen und mir sagen was dass der Fehlercode beduetet bzw. mir sasgen wie ich das Gerät via Usb ansprecheDanke an alle die mir versuchen zu helfen
-
Hi,
beim Ausführen welcher funktion bekommst du den Fehler (ReadFile, Writefile oder CreateFile) ?
MfG
-
Danke Für deine Antwort habe noch ein bisschen am Code rumgespielt also:
Create File ... läuft
ReadFile ... Kommt ein Error
WriteFile ... kommt auch ein Error habe mal einen Report erstellt
Hier mein neuer code#include <stdio.h>
#include <windows.h>#include <stdlib.h>
#include <setupapi.h>
extern "C" {
#include <hidsdi.h>
}//Programm zur Verbindung mit dem USB_HID
int main()
{
.....HANDLE hTreiber = INVALID_HANDLE_VALUE;
.....int string [] = {0x00, 0x10, 0x10};
.....char getstring[] = "";
.....unsigned long BytesWritten, BytesRead;.....SetLastError(0);
....//USB Schnittstelle konfigurieren
....hTreiber=CreateFile("\\\.\\USB#Vid_04b4&Pid_8081&MI_00#6&11fe4e10&0&0000#{325ddf96-938c-11d3-9e34-0080c82727f4}",
............................GENERIC_READ | GENERIC_WRITE,
............................0,
............................NULL,
............................OPEN_EXISTING,
............................0,
............................NULL);....if (hTreiber == INVALID_HANDLE_VALUE)
....{
.......printf("Keine Verbindung!\nError%u\n",
........GetLastError());
........CloseHandle (hTreiber);
....}
....else
....{
.........//printf("Verbindung zum USB-HID konnte hergstellt werden!\n");........HIDP_VALUE_CAPS* pValueCaps = new HIDP_VALUE_CAPS[ValueCapsLength];
........if (!WriteFile(hTreiber,string,sizeof(string),&BytesWritten,NULL) )
........{
............printf("Can't write to device.");
............printf("Error: %u\n", GetLastError());
........}
........if(! ReadFile(hTreiber, getstring, sizeof(getstring), &BytesRead, NULL))
........{
............printf("Can't read from device.");
............printf("Error: %u\n", GetLastError());
........}
........else
........{
.............printf("%x\n", getstring);
........}
.........//.CloseHandle(hTreiber);
........}....HIDP_CAPS Capabilities;
....PHIDP_PREPARSED_DATA PreparsedData;
....HIDP_REPORT_TYPE HidP_Input;
....USHORT ValueCapsLength;....HIDP_VALUE_CAPS* pValueCaps = new HIDP_VALUE_CAPS[ValueCapsLength];
....HidD_GetPreparsedData(hTreiber, &PreparsedData);
....HidP_GetCaps(PreparsedData, &Capabilities);
....ValueCapsLength = Capabilities.NumberInputValueCaps;....if(!HidP_GetValueCaps(HidP_Input, pValueCaps, &ValueCapsLength, ....PreparsedData))
.......{
........CloseHandle(hTreiber);
........printf("Error: %u\n", GetLastError());
.......}....printf("Input - GetValueCaps:\n\n");
....printf("ValueCaps: 0x%X\n", pValueCaps);
....printf("%s0x%X\n", "Input - ReportID: ", pValueCaps->ReportID);
....printf("%s%d\n", "Usage: ", Capabilities.Usage);
....printf("%s0x%X\n", "Usage Page: ", Capabilities.UsagePage);
....printf("%s%d\n", "Input Report Byte Length: ", ....Capabilities.InputReportByteLength);
....system("Pause");....return 0;
}Kann mir jemand sagen was ich flasch mache
die Punkte sind nur wegen der Übersicht hier noch der Input ReportCan't write to device.Error: 3758100489 --> Schreibe Anweisung
Can't read from device.Error: 3758100489 --> LeseAnweisung
Input - GetValueCaps:ValueCaps: 0x240048 --> Report
Input - ReportID: 0x22
Usage: 23700
Usage Page: 0x77C0
Input Report Byte Length: 8304
-
Auf Geräte kann man i.d.R. nur mittels Geräte-Treiber kommunizieren...
-
Ja aber das Gerät wird als HID-Konfomre Tastatur erkannt also kann ich doch mittels
der Funktionen der Hid.dll auf dieses Gerät zugreifen oder ????Also im Prinzip bekomme ich einen Handle auf das Gerät nur bei der Funktion
HidP_GetValueCaps --> bekomme ich auch einen Error zurück
ErrorCode : 0xC0110001
Was sagt mir dieser Fehler ???
-
Jochen Kalmbach schrieb:
Auf Geräte kann man i.d.R. nur mittels Geräte-Treiber kommunizieren...
Was meinst Du wohl, was die Funktionen WriteFile und ReadFile machen? Die kommunizieren neuerdings mit dem Gerät und nicht mit dem Treiber, oder was?
-
int string [] = {0x00, 0x10, 0x10};
Integer??? Bist Du Dir da sicher? Für den Fall WriteFile: Wie sieht denn der Report aus? Für den Fall HidP_GetValueCaps: Ich kann nirgendwo erkennen, dass Du ValueCapsLength initialisierst, bzw. passiert das erst nach dem Funktions-Aufruf. Das kann so natürlich nicht klappen.