реклама на сайте
подробности

 
 
> Вопрос по CY7C68013A, точнее по его связи с ПК
PriBoris
сообщение May 19 2011, 14:43
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 7-10-05
Из: Санкт-Петербург
Пользователь №: 9 352



Не удаётся запустить асинхронный приём (IN). Передача (OUT) с помощью DeviceIoControl(IOCTL_ADAPT_SEND_NON_EP0_DIRECT) как простая так и асинхронная идет без проблем, а с приемом беда. Когда происходит таймаут, приложение безнадежно повисает. Его не снять ни так ни ProcessExplorer-ом. Помогает только выдергивание USB из платы.
Посмотрите код, может быть я что-то некорректно делаю ?

Код
                SINGLE_TRANSFER *pTransfer = new SINGLE_TRANSFER;  
                memset(pTransfer,0,sizeof(SINGLE_TRANSFER));  
                pTransfer->ucEndpointAddress = EPIN_ADDRESS;  

                BOOL bDeviceIoControlResult;
                DWORD dwReturnBytes;  

                {

                    RxOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
                    bDeviceIoControlResult = DeviceIoControl (hDevice,  
                                IOCTL_ADAPT_SEND_NON_EP0_DIRECT,
                                pTransfer, sizeof(SINGLE_TRANSFER),  
                                UsbRxBuffer,512,  
                                &dwReturnBytes,&RxOverlapped);  
                    

                    if (bDeviceIoControlResult==TRUE)
                    {
                        printf("INFO: (RX) dwReturnBytes = %d\n",dwReturnBytes);
                        CloseHandle(RxOverlapped.hEvent);
                    }
                    else
                    {
                        switch(WaitForSingleObject(RxOverlapped.hEvent,1000))
                        {
                            case WAIT_OBJECT_0:
                                GetOverlappedResult(hDevice,&RxOverlapped,&dwReturnBytes,TRUE);
                                printf("INFO: (RX) dwReturnBytes = %d\n",dwReturnBytes);
                                break;
                            case WAIT_TIMEOUT:
                                printf("ERROR: (RX) WaitForSingleObject timeout\n");
                                break;
                            default:
                                printf("ERROR: (RX) WaitForSingleObject error %d\n",GetLastError());
                                break;
                        }
                        CloseHandle(RxOverlapped.hEvent);
                    }
                }
                            
                CloseHandle(hDevice);
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 11:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01421 секунд с 7
ELECTRONIX ©2004-2016