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 zcmeHLU2GIp6u!HIP-%gs{0e9nf(f*`DW(`uBik*sNYr3~gaqR--5uIZx7#{9B@{`h zz(XG}X$A4cASw@SV@x$9Vq#(gJZPecAT-7p(iTLb2^yiu`qTA0Gv~lKb`_iWVmQg2 zbI<>|XYSA3*}dk;>R=$C1T^)&a;O5A6J^2ikZ33sRV&m)Jg2LWqkGpa(O-I(C%Y`c z%JuF%CqmRc#g%tYadQy7HR$pMiyg7auAlAt*-r2v4@EE!L#_YDPE3H^sk>dje*Bor zR)R^F;2GFayxRpSQ!U5KH@?k0KEd(^rX$c?G!1PA8pWQ2Mo@@GwJsupVHWUIG%E8< zwApBqJG%b}lm147N=)OKhDLQPMx*jkj<*Avf_HfV9s`Xs4#|jJ!An5o-w$!96~oVm z{NBV}0r+F(aS{9w{1^EAAAn=>vx6O!b0ErMthnd$_?ZX(So#<8=s%Z7pXxf6pHK4m z`Hb`L=KS|_{y*f=FLUBfQWadc4%WYy{VZTV4>12k9zQ?l;jef6u(1bia`=R=23xO7rW46@y`D_B zwA#A4Jz;Lw*U+=pG!mwzH@BGS@z~W{Mx9DF$L-X3tXtEL{W$VXW}a$p&Cs|rwh?dC z;|+~^eXC(5{>0g4B*&GPg`$jSJn>XBa!MuZGIkXUa?`oIYb9a_PQ6O4GE+nd;;HT$4?V=h2O6m_UF4_}=s8IP-(x)1E2N z@8PoxNA$6W&qtHP|J=j(?yp~Z_MMn6?7e4CgRH}3OS2fwt ziO0Lb!IFWJuy#(GBRdb-uq$)uVbH-vXe+N3|p|60h^Uyzm-s7RKgMQPc z+fj0))paSCo3jV~fNDPz1APT_u1cLA(t^D~@J2P2)l@VaKN`z!RjUR@wP?0dwbw$Y z>s!_hyw_1Xs0B-3RNdAh$jIi?T<+BpRnj;(=kUqj91N-5cXx0cuv$_g=51oxyH$;0z3n}lQllKw$ z$emQDDTk3Qfu7MBDtjF@8qor!R41y@kT$#bnx=Z=gKn*^qL1&GV?)3}t^LfPHmmey z_!$Ac53!JAFWC%hGkP`DVV|nXwxhu@ ziS(_oc{G>X2)qy220jLS5cneSG2oV5F84L?4d5ayshQ{#1a{V{;I8`u^NUIxdI6r) ze)~O_bIyp^)KK-|32V=Q>>6;A4S^_y$)c+DX%_Iba3)31&1acp3p*?1Ls&7Vj9m` zG#amW-Gg-p?o{A^R{<9!aAGti<0?|$3~T2T zGlHu?lbN>txsQjIyEIQTCG%78+w4^2GEZba)7_JNh+O8cAJcrLCiXI)Xk8Is>}5R& zmiZ4A2YC4isTQI~xrn{YXTdU`MedJZ=ChaeA-J0(kv%OHzdiYdeZTz^K6~c}3MtF~Dlud%;}`Y@bZGCC{Ydsl z`QPK$_YFtsu%-VhVlVq=A73)0PEc{c@2?SDs=e6Dx|aW9^8ZWZVlRGa5m8Pem;Lkz zB?Z{(Ja0Y3UT_;kUi+K>b2xzLi3dNuo9)X*fpG!b-|yo~{k&Lm_o_a~_8nd(`eG;S FKLAd 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 zcmeHOe{@v!mH)n(Nf?G;9wby86(51xSS7p&YP3`*fC0O(j)`DuZD)pLBw6!gIvFtR zy36DTXsOX4=(4scPs{0|VjZmRx~}xZYP+`E?!lw>cwEnR<~^Q-V9T)mVUD%Vem-yB zi;omeyPVzsc*mRjz2EQs-tYb1d%yR4-}u;i#lh6kCqZ(pL}Mc1+^z1(ia0BI}bVl&xU2!O^%Wl;&wnjC@>;K75;t| z_+MQ7Pk?qF@;?K3-8Fs;^fA!Qz?8qxr4aeAa?!IuuL3=0uSfo`fUYkW0_L^mKjPx& z{BMBXigDV6{BKSfe+Tr0OaGIu@hZ%j4kxDPp@GNJ4|Kvse;)L(i;jWTT=YGlt1tOv z{@;Uk9_lv&`VR0{qD}eFOd0LnD`)oP~x*3x%vgzN0PJvF@bUA{2 z476g?HK6@-it$5vH-Ih!?fCaL&Ec@gGc~UkAO%HU7&f^fV-gmt5oXrqD}3XIaz`H}oz3 zJ*`StLeq_1nvp zx>mLO*EcprpyVVU=_bWz(4kAB;qL9IK^?c?o+!z;kRAp@HrlwlxKCE&V8qG?4;CFL&TPSYUd=c%W*cN ztH(0+rlObbOvV^oHWLD(5iaiTYD&cr<*x2Eu`cA3jqxV
    &UmX)zo%so!JG2XE} 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 VkFzc@b#tD_!H56vGWj@s{{zn0FVg@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 zcmeHLU1$_n6h1SX)M#s5|I?~CYnQrKS=KfcwLWZXQ=@1})q;ZUWRjgE1DoAtcOt7u zJBUau(oGd=1tEpnpNB$h3&jVec_`FA)&4#SE`@@R?L#4;?e_a-=Elu75ef7yhdp!d zx#xGzoqK1_zSXh!WlhsWK}1@F+<3D{JLuLWBJ-ls)h-4k30W$b5Gk}nNnsl%h)p5h z_l60;srdoIB|!82-)a@P)vEb;2nNJQLb(ol2l6|R6Wbso&ci%obp7sTycQ9KJ1|F7 z@n3};?0_J zF+gd2ScEHcqyL$Jb%}&R)=w`oDm0pVV)aOPC)<;B+Yexk3IZcoi=S`|AzzUtxCx_FiaT zZICYp---BFLitmma3h@||5bzj_YM3T(Ce(r@4E*13Gm%qGyvD|FtDqRe;jgz`4;bR{0@#1er9Mg zXXj5Ckywi7)3pj@6$3tEMp|@fjx(Mi*Vog})iXgJ^pk>4lh?c>W{eB{(eFsdM{)Yn z@w?MOe8xV796Y%)7DEm(Z(Nv1n|#dst>|fe z2lI^?qOa@d@N+Cfwp~6vuSrj;S<+G1SITnvd_+#CBJ%B4O@7-1f2emgGOX@@IJp0t zVI33l$EAw8#zsC6-b*aet@|||_9W(|afYX(%qtPpS&t>s ze!e&-<04PK6B|k6kUn-cW*Crl>+liSZ-uXDT1T7;VpkBmg4kHIAkP%?oTy2(R@38L zua+?1)riA&6^;{~dt%^L4w0U%k_jj$< z1$qNC3)=Eetu_qW33{3Hpx=O&Yqi=Rpiv+}JHB7E6Kl0q3)lGXBfgUo@X<+OSF3Sw zR6BCJv(=aJo8};7=}>lPR6Eovw|yC7m#2}f#ys=61epg4pTpXbQEf!m54Ot9+uTZL zf%hQ463A0W&g3Dzk81jf1Z@Q1wpX_dWa5RiI74CxHB3wKwH=qs1LgWbAnw# z`2Z_-YqdP>XANP`)?n|k_v=Q2?0M2a_BIBPJkJsrvd=n@g0|RBx z9uF|1oIUD;l8IF*E7kZ^Rc(k*Dh9?2)GfW&gq=Nc(d`qEWF)lVoY2zt-ZkhDZ(yuI>Aj8#o?*;8_+RaQEb1yf2V*{R)Z=+p zg%Mm%g3=qp4DXe3ga6@B7bK$Oq_lez$o%|z@hm|hR4p()IX-n?FUs=}4UWXA5CU!J z^9+#wQb0mG1bc#^f2E9gE~Ne>E*>3F5CVM>E&%_+8R;{)csNk0sz8~Lsx_x<1bUw+ IB~YdJFI2OsLI3~& 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 zcmeHLUu;uV7(d-EP+?pqPDMbxkQ*tAwZn>_M44=;hzgsi3CiWJ_ikCiMJ@cjC`Of$E zeCIpo+sF&iT46i%Q|)GDa_!Ai)_ z6@oa6T(gkz$8{mbmz6OL2O{HA-vDv}`U}t#r@#}b=NQ|5@SN3%r_h0nsK(z8J=lMM zj1Ori^tI!MFg8)euXlv13JcLgid7(gXO$Czd=R)1!8$+}qG~;L`aR(D&_7hsAF0!S z41T;u|2_ETIYQ(r_RDG#;_@)}!_Xh9=%Y1y=F719YsC`%1D@p$I_{v=!M4-29XDkq``v_)%?zA-Q+BtAB_rO9h8{>r{~3%M zOFxqwNV6K#1?U~HQ_f5(kU}AZY-W&2B%VYb<<@c?+q02WcRJ0)Qdl83;fQ#wJMB4< zd+!aVlVtiTG*Y2XywWMJ4pVVc6al#BxUaC~!~!4z$F&MLnxd)734yIA&rBmIedht^ z1OE&73?T5C!E;T(k+=rbHogf`K1(=`Fv|4YU9d+Ylb~}DtVoIkekO(EFQf>5nG_S5 zB1O_yNNXljI?mBcM`Uc->e07H$Z>qSYZ06rt$X6h{)SMo&tM~&9 zMhatP`yxllZZ!kh=FC=8!+5L=^DT`X#WFAfE-e$d_}9NopsV<!QSh-QXNe>qXDG=_J-$P_Wg z(w)1kR|+}rZt)prUi#^0jv}F}_#2{(6h63JCd2g(Fm^knYANz`l=%5dI%R&()pc@% z)54xSPYl8LdZ+LW`F%^8H0>=cI8O@k3W~&2A=-5RXv1^5(W(2}bge+$24EA$=3S(! z@1EAb4Do8{m(=K+pDOEFmm%Ov=w&g`XUse>09glUHD($<1zn^581NaJ^wdpORv!2sK4bEJ>1&+;dY-&4$0H<}WW1gJPZumcmEwrNIFKf81oG@%OQm7zb^m6)Y0H9np0-y!w)l~I)|k?bD&LaEN1jILMNnQRe+0#qOx{!Z4&i$nR}^s`_g21}7>i>NAd+L? z5t@YCjDX+G3f3a=&A=CcJ-|WWLEw8pVE~`lwCQ0Z@Wit_RvF>oT4PP96~EA0Bha66 zQ*PX~)9$Kkjn>mB9D1-de65k32k+yY4+4tbWZW@YgRQOLMKB#rdnpg!XF+FQBE7G# zOudu{M(uP|1Th#jr6ZDVIuc%tsVE+JwRnQ z0UILE0`0iJ!OFcDtdSW=fH(}90`5)PJ^)m{hhamUWD*rndw4x~+EKM1i4Z?h$w9_g zgiSzYSNngCRH9LK+tKH@CTl4FH^QOf{1hm=S0LbdlV=}i;5-ofC98#d-(UxN>h{Ns^#eh;z_#3n% BYV-gA 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 zcmeHLYitx%6ux~RYbn!}hgLwl;PR5V>0%)us9m5ikZO>JL68j7-RbUx?QXL>tu1L{ z!z+xXNkfPs#vjBO(-=*N5<&>6n}CS_pgzFFglagx{ z)r#T#_EJ1v+*BA&FrqJ(*FcBk{nN66bj9Ykh33b|aTXf~r!{GmMqJL(cwClA@arBO zUl7eD?dBr>Tgm?d`9DMchl=jhE&f``L;TcF zoD_*7{w?J1f3)C8(-0pO@&5#Pzxc!P1x7-VmCuXtUliemrbRn+t=UZJNpqJ$rfwM> zrX|+t?Yb6Cw`fVT#Ymd*grzl^shF9HYi6po&C-nan9;5^;C+Lk$Bc}YZZ%Ru-o_w~ zXY?jvrlVGJEJL@Yq<#$Jn%P&kuXHa?fQXE6<-b^=_K%AodOp)?_LbD68zn{(mul!fyM=To-3 zc|!#5_Y-9I*A#f12W=rqoF^XT91AvFaPd4g@|Rsa=TPK_T)aD<4!d|t&FC(!yLk8d z-E#5nb#@kgRxN}x`#9YDpg6P9PGDF0AqUFrkI}|Z^B1K30opjFd`{Z$p^ZzNKPK%% zXyX*}N2UD^+PLibK56ep8>f=*23zfYu@i{=VW<1%0ah6}XusMY-f}*_Xn(QyB6EGpb)r1DXQ*s>8OG2vwHABmX$*F#J(JX>7uzb--VcM_5Ye_X z!>2*Wu^~n_ueHAm4@Ndc>>G{t@0&NO_H7w6EQr&WgXK{7!N6Zyi&xpdoPw2un9dFF zhhEm&XTx8sJ!PtW4TP$F#p%P{w#puo%dl;G5h7xia_v%avco!;^l3g1_Nr%5=dgXXuAN&N!&w#5MI(0vf$k)N;2cBMSz$*AR z0{VcTi$sIs-=g?rKQS-^z{@ih`0d1Z0lx(J03iBr1wIJX!*JCDZy_I1{Ci3pmA;bF z9Tkc{qWB`1Ld0^oPQ!Hs{NhNgQ2f26Yn1APWowkc{_==2Z_hYYsV%LqQ07IHKt!nq zj}9p?t%48Tg@8v%oWU4Y90-v`_TI0JmT01pD529zB?yggij z|H%rBoWnF9KGToUxyEN~Kea=Om1PSZnwW2}@E&FKQ#+scYQb&fEXRzB3WmOaA5DPL4#2vs7XGqR0NhWB)`ppXt}go<{xi`^*fo zIR`&U_Hp_SoK7~!<<802^fa~eJZ{r^&~ViH-vfWIdPjPke$Y9DiwRc~zE0Ro*iI+{ z)YF=kD_;oATl4DX`GLC7(!j#na9!=9a9vp34Vaz60tIsOG6J?9(7erU&nddwL-KI>~;ZBTt6 zL3K;=-i`Mq<05F{zR`>GB;z>_oVs8gnPM4K(1qu((nk#Aa*v+lXMKZ5U+n)O_UCnH zdm~iv`;YTE=PUmIhw~Ntd&k$H0dpVgIiDS;k3;Wxp6Q64pvB*X^_*Y$e=`0*jMs<9 z=XJz)OYD>N{5{xDAGPccF0y#-PGH@7KF^Mkem&_Jy!zc9y$Fye1?ctn+6TZLIgZ~) zdLK`ax?}LJUoSKuSIZ8Bte@lISED F`fuvq)TaOd literal 0 HcmV?d00001