From 23c43b0e84744c5c867dd47b63e4a8b9e8c0c592 Mon Sep 17 00:00:00 2001 From: Alan Ott Date: Sat, 10 Jul 2010 22:01:43 -0400 Subject: [PATCH 1/2] Added some checking. --- hidapi/hid.cpp | 9 +++++++++ hidapi/objfre_wxp_x86/i386/hidapi.dll | Bin 11264 -> 11776 bytes hidapi/objfre_wxp_x86/i386/hidapi.lib | Bin 4968 -> 4968 bytes hidtest/Debug/hidtest.exe | Bin 30720 -> 30720 bytes hidtest/hidtest.cpp | 19 ++++++++++--------- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/hidapi/hid.cpp b/hidapi/hid.cpp index a7139ff..792be75 100644 --- a/hidapi/hid.cpp +++ b/hidapi/hid.cpp @@ -426,6 +426,15 @@ int HID_API_EXPORT hid_read(int device, unsigned char *data, size_t length) // we are in non-blocking mode. Get the number of bytes read. The actual // data has been copied to the data[] array which was passed to ReadFile(). res = GetOverlappedResult(dev->device_handle, &ol, &bytes_read, TRUE/*wait*/); + + if (bytes_read > 0 && data[0] == 0x0) { + /* If report numbers aren't being used, but Windows sticks a report + number (0x0) on the beginning of the report anyway. To make this + work like the other platforms, and to make it work more like the + HID spec, we'll skip over this byte. */ + bytes_read--; + memmove(data, data+1, bytes_read); + } end_of_function: if (!res) { diff --git a/hidapi/objfre_wxp_x86/i386/hidapi.dll b/hidapi/objfre_wxp_x86/i386/hidapi.dll index eef8adbb16ceaea652296a901aff6c3bea7e35bb..8b1e9465c0a2a61cafbca1f02eb3f54cb2cfd503 100644 GIT binary patch delta 2031 zcmc(fc}x^n7{I@`EV2tMEXQ&!$8spBfUx^!W?_cQig*$%%8>wyl>`+^wJar8f>o^D zA_nuYwZ@~h#!#c}>S9W0LpFsbXwj&lv9*^qT0x1`2JL!f`YkMt@z4I#m;By$&U|m) zoA+%i+g8!(jEguYECctr4vJVGq6RRaBXG)@7{ek+sv>F^TSB7MX~_Ur2|yRyMB>$L zs9o0rMDC5%>uLi4a;Kh|nla$OKwxTPO>-l$-1qWBo0_YWL+6*S+_g@ z8r7w;ZY5fG*Jf0yED6PE=Av0@&DTx^GAgx=8hlBDu#Ypw+!9w z&WuV`lfFIQ*BoXEmY1t!i>hN0Sy3eGj$wGmps)DU;y+rzKJsbw-sK0-=CEi+&#_Qn z(Wh|QY(Gp4`!q4$PG9!}ajajnifCA{ zU$rJ4_uQKQtO|ExbcAj9n@KjZZogbS!ZE)SnnPXycQa});reQa*vI}+K7%gRfzxOu z8}d&g1MGo+E|Hm0n}R2@Mk~y4&cfgcc1Sxy&a=${1!TLuFCc-CQ|!0ExReWcYbwXA z&t-YoHAIan4YU@IZve&?c>+v2|DBj2C<=e0?4S?uANxLN8#!Vx2`*8PW_Bv1lU!rj zp|6wq_EVvohynuahHx9H4vm?-y^t7%2Z`YE!+Ml0Zv7-mhg*Mu(ldH0$AFT$^;Ia> zyY&MoKX>cDqkPEH_4-%m#e?=0r1OPq6M@%jKh|?5x@u01Vb`@o-_{rM3h`>Tp)c$O zpCOqY)<^u`?IUw?(f_G^u=+?rJ+7>;sjqKnsndi|8Fx@%sVSBg6!(Zn#4p8R@v?YT{8O9|LDEVgQj|ocOsPOBmFlD>X|MF5bXfXKvP%F<4^OY2Uzr4OYqF^(Ib7%NP*rWVry)41t@ zNkh|UYZhHhSI}}=L*JrpbT>UtPtr5Am-f>^`W?MOf27yxZF-MBq|d1*r{Ti6I4+S( z;RG(1TgsJlRoptRfotOC@n-%Y-_7^%4t|*bfxpS$$DIfhB5^m8gfxK)l8`Gb5|#-o Yg)(7{uuiDM{n_mybPD!&61OV<0cLj>0RR91 delta 2008 zcmc(gdr(wW9LLXDdF%oUcacS20s_7e6!yM$xmQ>Va5PF%6l^4M5{JwT9Vk)Cx#5g`kGn{~Hb!I;2_xpW+=iKwS z_nhmP}kQxYyg%H{=-j8KbbgVAq5t~e74Ohny@+~E#fGwhl z1_!+J93e3qhDDo;OoZ6I59%{W97ZB^Y(?pk3MiiqMFo+>vK~5SbV6UFe=9p7tz#FL zE_m%FLaaWJArL<>!u6bPKdosWMM&^yLQ=p}pa9GRUC=!x3Ns_1JDHHn;2dZHyFoJa zdf264At(ZqfeKPU6bJ@(w3`9SK`m$m2f&tOQqwocR~XO@c7b}}DMvAZ{a`0(0_#CN zSPm+{ljWzVzD?+p2R2`a=vlBGd$`@Vzek#ta1P+-aMU|iuwdUNU6+aN@r|OR*-2l; zwLUk|K~E&#@+4_9d!V<_11#B4K)13Q!%%v_^`2oqt=WN@zS0`j z&>YVbj@N9NA+>8E6{2WnE5=*h-jH)UzadATuT^r+s@qy+kh7{wd)>!b)$J_q)y&J$ zNNKAK*UUxm#@`r(Ju^(x%ms)#?6zusWl|wRJHlzs9IiiMtKuq*cu1mV&PIZ7?TDLC zJ%e}#gRYtLAmgzi?w8r=z>0u3gYiCFD~;|BHYrF6v=4;4{$wS_XtpP4ZeYF9+a$)L zsR8^z{0*CJ93S8_5UxcyjI|l#0)7qh_Q+;k#_4n%%MG4m%)ypAb9!IILfwC`1Hr>- zG5bE)jyDt?vPWF!Pe_NY>EnRTrpbxYxuwR)NyM&+Ku zdO}9ggDjD=)8E)!E)_3gBPaW{j6iY=`mP%?==JZw>b!juVP&sh2D{wr ze+qkoEsBnwdN+Y^gAxgs|JcDf1HTdXM$5?lgW;*GJ%7&2h0aczzVP# zeC#?Kzmo1x^6{x@$DB^3b)|Kuy`A2e9&1Ulh?c3Ab_?ZAyu{b?oA_J&I3ZW46%Go& z2%%!6I8iJX*NA7uOJaw3PwWx>r3lF;O_7#KJEV`K3lfpTWSji7{JdNu&zG0T>*V9| zMY%`LvaYmlux_<}X*JpkZ138x+d6ITnv6Rc_c9`tVaiA)Rhg#DQeIW+lqO}H^1gCJ zIj)>jt|-@)4n?QxRkJ!=%}}$|*=nh}Kz&19p}wOwtB2If>NPbmb5-WX%$u2^S>v-N zWs!LNL9nptX=Ul<>8sKMEPE}7EHV5jemwsIzn9;~pXIywN4!C(F$s~va6uNbg*;)N zus~QWED@@)+SS5FVY9GZ_(1psD?cKf6wV6Y2|o)rg-+ptK*T`oM68%3juR#EuJ}-# zC6!4Pl0#Y}HA*|BX6d}tF8v@~m)ug9)GhU5SM+iab|ylOmy_faIZe)!^JU`NIC`NE IE7zI+0o`c~SO5S3 diff --git a/hidapi/objfre_wxp_x86/i386/hidapi.lib b/hidapi/objfre_wxp_x86/i386/hidapi.lib index 7473cdae8a72b13107e3548d8ad6b46273746db9..022c79671eef664563ad8c299bc9675abeb44e05 100644 GIT binary patch delta 491 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 #else #include @@ -28,7 +28,7 @@ int main(int argc, char* argv[]) { int res; - unsigned char buf[65]; + unsigned char buf[256]; #define MAX_STR 255 wchar_t wstr[MAX_STR]; int handle; @@ -121,17 +121,18 @@ int main(int argc, char* argv[]) res = hid_get_feature_report(handle, buf, sizeof(buf)); if (res < 0) { printf("Unable to get a feature report.\n"); + printf("%s", hid_error(handle)); + } + else { + // Print out the returned buffer. + printf("Feature Report\n "); + for (i = 0; i < 17; i++) + printf("%02hhx ", buf[i]); + printf("\n"); } - // Print out the returned buffer. - printf("Feature Report\n "); - for (i = 0; i < 17; i++) - printf("%02hhx ", buf[i]); - printf("\n"); - memset(buf,0,sizeof(buf)); - // Toggle LED (cmd 0x80). The first byte is the report number (0x1). buf[0] = 0x1; buf[1] = 0x80; From d9b62de1cb8611f75401fcb97187b9a3bf683ee6 Mon Sep 17 00:00:00 2001 From: Alan Ott Date: Sat, 10 Jul 2010 22:03:26 -0400 Subject: [PATCH 2/2] Updated test program to match sources. --- hidtest/Debug/hidtest.exe | Bin 30720 -> 30720 bytes hidtest/Release/hidtest.exe | Bin 8704 -> 8704 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/hidtest/Debug/hidtest.exe b/hidtest/Debug/hidtest.exe index 9a7fd9a71145daa6dca9fcd1a3d78fbcc465aa2d..6e7be14d46d52189ee995085c52d9d26eb8cd202 100644 GIT binary patch delta 5115 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 delta 5188 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 PUG^G#o!wjH-Y@$<*z3gz diff --git a/hidtest/Release/hidtest.exe b/hidtest/Release/hidtest.exe index e3d2dd838a8e0a80762c1270d029b58ee9cf0359..0a19a6775ac350683ad2dc79f92793a6a347ba0f 100644 GIT binary patch delta 2692 zcmbtVeNa@_6~Av?VObYN*(Hm7xX9z9cCByszAyGgvy(1X36rdd8=0y|!s2s-h5*Z? z6L6OS90+U&=2|C{I1Y@&NgL7{X$*0uhEZZ#OPeMgqcd@A(y`_>Kx$hg8HeQcyvM$b z`6K@{cjkBAJs-bw?>YA@!~^lbpt9_t;h6~BBD4v=ppHL;H+ZJLqwNbanJ58Nbfq5B1BZ%=MJk{4t zBhYq*9*>|1QU+n)zd1k(&AVbvu$K{}Oa$nR2ns57D-i0MvO(ZO@^v#pmjkqu0+HRR zm^9vn&vBg+n1PNuOf-Jx5rAQ++W2T;Q?I#;Wq*htiC++t^9Ko8s@j~Um9P$A_Dh>omI zRMYmVkaBBD3DEZ7xGB^d+e7C?Xlxf{m-Zf?E`f7Fi zXL7soEZ;hH`_idKF>updZ8Y-Y%2x+(nPrLX$-#t@cZ8H*Cr^ml*d$hr=-2VSXW?cHdq+jVF~|z)lV| z*^s)Ank9Xy3{^?ar{<(=qy0#s$w#UAR4KWa8l=X^BNmo=hQuw-OgE$}%j?E|)S4}8 zAElSPYRS&o5B5Gv<#OQ%s&Xz}IzcKg-y?ssIH*13u4Pj}wa#Y29!*glLD1eUU;J8C z)e%OEMaxNf+EcM^ut!wY5r=P0&8c=cSzZ`e|jVA`z)&CSzVKLZA8=*bgBt7 z<#7{2%IolB@7ipKya;++l%w&RAgD%Z)IAyCQKM;z2O{xwT_=2i~ChUsMRac?ecyjMWGm^(2(3n~h z$Um(XZG&CJF3Vbv8%zj#rB&9?4TD|%u%@s4R@awm)TTzEz7t@pnK=-#D96dA6&tNu zKOiQk)R22CHm2nQ{Sr9y2xD`lh>-DuNZM_=)_yfK;n!3@sQK32K%3SVIca+_r58N% zRk9`h?8l z4j2WT2i$<9H{ts^U=gqq61xCApaM`0cmfasv;vL-h5_2TQG`$mLh6Jw;%1-xucwo9G%U$clZ> zC;z@Lj{lD*Cs|p0))km{HipAZ=#lcON6Ra*_eb@OjR-xpyya&tt>Hsx{JE?*sd1mv zOp(g$-;y(?rn76!DY16=)11nzXC7v@Gu2Ej)4=?O`GQIFu%4}+XFLO*w>;CHEN`WE zulJz$Id8xBviF*I(VL1(Fo!Gf0o;Z=a2Gy}$M9J^fiK`GdToqT#g}K9Ag8Kz`k{jj5xC!nGca{5yqxlWImoMYD@BzMpui|&}wR{8L#vkFk z`9c0A{w@A({vH00{QLYh{wDtqewP0)e~+gGi;y8W1()C!Vw~U;{6dAWQ`jd&gr|j= z&@DVK3<{@(*MtROQAiQfMW>iAdc~iJRboVpiwW_H_?~!2yerzvCdz(S_Fmas8Rbj$ zHTl|n9ljTRpZaEf9;sTYlMYEysYB|MUX$LCCZ)^LwDf^=UAigVl0K8}NZJIta$pi? cnJ<||#_eG|H}J=J54)d@vnSYL76!lmf6Ocy^#A|> delta 2679 zcmdT_eQZ7>4!(}_{$dgYKn#Mk|Y}+ zxIgFV6vq#zPCeBf(&qm``Uh@8Pt>J3Y2___C+d=PVx@fIF4KCa#E7d#igWZbimY*M zRlZ1Zl@xaX)JoaNh=h3L=bWfN?D3fpCaVTU8yCV8#qibmcAV+u}bnm z){&muiHZ=gQZIr-ki0JC3Vf1E?;Lt{B*l#>e}Yz$$L=ajsgr1VbzZkJ0uQh<EnF*GWOA>MIKuF5fy zoSVDqU#f~8j<}%*_{2kYc0@LbacOCYjNUb-ziqx9B@r-wiiw8#2;@owCV5i1KR`+EZ#n zT!Q|*nXmC>IMpdlx+N19wau(0YSh$pd_vg^%iq~smXG{p+A-sx6v8H#Xsxk3uEHZNvEvLRWWv2O2xbO0DZG+I_%BQmR?Py3U*p`UH$Q z?4;F^egYBCpJ3Bij%mv=EDO`sA_*k6GUJW(1!(13c0S|ul6oyr(N@T*DX3mqvXg6P z%90t{r5pC?a=$JQ=yFh(M|62im!rB&IKph$Fwj|8Oo(eOAxnS-tQFv6;2dxS=mMI7 z%|H>-VC)+qOJWu?nY%Jf(}5xW^~Pl50}dG0>(i&0l2S$j`?g!L_7y%q&Dg3=B& z{#Pys@!V4yySV&GmYKDW9m$Gt$Jn*30xpl;&Z78%zB6i>$M$gAf-Ov}Y@2NrSHik& z1&_U#7bc$oHuNerny?;o;2q%4IyHU@ogcc!dvs;!Cvglpv;R+DQ@#0k+K*dWckWI! zopENr!!33itDCoPZ#naMP8yf7vApW3@+kFwzp=TQuq(O0J)Lh%?`-D?S?qqm{h0d+ zca8g5ca!^9?$hoGx8nZBUFdn(BYC!a4tNfGW<7TADzDG`xOca=(>v;&^j`K}^?u_` zrzO-&{j`im=#x~UF`*zvQp;U-MZ)f#4Dz61+m0APLV1 z+k}(Cm~d9OAWRB>6sCn4;jhA%!dJpA!6;h9Y|$w`Dwc~I#Y%CL*dR8FyTn%UCt{b_ zC;m+Qxp-7OE}jPy|!F|hJ;&FQ-d<9NC&Cl~zAydF_ Gn*47Krw=3m