From ac77aea88c9bf0d7db1d5d59a349d946d83b086f Mon Sep 17 00:00:00 2001 From: andrei1089 Date: Sun, 31 Jan 2010 19:16:42 +0200 Subject: [PATCH] Added option to log accelerometer data to file --- .pedometer_widget_home.py.swn | Bin 53248 -> 65536 bytes pedometer_widget_home.py | 57 ++++-- pedometer_widget_home.pyc | Bin 16812 -> 17861 bytes pedometer_widget_home.py~ | 408 +++++++++++++++++++++++++++++++++++------ 4 files changed, 398 insertions(+), 67 deletions(-) diff --git a/.pedometer_widget_home.py.swn b/.pedometer_widget_home.py.swn index 74f6212c3113e2602a18a917bbbc0f38f8203f4f..2cb7e73f64b76f24a6196a44e584b6d80b3c7ded 100644 GIT binary patch literal 65536 zcmeI53v^spd8j8TdA~zLd4-;g<7SjdBgsk}$F(SqEJunTGM1c_8fO^K97$u3W+wBn zBqz}DC?vfrp>VkmAe2&4AQbw5K+=@8D1-nPlJs6m!VQmJZj*8gA%TQd-jw_O`*F@b zGb3pn>{tqCmOpFeoc;XwKIiQJ-~ZlcZ{Jm;+q_HDYZ83UOeDU0&z>#6b@SyJw$ zvZZ|0FUX0-KaIVOQoXTw7&+Tp%T=@W-1Oe^TyLZ1S8KgGhu-P(jBmeJ{5-$vezj+| zke~AFJ$>o^-r!(HAIwOMbY*_&JmV0t1Y!vwfku6@XWePL2G;cVtxBHfJ@@Qgu~=dW z#1e=l5KADIKrDe+0Q3B(fkHIqQSa$4e-)cIIg3&$8vmOw0lSOT#GVhO|&h$Rq9AeMlU zKsKL9JP&35SW(7Nz{Lje?bmSK(o}8{P!*P{*8Km65a;;VITCv@$eN46c53NpaNys4Clg&;X4>C-U;u3 z8dPBmbU^|h!eDVbTn7hX54;lAz;ob13>@!+IoJ%ta4!4+L&<01?Jxs_umN5OKf|c< zF#H|d1-HU$;RYCi6g+|9<8k;r{5f0?S3??l;7s@d#-01%{cs~>VFRS$1n{DtnqQnu z=Ni?jU#eeTo=Z;`@_r^;ET+1Gkbbe|uMd7nbQP&yu4ju2L638#`G!k(I6uNO*FwPd#zzmlsx7`D8M$>EGWm71tF{HF6cn{uN>af*e5zD+e( zEZ6)@)xWmk*Xn-0D-@|pIGfL>X0nCS2%RWQ(;i7XZJm%tmQQd};;IgKRr|Pv3u`(|XMs(>StxMWdy^A# z87I5igfzWe1eB^(vN<};V80^>N50LX7-}zy#bY!JWAV@};#fR*i$I!#J0cm8LWDaDD+&m&znYm@D%SsCD{vMK>s$UH|^ODI8 zb$fmMbGo&P(t2l2n~S_D?F9o4H7BWWBa zCCBU8YCYMUP2fG5mK*o9UznP%Yx(K#O({o%&y@4N4lLgm3Q9S4;J9got;3rp)9vMy zN$%QOqQwG33{|K?sh--keRM*}T>{uoyMQCZqgRY{7IfR#rr{;hv^mLNm75)SL<)%~ zYDNmVaeT+{&_pPPAXcMPV6f6Qj#R8o3@!Wx;^;cIi6yPDKpd%Tn;5}mu|Twm(QU&! z7m8oxM=;n+oRhwr-oD5g8jbfeAQbMFCpXov|UoLS2 z*DyKaAM2KO>m?_4oktEt5C! zDVP0TuGw!UFZ(khIeU;RCn5U(K6J#NqDzYYFLUUhMvwnP$ikH%I{pBxffvFtAd~Um zM~{CH?uNgEn_xezhvVTmcnF>SLAVqC5DKsf&V^IqKhV`hkN+rq1a5>qumN5IKSOW- z2HXv|!aVE-(dl0ZFMwa5zds1?g8u{!sKeDT1ee1Fa3-7qPo9)W+zYqEt?(LH2WP@# z=<=V1_rR+m2Lo_C{409=qc9J1Ao~4_;6yk99z&o1JbVuBfLkC77sGGB9q9BQg&W~b zkbz-1A4J!eHu#COL;Q&)5KG`lOTaUqs$XwZOM2usJ~6x_vvqj;6%!-gh58ZoyXv87 z1FNSNk48PV(Yi$tKrBk~92KLLJjz0Ik{a(A4NZ+-7~)IFK?&wsW{TyhDZiR7lqSom zzGrqK<$!qJi~lYOof@Z)ib$L zJse0$a@Ho+6xl1(yi&RDRLbUUld&RELmL?>`&9=1jwNiCN09IJdo1}>4=Mt0RkNsk2`%UqjeDVo@*58+0Ricqj_U-2#)^d#~2sc&yeH_t-29Ck7_RufTsRWe*pc%WSbOzmCQ-6`c zN4i$@eJ#oK(Ae0{O_?i(Co-d=7+ke+YbXYhWj)OR$uH$orSfd_3QTx_WAA zWFxWcM;BuEnmslZq>(!4m>wjc3Dh46G~Yf@UnJ06Q=qx-`R;=hO0}O{!BrYxt|doe zx?9V&(XQu7XHV&Nkb6R($B?_eyQhDTx52xF%RX8$vf90SPq(Mp6P&FN?hbz_sYE3e z1dR05?fz`oTUsxkrVCX{@7{;(b>Q6L?t%9~~mV~sC`&giQ>C1w``bBP;T7wAgdeYPvhmG4VfptqJFtB(6moAyW zn#B`XyJP}Q(=N?2xFkrRy#$=elqR!NceB9Em9UC%=2W*gTR=6M7I_D zW_UOA_^69++vxU;sA?H0;<)s`bXd4(sF9t+<0E5RHxcNPKHW_vKy*H9)oix7AJcY1 zPT9{wISq7>)mkSjgr#i;k$J6EJj+UjDI|k&jwg#4Gnnlt=Dm8^t5p317|OiK?0(;< z%~C4qxguFfPWA9^m9l#kt3o$F%Lnb`mK_?j5vjh9t7`>Osbri(nek0q5>_x&NN#`S zTDp?0PpADk8p@bwohZ)DPLFEZnRBE@5pzv z-l)`p1v`*B(bQ*DjOL5sQY}Me90(qL(#cfl)~6z;`qF*<&RHdE5iF;YORtER*~xT$ z4r7ML#}TxOUYoD=DlmOw0l zSOT#GVhO|&h$Zl}Bp^zpM@;pX|FjRlZsTFFNBQWeW2sub3Yd)@W2p@-23uTHqoL)X zV}mBX91%5jb$U&Heej>y&r{xXxlyfQ$S9Qfzvky^Zd85}Pi%noykD$mLkqJ0?ez?L zYx|hEk?28PTDQNR`HI$-A)7UtrvXkEGnyMvE z#XjcyT4Qpu;P|;paCOSNkV%4a=|Dn`*v~3C;^P`HSuM|a$~B_qRj?HyC46SYP_%!h zcUnx$GlkyigpDVEb*fmL($r5ZX^22ImeT)m0Z&ZIqI&dyS+oBDdj9?JHW-JUa4~!j z{r(B~61*N>2YcXBcrHAJ9pQgM4XPmX{Lh7dW*+|=@K z5B!*Udhyl272XN2hO0pQ_50wLClLpBz-oAc`T57;ZrBTh@B(;*dHH{VSHSu3W9H!> zfcL_mLkZ4-$C!iv1l$bQzyR1e`7(3z>)=HA8om-Ag1>}1JRklI0p1DoFbCg5mUqM3 zK;*jhSlbrjezHS+{Hp32!LEjRv&;o$zU<tgi2|1lD zO<7M!B_pYJCZ`XF^@zmQQ%jk;KZjHMaA~T@jH#EJDReo~S~$Wszg}hfE46=S!SH%6 zqu7`!;r=d7$6Sy$znUsfjO`j4$&3$g#Yb>#r};995X83#L2kcdtK*^PmL+V4iE<-1 zJ#Kr3RAx}S*asrh(+y5P%2JX8eoA{9rS<7hMlHc@zCpJeStPLOb-F;tI`7D{CGpPs zpBpW#`qAxyBa3yvk%jx-h?$Kv9nX6y*V|>6cr%Wati+pw_NUkNdp(B`eC=8ld|h8> zsbA8kg0JnUFdHZb5!x5~2=)Atu}L zo%QrEQdrlc+s_y4<_q`oXeZy?$@{NYMnpw1VfsRmL3dOs0SJDorjvxZZd#2r( zQd4fbcG^1ZEGC+Sa2j78vg>%h@~>@B)2DVy%8b&)f5gl{InoJSVC}dxTb$>%iJ_#W2PWfo1z9KsH&8WOs)@gU z2ESu9UD+Ir29)eJsiH9ZA3X1*kmlKDCj7K(uj3)$1koPm!Kwo76D;$|vYT{T#|*P} zA_hL;wma_{O^d&SdAd5|eLeH4$8Nhu?KKnJUAjGH=d$iRtdonWf$9hCD_}wxKk4>i znkuQ6PFNX529a*ooIuDy_4wII1)YIcXH{$}oE;V}Fg$Szs7D1(5l1>GU+`ppT7}aK zL`>1-Ufs59$O)%d9h9oWPGPQg{U@_G%ZkiuMlEv`55Ve-b~mEMCcBd|waq1|m*?4A zh&PLKpt@<{Cg$8v9H}nd<5Xvy&{}!u6yYSH0t{(iAmk8+kt?CiEi;v^PMH~hb*;!c zU+xrjSzxNJeS1B+7m3s|Z3_Dts4uSE71t z5JlT?l>RUJ`sYCOfBq#NLf5|o=3oPy1>)=fFYqaN1MGq%oChbscZmOOlg@wVZv(bM z63&C4pzHq_{t3PW?}Z|~99{~)3130){|tN#?tnML>!A)cxC(ZG*ayyl)8R>M0b(Dx z0c1UY0k*?hI2X=_6X56A2*mII`|y|WL3jfcU^@(eUF-i7>;@0PgYXf!1#X5CTmx6Y z#qdJ-5jKTyfvgR<7d{4W0oeoKDo8^QoCM#;&hQoZC>#V?8}KUF0Aho95}U*Sg>S-_ z;ZBfs0u|T>zXkt+4dQY5D#+dde+zGh8Q21=APGOjE^!CE8*0!GFNV`W_5u)l#mC_t za1Hc9FZ?Ei3vkROpVBTn?geDbTIw26qZ#8%iqo$$+;J&8mJB&+`=j*yy{!I@EaaRs z*Vw%IdoaApBCe{<*O+v6Qo<2$ zo1-bhT*4lZzmX#Ren&-cMyXN&&y+wkQBwlXEkcl;Jvqpl`#C8yBVPVrqyBe<$FTw1 z*tu*mN6+98e!6Z-YubdEkA&!N6T%ov<>uS28+Cj1Bf8MRHa*q#=oY~hE*jMCSMtOC zv^}BSd<(RUc=Jkk?oyuY_1y*WAOI^O)~^Zw#|f&rLPDnOwR$i7`l}(%Dsl`daCLl>;x~fN^tJ}E^ z$TG}=_%cf-VdHgDJCddjx=mF>gjZYG4s9AC>;<}jdi_gdhFO825=tO)n(i1Jq!Svq zUO6M5T4Uy-!9qfP=f4FiL#Wn*N(~o~uX?Pscx56WXBh|MNg1+^t0fFUb=ix=X{Rt9 z$BDBw8S88tmZnWIGN7sxH>j&hTpA!)mJmHPAD-$DebQAd>3SwspFSnc*W~)D1F+?9vNs+cn8Y!Fa==RNHU8V|7d>%qu)q<^5G8kr)M?y`}$xS4ir_`QV z(>tLKFy_=td`;T+r`${utD+xIJivpLdEu4EdEJI$Dv=#DjD3Km#qRbvay@d0qT0n_ zC4V+GozGO%diqR#zJgj~eiZV9$>6KeA#F4X$O^3~6bf1=nt;B~*#*mbadU#(MJ6M% z&tzmBL^8vWrclaclIs(zyitZ;#bSB3CbN~eysN&cm2VlFWf_vuH!ww&e7xSvIod5v zvFI~;Z#Fa+1!Vr((iD)4afvjh0T1p;17tQKxV}HYR zAvIHZIhe+?YKU7ibr;7wK=QC3bzZigX}%OBKU3acaRxCGzg=9j&45vdT>DF#Du>-?UpcrVL`oKhFne$5 z)sJ0D|Gx*Fe~Ni(QU1^8&o9yUzYZUTo8U%x6=dKg@HqPZ`{0jZ9AusU{pk2_2hsT- zLYMy&kbU@WL`T06?n4KEKKvDWb}!tH?%V^npcj7;-S<2gN57Rl?mmrOEwkD*2|m2Q=a)}O16jM`op*m&S?l{yDDh<=YzjY9KA`S2a;u?dhXp^X#XCCB zBkog!S_FES`%IT&PV!feHIyXO!)NRX^-ScXF9Rwl*13M%6jdF2u_tR`_pa&kyj8sy zZcvt1td;opRm*b)6lK)G2K$R(xAM(1-n+2($d>s?rOpLrO?Zd3b?G&vOOi^0m24H2 z92LIi6$`8)&t(hMGJ1UuZE}izSq`uC$P!&XhmMY?a&0;*wubsNRw-0Y3>tfVZ?-DV znt3sMW<9$O{jindS8XfR5p6d_j7mWh!$nTb$Fl*6(aW4;1EGoUklS&Um#=1Ly($yz zd4wX(@^q?jXmPmJSFp^;{)-(Jm>3wwGVG|qYus_-QJp9~wqtnbM&<1~wrl5*U)3b$AzC4@O*M;7}RS8Dyvi_WymW**&TdTS~wIxH>ddXoLgOqUsD9(HN zvR^A*Q1@ob)%~H~x?Ignvj5+^(BHoSqW`0+Cmuz|zXxO=z}rCd|2Ki`2Y5MbgkRV= zgpWV51Y!xq5{M-bOCXj&EP+@8u>@iX#1e=l5KG{wO2D;1uzX&<2u8d|)Mks${*L&p zC`&*vOYZJ>tgMgG)9FHOV^LPzTDL68sI7*tx91Zhf_5XYFLN=*1bxs=MP(FOx)7RY z+;eu(f#WHnP6s{)veB^K6(KNt=m6r_5uOwM|96>>{~n0`pW@Gh==WcScf&q76COt2 z{|l(WWv~wZmbw1dz)ncPFPQKDIeZ=Ng115mw!#+ZhqK_nU}U%+u7e5ahnK*)@FRQ# zz65^*e+{#+4K9Q(P~|+Tohr^emOw0lSOT#GVhO|&h$XNhB;byO<-6H0E8>=nzg##% zG~WXc=5QuUg|UNa5|9lIhM0(V=GVfJsPWvD0jIpa!mbKXLsA(Pn~|<|<~4(2Cq@05 z5*y1MCrc$%Ho=%Z-Q@e)GN^Y)?Gjx+O-VF4$0k%5^PgVx6C7$uUUUXoqOF(kNadPd zb{m;Mbn9YvNx*TrUM&^YY(N*YyR}333g>AY@o`i`v zhX{ANS~!e$3Rx;8@hD#^jM2KnE^P~_rnjS;DK+mG5eZ7~QF~KK%c?KCM#J()LYh55 zu2!2+u+%|bZSAZWh=g^v7FlEmFB^sSG2P_o?kdA(8EiwRUnp(1>C*2pHG;7lB7_18 zg%;g6W}GhNl}pk+<=*0mY3Ue7E$%dq369(FB3X&gL#}-Icl{a-n{L4!YwQguta%5K zf(tRctlIQ!IjQ~sSEIY%45I&^!=L-m_dgD=fg;HJ|6T;g!9Sw+KLFzYe+$e*27V9D zg;U@$(vp1u{}Jv0mG+8wOvZ(bB@jy>mOw0lSOT#GVhO|&h$Rq9AeO*0Bmt}K*}rC+ zndJ7~jb0KZRc{y{sCNzQhM zu641zoH2>5Nv|1Ld)dI+HQ{S8ZM-l|*@HfsrnQ)f;u-F9}yem~LwS%#nZ8sFs|fa3cv zHUL@sFXv@1!1xnOAeKNZfmi~u1Y!xq5{M-bOCXj&EP+@8u>^kIB;e}v>iZHpKc~$e z9K0e5Ej%=WSi44KQ-2*6M49c5$b; z9H$)hf(iDnz@10*|5Mm^?+Q`;(f_aH&-c;uKLhW8Yhg2-3r{h(|0LW6H^Vis2L|9r z%=7;cWFNrW;Jt7y*!};1ir>Gy13>ov{~LG{?14Tw7LEbg|NnM42wOnb13ZS$|Gn@T zkaq!AVHjjD!SAwW;S=x>x9r*m z&eDFqEA-)2r;R(gk$O|E;)*PLk&nbEwgltW{ z$Z1uD7UyJj)OJ^TKv0aJl)(|@ZLPxVCY#uu3|~GKR(Y}Tx}$X#*7Uc|0-J8PP~foh z>-U=_ojtOH@|ylHB22NTSB{O}2YH)KAP80U@S-KS(j^KtGRau7Nip~kWl<;ilR5Ec=-FRTi8xKc+v>KA)&K%3wTy)z&hlydCgWe-N!>hWdYC}`go5R}Q|qhdGh+HYSN z+O(r^yP*2Dn;itSufXgesD2@32La971v&^Byi33d>(Ax<3T_yp|5q5ientkc=>Pmn ztV7qo6n3K5UxyCwqnpp5i)YZeuRjT&0CeU8dhtH=-!is?-OpkDKKu2b#eV&g&OIRd z`|m*?^upP27JQpDz6f7{55v{40e%No!^!Xzc{~gcz&&smd>B3iQ!oiHgVk^{NK3{a zR{}?S16H>zEBJe21(*FW7X6vt4)-t?{b(k2n0EC&npHTAc_$8IS}P{0L*HY0#Z+za zf*!7|q8HC)#hg9l9j{kR%@!|cV)4@}`0TH||M&{7yIb@Qw^4Vatl;m){d+TSYW4M; z?60sl{0f$XEjm}hWT9BhRM;(o_lx?TW4g9sR@C3t%i2rv(lG2W?tfh?R_COCdRLMP zZyS}?68-;5-m&+`=KX)D=!rYg``?P*KZD-?6#Dq5(6O&W=a+ZcKZd^lN9g-ML)Vu$ zH^D0jw+&>UzYE|+a4MVvPmti_a4)~Jc2C$ z9_~)8sOw~f6qfEDzBn)P0y@VOwnFN%%!`Sr+q{G^e0x}T@G{0__}a5&F56CvM;k29 zx3_g#fn^>pvCPZ2tc!QF-=(*#h0}TAj@l~$J1^q04w+cirCU~oTUjq?Tvnoc`h`h6 z{iweVF^|;iGM^=~JLI>1ivIsbbofsj{U6mju^;{aadh{s=;bp1ehzx^t?09-p|73_ zuVSuW!hZ_BK$tt>10eeS>)-%P!6b~r2zX$1{YS~<7O24Yqk;XLr*=hXQT_yW8SW?%xwp%+BQe-wFq8U6`A2Oorkkb{@O$?zol{Wsx$xDRfF z*TJjcrSLpB2fmG5-w$tvNjM+QfMej3*jqjbx5Lfwa##hedqF%)dh!aa2I|+d%Nn`@ z+n`;MX&3Q0bKVvE>@w=MtMdvxMl(fi(<`tJ&x#@^o)xuNQI(+Yx3QkO7Hh4Hsfj4> zLiY3OzqnidANu32s0y#p!qQIRgo10_o@X7x3a!%$D|T?HxK{_p#hze-A-q(?fj)hS qxnAN1I?^p2xjOp2ZqI3!So%j!`t2_X_x5BjiT>bfkSl{p(Ekrt+EcCo delta 552 zcmXBRPbk9y6u|K}zZv_3O%%rLPGS!7H%|W74zgWHldFE0DJGl7ftxn}DUsaNHj{%L zrWPknNX^MfQIc40eC5^Wy;rYyc)dVC8`x7yJ@v!AgZ8F6hY)6wzT`;1B~qGEG!lDP zicK10NHK5fRHh#iyD)bYt)%TyyVhB7lq2HP{%@%vi(2h(DH3Uh0k?%BXE=lp9jHMi ztjHFKyxV`@>qVZBz$(H};nMrLlBNPr`65@i!~tgEMi08t3LD_R0IZR*(UFbv^vO1AFM6rw|jKB&VGPxof2sV?vXoL+_&>+Q=*0F}ahs~f5KZ?jT Zc9cl+R1+%kIM9IpzZxs?EE@L%&R 1000: if self.unit == 0: - return str(meters/1000) + " km" + return "%.2f km" % (meters/1000) else: - return str(meters/1609.344) + " mi" + return "%.2f mi" % (meters/1609.344) else: if self.unit == 0: - return str(meters) + " m" + return "%d m" % meters else: - return str(meters*3.2808) + " ft" + return "%d ft" % int(meters*3.2808) def get_avg_speed(timer, dist): suffix = "" @@ -207,6 +213,12 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): widget.client.set_int(ASPECT, widget.aspect) widget.update_aspect() + def logButton_changed(checkButton): + widget.logging = checkButton.get_active() + print "logButton" + print widget.logging + widget.client.set_bool(LOGGING, widget.logging) + dialog = gtk.Dialog() dialog.set_transient_for(self) dialog.set_title("Settings") @@ -270,11 +282,17 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): UIPicker.set_selector(selectorUI) UIPicker.set_active(widget.aspect) + logButton = hildon.CheckButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT) + logButton.set_label("Log data") + logButton.set_active(widget.logging) + logButton.connect("toggled", logButton_changed) + dialog.vbox.add(button) dialog.vbox.add(modePicker) dialog.vbox.add(heightPicker) dialog.vbox.add(unitPicker) dialog.vbox.add(UIPicker) + dialog.vbox.add(logButton) dialog.show_all() response = dialog.run() @@ -310,12 +328,11 @@ class PedometerHomePlugin(hildondesktop.HomePluginItem): self.client.set_int(COUNTER, self.totalCounter) self.client.set_int(TIMER, int(self.totalTime)) self.button.set_label("Start") - self.desc.hide_all() else: - self.desc.show_all() self.pedometer = PedoCounter(self.update_values) self.pedometer.set_mode(self.mode) self.pedometer.set_height(self.height) + self.pedometer.set_logging(self.logging) self.time = 0 self.counter = 0 @@ -435,6 +452,7 @@ class PedoIntervalCounter: class PedoCounter(Thread): COORD_FNAME = "/sys/class/i2c-adapter/i2c-3/3-001d/coord" COORD_FNAME_SDK = "/home/andrei/pedometer-widget-0.1/date.txt" + LOGFILE = "/home/user/log_pedometer" COORD_GET_INTERVAL = 0.01 COUNT_INTERVAL = 5 @@ -446,6 +464,7 @@ class PedoCounter(Thread): counter = 0 stop_requested = False update_function = None + logging = False def __init__(self, update_function = None): Thread.__init__(self) @@ -457,25 +476,28 @@ class PedoCounter(Thread): def set_mode(self, mode): #runnig, higher threshold to prevent fake steps if mode == 1: - self.MIN_THRESHOLD = 600 + self.MIN_THRESHOLD = 650 self.MIN_TIME_STEPS = 0.35 #walking else: self.MIN_THRESHOLD = 500 self.MIN_TIME_STEPS = 0.5 + def set_logging(self, value): + self.logging = value + #set height, will affect the distance def set_height(self, height_interval): if height_interval == 0: - STEP_LENGTH = 0.5 + STEP_LENGTH = 0.59 elif height_interval == 1: - STEP_LENGTH = 0.6 + STEP_LENGTH = 0.64 elif height_interval == 2: - STEP_LENGTH = 0.7 + STEP_LENGTH = 0.71 elif height_interval == 3: - STEP_LENGTH = 0.8 + STEP_LENGTH = 0.77 elif height_interval == 4: - STEP_LENGTH = 0.9 + STEP_LENGTH = 0.83 def get_rotation(self): f = open(self.COORD_FNAME, 'r') @@ -500,6 +522,9 @@ class PedoCounter(Thread): coords[1].append(int(y)) coords[2].append(int(z)) now = time.time()-stime + if self.logging: + self.file.write("%d %d %d %f\n" %(coords[0][-1], coords[1][-1], coords[2][-1], now)) + t.append(now) time.sleep(self.COORD_GET_INTERVAL) pic = PedoIntervalCounter(coords, t) @@ -516,11 +541,19 @@ class PedoCounter(Thread): def run(self): logger.info("Thread started") + print self.logging + if self.logging: + fname = "%d_%d_%d_%d_%d_%d" % time.localtime()[0:6] + self.file = open(self.LOGFILE + fname + ".txt", "w") + while 1 and not self.stop_requested: last_cnt = self.start_interval() if self.update_function is not None: gobject.idle_add(self.update_function, self.counter, last_cnt) + if self.logging: + self.file.close() + logger.info("Thread has finished") def get_distance(self, steps=None): diff --git a/pedometer_widget_home.pyc b/pedometer_widget_home.pyc index d89dce8d050a2a2da379600a76f8ffc27ab65339..1e450c368cc29044878670e9fd6f49ca0506c69f 100644 GIT binary patch delta 6818 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 G=l=mIr`@Lj delta 5714 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 1000: + if self.unit == 0: + return str(meters/1000) + " km" + else: + return str(meters/1609.344) + " mi" + else: + if self.unit == 0: + return str(meters) + " m" + else: + return str(meters*3.2808) + " ft" + + def get_avg_speed(timer, dist): + suffix = "" + conv = 0 + if self.unit: + suffix = "mi/h" + conv = 2.23693629 + else: + suffix = "km/h" + conv = 3.6 + + if timer == 0: + return "N/A " + suffix + speed = 1.0 *dist / timer + #convert from meters per second to km/h or mi/h + speed *= conv + return "%.2f %s" % (speed, suffix) + + tdelta = timer + hours = int(tdelta / 3600) + tdelta -= 3600 * hours + mins = int(tdelta / 60) + tdelta -= 60 * mins + secs = int(tdelta) + + strtime = "%.2d:%.2d:%.2d" % ( hours, mins, secs) + + labels["timer"].set_label(strtime) + labels["count"].set_label(str(steps)) + + dist = self.pedometer.get_distance(steps) + + labels["dist"].set_label(get_str_distance(dist)) + labels["avgSpeed"].set_label(get_avg_speed(timer, dist)) + + def update_current(self): + self.update_ui_values(self.labelsC, self.time, self.counter) + + def update_total(self): + self.update_ui_values(self.labelsT, self.totalTime, self.totalCounter) + + def show_settings(self, widget): + def reset_total_counter(arg): + widget.totalCounter = 0 + widget.totalTime = 0 + widget.update_total() + hildon.hildon_banner_show_information(self,"None", "Total counter was resetted") + + def selector_changed(selector, data): + widget.mode = selector.get_active(0) + widget.client.set_int(MODE, widget.mode) + + def selectorH_changed(selector, data): + widget.height = selectorH.get_active(0) + widget.client.set_int(HEIGHT, widget.height) + + def selectorUnit_changed(selector, data): + widget.unit = selectorUnit.get_active(0) + widget.client.set_int(UNIT, widget.unit) + widget.update_current() + widget.update_total() + + def selectorUI_changed(selector, data): + widget.aspect = selectorUI.get_active(0) + widget.client.set_int(ASPECT, widget.aspect) + widget.update_aspect() + + dialog = gtk.Dialog() + dialog.set_transient_for(self) + dialog.set_title("Settings") + + dialog.add_button("OK", gtk.RESPONSE_OK) + button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + button.set_title("Reset total counter") + button.set_alignment(0, 0.8, 1, 1) + button.connect("clicked", reset_total_counter) + + selector = hildon.TouchSelector(text=True) + selector.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selector.append_text("Walk") + selector.append_text("Run") + selector.connect("changed", selector_changed) + + modePicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + modePicker.set_alignment(0.0, 0.5, 1.0, 1.0) + modePicker.set_title("Select mode") + modePicker.set_selector(selector) + modePicker.set_active(widget.mode) + + selectorH = hildon.TouchSelector(text=True) + selectorH.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selectorH.append_text("< 1.50 m") + selectorH.append_text("1.50 - 1.65 m") + selectorH.append_text("1.66 - 1.80 m") + selectorH.append_text("1.81 - 1.95 m") + selectorH.append_text(" > 1.95 m") + selectorH.connect("changed", selectorH_changed) + + heightPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + heightPicker.set_alignment(0.0, 0.5, 1.0, 1.0) + heightPicker.set_title("Select height") + heightPicker.set_selector(selectorH) + heightPicker.set_active(widget.height) + + selectorUnit = hildon.TouchSelector(text=True) + selectorUnit.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selectorUnit.append_text("Metric (km)") + selectorUnit.append_text("English (mi)") + selectorUnit.connect("changed", selectorUnit_changed) + + unitPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + unitPicker.set_alignment(0.0, 0.5, 1.0, 1.0) + unitPicker.set_title("Units") + unitPicker.set_selector(selectorUnit) + unitPicker.set_active(widget.unit) + + selectorUI = hildon.TouchSelector(text=True) + selectorUI = hildon.TouchSelector(text=True) + selectorUI.set_column_selection_mode(hildon.TOUCH_SELECTOR_SELECTION_MODE_SINGLE) + selectorUI.append_text("Show current + total") + selectorUI.append_text("Show only current") + selectorUI.append_text("Show only total") + selectorUI.connect("changed", selectorUI_changed) + + UIPicker = hildon.PickerButton(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL) + UIPicker.set_alignment(0.0, 0.5, 1.0, 1.0) + UIPicker.set_title("Widget aspect") + UIPicker.set_selector(selectorUI) + UIPicker.set_active(widget.aspect) + + dialog.vbox.add(button) + dialog.vbox.add(modePicker) + dialog.vbox.add(heightPicker) + dialog.vbox.add(unitPicker) + dialog.vbox.add(UIPicker) + + dialog.show_all() + response = dialog.run() + hildon.hildon_banner_show_information(self, "None", "You have to Stop/Start the counter to apply the new settings") + dialog.destroy() + + def close_requested(self, widget): + if self.pedometer is None: + return + + self.pedometer.request_stop() + if self.pedometer.isAlive(): + self.pedometer.join() + + def update_values(self, totalCurent, lastInterval): + self.totalCounter += lastInterval + self.counter = totalCurent + + tdelta = time.time() - self.time - self.startTime + self.time += tdelta + self.totalTime += tdelta + + self.update_current() + self.update_total() - def update_values(self, total, lastInterval): + def button_clicked(self, button): + print "button clicked" - print "update" + if self.pedometer is not None and self.pedometer.isAlive(): + #counter is running + self.pedometer.request_stop() + self.pedometer.join() + self.client.set_int(COUNTER, self.totalCounter) + self.client.set_int(TIMER, int(self.totalTime)) + self.button.set_label("Start") + self.desc.hide_all() + else: + self.desc.show_all() + self.pedometer = PedoCounter(self.update_values) + self.pedometer.set_mode(self.mode) + self.pedometer.set_height(self.height) - dist = self.pedometer.get_distance() + self.time = 0 + self.counter = 0 - self.labelLastCount.set_label(str(lastInterval)) - self.labelTotalCount.set_label(str(total)) - self.labelDistance.set_label(str(dist)) + self.update_current() - def button_clicked(self, button): - print "button clicked" - self.labelLastCount.set_label("updating") - self.labelTotalCount.set_label("updating") - self.labelDistance.set_label("updating") + self.pedometer.start() + self.startTime = time.time() + self.button.set_label("Stop") - self.pedometer.start() print "button clicked finished" - hd_plugin_type = PedometerHomePlugin - # The code below is just for testing purposes. # It allows to run the widget as a standalone process. if __name__ == "__main__": @@ -79,13 +339,9 @@ if __name__ == "__main__": obj.show_all() gtk.main() - - ############### old pedometer.py ### import math -import time import logging -import gobject from threading import Thread @@ -97,7 +353,6 @@ formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(messag ch.setFormatter(formatter) logger.addHandler(ch) - class PedoIntervalCounter: MIN_THRESHOLD = 500 MIN_TIME_STEPS = 0.5 @@ -114,6 +369,12 @@ class PedoIntervalCounter: self.z = coords[2] self.t = tval + def setThreshold(self, value): + self.MIN_THRESHOLD = value + + def setTimeSteps(self, value): + self.MIN_TIME_STEPS = value + def calc_mean(self, vals): sum = 0 for i in vals: @@ -173,17 +434,49 @@ class PedoIntervalCounter: class PedoCounter(Thread): COORD_FNAME = "/sys/class/i2c-adapter/i2c-3/3-001d/coord" + COORD_FNAME_SDK = "/home/andrei/pedometer-widget-0.1/date.txt" COORD_GET_INTERVAL = 0.01 COUNT_INTERVAL = 5 - STEP_LENGTH = 0.5 + + STEP_LENGTH = 0.7 + + MIN_THRESHOLD = 500 + MIN_TIME_STEPS = 0.5 counter = 0 + stop_requested = False update_function = None def __init__(self, update_function = None): Thread.__init__(self) + if not os.path.exists(self.COORD_FNAME): + self.COORD_FNAME = self.COORD_FNAME_SDK + self.update_function = update_function + def set_mode(self, mode): + #runnig, higher threshold to prevent fake steps + if mode == 1: + self.MIN_THRESHOLD = 600 + self.MIN_TIME_STEPS = 0.35 + #walking + else: + self.MIN_THRESHOLD = 500 + self.MIN_TIME_STEPS = 0.5 + + #set height, will affect the distance + def set_height(self, height_interval): + if height_interval == 0: + STEP_LENGTH = 0.5 + elif height_interval == 1: + STEP_LENGTH = 0.6 + elif height_interval == 2: + STEP_LENGTH = 0.7 + elif height_interval == 3: + STEP_LENGTH = 0.8 + elif height_interval == 4: + STEP_LENGTH = 0.9 + def get_rotation(self): f = open(self.COORD_FNAME, 'r') coords = [int(w) for w in f.readline().split()] @@ -201,7 +494,7 @@ class PedoCounter(Thread): stime = time.time() t=[] coords = [[], [], []] - while len(t) == 0 or t[-1] < 5: + while not self.stop_requested and (len(t) == 0 or t[-1] < 5): x,y,z = self.get_rotation() coords[0].append(int(x)) coords[1].append(int(y)) @@ -218,15 +511,20 @@ class PedoCounter(Thread): logger.info("Total number of steps : %d" % self.counter) return cnt + def request_stop(self): + self.stop_requested = True + def run(self): - while 1: + logger.info("Thread started") + while 1 and not self.stop_requested: last_cnt = self.start_interval() if self.update_function is not None: gobject.idle_add(self.update_function, self.counter, last_cnt) + logger.info("Thread has finished") + def get_distance(self, steps=None): if steps == None: steps = self.counter return self.STEP_LENGTH * steps; - -- 1.7.9.5