Нужно немного изменить функцию (файл main.c) usbFunctionWriteOut:
Код
void usbFunctionWriteOut( uchar *data, uchar len ) //---Функция изменена ---//
{
h2d = *data;
usbDisableAllRequests();
}
Пример main:
CODE
int main(void)
{
// wdt_enable(WDTO_1S);
odDebugInit();
hardwareInit();
usbInit();
intr3Status = 0;
sei();
for(;;){ /* main event loop */
wdt_reset();
usbPoll();
/* host -> device (пример приема и обработки сообщений) */
if( usbAllRequestsAreDisabled() && 1 /*или флаг*/) {
/*
switch (h2d){ //Пример управления устройством со стороны ПК
case '1': PORTB=1;
break;
case '2': PORTB=0;
break;
} */
usbEnableAllRequests();
}
/* device -> host */ // Передача массива в виртуальный COM
if( usbInterruptIsReady() && flag_sucess_buffer /*флаг передачи*/){
static uchar c;
static uchar k;
for (k=0;k<REPORT_BUFFER_SIZE;k++) {
(usbInterruptIsReady())? c = report_buffer[k], usbSetInterrupt(&c, 1): k--;
wdt_reset();
usbPoll();
if( usbAllRequestsAreDisabled()) usbEnableAllRequests();
}
flag_sucess_buffer=0;
}
#if USB_CFG_HAVE_INTRIN_ENDPOINT3
/* We need to report rx and tx carrier after open attempt */
if(intr3Status != 0 && usbInterruptIsReady3()){
static uchar serialStateNotification[10] = {0xa1, 0x20, 0, 0, 0, 0, 2, 0, 3, 0};
if(intr3Status == 2){
usbSetInterrupt3(serialStateNotification, 8);
}else{
usbSetInterrupt3(serialStateNotification+8, 2);
}
intr3Status--;
}
#endif
}
return 0;
}
Прежде чем передавать, необходимо что то положить в буфер и выставить флаг flag_sucess_buffer...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...