From 364a9fa7d7ab411cd0b59779c57defc77453d849 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 1 Sep 2014 23:04:15 -0700 Subject: [PATCH] Add evdev_reader JNI library --- jni/evdev_reader/Android.mk | 12 +++++ jni/evdev_reader/evdev_reader.c | 65 ++++++++++++++++++++++++++++ libs/arm64-v8a/libevdev_reader.so | Bin 0 -> 5368 bytes libs/armeabi-v7a/libevdev_reader.so | Bin 0 -> 13476 bytes libs/mips/libevdev_reader.so | Bin 0 -> 5424 bytes libs/x86/libevdev_reader.so | Bin 0 -> 5176 bytes libs/x86_64/libevdev_reader.so | Bin 0 -> 5632 bytes 7 files changed, 77 insertions(+) create mode 100644 jni/evdev_reader/Android.mk create mode 100644 jni/evdev_reader/evdev_reader.c create mode 100755 libs/arm64-v8a/libevdev_reader.so create mode 100755 libs/armeabi-v7a/libevdev_reader.so create mode 100755 libs/mips/libevdev_reader.so create mode 100755 libs/x86/libevdev_reader.so create mode 100755 libs/x86_64/libevdev_reader.so diff --git a/jni/evdev_reader/Android.mk b/jni/evdev_reader/Android.mk new file mode 100644 index 00000000..30898f5c --- /dev/null +++ b/jni/evdev_reader/Android.mk @@ -0,0 +1,12 @@ +# Android.mk for Limelight's Evdev Reader +MY_LOCAL_PATH := $(call my-dir) + +include $(call all-subdir-makefiles) + +LOCAL_PATH := $(MY_LOCAL_PATH) + +include $(CLEAR_VARS) +LOCAL_MODULE := evdev_reader +LOCAL_SRC_FILES := evdev_reader.c + +include $(BUILD_SHARED_LIBRARY) diff --git a/jni/evdev_reader/evdev_reader.c b/jni/evdev_reader/evdev_reader.c new file mode 100644 index 00000000..b26e62ec --- /dev/null +++ b/jni/evdev_reader/evdev_reader.c @@ -0,0 +1,65 @@ +#include +#include + +#include +#include +#include +#include +#include + +JNIEXPORT jint JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_open(JNIEnv *env, jobject this, jstring absolutePath) { + const char *path; + + path = (*env)->GetStringUTFChars(env, absolutePath, NULL); + + return open(path, O_RDWR); +} + +JNIEXPORT jboolean JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_grab(JNIEnv *env, jobject this, jint fd) { + return ioctl(fd, EVIOCGRAB, 1) == 0; +} + +JNIEXPORT jboolean JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_ungrab(JNIEnv *env, jobject this, jint fd) { + return ioctl(fd, EVIOCGRAB, 0) == 0; +} + +// isMouse() and friends are based on Android's EventHub.cpp + +#define test_bit(bit, array) (array[bit/8] & (1<<(bit%8))) + +JNIEXPORT jboolean JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_isMouse(JNIEnv *env, jobject this, jint fd) { + unsigned char keyBitmask[(KEY_MAX + 1) / 8]; + unsigned char relBitmask[(REL_MAX + 1) / 8]; + + ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keyBitmask)), keyBitmask); + ioctl(fd, EVIOCGBIT(EV_REL, sizeof(relBitmask)), relBitmask); + + // If this device has all required features of a mouse, it's a mouse! + return test_bit(BTN_MOUSE, keyBitmask) && + test_bit(REL_X, relBitmask) && + test_bit(REL_Y, relBitmask); +} + +JNIEXPORT jint JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_read(JNIEnv *env, jint fd, jbyteArray buffer) { + jint ret; + jbyte *data = (*env)->GetByteArrayElements(env, buffer, NULL); + if (data == NULL) { + return -1; + } + + ret = read(fd, data, sizeof(struct input_event)); + + (*env)->ReleaseByteArrayElements(env, buffer, data, 0); + + return ret; +} + +JNIEXPORT jint JNICALL +Java_com_limelight_binding_input_evdev_EvdevReader_close(JNIEnv *env, jobject this, jint fd) { + return close(fd); +} diff --git a/libs/arm64-v8a/libevdev_reader.so b/libs/arm64-v8a/libevdev_reader.so new file mode 100755 index 0000000000000000000000000000000000000000..b6a370b6f192ede5c589f622d7b4e0a973ee31ba GIT binary patch literal 5368 zcmb<-^>JfjWMqH=W`^wyU>*lV!~sGv>=1x57#J8F7%Ujr7#tV`83e#;SrJkgtQTAm zAsEd7)&U{e7#J8<@IvHQ@Pch+fYAv|5OEj{(ZRp~5(eoz0M&N@st-m#fEdF7qoLkl z2zXkO!otA7aD)?LE;?-k5oUnVAhjT&z^5fCAp1aUVlXV2f}r-{@?QkVBMb}-FdFJ? z20;b}1_=fR24)5Z24MyU29Vw2P>Z=47#Kid%>(6wC{YFm20jJ`22e1IFfcHPF)%Q| z+zyf_gxT>Z00l9~Kl}^~44`lnVqjnZ1s}+bc(lQ#m>Jk18sQ=k1~bUT0x%y##CjPR z7(nJjcnC6?5hTveum@x@)EyvM4n_uWSb^Bc_z5Eeg8%~`0|%P)!oa{_ z0M!I?1vY!H;xI=F>>j9QBH}VgTfV?y(e*)a~A6U6;Sv0K<$2yL%lZGUUmi( zXt;Gi)yqQ7k%5|{0~J4n!<_Fp!~?+QKs6&#p zEi*4MC$lP*0m4lzNv+5%Vem>UON>v>&yCN?%uUV7OwTBZPs+?o$;?ZS&&(?*Es0Mp zOGzz@cLk9_sfj76Me+Fssd?n+OD{@HV#v%-F3BNBcWEA2KN;@LEcVSWEe83!xFj(- zJ3cuhJ3hTMu_%QhJ{}>GmY7MFyNXg1Q^@g8a!!76Dnm|YQgKO2vbMHfaXyHX3#F5x zbV?405ucipSdz#PAD>iQ403W&2{JoA9?DD2O98W?bZTA-$Vf;8f}ELJ1Tu_a1GGG6 zh81Gabo7HClv5cP7+D}?AT0UpfQmD*K*~&*_yHtws1abP6G-BqG7~Jwz`$?;NgTO+ zy@4bSDi2}mA0UZ?%3zrI3nXz^xeb#8(I2Y!ubjZZFhTH^`%i&Gb`uqtLKizQ&$UP!jjtm=$9yK#eT>1b1^oQDxmI@3E zLJJuf%pNp5STe9M2+8v>6oTAW{LlU8BX@_NiA)YZ;~5xVFJxc{`5f%9@*lUu&;QO$ z6G84?@c;kx|A!eag52;mnsMbnVTPaIn3-06WoFa@g%c=@9x{uq`ohexD)|8F*z%B>VHFc|!=(qzqFR&w|DXPqnPF86lf%yk%p$8mdLA(guVQ9s2x?(){@K7_ ze+{G#WdGM_$Cdwt9e(~l%m8)+14Dz*umAtWL1EqV|Gzk+G_$n@w5<^F@BjZ01_p+f zfB*lNFfcG|`S<_-6b1%{C;$Hc-@?GaQ1Ji%|2qr}3_t$=|Ifq7zyNA9fYK#nRS*MH zjU1yik35LWAj7}_#()0){|~MsocILX=COF(a{;wBAabC#634&)|G{Ov6Q6(=NZtt{ z9|LO3;E-2gU|^_WU|`Vr_y0e*E_33W!00wvWr~u^JcS~zE0>+_Iq@+#af9q$!oa}L z^Y8zEa2@8vXW%xOXA0L;j%jT3SPDQYuU&;IW`OwT3e>;I`5x@4QDQU%hFJ(eYDETy zIZy_aVps`fKq-cePzID@*a>Aoaw`MFA1EKxE=3L^Nhk-_FO!DyVR=gm%7@k4pmGBw z1TzO#jZc7@59+^w({{Q-~&*LVB!;?e3(DLWf-)712PI`AB+Zxf$;DD|MNjK)H@76(fA-adf)=6 zM@Xe%{bY1Ex;r~tDQLL+g=#98=vgWl85o)vm>QZWXcQEs7NzE-CKjh^GBD^BXB3wd zl_VxH=w&1pXE5lcROS^|=0fO_A_l#p)SN_+Ae2>*Q^KHEl3G#1pqH8vpH`HZn;M^y zQiR|!=w;?*mc%C(6(v?O=%r=mWy07gm3fJ|naK=#>G>rLdf+CeUUGhJZfYK=T0?g} z$$U_{0;NT0GGlDseor+0-~kknLTCZ>0>nnbP-nqKf}!Ispg05x!pcY3cn`XIH19CPGcYiK##LbY zVddurXeR>}P9U>E7~Q;VXnPN)AC|9S<6^M!FPJ<`Kg?WECIYz$CJ!r57l0haz`&3I zvJ?r!^uy>%X!ybOGr-1MpccT?!HhuX*F*J#(h*Dzh~|LmR|Rp9FvzVSE;0?b8zce6 Tx={V#wjxvvM8Wid*dPo5S;?&= literal 0 HcmV?d00001 diff --git a/libs/armeabi-v7a/libevdev_reader.so b/libs/armeabi-v7a/libevdev_reader.so new file mode 100755 index 0000000000000000000000000000000000000000..7498feedef944f874e85c04571befa109d33ee23 GIT binary patch literal 13476 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

hrryY*&uf^L_OwOut1n|!2)K6fPhB=3%Z0I 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 Ru|ar|0RzJh5Ce)~>HyBzFVg@3 literal 0 HcmV?d00001 diff --git a/libs/mips/libevdev_reader.so b/libs/mips/libevdev_reader.so new file mode 100755 index 0000000000000000000000000000000000000000..a5c4d5f509b45062aef06043ab31a7692c1ee3ce GIT binary patch literal 5424 zcmb<-^>JflWMqH=W(E!h5bpph1A_?z1A~PS0|UDNLx2f`0s{ww27@qz5J+i(2_pjo z3`;ODFn}-%0|NsHgY<(G!Eg&F0|N-Nf(01C=HKCCV7SA_2*weN3=AO529;-GU|@K` z2f~aDFZdW4Bp4aMm>p_- zRZx0>tLI~w!@$7M!N$PgzyJy?Hij!`@+%k_7-04ZFt9P~MU%hAz`$^Vje(&7s{a9+ zydWb3g9keU!v?6l8pz>n3=AGn{x&rA=h66a3=9k&NbWm{CSSwIz>olnG_ZLL43P{B z3;{@dNd^W62PD1=BLjm05+4*73P}8Ep!h}NGsLGC#HVBy7cj)fCs!oKr)B0P=44i- zLb-`0sTG+e3|@(4iSfz#x$!xfxv4ps=@}*QNtt;mnR)5)nRx}JCGn|cDXC@gt{^ff zH8CZ%C_cX+HIE#9=|zc244L`KB{}5iF3kh$C&Rs&#lHEa#i`_2T9lfYLXN)Voc!Wc zhMdf#;*ykPZEd~cd=MuWN+(0Pe<(038i2}yJ^eBa`}-9dX7(#8I503Vu&RLUQ()Mu z4l-v)C&V2fa|{}0_Ompw+9)a*`MG5u^(i23&Z~P4GbIBE4nUKQEWKC0CI-}!!nS6`+CV0ge3*`qjN0RzY{iW&(_AonPC zG%zSOI53DYI0y(Z?CIBlgfo+(h6C8W0t{>_3=GPBiW3|d7?>-26crShKzbDo7$EvB z7#I`<9GG+%_V;TrZ0=WK*wnAUu(4kT>P`cOz3M;yGYI_u&!hs1FAk`CWngJS;Q)gG z$j*uf%pmuOGf1c)^Tp8kqG)^(G`=tzUx-0M1(NCzB%?I5wFR_}YWVyAe*mc5|NH-c z4yexj_y2zfsGR=y|Njz@_`m=Ek1#MWRQ&({{{yHzg&MGFMUP#$7n*ulWS(D3j7e~>$&UKpiDLtr!nMnhmU1gIPWus#N;=hDQ; z0Pe^1L+R;IdOjnhzxIL=Qa*#60BYZZ`lr&+KBp7|0|ThN2C54{&3I5h&4&@v$E#q5 z^s#<0Li%9886o{KP=5~8z7r6D^bJc`L46@ep9$3W1DV6fz)%2k8!H1t0jPh+#=uYj zvY(5Ap#Y>;kb$89R8I&oFcg5?B+S520P0hM#6aqP|Noy4(hp*jg`s^mG`$TB0*v7P z52()r>gRy^HlY5D00#quyR);Ef`+?asHTF6o|%G?fuWIsp@Er#MnO?(QEEz=)Fy$s57Y-`VBklQH$bu<)JKN73z>%LcLa6()ALFh7(qRH z7DfiW;*8>wqLRcU2EC%x^vt}pduhIT~Y*+&H;%r=z)7EdcK|k z!Ft6drAfsMdZ`)lX+?>-sqq;pMF<{)US?iqNqk~aQDP;7URq{eCXAg@nU|QGnarRE z?%wF7=a(?(CFkenrskC}=oNs>NY5+PODriV%1kOPNi9b934S(cTmqD)L1`O#ya=WX zl#f7Z88n6gifWKLP`(1;H4F@p{t+|}g4BZYA;?USI#7NC;RZ&?xD!YWqz07ll%RS+ zVxas9!k~N!vlo_Uw4h@!Aa$Vp3Bn-vfbt$lEyz4jJ~d{5lpUb46i}H0!T}&nAVo-R zQA;Fspu7UY;0z5_2Qm-DbcLz|8G$^G1(E|{n7Uvjb$d7%7(n<0NC6bX)Wt%_oIvgd zm0O_kEtnigDU6-Tz`y`Xav*h}^6UX0WNZqg283biN}+9Xko!PmaG>!x&^R1S9z=t} zr4H&oka?go12l*Q3V)DUAPi%-Ak+zf%0mGG1_tEL07xCk%uc8}P#yy5HxXc9@B%TQ z7!+?HJPE1}D$LLTG5{n26#$t9VoqmZVEFp~e?Eu}!VQ9mG9JW-X#vq-KY#=o7#Jo9 PGB7NMvOyF`9z+8GRI{l< literal 0 HcmV?d00001 diff --git a/libs/x86/libevdev_reader.so b/libs/x86/libevdev_reader.so new file mode 100755 index 0000000000000000000000000000000000000000..bac220ce15755211681f8873d4f7555c02f87a60 GIT binary patch literal 5176 zcmb<-^>JflWMqH=W(H;k7|(=(fk8qLB4fg!z`)L+!63pQ%)rLLzyOki;Rg&13?R(H zz`y{)F#Qmn3=9*vAea>-Aiw}N{{kNa!v#4AHeqC70AY~13<3-cObiSRcla0>?#My# z4+aJX5C+ME%nx{4lA^=KzyQN33=9k)43Y!kz^5f3F32_%4AKu02zpwQf^5G5BLf2n zgXBT_L28gOvVVja7(h;hON02ba2^8#h_A=Mz~I2fz~IUN;F6^Zd_nR$shnN_J!ZemGlMP>;@e0*_9VsdtT zaz=K1T4H7ngI8i%VtjIbZhTH=ZfZ_udPYfnQf6LCW?p)HW?n&QNqlNqN@`iWD~JqA zO-xBGiq9`d&0_!)WN1z=N=#zN%ug;M%j(iRuzoV^%`EoKFD(Xz1|k5`OB0Jy$O(a> z)Wj49FhPb(l5_HlQyCy+d}>N!Ng_jhd{S{SC}xUE7~)g&QW$bFlZs1HlC`z+CrAv2Vab>ilwaf+7(n(gC_v~d@(c`YTnr3P z(GygY(Z2!L)Y&HV} z!~ew~pJjlY@bba`|Ns9l7GPjt$N)*dya48lfcPN6mj}Rn2@oGdyxaih%YgWx-1c$- zm=9uRXfQA^yqo~$tAOMUK>UXP|NjTSXk}nvXgq8r#lX;;qVl4*8Kkt6Mdih$|NsB@ zrl?3n9|k!FhJ#;(g4Hvjs&`T0=yp+2IPRhX@(u$?zY$!2?>3O`-u)ml_=PA~{~<}R zeLr4ELzHnuAD#dO-7+c&D}!G={r~@e*t6 z5enANgr*7v5Y?V@4=QUXehpfH>8 z_y7NHvCgC2E-DtsT~t5`nW3{rg#+SHmj9DLIkfXdZ;FacbX_Z`T7mW z7BCKe@%1mrF^j~(=>rts8X&V>{vslC0!Skm?@ipJ=#^^0$fD5Kg0Oc5vI>xFX z2F4l=Mrj@vmJUV+22f4`;Xi-={|Ds?21h=QW+s0=g&;l-M?RLrAUPXQS@ZY*e^6Tl zE}w*uk6~b7(E0oSzck1KsD1%Yh&(7!}<|DgICE}x2!zreu2P=P~Uhk=3N0|NuY3{ZGM-PFe9$j8&n z9K<()k*Sc2kH_&aABW>HJ{CuA1_qG-6c`y8e*FFaA5_1C>}v(7Z)bMo6KG>`FnIj?{~uKUgY<*LFaY9SP`EZQ zGB8N|{{O!L?*h{Q_y7Nr|NsB9{QLiZ%YSf^2U#_WM?+vV1V%%E%g@FN7-+CYZvgwPkE^i3%JkdXo0Hh#s(z#s)}r-JGb zP_syqfq~(M90LQWZUQySKz4wfF2?||N~^qn6WZ2xUn)Ygt0O( zq_HwEl(8}}w6QWUOaplc)ckaJcD7Q`aQ6$UQDg~HWMW`yXo9K;-2Vr)$3gya_X}l6&(BFwFw`?N1UW{pIHS0vs3b9oK`*5; zuedT7LYEXV=w&1pXE5j$rRIQSAdG^X5(d4J)QS=Yz0{2Ow4%h^R0JzNBc+HzFD)}K zGd{7XD6x`3FEcN*1jbIO%uCG8OlHta&o2QJdSJuAT_L@s;$jB9N!y?_48ou^3^NC$ z29(CMkkmb3VPF7ZP+kD31Ep`6I?$K}OiY25fdPcU?E#Rb(Eb}ptufRsAibcx2EtE3 zjzv-jVp>AgfuveE7#Ki!1;_%BBy^kz#B@edhdiDGk^^Coogg|8+SdeyA$Z(~50Y0w zav%&-7s~+2Zy)!Cc)&8)wMy( zB9J=J*bECO5rGsyF-%W4)Lu}B5hMjt=M7>&F~}|u2BjfTe;q2!5Fh|)>%#aj^FV4r ScEZGS1Q-}r!#Gg8KwJQ{BWm;j literal 0 HcmV?d00001 diff --git a/libs/x86_64/libevdev_reader.so b/libs/x86_64/libevdev_reader.so new file mode 100755 index 0000000000000000000000000000000000000000..e1f5cdd1cc1808ceb6535fa7004a8784363ebe82 GIT binary patch literal 5632 zcmb<-^>JfjWMqH=W(GS31doBi0VW{`V}Qgg7}yyc7(^I^8Q2&Y7+4rUVi0+ldKldS zH4H{`K$L;)V1=@=Q8&0CqA;340Kx|u2eNYoFND8B7L`t5g79H9Odm)Xq;CgQ-wvog z82tfcFarYvjE1>0;Au$;$bT(R_n^}u5bGFVG)OH-DDY`X3dlYXn-m-b)rZS}5g?B+ zFfhPqm^*RV0rHj*7D-TWViN}iix2}l!vc1QCUpqK5X!*7fK7cASe%{V0#v;+RQ)8d zIFy4#%>awDGcZ6Mt^k$01Ql0+ikCpec^MfPkdhu$lz~B>5xaW~z~bx-3!vttLv>_; z#i1M|DiG7F)1*IkNsbwjt zW$~^cGAK1MCABC%zaTY_0ZfpgIlU+`i6JvTxg>`it4s61`pK|2v)DJkv>4?1;*!MV z?D*u2?D+K3#G(|2_;`d!T4E+y?kY-6Okn^MWH>E3C%-tA0Yb*7rX-dmGQ`Ix6&Hit zRaC+dpPHA#kdv8IT#}Nkt*uv_58~uP>0~IKk^^Nxq6_4d)FO}&10+p@@)M|x;D@Fm zJ}3>MK*^B@#DHQ@x&-A}P%#9`58Mn44A7zsssfdQ78BsInHfn6z03ub4H7zlqr5=RcdA4uZJ;r!oplLQ09f7LA#3=9({OqlRr6~xZ~ z8TInP|NsC0tFDq@U;vdK3@ zg8k(LFuw`J2YKaX!~g&PJ$h{`B^Vf9PWk`;Kgd##UeQbm1_r}#h6i32faOzEet2|V z^XO(by!3y92P*@^K9J=ey(uaj9-YSx54_BTY6WR$0Ez$Tyl!}47btZ1O>kv#coFgc z|Nqtl{8J8qBsmU))xijm5Lmt8C5U2eRK>xam-i{UCNzN5HFVzh=w>YvXJGK?4N(#B z=w|TfbWy1=Jn-V%zyJRY4|sGw+Nb2o)X;hV#nXTP|MPEiQ88+Mz*xe=zl}wu`2n*H zGsq3yq6Q!nx_wkCJi3KEEH9RFdGsz(X<%Srh(7#c&p${wz})8;>e+eK@RDPQW9Jv2 z&Uc}~9-Y5IZu#NS&HjJF0agYEkJbYookvT|Tsoicl3-w9@aR1DqV3=R|DK&k3{QG= zGkbKt^67l%(Ru&>1W+n<>3jgv&k-H#7~>dwcn2s>UcZG|$IyBGWhBV$@(v7X{PHbe z@wBwGG(98^f(;X7U=RVTWME*d3SwZa5MY$%Vdt2@2oaZIU|^8=_y0d~dIYIAVPIeo z`1k)mC|^UhgU#__U|`_*_y0e*?ser8h~VP@i>EL!Fev={{~uh(y7CFcLd9zs7#J-6 z{r?ZnlCFFLQG6T>Dhvz^Q$X#qfB*l3>rzKPfo3Kjz6p#>30!;vj(i-Bpdy69hJk@$ z4+8_kjDP?CgX>BsK7n2)cRq<8W_Lb?HWo)djb>I4J_9BPEIs#PFFhI&7kPs}7!e{}gJgi>#04ZW%U;yPs5EE3Qg6NI0FN`Jp(F(K|-)HSQ5lxU|`q+>hLfyFi1oB zFn1xB$sj2?5W&E}0Q1LhXm~)agUZsLg7sI?Z4!eb@6 z7#JAbot>=|G~E3{H5E+sEES9l3{4D74NVj@3W`#TQgc!hi&HhBeSJ{c0ELsgUnoO* zeol&lp`M{3$U%C=8O0?8Xh3SWt2QV5|9-!-oxnCPiKdiig(XjFeq#smf!0d!D55d&K!X3sBW?*0d_5VO=03-(Mf5FCoVC5A^4usL| zk7r_>k9EJ^`_QUEem^ilh Wgt;B221NTn^{)kSkTA?%m=FN!-qfc6 literal 0 HcmV?d00001