Hidlibrary: ReadReport () рдореЗрдореЛрд░реА рд▓реАрдХ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдЕрдЧре░ 2011  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mikeobrien/HidLibrary

рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд╛рдЗрдХ, рдЗрд╕ рд╡рд┐рд╢рд╛рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдореИрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ рднрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдЗрдирдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ = рдбрд┐рд╡рд╛рдЗрд╕ред рд░реАрдб рд░рд┐рдкреЛрд░реНрдЯ ();

рдЬрд╣рд╛рдВ рдЗрдирдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ:

HidLibrary.HidReport InputReport = рдирдпрд╛ HidLibrary.HidReport(device.Capabilities.InputReportByteLength);

рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝реА рд▓реАрдХ рдореЗрдореЛрд░реА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдореИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдПрд╕рд┐рдВрдХ рдореЛрдб рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдкрдврд╝рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП 100 рдмрд╛рд░)ред рдХреБрдЫ рд╣реА рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдпрд╣ рд╕реИрдХрдбрд╝реЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рд╕реА # рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ ;(

рдЕрднрд┐рд╡рд╛рджрди!

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣рд╛рдБ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ kaczart (рдФрд░ I) рдиреЗ рджреЗрдЦрд╛:
https://github.com/macaba/HidLibrary/commit/8f1864e1351ccca4772d5bbc18a0f94d7ba07fe7

рдЙрдкрдпреЛрдЧ рдХреА рддрд░реНрдЬ рдкрд░ рд╣реИ:

device.ConnectionCheckOverride = device.IsConnected;
methodRequiringFasterUSBReadWrite();
device.ConnectionCheckOverride = false;

рдЗрд╕рдиреЗ рдореЗрд░реЗ рдмрд▓реНрдХ USB рдЯреНрд░рд╛рдВрд╕рдлрд░ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ 159 рд╕реЗрдХрдВрдб рд╕реЗ рдШрдЯрд╛рдХрд░ 47 рд╕реЗрдХрдВрдб рдХрд░ рджрд┐рдпрд╛ред

рдореИрдВ kaczart рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ IsConnected рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ HidDeviceEventMonitor рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдиреЗрдХреНрдЯреЗрдб USB рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ; рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдФрд░ рд╣рдЯрд╛рдИ рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрднреА рднреА kaczart рдХреЗ рдХреЛрдб рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ)ред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХрдЬрд╝рд╛рд░реНрдЯ,

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╡рд╣ рдХреЛрдб рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рджреЗрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ
рдХреЛрдИ рдЯреАрдПрд▓рд╕реАред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рддреБрдореНрд╣рд╛рд░рд╛ рд╕рд░реНрд╡реЛрддреНрддрдо
рд╢рд░реНрдд рдХрд╛рдВрдЯрд╛/рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╣реИред

рдПрдо

рд╕реВрд░реНрдп рдкрд░, рдЕрдЧрд╕реНрдд резрек, реирежрезрез рдкреВрд░реНрд╡рд╛рд╣реНрди резреж:рейрен, рдХрдЬрд╝рд╛рд░реНрдЯ <
рдЙрддреНрддрд░@reply.github.com>рд▓рд┐рдЦрд╛:

рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд╛рдЗрдХ, рдЗрд╕ рд╡рд┐рд╢рд╛рд▓ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдореИрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ рднрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдЗрдирдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ = рдбрд┐рд╡рд╛рдЗрд╕ред рд░реАрдб рд░рд┐рдкреЛрд░реНрдЯ ();

рдЬрд╣рд╛рдВ рдЗрдирдкреБрдЯ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ:

HidLibrary.HidReport InputReport = new
HidLibrary.HidReport(ukp.Capabilities.InputReportByteLength);

рдпрд╣ рд░рд┐рд╕рд╛рд╡ рд╕реНрдореГрддрд┐ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдореИрдВ async рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдкрдврд╝рддрд╛ рд╣реВрдВ
рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдореЛрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП 100 рдмрд╛рд░)ред рдХреБрдЫ рд╣реА рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╕реИрдХрдбрд╝реЛрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд▓реЗрддрд╛ рд╣реИред

рдореИрдВ рд╕реА # рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд ;(

рдЕрднрд┐рд╡рд╛рджрди!

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ:
https://github.com/mikeobrien/HidLibrary/issues/11

рдХрдЬрд╝рд╛рд░реНрдЯ,

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛? рдореИрдВрдиреЗ рдЕрднреА рд╡рд╣реА рдмрд╛рдд рдиреЛрдЯрд┐рд╕ рдХреА рд╣реИред
рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд╛рдЗрдХ, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдПрдВрдбрд┐рд╕рд┐рдпрд╛ рдпреВрдПрд╕рдмреА рд╕реНрдХреЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдордЬреЗрджрд╛рд░ рд╣реИред

рдЬреЙрд░реЙрдХрдлреНрд▓,

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдФрд░ рдХреЛрдИ рдХреМрд╢рд▓ рдирд╣реАрдВ рдерд╛ :(

рдЕрднрд┐рд╡рд╛рджрди

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ HidReport рдФрд░ Devicedata рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рдирд╛ рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рд╣реИ ...

рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдореИрдВрдиреЗ рдЬреЛ рдкрд╛рдпрд╛ рд╡рд╣ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВ

1) рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ IsConnected рд╡рд┐рдзрд┐ рд╣рд░ рдмрд╛рд░ EnumerateHidDevices() рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЬрдм рдореИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдмрдбрд╝рд╛ рдкреИрдХреЗрдЬ рднреЗрдЬрддрд╛ рд╣реВрдВ, рддреЛ рдкреАрд╕реА рд╣реЛрд╕реНрдЯ рдПрдЪрдЖрдИрдбреА рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реАрдорд┐рдд рд░рд┐рдВрдЧ рдмрдлрд░ рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рдкреИрдХреЗрдЯ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 32 рд░рд┐рдкреЛрд░реНрдЯ, 512 рддрдХ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ)ред
рдкреБрдирд╢реНрдЪ рдЖрдк рдЕрдкрдиреЗ рд░рд┐рдВрдЧ рдмрдлрд░ рдХреЛ 32 рд╕реЗ рдмрдврд╝рд╛рдХрд░ рдЕрдзрд┐рдХрддрдо 512 рд░рд┐рдкреЛрд░реНрдЯ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
NativeMethodsредHidD_SetNumInputBuffers((int)device.ReadHandle, 512); // рдпрд╣ XP рдФрд░ рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
2) рджреВрд╕рд░реЗ, EnumerateHidDevices() рдореЗрдВ "рдпреАрд▓реНрдб рд░рд┐рдЯрд░реНрди рдбрд┐рд╡рд╛рдЗрд╕рдкрд╛рде" рдХреЗ рдХрд╛рд░рдг рдмрдбрд╝реА рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реИ; рд▓рд╛рдЗрди ремреп рдореЗрдВ рдФрд░ NativeMethods.SetupDiDestroyDeviceInfoList(deviceInfoSet); рдХрднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди:
1) рд╣рд░ рдкрдврд╝рдиреЗ/рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП IsConnected рдХреЛ рдХреЙрд▓ рди рдХрд░реЗрдВред HidDevice рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд isConnected рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВ:
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдмреВрд▓ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ;
рд╕рдлрд▓ рдХрдиреЗрдХреНрдЯ рдХреЗ рдмрд╛рдж рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдХрдиреЗрдХреНрдЯ() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ):
device.isConnected = рд╕рдЪ;
рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ DeviceEventMonitorInserted() рдФрд░ DeviceEventMonitorRemoved() рдИрд╡реЗрдВрдЯ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдЬреИрд╕реЗ:
рдЕрдЧрд░ (рд╕рдореНрдорд┐рд▓рд┐рдд! = рд╢реВрдиреНрдп) рд╕рдореНрдорд┐рд▓рд┐рдд ();
рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
рдЕрдЧрд░ (рд╕рдореНрдорд┐рд▓рд┐рдд != рд╢реВрдиреНрдп )
{
рдЬреБрдбрд╝рд╛ рд╣реБрдЖ = рд╕рдЪ;
рдбрд╛рд▓рд╛ ();
}
рддрдерд╛:
рдЕрдЧрд░ (рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛! = рд╢реВрдиреНрдп) рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ ();
рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
рдЕрдЧрд░ (рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛! = рд╢реВрдиреНрдп)
{
рдЬреБрдбрд╝рд╛ рд╣реБрдЖ = рдЭреВрдард╛;
рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛();
}
рдЗрд╕ рдЪрд░ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд░реАрдб/рд░рд╛рдЗрдЯ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:
рдЕрдЧрд░ (рдХрдиреЗрдХреНрдЯреЗрдб рд╣реИ) рдХреЗ рдмрдЬрд╛рдп рдЕрдЧрд░ (рдХрдиреЗрдХреНрдЯреЗрдб)
рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рд╣реИ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЪрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдВрдЪреЗрдВ рдХрдиреЗрдХреНрдЯ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рд░реАрдб рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП 10-20% рдХреЗ рдмрдЬрд╛рдп 0-1% рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧред

2) HidDevice.cs рд▓рд╛рдЗрди #69 рдореЗрдВ рд╣рдЯрд╛рдПрдВ:
// рдпреАрд▓реНрдб рд░рд┐рдЯрд░реНрди рдбрд┐рд╡рд╛рдЗрд╕рдкрд╛рде;
рдпрд╣ NativeMethods рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред SetupDiDestroyDeviceInfoList(deviceInfoSet); рд╢реАрдШреНрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, NativeMethods .SetupDiDestroyDeviceInfoList(deviceInfoSet) рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реЗрдВ:
foreach (рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕рдкрд╛рде)
рдЙрдкрдЬ рд╡рд╛рдкрд╕реА рдбрд┐рд╡рд╛рдЗрд╕рдкрд╛рде;
рдпрд╣ рдмрдбрд╝реА рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдареАрдХ рдХрд░реЗрдЧрд╛ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ 1 рдПрдордмреА рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 256 рдПрдордмреА)

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣реЗрдкреНрд╕ред

рдмрдврд╝рд┐рдпрд╛, рдЖрдкрдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, kaczart !!!

рдпрд╣рд╛рдБ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ kaczart (рдФрд░ I) рдиреЗ рджреЗрдЦрд╛:
https://github.com/macaba/HidLibrary/commit/8f1864e1351ccca4772d5bbc18a0f94d7ba07fe7

рдЙрдкрдпреЛрдЧ рдХреА рддрд░реНрдЬ рдкрд░ рд╣реИ:

device.ConnectionCheckOverride = device.IsConnected;
methodRequiringFasterUSBReadWrite();
device.ConnectionCheckOverride = false;

рдЗрд╕рдиреЗ рдореЗрд░реЗ рдмрд▓реНрдХ USB рдЯреНрд░рд╛рдВрд╕рдлрд░ рдЯреЗрд╕реНрдЯ рдХреЗрд╕ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ 159 рд╕реЗрдХрдВрдб рд╕реЗ рдШрдЯрд╛рдХрд░ 47 рд╕реЗрдХрдВрдб рдХрд░ рджрд┐рдпрд╛ред

рдореИрдВ kaczart рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдирд╣реАрдВ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ IsConnected рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ HidDeviceEventMonitor рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрдиреЗрдХреНрдЯреЗрдб USB рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ; рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдФрд░ рд╣рдЯрд╛рдИ рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХрднреА рднреА kaczart рдХреЗ рдХреЛрдб рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ)ред

рдкреНрд░рддреНрдпреЗрдХ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдкреНрд░рдореБрдЦ рдкреНрд░рджрд░реНрд╢рди рдмрд╛рдзрд╛ рд╣реИред рдореЗрд░реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рейреж рдЧреБрдирд╛ рддреЗрдЬ рдерд╛ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдбрд┐рд╡рд╛рдЗрд╕ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдерд╛; рд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдк рд▓рдЧрднрдЧ 70ms рд╕реЗ рдШрдЯрдХрд░ 2ms рд╣реЛ рдЧрдпрд╛ред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рддреЗрдЬреА рд╕реЗ рдкреВрд▓рд┐рдВрдЧ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдИрдУ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ:

        [DllImport("hid.dll", SetLastError = true)]
        static internal extern bool HidD_SetOutputReport(IntPtr hidDeviceObject, byte[] lpReportBuffer, int reportBufferLength);

        [DllImport("kernel32.dll", SetLastError = true)]
        static internal extern bool ReadFile(IntPtr hFile, [Out] byte[] lpBuffer, uint nNumberOfBytesToRead, out uint lpNumberOfBytesRead, IntPtr lpOverlapped);
        public static bool FastWrite(this HidLibrary.HidDevice device, byte[] outputBuffer)
        {
            try
            {
                if (NativeMethods.HidD_SetOutputReport(device.Handle, outputBuffer, outputBuffer.Length))
                    return true;
                else
                    return false;
            }
            catch
            {
                return false;
            }
        }
        public static ReadStatus FastRead(this HidLibrary.HidDevice device, byte[] inputBuffer)
        {
            try
            {
                uint bytesRead;
                if (NativeMethods.ReadFile(device.Handle, inputBuffer, (uint)inputBuffer.Length, out bytesRead, IntPtr.Zero))
                {
                    return ReadStatus.Success;
                }
                else
                {
                    return ReadStatus.NoDataRead;
                }
            }
            catch (Exception)
            {
                return ReadStatus.ReadError;
            }
        }
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

abishekrsrikaanth picture abishekrsrikaanth  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

punker76 picture punker76  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

guevelamax15000 picture guevelamax15000  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JoergTiedemann picture JoergTiedemann  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

karoberts picture karoberts  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ