From c0d0f9ed3016026c01afde349aad0f3bf4c48cde Mon Sep 17 00:00:00 2001 From: Graham Jones Date: Mon, 27 Jun 2016 22:45:43 +0100 Subject: [PATCH] Added receiving of raw data - not working yet - numSamples wrong and null pointer exception converting to AccelData class. --- app/src/main/assets/pebble_sd.pbw | Bin 50109 -> 53175 bytes .../uk/org/openseizuredetector/AccelData.java | 69 +++++++++++++++ .../uk/org/openseizuredetector/SdData.java | 4 + .../SdDataSourcePebble.java | 83 +++++++++++------- 4 files changed, 124 insertions(+), 32 deletions(-) create mode 100644 app/src/main/java/uk/org/openseizuredetector/AccelData.java diff --git a/app/src/main/assets/pebble_sd.pbw b/app/src/main/assets/pebble_sd.pbw index e1707673fa68c766d8db3cbf482ab7a2360dfadb..101fbfa4f70ab4d46ca1c2fca1e0889420a20805 100644 GIT binary patch literal 53175 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

Q}FTNn>iJ8nNtIVs#bvRD+VtH@xrO$gl@Gdtm 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 literal 50109 zcmeHw3wTpi*7iQRv}qgK&=x5zm(v!om4cxy_giymXnI;wO2G(d6PjSEy~JJ=3fQ9f z4LULwidsM&$J^*ALKPfzXoHB#cm+{E6_5yCFm;$yD3UgXeD6LU5S@Ew7$%Yi)Ja zsz?@}6tFn^%G#9aY=9v!ZS|FvE5T9=W!7Y{fwFbhnp^C3MHSY%<<&Knw9XPi5L8rA zUT04UmK9jbthLsPx+_>^4r|42DMGEA`qkFgm)oE#MV&P*OT9dE^7yPNQ>^2&ty#A5 zR%@1h{PL`26Q|j;Gbff!v-K-WskGPDT5qxc(|s?iu5?_=@ z8LCuKU3E);qfYy>Wfk_)+RLK|*3?zoXs;&sTcp-eT~qhVweGam!H!NRstlMkfxFyV zMl~(BR@BqxhYUQa!palg;L-`RWZvOf6O3+f;yHk zf!7B{G9G=Hu&lhQNL!#ODk4NhnOGA0@g(|K7g65TNk~;E!?c}m8kKaU?K~N!JYrOodep?^nW>baJ(EXY z9DBYgritI$w6}|x6s}TFk+P_Z5KX6SzQ!YG)a|970%eXy13iPgn?})I{&09BPhw;) z#z5G%-nHixE;j3_t|;j%U93d;r7}}-T+$V<+~1{?Fuh7XxmVJqbb}-L+_k@pRWiu4 zy~@60E{#XYH0OMi_@s+LYw0?5d$mU<8#QzIm&)wuW3sMz*#T%|du2T8oXhb@Npi33 zT&_ooULELC2Bi{6Wr8%_pl(MAo~E18!+W}$;=){OyPF0x+03kY-_!X_aM2k}KXiG% z<%j5e%Ur_@D%9KPk;aU4kz~Tsk(Vr$AI>30O`1ysuTi(hpKp@QbTQ|f2CLhtt#kQH z8cny8fyIfso$5~%^w2hjyP^ydLy?Ec4s#WIq?4#-O*ctaw-Z;hU_X-VoC^=^ZnDX` zGG)*q2biMouP#@iy*yWrmX?`~GFr^yNyg-v2uPfxT(Nwku7z(jt>rEAopU##g?Jau z2imaI(f%f56fEkZR}zIwkf7B__vJi1H&^m$z+3x!R_fWfbWZoNmrT4=QtCOTOmImv z`%_8hF$rc>N_wSzY%iS)>7^V`G-e7ju7Be@;&Sdb@qT4Nx4UAvXK={~*KkkV!p$CK z%tHX-zw&12v5vx$Jq7bqJp~KUlSv7Jy)>9N9cFOqp(lKj52X{c^sWEhhg=sx+Cu=+l=bJolu{oZb zi%gymC+zCFs9f*bd){3=^7D>&g#fjZ7Xcl!y$~)eKl)u)2_2!8qH0-KYNOeY#UFL;KNm-O+uR@awUI zOS4RT)52U&T%67mTZUDWlIs~fB-f*|n>=J}H2V6OR^fVBtM9rflfjE5A1_guJeiVL z6YZT+d4M)`H>phBB;(aiNpyXuG&;rgYGS=1$D<^{vOnW5{RRG`zra667J9;>6Aqa? za`fz)dXp#Y8k6Tusm@beYx3;J`Wrrc-(k8FM;+F9h_Lg(!UeB>PkGprb%ed_-E)50 z@zU;2DRwvXS2=KRceZ1^^XB2&6#t99-TYlH`m*6WI>U6n6v8ae>7KEJ<|66rWjA(b z@1XP7*ga+ko!yM@X)cV;=A=2@7hj^hl>jiOo*-}R?tCfsdt8Mj zvFAzbkdFs{THU>(_La_M#j#(QJa44xaFy11iWXpBGNodFNx%;1oGbX$T(qy2ABH4H z;i|^}{e0rOmK*;Auer8hm43B8(IGXEF*#@bL(|=_Yr~JHa3p1wKGBlQF-TM0kFWgd zwO4v1O|SHjeS5k{%pTXlE~3EI5Y+p)iXPA>%zLFr*7WR+m!${vW4*Eam`r9;Ox6bN zk)tY(YGkIxq)2=WiRK8deW%PtURhGJR)_z44olW2Hr>5qtF!$yzm~XOOeI7DYzEc? z>u?XFMOuKANtO08=g@!CL&isTs+w2o6|ADg#7iQT&2bx5UoY@RIgfbBK51u^>}H4E zq3jHYmpT-0dP&neoyzdAPPw8!iEV2=Q zxmZ8avJ^eh=6-#o{d;9=+?McOa_-HpCdqtns(QXRg^g?(vMpj${8k0Vr_;x5R&+|_ z(Jg}>A)}kz(XG*2$c@p%()l%(n5{9}Vs9Kd zOwlQ0WSb(k)i@4&W&5HwUT%kKjocz@9jKMk`x2$iPDh}3vet+#AN)X4FPC9jX^#^V z%wCyV+PXwFEWzZdP)4=pd1b2o=!?c8-4fHfBypKuI)BiX8q46VvD@xT7_{+k34^vM zw#K$@)XMb!?iD+jDRhQRx&H3OJCxf@p8QB=hOz~-oU8cUWhaRMc!-`={z9cXvy(rTRwAC zI6kpdS(q$E=3lfQ9O2ugoGgEpew%rLS52I_A9s!-qyj!aW%uZU(cEhNDf4J!k|RHb zw4`ze*;D3~`XmR_l8n{G@RhwRchbyqv5r&bB*#|mNN!aADf2VtVaG@2|G_*mKf>{( zIo7dJJNS5_BgrVuOte_d5sv${%yCJI+?`+ysjTX}l z&k4EBJuA6}yi?|hjzov4yPFu!*Q?5&2-)^&+LhIYP=~!p`Y@@vMO~vQfr9Sr(RfI31hw(8RbG=zAaf}&*+Ml(TC}>kMvQf})%>{c+__D@zO#{*85W(9wCG@&mHNL5;|lMQ zZ~GE$V5Z%(Iky?#6dX+kse7R}i!fQS3AMRBN8jj-W~i;Ea8r%cS}XNr(<=R;6!-^@&0t37}8DE6Lr@r`k#kLSyBwO(1wSBHn^lhg)%oFyrr{vR&v zA3O0~zYe}p0pAz`zla4a$kVlA2IyKj1{qz~)Q22E8n6_|237+(*AOxWW$1dk09pn> z4RHdF;e^}_D0W8}BVe;mSZpO-|K4y|mN+RrzsJV5pH}2B{GvUIA%sMuezMo^ml|c9 z4VG#UtX#5(@?!zYXTZNh;OFi633Xxy@M{GA%spR$9|iuD-KmAC@a%NM-H=d=Pw+C& zG5iTHlN@PaT1ONx{6g;tVSP)I6IU>;3}5I?qQ7+l24(&u)Jk{gR+xPh;<<`wq1!wc}EN z+K}3<1!YF<&Nt?Bt*A$>K=>nmDSEvQy_Td%TM6&;>kGn?8G%0U*9!d~mW(?j$iDZ_ z;lj}?Df&-%w|^$52<5);Pv=yj+{gYY+~82|J^v&wB9uGe&*UOQxpu#riwfml^^fOb zL%AJ(!awNW;3Z_=x$smVXMc*co{X}pYo@0($-Vv1oV;c5Bo=PLqhc* z^pD`K3FX%N6S<+G+**GEml(=5_=j*wp;Ti9!cIr0{;2Z4gQ(->~K>e5cG4)}( zpVNIk50C+H$^WUrwDU4)UP%WKEr=+;eVJ;coXghHm%Xi z42^oPzDIxFo$9c$q-B~xXGl*WJn^SGm>G%V$k}h3PMnV8$C6XQe@SF6=GRK9$f^*J z%GLuD$&+LU*-IWG({ZQv8L2W>3%;Kr^x(5g{tMnqd)>DgZxgs`f%_h~8!xrFZ!tOq zZnnVPcj-B|J%3kExcX0Kn=uZ%dYK@d4(S%RH7KzN5{n?24ao!Un}d>@1j$lCqJ^Z< zy*MbjQIOmyNDPqFxNitb773Dtf+QajyL&-UQY=V{1<5=}%eVh$fK6)h} zyyN0H2fhBaXa{|{j+4XQiI#h~dyMpcF#-F8<I};`%Uvd_{ao9c!n=%A zYc=jJ>0L@dm-b>q{y0a2KGxBqjrj6*ZbeATtShwC;=U}&LB`#2$bX^1=foXpk|V0k ze<9N6zwktFCH?;A$b78=*U4B1a~*S7nv!U_RVbD9+EUID(i(edxxi({g&khR*+TrV zOUnel1pFe-65{t>yjkE&!O!QGhWKYLE*AI;+HMS5K+Bm!(i0aK1*HqQFu^`ExCJ5U zp^NhcX;NE}(BG6claRJ(8H{diUm>K4jsp6>rJ%4NpIVK{8fT&R*DYGxE`9Zf75IEBGAX- z)1APF$gAO}7eUi&=8wp41pPJeDCm<&S;&`x&IcX`vVljyABpsCq+v*Fke-3BFGqS3 z>HC0>t^>$k0<8dlE7I=(T7EUsvp@$x*KG#yHOki@e*)=pq{omVAtm^4H1Is~^rJG8 z6xD8qjl(sB@W=WFAukQ)KJAOjXIOlD>~6T7TH~EQMZS~`=28PIt9>tV-GW6v256TO zas!~+9bFJDT;b`OIMAnr2UE(`7Zs#l?~4dhyZaOZ70?#8SAwz8{!=^B{?gBSfIgMj zxRda+`s9XmgX}rN|Kw};Ueny}jdzafy|0IieZH$Pa=SOdvfY~qjC>;Oh3($q&X&{Y z5Wl*ws-PM@sy3E*rA;gKxT^*CzCI=ys~Ob&edT$ecG4Z?MIU1@!)xmL0=XUSdCju>SeT%shUPl|%e?=lit1ry}y(+>NqNWZtGu2~Kw|mv7KN8rP zFNsSseuI6IwGjS&=w{&&ANtIOu}IJMG6s6pdfi94ZJ2>H!(h7NOoZoOcfwbxPdpz( z$m;<0jp6W<9He!~-vm$}31%#$ztKqz_wF2IkUTdGEgbC~!;#V0L)UNj zN^-ViT-)&^Bpx;i!B7xEk`l#Ty5Q*p|Kij{XeP8K^`UjWPZ*f&_8z60nenLh_)$3> z<2@wj!JG*yLNbA=yQ8`2f*3rjSgjx9*oJje*rqhnwVCOQ6223qTH-8I+am;CnvY3M zwS;5890A?|jQ6gfeH??ZM}f8>)gt|6ywcNGBr==M?!0 z<0?J9`Yb_jW81>eGsZ0!`uF+k*P!kpfX*3@n*=}b>vcL_KMCF61nZnY`M&{l{cktE z#Qkh;567ZgcnN<;kA+)j_{JRe0#ABezsx!N0p^eJ`@H@OdER+J-eH0FDtJm?evtR6 zz&}7w)9eF$ehG#y{jeihYjGyP}6a-=Om>?fC)}o!3kB zsfCKpV~=;5BNFL(ZxlNbdrg;DzAcs=2I@zznoGdF8KuATPT+Aj8{ z8l*q*rg4cu`a|znE-6SK^wK@-6z&qEgr^q7wIB-j2Jqol`1Mq*0}EgV9ss~5c>pe- zg8TuL*$*59rUOpkTm&K8prZ+8Zo<7Q1GMz`{Zy|7s0EBa`TaDNK_NvRuoO539*Z<) z7h}A5VV4VAOpt!bwK_yU=UN}4pL8{c=to_jgy@G|@z`GjdYWA`L-hTwoDjXvWe(AI zxmJYe6|U7Gy2jNMqAOgVhv?<5H2j$`px@%k2+@mO*&({bH8n)fbJd0DJXdpw*1Gr* zJ<~;S@d@ah>{5kjwQFyPzRq|0N#rrfpu+0>hqX=Cn9er{~qYh%;a9e66e zGkesy*L|%S*2uvVmKFcz`ogz->UT=2GJkXStE@%Mg_Gjg*C+3689g=g_yg1aeCF(Q z=j)4RK9jj;)}M_-=ZrX8n`0aKp=Qz>V{}CyH0U3k^g-@-KMtR3`>s4MYsfC+BNe{< zb0_8$99Xut@afa8d4+bLY4iJ8^Q&UZi~oMzwgvf-@0NW0^!bH7XGYvma$IYE#Ads3 z%gVbKFBtsTk`wH%rK=x%=cfBs|L4scUO82I{nQ^Vvq_irMds|X2Q&X(Huk>Lwj;jd z_EBp;TD~`?{g$-FT1BAe$cy>k3Ro!Rhy)=dW$O6 z`SyD!ogZgBe*3zNg*6|&8D4v+b9e2b$4cvRkI3pjy7!s-nL9LhtT%pf$I*Eecdmb} z_s+O=>sDkuAF;A6_5PLH&&V5=$k#Nami@iqG3iaK9z6Nhsx!Xy)yKK}R=0h4YW0sz z)7H!>y?@Q`mVdV9hn5j{wR}^0SKq?N?t1&%Pw#qjV?^Wm8>TisIC)v)*>S&V+%@@+ zjSnx}-?-s7pEtVR`=RmffU z>9q9e>^}~m)@d&*s=m`+GiywRjnq_^U(RTPHeiia<#njLpnh3dO*vjnyM?W*X02sq z_6mEAwGJ=zu{LX+mEc{#N@_4ueciI^6>P1&%Es2#qgZWi@)gYG*76FwEtwPsUN&TH zHPuchWzZ@MY~(c$ycV+lnl<(^d-)x-D&AP6W2d$Veu^B` zRdy)2z206+>#+-h^?$VxZTue#1glMr3;IYtqVp*VMbX`yl6e_KRjzG{&hG{y5uON@oNSCt0Z`0vDd#kmXeex-h~ro?C}E&1hQ z)B#I1x)S4}t9L_?2kQUgSg$Da3xgHP++duiH{Ed6?iMcmb(0rr=9LCaa>cxaUZI4$ z7Fw(7trcuwnU7~HtyKb9QeJ5fF2n$%$X-)kZ3{RV3%#tMm&Mu>%Ga`m^>ua|R(U1T zU~PC3OS?!*nK(kH&Ny!_<%TMQrh^np{NvlRWK7=lF@@8|EFfcy{e*4I7=rmTEiBgM zmKyb?b4?|AMqO!UHd!>rHUVCDHR04!t*JmybOk0IN3@!f5*AtlW7b)#u#~YP(JvSy zUGahID)e*{p}nOIHK3sk)>&Wcz(n6EY~<6~G0wm( z1But+?`yz{418xt>O{&SeG#bxC;|2Ydw|j4rvdc+-wdStkkZdLNY%(^15bmt0eaAG zqv2%KQ5(Y_u7bb$w3@WTEtLy7(2ZZJe zA@rfg2sGAv&Ci3g-$}?+-HSigQQ$qjpej5VEMJaC$pKv{{n^Vg?U@;D$}RRP`b^wz z)6ziylsbEDg%v^Tm-(7H@F!+Zo|Kg}aiTgKB0Scp2tJjfy-BIVv!~iR{C!|xL8==8 z^rgYbcA;RU^;U$}PiH4VhCdt#^pvUiS%H+YnlkV+Cue3(QcsyWl@_Q9M(AG|VotkO zTi!rp+b2$(q*l|)Hv6*rTWA9`L!Y?>Z3tG%Ky%W%bt|1h-2cEafPIB|e|bQGZf2{q z)tOW9I|LI^v%i~Hd)70cv)SrtnQML)Qa@l}yB%R56rnB$kzN)oPowokia7K)&7h~$zBK}#7sTX7F#h7}$KFUHi1G4*0heViCmFUHj4;jI`` zKQJ<1jHwr6>cyCPF{YkI@QN|@VobdlQ!mEUi!t?LOuZOWFUHi<-$@W->cyCPF{U0d z<3bd!7*o%RG4)rE+ZSW%1HYd@W8cM?dKz#q#?*^3^?2U=uNPBK-;oc#9(}bJt?3KU zVo*J`g7^_FAX-4QfM@~H0-^;(3y2mFEg)Jzw18*<(E|UT7Wn0$dKw8Id}uH*41ASv z!1+HBRln(a_kI0Q_4K%lpsxNn`hS_Q`m8Bg)70v01gsB;SO517tKa+4RLQ`wdMkdd zpw9kJgw;Efa!&nkhSe`fxNb|La>R}^fBxj7n&D}WoO=FCl^9kphSiH<_3GWGZZWK0 z467Hz>cyk#i@JyyRxcdhCx+FFVfA8Iy%<(6hSiH<^PM&$Abgs@D`3mWoH!SBgi~i$~Q@m_Wp%>i?IIs;6P~!Ple3uzJ`+{D>A1 zEg)Jzw18*<(E_3cL<@)(5G^2DK(v5pf&b4e@atjq!G{L_qpiTw>D-L=+w zeZPjQJ;EB;6RPKpozv6lQ!k3xEA%`xr(e%NuO3*Rj^v$$OjW=0(%+Zp|1>e~Q2i@B z`R57-Z5YY+n_@_RZKN01KCB7-#Ke_9&M;8L&uu}+(f`@Cc6U`s#s8@>1`cM|TF+e} zMZac^pZ`Kee@~j2$&DceziN)3|5!u6hKp@}-c9|2uPNIzozm%^W}9 e+4=|5#B8{%;AiHLhtX1l@UKjY*Yfw#+ fromDataArray(byte[] data) { + List accels = new ArrayList(); + for (int i = 0; i < data.length; i += 15) { + accels.add(new AccelData(Arrays.copyOfRange(data, i, i + 15))); + } + return accels; + } + + public long getTimestamp() { + return timestamp; + } + + public void applyTimezone(TimeZone tz) { + timestamp -= tz.getOffset(timestamp); + } +} + diff --git a/app/src/main/java/uk/org/openseizuredetector/SdData.java b/app/src/main/java/uk/org/openseizuredetector/SdData.java index 3959504..30f3e56 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdData.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdData.java @@ -50,6 +50,8 @@ public class SdData implements Parcelable { public short mFallThreshMin; public short mFallThreshMax; public short mFallWindow; + public long mSdMode; + public long mSampleFreq; public long alarmFreqMin; public long alarmFreqMax; public long nMin; @@ -148,6 +150,8 @@ public class SdData implements Parcelable { jsonObj.put("haveSettings", haveSettings); jsonObj.put("alarmState", alarmState); jsonObj.put("alarmPhrase", alarmPhrase); + jsonObj.put("sdMode",mSdMode); + jsonObj.put("sampleFreq",mSampleFreq); jsonObj.put("alarmFreqMin",alarmFreqMin); jsonObj.put("alarmFreqMax",alarmFreqMax); jsonObj.put("alarmThresh", alarmThresh); diff --git a/app/src/main/java/uk/org/openseizuredetector/SdDataSourcePebble.java b/app/src/main/java/uk/org/openseizuredetector/SdDataSourcePebble.java index 24b3442..ab726a1 100644 --- a/app/src/main/java/uk/org/openseizuredetector/SdDataSourcePebble.java +++ b/app/src/main/java/uk/org/openseizuredetector/SdDataSourcePebble.java @@ -38,6 +38,9 @@ import com.getpebble.android.kit.Constants; import com.getpebble.android.kit.PebbleKit; import com.getpebble.android.kit.util.PebbleDictionary; +import org.json.JSONException; +import org.json.JSONObject; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -46,6 +49,10 @@ import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.TimeZone; import java.util.Timer; import java.util.TimerTask; import java.util.UUID; @@ -63,7 +70,7 @@ public class SdDataSourcePebble extends SdDataSource { private Time mPebbleStatusTime; private boolean mPebbleAppRunningCheck = false; private int mAppRestartTimeout = 10; // Timeout before re-starting watch app (sec) if we have not received - // data after mDataUpdatePeriod + // data after mDataUpdatePeriod //private Looper mServiceLooper; private int mFaultTimerPeriod = 30; // Fault Timer Period in sec private PebbleKit.PebbleDataReceiver msgDataHandler = null; @@ -103,11 +110,14 @@ public class SdDataSourcePebble extends SdDataSource { private int KEY_MAN_ALARM_PERIOD = 27; private int KEY_SD_MODE = 28; private int KEY_SAMPLE_FREQ = 29; + private int KEY_RAW_DATA = 30; + private int KEY_NUM_RAW_DATA = 31; // Values of the KEY_DATA_TYPE entry in a message private int DATA_TYPE_RESULTS = 1; // Analysis Results private int DATA_TYPE_SETTINGS = 2; // Settings private int DATA_TYPE_SPEC = 3; // FFT Spectrum (or part of a spectrum) + private int DATA_TYPE_RAW = 4; // raw accelerometer data. private short mDataUpdatePeriod; private short mMutePeriod; private short mManAlarmPeriod; @@ -125,7 +135,7 @@ public class SdDataSourcePebble extends SdDataSource { private short mFallWindow; public SdDataSourcePebble(Context context, SdDataReceiver sdDataReceiver) { - super(context,sdDataReceiver); + super(context, sdDataReceiver); mName = "Pebble"; // Set default settings from XML files (mContext is set by super(). PreferenceManager.setDefaultValues(mContext, @@ -255,15 +265,15 @@ public class SdDataSourcePebble extends SdDataSource { mManAlarmPeriod = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() ManAlarmPeriod = " + mManAlarmPeriod); - prefStr = SP.getString("PebbleSdMode","SET_FROM_XML"); + prefStr = SP.getString("PebbleSdMode", "SET_FROM_XML"); mPebbleSdMode = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() PebbleSdMode = " + mPebbleSdMode); - prefStr = SP.getString("SampleFreq","SET_FROM_XML"); + prefStr = SP.getString("SampleFreq", "SET_FROM_XML"); mSampleFreq = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() SampleFreq = " + mSampleFreq); - prefStr = SP.getString("AlarmFreqMin","SET_FROM_XML"); + prefStr = SP.getString("AlarmFreqMin", "SET_FROM_XML"); mAlarmFreqMin = (short) Integer.parseInt(prefStr); Log.v(TAG, "updatePrefs() AlarmFreqMin = " + mAlarmFreqMin); @@ -325,7 +335,7 @@ public class SdDataSourcePebble extends SdDataSource { Log.v(TAG, "Received message from Pebble - data type=" + data.getUnsignedIntegerAsLong(KEY_DATA_TYPE)); // If we have a message, the app must be running - Log.v(TAG,"Setting mPebbleAppRunningCheck to true"); + Log.v(TAG, "Setting mPebbleAppRunningCheck to true"); mPebbleAppRunningCheck = true; PebbleKit.sendAckToPebble(context, transactionId); //Log.v(TAG,"Message is: "+data.toJsonString()); @@ -377,6 +387,16 @@ public class SdDataSourcePebble extends SdDataSource { mSdData.batteryPc = data.getUnsignedIntegerAsLong(KEY_BATTERY_PC); mSdData.haveSettings = true; } + if (data.getUnsignedIntegerAsLong(KEY_DATA_TYPE) + == DATA_TYPE_RAW) { + Log.v(TAG, "DATA_TYPE = Raw"); + long numSamples = data.getUnsignedIntegerAsLong(KEY_NUM_RAW_DATA); + Log.v(TAG, "numSamples = " + numSamples); + byte[] rawData = data.getBytes(KEY_RAW_DATA); + for (AccelData reading : AccelData.fromDataArray(rawData)) { + Log.i(TAG, "reading ts " + reading.getTimestamp()); + } + } } }; PebbleKit.registerReceivedDataHandler(mContext, msgDataHandler); @@ -439,14 +459,14 @@ public class SdDataSourcePebble extends SdDataSource { * variables to the watch. */ public void sendPebbleSdSettings() { - Log.v(TAG, "sendPebblSdSettings() - preparing settings dictionary.."); + Log.v(TAG, "sendPebblSdSettings() - preparing settings dictionary.. mSampleFreq=" + mSampleFreq); // Watch Settings final PebbleDictionary setDict = new PebbleDictionary(); setDict.addInt16(KEY_DATA_UPDATE_PERIOD, mDataUpdatePeriod); setDict.addInt16(KEY_MUTE_PERIOD, mMutePeriod); setDict.addInt16(KEY_MAN_ALARM_PERIOD, mManAlarmPeriod); - setDict.addInt16(KEY_SD_MODE,mPebbleSdMode); - setDict.addInt16(KEY_SAMPLE_FREQ,mSampleFreq); + setDict.addInt16(KEY_SD_MODE, mPebbleSdMode); + setDict.addInt16(KEY_SAMPLE_FREQ, mSampleFreq); setDict.addInt16(KEY_ALARM_FREQ_MIN, mAlarmFreqMin); setDict.addInt16(KEY_ALARM_FREQ_MAX, mAlarmFreqMax); setDict.addUint16(KEY_WARN_TIME, mWarnTime); @@ -474,57 +494,57 @@ public class SdDataSourcePebble extends SdDataSource { * @return true if they are all the same, or false if there are discrepancies. */ public boolean checkWatchSettings() { - boolean settingsOk = true; - if (mDataUpdatePeriod != mSdData.mDataUpdatePeriod) { - Log.v(TAG,"checkWatchSettings - mDataUpdatePeriod Wrong"); + boolean settingsOk = true; + if (mDataUpdatePeriod != mSdData.mDataUpdatePeriod) { + Log.v(TAG, "checkWatchSettings - mDataUpdatePeriod Wrong"); settingsOk = false; } if (mMutePeriod != mSdData.mMutePeriod) { - Log.v(TAG,"checkWatchSettings - mMutePeriod Wrong"); + Log.v(TAG, "checkWatchSettings - mMutePeriod Wrong"); settingsOk = false; } if (mManAlarmPeriod != mSdData.mManAlarmPeriod) { - Log.v(TAG,"checkWatchSettings - mManAlarmPeriod Wrong"); + Log.v(TAG, "checkWatchSettings - mManAlarmPeriod Wrong"); settingsOk = false; } if (mAlarmFreqMin != mSdData.alarmFreqMin) { - Log.v(TAG,"checkWatchSettings - mAlarmFreqMin Wrong"); + Log.v(TAG, "checkWatchSettings - mAlarmFreqMin Wrong"); settingsOk = false; } if (mAlarmFreqMax != mSdData.alarmFreqMax) { - Log.v(TAG,"checkWatchSettings - mAlarmFreqMax Wrong"); + Log.v(TAG, "checkWatchSettings - mAlarmFreqMax Wrong"); settingsOk = false; } if (mWarnTime != mSdData.warnTime) { - Log.v(TAG,"checkWatchSettings - mWarnTime Wrong"); + Log.v(TAG, "checkWatchSettings - mWarnTime Wrong"); settingsOk = false; } if (mAlarmTime != mSdData.alarmTime) { - Log.v(TAG,"checkWatchSettings - mAlarmTime Wrong"); + Log.v(TAG, "checkWatchSettings - mAlarmTime Wrong"); settingsOk = false; } if (mAlarmThresh != mSdData.alarmThresh) { - Log.v(TAG,"checkWatchSettings - mAlarmThresh Wrong"); + Log.v(TAG, "checkWatchSettings - mAlarmThresh Wrong"); settingsOk = false; } if (mAlarmRatioThresh != mSdData.alarmRatioThresh) { - Log.v(TAG,"checkWatchSettings - mAlarmRatioThresh Wrong"); + Log.v(TAG, "checkWatchSettings - mAlarmRatioThresh Wrong"); settingsOk = false; } if (mFallActive != mSdData.mFallActive) { - Log.v(TAG,"checkWatchSettings - mAlarmFreqMin Wrong"); + Log.v(TAG, "checkWatchSettings - mAlarmFreqMin Wrong"); settingsOk = false; } if (mFallThreshMin != mSdData.mFallThreshMin) { - Log.v(TAG,"checkWatchSettings - mFallThreshMin Wrong"); + Log.v(TAG, "checkWatchSettings - mFallThreshMin Wrong"); settingsOk = false; } if (mFallThreshMax != mSdData.mFallThreshMax) { - Log.v(TAG,"checkWatchSettings - mFallThreshMax Wrong"); + Log.v(TAG, "checkWatchSettings - mFallThreshMax Wrong"); settingsOk = false; } if (mFallWindow != mSdData.mFallWindow) { - Log.v(TAG,"checkWatchSettings - mFallWindow Wrong"); + Log.v(TAG, "checkWatchSettings - mFallWindow Wrong"); settingsOk = false; } @@ -557,7 +577,7 @@ public class SdDataSourcePebble extends SdDataSource { tnow.setToNow(); // get time since the last data was received from the Pebble watch. tdiff = (tnow.toMillis(false) - mPebbleStatusTime.toMillis(false)); - Log.v(TAG, "getPebbleStatus() - mPebbleAppRunningCheck="+mPebbleAppRunningCheck+" tdiff="+tdiff); + Log.v(TAG, "getPebbleStatus() - mPebbleAppRunningCheck=" + mPebbleAppRunningCheck + " tdiff=" + tdiff); // Check we are actually connected to the pebble. mSdData.pebbleConnected = PebbleKit.isWatchConnected(mContext); if (!mSdData.pebbleConnected) mPebbleAppRunningCheck = false; @@ -566,7 +586,7 @@ public class SdDataSourcePebble extends SdDataSource { // the app is not talking to us // mPebbleAppRunningCheck is set to true in the receiveData handler. if (!mPebbleAppRunningCheck && - (tdiff > (mDataUpdatePeriod+mAppRestartTimeout) * 1000)) { + (tdiff > (mDataUpdatePeriod + mAppRestartTimeout) * 1000)) { Log.v(TAG, "getPebbleStatus() - tdiff = " + tdiff); mSdData.pebbleAppRunning = false; Log.v(TAG, "getPebbleStatus() - Pebble App Not Running - Attempting to Re-Start"); @@ -574,7 +594,7 @@ public class SdDataSourcePebble extends SdDataSource { //mPebbleStatusTime = tnow; // set status time to now so we do not re-start app repeatedly. getPebbleSdSettings(); // Only make audible warning beep if we have not received data for more than mFaultTimerPeriod seconds. - if (tdiff > (mDataUpdatePeriod+mFaultTimerPeriod) * 1000) { + if (tdiff > (mDataUpdatePeriod + mFaultTimerPeriod) * 1000) { mSdDataReceiver.onSdDataFault(mSdData); } else { Log.v(TAG, "getPebbleStatus() - Waiting for mFaultTimerPeriod before issuing audible warning..."); @@ -628,10 +648,9 @@ public class SdDataSourcePebble extends SdDataSource { } } - - - - - } + + + +