Forum: Mikrocontroller und Digitale Elektronik CJoy / USB-DevName


von Rainer S. (rainer86)


Lesenswert?

Hallo,

habe zwei Joystickadapter nachgebaut und möchte im asm-SourceCode den 
DevName für die USB-Geräte ändern damit unter VICE64 die Joysticks mit 
unterschiedlichem Namen angezeigt werden.

Nach dem Compilieren mit "gavrasm" und dem Flashen per ArduinoISP, wird 
immer noch der alte Name angezeigt.

Link zum Projekt und Sourcecode: https://www.c64-wiki.de/wiki/CJoy

Folgende Änderung habe ich im Sourcecode eingetragen:

<CJoy> ersetz durch <Joy1>
1
;------------------------------------------------------------------------------------------
2
DevNameStringDescriptor:
3
    .db  (DevNameStringDescriptorEnd-DevNameStringDescriptor)*4-2,3;length, type: string descriptor
4
    .db  "Joy1"
5
;********************************************************************************
6
;*
7
;*  NOTE about DevNameStringDescriptor
8
;*
9
;*  This name will appear in game devices list control panel in Windows. 
10
;*  If you want to have several CJoy devices on the system you can 
11
;*  change this name together with Vendor ID to the one you like.
12
;*  Please note that for some reason only first 4 characters will be 
13
;*  displayed so there is no point making it longer than 4 characters.
14
;*
15
;********************************************************************************
16
DevNameStringDescriptorEnd:
17
18
NameStringDescriptor:
19
    .db  (NameStringDescriptorEnd-NameStringDescriptor)*4-2,3;length, type: string descriptor
20
    .db  "Joy1, ATMega8 based digital USB joystick V0.03"
21
NameStringDescriptorEnd:

Wer kann weiterhelfen ?

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Dir ist klar dass der String Unicode sein muss? Ich kann mir nicht 
vorstellen, das db Unicode erzeugt. Mehr kannst du dem List File 
entnehmen.

von c-hater (Gast)


Lesenswert?

Thomas Z. schrieb:

> Dir ist klar dass der String Unicode sein muss?

Das ist so, klar.

> Ich kann mir nicht
> vorstellen, das db Unicode erzeugt.

Mit den richtigen Parametern gefüttert: natürlich. Allerdings ist so ein 
einfaches String-Literal doch recht weit weg davon...

von Rainer S. (rainer86)


Lesenswert?

Ich habe die 4 Buchstaben -CJoy- durch -Joy1- ersetzt und im erzeugten 
Hex-File ist diese Änderung auch zu sehen, verstehe aber die Anmerkung 
auch nicht.

von Thomas Z. (usbman)


Lesenswert?

Dann kommt natürlich noch das Problem, dass Win diese Strings in aller 
Regel ignoriert, solange man keine spezialisierte inf Dateien 
präsentiert, was für Hid ziemlich unmöglich ist.

Beitrag #6327901 wurde vom Autor gelöscht.
von Rainer S. (rainer86)


Angehängte Dateien:

Lesenswert?

Warum WIN ? Mit Notepadd++ den SourceCode geändert und dann compiliert,
die HexWerte für "Joy1" sind im *.hex drin

von Thomas Z. (usbman)


Lesenswert?

Dann nimm mal bitte USB View und schau dir die Strings an was da drin 
steht, entspricht nicht so ganz dem was du dir vorstellst. Das ist 
definitiv kein Unicode der zur language id US oder DE passt.

von Rainer S. (rainer86)


Angehängte Dateien:

Lesenswert?

Wie kann ich sicher sein, dass das geänderte hex-File auch sauber 
übertragen wird ?

Habe den flash-Vorgang so gestartet:
avrdude -c avrisp -p atmega8 -P COM17 -b 19200 -U 
flash:w:CJoy_0.03_neu.hex

Anbei noch die Anzeige in VICE64
1
avrdude: AVR device initialized and ready to accept instructions
2
3
Reading | ################################################## | 100% 0.07s
4
5
avrdude: Device signature = 0x1e9307 (probably m8)
6
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
7
         To disable this feature, specify the -D option.
8
avrdude: erasing chip
9
avrdude: reading input file "CJoy_0.03_neu.hex"
10
avrdude: input file CJoy_0.03_neu.hex auto detected as Intel Hex
11
avrdude: writing flash (2532 bytes):
12
13
Writing | ################################################## | 100% 4.07s
14
15
avrdude: 2532 bytes of flash written
16
avrdude: verifying flash memory against CJoy_0.03_neu.hex:
17
avrdude: load data flash data from input file CJoy_0.03_neu.hex:
18
avrdude: input file CJoy_0.03_neu.hex auto detected as Intel Hex
19
avrdude: input file CJoy_0.03_neu.hex contains 2532 bytes
20
avrdude: reading on-chip flash data:
21
22
Reading | ################################################## | 100% 1.88s
23
24
avrdude: verifying ...
25
avrdude: 2532 bytes of flash verified
26
27
avrdude: safemode: Fuses OK (E:FF, H:DF, L:3F)
28
29
avrdude done.  Thank you.

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Rainer S. schrieb:
> Wie kann ich sicher sein, dass das geänderte hex-File auch sauber
> übertragen wird ?

Glaub mir das funktioniert einwandfrei sonst würdest du eine 
Fehlermeldung bekommen.
Nochmal:
USB erwartet Unicode Strings du definierst aber normly Byte Strings. Das 
funktioniert nur dann wenn der USB Code die Strings vor dem Senden auf 
Unicode umcodiert.
Ich hatte dir ja schon usbview empfohlen um die Strings mal anzuschauen. 
Deine C64 Optionen sind erst mal unwichtig.
Im Source sind ja schon Hinweise enthalten dass wohl was faul ist. Das 
Device wird erst dann neu eingelesen, wenn du neue ids vergibst.

von Rainer S. (rainer86)


Lesenswert?

Habe einen Namen UND eine ID vergeben, jetzt funktioniert's.
Aber warum erst bei Änderung der ID ? Dann muss Windoof irgendwo 
Treiber-Leichen zum USB-Adapter abgelegt haben, wo kann ich die finden ?

von Thomas Z. (usbman)


Lesenswert?

Bei dem ersten Anstecken legt Windows eine pnf Datei an. Das ist im 
Prinzip ein compilierter Teil der inf. Diese musst du löschen damit das 
Device neu erkannt wird. Das wird aus Performance Gründen so gemacht und 
ist seit W98 unverändert. Ohne diesen Mechanismus würde es wesentlich 
länger dauern bis ein Device nach dem Anstecken verfügbar wäre.
Alternativ kannst du das Device auch in der Registry entfernen wenn du 
weißt was du tust.

von Guido Körber (Gast)


Lesenswert?

Das Gerät im Devicemanager löschen und dann noch mal anschließen. 
Windows speichert sich jede Menge Informationen statisch, die nicht 
statisch sein sollten.

USB-Devices mit Windows zu entwickeln ist darum meist etwas schmerzhaft. 
Man weiss immer nicht, ob die Änderung nicht geklappt hat, oder Windows 
sich noch Daten der letzten Version gespeichert hat.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.