Forum: PC-Programmierung USB HIT Programmierung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Roland (Gast)


Bewertung
-3 lesenswert
nicht lesenswert
Hi zusammen,
beschäftige mich seit Wochen (USB Neuling!) damit mein kleines USB 
Display auszulesen. Das Lesen klappt einwandfrei nur das Schreiben will
nicht klappen. Habe die CAPs gelesen und da steht beim Parameter
für lesen (also das Display sendet beim Tastendruck den Tastencode)
die Anzahl 6. Genau diese 6 Zeichen kommen auch. Da kommt eine 4 die
steht wohl für Joystick oder Controler (habe ich irgendwo in einer Liste
gelesen) und da kommen dann noch ein paar Bytes darunter 2 mal die Zahl
für die Taste.
Beim Parameter für Schreiben steht >0<. WriteFile klappt nicht. Gibt 
NULL zurück und auch keine Fehlermeldung

Ich habe den Pfad für das Gerät zunächst auf die Übliche Weise gesucht
und dann sobald gefunden mit 
CreateFile(USBPFAD...,....,OVERLAPPEDMODUS,0)
die HANDLE geholt. Dann mit ReadFile, gespickt mit CreateEvent usw. 
klappt das Lesen einwandfrei.

Das Display ist in der Lage Zeichen zu empfangen und darzustellen.
Mit einem USB Tool habe ich die Daten die das Display benötigt 
herausfinden können.

Nur nutzt mir das nichts, wenn ich es nicht aus meinem Programm 
beschreiben kann. Habe schon gegoogelt jeden Tag aber fasst alles auf 
englisch und da verstehe ich das meiste leider nicht.

DeviceIOControl wäre noch ne Möglichkeit. Weiß aber nicht wie der Code
für den zweiten Parameter heißen sollte. IOCTL_......?

BOOL DeviceIoControl(
  HANDLE       hDevice,
  DWORD        dwIoControlCode,
  LPVOID       lpInBuffer,
  DWORD        nInBufferSize,
  LPVOID       lpOutBuffer,
  DWORD        nOutBufferSize,
  LPDWORD      lpBytesReturned,
  LPOVERLAPPED lpOverlapped
);

Wäre dankbar für'nen Tip !

von Dergute W. (derguteweka)


Bewertung
4 lesenswert
nicht lesenswert
42

von Thomas Z. (usbman)


Bewertung
3 lesenswert
nicht lesenswert
Am besten fängst du noch Mal an....
Was ist HIT?
Was ist CAPs?
Was erhoffst du dir von DeviceIoControl? Hast Dokus des Treibers?
Wie ist der übliche Weg den handle zu bekommen?

von Georg A. (georga)


Bewertung
0 lesenswert
nicht lesenswert
Schau doch mal libhidapi an, die kapselt da einiges an Gedöns und geht 
auch für Windows:

https://github.com/libusb/hidapi

Aber um etwas Englisch wirst du nicht herumkommen.

von Roland (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
>>Am besten fängst du noch Mal an....<<

Leider verstehe ich nicht was Du mir damit sagen möchtest ?!?

1. Die CAP's lesen geht und die Handle funzt weil lesen geht ja schon.
2. Was ein Hit ist ? Das ist ein Gerät das einfach gesagt keinen Treiber
 von einem extra Hersteller benötigt, weil Windows da Dll's für bereit 
stellt und wohl auch HIT - Treiber.

Ich habe mir auch ein Buch gekauft von Jan Axelson. Aber in dem Buch 
steht nicht drin wie assyncrones Schreiben geht oder ich habe es noch 
nicht entdeckt. Ist ja durch weg in Englisch was deutsches fand ich 
nicht.

Komisch was ich fand, war durch weg Englisch oder anders sprachig.
Was ich auch oft fand, waren in Foren ähnliche Fragen, spärlich auf 
Deutsch meißt auch alles Englisch. Aber da war Programmcode dabei, so 
habe ich schon einiges verstanden, sonst hätte ich das Lesen nicht 
hinbekommen.

Was meine ich mit Assyncron? Nun irgendwann drücke ich eine Taste und 
dann
soll mein Programm darauf reagieren und in das Display ein paar Zahlen
schreiben. Das Original Prog kann das ja auch. Es geht nicht um riesige 
Datenmengen, die auch noch irgend wie in bestimmten Abständen
gesendet und empfangen werden müssten.

Das Display wird vom Original Programm auch beschrieben wenn sich die 
Zahlen im Programm auf der PC Seite ändern ohne das eine Taste gedrückt 
wird.

Was ich mir von DeviceIoControl verspreche? Nun ich habe den Eindruck 
das
über diese Funktion das Gerät Daten empfangen kann. K.A.

von Roland (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Jau, werde ich heute mal Testen - melde mich wieder.

von Roland (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Habe 42 getestet ging aber noch nicht.

von Roland (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Roland schrieb:
> Habe 42 getestet ging aber noch nicht.

#define MAXBUF_ 120;

HANDLE hUSB_Device_;
OVERLAPPED myOVL_;
BYTE myOutBuf_[MAXBUF_],myInBuf_[MAXBUF_];

hUSB_Device_ = CreateFile( detailData->DevicePath,
                GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
          NULL,
                OPEN_EXISTING,
                FILE_FLAG_OVERLAPPED,
                NULL);

                DeviceIoControl(hUSB_Device_,
                                            42,&myInBuf_,
                                               100,myOutBuf_,
                                                 8,&BackAnz_,&myOVL_);

von Dergute W. (derguteweka)


Bewertung
0 lesenswert
nicht lesenswert
Roland schrieb:
> Roland schrieb:
>> Habe 42 getestet ging aber noch nicht.

Kann so ja nicht gehen, ist ja Englisch. Es scheint ja um ein 
Menschliches Zwischengesichts-Geraet zu gehen, eine Unterabteilung der 
Umfassend Systematischen Bindung.
Alzond hinne middn weichen Dee, ned middn haddn.
#definiere GROEZWISPEICHER_ 120

GRIFF hUSB_Geraet;
UEBERLAPPT meinUEBL;
BISSEN MeinAusSpeicher_[GROEZWISPEICHER_],MeinEinSpeicher_[GROEZWISPEICHER_];

hUSB_Geraet = ErstelleDatei( kleinscheissDaten->GeraetePfad,
               GENERISCHER_LES | GENERISCHER_SCHREIB,
               DATEI_TEILE_LES | DATEI_TEILE_SCHREIB,
               NULL,
               OEFFNE_DA_SEIEND,
               DATEI_FLAGGE_UEBERLAPPT,
               NULL);

               GeraeteEinAusKontrolle(hUSB_Geraet_,
                                                   42, ...

Schon funktionierts. Naja, vielleicht noch ein paar Unterstiche mehr 
vorne und hinten an alles ranpappen...

SCNR,
WK

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
So hatte ich mir das in etwa vorgestellt. Aber ein Versuch war's wert 
...

von Thomas Z. (usbman)


Bewertung
0 lesenswert
nicht lesenswert
OK du redest von HID. Ich würde als erstes mal die den HID Report 
descriptor anschauen dort ist festgelegt was dein Device beim Schreiben 
erwartet.

DeviceIoControl führt nur in Ausnahmen zum Ziel, nämlich dann wenn du 
die im Treiber verwendeten ControlCodes kennst.
HID wird ganz normal mit ReadFile WriteFile angesprochen. Ab Seite 329 
ist das in der 4 Ausgabe von USB Complete beschrieben. So wie du 
schreibst hast du bei WriteFile ein Problem, also schau in den 
Reportdeskriptor. Vernünftige Literatur gibt's nur in Englisch bei MS 
manchmal nicht automatisch übersetzt in deutsch.

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi nochmal,
Ich habe mich nun eine weitere Woche eingelesen und getestet was das 
Zeug hält.
Jedoch konnte ich nicht ein einzige Byte zum Display schicken. Immer 
kommt nur
als Fehler der Spruch "Falscher Parameter". Das deutet darauf hin, das 
die Daten wie
gesendet so vom Treiber nicht verwendet werden können.

Was mir jedoch gelungen ist, das ich mit einem USB Analyse Prog die 
Deskriptoren auslesen
konnte.

Nur eines ist mir völlig schleierhaft und zwar, wie kann es sein, das 
beim lesen mit ReadFile keinerlei Deskriptoren interessieren.

Es werden mit ReadFile anscheinend auch keinerlei Verpackungsdaten 
Empfangen, sondern nur Nutzdaten. Es kommen mit jedem Tastendruck oder 
Loslassen immer genau 6 Bytes.

Zunächst immer eine 4 und dann die Tastennummer. Dann ein paar Nullen 
und nochmal die Tastennummer oder beim Loslassen jeweils Null für die 
Tastennummer. Immer insgesamt
6 Bytes.

Für Schreiben habe ich im Analyse Prog 6 Datensätze mit jeweils 8 Bytes 
mit vorangestellter
6 erkannt. Dies kommt mit jeder Änderung im Display.

Es schwant mir, das die Daten aus den Deskriptoren irgendwie mit in die 
zu schreibenden
Daten eingebunden werden müssen. Nur konnte ich dies noch nirgends 
finden.

Grundsätzlich möchte ich noch sagen, das ich es schade finde, das dem PC 
und damit dem gemeinen Bastelfreak oder Semiprofessionllen Anwender die 
relativ einfachen Schnittstellen
weggenommen wurden. Die VCT (Virtuelle Comporttreiber) sind nicht ein 
Ersatz ohne Nachteile
wie ich leider feststellen musste.  Denn wenn ich z.B. so etwas machen 
will, wie ein beliebiges HID Gerät
für mein eigenes Programm zu benutzen, aber der Hersteller
keine passende DLL mitliefert, kommt man doch nicht umhin sich mit USB 
zu beschäftigen.
Andererseits bin ich froh, das es USB und damit ne einheitliche 
Schnittstelle gibt.

Und was das Lesen angeht, bin ich echt begeistert wie easy das geht, da 
der passende Treiber
von Windows mitgeliefert wird und auch noch alles Plug und Play 
funktioniert.

Es wäre doch bestimmt für ne Menge von Leuten interessant eine Anleitung 
zuhaben wie Schreiben und Lesen beim HID Gerät funktioniert ohne das man 
dafür fasst studieren muss oder
Berge weise Bücher bzw. Dokus lesen, die auch noch fasst durchweg in 
Englisch geschrieben sind.

Es ist klar bei dem Umfang was die Schnittstelle USB bietet, ist das 
auch nicht einfach mal eben beschrieben. Aber HID sollte wenigstens 
bekannt sein, also das der gemeine Selfmade Maker
damit zurecht kommt.

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Roland schrieb:
> Es schwant mir, das die Daten aus den Deskriptoren irgendwie mit in die
> zu schreibenden
> Daten eingebunden werden müssen. Nur konnte ich dies noch nirgends
> finden.

Die bei USB HID zu übertragenen Daten sind im Report Deskriptor 
definiert. Eine gute Referenz dazu ist mir aber nicht bekannt.:(

Den für Tastaturen gibt es meisten schon im USB Hersteller Beispielcode 
bei beliebigen USB µCs.

Roland schrieb:
> Es wäre doch bestimmt für ne Menge von Leuten interessant eine Anleitung
> zuhaben wie Schreiben und Lesen beim HID Gerät funktioniert ohne das man
> dafür fasst studieren muss oder

Es gibt reichlich HID Beispielcodes. Reverse Engineering eines 
vorhandenen Geräts ist trotzdem nicht-trivial.

von Thomas Z. (usbman)


Bewertung
0 lesenswert
nicht lesenswert
Roland schrieb:
> Was mir jedoch gelungen ist, das ich mit einem USB Analyse Prog die
> Deskriptoren auslesen
> konnte.

Und warum zeigst du die Deskriptoren nicht? Im Besonderen wäre der 
HidReportDescriptor interessant da dort das Format beschrieben ist wie 
dein writeFile aufgebaut werden muss.

Jim M. schrieb:
> Eine gute Referenz dazu ist mir aber nicht bekannt.:(

Jan Axelson USB Complete allerdings ist das auch auf Englisch. Wegen den 
wenigen Programmierern die kein Englisch können wird kein Verlag eine 
deutsche Übersetzung rausbringen.

von Christian R. (supachris)


Bewertung
0 lesenswert
nicht lesenswert
So ganz ohne Englisch wird das schwierig. Aber für HID braucht man kein 
IOCONTROL, dafür gibts das HID API in Windows: 
https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/introduction-to-hid-concepts

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@usbman
Weil ich gestern kein Zeit ,mehr hatte.

Hier die Liste der Deskriptoren->
Connection Status Device connected
Current Configuration 1
Speed Full (12 Mbit/s)
Device Address 6
Number Of Open Pipes 1

Device Descriptor
Offset Field Size Value Description
0 bLength 1 12h
1 bDescriptorType 1 01h Device
2 bcdUSB 2 0110h USB Spec 1.1
4 bDeviceClass 1 00h Class info in Ifc Descriptors
5 bDeviceSubClass 1 00h
6 bDeviceProtocol 1 00h
7 bMaxPacketSize0 1 40h 64 bytes
8 idVendor 2 10CEh Silicon Labs
10 idProduct 2 EB70h
12 bcdDevice 2 0000h 0.00
14 iManufacturer 1 01h
15 iProduct 1 00h
16 iSerialNumber 1 00h
17 bNumConfigurations 1 01h

Configuration Descriptor 1 Bus Powered, 100 mA
Offset Field Size Value Description
0 bLength 1 09h
1 bDescriptorType 1 02h Configuration
2 wTotalLength 2 0022h
4 bNumInterfaces 1 01h
5 bConfigurationValue 1 01h
6 iConfiguration 1 00h
7 bmAttributes 1 80h Bus Powered
 4..0: Reserved  ...00000
 5: Remote Wakeup  ..0.....  No
 6: Self Powered  .0......  No, Bus Powered
 7: Reserved (set to one)
(bus-powered for 1.0)  1.......
8 bMaxPower 1 32h 100 mA

Interface Descriptor 0/0 HID, 1 Endpoint
Offset Field Size Value Description
0 bLength 1 09h
1 bDescriptorType 1 04h Interface
2 bInterfaceNumber 1 00h
3 bAlternateSetting 1 00h
4 bNumEndpoints 1 01h
5 bInterfaceClass 1 03h HID
6 bInterfaceSubClass 1 00h
7 bInterfaceProtocol 1 00h
8 iInterface 1 00h

HID Descriptor
Offset Field Size Value Description
0 bLength 1 09h
1 bDescriptorType 1 21h HID
2 bcdHID 2 0110h 1.10
4 bCountryCode 1 00h
5 bNumDescriptors 1 01h
6 bDescriptorType 1 22h Report
7 wDescriptorLength 2 002Eh 46 bytes

Endpoint Descriptor 81 1 In, Interrupt, 4 ms
Offset Field Size Value Description
0 bLength 1 07h
1 bDescriptorType 1 05h Endpoint
2 bEndpointAddress 1 81h 1 In
3 bmAttributes 1 03h Interrupt
 1..0: Transfer Type  ......11  Interrupt
 7..2: Reserved  000000..
4 wMaxPacketSize 2 0040h 64 bytes
6 bInterval 1 04h 4 ms

Interface 0 HID Report Descriptor Vendor-Defined 1
Item Tag (Value) Raw Data
Usage Page (Vendor-Defined 1) 06 00 FF
Usage (Vendor-Defined 1) 09 01
Collection (Application) A1 01
    Report ID (4) 85 04
    Usage (Vendor-Defined 1) 09 01
    Logical Minimum (0) 15 00
    Logical Maximum (255) 26 FF 00
    Report Count (5) 95 05
    Report Size (8) 75 08
    Input (Data,Var,Abs,NWrp,Lin,Pref,NNul,Bit) 81 02
End Collection C0
Usage Page (Vendor-Defined 1) 06 00 FF
Usage (Vendor-Defined 1) 09 01
Collection (Application) A1 01
    Report ID (6) 85 06
    Usage (Vendor-Defined 1) 09 01
    Logical Minimum (0) 15 00
    Logical Maximum (255) 26 FF 00
    Report Count (7) 95 07
    Report Size (8) 75 08
    Feature (Data,Var,Rel,NWrp,Lin,Pref,NNul,NVol,Bit) B1 06
End Collection C0

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@turboj

Es gibt reichlich HID Beispielcodes. Reverse Engineering eines
vorhandenen Geräts ist trotzdem nicht-trivial.

Ok-Habe das lesen ja hinbekommen und das nur durch Beispielcode den ich
für mein Bedürfnisse etwas abgeändert habe.

Lesen klappt ohne einen einzigen Deskriptor zu beachten - kratz Kopf?!?

von Joggel E. (jetztnicht)


Bewertung
0 lesenswert
nicht lesenswert
Ich mach alles mit USB2Serial. Auf der Embedded Seite einen FT232 oder 
aehnlich von FTDevices rein und gut ist. Was anderes wuerde ich mir 
nicht antun. Ich habe zuviele an einem eigenen USB Treiber scheitern 
sehen. Fuer professionelle Ansaetze allenfalls mal bei thesycon.de 
reinschauen. Die machen das.

: Bearbeitet durch User
von Thomas Z. (usbman)


Bewertung
0 lesenswert
nicht lesenswert
OK ich versuch mal eine Erklärung:
Dein Device hat 2 Reports, einen Input mit 5 Bytes und vorangestellter 
ReportID 4. Den zu lesen ist einfach dazu musst du in ReadFile einfach 6 
Bytes lesen die Bedeutung dieser Bytes bestimmt deine LeseApp. Das ist 
sehr wahrscheinlich einfach eine HidTastatur die auf Vendor gestellt ist 
damit die Keycodes nicht an den System Tastaturtreiber weitergeleitet 
werden.

Nun zum WriteFile der Report erwartet 7 Bytes + ReportID 6. Über die 
Bedeutung dieser Bytes kann man nur spekulieren. Da es ein Display ist 
würde ich annehmen dass es einen KomandoCode + Parameter gibt. Wie das 
auszusehen hat, wurde beim Erstellen der Firmware festgelegt. Wenn es 
also keine Doc gibt bleibt dir nur mit einem Sniffer die Reports zu 
protokollieren und zu entschlüsseln. Vendor heißt eben das kann alles 
sein, es gibt kein vordefinierte Format.

Ich geb dir mal ein Beispiel:
SetPosStart(x1,y1)
SetPosEnd(x1,y1)
Clearscreen(color)
Sowas ähnliches sollte in den Reports auftauchen wenn du den Bildschirm 
löschst.

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Thomas Z. schrieb:
> OK ich versuch mal eine Erklärung

Ich habe jetzt ne gute Erklärung von dem Firmware Hersteller Silicon 
Labs
gefunden->https://www.silabs.com/documents/public/application-notes/AN249.pdf

Darauf hin habe ich mal genauer hin gesehen was mein Free USB Monitor 
Tool
zeigt.

Tatsächlich 2 Geräte oder Interfaces auf einem Port für mein Display.

Dann habe ich diese Phad Strings mal extrahiert und an CreateFile 
übergeben.

Tatsächlich bekam ich zwei verschiedene Handle Nummern und habe diese 
getestet. Lesen funktionierte wie gehabt aber schreiben wieder nicht.

Mit SetOutputReport kam keine Reaktion auch kein Fehler.

Mit WriteFile kam auch keine Reaktion aber ein Fehler Namens Falscher
Parameter ?!?

Poste hier mal den Text->
hRead_ = 
CreateFile("\\\\?\\hid#vid_10ce&pid_eb70&col01#7&77f644d&0&0000#{4d1e55b 
2-f16f-11cf-88cb-001111000030}",  //col01
         GENERIC_READ|GENERIC_WRITE,
            FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
                  OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

hWrite_ = 
CreateFile("\\\\?\\hid#vid_10ce&pid_eb70&col02#7&77f644d&0&0001#{4d1e55b 
2-f16f-11cf-88cb-001111000030}",
      GENERIC_READ|GENERIC_WRITE,
          FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
                OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

ovlw.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
ovlr.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);

print_zahl_text_((LONG) hRead_,10,10,"<- Handle Read "); // zahl hin
print_zahl_text_((LONG) hWrite_,10,10,"<- Handle Write "); // zahl hin

    zIDX_=0;
    Output_Buffer_[zIDX_++]= 0x06; // Life Daten aus dem Datenverkehr 
...
    Output_Buffer_[zIDX_++]= 0xFE;
    Output_Buffer_[zIDX_++]= 0xFD;
    Output_Buffer_[zIDX_++]= 0x03;
    Output_Buffer_[zIDX_++]= 0x01;
    Output_Buffer_[zIDX_++]= 0x00;
    Output_Buffer_[zIDX_++]= 0xE8;
    Output_Buffer_[zIDX_++]= 0x83;

    test_ = HidD_SetOutputReport(hWrite_,Output_Buffer_,zIDX_-1);
    print_zahl_text_(test_,300,10,"<- SetReport...1"); // zahl hin

    zIDX_=0;
    Output_Buffer_[zIDX_++]= 0x06; Life Daten aus dem Datenverkehr ...
    Output_Buffer_[zIDX_++]= 0xFE;
    Output_Buffer_[zIDX_++]= 0xFD;
    Output_Buffer_[zIDX_++]= 0x02;
    Output_Buffer_[zIDX_++]= 0x64;
    Output_Buffer_[zIDX_++]= 0x00;
    Output_Buffer_[zIDX_++]= 0xBE;
    Output_Buffer_[zIDX_++]= 0x80;

    BytesWritten_ = 0;

    status_ = WriteData(hWrite_,Output_Buffer_,zIDX_-1,&BytesWritten_);

    print_zahl_text_((LONG) status_,300,10,"<- Succses ?..."); // zahl 
hin
    print_zahl_text_((LONG) BytesWritten_,300,10,"<- BytesWritten_ 
?..."); // zahl hin

Frage mich was das sein kann ?

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Ich sehe da einen "off by one" Fehler:
    zIDX_=0;
    Output_Buffer_[zIDX_++]= 0x06; Life Daten aus dem Datenverkehr ...
    Output_Buffer_[zIDX_++]= 0xFE;
    Output_Buffer_[zIDX_++]= 0xFD;
    Output_Buffer_[zIDX_++]= 0x02;
    Output_Buffer_[zIDX_++]= 0x64;
    Output_Buffer_[zIDX_++]= 0x00;
    Output_Buffer_[zIDX_++]= 0xBE;
    Output_Buffer_[zIDX_++]= 0x80;

    BytesWritten_ = 0;

    status_ = WriteData(hWrite_,Output_Buffer_,zIDX_-1,&BytesWritten_);


Der Code schreibt nur 7 der 8 Bytes im Array Output_Buffer.

Ich empfehle dringend eines der Frameworks für HID zu benutzen (HID.DLL 
oder HIDAPI.DLL). Das will man nicht zu Fuß machen.

von Thomas Z. (usbman)


Bewertung
0 lesenswert
nicht lesenswert
Zwei Dinge fallen mir auf. Du benutzt kein WriteFile sondern WriteData. 
Wie Jim schon angemerkt hat, schickst du ein Byte zuwenig. Dein PDF 
beschreibt HID Beispiele allgemein, dein Display ist aber nicht dabei. 
Gibt es keine Doc dazu?
Spekulation:
02 FD FE  könnte LJMP 0FDFEh bedeuten (8051)
Dazu müsste man aber in die Firmware schauen. Vielleicht hat die 
Firmware ja eine Art Funktionstabelle.

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jim M. schrieb:
> Ich sehe da einen "off by one" Fehler:

Vielen Dank stimmt !

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Thomas Z. schrieb:
> Zwei Dinge fallen mir auf.

Ich vergaß gestern noch Deine Erklärung zu bestätigen was Du aus den
Report Deskriptoren gelesen hast stimmt.

Zu dem 8051, das kann hinkommen. Ist aber ungewöhnlich, weil die
einzelnen Aufrufe für Displayausgabe ziemlich oder relativ viel Text 
sind,
habe mich lange damit beschäftigt und habe solchen Text auch noch da.

Nachher teste ich mal weiter, geht iMo nicht. Melde was es war.

In der realen Interaktion mit dem Programm werden immer 6 * 8 Bytes 
geschickt.

Hatte das damals einige Tage o. Wochen untersucht und notiert. 
Inzwischen
ist die Testzeit für das Monitor Prog abgelaufen und ich weiß nicht mehr
wie es hieß. Mittler Weile bin ich bereit die ca. 70 Teuronen dafür 
auszugeben.

An meinem Programmier-PC habe ich kein Internet mit Absicht. Dadurch 
kann
ich leider keinen USBlyser verwenden, weil der sich offenbar einloggt 
und
die Startzeit bei dem Vertrieb meldet.

Kennst Du ein gutes Prog was ich dafür verwenden kann, bezahlbar?

Zu dem WriteData: Das ist meine eigenen Funktion in der WriteFile 
natürlich verwendet wird. Es wird ja nicht nur WriteFile aufgerufen 
sondern noch paar andere Funktionen wie z.B. die Fehlerbehandlung usw.

von Narendra C. (Firma: nareshit) (narendra)


Bewertung
0 lesenswert
nicht lesenswert
You have really doing well for better programming skills you can meet 
the experts via link i'm providing here

https://nareshit.com/python-online-training/

von Thomas Z. (usbman)


Bewertung
0 lesenswert
nicht lesenswert
Roland schrieb:
> Kennst Du ein gutes Prog was ich dafür verwenden kann, bezahlbar?

Ich benutze USBPcap in Verbindung mit wireshark, das ist Open Source.
Da du offensichtlich keine Docs zum Display hast ist nun der harte Weg 
angesagt... Dieser ist übrigens unabhängig von der Schnittstelle. Bei 
einer ser. Verbindung wäre der Aufwand genau der Gleiche, vielleicht 
sogar mehr wenn CRC und Checksummen im Spiel sind.

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Thomas Z. schrieb:
> USBPcap in Verbindung mit wireshark

iMo habe ich nur das Problem das ich mit WriteFile wzw. keiner Funktion 
die mir bekannt ist etwas beschicken kann.

Eben kam mit WriteFile in der OverlappedStrucktur unter dem Punkt
ovlw.Internal die Code Nummer 259

Auf der Seite Beckhof sind die Codes gelistet nur deuten vermag ich's 
nicht.

Win32 Error Codes->
https://infosys.beckhoff.com/index.php?content=../content/1031/TcDiagnostics/HTML/TcDiagnostics_WIN32_ErrorCodes.htm&id=

Dies ist der Fehler der mit WriteFile kommt.
259, 0x00000103, No more data is available, ERROR_NO_MORE_ITEMS

ev. weiß jemand was das bedeutet ...

von Thomas Z. (usbman)


Bewertung
0 lesenswert
nicht lesenswert
0x103 ist kein Errorcode. Errorcodes haben immer das MSB gesetzt.
Aus dem Gedächtnis, ich habs nicht überprüft, ist das WaitForComplete 
oder so. Mehr gibt's nicht zu sagen da dein Code ja immer noch geheim 
ist.

von Roland (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Thomas Z. schrieb:
> 0x103 ist kein Errorcode

Auf der Errorliste steht die 259 als ein Fehlercode. Ich habe nach 
gelesen,
das in der Overlappetstrucktur unter Internal ein Fehlercode zurück 
gegeben wird. Diese Nummer wird jeweils nur mit WriteFile 
eingeschrieben.

Es müsste wenn WriteFile auch was geschrieben hat unter dem Punkt 
InternalHigh die Anzahl der Bytes auftauchen wie es beim lesen auch
passiert.

Welchen geheimen Code meinst Du?

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Roland schrieb:
> Welchen geheimen Code meinst Du?

Source-Code?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.