Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 «  : 15-02-2013 13:20 »   | 
								
								 | 
							  
							 
							Хочу начать работу с CY7C68013 Изучил множество материалов, но большинство программ написано либо на асемблере, либо на Visual. Есть где-нибудь материал и примеры, написанные на C++ Builder 6 ? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 15-02-2013 13:54 »   | 
								
								 | 
							  
							 
							начать надо конечно с документации)))  http://www.cypress.com/?id=193и простите.... вы драйвер на C++ Builder 6 хотите написать? а если просто надо общаться с устройством - смотрите SDK по ссылке, а Builder у вас или MSVC разницы нет. вам нужно CyAPI. документация есть в SDK.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 15-02-2013 15:02 »   | 
								
								 | 
							  
							 
							Спасибо. Хоть знаю что в случае простого общения нужен только CyAPI )) Документацию изучил, но без конкретного примера пока не могу сообразить. А все что нахожу как правило в Visual С. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 15-02-2013 15:08 »   | 
								
								 | 
							  
							 
							Shakesbeer, если программировать в рамках Win32 API, то разницы между VC и BCB нет. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 16-02-2013 03:23 »   | 
								
								 | 
							  
							 
							Shakesbeer, примеры там тоже были вроде... просто не смотрите как там окошки реализованы)  у сайпреса для этой м/с свой драйвер есть, а так же интерфейсная библиотека через которую все работают. CyAPI - как раз от библиотеки. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 28-02-2013 12:24 »   | 
								
								 | 
							  
							 
							Shakesbeer, примеры там тоже были вроде... просто не смотрите как там окошки реализованы)  у сайпреса для этой м/с свой драйвер есть, а так же интерфейсная библиотека через которую все работают. CyAPI - как раз от библиотеки.
  Кстати с CyAPI до какой скорости передачи данных можно дойти?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 28-02-2013 14:14 »   | 
								
								 | 
							  
							 
							понятия не имею, кажется народ на их форуме писал что 42мбайт получалось, но это с чужих слов.  у меня получилось на своем драйвере 48мбайт. что есть 80% от 480мбит. граница довольно четкая. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 28-02-2013 14:17 от Ochkarik »
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 01-03-2013 10:55 »   | 
								
								 | 
							  
							 
							По примеру CyAPI сделал простенький примерчик: //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) {  CCyUSBDevice *USBDevice;  char buf[512];  string s;  USB_DEVICE_DESCRIPTOR descr;  USBDevice = new CCyUSBDevice(NULL);   // Create an instance of CCyUSBDevice  GroupBox1->Caption = "device count " + AnsiString(USBDevice->DeviceCount());  if (USBDevice->DeviceCount())  for (int c=0; c < USBDevice->DeviceCount(); c++)   {    if (USBDevice->Open(c))     {                Memo1->Clear();      int vID = USBDevice->VendorID;      int pID  = USBDevice->ProductID;      Label[0]->Caption = "VendorID: " + AnsiString(IntToHex(vID,4));      Label[1]->Caption = "ProductID: " + AnsiString(IntToHex(pID,4));      CCyUSBConfig cfg = USBDevice->GetUSBConfig(c);      USBDevice->GetDeviceDescriptor(&descr);      Label[2]->Caption = "bLength 0x" + AnsiString(IntToHex(descr.bLength,2));      Label[3]->Caption = "bDescriptorType 0x" + AnsiString(IntToHex(descr.bDescriptorType,2));      Label[4]->Caption = "bcdUSB 0x" + AnsiString(IntToHex(descr.bcdUSB,4));      Label[5]->Caption = "bDeviceClass 0x" + AnsiString(IntToHex(descr.bDeviceClass,2));      Label[6]->Caption = "bDeviceProtocol 0x" + AnsiString(IntToHex(descr.bDeviceProtocol,2));      Label[7]->Caption = "bMaxPacketSize0 0x" + AnsiString(IntToHex(descr.bMaxPacketSize0,2));      Label[8]->Caption = "idVendor 0x" + AnsiString(IntToHex(descr.idVendor,4));      Label[9]->Caption = "idProduct 0x" + AnsiString(IntToHex(descr.idProduct,4));      Label[10]->Caption = "bcdDevice 0x" + AnsiString(IntToHex(descr.bcdDevice,4));      Label[11]->Caption = "iManufacturer 0x" + AnsiString(IntToHex(descr.iManufacturer,2));      Label[12]->Caption = "iProduct 0x" + AnsiString(IntToHex(descr.iProduct,2));      Label[13]->Caption = "iSerialNumber 0x" + AnsiString(IntToHex(descr.iSerialNumber,2));      Label[14]->Caption = "bNumConfigurations 0x" + AnsiString(IntToHex(descr.bNumConfigurations,2));   //          USBDevice->Close();      for   (int  i=0; i<cfg.AltInterfaces; i++)         {          CCyUSBInterface  *ifc = cfg.Interfaces[i];          Memo1->Lines->Add("Interface  Descriptor:");          Memo1->Lines->Add("----------------------");          Memo1->Lines->Add("bLength  0x" + AnsiString(IntToHex(ifc->bLength,4)));          Memo1->Lines->Add("bDescriptorType  0x" + AnsiString(IntToHex(ifc->bDescriptorType,4)));          Memo1->Lines->Add("bInterfaceNumber  0x" + AnsiString(IntToHex(ifc->bInterfaceNumber,4)));          Memo1->Lines->Add("bAlternateSetting  0x" + AnsiString(IntToHex(ifc->bAlternateSetting,4)));          Memo1->Lines->Add("bNumEndpoints  0x" + AnsiString(IntToHex(ifc->bNumEndpoints,4)));          Memo1->Lines->Add("bInterfaceClass  0x" + AnsiString(IntToHex(ifc->bInterfaceClass,4)));          Memo1->Lines->Add("********************************************************************");
           for   (int  e=0; e<ifc->bNumEndpoints; e++)            {             CCyUSBEndPoint  *ept = ifc->EndPoints[e+1];             Memo1->Lines->Add("EndPoint  Descriptor" + AnsiString(e+1) + ":");             Memo1->Lines->Add("----------------------");             Memo1->Lines->Add("bLength  0x" + AnsiString(IntToHex(ept->DscLen, 4)));             Memo1->Lines->Add("bDescriptorType  0x" + AnsiString(IntToHex(ept->DscType, 4)));             Memo1->Lines->Add("bEndpointAddress  0x" + AnsiString(IntToHex(ept->Address, 4)));             Memo1->Lines->Add("bmAttributes  0x" + AnsiString(IntToHex(ept->Attributes, 4)));             Memo1->Lines->Add("wMaxPacketSize  0x" + AnsiString(IntToHex(ept->MaxPktSize,4)));             Memo1->Lines->Add("bInterval  0x" + AnsiString(IntToHex(ept->Interval, 4)));             Memo1->Lines->Add("********************************************************************");            }         }     }     else       {         GroupBox1->Caption = "No device found";       }   }  else   {      Label[0]->Caption = "VendorID: ";      Label[1]->Caption = "ProductID: ";      Label[2]->Caption = "bLength ";      Label[3]->Caption = "bDescriptorType ";      Label[4]->Caption = "bcdUSB ";      Label[5]->Caption = "bDeviceClass ";      Label[6]->Caption = "bDeviceProtocol ";      Label[7]->Caption = "bMaxPacketSize0 ";      Label[8]->Caption = "idVendor ";      Label[9]->Caption = "idProduct ";      Label[10]->Caption = "bcdDevice ";      Label[11]->Caption = "iManufacturer ";      Label[12]->Caption = "iProduct ";      Label[13]->Caption = "iSerialNumber ";      Label[14]->Caption = "bNumConfigurations ";      Memo1->Text = "No device";   }     //USBDevice->GetDeviceDescriptor(&descr);  USBDevice->Close();  //_getch(); } //--------------------------------------------------------------------------- Все работает, все хорошо. Но никак не пойму как организовать прием-передачу.    Нашел чужой код с разбитыми функциями, но никак не получается все организовать по-человечески: static CCyUSBDevice *s_usb_device; static CCyUSBEndPoint *s_in_fifo_endpoint, *s_out_fifo_endpoint; static CCyControlEndPoint* s_control_endpoint; static OVERLAPPED s_out_overlap, s_in_overlap; static unsigned char *s_in_context, *s_out_context; int s_has_to_close_out, s_has_to_close_in; LONG s_buffer_size_out, s_buffer_size_in; PUCHAR s_buffer_out, s_buffer_in;
  // For now it is static, might change it to a dynamic later //--------------------------------------------------------------------------- void* usb_init(void) { 	int i = 0;  s_usb_device = new CCyUSBDevice();
   // open my device  if (s_usb_device->DeviceCount())   {    // search for all connected devices, and add the one that has the right name    for (i = 0; i < s_usb_device->DeviceCount(); i++)      {       s_usb_device->Open(i); /*      if(strcmp (USB_DEVICE_NAME, s_usb_device->DeviceName) == 0)  //ñðàâíèâàåì ñ íàøèì èìåíåì         break;       s_usb_device->Close();      }   } else      {       // Cannot find my device       if (Application->MessageBox("Cannot find my device","Îøèáêà", MB_OK) != IDOK)         return NULL;    */      }   }  if (!s_usb_device->IsOpen())    {      // Could not open my device     if (Application->MessageBox("Could not open my device","Îøèáêà", MB_OK) != IDOK)       return NULL;    }
   // get usb IN and OUT FIFOs endpoints  int endpoints_count = s_usb_device->EndPointCount();
   for (i=1; i<endpoints_count; i++)    {     CCyUSBEndPoint *endpoint;     endpoint = s_usb_device->EndPoints[i];     if (endpoint->Attributes == 2)       {        // it is a Bulk endpoint        if(endpoint->Address == 0x86)          {           // my IN endpoint           s_in_fifo_endpoint = endpoint;          }        if(endpoint->Address == 0x02)          {           // my OUT endpoint 	  s_out_fifo_endpoint = endpoint; 	 }       }    }  // get Control enpoint  s_control_endpoint = s_usb_device->ControlEndPt;  // create events for data transfers  s_out_overlap.hEvent  = CreateEventA(NULL, false, false, "CYUSB_OUT");  s_in_overlap.hEvent   = CreateEventA(NULL, false, false, "CYUSB_IN");  return (void*)1; } //--------------------------------------------------------------------------- int usb_finish_in_transfer() {  if (s_has_to_close_in == 1)    {     s_in_fifo_endpoint->FinishDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap,s_in_context);    }  s_has_to_close_in = 0;  return s_buffer_size_in; } //--------------------------------------------------------------------------- int usb_finish_out_transfer() {  if (s_has_to_close_out == 1)    {     s_out_fifo_endpoint->FinishDataXfer(s_buffer_out, s_buffer_size_out, &s_out_overlap,s_out_context);    }  s_has_to_close_out = 0;  return s_buffer_size_out; } //--------------------------------------------------------------------------- void usb_close() {  usb_finish_in_transfer();  usb_finish_out_transfer();  delete s_usb_device;  CloseHandle(s_out_overlap.hEvent);  CloseHandle(s_in_overlap.hEvent); } //--------------------------------------------------------------------------- void usb_begin_out_transfer(unsigned char* buffer, int size) {  if (s_has_to_close_out == 1)    {     s_out_fifo_endpoint->FinishDataXfer (s_buffer_out, s_buffer_size_out, &s_out_overlap,s_out_context);    }  s_buffer_out = buffer;  s_buffer_size_out = size;  s_out_context = s_out_fifo_endpoint->BeginDataXfer(s_buffer_out, s_buffer_size_out, &s_out_overlap);  s_has_to_close_out = 1; } //--------------------------------------------------------------------------- void usb_begin_in_transfer(unsigned char* buffer, int size) {  if (s_has_to_close_in == 1)    {     s_in_fifo_endpoint->FinishDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap,s_in_context);    }  s_buffer_in = buffer;  s_buffer_size_in = size;  s_in_context = s_in_fifo_endpoint->BeginDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap);  s_has_to_close_in = 1; } //--------------------------------------------------------------------------- int usb_is_in_transfer_done() {  return s_in_fifo_endpoint->WaitForXfer(&s_in_overlap,1); } //--------------------------------------------------------------------------- int usb_is_out_transfer_done() {  return s_out_fifo_endpoint->WaitForXfer(&s_out_overlap,1); } //--------------------------------------------------------------------------- void usb_wait_in_transfer_finish() {  while(!s_in_fifo_endpoint->WaitForXfer(&s_in_overlap,1)); } //--------------------------------------------------------------------------- void usb_wait_out_transfer_finish() {  while(!s_out_fifo_endpoint->WaitForXfer(&s_out_overlap,1)); }  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 01-03-2013 15:43 »   | 
								
								 | 
							  
							 
							а в чем конкретно проблема? вы SDK смотрели? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							xenetron
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 12-03-2013 13:12 »   | 
								
								 | 
							  
							 
							Привет всем. кто-нибудь может помочь в таком вопросе. в общем необходимо на  CY7C68013 в Билдере написать интерфейс usb для обмена данными? может быть у кого нибудь есть какие нибудь уже файлы, для обмена данными. а то сам не знаком с usb в принципе. есть только эта библиотека CyAPI и не очень понятно, что нужно использовать в программе. Жду ответа... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 12-03-2013 15:29 »   | 
								
								 | 
							  
							 
							см. ответы выше) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							xenetron
							
								Интересующийся 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 14-03-2013 13:52 »   | 
								
								 | 
							  
							 
							а как нужно настроить cyusb.inf файл?
 
  Добавлено через 48 минут и 1 секунду: А что делать если я установил драйвер, система видит плату, но пишет что она работает неверно и в диспетчере устройств имеет воскл знак?
 
  Добавлено через 2 часа, 2 минуты и 54 секунды: А что делать если я установил драйвер, система видит плату, но пишет что она работает неверно и в диспетчере устройств имеет воскл знак? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 14-03-2013 16:43 от xenetron »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 14-03-2013 17:02 »   | 
								
								 | 
							  
							 
							1. поменять в inf - девайс и вендор ID соответственно вашему устройству. (см свойства обнаруженного устройства в дереве устройств) 2. посмотреть код ошибки установки драйвера. там же. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 18-03-2013 11:51 »   | 
								
								 | 
							  
							 
							а в чем конкретно проблема?
  Просто хочется увидеть рабочий пример и от него отталкиваться) И хочу спросить: верно ли написаны функции, которые я выложил ранее? Потому что собрать из них что-то дельное не получается, появляются ошибки.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 18-03-2013 13:28 »   | 
								
								 | 
							  
							 
							увы, примеры только те, которые шли в SDK... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 18-03-2013 13:55 »   | 
								
								 | 
							  
							 
							увы, примеры только те, которые шли в SDK...
  Разбирался с CyAPI из Cypress Suite USB 3.4.7. Не смог понять где конкретно описывается считывание данных) Если есть возможность - объясните.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 18-03-2013 14:20 »   | 
								
								 | 
							  
							 
							Cypress Suite USB 3.4.4\CyAPI\examples\cybulk\BulkLoopDlg.cpp функция XferLoop() Добавлено через 4 минуты и 21 секунду:в частности, запрос в два ендпоинта, ожидание 2 сек, проверка статуса.         UCHAR  *outContext = dlg->OutEndpt->BeginDataXfer(data,outlen,&outOvLap);         UCHAR  *inContext = dlg->InEndpt->BeginDataXfer(inData,inlen,&inOvLap);
          dlg->OutEndpt->WaitForXfer(&outOvLap,2000);          dlg->InEndpt->WaitForXfer(&inOvLap,2000); 
          success = dlg->OutEndpt->FinishDataXfer(data, outlen, &outOvLap,outContext);          success = dlg->InEndpt->FinishDataXfer(inData,inlen, &inOvLap,inContext);  PS это грубо на вскидку исключительно по названиям функций. надо доку читать более подробно конечно.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 18-03-2013 14:26 от Ochkarik »
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 18-03-2013 14:30 »   | 
								
								 | 
							  
							 
							Вот пример моего кода. Выдает ошибку "Acces violation": //--------------------------------------------------------------------------- #include <windows.h> #include <stdio.h> #include <conio.h> #include <iostream.h> #include <vcl.h> #pragma hdrstop
  #include "cyapi.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //#define USB_DEVICE_NAME "MCUCY7C68013x" //èìÿ óñòðîéñòâà (äðàéâåð) TForm1 *Form1; TLabel *Label[16];
  static CCyUSBDevice *s_usb_device; static CCyUSBEndPoint *s_in_fifo_endpoint, *s_out_fifo_endpoint; static CCyControlEndPoint* s_control_endpoint; static OVERLAPPED s_out_overlap, s_in_overlap; static unsigned char *s_in_context, *s_out_context; int s_has_to_close_out, s_has_to_close_in; LONG s_buffer_size_out, s_buffer_size_in; PUCHAR s_buffer_out, s_buffer_in;
  // For now it is static, might change it to a dynamic later //--------------------------------------------------------------------------- void* usb_init(void) {         int i = 0;  s_usb_device = new CCyUSBDevice();
   // open my device  if (s_usb_device->DeviceCount())   {    // search for all connected devices, and add the one that has the right name    for (i = 0; i < s_usb_device->DeviceCount(); i++)      {       s_usb_device->Open(i); /*      if(strcmp (USB_DEVICE_NAME, s_usb_device->DeviceName) == 0)  //ñðàâíèâàåì ñ íàøèì èìåíåì         break;       s_usb_device->Close();      }   } else      {       // Cannot find my device       if (Application->MessageBox("Cannot find my device","Îøèáêà", MB_OK) != IDOK)         return NULL;    */      }   }  if (!s_usb_device->IsOpen())    {      // Could not open my device     if (Application->MessageBox("Could not open my device","Îøèáêà", MB_OK) != IDOK)       return NULL;    }
   // get usb IN and OUT FIFOs endpoints  int endpoints_count = s_usb_device->EndPointCount();
   for (i=1; i<endpoints_count; i++)    {     CCyUSBEndPoint *endpoint;     endpoint = s_usb_device->EndPoints[i];     if (endpoint->Attributes == 2)       {        // it is a Bulk endpoint        if(endpoint->Address == 0x86)          {           // my IN endpoint           s_in_fifo_endpoint = endpoint;          }        if(endpoint->Address == 0x02)          {           // my OUT endpoint           s_out_fifo_endpoint = endpoint;          }       }    }    // get Control enpoint  s_control_endpoint = s_usb_device->ControlEndPt;  // create events for data transfers  s_out_overlap.hEvent  = CreateEventA(NULL, false, false, "CYUSB_OUT");  s_in_overlap.hEvent   = CreateEventA(NULL, false, false, "CYUSB_IN");  return (void*)1; } //--------------------------------------------------------------------------- int usb_finish_in_transfer() {  if (s_has_to_close_in == 1)    {     s_in_fifo_endpoint->FinishDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap,s_in_context);    }  s_has_to_close_in = 0;  return s_buffer_size_in; } //--------------------------------------------------------------------------- int usb_finish_out_transfer() {  if (s_has_to_close_out == 1)    {     s_out_fifo_endpoint->FinishDataXfer(s_buffer_out, s_buffer_size_out, &s_out_overlap,s_out_context);    }  s_has_to_close_out = 0;  return s_buffer_size_out; } //--------------------------------------------------------------------------- void usb_close() {  usb_finish_in_transfer();  usb_finish_out_transfer();  delete s_usb_device;  CloseHandle(s_out_overlap.hEvent);  CloseHandle(s_in_overlap.hEvent); } //--------------------------------------------------------------------------- void usb_begin_out_transfer(unsigned char* buffer, int size) {  if (s_has_to_close_out == 1)    {     s_out_fifo_endpoint->FinishDataXfer (s_buffer_out, s_buffer_size_out, &s_out_overlap,s_out_context);    }  s_buffer_out = buffer;  s_buffer_size_out = size;  s_out_context = s_out_fifo_endpoint->BeginDataXfer(s_buffer_out, s_buffer_size_out, &s_out_overlap);  s_has_to_close_out = 1; } //--------------------------------------------------------------------------- void usb_begin_in_transfer(unsigned char* buffer, int size) {  if (s_has_to_close_in == 1)    {     s_in_fifo_endpoint->FinishDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap,s_in_context);    }  s_buffer_in = buffer;  s_buffer_size_in = size;  s_in_context = s_in_fifo_endpoint->BeginDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap);  s_has_to_close_in = 1; } //--------------------------------------------------------------------------- int usb_is_in_transfer_done() {  return s_in_fifo_endpoint->WaitForXfer(&s_in_overlap,1); } //--------------------------------------------------------------------------- int usb_is_out_transfer_done() {  return s_out_fifo_endpoint->WaitForXfer(&s_out_overlap,1); } //--------------------------------------------------------------------------- void usb_wait_in_transfer_finish() {  while(!s_in_fifo_endpoint->WaitForXfer(&s_in_overlap,1)); } //--------------------------------------------------------------------------- void usb_wait_out_transfer_finish() {  while(!s_out_fifo_endpoint->WaitForXfer(&s_out_overlap,1)); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)         : TForm(Owner) {   } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { usb_init(); char buf[8]; usb_begin_in_transfer(buf, 8); usb_is_in_transfer_done();   usb_finish_in_transfer(); usb_wait_in_transfer_finish(); usb_close(); }  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 18-03-2013 14:33 »   | 
								
								 | 
							  
							 
							 где выдает? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 18-03-2013 14:36 »   | 
								
								 | 
							  
							 
							        UCHAR  *outContext = dlg->OutEndpt->BeginDataXfer(data,outlen,&outOvLap); //начало передачи data, длиной outlen         UCHAR  *inContext = dlg->InEndpt->BeginDataXfer(inData,inlen,&inOvLap); //начало передачи indata, длиной inlen
          dlg->OutEndpt->WaitForXfer(&outOvLap,2000); //ждем передачи 2000 мкс         dlg->InEndpt->WaitForXfer(&inOvLap,2000); //ждем приема 2000 мкс
          success = dlg->OutEndpt->FinishDataXfer(data, outlen, &outOvLap,outContext);  // это проверка отосланы байты или нет         success = dlg->InEndpt->FinishDataXfer(inData,inlen, &inOvLap,inContext);  // проверка приняты байты или нет Как-то так? Добавлено через 58 секунд: где выдает?
  //--------------------------------------------------------------------------- void usb_begin_in_transfer(unsigned char* buffer, int size) {  if (s_has_to_close_in == 1)    {     s_in_fifo_endpoint->FinishDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap,s_in_context);    }  s_buffer_in = buffer;  s_buffer_size_in = size; ---> s_in_context = s_in_fifo_endpoint->BeginDataXfer(s_buffer_in, s_buffer_size_in, &s_in_overlap);  <--- Вот в этом месте  s_has_to_close_in = 1; } //---------------------------------------------------------------------------  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 18-03-2013 14:37 от Shakesbeer »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 18-03-2013 14:40 »   | 
								
								 | 
							  
							 
							вроде похоже. я не смотрел доку) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 18-03-2013 14:43 »   | 
								
								 | 
							  
							 
							вроде похоже. я не смотрел доку)
  Попробую пока в bulkLoopDlg покопаться)  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #22 : 18-03-2013 14:46 »   | 
								
								 | 
							  
							 
							endpoints_count - чему равен?
  Добавлено через 40 секунд: проверка на то что s_in_fifo_endpoint  вообще какой то существует - где? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 18-03-2013 14:46 от Ochkarik »
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #23 : 18-03-2013 14:51 »   | 
								
								 | 
							  
							 
							endpoints_count - чему равен?
  Добавлено через 40 секунд: проверка на то что s_in_fifo_endpoint  вообще какой то существует - где?
  Задается в  ф-ции void* usb_init(void)  int endpoints_count = s_usb_device->EndPointCount();   проверка на то что s_in_fifo_endpoint  вообще какой то существует - где? То-есть банально сравнить с нулевым значением и отменять дальнейшее выполнение, если < 1?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 18-03-2013 14:54 от Shakesbeer »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #24 : 18-03-2013 16:10 »   | 
								
								 | 
							  
							 
							endpoints_count  - чему равен после ЭТОГО присвоения?! s_in_fifo_endpoint  - блоки кода где происходит проверка и присвоение - вообще выполняется или нет? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #25 : 19-03-2013 09:13 »   | 
								
								 | 
							  
							 
							endpoints_count  - чему равен после ЭТОГО присвоения?! s_in_fifo_endpoint  - блоки кода где происходит проверка и присвоение - вообще выполняется или нет?
  Я так понял он запрашивает у Cypressa:  // get usb IN and OUT FIFOs endpoints  int endpoints_count = s_usb_device->EndPointCount();
   for (i=1; i<endpoints_count; i++)    {     CCyUSBEndPoint *endpoint;     endpoint = s_usb_device->EndPoints[i];     if (endpoint->Attributes == 2)       {        // it is a Bulk endpoint        if(endpoint->Address == 0x86)          {           // my IN endpoint           s_in_fifo_endpoint = endpoint;          }        if(endpoint->Address == 0x02)          {           // my OUT endpoint           s_out_fifo_endpoint = endpoint;          }       }    }    // get Control enpoint  s_control_endpoint = s_usb_device->ControlEndPt; А какую желательно сделать проверку? подскажите плииз) :   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #26 : 19-03-2013 09:46 »   | 
								
								 | 
							  
							 
							да хоть мессаджбокс! откуда вы знаете, что endpoints_count вообще не вернулся равным нулю, к примеру? и что цикл  for (i=1; i<endpoints_count; i++)  вообще имел место быть и выполнятся?! что указатели вообще присваивались?!!! вообще у вас принято возвращаемые значения на валидность проверять?! *ругаюсь страшно, и брюзжу*)   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									«  Ответ #27 : 19-03-2013 10:30 »    | 
								
								 | 
							  
							 
							да хоть мессаджбокс! откуда вы знаете, что endpoints_count вообще не вернулся равным нулю, к примеру? и что цикл  for (i=1; i<endpoints_count; i++)  вообще имел место быть и выполнятся?! что указатели вообще присваивались?!!! вообще у вас принято возвращаемые значения на валидность проверять?! *ругаюсь страшно, и брюзжу*) 
  Вы оказались абсолютно правы, попросту не задан endpoint: usb_init(); char buf[8];  if (s_usb_device->DeviceCount()>0)  if (!s_usb_device->IsOpen())    {      // Could not open my device     if (Application->MessageBox("Could not open my device","Ошибка", MB_OK) != IDOK)       return;    }     else      {       if (s_in_fifo_endpoint>0)        {         usb_begin_in_transfer(buf, 8);         usb_is_in_transfer_done();         usb_finish_in_transfer();         usb_wait_in_transfer_finish();         usb_close();        }        else         if (Application->MessageBox("не задан s_in_fifo_endpoint","Ошибка", MB_OK) != IDOK)           return;      }   else    if (Application->MessageBox("Could not open my device","Ошибка", MB_OK) != IDOK)     return; Как мне исправиться?   Endpointы считываю с Cypressa ведь? Нашел ещё один вариант интересный, но никак не разберусь что писать дальше: CCyBulkEndPoint *BulkInEpt = NULL;  CCyBulkEndPoint  *BulkOutEpt = NULL;  CCyUSBDevice  *USBDevice = new  CCyUSBDevice(NULL);  if (USBDevice->DeviceCount())   for (int c=0; c < USBDevice->DeviceCount(); c++)     if (USBDevice->Open(c))      {       int  eptCount = USBDevice->EndPointCount();       for  (int  i=1; i<eptCount;  i++)        {         bool  bIn = ((USBDevice->EndPoints[i]->Address  & 0x80)==0x80);         bool  bBulk =  (USBDevice->EndPoints[i]->Attributes == 2);         if (bBulk  && bIn) BulkInEpt = (CCyBulkEndPoint *) USBDevice->EndPoints[i];         if  (bBulk && !bIn) BulkOutEpt = (CCyBulkEndPoint *) USBDevice->EndPoints[i];        }       USBDevice->Close();      }  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-03-2013 12:33 от Shakesbeer »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Ochkarik
							
						 | 
						
							
								  | 
								
									
									 « Ответ #28 : 19-03-2013 15:43 »   | 
								
								 | 
							  
							 
							уже почти рыдаю   проверяйте почему он не задан в usb_init()  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							RTFM уже хоть раз наконец!     :[ ну или хотя бы  STFW...  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Shakesbeer
							
								Постоялец 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #29 : 21-03-2013 11:42 »   | 
								
								 | 
							  
							 
							Просто не понимаю почему в данном случае все параметры EP выводит нормально: CCyUSBDevice *USBDevice;  char buf[512];  string s;  USB_DEVICE_DESCRIPTOR descr;  USBDevice = new CCyUSBDevice(NULL);   // Create an instance of CCyUSBDevice  GroupBox1->Caption = "device count " + AnsiString(USBDevice->DeviceCount());  if (USBDevice->DeviceCount())  for (int c=0; c < USBDevice->DeviceCount(); c++)   {    if (USBDevice->Open(c))     {                Memo1->Clear();      int vID = USBDevice->VendorID;      int pID  = USBDevice->ProductID;      Label[0]->Caption = "VendorID: " + AnsiString(IntToHex(vID,4));      Label[1]->Caption = "ProductID: " + AnsiString(IntToHex(pID,4));      CCyUSBConfig cfg = USBDevice->GetUSBConfig(c);      USBDevice->GetDeviceDescriptor(&descr);      for   (int  i=0; i<cfg.AltInterfaces; i++)         {          CCyUSBInterface  *ifc = cfg.Interfaces[i];           for   (int  e=0; e<ifc->bNumEndpoints; e++)            {             CCyUSBEndPoint  *ept = ifc->EndPoints[e+1];             Memo1->Lines->Add("EndPoint  Descriptor" + AnsiString(e+1) + ":");             Memo1->Lines->Add("----------------------");             Memo1->Lines->Add("bLength  0x" + AnsiString(IntToHex(ept->DscLen, 4)));             Memo1->Lines->Add("bDescriptorType  0x" + AnsiString(IntToHex(ept->DscType, 4)));             Memo1->Lines->Add("bEndpointAddress  0x" + AnsiString(IntToHex(ept->Address, 4)));             Memo1->Lines->Add("bmAttributes  0x" + AnsiString(IntToHex(ept->Attributes, 4)));             Memo1->Lines->Add("wMaxPacketSize  0x" + AnsiString(IntToHex(ept->MaxPktSize,4)));             Memo1->Lines->Add("bInterval  0x" + AnsiString(IntToHex(ept->Interval, 4)));             Memo1->Lines->Add("********************************************************************");            } } }  USBDevice->Close(); } Добавлено через 3 минуты и 1 секунду:И если нужно задавать вручную, то в каком виде?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 21-03-2013 11:45 от Shakesbeer »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |