Привет всем
Имеем устройство с мегой, на выходе cp2102 и USB. С виртуальным компортом работает.
Решил пойти "глубже", на USBXpress. Поставил SDK Ver 4.0.2. Почитал описание и примеры в ней.
Написал простейшую программу. Передача запроса в устр-во и получение ответа от уст-ва.
Код
ret = SI_GetNumDevices(&dwNumDevices);
ret = SI_GetProductString(dwDevice,asDeviceString.c_str(),SI_RETURN_DESCRIPTION);
ret = SI_Open(dwDevice,&cyHandle);
ret = SI_SetBaudRate(cyHandle,19200);
ret = SI_SetLineControl(cyHandle,0x0800);
ret = SI_SetFlowControl(cyHandle, SI_STATUS_INPUT, SI_HELD_INACTIVE, SI_HELD_INACTIVE, SI_STATUS_INPUT, SI_STATUS_INPUT, 0);
ret = SI_SetTimeouts(100,INFINITE); //(DWORD dwReadTimeout,DWORD dwWriteTimeout);
// Запрос
ret = SI_Write(cyHandle,btDataCodogrammaOut,10,&dwBytesWritten);
ret = SI_FlushBuffers(cyHandle,1,0);
// Ответ устр-ва
ret = SI_FlushBuffers(cyHandle,0,1);
ret = SI_Read(cyHandle,btDataCodogrammaIn,9,&dwBytesReturned);
ret = SI_Close(cyHandle);
Результаты работы каждой функции я проверяю.
Запросы передает замечательно, устр-во на запрос отвечает(проверял осциком на TX проца).
Но при выполнении "// Ответ устр-ва" выдается ошибка SI_Read - SI_READ_TIMED_OUT.
Скорость 19200, в датаграмме 10 байт.
Но я не сдался. Я переписал прошивку так, чтобы устр-во каждую секунду передавало мне датаграмму(ту же).
И в этом случае программа читает данные правильно, но только пока не нажать "Запрос", после
первой же передачи функция SI_Read передает SI_READ_TIMED_OUT.
Но я опять не сдался. Я взял программный сниффер "Device Monitoring Studio" и посмотрел что же делает ПО
при попытке чтения. Оказалось, что отправляет посылку Function URB_FUNCTION_CONTROL_TRANSFER
и принимает такую же, но данных там даже близко нет.
В общем грабля. Такое впечатление, что канал работает только в одном направлении.
Что делать?
Олег