Ono što bi ti dalje bilo zanimljivo kada (i ako) prorade primeri su makroi
HIDRxPacket
HIDTxPacket
Kojima možeš da namestiš OUT end point 1 da primi tih osam bajtova u memorijski bafer i da namestiš IN endpoint 1 da vrati osam bajtova kompjuteru. Vidi help, i uradi greep pretraživanje da pronađeš u primerima gde se sve i kako konkretno koriste. Konkretno u primeru za miša je uključen EP1 samo u smeru IN veličine 3 bajta.
Da bi host znao da treba da ih koristi u komunikaciji treba ih opisati u deskriptorima.
Prvo, umesto linje u deskriptoru interfejsa, fajl "usb_descriptors.c"
Code:
1, // Number of endpoints in this intf
staviti da deskriptor interfejsa sadrži opise za dva endpointa
Code:
2, // Number of endpoints in this intf
i izmeniti postojeći:
Code:
/* Endpoint Descriptor */
0x07,/*sizeof(USB_EP_DSC)*/
USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
HID_EP | _EP_IN, //EndpointAddress
_INTERRUPT, //Attributes
DESC_CONFIG_WORD(3), //size
0x01 //Interval
u
Code:
/* Prvi Endpoint Descriptor */
0x07,/*sizeof(USB_EP_DSC)*/
USB_DESCRIPTOR_ENDPOINT, // EP1
HID_EP | _EP_IN, // IN, od mikrokontolera prema PC-u
_INTERRUPT, // vrsta
DESC_CONFIG_WORD(8), // veličina
0x01, // interval u milisekundama u kojima host(PC) treba da pokušava interupt transfer
/* Drugi Endpoint Descriptor */
0x07,/*sizeof(USB_EP_DSC)*/
USB_DESCRIPTOR_ENDPOINT, // EP1
HID_EP | _EP_OUT, // OUT, t.j. od hosta ka mikrokontroleru
_INTERRUPT, // vrsta
DESC_CONFIG_WORD(8),
0x01
i naravno, treba ispraviti liniju koja govori o ukupnoj dužini konfiguracionog deskriptora od
Code:
DESC_CONFIG_WORD(0x0022), // Total length of data for this cfg
u vrednost za 7 bajtova veću
Code:
DESC_CONFIG_WORD(0x0029), // Total length of data for this cfg
Pored toga, treba skoro potpuno napisati kod za deskriptor izveštaja hid_rpt01 u zavisnosti šta tih 8 bajtova treba da predstavljaju u HID kontekstu.
Takođe možeš da ukloniš iz primera sav kod koji nije za PIC18 familiju ili je za neki drugi PIC koji nije 18F4550. Lociraš gde počinje sa #ifdef i nađeš gde se završava sa #elif ili #endif i ukloniš da olakšaš snalaženje, mada vrlo malo koda ima, uglavnom komentarisanje.