USB HID write to device -> Err

Nov 25, 2004 0 Replies
ðpÉ×ÅÔ All!
÷ÏÔ pÅÛÉÌÓÑ, ÞÔÏ ÐÏpÁ ÎÁ USB ÐÅpÅÂÉpÁÔØÓÑ, ÓËÁÞÁÌ ÐpÉÍÅpÞÉËÉ ÐÏËÁ ÔÏÌØËÏ ÄÌÑ HID, ÎÅÍÎÏÇÏ ÐÅpÅÄÅÌÁÌ É ×ÏÔ ÞÔÏ ÐÏÌÕÞÉÌÏÓØ:
ÎÁ ËÏÍÐÅ XP sp2, C++Builder 6. ðÏÌÕÞÁÀ handle ÎÁ hid ÕÓÔpÏÊÓÔ×Ï, CreateFile(handle,rd|wr,ShaRd|ShaWr,NULL,op_Exist,NULL,NULL) þÔÅÎÉÅ ReadFile(...)
ÄÅ×ÁÊÓ at89s53 ÐÁpÁÌÌÅÌØÎÏ ÎÁ USBN9064. Keil C. hid ÕÓÔpÏÊÓÔ×Ï control pipe + In Interrupt ÐÏ ÎÁÖÁÔÉÀ ËÎÏÐËÉ É ÚÁÐpÏÓÕ Ó ÈÏÓÔÁ ÐÅpÅÄÁÅÔ ÉÎËpÅÍÅÎÔÉpÕÅÍÙÊ int. üÔÏ ×ÓÅ pÁÂÏÔÁÅÔ.
äÁÌÅÅ- ÎÕÖÎÏ × ÄÅ×ÁÊÓ ÐÉÓÁÔØ. ÷pÏÄÅ ÅÓÔØ Ä×Á ÐÕÔÉ:
  1. ïÓÔÁ×ÉÔØ ÏÄÉÎ In Interrupt Endpoint, Á ËÏÇÄÁ WriteFile(...), ÔÏ ÄÁÎÎÙÅ ÂÕÄÕÔ ÏÔÐpÁ×ÌÑÔØÓÑ × ControlEndpoint
  2. óÏÚÄÁÔØ Out Interrupt EndPoint.

äÅÌÁÌ ÏÂÁ ×ÁpÉÁÎÔÁ, ÐpÉ WriteFile() Err (ÎÅÐpÁ×ÉÌØÎÙÊ ÐÁpÁÍÅÔp). ÷ ÄÅ×ÁÊÓ ÐpÉ ÜÔÏÍ ÎÉÞÅÇÏ ÎÅ ÄÏÈÏÄÉÔ, Ñ ÐÏ COM ÐÏpÔÕ ×ÓÅ ÓÏÂÙÔÉÑ Ó ÄÅ×ÁÊÓÁ ×ÉÖÕ. ÷ USB ÍÏÎÉÔÏpÁÈ out EndPoint ÐÏÑ×ÌÑÅÔÓÑ. ïÓÔÁ×ÌÑÌ É ÏÄÎÕ out EndPoint, ×ÓÅ pÁ×ÎÏ ÎÅ ÐÉÛÅÔ.
÷ÏÔ ÄÅÓËpÉÐÔÏp É pÅÐÏpÔ, ÍÏÖÅÔ ÏÎÉ ÉÌÉ ÷ þåí ðòïââìåíá?


unsigned char CFG_DESC[] = { CFG_LENGTH, /*÷ÅÌÉÞÉÎÁ ÜÔÏÇÏ ÄÅÓËpÉÐÔÏpÁ × ÂÁÊÔÁÈ CONFIGURATION, /*õËÁÚÙ×ÁÅÍ ÎÁ CONFIGURATION descriptor



41,0x00, /*äÌÉÎÁ ÄÅÓËpÉÐÔÏpÁ ×ËÌÀÞÁÑ Interface,Endpoint,HID
0x01, /*ëÏÌÉÞÅÓÔ×Ï éÎÔÅpÆÅÊÓÏ× ÐÏÄÄÅpÖÉ× ëÏÎÆÉÇÕpÁÃÉÅÊ
0x01, /*HÏÍÅp ÜÔÏÊ ëÏÎÆÉÇÕpÁÃÉÉ CFG_STR, /*éÎÄÅËÓ ïÐÉÓÁÎÉÑ ëÏÎÆÉÇÕpÁÃÉÉ × String Descriptor
0x80, /*õËÁÚÙ×ÁÅÍ, ÞÔÏ ÂÅpÅÍ ÐÉÔÁÎÉÅ Ó USB ÛÉÎÙ
100, /*õËÁÚÙ×ÁÅÍ, ÞÔÏ íÁÈ ÐÏÔpÅÂÌÅÎÉÅ (200 mA)

INT_LENGTH, /*÷ÅÌÉÞÉÎÁ ÜÔÏÇÏ ÄÅÓËpÉÐÔÏpÁ × ÂÁÊÔÁÈ INTERFACE, /*õËÁÚÙ×ÁÅÍ ÎÁ INTERFACE descriptor



0x00, /*HÏÍÅp éÎÔÅpÆÅÓÁ × ÄÁÎÎÏÊ ËÏÎÆÉÇÕpÁÃÉÉ
0x00, /*áÌØÔÅpÎÁÔÉ×ÎÙÊ éÎÔÅpÆÅÊÓ. '0'- HÅÔ ÄpÕÇÏÇÏ
0x01, /*ëÏÌÉÞÅÓÔ×Ï Endpoints ÉÓÐÏÌØÚÕÅÍÙÈ ÜÔÉÍ éÎÔÅpÆÅÊÓÏÍ HIDCLASS, /*ëÏÄ ËÌÁÓÓÁ - '3' HID ÕÓÔpÏÊÓÔ×Ï NOSUBCLASS, /*ëÏÄ ÐÏÄËÌÁÓÓÁ - '0' ÎÅÔ ÐÏÄËÌÁÓÓÁ
0x00, /*ëÏÄ ÐpÏÔÏËÏÌÁ - ÕÓÔpÏÊÓÔ×Ï ÎÅ ÉÓÐÏÌØÚÕÅÔ ÐpÏÔÏËÏÌÁ INT_STR, /*éÎÄÅËÓ ïÐÉÓÁÎÉÑ éÎÔÅpÆÅÊÓÁ × String Descriptor

HID_LENGTH, /*÷ÅÌÉÞÉÎÁ ÜÔÏÇÏ ÄÅÓËpÉÐÔÏpÁ × ÂÁÊÔÁÈ HID, /*õËÁÚÙ×ÁÅÍ ÎÁ HID descriptor - 21



0x00,0x01, /*÷ÅpÓÉÑ HID ÓÐÅÃÉÆÉËÁÃÉÉ × BCD
0x00, /*óÔpÁÎÁ ÄÌÑ ËÏÔÏpÏÊ ÉÚÇÏÔÏ×ÌÅÎÏ ÉÚÄÅÌÉÅ. 0-ÄÌÑ ×ÓÅÈ
1, /*ëÏÌÉÞÅÓÔ×Ï HID ÄÅÓËpÉÐÔÏpÏ×. '1'-Report descriptor HIDREPORT, /*ôÉÐ ÄÅÓËpÉÐÔÏpÁ ËÌÁÓÓÁ '22'-HID REPORT RPT_DESC_SIZE,0x0, /*÷ÅÌÉÞÉÎÁ Report Descriptort × ÂÁÊÔÁÈ

/*Pipe 1 (endpoint 6) */ END_LENGTH, /*÷ÅÌÉÞÉÎÁ ÜÔÏÇÏ ÄÅÓËpÉÐÔÏpÁ × ÂÁÊÔÁÈ ENDPOINT, /*õËÁÚÙ×ÁÅÍ ÎÁ ENDPOINT descriptor



0x06, /*õËÁÚÙ×ÁÅÍ ÞÔÏ ÜÔÏ OUT Endpoint c áÄpÅÓÏÍ 6
0x03, /*õÓÔÁÎÁ×ÌÉ×ÁÅÍ ôÉÐ ÐÅpÅÄÁÞÉ ÄÁÎÎÙÈ - Interrupt
8,0x00, /*õÓÔÁÎÁ×ÌÉ×ÁÅÍ ÞÔÏ íax ×ÙÄÁ×ÁÅÍÙÊ pÁÚÍÅp ÐÁËÅÔÁ 64
0xFF, /*÷pÅÍÑ ÏÐpÏÓÁ ëÏÎÅÞÎÏÊ ÔÏÞËÉ - 255ms

/*Pipe 1 (endpoint 5) */ END_LENGTH, /*÷ÅÌÉÞÉÎÁ ÜÔÏÇÏ ÄÅÓËpÉÐÔÏpÁ × ÂÁÊÔÁÈ ENDPOINT, /*õËÁÚÙ×ÁÅÍ ÎÁ ENDPOINT descriptor



0x85, /*õËÁÚÙ×ÁÅÍ ÞÔÏ ÜÔÏ IN Endpoint c áÄpÅÓÏÍ 5
0x03, /*õÓÔÁÎÁ×ÌÉ×ÁÅÍ ôÉÐ ÐÅpÅÄÁÞÉ ÄÁÎÎÙÈ - Interrupt
0x40,0x00, /*õÓÔÁÎÁ×ÌÉ×ÁÅÍ ÞÔÏ íax ×ÙÄÁ×ÁÅÍÙÊ pÁÚÍÅp ÐÁËÅÔÁ 64
0xFF /*÷pÅÍÑ ÏÐpÏÓÁ ëÏÎÅÞÎÏÊ ÔÏÞËÉ - 255ms

};


char ReportDescriptor[23] = {



0x05, 0x02, // USAGE_PAGE (Simulation Controls)
0x09, 0x00, // USAGE (Undefined)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x00, // USAGE (Undefined)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x5a, // LOGICAL_MAXIMUM (90)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x03, // REPORT_COUNT (3)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0x09, 0x00, // USAGE (Undefined)
0x91, 0x00, // OUTPUT (Data,Ary,Abs)
0xc0 // END_COLLECTION };


*/_Sergey_/*


Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required