Привет!
Понадобилось мне поработать с Cypress USB в программе на C++/CLR. Мое устройство выполнено на микросхеме CY7C68013A. Это микроконтроллер USB 2.0. Для общения с ним используется канал управления (EP2 на вывод, EP4 на ввод). Передача данных управления производится через специальную структуру:
#ifndef __TYPES
#define __TYPES
typedef unsigned char byte;
typedef unsigned short word;
#endif
#define SCUSB_CONTROL_STRUCT_DATA_LEN (512-4)
#pragma pack(push,1)
typedef struct {
byte cmd; // SCUSB I/O command code
byte toggle; // Free running counter for proper data answer
word len; // Data size in bytes
byte dat[SCUSB_CONTROL_STRUCT_DATA_LEN];
} SCUSB_CONTROL_STRUCT;
#pragma pack(pop)
SCUSB_CONTROL_STRUCT cs;
В программе на C++ (обычном, не управляемом) никаких проблем:
pControlOutEndpt->XferData((PUCHAR)&cs, sizeof(cs));
А в программе на C++/CLR это выглядит по другому.
Функция передачи/приема данных по USB выглядит так:
public : virtual bool XferData(array<unsigned char>^ buf, int len) new
Member of CyUSB::CyUSBEndPoint
Как сделать такую передачу в программе C++/CLR?
Разнообразные попытки вызывают ошибки:
ScusbControlOutEndPt->XferData(array<System::Byte>^cs, sizeof(SCUSB_CONTROL_STRUCT));
или
array<System::Byte>^ bOutbuf = gcnew (cs);
ScusbControlOutEndPt->XferData(bOutbuf, sizeof(SCUSB_CONTROL_STRUCT));
и другое в этом роде
Помогите, пожалуйста!