Witam!
Zazwyczaj komunikuje się z moimi urządzeniami przez RS232. Ale niestety, jak wiadomo zostało to wyparte przez USB i podłączenie swoich urządzeń do laptopów staje się bardzo kłopotliwe.
Dlatego chciałem w końcu wziąć się za to USB. Z tego co wyszperałem, najlepiej jest skorzystać z gotowej biblioteki V-USB, która posiada obsługę HID co bardzo by mnie interesowało.
Próbowałem napisać jakiś krótki program, dzięki któremu by wykrył µC jako jakieś tam urządzenie. Niestety efekt jest taki, że dostaje komunikat o niezidentyfikowanym urządzeniu pod Windowsem jak i pod Linuksem.
Kombinuje z tymi tablicami HID w każdą stronę, próbowałem kopiować czyjeś projekty z wykorzystaniem USB na ATTiny2313 ale efekt ciągle ten sam, sprzęt widoczny ale nie rozpoznawalny.
Poniżej program: (plik usbconfig.h w załączniku)
Jak widać, urządzenie ma nic nie robić, po za tym że ma być wykryte jako mysz USB.
I za nic nie wiem co dalej z tym zrobić, wydaje mi się że konfiguracja (w usbconfig.h) jest poprawna, fusebity ustawione, kwarc 12Mhz.
Może już ktoś miał podobny problem lub wie co z tym zrobić ?
Pozdrawiam
Zazwyczaj komunikuje się z moimi urządzeniami przez RS232. Ale niestety, jak wiadomo zostało to wyparte przez USB i podłączenie swoich urządzeń do laptopów staje się bardzo kłopotliwe.
Dlatego chciałem w końcu wziąć się za to USB. Z tego co wyszperałem, najlepiej jest skorzystać z gotowej biblioteki V-USB, która posiada obsługę HID co bardzo by mnie interesowało.
Próbowałem napisać jakiś krótki program, dzięki któremu by wykrył µC jako jakieś tam urządzenie. Niestety efekt jest taki, że dostaje komunikat o niezidentyfikowanym urządzeniu pod Windowsem jak i pod Linuksem.
Kombinuje z tymi tablicami HID w każdą stronę, próbowałem kopiować czyjeś projekty z wykorzystaniem USB na ATTiny2313 ale efekt ciągle ten sam, sprzęt widoczny ale nie rozpoznawalny.
Poniżej program: (plik usbconfig.h w załączniku)
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#define F_CPU 12000000L
#include <util/delay.h>
#include <avr/pgmspace.h>
#include "usbdrv.h"
PROGMEM char usbHidReportDescriptor[52] = { /* USB report descriptor, size must match usbconfig.h */
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x02, // USAGE (Mouse)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, // USAGE (Pointer)
0xA1, 0x00, // COLLECTION (Physical)
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM
0x29, 0x03, // USAGE_MAXIMUM
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x95, 0x03, // REPORT_COUNT (3)
0x75, 0x01, // REPORT_SIZE (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x05, // REPORT_SIZE (5)
0x81, 0x03, // INPUT (Const,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x38, // USAGE (Wheel)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7F, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x06, // INPUT (Data,Var,Rel)
0xC0, // END_COLLECTION
0xC0, // END COLLECTION
};
static unsigned char volatile flags = 0;
static uchar reportBuffer[3];
uchar usbFunctionSetup(uchar data[8])
{
usbRequest_t *rq = (void *)data;
usbMsgPtr = reportBuffer;
if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){ /* class request type */
if(rq->bRequest == USBRQ_HID_GET_REPORT){ /* wValue: ReportType (highbyte), ReportID (lowbyte) */
/* we only have one report type, so don't look at wValue */
//makeReport();
return sizeof(reportBuffer);
}
}else{
/* no vendor specific requests implemented */
}
return 0;
}
int main(void)
{
wdt_enable(WDTO_2S);
usbInit();
usbDeviceConnect();
sei();
for(;;){ /* main event loop */
wdt_reset();
usbPoll();
}
return 0;
}
Jak widać, urządzenie ma nic nie robić, po za tym że ma być wykryte jako mysz USB.
I za nic nie wiem co dalej z tym zrobić, wydaje mi się że konfiguracja (w usbconfig.h) jest poprawna, fusebity ustawione, kwarc 12Mhz.
Może już ktoś miał podobny problem lub wie co z tym zrobić ?
Pozdrawiam