if ( 1 == connect() ) { AnsiString s=Edit1->Text; char *b1 = new char[s.Length()/sizeof(uchar)+1]; memcpy(b1,s.c_str(),s.Length()); pdata.b1=*b1; hid.SendData(&pdata); Memo2->Lines->Add(b1); Memo2->Lines->Add(pdata.b1); delete [] b1; // Îòïðàâëÿåì äàííûå óñòðîéñòâó ПРоблема такая что передается только первый символ. Воюю уже с ним второй день. Данная прога общается с наклепаным мною девайсом. На том конце тип указан uchar, ну а для девайся учар это строго 8 бит. Добавлено спустя 3 минуты 30 секунд: #include #include #include /* íóæíî äëÿ usbdrv.h */ #include "usbdrv.h" struct dataexchange_t // Îïèñàíèå ñòðóêòóðû äëÿ ïåðåäà÷è äàííûõ { int b1; }pdata; int b2; int c; PROGMEM char usbHidReportDescriptor[22] = { // USB report descriptor // Äåñêðèïòîð îïèñûâàåò ñòðóêòóðó ïàêåòà äàííûõ äëÿ îáìåíà 0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop) 0x09, 0x01, // USAGE (Vendor Usage 1) 0xa1, 0x01, // COLLECTION (Application) 0x15, 0x00, // LOGICAL_MINIMUM (0) // min. çíà÷åíèå äëÿ äàííûõ 0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (1024) // max. çíà÷åíèå äëÿ äàííûõ, 255 òóò íå ñëó÷àéíî, à ÷òîáû óëîæèòüñÿ â 1 áàéò 0x75, 0x08, // REPORT_SIZE (8) // èíôîðìàöèÿ ïåðåäàåòñÿ ïîðöèÿìè, ýòî ðàçìåð îäíîãî "ðåïîðòà" 8 áèò 0x95, sizeof(struct dataexchange_t), // REPORT_COUNT // êîëè÷åñòâî ïîðöèé (ó íàøåì ïðèìåðå = 3, îïèñàííàÿ âûøå ñòðóêòóðà ïåðåäàñòñÿ çà òðè ðåïîðòà) 0x09, 0x00, // USAGE (Undefined) 0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf) 0xc0 // END_COLLECTION }; /* Çäåñü ìû îïèñàëè òîëüêî îäèí report, èç-çà ÷åãî íå íóæíî èñïîëüçîâàòü report-ID (îí äîëæåí áûòü ïåðâûì áàéòîì). * Ñ åãî ïîìîùüþ ïåðåäàäèì 3 áàéòà äàííûõ (ðàçìåð îäíîãî REPORT_SIZE = 8 áèò = 1 áàéò, èõ êîëè÷åñòâî REPORT_COUNT = 3). */ /* Ýòè ïåðåìåííûå õðàíÿò ñòàòóñ òåêóùåé ïåðåäà÷è */ static uchar currentAddress; static uchar bytesRemaining; void readdata() {//b2=pdata.b1; pdata.b1=b2; } void writedata() { b2=pdata.b1; } // ýòà ôóíêöèÿ áóäåò âûçâàíà, ïîñëå òîãî, êàê êîìïüþòåð çàïèøåò äàííûå struct dataexchange_t pdata; // à ýòî ñàìè äàííûå /* usbFunctionRead() âûçûâàåòñÿ, êîãäà USB õî÷åò ïðî÷èòàòü ÷àñòü äàííûõ */ uchar usbFunctionRead(uchar *data, uchar len) { uint8_t i; if(len > bytesRemaining) len = bytesRemaining; uchar *buffer=(uchar*)&pdata; if(!currentAddress) /* íè îäèí êóñîê äàííûõ åùå íå ïðî÷èòàí */ { readdata(); } for(i=0;i < len;i++) data[i]=buffer[i+currentAddress]; currentAddress += len; bytesRemaining -= len; return len; } /* usbFunctionWrite() âûçûâàåòñÿ êîãäà õîñò îòïðàâëÿåò ïîðöèþ äàííûõ ê óñòðîéñòâó * Äëÿ äîïîëíèòåëüíîé èíôîðìàöèè ñì. äîêóìåíòàöèþ â usbdrv.h */ /* usbFunctionRead() âûçûâàåòñÿ, êîãäà USB õî÷åò çàïèñàòü ÷àñòü äàííûõ */ uchar usbFunctionWrite(uchar *data, uchar len) { uint8_t i; if(bytesRemaining == 0) return 1; /* êîíåö ïåðåäà÷è */ if(len > bytesRemaining) len = bytesRemaining; uchar *buffer=(uchar*)&pdata; for(i=0;i < len;i++) buffer[i+currentAddress]=data[i]; currentAddress += len; bytesRemaining -= len; if(bytesRemaining == 0) /* âñå äàííûå ïîëó÷åíû */ { writedata(); } return bytesRemaining == 0; /* 0 îçíà÷àåò, ÷òî åñòü åùå äàííûå */ } /* ------------------------------------------------------------------------- */ usbMsgLen_t usbFunctionSetup(uchar data[8]) { usbRequest_t *rq = (void *)data; if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS){ /* HID óñòðîéñòâî */ if(rq->bRequest == USBRQ_HID_GET_REPORT){ bytesRemaining = sizeof(struct dataexchange_t); currentAddress = 0; return USB_NO_MSG; }else if(rq->bRequest == USBRQ_HID_SET_REPORT){ bytesRemaining = sizeof(struct dataexchange_t); currentAddress = 0; return USB_NO_MSG; } }else{ /* îñòàëüíûå çàïðîñû ìû ïðîñòî èãíîðèðóåì */ } return 0; } int main(void) { usbInit(); usbDeviceDisconnect(); // ïðèíóäèòåëüíî îòêëþ÷àåìñÿ îò õîñòà, òàê äåëàòü ìîæíî òîëüêî ïðè âûêëþ÷åííûõ ïðåðûâàíèÿõ! uchar i = 0; while(--i){ // ïàóçà > 250 ms _delay_ms(1); } usbDeviceConnect(); // ïîäêëþ÷àåìñÿ sei(); // ðàçðåøàåì ïðåðûâàíèÿ for(;{ // ãëàâíûé öèêë ïðîãðàììû usbPoll(); // ýòó ôóíêöèþ íàäî ðåãóëÿðíî âûçûâàòü ñ ãëàâíîãî öèêëà, ìàêñèìàëüíàÿ çàäåðæêà ìåæäó âûçîâàìè - 50 ms } return 0; } /* ------------------------------------------------------------------------- */ #include Эт софт девайса