|
|
  |
Cypress(C7C86013A), Программа для C7C86013A |
|
|
|
Nov 27 2008, 18:23
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632

|
Подскажите, пожалуйста, как написать программу для связи с этим контроллером через ПК с использованием CyAPI. Конечные точки типа Bulk. Устройство успешно находится, правильно определяются VID и PID.А при попвтке запустить обмен dev->BulkOutEndPoint->BeginDataXfer() возникает ошибка обращения по неправильному адресу.
Сообщение отредактировал Игорь_M - Nov 27 2008, 18:35
|
|
|
|
|
Nov 29 2008, 07:40
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632

|
Спасибо!Что-то сразу не заметил!
|
|
|
|
|
Dec 16 2008, 14:21
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632

|
Тем не менее не получается решить проблему(Не идет передача данных, даже если пользоваться примером: CCyUSBDevice *USBDevice = new CCyUSBDevice(Handle); OVERLAPPED outOvLap, inOvLap; outOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_OUT"); inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN"); char inBuf[128]; ZeroMemory(inBuf, 128); char buffer[128]; LONG length = 128; // Just to be cute, request the return data before initiating the loopback UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap); UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer(buffer, length, &outOvLap); USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100); USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100); USBDevice->BulkOutEndPt->FinishDataXfer(buffer, length, &outOvLap,outContext); USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap,inContext); CloseHandle(outOvLap.hEvent); CloseHandle(inOvLap.hEvent);Может все же как-то надо предварительно настроить устройство перед тем как его открыть?Может надо добавить какие-то строки в код этого примера?Как выбрать конечную точку и ее свойства, с которой необходимо работать?
|
|
|
|
|
Dec 17 2008, 14:39
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632

|
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <cyapi.h> #include "Unit1.h" #include <iError.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; CCyUSBDevice* dev; GUID CypGuid = {0xae18aa60, 0x7f6a, 0x11d4, 0x97, 0xdd, 0x0, 0x1, 0x2, 0x29, 0xb9, 0x59}; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { dev = new CCyUSBDevice(0,CypGuid,1); int MaxDevCount = dev->DeviceCount(); for(int DevCount=1;DevCount<=MaxDevCount;DevCount++) { dev->Open(DevCount); dev->Reset(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { dev->Close(); dev->~CCyUSBDevice(); } //---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) { #define BUFFER_SIZE 62 #define TIMEOUT 1000 long len = BUFFER_SIZE; unsigned char* OutBuf = new unsigned char[BUFFER_SIZE]; memset(OutBuf,0xAA,BUFFER_SIZE); unsigned char* InBuf = new unsigned char[BUFFER_SIZE]; memset(InBuf,0x00,BUFFER_SIZE); CCyIsoPktInfo* inf = new CCyIsoPktInfo; CCyBulkEndPoint* OutEP = new CCyBulkEndPoint; CCyBulkEndPoint* InEP = new CCyBulkEndPoint; OutEP = (CCyBulkEndPoint*)dev->EndPointOf(0x02); InEP = (CCyBulkEndPoint*)dev->EndPointOf(0x86); OutEP->TimeOut = 1000; InEP->TimeOut = 1000; OutEP->XferData(OutBuf,len,inf); InEP->XferData(InBuf,len,inf); for(int i=0;i<BUFFER_SIZE;i++) { Form1->Memo1->Lines->Add(IntToStr(i)+"-"+IntToStr(InBuf[i])); } } //---------------------------------------------------------------------------
В общих чертах вот он код. Где тут ошибка или Что надо добавить? Посмотрел примеры на C#.Реализовал (на C++, так как C# не знаю) вроде как там (с точки зрения сути). Вобщем опять устройство обнаруживается, но обмена нет(
|
|
|
|
|
Dec 17 2008, 19:57
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632

|
Да я вобще в Билдере работаю...потараюсь перевести....там вроде есть что-то такое в меню.Спасибо!Вот только сдам зачет и выложу обязательно....
|
|
|
|
|
Dec 22 2008, 21:15
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 4-03-08
Пользователь №: 35 632

|
Необходимость в помощи отпала.Проблема решилась следующим образом: При вызове конструктора класса CCyUSBDevice вызывается и метод ->Open(0), а в моей программе этот Open(0) вызывался в цикле еще раз, что приводило к страшным последствиям(все свойства объекта класса CCyUSBDevice сбивались).После внесения соответствующих корректив, обмен данными был налажен. Спасибо за помощь!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|