xenetron
Интересующийся
Offline
|
|
« Ответ #60 : 28-03-2013 21:31 » |
|
Я как раз обратил внимание что вначале дока говорится, что типа для простого обмена данными пригодится метод open close и xferdata. щас вот обрабатываю файлы bulkloopdlg, bulkloop, где как бы эти методы используются. но вот проблема. все пилилось на вижуале. и это очень заметно. Потому что вопервых: используется библиотека stdafx.h, вовторых постоянно идет связка с afx* библиотеками, которые идут с MFC. В инете посмотрел, что аналога stdafx в билдере нет. и никак обыграть не получиться. после того, как я комменчу всю инфу, связанную с afx и stdafx, появляется следующая ошибка // BulkLoop.h : main header file for the BULKLOOP application //
#if !defined(AFX_BULKLOOP_H__94303D2D_6EC6_4505_BE2A_85BDF0C7D94F__INCLUDED_) #define AFX_BULKLOOP_H__94303D2D_6EC6_4505_BE2A_85BDF0C7D94F__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
//#ifndef __AFXWIN_H__ // #error include 'stdafx.h' before including this file for PCH //#endif
#include "resource.h" // main symbols
///////////////////////////////////////////////////////////////////////////// // CBulkLoopApp: // See BulkLoop.cpp for the implementation of this class //
class CBulkLoopApp : public CWinApp { public: CBulkLoopApp();
// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CBulkLoopApp) public: virtual BOOL InitInstance(); //}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CBulkLoopApp) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() };
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_BULKLOOP_H__94303D2D_6EC6_4505_BE2A_85BDF0C7D94F__INCLUDED_) [BCC32 Error] BulkLoop.h(23): E2303 Type name expected [BCC32 Error] BulkLoop.h(23): E2303 Type name expected [BCC32 Error] BulkLoop.h(31): E2462 'virtual' can only be used with non-template member functions [BCC32 Error] BulkLoop.h(31): E2303 Type name expected [BCC32 Error] BulkLoop.h(31): E2139 Declaration missing ; [BCC32 Error] BulkLoop.h(41): E2040 Declaration terminated incorrectly [BCC32 Error] BulkLoopDlg.h(17): E2303 Type name expected [BCC32 Error] BulkLoopDlg.h(20): E2293 ) expected [BCC32 Error] BulkLoopDlg.h(23): E2303 Type name expected [BCC32 Error] BulkLoopDlg.h(23): E2139 Declaration missing ; и в общем теперь билдер просто помоему начал капризничать? или я может немного не понимаю, что именно не так объявлено. с объявлением класса вроде все норм. подскажите если знаете.
|
|
« Последнее редактирование: 28-03-2013 21:35 от xenetron »
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #61 : 29-03-2013 10:28 » |
|
Что касается CyАpi меня вопрос только в объявлении параметров Сypressa, его EP и т.д. Добавлено через 3 часа, 22 минуты и 8 секунд:xenetron, у меня та же фигня была. Из-за чего готовые примеры Cypressa рассматривать в Билдере было невозможно.
|
|
« Последнее редактирование: 29-03-2013 13:50 от Shakesbeer »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #62 : 29-03-2013 19:46 » |
|
да погодите. ну не надо-ж так целиком без разбора драть все подряд! нафига вам визуализация из студии? пишите свою. и еще раз - посмотрите что, как и главное зачем вызывается перед тем как тупо драть код. примеры нужны для этого а не для тупого копипаста. а stdafx вам вообще не нужен, и если бы вы сначала разобрались что вы копируете - вы бы это поняли.
все. дискуссию закрываю. в дальнейшем, подобного рода вопросы, простите, буду отправлять в помойку.
|
|
« Последнее редактирование: 29-03-2013 19:49 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #63 : 01-04-2013 13:56 » |
|
Shakesbeer, можешь попробовать поработать с проектом FxEEPROM. Он как раз под билдер сделан. Ochkarik, такая вот проблема, я подгрузил все файлы FxEEPROM в проект билдера, и вылезает такая ошибка файлы проекта и фото ошибки прилагаются. http://zalil.ru/34401540
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #64 : 01-04-2013 15:48 » |
|
xenetron
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #65 : 01-04-2013 17:02 » |
|
что в этот раз не так?
|
|
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #66 : 12-04-2013 11:00 » |
|
Не могу разобраться какие параметры надо задавать для bulk передачи. Если кто-нибудь знает ресурс или статьи, где обсуждается это скиньте плииз) P.S. Пишу на C++ Builder. Добавлено через 6 дней, 3 часа, 45 минут и 42 секунды:Использую Bulk передачу и прием. В случае единичной передачи все проходит хорошо, без ошибок, посылает пакет, принимает: void __fastcall TForm1::Button4Click(TObject *Sender) { USBDevice = new CCyUSBDevice(NULL); OVERLAPPED outOvLap, inOvLap; outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT"); //unsigned char buffer[128] = "1s";//(unsigned char*)Form1->Edit1->Text.c_str(); //LONG length = 128; AnsiString stryng = Form1->Edit1->Text.c_str(); char* buffer=new char[stryng.Length()+1]; strcpy(buffer,stryng.c_str()); LONG length = stryng.Length()+1; UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer(buffer, length, &outOvLap); USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100); USBDevice->BulkOutEndPt->FinishDataXfer(buffer, length, &outOvLap,outContext); CloseHandle(outOvLap.hEvent); unsigned char inBuf[128]; ZeroMemory(inBuf, 128); inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN"); UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap); USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100); USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext); CloseHandle(inOvLap.hEvent); Memo2->Lines->Add(AnsiString((char *)inBuf)); } Создал поток передачи и приема, при нажатии на SpeedButton начинаются передача и прием, при повторном нажатии прекращаются. Описание thread приема и передачи: CCyUSBDevice *USBDevice; OVERLAPPED outOvLap, inOvLap; char* buffer; unsigned char inBuf[512]; LONG length;
//--------------------------------------------------------------------------- //----------------------Reading---------------------------------------------- //--------------------------------------------------------------------------- class ReadThread : public TThread { private: void __fastcall Printing(); protected: void __fastcall Execute(); public: __fastcall ReadThread(bool CreateSuspended); }; //--------------------------------------------------------------------------- ReadThread *reader; //îáúåêò ïîòîêà ReadThread //--------------------------------------------------------------------------- __fastcall ReadThread::ReadThread(bool CreateSuspended) : TThread(CreateSuspended) {} //--------------------------------------------------------------------------- void __fastcall ReadThread::Execute() { inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN"); while(!Terminated) { UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap); USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100); USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext); Synchronize(Printing); } CloseHandle(inOvLap.hEvent); } //--------------------------------------------------------------------------- void __fastcall ReadThread::Printing() { Form1->Label2->Caption = Form1->Label2->Caption.ToInt() + strlen(inBuf); Form1->Memo2->Lines->Add(AnsiString((char *)inBuf)); ZeroMemory(inBuf, 512); } //--------------------------------------------------------------------------- //----------------------Writing---------------------------------------------- //--------------------------------------------------------------------------- class WriteThread : public TThread { private: void __fastcall Printing(); protected: void __fastcall Execute(); public: __fastcall WriteThread(bool CreateSuspended); }; //----------------------------------------------------------------------------- //............................ WriteThead ............................... //-----------------------------------------------------------------------------
WriteThread *writer; //îáúåêò ïîòîêà WriteThread
//--------------------------------------------------------------------------- __fastcall WriteThread::WriteThread(bool CreateSuspended) : TThread(CreateSuspended) {} //--------------------------------------------------------------------------- void __fastcall WriteThread::Execute() { AnsiString stryng = Form1->Edit1->Text.c_str(); buffer=new char[stryng.Length()+1] strcpy(buffer,stryng.c_str()); length = stryng.Length()+1; //length = strlen(buffer); outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT"); UCHAR *outContext; while(!Terminated) { outContext = USBDevice->BulkOutEndPt->BeginDataXfer(buffer, length, &outOvLap); USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100); USBDevice->BulkOutEndPt->FinishDataXfer(buffer, length, &outOvLap,outContext); } CloseHandle(outOvLap.hEvent); } //--------------------------------------------------------------------------- void __fastcall WriteThread::Printing() // Stop sending data { } //--------------------------------------------------------------------------- Сама кнопка SpeedButton: void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { USBDevice = new CCyUSBDevice(NULL); if (SpeedButton1->Down) { Form1->Label2->Caption = "0"; SpeedButton1->Caption = "Stop transfer"; writer = new WriteThread(false); writer->FreeOnTerminate = true; reader = new ReadThread(false); reader->FreeOnTerminate = true; } else { SpeedButton1->Caption = "Begin transfer"; if(writer)writer->Terminate(); if(reader)reader->Terminate(); CloseHandle(outOvLap.hEvent); CloseHandle(inOvLap.hEvent); } } Некорректно завершается передача и прием при остановке потока, периодически возникают ошибка во время передачи. Что не так сделал, объясните, плииз)
|
|
« Последнее редактирование: 18-04-2013 14:46 от Shakesbeer »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #67 : 18-04-2013 15:37 » |
|
сто раз уже говорил. ну сколько можно то! где проверки статусов? ошибка - какая ошибка? некорректно - в чем это "некорректно"?
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #68 : 19-04-2013 09:08 » |
|
сто раз уже говорил. ну сколько можно то! где проверки статусов? ошибка - какая ошибка? некорректно - в чем это "некорректно"?
Каких статусов? Endpoit задается корректно. Надо проверять статус каждый раз в потоке? По поводу ошибки не точно выразился. При вторичном нажатии кнопки прием-передача должна быть остановлена, но процесс не останавливается, либо начинает принимать пустые байты.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #69 : 19-04-2013 09:25 » |
|
while(!Terminated) Terminated - это что за переменная? и где оно выставляется if(writer)writer->Terminate(); - что эта функция делает? нить убивает? а в какой момент? сайпрес - засланцы. описание функции у них все таки безобразное... назначение поля OVERLAPPED в этих функциях?
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #70 : 19-04-2013 10:36 » |
|
while(!Terminated) Terminated - это что за переменная? и где оно выставляется if(writer)writer->Terminate(); - что эта функция делает? нить убивает? а в какой момент? сайпрес - засланцы. описание функции у них все таки безобразное... назначение поля OVERLAPPED в этих функциях?
if(writer)writer->Terminate(); - это как раз прекращение потока, т.е. Terminated присваивается true, соответственно while(!Terminated) прекращает цикл. Это я взял из своей старой программы работы с COM портом, там было все без проблем и прекрасно работало. А пример передачи через CCyUSBDevice с OVERLAPPED и т.д. просто скопировал с примера Bulk из CyAPI. Добавлено через 19 минут и 19 секунд:Сделал такую защиту в потоке: void __fastcall ReadThread::Execute() { while(!Terminated) { inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN"); UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap); USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100); succesIn = USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext); if((!succesIn) || (!succesOut)) //Если прием или передача с ошибкой произошли { reader->Terminate(); //Прекращаем поток приема Form1->SpeedButton1->Caption = "Begin transfer"; Form1->SpeedButton1->Down = false; } Synchronize(Printing); CloseHandle(inOvLap.hEvent); } } Но все равно происходят сбои, я так понимаю что это просто потому что одновременно работают два потока: один записывает, а другой считывает. Для такой работы наверное стоит соединить их в один thread) У меня появился вопрос по поводу другого принципа из CyAPI: USBDevice = new CCyUSBDevice(NULL); CCyControlEndPoint *eptOut = USBDevice->ControlEndPt; AnsiString stryng = Form1->Edit1->Text.c_str(); //char* bufOut1=new char[stryng.Length()+1];//length возвращает длинну без нуль-терминатора,поэтому +1
eptOut->Target = TGT_DEVICE; eptOut->ReqType = REQ_VENDOR; eptOut->Direction = DIR_TO_DEVICE; eptOut->ReqCode = 0x05; eptOut->Value = 1; eptOut->Index = 0; unsigned char bufOut[512]; ZeroMemory(bufOut, 512); LONG bufOutlen = 512; // LONG bufOutlen = stryng.Length()+1; strcpy(bufOut,stryng.c_str()); bool resSent = eptOut->XferData(bufOut, bufOutlen); if (resSent) Memo2->Lines->Add("Sending Ok"); else Memo2->Lines->Add("Sending failed");
CCyControlEndPoint *eptIn = USBDevice->ControlEndPt; eptIn->Target = TGT_DEVICE; eptIn->ReqType = REQ_VENDOR; eptOut->Direction = DIR_FROM_DEVICE; eptIn->ReqCode = 0x07; eptIn->Value = 1; eptIn->Index = 0; unsigned char bufIn[512]; LONG bytesToRead = bufOutlen; bool resRes = eptIn->Read(bufIn, bytesToRead); if (resRes) Memo2->Lines->Add("Recieving Ok"); else Memo2->Lines->Add("Recieving failed"); Memo2->Lines->Add(AnsiString((char *)bufIn)); Никак не разберусь какая величина ept указывает на номер Enpointa, на который будут передаваться или с которого будут считываться данные.
|
|
« Последнее редактирование: 19-04-2013 10:56 от Shakesbeer »
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #71 : 19-04-2013 12:32 » |
|
конечная точка типа Control. номер видимо либо eptIn->Value = 1 или eptIn->Index = 0; Добавлено через 3 минуты и 50 секунд:Но все равно происходят сбои, я так понимаю что это просто потому что одновременно работают два потока: один записывает, а другой считывает. Для такой работы наверное стоит соединить их в один thread)" не вижу препятствий для одновременной работы двух нитей... если только интерфейс библиотеки сайпреса не позволяет. а функция терминации меня все равно смущает. хрень какая то) если в нити не проверять эту переменную - нить никогда не остановится что ли?
|
|
« Последнее редактирование: 19-04-2013 12:36 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #72 : 19-04-2013 12:47 » |
|
не вижу препятствий для одновременной работы двух нитей... если только интерфейс библиотеки сайпреса не позволяет. а функция терминации меня все равно смущает. хрень какая то) если в нити не проверять эту переменную - нить никогда не остановится что ли?
Смысл terminate в прекращении ReadThread или WriteThread. Вот только почему-то после прекращения потока, работа системы с микросхемой продолжается до тех пор, пока не отсоединишь устройство. Добавлено через 4 минуты и 41 секунду:Я исправил ошибку, объединив два потока в один. Похоже они просто накладывались друг на друга
|
|
« Последнее редактирование: 19-04-2013 13:12 от Shakesbeer »
|
Записан
|
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #73 : 19-04-2013 13:15 » |
|
Shakesbeer, твоя прога ж работает только на I/O?
|
|
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #74 : 19-04-2013 13:27 » |
|
Shakesbeer, твоя прога ж работает только на I/O?
Не понял вопроса. Вот программа, там сделал три потока: на чтение из USb порта, на запись и на последовательные запись и чтение. прописываешь Bulkloop.hex с помощью ControlCenter и юзаешь. Надеюсь поможет
|
|
|
Записан
|
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #75 : 19-04-2013 13:36 » |
|
Shakesbeer, у меня выскачила вот такая ошибка - [BCC32 Error] Unit1.cpp(304): E2285 Could not find a match for 'CCyUSBConfig::CCyUSBConfig(const CCyUSBConfig&)' CCyUSBConfig cfg = USBDevice->GetUSBConfig(c); в 304 строчке и при build-е спрашивает где находится package dss.bpi
|
|
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #76 : 19-04-2013 13:43 » |
|
Shakesbeer, у меня выскачила вот такая ошибка - [BCC32 Error] Unit1.cpp(304): E2285 Could not find a match for 'CCyUSBConfig::CCyUSBConfig(const CCyUSBConfig&)' CCyUSBConfig cfg = USBDevice->GetUSBConfig(c); в 304 строчке и при build-е спрашивает где находится package dss.bpi Я использую Borland C++ Builder 6 и соответственно кипресовскую библиотеку CyApi.lib, которую брал из папки USB Suite->lib->BC6. Если используешь другую программу, то может и библиотеку стоит прикрепить другую? При переходе с одной программы на другую возникает множество проблем с библиотеками, попробуй поискать ответы в интернете о несовместимости.
|
|
|
Записан
|
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #77 : 19-04-2013 13:48 » |
|
Shakesbeer, странно. я тоже пользуюсь 6 билдером. посмотрел в дереве - и CyApi.h и *.Lib подкл
|
|
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #78 : 19-04-2013 13:52 » |
|
Shakesbeer, странно. я тоже пользуюсь 6 билдером. посмотрел в дереве - и CyApi.h и *.Lib подкл
В System кидал библиотеки usb100.h usb200.h и т.д.?
|
|
|
Записан
|
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #79 : 19-04-2013 13:57 » |
|
Shakesbeer, Shakesbeer, странно. я тоже пользуюсь 6 билдером. посмотрел в дереве - и CyApi.h и *.Lib подкл
В System кидал библиотеки usb100.h usb200.h и т.д.? в систем в смысле в виндовскую папку? Добавлено через 32 минуты и 34 секунды:Shakesbeer, c этой ошибкой я разобрался. но теперь он от меня требует dss.bpi Добавлено через 6 минут и 52 секунды:Shakesbeer, все, я разобрался)
|
|
« Последнее редактирование: 19-04-2013 14:37 от xenetron »
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #80 : 19-04-2013 14:40 » |
|
Shakesbeer, все, я разобрался)
Красавчик!
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #81 : 19-04-2013 15:01 » |
|
после завершения нити, попробуйте на всякий пожарный проверить статус завершения нити. WaitForXfer(&inOvLap,100); - 100 - это время ожидания? пакеты гарантированно доставляются за это время? можно ли вызывать FinishDataXfer() если ожидание завершилось по таймауту?
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #82 : 20-04-2013 13:43 » |
|
после завершения нити, попробуйте на всякий пожарный проверить статус завершения нити. WaitForXfer(&inOvLap,100); - 100 - это время ожидания? пакеты гарантированно доставляются за это время? можно ли вызывать FinishDataXfer() если ожидание завершилось по таймауту?
Специально ввел проверку succesIn = USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext); //Заканчиваем Bulk прием (прием пакета) if(!succesIn) //Если прием или передача с ошибкой произошли { writereader->Terminate(); //Прекращаем поток передачи-приема Form1->SpeedButton1->Caption = "Begin transfer"; Form1->SpeedButton1->Down = false; }
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #83 : 21-04-2013 00:49 » |
|
Shakesbeer, пардон, на предыдущую версию кода видимо посмотрел. там есть какие нибудь функции статус последней операции EP посмотреть? при передаче по USB транзакция может быть завершена с ошибкой, в этом случае там надо ресет EndPoint-a делать. правда возможно это драйвер сайпреса автоматом делает - не знаю. у меня полные затыки были когда аппаратно поток не правильно был сформирован.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #84 : 23-04-2013 08:47 » |
|
Shakesbeer, сможешь скинуть конфигурацию твоего builder'a? не могу понять почему твоя и некоторые другие программы нехотят полностью компилироваться
|
|
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #85 : 23-04-2013 09:02 » |
|
Использую Bulk передачи, получается около 1 Мбит/с. Писали что с CyAPI легко сделать 48, как достичь такой скорости?
|
|
|
Записан
|
|
|
|
xenetron
Интересующийся
Offline
|
|
« Ответ #86 : 23-04-2013 13:30 » |
|
Shakesbeer, а зачем тебе в проге нужен TImage??
|
|
|
Записан
|
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #87 : 23-04-2013 13:49 » |
|
xenetron, потому что принятые байты вывожу на экран в виде изображения, где 1 байт равен цвету одного пиксела.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #88 : 23-04-2013 14:40 » |
|
Использую Bulk передачи, получается около 1 Мбит/с. Писали что с CyAPI легко сделать 48, как достичь такой скорости?
48 не видел. на форуме на сайпреса пишут, что приложение на основе streamer(или как там его) с соответствующей прошивкой дает если не путаю порядка 40.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Shakesbeer
Постоялец
Offline
|
|
« Ответ #89 : 23-04-2013 14:40 » |
|
Ochkarik, Похоже надо что-то делать с reset, потому что ошибка периодически выскакивает и поток тормозится. В CyApI написано что нужно использовать Abort вместо Reset. Я так понимаю что Abort возвращает в начальное состояние Endpoint, после чего поток можно сразу же продолжать?
|
|
|
Записан
|
|
|
|
|