From 975ab104bfccd4a92fd62785b95ec1a1378672a4 Mon Sep 17 00:00:00 2001 From: HyungKyu Song Date: Thu, 14 Feb 2013 21:48:04 +0900 Subject: [PATCH] Tizen 2.0 Release --- AUTHORS | Bin 112 -> 26479 bytes CMakeLists.txt | 4 +- include/ccatalog.h | 1 - include/common.h | 31 +++---- include/cprocessor_module.h | 22 ++--- include/cworker.h | 5 +- include/sf_common.h | 38 +++++++-- libsf-common.manifest | 6 ++ packaging/libsf-common.manifest | 5 ++ packaging/libsf-common.spec | 17 ++-- src/ccatalog.cpp | 28 +------ src/cipc_worker.cpp | 25 +++--- src/cprocessor_module.cpp | 178 +++++++++++++++++++++++----------------- src/csock.cpp | 53 ++++++++++-- src/cworker.cpp | 111 +++++++++++++++---------- 15 files changed, 308 insertions(+), 216 deletions(-) create mode 100644 libsf-common.manifest create mode 100644 packaging/libsf-common.manifest diff --git a/AUTHORS b/AUTHORS index 4a9d6ba3895dc970052b5a4d76e441e108bfeb16..cb0b5dc1806d7423d361ea606211fbe4cb77a1b7 100644 GIT binary patch literal 26479 zcmV)UK(N0biwFR3(|b?=1MEC$bK6Fi{u))yf9RpJwN#d*c<8W|@lj7miY(Ea+|S2uX}+PmeKLT0j&-Dgie z$<>7G`1lb2woZj`Uq8g$B6E;BD>?8&W& zc8+`O{r}O+k3jx6k%&ci?|doEHQRDbFXNBye-Yd4Pf_ZDgLH|}RuIlb|dC`w{> z_U_&O-cyz(OvJ#yFl39{nV-Z{F=LWv`GQSF$Qyg3-njZ^*t_VzV_*Mv_PYCH@1{Q( zjk}kZH|p{4`!uHau6L%Nu*!dZ{o5ktQ*r-$MZLZ3zdY{`-4_R;nCO@N!P({Yd2fAy zi2X1RxE^H4X*HVrdwWj-#p*U}Smo>9;HTftyW{S~2v^5}Z-!St^v=dNue(274Q~vj zN^|{nf8f4uue~1jE_>ZkuNctM0~8+c_~jM6#+!@&WshB5TmYt;it2@kgEzOcGvY7^ zB`kz~W(e_r>8y>k|X2@Las;3fce#3B<(EURDtM#FB-E-t&T zM!@=w5%qJ$h!>Ry#8ugZT0g(MI_qAd1YVT*cOd6p$`8WC_d>pP;zjptd^P;}Vx%Y9 z`|ax}xG&a)^mKFNyA~jPb+Pr`&8yyc+PaNB`ZV<-USA|4&Um`d zwn97aU39N6$2S*OgYnIv`?~j{@)J+Jt#~Q$Ggd#p23ez=VfxGKSG&jV7!%g&bx+n~ z&I2AWy1!~|8#zTgP4kGyKvf?5^te#4n*gld&yrMdR1+oov+Loo2Skmou7_uUX@6+V zN~;c7Vd|wTm|@f$8SpzBecweb-1|zV{(&!fER$5LYQtYF^mA|#z}C&@;BI^_w@wKm zP&v07@1s29_s)GXLC1BItrn#PJpY!vaAe}&y0@#?cW#$SddpMifmrxA8xP4b(mgN- zLduM1z@PY5Gf6SF%qC-xm*>hLS*0GP8LNju2M^rh>Q8wuw{(W8~2H;Ii;nP?vyY_?I}G#{c#^?WpN)lI#gPA zgCBV&LVVyd*t}em18Cj{$N$UzS#L1veS*xQxOV4%?c<}9=34&OY`2!F^jT*bmf(GkCbfS5ZrCjp#jt7lD z?fq$wJ$7}$g65oE3Lgxe@0jp4XAd_7{_!8tp-8l3mhrbg`IYRDig*C2}mt2)0v!^brmb>1J1hy9n= z_(X$fHQ0F(U>(vcnz9Om^aq#}aW7^WPz=5+lFW+(297aM^Vl>=SuS}EmAtOX0CNj{si=Pa4Rjev29PvL$OwItoZ&9_>R zEMuNBzzU{{Y{k4hn?qXg-?X9uv~5Z@_c8|S&QcF%g5G3>luJ19nHRDiLEpe5kC93u zfiur1I0g~m1&lRt5*VS8gwU#12fl)$hBXFhr@09U@fuQuPxCl{Y0AwSPAa(4T_2R`ga@6%D3B)JRqp`)Y2o9e& zfKl&=3n`1d*qd>bBCafRf38uhvE`f-2S5#IVUK{9xU&?fSOBIf02h*yoQnm5nu;l~ zbiq>}VONiu|F%!-CBP!ZeG4hiz(E4aAPLInr2z>rCp-p5_yPo40`FkzivH&$udpi2 z#($-ieOLPMA2Q}n1UW)WnX4xT0>1~0g+yEc_ee-d>Q5@COoF7dMe9bepbs_)_7<%x z9hQtdg{oJ*of6}3aS_NA1kmS^m03xv=!@^cDp{OlknljY0P{hhGMQ#e)HF#ef^Y&5 zf-y#dWZJp;MqA(_iGO(J;d&pq(ip0yXykXYhS z&nOo?3H9xic}($$;MK}R8X#-5f*CCY8kkC!G_5mG3ZMfXm#8i|H6Zs+Id_SGlrcv< z5FW#ft3>--$dWc31*T4fHMu9$yTT+OE!LzI2B8?JX^Xr7yvv;@LT?fppWwKw8v0q( zM&HwFl1UbKLzq4_;c4ofYh*X1Y=G4ogkT_P6L0m-7pS(PEvCRFtof~>oU+V4njT=XCwp< zmP zJX|p>^oV&AP#aX3*o*kS5k9pKrk+m$q~-=u%h?UIkV8C~y3#*GKd&=^t&(3i2y4Uc zl9r9y08O;Ds35eGXh@#}ov~O@iQ*7Vg8>f_P;)FK!;p}`+M)I6GM|7u(f-7wC!}YD zJRzvt6Izma@cX;VDh8A{xQ2HiESkE%c6z|bjhV@Hznei;F)SgI-pn92#PyM|fZ zrqwkR#l#Cqp_VC5j44IQV=V%P22tWXFPMeAqAXk+4hcclc800Kow=*Pe+5?HB}Is{ zv3>?{PCT<2lU&J+N3!JFAt>h@gNsigR1Z;FfN@dfG&U)7IbU<#N=X?UmLu;VC-!qm zc>paLkq^~5=UeiDPSoP}h7o0QjbZ{dav}UY$t9R_5n=b%U-F6<}3brsGrKXz=cNhjsf%!iI4t$GurD45|=cU8cYF;TcA#FI6ueDFY*aY23~^FEmQ12_ZxW9)ed^{|6_Nq?wYB^$a?#*6Aa89!nguL5a$& z>n#=`7OP1N!Y5XvKhwzhp(lXpYOG5iu#%v-EVkY>=Ggf3QbEQ#O~E0VLWm0+7hO+K zmHSXfCo$L25_}>gEw&7xdFvA_O{zlHu^1>&$zT~hy~YydVd7we^{1!?MF}Ord!c?? z(PUz#knm<6z9z?~YyWBy%Zf}qO{A<7*N_rF$uY}P_n-hC3%#YxMTXRde5RrUaLu6a zk1p`Gts9hB70Sh;mwhqw=+~O4_u_l(O1tOleZsn+}I2^HNa* z?Gtqb6((L&2&0EZ=}?bsbQ*pR!8rUtDZd8@+Ptve?0jl$$VWf!$08zjkK zehI7P;P^ti#A}0Ek0Qr<@$sz+vv%2uv#ja^6{$DYU)TgtJ)#uV z2}%wTqt2+xQ@R+SQ=J!az~4aY2ke^rp}58xw$}+ z*0!+PGkKxYH`5ix7EVpq&4#iJC?A!`0Ad={kel4sJJov;2xB)45EOCv9~D(wN-km3aa{yW7&$yH4kjKN-W>3xi%rbHk? z8YQx*6vHk_5b!w2Ba`HoG{<-vRXiG@Zn!z(vgw5YE4CUI^}e9kQn^B!Zz!T-&ck~o zTNzc37^7JIN2=9CAx=6Y91C598XyZu2` zozBPzQAcwW43+8zcJEUG7$h0avfD)zc_xXf=g^F2R2pJ@A>?EZVM6kNtF0%r30E?D zDV2bz)+?~m)>1R52gwLl+FGcXcwBJ9Q4yayX;JiWu61APlEq!vg~tY8;-qxWlU%ZN|Mi7m0gu@8%gz?_w}2#f7xr7B>m-myG$90Q3nPzOp)XRTHUPJ07cU|U6WvGuS~b zPeo(3PZ{D429U6TWd-eS&@PZFD%bP|1ehj^RA4?&L{CA_a13c;;fS4Htm z1~^z3WWj370@EDTF~&_m4b?bqY~umu*bqFsqEvU5B*9XIrH;*T-Oi ztT6r<7w;B<+%b^1bIkS2*1NGuxpRxpB&_~CNmPH8TBzkMf9mH#f;Z*lVZi+nj$Z6@ zMaV)mShYu7kp}W8#^Wwdk4-T*H0ZNr66&@V)Jq@))qz})Nat+g(A{{kDZ1W)p$@TrjNY~It%NaUL&b)TwuY|#62-JS~p>>f2YAphd|{pzf}br<)jM} ztj*5ugcrwXXn)q?B5`H~@T2B9I_C<;k@CK)K9Pfnf)Iqt30;k+6Yf{ZU&C04cz@8M{|CV5wLI&M~if_74 zZ&H5|>pGTvrd6&Y7h*;4Aem4D&MWl+jaGY^b5!?{BeVK|cpcEzlinw+{QvREQS0dN5YPV~b~;bk(I>@9U;pCg z|F!&s#Fw9JjYq!!#k=+If7>wp%l99j;W{gQ|NXzlEq%E@(`D>mq<^6Ow_6+bfAZz~ zug`MjGCi1xcn|+d{Kp@S(3k78UfTXcF_F`{`Yx*8Y(P1dVUgbu@jqdW$Lzn;YOmS< zQRlGp#r{9X_4LnZ{s(ft_f$;TFYN2zu1CG$@9f13R!Ng2tFT|c#j`1UUp>`_igZzr z)h|A5HS7oOaO=;pUx5=(@qg?9{R(~$P6}qe_m;`t)2Y}iLv-q>y)syU8YKZcK0JIF z-dA57*FSV^w}1V~{y)e3-y{Ba*6qL5KKf$+pX2&Y{jke-WK`dPC4KY7kp7h}ZU4#< zhso?ytg+kvJIBqFLv8=9R;PIk_TO%woP4qW&vChqpH-WUPNUV_XF2-+Nyxutd5SyU zs~2Ii+}mU98O#0t02mCd*VzyG_p3Z+KZ=O`MU| zAC_pql)p0e77t3akJ*SX@OLNLtaW(Wetz0%vj1p4Z#MV#HZgp@6TzvtXW1Oj!Lms{ zQwOLP`X^ZET$%c*7-pVms-ol$4@>3P#HWwkrs^Px9<6>fMh)%;0b6?b*`V6OP{(lm zJBGgm!!tW3>lc(3 z9z4cVcPXBy`cNF3Ck~E>$jtV$hjBcvcOJ78LemcgZ9$W|neS9;q#%X@b>If5pn0!E zb}GXK{)Cb|2urEi!@7gmd?>x077PwGy~n2@miFN;dfSg1p8EABc89-bz-~F6KE>zN z2$+$s4)pu_UzvWepfd$rzu5m62DG1l00Um*@r~vo434e9kDi@&j&?F&w*jF@aZg?e zbmFB+1f-=OMbonnrKxqyx{I_hwB~7Nhev=FcH0`#q=ja;Z|}e@;D@=mslCPSK8oIx z52p7yJLkUo$)eWDX$$Dx;aFgWf{2WqYIXv*6~rJ-GX5Ltl4OH4*wzgjy{0Ci&Ox8ZHK<2)6Vf} zv-3agefdKhN3!tG(qA#gadw0yEC~dT2;N{24lfvZAU4T5{^kj31d4S%X=Iz{IDh+B zN1t;^oX$EkyD^%cKB}v$yQ{0~NbTR+T-v?xgITZRNR=&`nWwL}cYeClo~~WHr)$pP z=)I!aas>!CwWq78J#DZ8@ZEQ8^*SVaIfIU^8Xa4&uVUX)J6266QF1pRCgYvH{-&nmEKPKJKp>5O32{YN0x;y7F3PBBoq z_Smi)7+9^>%JsE$ej%Md!s%)D9>@AlJ9r(2h`8x;&FEkSk0G#$rgX59&JYPBD1C^a zox@}Y@3OlU!Tylkbq*~MG&$v)=>V?16H6nOz!Wqi(c?dcY4t-SFTO6z{%<^ zZ`9W+^VZdcq(Ol{7(4yZo%iqhGFRZsb^qX`Rh_d_rt>;B<KR_)#%ytI<6_HG?~uJ2;mg^-y}aJ$!DdT_3v6d3>|-gzY|A`GH&y$ za6nAm1JhZUa*x~pbu_#vO`+bSOXvG5bYL;-f49Cex?Bu|O1iM~i=tSv8Mo;oEZ*so zv2;d5bP-q!e=;oXz6Q@N|C;o%BfrO^*S#FpsMq*@U1d zI=q1-{DQ{O_c;~TZZs7t1~HVstFKj4RRUHQTL&;G4_{Jwbo_SvsS2kn-dmjg(_y87eNJ>#HqT^ta{57hs~=-R&J`g33J7N#ecr79hFF zY&S+4Wo6}*Z4lc?=QDAnmwtI!Iwl{(rQ=rnUF*WH4@XPlG;4IF==Q!AqQzR6zwi~caz2SJKqV1qt#n!+lFDb}s@&$=|pA>VW zEwrj}1r!6zXR>Zrb)hZP!cdp=Vfy#Ca9(@kjPx4M=fNKq4-7(D_Ka1k5==L2kW2wBGr%u?LNLe31_2 zZgSH6&cFt2vGD(tk^XKGhH{2MkTFuM<4-2I5Mq2@XEH)}N<{nQo-2wt6JryNvYy7+ z^>{^+pKci4gI%GPB8jW4JYP&q^uIHI<~!pa%;e5&Ft`#f)jF+!gEqOyP&->M$kUTk zxXGcnW`GR@T2396=L@p=imXroFdo5*KDf?uLn`t81x5P@8jf`58xg-~q)>U`YWg@bEu+)j)R~ zbTW#rB&EYDbYF*;$R))1%_v!Sg3z2Sf51+ppGd@dLUD8DYNs(SlxeO{3)M9ZWVK3) z&nY`xZO)>nWv5Xv6`=^~xGk`xX;x0WOQ5zPGmW7T2f_FvTTly#@44@%3mQy9ryrYQRSe zL-K7h!I!>Ew8+YXPQb|GQOr%rVz?wU5n@DiiUx#p6M5G~yM%OvLm6nIc@E2q$S>GziJ9JeO#obQJiXyNyjF}%cqrj&mG zwDNa#m_b$K3d@P0%~4h(=b-4j82u*;%TkJ%D%O1V7|VM4qpov$a9r9y-nlj88+6h0 zJQebEowI$xublW8UBzFyCP=)~Ry9bd-1wcolK#@R%h_}LN7(=4eaO8z0Gs3gu~u1M z3;X|qUzz>?Lp+ZkJrgd#o?%Qxr_{|qc1p`7ijYWmA@Bl8ryQ@^Bp3GeJHtpokbLR) z$NppmvNo09T9o_Ac*C%S%GkE&SI&Q-uHld9f)#hrok^>A;hbWeBCKE=eZXNg718wKBMDPRGK5|-6iA(^t0(mtKVC-uS9QG)#PSJ4;)p z>P`e2>Kld>qSlQL;La*TE0$t^l+-?tegJ43@4o2_|l6D&}y_aYE2fN?+%J|&lW{A! z-1^4l9u!baF21y;rJ?V4P@aXh=DmyA#IHN*C)5oDn-9I$^SREY7r^*-dgQzcxekic zsrVuaYcC41zkR+iU6I|{TKdN2Uxg({c8LNM11372Y?D5cSh~=(db<%7y*F~NzDSGJP!l89i3`e0;H#UP8js9G%X(aD&AHHrZc)SrTNRi^Zg>0gvY52wip zmuC)x(0MC~khCIyXSZ?Mg#K+sIvT)Giwg6&{tJ`tpq zJci<(T=8eoS5?(xbhl4Yu4FhZgl|NJ z#9&aNV~|OH<@m>=!(Sz}@H|V(EPku0r53;J-1rxI;`~2${P%b20dlVY$Mtg9|6^?} z^Z)oDkMjR0BCkAK&RZ@a$L}t9;yznm8MpJ<-2KWP>HiV7n^tg7ZOonj<*@(f%6cV} z|2)W3%VzZ7`cdEjxhxsZY{RPR$=rdZS4% zfOCQWF_^USua&)M-TAN4@Zxeb8ahA1N#Oh6#oG!T4XwMR;v#0YMW@;Fr=tu&Op>Eqah1W6oVO~LQ ztM)qXmh;Ug9t;W5=K|zbf%59kDZ63pqPjf=DiwEueR7n4l>}>fahSgO#K+0HNcmiZ zq(N`mRteXG2m|Sv2}Qo$Cs&Fpv|6|hq15=T@RXG}1aMGR9V5-1+x4s%!rJ@+nbUh0 zFJ>X{*zXkbPNOxwnujlTPIz$aVgx`HQW1;a-~5+s|NXUajrect8|5`%{K}Q`IIh9NIyB5pDqUIDF>h@xd@g zkJu`&<9cV!{R403VEgpc`_U`p9}9CmI~_~$4fL~TkDSJkVy(B>p6^S~&-;GV`VYMg z{E5f;G50{_pJVA2b^$-s_{?vx7$5PLPlT z^*hky$6gnmx-+ITzta|q)1UI3P|xS42w@xVIi~^HLZ0q<#|LMx_76R7!`U*D0N)Mg zsZ%L$=JPqb6&J`h_r5m?X05*SXY`x?c#c+!txm@yg9KL^bO>OVMNkcBw;U7hFFl}kw!(`L)*w)#_F6jEjSBN!R>nZq3k0K6adI|@X?YO{rjD~=0PE97XW-Fa`1W~I zacF--7VTai#s86c_x%U}=J0>jjn$3t`Mb#yLFGhvxnAH8yukUC&+&$~j2kKJZn#_JD8vAMI^I8ScqfhR-5hL( zMVavP$$ql|DHWBneQ*Hp)gqTyOeI4@j1+qEFET@cUN}6q@|OIX#WHdsVihUBKNzEL z!%gwpo%Q?1S7aS^57Y*|3=9A>hUkUGYKR#K-+veTU1UI46|D*Irhq54&5KXu+C+a* zEsO7Hw=D8VS3;c6U54a>C{xh91T$EWl>u^>3r4+?J;CM*)(bW$Ssg;BcL@~N_oG}1 zWgB=n2AlFlxCv43Kt6%$g1bBrT_}XRCJ?&UQO`L?r6qca*ORSIpS9W1DnE1WdNs*O^{f`>ZZKcT~WOGK-Y1yImkSs?^ zyQHLK;$Hxgw492;z*&Z%$X!?M#pj4RQ3p3PjIV(@GCyxfU=s)7)JL;~)Y=pBimpRG zU>z2!nS0Rwo8Kz`eA3eXEF&*q}&92yF6s_PXyZ?JNN&EM7w0 zC2$3_A9_OxuYb`8h(r-e650Kay&wYl=i9MBf9pr{e>j3)ME+A*Ut0_Ff2-w;|9g-p zxp;1KZascIAQw3pch<;%u^WVF469X*3ckas+wIHkuwNc1th>QT=`QRSgrzV z4JNJjyOkL2l(WO14v&65gya0jy*)Zcl6C=pqD%cPnZw@qD3c}PP!fBqd?6&i(5ege zp2$*d{Cay~cJ^HRQTx9P3wIAEzLQ<;5-Oqe`(iShjf;*gSzjPqQCx6*EQqW0_GmT?yir$Z5~fry zMdZDJyxD1SvQ|@&pN7Dp2}v`H)1z6?bABWXwh5TNQLF)|{lVb4YC zjuN&R{u~V?W+`2oEKo#U(Oqtzdxo~7G}AadJ2KItHQ=*99xa9zQVK7e< zjt-!Kj4D4;cS3xqObYA6&gE8Ys~1f5E?d*f&9EMAE*TAyhtZmpf`!ouVGRWykb&x@ z9xIkWP5iD$eCK9Vs{y|W%?8zi&=4UNR%-zMvzR8e|KnhNq5XfgTFdtTFZ5*lf42XB z&HMks{%JFI|F=FE`#)`3a|A!=&RJM~ylm_pouDO$5Z&aq_nM6pen(@D+)3m3V0%a8 zSQX|SIcg@fp~@sfd6a-zR+0-dzxbv^7UnmW3IUL=fE0UCR7HY`nOW*9VD{LGTAfZx zJu&w{1h2>>%q*gr2yi=-$#C$80oAo>ykoKdv_1B({HXmOZB4$A|0nz%+5a>BzXy4; z{Xg6PzvBJ>bm!N@ow)tq{$T9?xDHy%f0z*282_}A#X%bVXV{kyltRbcK&4G#*J5Ks zJFiYBJI3fCJgPm&XHxY6Lq1bF{s?W7N%LRJe_I$k{7cyXRoB)d>;GCM^Z)c9PqzMN z>;G50{_h-b@BGw=KLLh5nKEEn3$0y%law7kT?~t~kmrbp2%zaI{N;qu%Y#gLd8%=$THm}7QY;pcJ5GQZK0X6ccFxO`RG@{^5`7O$h zm(h@(s?mn^>?Z0<>f(QiN1y+Im-sU0ztxR$#Q#sFoaz5P$dm2=+5Z1E@BgPqJ3qzl z{?-R5#p|H+eY-bqd+40spR8QIP^Usz9n)@wX%E9pq{%M!CTe2;c*oq-FzL|T**K}W zbIeI=D(P%jBt0+YW!le2CqD`4a-|&F7R4d3HMtPYGtkRZJ|yziNFf!JIXUFfy>*uP zufB&Bx!b` z42NW&HuAWXt(=GlZ4ZdcW0*sQds9!8_d7A{)o2LCMpK`C2g$d{JvnA&6bTN?T_zuu z*3GoM$aj|~vmugm!dG-(X?+TDd(oU<>nRu|j3_Sd`>Ew*$9wrX~#q=qsm|=8`5FO4<^K;yYZrbHTgQ|J$ zfoIJoDY7Bkm&;y9`+Sn*r@Trb-tX_mL)(Ai*8e5!|0|Vpc|GF)alM-He-H6w{9nfZ zea-ye(d*YohauKarg3gac08{=?$4(9pW(Fz7(D59IL{0os)1dw&tu@QPWL=CAUQtS zKWvf-MNW8h6dz81J%vBHobc-?Qg>zAYLQlTS@T$gSqoR+I629MD&Bn=sTB=Kj7pi2 zAaJ!sr(nNCJ7^nX*o*|Ni%?2;5J1Yx$_mMAB>G{ett<;SVtL+J!tia7H2+`X3xLv6)^?1AhQ33&v@a!+{-YZokUs9^+u^ zcQG0g6p@@;;<#FSKQBS$f&>%=>^5GWy(&0={GpQ0P8&2@@{{h{?)k;>1aRa+*NYCY zDcE`FTW92alGuz4deJEtB`AQer8kh{^(p3PzJ2p#T7S}c>nuTqOTP`5iXOM@6@laq z_7CaTDq;pNgdH1(L{JHdoFX~3nB71B*bzw%aLPlk*L9I!C1^q& z`3)sy{J9`rbJ*&V`(#>hN-qf6&;c$l`+?a$)mrTxb%Vc7Fu^Ad=eo$moy6CWw5qx#bWpgtlw zbZ5gh!Ut*fHY3=o%_6w1Y$vT{K4==iv?n=_mOHMdWirmg_K%N(pK0A;ixS+3bQ zdA)zQ-4vdMNOfTU5C&=cfKzIi(l|VO?Li-#oVKn^(2TomeWhzeT~yb_D$=5vG7kF( zvTtsw#!$EEZ_NF>ZZrN)-O@Ou&wj_w?sw7(2=L{#`*>dNu~q$?0^tj5cUh&Faf-~l zeOLvxFCxCt&*xA=kDQyVMG}&yz4`OCxe*;eDNKZiGKBbn3?dYB?`&L9GhCRY8;5-O z@}{VNG`&+8+@llkr^c_|@kwKE|Cd~DY2Xh=ldET9^M1zhoS!Y}YxV74sK7zvFqc~` zTj{&o&28_rdD7T^?VaxbyODFzu3^-5+k=j0L}?E2vR!;SM~^-f;F~|ah|%vd$k{?$17 zRiv+mpqLGNf!FJN{-QyEU;E9XOx$mJuNyGT-Z30YSjECS{qM8wlg6%<2Q@If zX5;i=+f3eVygF$#%#?$(U(8onbDI0mK;xvCGjlcm)j04fUh~K!onrL?&L7Q&2Xo|T zZ!g-A0i^ly$HopEQnpWbwh!#K4^H>bPD5PxjRT!p;nY`+qu1N7baIuG56l#|9QrRUCB>}J0+ zpaH}K*)@OVqwKcv1(wIN9dX2ci3;=hL7#eeFbPUGk9Lj@aIzu}S&iPr-^9N#kOz<% zokHYc%J%NAqj5)h8V4G2n6UHXPa0*M@JgN0`G_Nrdt%-D#M-`aAj_e&;d|IPk+~9- zEwr3b#re%!X#hCJ)7xiSF)#gof8+)66?2yJDcR&t7wC+J$=L<00xneO zN4U5kZb(!Um5!EG?%%KyS|D{tuq-9T70rdpV&*gdo$Nk~I|V+l=IeCD~PSY_RfhBd!eY z5w1%(pPu?wJ)y1|_mOeo$@Sf2Z0RA)7jHc3_kpfrE1@2X44!0?lA9CJ&?5zGhL@Dr zq7mGQz0`~qx3U$1#&q~%ne8wG2CtN@HyqCd)0NbiEaFfBR3Kq^|QUr`&KG!BR6m@s1wt|7|jA!vcOEEZ`je zZ>>_({$DC<73BYF)zysudx$6F|1$pXE8_p6{@+fHb{eNiOknh@_5l}K4{yo}swU#N z!7A;Dk+#B-Hex*5jSD8~#|_WqeT(DJL}{-8c1t718V}KeXQY zvoU(E4Y}aS#UNI8iKK$Al1JhV@1!-bd151S&GpOCEw?VlUUy^5{l%DYA&>nl@ZqC? z{3g|v#wh9vN>@=Ccm5y#DE{Acdv?cd%#;6C)~g};@9Jvi|M6j-jQ`L0|F4<<-#^~* zQfxqCK5IA7dP%%fV-Q{KLl}gF%s*<%{6m9r6BCe#wTJXyr}#?tB^d4Ne}WarU&5#( zZh&I&`Ij^9$ZRD8|rLtOCL-{|DLdO3;#PfK1J}q7Jg8H;Sel~u0 zF@4szD8V`zIOUbqm361QQG5RUe06Pob-lZ>?ys-aHvI1SdS|`nf45qBUaPFOYv0v2 z+WEuQz^@DcfYu4)bT$~YCRg-rhm!hN%tN)&mo#vF>`a3>KE*VWDAVaqpjzAn^MdiO z6I_*Y{)8hLQ?-@+tI23K7R@)0yqAqC!a*5iO(xQGb)4ZyKW$HXq#~F<4fWE|12F-d;oka$XRYsW112_;O1qS`U?Js{d@nu|MfMb0 z4OpEgpHPYQGcb?3_kaiyGy1cY*BWB0Qxed*U3&tjh;jZ2a8$FgQ~F7Se<{_=!c zXT>S)?!4aqsR4rs?C`;Xu&~*B@(Dvjc6%Q`LlMgQ z{AA#iCSAxuRZm8v;B)>77V>0{{1fC=rg^9qfa~-opLteDBgyF~FY}1LK~5n{q1-C# zv*ndbvl=z}hRNl){l&N<6Nvk2W6t_tUeou#m0G!m`+u#Rt^W`5Ja&%7TCzWcb#_39 zY+7-FP)kgycs#+Wwe@T^o#g$Gep}47t#3ZbNyp@^6L7lZ^@K1!L@bW;VxKT4SbkS8 z9`##n5i5F+sH~KY)e3e1SR0(u!8f18%yde9-TY3s-@3r>``>&rruEl%croYyN^f{C zZOonj>#L#ppT+-qsOMVq{|DY|f3Vho9~!?jc0Bn-tOGwB?7!UIKl#C20)E&(+&MVg zZD9I?&;B2T&DRgv8el!sN&6m8{`@R@{;zFR*Ecrs{D%uhcK&~e2gkoX9*z1d?eX}Y z+L$x`we>aQ{%;lie^l1X8`=8*5Knghm)-w;W%qx|nMcs+jclJC*m){?zLO7Ca#Ju{zjho^8Cv zSKzeR;)0cTgwBoineSd?&GkC{aSQo62Frr}xuj*5FXG)$tJfE==w5?8b4-Qb09U*p zA044m+GnH6KV_Y0CCctOmhtbVejU;s6TJec+%miiPqmm_pvz9o2N_&0w_L!#r5BjW z%8j{Rmp_(Xpu(Kr=VCcCNqm=KxN@Jd9HjdJkUE1U0TEz*CS|3Z<8mcTphaWbw(W^C zv29Ll+qRudY}>YNP3%l;pL6G{`{O>qt?F0kuCBe;+S3%V0r3d3K3u;G;PPgs^sxb+ zXts>qU82X4GA2ce2uiTk>PV-0mR1S=p3OgQKwFQ0`iF~e1CLB~N zT`qlaXjAM|-=s<_$-R1J^_fR@j<>dKhCZYfeH&t>j!x54VeJpbO zojD0Brh3O>sP_=tP?y6<$wacBl&ZACXu)qF1Qn3!k#n|JhxiF`HvU*sSxMeAGCk94 zPiXqP`y!y|F>3@e9949-Q)C-L6LA4*cqSm11;kqY;*9(e@Kvv+*x$Q%xw1A2y?wnA zdFmr#%qUn3eB39ew6L5pxFRO8@2)DYdaOuAI5JNCwG)4EraRn(kqbvqi#8nOw=#|o zBoDL=gPgyXSy@!EF)9NOrpR2w;De<#!*?wi?n?$l9+m6WSuu*CLqH&7Nk87h1zQ|> z_WbDwS;FbvAwO*o1&MX0ibRbTyYSGPMK4TD@M~$OM$66;8-J?7AXmZ*7L8W8O~cM& zclMG0Ev$SAEH_-7&_wZaK5O`;Dy2Gt!~9wF9r{fXs~sde7D8ncB<$2)h;6^rC#BOf zi`k@>jBz(1#dK~5%cD4h)*X#Tf?Ufyc-G%=y}pwNdA1o~r`Gz7{TZNFU65o(#pS#-R*_UbOBN-DT1U=%7BOt0 zI$C4@GNzsnXQ?yVFZjF3k`n40IyX1%*EN1=vBLGP1sJGN2Qtp9@fg8>$wO>PDk#h< zf4^U)ryWOtt1on|Xm8PdNgMGLgbMLpu|*EW#?1mRTi*eNvqFPQsEi;r_7awx+;mTw zj&Fd9@-o3ZgDoMxy^|#gAYXIRryC?|9JtQKHS{WkkDnI%Uqy2SWCs9kPJs1g->A-K z@kubTehUc%aAaqpmv?uKGafVIssw!7Mlg1kED9veHTrM?yKkkPem(W%4NKKWUKJ*C zCKq0HpM5{Bb6-Dt_owuOV{5gAwCFHg_0+WSGG~^@Cj0TIF&waunw*b6N-b`6Q!GH{ znn7d9V<*)3%F7FypyP%$XNhyIYsk zirA1Z{_c*`Ou#?+Oph4H$dt%_8v4?(k!!@+WFEvY=Y5#jz1Ce;VQLrx_68b)WQ3gEE&5}M0>6-Mi7bhVTh?;11#}ss|qOURZ#Fn z2qd+rOHhLrIG!AFDoaMX2sAfUo1@1jrE|%_@Jm6D4*w8in0j{Kf1D?ha*7Rg>XmRA zW~18_gA7JJi&qVK4oA5ij6?oJZ)R`9i%ON!9`eY835M&C;K4O;oe@PBqU*Mn3p_P^ zkZPeulpOLrcC_scuWdr#r9B@?pZcpVSFJ;VU18P(_9o69?HWL;`yPm(U%FoIF8427~L1vOL@835Y z)T8y^E~L$W6@n5p_+wH6J~C)-z_&eIfcmp2B90J=(A58r9f2+I?=@kr7S9xcm&{0V zk&x??At+hC090{2v)Vb$>WNT|L- z)!T%v+5r!4HiFvN&|gaVbe$kyBx%wz4C^V@2{JFUEqw2twSx8j z;I6jUz*~DIVlU5Y4$$7PB_;K*5I_Ol?=Pz9hU5|veea8DLyoKN&xk+W-PA-^?vR_G zO0+{%7Wrt_+J37f!kTEO&VxUrYSXYUw1-yaDCO)0@sc@$sEFut1*}`|nS@t#U0-^N z^Hbr{7PQz|hP~C)B3Nr67U9QRNwh(!X7SsDr@>(9OmoGgXBQ_N=_~(M1ekXPKa({!!jzP zuT@S`p7jsThUd{&1FPjbq>J^{9lT6I8qiOrtOS?vDV;JGY!aK~l)3_y+vnv%PwMso zoqgi92VGQ^K;$U|oOSI~5~KJO?KASqs`d+rUW`m#TwdqqudTl%1c`TwGxv&NFEIYem|WL4A*gGz5U_a ze8-kh5TN7TgSuVC!subf`Ctwf2c&qJy8Uvf?Pe}e-p=Ce*L5r+F*uTfqT5*lK%r7?TboFZYVUkA{M_MoH!!S~T?igA{rACfbcnCiH4pZL@k`KKX880_o#^B#?QOH6a9xp7t0!)KGut@ zey8zOQJUo(Nqk`JS5MexHmn87V{?)T!+#ZAp5Lio4q!U4*2BZAqg%{a zW?P7DUO)C3H<*|bNV(Lre5_jVdFW}Is;!HUwF09ESrwwnK}RprCqi~YxOJ!@RPahx z(9p@NwjLd6b~l{j@ZiLqpX9G3TDUkZos9~6MReST_0YDyP6>`i`Hkn~{m5gXi=}W| zE!d(>9El@jX>`0%%L?zThdM{#;CnX_Fpt%>Yn#l^WSDJJAcxD{j1~>>!cIL@aC9E< zF!wChipE>>tFS>1dzz_rF@8X%SxWEX%f*l@HnrGm&7G(HafJ6?Yue3hYMo!qv7gKyv`-<9?0sizFiM za1HLsA2q=(jnvC~nTT&n9A&DGk2v&Wr{&Lg=?9SATp4N>yO+I94}(j6_D1wWW}wCf zYwW33J{Zbt2?nW2TE-8_NR@r2!rn2RqObP>Mb`2$ z+$=w(LTDJl^VLE)u1xWhY%?OKdzrS3O=r$VFwHahhne> zpE6@56V23)qT!+l&iiR$`xS-Wm~tde#Ha+%80COd*crtasd9zE?8%&l;3b(63g+{< z4)^HoKac`3bCdXK&f6fxFVkz`a>|W{%n}1Tqf3h6ZVwhO0M*0S;AhCb!>X@bVHPPv zs5=j@x};I&A)%+d;9yu7O;jXmGC$SoIbWk0jAu60bn!JC9QUG_ zJ=zijlY4kZJ!$&IYt4y2wdNk=e|z|FEs7jd#z4F!i_rxgPiIJn_XaH+Ij6c}RNQb} z1lMAcSv_1yZI;geJ-6hl_OuRaBRJe=nnCqe^HqC8&<;1o3`O8bXPz!DJK7+l#zd5b z8+t~|i=P<-$3@E@%{qDrdQx9w579D5QRyVEob;aj@1P(fYD@|uL`)1TmC5!NVlEP( zDkah8XM8ggbQ>4)rEfy-XtG+mYK7l1QQ@VWOK zx1}=z@DNxA{$u2pf%8wmevNNnMYLb+U*8&&e26%|!n^>JXHNqQ^yfd1IfVvi{dN3) zFnhR1yBiku*cF;PT)C})SM8&kLF;9$ffIIkE8S*z)%KbC?=`h=bKH!=&^VOt59)DD z*RX-xl#7V)eRMW`_s&tcUmU76H{QVKfa_>W+)ze@_ z)GNXwzDdO=Dq;lcA!9XXgnd?c0>*tJ^(u-AUKPl{g|^ZljmMUFPzk=_Pevm}s|8Pn zDheojbsxQJmt}-guADG(N(Ji$7!v4plDd&VK}u>5psF_TUB1>j*G>N(9*jW4< zhL^i(=qP^h>-FV0DQ0$rTs&s3Jyn;s(+Dy!N>aBF!cT0O3elA-lrik5+%jxb#^@ca zbnJ%h_TXI^BM!^~_xbB$Cq~qfW99x!iu>RfBPC~|#S)wZ4P~NGEl=W)+|&mPPU@%N z&^YV)lDjgCV46`Agty?fQjj=Ev=wl}NY6$Js`dul6xD=o zT2mOt_`QtWq4JH-t}rY$@#Ew!C&`4=4otgdg#n*FNGLdK=C3sSI<-Sm8HIAR6r3tUzhGFbAVvB)sk+a+nIG=#-elWk1#6f;ji3ZbJ8k!AD zdEP7BO*Fd-e@w2qyCE1+J3?q6R0j|+MXa0dW&^MT6(ZjA0LKYX`}64bp# ze>6M|w=$t_dS=ycKSgELcSvo*_Vpip>Q1IPavCUUy?G+y3;x<1x}lV1#_m`Q5(?Cx zO4E*>6Y{4Ait3F^WHZ?Q-I8Ix(k%{JV3g!)y>Et-LHX-vc@zyT?;_eXrrPq+YV)P4 zVRaSACKNRAwqJWUt6K?4qKg3ry4l5+$+hDUo$iQF++O!ljP>heLzG6Yo2S`H$~1*% zbp!<|DS?Rb_Xj)=cqj`OIw-1g1}xP5r@|nL8yLl522{8S3al0d0oJ9f00>3I7#j{a z-fYFz&(ecZfpZjv{oC9_@V}yj6T;M>$Qw5y`vYLY+(T(B1E->bu19YolAy-DAc!lhaye%FIE^&SQa$fY6LiM<*|aHr@MR5j}Bt#8)2Ht6n;! zu8k<0+H+P5(_(kG(2u|Mr59foZ%3U8?E5*7dt*8jfHUh(z1g|{c$c&OtFPBr9^fe9 z%i(t2r~w@Ho4)AcDOme>Z;TN=0oRjG#<-KPrtx+y<%hn}Qoak0Xi$F7+MB^i7Ojr+evxhnLIc4`c9YbbC*`;R@DR=K&H%8Q4CQ-&YOSSh`YtvtyH&-^17DChHR_WYYdf zipRb+C1dJq?U0B`3a*$Ma8q$Og!<}OrNlL{+Pr0~%PPuQKNP?H*BMzfM`QaoXO$4p zzN2)X%9fhr?KqjXuy(LD6x1?0+9&8AtxY)k-JWB(zo-3`w^L>vX;CA|^qA@iLOPTK z;XNJcVPaKUxwuBTBk>Sou|iu+1vl=GP?@qpd}$1R&B)gun3|%x_!uph&Rjj-yT8D@ z&EO>!AI(}0ju^1QGa=}OogeGGe7gS{)_C`ow|0~D3}E?lqC(ovd{2eQ%0wZzKlu$( zL&X*K1Ia_ZcZyc-X#^+NqHPj)w)IjTC1n8%KZ!-@P!0R{w?DP-!jA{;X`ISrgkiTL zE@VYLriaeCNNLX-wNa>rIwi%8u^U~@GCXwbaUt`qGPI5gD!J;Wmkq0&&^;bE*tdlE zqaaOE&4^`^msq3{F&Xf#giwU13v@6|U)l<{w{}v%eC(`gN-c?PfdQXCIv}CK%V|4| zHG)vk{)$S~Opoy$g-uTFc!AM!Tfz*gT4uAnu9;_FYm@I$XILNrG?IP#w9*Djx5b(Z=z* z{#fdW4kvZ^2UH?^sr6)E^s~Cp*r99cD_p-?zzLs74Ti=L@24Ets$+si~n*?c0QQlzJS92n}R8i=P^G=m+}z_9d4)UvdB-I zo56Jc_=74KUO9*+!qC)zKt6IUAf4Qg_Osra2M=gwLY@Nr2h!96|Fr^Xb-+fEFO1*a z$z{V!iv7y#;J_}{rh?rD?1I#UU9A~vhf%Wwp%hsUU!3s8w5kHbN?`N@!Tt|vgftBm zDCqd~G>cuOi~d1zkCzca0w7{pQoMD*neRZ(cL1ir@L7K=1K`gv|0W>+8u;r1&~F&o znrZW`(Eo>ssQ|TL750YrDu+DpYSkX5^>EDIdGa0Xgs@&%@X8#TvN47dGkZTC~xxq#rP*X6_Bq zTx*R*W?;Tb6F8EqodbxDH133{#4|1uE){?_j_kQP1(4;;M-g*4=6p4 z5x(*m4w5n^vN{00))3Elm+05&RDPksl~Y8X&|0-tr-{?&>9i$$VEa66j``sH+!o#x;~^OUZiVWih#BQO6Hy#X>n2K}M@5bUAa< zcQv*u@|(BjCWtWENK^lQ*m&WEFRWR2L!@*O&@2vTjWQ?swO}kh@L3>1ZzW8D-9m*1 zB@_=wVp;Wex!JWdo>fQjKoJ^)EW43wI`e^=iws{&h~drYbp4joA6BT@V>XN3Qq>sO zj%I6ny16c9Ya`;$=~RYTRx2LsHfzUVBT~j$gnO1CbcmoB&;7s`AYA*&>Y7N`IHO7Q zn~HZ#${Igm;=v5hlYuQZ3D(7xfbSQ~$e+243bXB8r3NuW>+v|cVLlvbv#0p{M9z|Y zlanZ|5~+oubei>6kxm!*RG((SPSxoYM>7+68E?hf2Q3k4ZFIUmQI~Wd4l~ksWJ1Qi zjqiCKyH#$a zMk#PxNZQxz2N!z(~@5T6r!SCDk1(co<_H~!!ss%>Vq!`1m=PO>7cFI;U+r5y*gjZ;D4&00aJqB~bH zYn?SddR__{JyZZ`0RxT)>SUP55s%#F0aGZ=9qGVM4DJlEUd0&VS?ie0-9bA@krK?w zqF#+l5s5&U4qvAR5>5*XX_YJvAB{wT5o&@qSE3ZiE70}DXCE5t2xiUk?m;l8%|xaW z=BT}D1rZFGSFa`q^dm+j0nQKm;z2IHgzi2rjR5^R`qOVfXfHN^&=Iho4ggfR30PIX z<+pn|P8nu653Bb%F&dIfk!7YFzS+kAP+TUPI{Cu=p8k^uf{+dRGGm`_w(iUALY$U7x{O1VBlLZta>Nuu?o!s>Tv;tp`zp!&v@!$)fgS_3EV?ZAN? zvTtJcfXV8D<3dDN7>C7?uUsPHs~UBJO^ z5|i4Q$kH=se0lU8(-G3Z@W%K8xbaWdif79jP%nHBZf7WfAxCF2;7<|KwsXEXqZjH7 z;h#OUR2ZRx9eDs$zYH_VAcabrJQ{7#_;id@f&lK#z8fmbQw2`!41(~>Ye4K4$uInz<&tYbRWVfuaiC;-M-#Jn$x0nB_{9{tDX z-~cgH!W}!@me26-`gosA;0W<+)NbMgO$%`y$iO8@de^_gNU)`hW4d7pbFnRiE#k+| zN528sybsy5c8F;QQIOLFq2zu=0BCRQr_=$zCCh46dE-xMhBL>=38k;34vtyf?5j~) z>}G$3@}G(NwkTuovnfA-x7WHBm6mcM!r571XEnAjOIYisn^j4bdWL*iKGT&rCV=K! zy|&#?SIe6?b5#SBn1{!JL1|FQTf%rM23GDR!Tfic;*dW+26brL!8esU3`4mV6JyS# zN3+-&A;FCz83qepnmPW`C8R&xIwQ5=tF`*#PRNZQ)9G8a94%pRgQ;{)W(6|6bsgIG_x8da zjKIhM(KDUf&QN8oS^>I>R!QbjOi0Vc;BrSL&x7bbm-t-}{-35FQ0AMu_i@&dz9U|x z)pRP5QQz!8I{(}_ce0RMF$%<|5=0lC`06UO1|o?%tqErbU)|zu z6#N;A%D+YYux}4>oas$*Tr=Zg;~=RXQSd}O_pR$AVCY=r<&>zvpWBBMHf}uC8E{sJ zx<@Z^lnt~w?XF!;*$DD=>({JN13p|;6RUc;@Ry9MPEl7YkMg5UGiN$f1rIq5T&ShQMV)}5v+SJPovtob!hkM|3A{~q z0Pe*!GK966VCb;bPf{ZHq&QC7ILVLIurk>4D1?goGOa8Wc_%$+SMCKuXZ2~oP;Zs- zP}p!e%^_;0D`)<|H6jL~5{`Bb3sG-R?v@v;6h6j@*H?uK@ zR0oUgLNtalB`&!?jUzdGREjRKQQp%9(}gt@V|%yojw2M%$8bn4feViS8A#b#@Nb6M z{4Z%ls8$kmMyL}S*>3{8U<$;X=DP`LfqDCV`;vv)nMUzqzketgsSm8Wxn-S%WYxr(ra4DHpf|lx?(zWBr*y6E_c@hd~ zZH;(aDNBF5^rkzztJZL)G}KI&u^{myP0439e?Yo@jqll5%o`)`0GIVwv6q4R`ufvP z0sSi}J3xz9U_kLF@bc~SvMoY5ps(&{O{+(ZMdtey80`IrmWo(_TCCvZDX^x~LGQ}t zMQHZxaM?EUG=$~lm_owT)Ufv-+_8k{)E1rA3Qw1<-o<_UDQX(Gk1ShrCn!T?3(2QV zcd(8M@=NY>H;}?tk@nHjMFvQImu)tw*1R8P@NOXvtT~*oB$o3j;YjkO`2iW4 z^KXo30FK)A3CtKs<5=5pA+q-4Da-*pHvj|hMxOJg8>ktom-prjI@QjbkDE1sA+dE= zL0a~!A>QjNeLiXrB#-k&3#Ba@?(k12jwBaEy^OJCW0ndm>%?A8Ins_5ni!;DO=bMV znk<6;KTiCd6oAYU){ggU2IykPcnI|J<2(Wq9ZtUW#{xg`?*mxBbZy|o@F>m$cE_k) zPtiVv)+k%?XNW4m<}&V$ekXgS=%-$ zZ2y65B!*$dGKEFqTg3A%VI3&$CWY_WR{mVvUHM7O3L?s@nk$-D=T4>br*cj3j38QG z*_;$t>XuPNBdO1<1-z2LwD`wt?elg@*m6X@^7$f%MH@MliDcf}MI@57MsQ=4SWqc2 zg0Q>rN|g95-+{)39k4oc7}`P>FWQT`FaK$PD_Ea zPDmkM$-P5jYqBoFJINjli-=>p9mW$Qfq&)PkZAJzsd%v)-KnLa^ss+NCQ{~sMA+WX zErN(sfB@r&24$6A@A3V?_!@>`d(&(O;`lanJF<)YFtBE!?B!Evsc#(UoU x+`xDij}R#md()(|Eo=T5vKBrd+gg^3%n{g3`F|Xjh%CImpG}6n?%tbYe3jpjvCqw`M diff --git a/CMakeLists.txt b/CMakeLists.txt index 82eb68d..eaa3ec7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,8 +51,8 @@ add_library(${PROJECT_NAME} SHARED target_link_libraries(${PROJECT_NAME} ${rpkgs_LDFLAGS} "-lrt -ldl") configure_file(${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.pc @ONLY) -install(TARGETS ${PROJECT_NAME} DESTINATION lib) -install(FILES ${PROJECT_NAME}.pc DESTINATION lib/pkgconfig) +install(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR}) +install(FILES ${PROJECT_NAME}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) install(FILES include/sf_common.h include/csensor_module.h diff --git a/include/ccatalog.h b/include/ccatalog.h index 15ac885..3c6c95c 100755 --- a/include/ccatalog.h +++ b/include/ccatalog.h @@ -44,7 +44,6 @@ public: char *value(char *group, char *name); char *value(char *group, char *name, int idx); - char *value(char *group, char *name, void *handle); int count_of_values(char *group, char *name); void *iterate_init(void); diff --git a/include/common.h b/include/common.h index 422c394..150d2c0 100755 --- a/include/common.h +++ b/include/common.h @@ -49,45 +49,48 @@ void sf_log(int type , int priority , const char *tag , const char *fmt , ...); #define MICROSECONDS(tv) ((tv.tv_sec * 1000000ll) + tv.tv_usec) +#ifndef __MODULE__ +#include +#define __MODULE__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) +#endif //for new log system - dlog #ifdef LOG_TAG #undef LOG_TAG #endif -#define LOG_TAG "SensorFW" +#define LOG_TAG "SENSOR_FW" // #if defined(_DEBUG) || defined(USE_FILE_DEBUG) -#define DbgPrint(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG , "[SF_MSG_PRT][%s:%d] "fmt"\n",__FILE__, __LINE__, ##arg); } while(0) +#define DbgPrint(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG , "[SF_MSG_PRT][%s:%d] "fmt"\n",__MODULE__, __LINE__, ##arg); } while(0) #endif #if defined(USE_SYSLOG_DEBUG) -#define ERR(fmt, arg...) do { sf_log(SF_LOG_SYSLOG, SF_LOG_ERR, LOG_TAG, "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) -#define INFO(fmt, arg...) do { sf_log(SF_LOG_SYSLOG, SF_LOG_INFO, LOG_TAG,"[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) -#define DBG(fmt, arg...) do { sf_log(SF_LOG_SYSLOG, SF_LOG_DBG, LOG_TAG , "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) +#define ERR(fmt, arg...) do { sf_log(SF_LOG_SYSLOG, SF_LOG_ERR, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) +#define INFO(fmt, arg...) do { sf_log(SF_LOG_SYSLOG, SF_LOG_INFO, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) +#define DBG(fmt, arg...) do { sf_log(SF_LOG_SYSLOG, SF_LOG_DBG, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) #elif defined(_DEBUG) || defined(USE_DLOG_DEBUG) -#define ERR(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_ERR, LOG_TAG, "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) -#define INFO(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_INFO, LOG_TAG, "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) -#define DBG(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_DBG, LOG_TAG, "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) - +#define ERR(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_ERR, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) +#define INFO(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_INFO, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) +#define DBG(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_DBG, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) #elif defined(USE_FILE_DEBUG) -#define ERR(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG ,"[SF_MSG_ERR][%s:%d] "fmt"\n",__FILE__, __LINE__, ##arg); } while(0) -#define DBG(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG ,"[SF_MSG_DBG][%s:%d] "fmt"\n",__FILE__, __LINE__, ##arg); } while(0) -#define INFO(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG ,"[SF_MSG_INFO][%s:%d] "fmt"\n",__FILE__, __LINE__, ##arg); } while(0) +#define ERR(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG ,"[SF_MSG_ERR][%s:%d] "fmt"\n",__MODULE__, __LINE__, ##arg); } while(0) +#define DBG(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG ,"[SF_MSG_DBG][%s:%d] "fmt"\n",__MODULE__, __LINE__, ##arg); } while(0) +#define INFO(fmt, arg...) do { sf_log(SF_LOG_PRINT_FILE, 0, LOG_TAG ,"[SF_MSG_INFO][%s:%d] "fmt"\n",__MODULE__, __LINE__, ##arg); } while(0) #elif defined(USE_DLOG_LOG) -#define ERR(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_ERR, LOG_TAG, "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) -#define INFO(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_INFO, LOG_TAG, "[%s:%d] "fmt"\n", __FILE__, __LINE__, ##arg); } while(0) +#define ERR(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_ERR, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) +#define INFO(fmt, arg...) do { sf_log(SF_LOG_DLOG, SF_LOG_INFO, LOG_TAG, "%s:%s(%d)> "fmt, __MODULE__, __func__, __LINE__, ##arg); } while(0) #define DBG(...) #define DbgPrint(...) diff --git a/include/cprocessor_module.h b/include/cprocessor_module.h index 04ba069..b8bd123 100755 --- a/include/cprocessor_module.h +++ b/include/cprocessor_module.h @@ -30,6 +30,10 @@ class cprocessor_module : public cmodule public: static const int SF_PLUGIN_PROCESSOR = SF_PLUGIN_BASE + 20; + struct interval_list_t : public clist { + unsigned int interval; + }; + cprocessor_module(); virtual ~cprocessor_module(); @@ -59,24 +63,20 @@ public: virtual int get_property(unsigned int property_level , void *property_struct ) = 0; virtual int get_struct_value(unsigned int struct_type , void *struct_values) = 0; + int add_interval_to_list(int interval, unsigned long polling_interval); + int del_interval_to_list(int interval, unsigned long polling_interval); + int check_hz(int time_ms); + int norm_interval(int time_ms); + void lock(void); void unlock(void); protected: - struct event_callback_t : public clist - { - void *(*handler)(cprocessor_module *inst, void *data); - void *data; - cprocessor_module *inst; - bool (*rm_cb_data)(void *data); - }; - - event_callback_t *m_cb_head; - event_callback_t *m_cb_tail; - cworker *m_worker; cmutex m_mutex; + interval_list_t *m_interval_list_head; + interval_list_t *m_interval_list_tail; }; #endif diff --git a/include/cworker.h b/include/cworker.h index 830d0ee..95ab743 100755 --- a/include/cworker.h +++ b/include/cworker.h @@ -35,13 +35,15 @@ public: STARTED = 0x02, STOP = 0x03, TERMINATE = 0x04, - ENUM_LAST = 0x05, + INITIAL = 0x05, + ENUM_LAST = 0x06, }; cworker(void); bool start(void); bool stop(void); + bool stopped(void); bool terminate(void); worker_state_s state(void); @@ -69,6 +71,7 @@ private: static void *started(void *data); pthread_mutex_t mutex_lock; + pthread_cond_t th_cond; }; diff --git a/include/sf_common.h b/include/sf_common.h index 9f4540f..f10ad4a 100755 --- a/include/sf_common.h +++ b/include/sf_common.h @@ -29,7 +29,7 @@ #include #include -#define DEFAULT_SENSOR_KEY_PREFIX "memory/sensor/" +#define DEFAULT_SENSOR_KEY_PREFIX "memory/private/sensor/" #define MAX_KEY_LEN 30 #define MAX_DATA_STREAM_SIZE (sizeof(cmd_get_struct_t) + sizeof(base_data_struct) + 8) /*always check this size when a new cmd_type struct added*/ #define MAX_VALUE_SIZE 12 @@ -61,21 +61,25 @@ enum data_unit_idx_t { IDX_UNIT_LEVEL_1_TO_10, IDX_UNIT_STATE_ON_OFF, IDX_UNIT_DEGREE_PER_SECOND, + IDX_UNIT_HECTOPASCAL, + IDX_UNIT_CELSIUS, + IDX_UNIT_METER, IDX_UNIT_VENDOR_UNIT = 100, IDX_UNIT_FILTER_CONVERTED, }; enum sensor_id_t{ - ID_UNKNOWN = 0x0000, - ID_ACCEL = 0x0001, - ID_GEOMAG = 0x0002, - ID_LUMINANT = 0x0004, - ID_PROXI = 0x0008, - ID_THERMER = 0x0010, + ID_UNKNOWN = 0x0000, + ID_ACCEL = 0x0001, + ID_GEOMAG = 0x0002, + ID_LUMINANT = 0x0004, + ID_PROXI = 0x0008, + ID_THERMER = 0x0010, ID_GYROSCOPE = 0x0020, - ID_PRESSURE = 0x0040, + ID_PRESSURE = 0x0040, ID_MOTION_ENGINE = 0x0080, + ID_FUSION = 0x0100, }; enum packet_type_t { @@ -102,9 +106,25 @@ enum reg_type_t { REG_ADD = 0x01, REG_DEL = 0x02, REG_CHK = 0x03, + REG_CHG = 0x04, }; - +enum poll_value_t { + POLL_100HZ = 100, + POLL_50HZ = 50, + POLL_25HZ = 25, + POLL_20HZ = 20, + POLL_10HZ = 10, + POLL_5HZ = 5, + POLL_1HZ = 1, + POLL_100HZ_MS = 10, + POLL_50HZ_MS = 20, + POLL_25HZ_MS = 40, + POLL_20HZ_MS = 50, + POLL_10HZ_MS = 100, + POLL_5HZ_MS = 200, + POLL_1HZ_MS = 1000, +}; typedef struct { int id; //!< Select sensor diff --git a/libsf-common.manifest b/libsf-common.manifest new file mode 100644 index 0000000..41a9320 --- /dev/null +++ b/libsf-common.manifest @@ -0,0 +1,6 @@ + + + + + + diff --git a/packaging/libsf-common.manifest b/packaging/libsf-common.manifest new file mode 100644 index 0000000..017d22d --- /dev/null +++ b/packaging/libsf-common.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/libsf-common.spec b/packaging/libsf-common.spec index bf48681..cbceadf 100644 --- a/packaging/libsf-common.spec +++ b/packaging/libsf-common.spec @@ -1,11 +1,11 @@ Name: libsf-common Summary: Commonly used code and defintions for the sensor framework -Version: 0.3.6 +Version: 0.3.20 Release: 1 -Group: TO_BE/FILLED_IN -License: TO BE FILLED IN -Source0: libsf-common-%{version}.tar.bz2 -BuildRequires: cmake +Group: System/Sensors +License: Apache-2.0 +Source0: libsf-common-%{version}.tar.gz +BuildRequires: cmake, libattr-devel BuildRequires: pkgconfig(dlog) @@ -29,7 +29,7 @@ Sensor framework common library %build -cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} +%cmake . make %{?jobs:-j%jobs} @@ -38,8 +38,13 @@ make %{?jobs:-j%jobs} rm -rf %{buildroot} %make_install +mkdir -p %{buildroot}/usr/share/license +cp LICENSE %{buildroot}/usr/share/license/%{name} + %files +%manifest libsf-common.manifest %{_libdir}/libsf_common.so +/usr/share/license/%{name} %files devel diff --git a/src/ccatalog.cpp b/src/ccatalog.cpp index 9f6d285..9821988 100755 --- a/src/ccatalog.cpp +++ b/src/ccatalog.cpp @@ -297,6 +297,7 @@ bool ccatalog::unload(void) } + char *ccatalog::value(char *group, char *name) { group_t *grp; @@ -325,33 +326,6 @@ char *ccatalog::value(char *group, char *name) return NULL; } -char *ccatalog::value(char *group, char *name, void *handle) -{ - group_t *grp = (group_t*)handle; - - while (grp) { - if (!strcmp(group, grp->name)) { - break; - } - - grp = (group_t*)grp->next(); - } - - if (grp) { - desc_t *desc; - desc = grp->head; - - while (desc) { - if (!strcmp(name, desc->name)) { - return desc->value; - } - desc = (desc_t*)desc->next(); - } - } - - return NULL; -} - char *ccatalog::value(char *group, char *name, int idx) { group_t *grp; diff --git a/src/cipc_worker.cpp b/src/cipc_worker.cpp index f93074f..5af3d95 100755 --- a/src/cipc_worker.cpp +++ b/src/cipc_worker.cpp @@ -72,7 +72,7 @@ bool cipc_worker::start(void) m_state = START; pthread_mutex_unlock(&(mutex_lock)); - state = (ipc_worker_state_s)(int)m_func[START](m_context); + state = (ipc_worker_state_s)*((int *)m_func[START](m_context)); if (state == TERMINATE) { pthread_mutex_lock(&(mutex_lock)); @@ -127,38 +127,35 @@ void *cipc_worker::started(void *data) do { - state = (ipc_worker_state_s)(int)inst->m_func[STARTED](inst->m_context); + state = (ipc_worker_state_s)*((int *)inst->m_func[STARTED](inst->m_context)); if(state == TERMINATE) { pthread_mutex_lock(&(inst->mutex_lock)); inst->m_state = TERMINATE; pthread_mutex_unlock(&(inst->mutex_lock)); inst->m_func[STOP](inst->m_context); + delete inst; return NULL; } }while(state == START && inst->m_state == START); DBG("\n\n\n############Client worker thread END############\n\n\n"); + pthread_mutex_lock(&(inst->mutex_lock)); + inst->m_state = STOPPED; + pthread_mutex_unlock(&(inst->mutex_lock)); + delete inst; return NULL; } bool cipc_worker::stop(void) { ipc_worker_state_s state; + + state = (ipc_worker_state_s)*((int *)m_func[STOP](m_context)); + pthread_mutex_lock(&(mutex_lock)); - m_state = STOP; + m_state = TERMINATE; pthread_mutex_unlock(&(mutex_lock)); - DBG("Stop function [Client worker]\n"); - - state = (ipc_worker_state_s)(int)m_func[STOP](m_context); - - if (state == TERMINATE) { - pthread_mutex_lock(&(mutex_lock)); - m_state = TERMINATE; - pthread_mutex_unlock(&(mutex_lock)); - delete this; - return false; - } return true; } diff --git a/src/cprocessor_module.cpp b/src/cprocessor_module.cpp index dd08236..7725477 100755 --- a/src/cprocessor_module.cpp +++ b/src/cprocessor_module.cpp @@ -57,10 +57,13 @@ #include #include +#define BASE_GATHERING_INTERVAL 1000 +#define MS_TO_US 1000 + cprocessor_module::cprocessor_module() -: m_cb_head(NULL) -, m_cb_tail(NULL) -, m_worker(NULL) +: m_worker(NULL) +, m_interval_list_head(NULL) +, m_interval_list_tail(NULL) { ctype::set_type(SF_PLUGIN_PROCESSOR); @@ -107,28 +110,6 @@ bool cprocessor_module::stop(void) bool cprocessor_module::add_event_callback(void *(*handler)(cprocessor_module *, void *), void *data, bool (*rm_cb_data)(void *data)) { - event_callback_t *item; - - try { - item = new event_callback_t; - } catch (...) { - ERR("Failed to allocate memory\n"); - return false; - } - - item->handler = handler; - item->inst = this; - item->data = data; - item->rm_cb_data = rm_cb_data; - - if (m_cb_head == NULL || m_cb_tail == NULL) { - m_cb_tail = m_cb_head = item; - } else { - item->link(clist::AFTER, m_cb_tail); - m_cb_tail = item; - } - DBG("Event ADDED =======================\n"); - return true; } @@ -136,64 +117,13 @@ bool cprocessor_module::add_event_callback(void *(*handler)(cprocessor_module * bool cprocessor_module::rm_event_callback(void *(*handler)(cprocessor_module *, void*), void *data) { - event_callback_t *iterator; - event_callback_t *next; - bool found = false; - - iterator = m_cb_head; - while (iterator) { - next = (event_callback_t*)iterator->next(); - - if (iterator->handler == handler && iterator->data == data) { - event_callback_t *prev = (event_callback_t*)iterator->prev(); - - iterator->unlink(); - - if (iterator == m_cb_tail) { - m_cb_tail = prev; - } - - if (iterator == m_cb_head) { - m_cb_head = next; - } - - if (iterator->rm_cb_data) { - iterator->rm_cb_data(iterator->data); - } - - delete iterator; - iterator=NULL; - found = true; - break; - } - - iterator = next; - } - - return found; + return true; } void cprocessor_module::wakeup_all_client(void) { - event_callback_t *iterator; - event_callback_t *next; - - lock(); - iterator = m_cb_head; - while (iterator) { - next = (event_callback_t*)iterator->next(); - - if (this == iterator->inst) { - iterator->handler(this, iterator->data); - rm_event_callback(iterator->handler, iterator->data); - DBG("Wakeup all client $$$$$$$$$$$$$$$$$$$$$$$$4\n"); - } - - iterator = next; - } - unlock(); } void cprocessor_module::lock(void) @@ -208,4 +138,98 @@ void cprocessor_module::unlock(void) m_mutex.unlock(); } +int cprocessor_module::add_interval_to_list(int interval, unsigned long polling_interval) +{ + interval_list_t *interval_data = new interval_list_t; + interval_data->interval = interval; + + if(!m_interval_list_head && !m_interval_list_tail){ + m_interval_list_head = m_interval_list_tail = interval_data; + } else{ + interval_data->link(clist::AFTER, m_interval_list_tail); + m_interval_list_tail = interval_data; + } + + return (polling_interval > interval * MS_TO_US) ? 0 : -1; +} + +int cprocessor_module::del_interval_to_list(int interval, unsigned long polling_interval) +{ + interval_list_t *iterator = m_interval_list_head; + unsigned int min_interval = BASE_GATHERING_INTERVAL; + + //find interval passed by param and remove + while(iterator){ + if(interval == iterator->interval) + { + if(iterator->next() == NULL) + m_interval_list_tail = (interval_list_t*)iterator->prev(); + if(iterator->prev() == NULL) + m_interval_list_head = (interval_list_t*)iterator->next(); + iterator->unlink(); + delete iterator; + break; + } + iterator = (interval_list_t*)iterator->next(); + } + + //find min interval value in list + interval_list_t *iterator_min_search = m_interval_list_head; + + while(iterator_min_search){ + if(iterator_min_search->interval <= min_interval){ + min_interval = iterator_min_search->interval; + } + iterator_min_search = (interval_list_t*)iterator_min_search->next(); + } + + return min_interval; +} + + +int cprocessor_module::check_hz(int time_ms) +{ + if(time_ms >= POLL_1HZ_MS) + return POLL_1HZ; + else if (time_ms < POLL_1HZ_MS && time_ms >= POLL_5HZ_MS) + return POLL_5HZ; + else if (time_ms < POLL_5HZ_MS && time_ms >= POLL_10HZ_MS) + return POLL_10HZ; + else if (time_ms < POLL_10HZ_MS && time_ms >= POLL_20HZ_MS) + return POLL_20HZ; + else if (time_ms < POLL_20HZ_MS && time_ms >= POLL_25HZ_MS) + return POLL_25HZ; + else if (time_ms < POLL_25HZ_MS && time_ms >= POLL_50HZ_MS) + return POLL_50HZ; + else if (time_ms < POLL_50HZ_MS && time_ms >= POLL_100HZ_MS) + return POLL_100HZ; + else + { + DBG("Cannot support input time [%d]",time_ms); + return -1; + } +} + +int cprocessor_module::norm_interval(int time_ms) +{ + if(time_ms >= POLL_1HZ_MS) + return POLL_1HZ_MS; //1000ms + else if (time_ms < POLL_1HZ_MS && time_ms >= POLL_5HZ_MS) + return POLL_5HZ_MS; //200ms + else if (time_ms < POLL_5HZ_MS && time_ms >= POLL_10HZ_MS) + return POLL_10HZ_MS; //100ms + else if (time_ms < POLL_10HZ_MS && time_ms >= POLL_20HZ_MS) + return POLL_20HZ_MS; //50ms + else if (time_ms < POLL_20HZ_MS && time_ms >= POLL_25HZ_MS) + return POLL_25HZ_MS; //40ms + else if (time_ms < POLL_25HZ_MS && time_ms >= POLL_50HZ_MS) + return POLL_50HZ_MS; // 20ms + else if (time_ms < POLL_50HZ_MS && time_ms >= POLL_100HZ_MS) + return POLL_100HZ_MS;//10ms + else + { + DBG("Cannot support input time [%d]",time_ms); + return -1; + } +} //! End of a file diff --git a/src/csock.cpp b/src/csock.cpp index 8a14d89..5f189eb 100755 --- a/src/csock.cpp +++ b/src/csock.cpp @@ -49,7 +49,8 @@ extern int errno; - +const int MAX_CONNECT = 10; +const int DELAY_FOR_CONNECT = 10000; csock::csock(int handle, int mode) @@ -85,6 +86,7 @@ csock::csock(char *name, int mode, int port, int server) int domain; int type; sockaddr *sock_ptr = NULL; + struct timeval tv; m_start=NULL; m_running=NULL; @@ -212,6 +214,14 @@ csock::csock(char *name, int mode, int port, int server) } } } + else + { + tv.tv_sec = 3; + tv.tv_usec = 0; + + if( setsockopt(m_handle, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) != 0) + ERR("setsockopt fail"); + } } @@ -248,6 +258,7 @@ void *csock::client_ctx(void) bool csock::connect_to_server(void) { int type = (m_mode & SOCK_UDP) ? SOCK_DGRAM : SOCK_STREAM; + int i = 0; if (type == SOCK_STREAM) { int len; @@ -261,12 +272,23 @@ bool csock::connect_to_server(void) sock_ptr = (struct sockaddr*)&m_addr; } - if (connect(m_handle, sock_ptr, len) < 0) { - ERR("connect fail , m_handle : %d , sock_ptr : %p , len : %d ,%s\n",m_handle , sock_ptr , len, strerror(errno)); - close(m_handle); - m_handle = -1; - return false; + for(i = 0 ; i < MAX_CONNECT ; i++) + { + if (connect(m_handle, sock_ptr, len) == 0) + { + return true; + } + else + { + DBG("wait for accept worker"); + usleep(DELAY_FOR_CONNECT); + } } + + ERR("connect fail , m_handle : %d , sock_ptr : %p , len : %d ,%s\n",m_handle , sock_ptr , len, strerror(errno)); + close(m_handle); + m_handle = -1; + return false; } return true; @@ -428,6 +450,7 @@ bool csock::recv(void *buffer, int size) ssize_t recv_size; int total_recv_size = 0; + DBG("Recv message : data size is %d\n", size); if (m_handle < 0) { ERR("Invalid handle\n"); return false; @@ -438,6 +461,12 @@ bool csock::recv(void *buffer, int size) return true; } + if (size < 0) + { + ERR("invalid size of packet"); + return false; + } + if (m_mode & SOCK_UDP) { sockaddr *sock_ptr; socklen_t len; @@ -456,8 +485,8 @@ bool csock::recv(void *buffer, int size) DBG("recvfrom %s\n", (char*)buffer); } else { do { - recv_size = read(m_handle, - (char*)buffer + total_recv_size, size - total_recv_size); + recv_size = ::recv(m_handle, (char*)buffer + total_recv_size, size - total_recv_size, MSG_NOSIGNAL |MSG_WAITALL); + if (recv_size <= 0) { ERR("Error recv_size check fail , recv_size : %d\n",recv_size); close(m_handle); @@ -488,6 +517,12 @@ bool csock::send(void *buffer, int size) if (size == 0) { return true; } + + if (size < 0) + { + ERR("invalid size of packet"); + return false; + } if (m_handle < 0) { ERR("Invalid handle\n"); @@ -520,7 +555,7 @@ bool csock::send(void *buffer, int size) } else if (m_mode & SOCK_TCP) { DBG("TCP send enabled\n"); - send_size = write(m_handle, buffer, size); + send_size = ::send(m_handle, buffer, size, MSG_NOSIGNAL); if (send_size <= 0) { ERR("Error send_size check fail , send_size : %d\n",send_size); close(m_handle); diff --git a/src/cworker.cpp b/src/cworker.cpp index 09143fe..175eee7 100755 --- a/src/cworker.cpp +++ b/src/cworker.cpp @@ -37,25 +37,44 @@ #include #include -cworker::cworker(void) -: m_state(STOPPED) -, m_context(NULL) -, mutex_lock(PTHREAD_MUTEX_INITIALIZER) + cworker::cworker(void) + : m_state(INITIAL) + , m_context(NULL) + , mutex_lock(PTHREAD_MUTEX_INITIALIZER) + , th_cond(PTHREAD_COND_INITIALIZER) { register int i; - + int ret; for (i = 0; i < ENUM_LAST; i ++) { m_func[i] = NULL; } - + + ret = pthread_mutex_init(&mutex_lock, NULL); + if (ret != 0) { + ERR("pthread_mutex_init : %s",strerror(errno)); + throw EINVAL; + } + + ret = pthread_cond_init(&th_cond, NULL); + if (ret != 0) { + ERR("pthread_cond_init : %s",strerror(errno)); + throw EINVAL; + } DBG("processor worker created\n"); } cworker::~cworker(void) { DBG("----------Processor WORKER TERMINATED--------\n"); - + + pthread_mutex_lock(&(mutex_lock)); + m_state = TERMINATE; + pthread_cond_signal(&th_cond); + + pthread_mutex_unlock(&(mutex_lock)); + + pthread_cond_destroy(&th_cond); if (m_func[TERMINATE]) m_func[TERMINATE](m_context); @@ -68,41 +87,41 @@ bool cworker::start(void) int ret = 0; pthread_mutex_lock(&(mutex_lock)); - if (m_state == START) { - ERR("Already started\n"); - pthread_mutex_unlock(&(mutex_lock)); - return false; - } - m_state = START; - pthread_mutex_unlock(&(mutex_lock)); - - DBG("cworker start\n"); - - ret = pthread_create(&m_thid, NULL, started, this); - - if(ret != 0) + if(m_state == INITIAL) { - pthread_mutex_lock(&(mutex_lock)); - m_state = STOP; pthread_mutex_unlock(&(mutex_lock)); - ERR("thread create fail\n"); - return false; - } - else - { - ret = pthread_detach(m_thid); + ret = pthread_create(&m_thid, NULL, started, this); + if(ret != 0) { - ERR("thread detach fail\n"); + pthread_mutex_lock(&(mutex_lock)); + m_state = INITIAL; + pthread_mutex_unlock(&(mutex_lock)); + ERR("thread create fail\n"); return false; } else { - DBG("Thread creation for Processor worker END\n"); + pthread_detach(m_thid); } + + pthread_mutex_lock(&(mutex_lock)); } - + else if (m_state == START) { + ERR("Already started\n"); + pthread_mutex_unlock(&(mutex_lock)); + return false; + } + + ret = pthread_cond_signal(&th_cond); + if (ret != 0) { + ERR("pthread_cond_wait : %s",strerror(errno)); + } + + m_state = START; + pthread_mutex_unlock(&(mutex_lock)); + return true; } @@ -118,22 +137,17 @@ bool cworker::terminate(void) void *cworker::started(void *data) { cworker *inst = (cworker*)data; - worker_state_s state; + worker_state_s state = STOPPED; do { - state = (worker_state_s)(int)inst->m_func[STARTED](inst->m_context); - if (state == STOPPED) { - pthread_mutex_lock(&(inst->mutex_lock)); - inst->m_state = STOP; - pthread_mutex_unlock(&(inst->mutex_lock)); - ERR("Abnormal Situation: processor_plugin->working() returned STOPPED\n"); - return NULL; - } - }while(state == STARTED && inst->m_state == START); + state = (worker_state_s)*((int *)inst->m_func[STARTED](inst->m_context)); + + if(state == STOPPED || inst->m_state == STOP) + inst->stopped(); + + }while(state != TERMINATE); - DBG("\n\n\n#############Processor worker thread END###########\n\n\n"); - return NULL; } @@ -145,10 +159,17 @@ bool cworker::stop(void) pthread_mutex_unlock(&(mutex_lock)); return false; } - m_state = STOP; pthread_mutex_unlock(&(mutex_lock)); - DBG("Stop function for Processor worker END "); + + return true; +} + +bool cworker::stopped(void) +{ + pthread_mutex_lock(&mutex_lock); + pthread_cond_wait(&th_cond, &mutex_lock); + pthread_mutex_unlock(&mutex_lock); return true; } -- 2.7.4