]> Pileus Git - ~andy/csm213a-hw/blob - syc/src/com/example/sycapp/MainActivity.java
Add Android app from Yue
[~andy/csm213a-hw] / syc / src / com / example / sycapp / MainActivity.java
1 package com.example.sycapp;
2
3 import java.io.BufferedInputStream;
4 import java.io.BufferedOutputStream;
5 import java.io.BufferedReader;
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.io.FileNotFoundException;
9 import java.io.FileOutputStream;
10 import java.io.IOException;
11 import java.io.InputStream;
12 import java.io.InputStreamReader;
13 import java.io.OutputStream;
14 import java.io.OutputStreamWriter;
15 import java.nio.ByteBuffer;
16 import java.nio.CharBuffer;
17 import java.text.SimpleDateFormat;
18 import java.util.Date;
19 import java.util.Locale;
20 import java.util.Map;
21 import java.util.Timer;
22 import java.util.TimerTask;
23 import java.util.Vector;
24
25 import android.os.AsyncTask;
26 import android.os.Bundle;
27 import android.os.Environment;
28 import android.app.Activity;
29 import android.app.AlertDialog;
30 import android.content.Context;
31 import android.content.DialogInterface;
32 import android.text.format.Time;
33 import android.text.method.ScrollingMovementMethod;
34 import android.view.LayoutInflater;
35 import android.view.Menu;
36 import android.view.View;
37 import android.view.View.OnClickListener;
38 import android.view.ViewGroup;
39 import android.widget.Button;
40 import android.widget.CompoundButton;
41 import android.widget.CompoundButton.OnCheckedChangeListener;
42 import android.widget.EditText;
43 import android.widget.Switch;
44 import android.widget.TextView;
45 import android.widget.Toast;
46 import android.hardware.usb.*;
47
48 public class MainActivity extends Activity {
49
50         //private String           fileNameExt = "logFile.txt";
51         //private String           fileName    = "logFile";
52         private FileOutputStream fout;
53         private FileInputStream  fin;
54         
55         // for serial
56         private SerialIO     serial;
57         private SerialIO     serial0;
58         private SerialIO     serial1;
59         private SerialIO     serial2;
60         private SerialIO     serial3;
61         private SerialIO     serial4;
62         private SerialIO     serial5;
63         private Timer        timer;
64         private final int    interval  = 100;
65         private final int    xvlTimeUp = 2500;
66         private long         currentSeconds;
67         
68         // for xively
69         private XivelyUL     xively;
70         
71         // TODO: need to be deleted
72         private EventGen     evtGen;
73         
74         private FileLogger   fileLog;
75         
76         
77         // view related
78         private Switch       logSW;
79         private Switch       xvlSW;
80         private Switch       evtSW;
81         private Button       startBttn;
82         private Button       logBttn;
83         private Button       xvlBttn;
84         private Button       evtBttn;
85         private EditText     fileText;
86         private EditText     xvlFeed;
87         private EditText     xvlKey;
88         private EditText     evtTrInt;
89         private EditText     newName;
90         private TextView     stream1;
91         private TextView     stream2;
92         private TextView     diffStr;
93         
94         private boolean      logEnable;
95         
96         private View         xvlView;
97         private View         evtView;
98         private View         logView;
99         
100         
101         //Display
102         private final int    LINENUM = 30;
103         
104         @Override
105         protected void onCreate(Bundle savedInstanceState) {
106                 super.onCreate(savedInstanceState);
107                 setContentView(R.layout.activity_main);
108                 Util.debug("Program Start!!");
109                 
110                 LayoutInflater viewGen = LayoutInflater.from(this);
111                 //LayoutInflater viewGen = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
112                 this.xvlView = viewGen.inflate(R.layout.xively_cfg_layout, null, false);
113                 this.evtView = viewGen.inflate(R.layout.one_alert_layout, null, false);
114                 this.logView = viewGen.inflate(R.layout.one_alert_layout, null, false);
115                 
116                 this.timer = new Timer();
117
118                 // initial layout
119                 this.logSW   = (Switch)   findViewById(R.id.logSwitch);
120                 this.xvlSW   = (Switch)   findViewById(R.id.xvlSwitch);
121                 this.evtSW   = (Switch)   findViewById(R.id.evtSwitch);
122                 this.logBttn = (Button)   findViewById(R.id.fileBttn);
123                 this.xvlBttn = (Button)   findViewById(R.id.xvlBttn);
124                 this.evtBttn = (Button)   findViewById(R.id.evtBttn);
125                 this.startBttn=(Button)   findViewById(R.id.startBttn);
126                 this.stream1 = (TextView) findViewById(R.id.dataStream1);
127                 this.stream2 = (TextView) findViewById(R.id.dataStream2);
128                 this.fileText= (EditText) findViewById(R.id.fileText);
129                 this.xvlFeed = (EditText) xvlView.findViewById(R.id.xvlFeed);
130                 this.xvlKey  = (EditText) xvlView.findViewById(R.id.xvlKey);
131                 this.evtTrInt= (EditText) evtView.findViewById(R.id.oneLineEdit);
132                 this.newName = (EditText) logView.findViewById(R.id.oneLineEdit);
133                         
134                 this.logSW.setOnCheckedChangeListener(new SwitchChangedListener()); 
135                 this.xvlSW.setOnCheckedChangeListener(new SwitchChangedListener());
136                 this.evtSW.setOnCheckedChangeListener(new SwitchChangedListener());
137                 this.startBttn.setOnClickListener(new ButtonClickListener());
138                 this.logBttn  .setOnClickListener(new ButtonClickListener());
139                 this.xvlBttn  .setOnClickListener(new ButtonClickListener());
140                 this.evtBttn  .setOnClickListener(new ButtonClickListener());
141                 
142                 /*logSW  .setEnabled(false);
143                 xvlSW  .setEnabled(false);
144                 evtSW  .setEnabled(false);
145                 logBttn.setEnabled(false);
146                 xvlBttn.setEnabled(false);
147                 evtBttn.setEnabled(false);*/
148                 
149
150                 
151
152
153                 
154                 //try {fout   = openFileOutput(fileName, Context.MODE_PRIVATE);
155                 //     fin    = openFileInput (fileName);} 
156                 //catch(Exception e) {Util.debug("[M#1]"+e.toString());}
157                 this.serial = new SerialIO(fout);
158                 //this.serial0= new SerialIO("/dev/ttyO0");
159                 this.serial1= new SerialIO("/dev/ttyO1", 1);
160                 this.serial2= new SerialIO("/dev/ttyO2", 2);
161                 //this.serial3= new SerialIO("/dev/ttyO3");
162                 this.xively = new XivelyUL();
163                 this.evtGen = new EventGen();
164                 this.fileLog= new FileLogger();
165                 
166                 //logEnable = true;
167                 xively.setEnable(false);
168                 evtGen.SetEnable(false);
169                 fileLog.setEnable(false);
170                 
171
172                 //stream1.setMovementMethod(new ScrollingMovementMethod().getInstance());
173                 timer.scheduleAtFixedRate(new MainCycle(), 0, interval);
174                 
175                 
176                 /*stream1.append("aa\n");
177                 stream1.append("bb\n");
178                 stream1.append("cc\n");
179                 stream1.append("dd\n");
180                 stream1.append("ee\n");
181                 stream1.append("aa\n");
182                 stream1.append("bb\n");
183                 stream1.append("cc\n");
184                 stream1.append("dd\n");
185                 stream1.append("ee\n");
186                 stream1.append("aa\n");
187                 stream1.append("bb\n");
188                 stream1.append("cc\n");
189                 stream1.append("dd\n");
190                 stream1.append("ee\n");
191                 stream1.append("aa\n");
192                 stream1.append("bb\n");
193                 stream1.append("cc\n");
194                 stream1.append("dd\n");
195                 stream1.append("ee\n");
196                 stream1.append("aa\n");
197                 stream1.append("bb\n");
198                 stream1.append("cc\n");
199                 stream1.append("dd\n");
200                 stream1.append("ee\n");
201                 stream1.append("aa\n");
202                 stream1.append("bb\n");
203                 stream1.append("cc\n");
204                 stream1.append("dd\n");
205                 stream1.append("ee\n");
206                 stream1.append("aa\n");
207                 stream1.append("bb\n");
208                 stream1.append("cc\n");
209                 stream1.append("dd\n");
210                 stream1.append("ee\n");
211                 stream1.append("aa\n");
212                 stream1.append("bb\n");
213                 stream1.append("cc\n");
214                 stream1.append("dd\n");
215                 stream1.append("ee\n");
216                 stream1.append("aa\n");
217                 stream1.append("bb\n");
218                 stream1.append("cc\n");
219                 stream1.append("dd\n");
220                 stream1.append("ee\n");
221                 stream1.append("aa\n");
222                 stream1.append("bb\n");
223                 stream1.append("cc\n");
224                 stream1.append("dd\n");
225                 stream1.append("ee\n");
226                 stream1.append("aa\n");
227                 stream1.append("bb\n");
228                 stream1.append("cc\n");
229                 stream1.append("dd\n");
230                 stream1.append("ee\n");
231                 stream1.append("aa\n");
232                 stream1.append("bb\n");
233                 stream1.append("cc\n");
234                 stream1.append("dd\n");
235                 stream1.append("ee\n");*/
236                 
237                 
238                 
239                 /*String longText = "aaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbb\ncccccccccccccccccccc\n"+
240                                                   "dddddddddddddddddddddd\neeeeeeeeeeeeeeeeeeee\nffffffffffffffffffff\n"+
241                                                   "gggggggggggggggggggggg\nhhhhhhhhhhhhhhhhhhhh\niiiiiiiiiiiiiiiiiiii\n"+
242                                                   "jjjjjjjjjjjjjjjjjjjjjj\nkkkkkkkkkkkkkkkkkkkk\nllllllllllllllllllll\n"+
243                                                   "mmmmmmmmmmmmmmmmmmmmmm\nnnnnnnnnnnnnnnnnnnnn\noooooooooooooooooooo\n"+
244                                                   "pppppppppppppppppppppp\nqqqqqqqqqqqqqqqqqqqq\nrrrrrrrrrrrrrrrrrrrr\n";*/
245
246                 //stream2.setText(longText);
247         }
248         
249         /*private int lineEnd(TextView text){
250                 int lineEnd = -1;
251                 if (text.getLineCount()< LINENUM)return -1;
252                 String s = text.getText().toString();
253                 if (s.length()==0)return -1;
254                 while (lineEnd<s.length()&&s.charAt(lineEnd)!='\n'){
255                         lineEnd++;
256                 }
257                 if(lineEnd>=s.length())return -1;
258                 return lineEnd+1;
259         }*/
260         /*private void cutLines(TextView text){
261                 String s = text.getText().toString();
262                 if (s.length()==0)return;
263                 while (text.getLineCount()> LINENUM){
264                         int lineEnd = 0;
265                         while (lineEnd<s.length()&&s.charAt(lineEnd)!='\n'){
266                                 lineEnd++;
267                         }
268                         if(lineEnd>=s.length())return;
269                         text.getEditableText().delete(0, lineEnd+1);
270                 }
271         }*/
272         
273         /*private void cutLines(TextView text){
274                 String content = text.getText().toString();
275                 int totalLen = text.getLineCount();
276                 int _nCnt = 0;
277                 if(totalLen<LINENUM){
278                         return;
279                 }else if(totalLen <2*LINENUM){
280                         //Approach 1
281                         int i;
282                         for(i=0; i<content.length(); i++){
283                                 if(content.charAt(i)=='i'){
284                                         _nCnt++;
285                                         if(_nCnt == LINENUM){
286                                                 break;
287                                         }
288                                 }
289                         }
290                         if(i==content.length())return;
291                         text.getEditableText().delete(0, i+1);
292                 }else{
293                         //Approach 2
294                         int i;
295                         if (totalLen<=LINENUM)return;
296                         for(i=content.length(); i>0; i--){
297                                 if(content.charAt(i)=='\n'){
298                                         _nCnt++;
299                                         if((_nCnt+LINENUM-1)>=totalLen){
300                                                 break;
301                                         }
302                                 }
303                         }
304                         if(i<0)return;
305                         text.getEditableText().delete(0, i+1);
306                 }
307         }*/
308         
309         private void cutLines(TextView text){
310                 String content = text.getText().toString();
311                 int totalLine = text.getLineCount();
312                 if (totalLine>LINENUM+1){
313                         text.getEditableText().delete(0, 25*(totalLine-1-LINENUM));
314                 }
315         }
316         
317         
318         
319         
320         @Override
321         public boolean onCreateOptionsMenu(Menu menu) {
322                 getMenuInflater().inflate(R.menu.main, menu);
323                 return true;
324         }
325         
326         private void initTimeStamp(){
327                 long currentTimeM = System.currentTimeMillis();
328                 SerialData initiator = new SerialData();
329                 initiator.initMessage((short)0x00FF, (short)1, currentTimeM, (long)(currentTimeM+1000), (long)100);
330                 serial1.send(initiator.initToBytes());
331                 initiator.initMessage((short)0x80FF, (short)2, currentTimeM, (long)(currentTimeM+1000), (long)100);
332                 serial2.send(initiator.initToBytes());
333                 int i;
334                 i=0;
335         }
336         
337         //--------------------------------------------------------------------
338         // Log Data Related
339         
340         private class SwitchChangedListener implements OnCheckedChangeListener{
341
342                 @Override
343                 public void onCheckedChanged(CompoundButton sw, boolean checked) {
344                         // TODO Auto-generated method stub
345                         switch(sw.getId()){
346                         case R.id.logSwitch:  logEnable = !checked;  break;
347                         case R.id.xvlSwitch:  xively.setEnable(checked); break;
348                         case R.id.evtSwitch:  evtGen.SetEnable(checked); break;
349                         }
350                 }
351         }
352         
353         private class ButtonClickListener implements OnClickListener{
354
355                 @Override
356                 public void onClick(View v) {
357                         switch(v.getId()){
358                         case R.id.startBttn:                            
359                                 //for(int i=0; i<100;i++){
360                                 initTimeStamp();
361                                 //}
362                                 logSW  .setEnabled(true);
363                                 xvlSW  .setEnabled(true);
364                                 evtSW  .setEnabled(true);
365                                 logBttn.setEnabled(true);
366                                 xvlBttn.setEnabled(true);
367                                 evtBttn.setEnabled(true);
368                                 break;
369                         case R.id.fileBttn:
370                                 AlertDialog.Builder fileDialog = new AlertDialog.Builder(MainActivity.this);
371                                 fileDialog.setTitle("New File Name");
372                                 fileDialog.setView(logView);
373                                 fileDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
374                                         @Override
375                                         public void onClick(DialogInterface dialog, int which) {
376                                                 String newFileName = newName.getText().toString();
377                                                 if (newFileName==""){
378                                                         toast("Fail:Empty File Name");
379                                                 }else{
380                                                         toast("File Setting Succeed");
381                                                         //fileNameExt = newFileName+".txt";
382                                                         fileLog.setNewFile(newFileName+".txt");
383                                                         toast("New File Name Available");
384                                                 }
385                                                 dismiss(logView);
386                                                 dialog.dismiss();
387                                         }
388                                 });
389                                 fileDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
390                                         @Override
391                                         public void onClick(DialogInterface dialog, int which) {
392                                                 dismiss(logView);
393                                                 dialog.dismiss();
394                                         }
395                                 });
396                                 fileDialog.create().show();
397                                 break;
398                                 
399                                 /*try{
400                                         String newFileName = fileText.getText().toString();
401                                         if(newFileName==""){
402                                                 Toast.makeText(getApplicationContext(), "Fail:Empty File Name", Toast.LENGTH_LONG).show();
403                                                 return;
404                                         }
405                                         fileNameExt = fileText.getText().toString()+".txt";
406                                         Toast.makeText(getApplicationContext(), "Change Success!!", Toast.LENGTH_LONG).show();
407                                         //fileNameExt = "newFile.txt";
408                                         Util.debug("[M#8]FileName Changed to:"+fileNameExt);
409                                 }catch (Exception e){
410                                         Util.debug("[M#0]"+e.toString());
411                                 }
412                                 
413                                 break;*/
414                         case R.id.xvlBttn:
415                                 Util.debug("[M#10]I'm clicked");
416                                 AlertDialog.Builder xvlDialog = new AlertDialog.Builder(MainActivity.this);
417                                 xvlDialog.setTitle("Xively Configuration");
418                                 xvlDialog.setView(xvlView);
419                                 xvlDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
420                                         @Override
421                                         public void onClick(DialogInterface dialog, int which) {
422                                                 toast("Xively Feed/Key Set");
423                                                 String newXvlFeed = xvlFeed.getText().toString();
424                                                 String newXvlKey  = xvlKey.getText().toString();
425                                                 if (newXvlFeed!="") xively.setFeedID(newXvlFeed);
426                                                 if (newXvlKey !="") xively.setApiKey(newXvlKey);
427                                                 xively.createChannel("mbed1");
428                                                 xively.createChannel("mbed2");
429                                                 dismiss(xvlView);
430                                                 dialog.dismiss();
431                                         }
432                                 });
433                                 xvlDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
434                                         @Override
435                                         public void onClick(DialogInterface dialog, int arg1) {
436                                                 dismiss(xvlView);
437                                                 dialog.dismiss();
438                                         }
439                                 });
440                                 xvlDialog.setNeutralButton("Reset", new DialogInterface.OnClickListener() {
441                                         @Override
442                                         public void onClick(DialogInterface dialog, int which){
443                                                 toast("Xively Reset Succeed!");
444                                                 xively.resetFeedID();
445                                                 xively.resetApiKey();
446                                                 dismiss(xvlView);
447                                                 dialog.dismiss();
448                                         }
449                                 });
450                                 xvlDialog.create().show();
451                                 break;
452                         case R.id.evtBttn:
453                                 AlertDialog.Builder evtDialog = new AlertDialog.Builder(MainActivity.this);
454                                 evtDialog.setTitle("Event Trigger Interval(ms)");
455                                 evtDialog.setView(evtView);
456                                 evtDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
457                                         @Override
458                                         public void onClick(DialogInterface dialog, int which) {
459                                                 String newIntervalS = evtTrInt.getText().toString();
460                                                 if(newIntervalS.length()>0) {
461                                                         int interval = Integer.parseInt(evtTrInt.getText().toString());
462                                                         if (interval<10||interval>10000){
463                                                                 toast("Fail:In valid Interval");
464                                                         }else{
465                                                                 toast("Setting Succeed!");
466                                                                 evtGen.setInterval(interval);
467                                                                 SerialData cmd = evtGen.genTriggerCmd(1);
468                                                                 serial1.send(cmd.initToBytes());
469                                                                 cmd = evtGen.genTriggerCmd(2);
470                                                                 serial2.send(cmd.initToBytes());
471                                                         }
472                                                 }
473                                                 dismiss(evtView);
474                                                 dialog.dismiss();
475                                         }
476                                 });
477                                 evtDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
478                                         @Override
479                                         public void onClick(DialogInterface dialog, int which) {
480                                                 dismiss(evtView);
481                                                 dialog.dismiss();
482                                         }
483                                 });
484                                 evtDialog.create().show();
485                                 break;
486
487                         }
488                 }
489         }
490         
491         private void toast(String s){
492                 Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
493         }
494
495         private void dismiss(View view){
496                 ViewGroup vg = (ViewGroup) view.getParent();
497                 vg.removeView(view);
498         }
499         
500         /*private void writeExternal(Vector<SerialData> sData){
501                 try{
502                         File myFile = new File(Environment
503                             .getExternalStorageDirectory(), fileNameExt);
504                     //if (!myFile.exists())
505                         //myFile.createNewFile();
506                     FileOutputStream fex;
507                     fex = new FileOutputStream(myFile,true);
508                 for (int i = 0; i < sData.size(); i++){
509                         SerialData data = sData.get(i);
510                     fex.write(("[Node "+Integer.toString(data.devID)+"]  ["+Integer.toString(data.msgSeq)+"] "+data.timeStamp()+"\n").getBytes()) ;
511                 }
512                     fex.flush();
513                     fex.close();
514                 }catch(Exception e){
515                         Util.debug("M#7"+e.toString());
516                 }
517         }*/
518         
519         /*private void writeData(Vector<SerialData> sData){
520                 if (sData==null){
521                         return;
522                 }
523                 try{
524                         OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(fileName, Context.MODE_APPEND));
525                 
526                         for(int i=0; i<sData.size(); i++){
527                                 SerialData data = sData.get(i);
528                                 //fout = (data.devId==1)?fout1:fout2;
529                                 outputStreamWriter.write("[Node "+Integer.toString(data.devID)+"]  "+data.timeStamp()+"\n");
530                         }
531                         outputStreamWriter.close();
532                 }catch(Exception e){
533                         Util.debug("[M#5]"+e.toString());
534                 }
535         }*/
536         
537         /*private String readData() {
538
539             String ret = "";
540
541             try {
542                 InputStream inputStream = openFileInput(fileName);
543
544                 if ( inputStream != null ) {
545                     InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
546                     BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
547                     String receiveString = "";
548                     StringBuilder stringBuilder = new StringBuilder();
549
550                     while ( (receiveString = bufferedReader.readLine()) != null ) {
551                         stringBuilder.append(receiveString);
552                     }
553
554                     inputStream.close();
555                     ret = stringBuilder.toString();
556                 }
557             }
558             catch (FileNotFoundException e) {
559                 Util.debug("File not found: " + e.toString());
560             } catch (IOException e) {
561                 Util.debug("Can not read file: " + e.toString());
562             }
563             return ret;
564         }*/
565         
566         // Serial 1 for the moment
567         private void packToView(Vector<SerialData> data){
568                 for(int i=0; i<data.size(); i++){
569                         SerialData d = data.get(i);
570                         if(d.portId==1){
571                                 stream1.append(d.devID+": "+d.timeDisplay()+"\n");
572                         }else{
573                                 stream2.append(d.devID+": "+d.timeDisplay()+"\n");
574                         }
575                 }
576         }
577         
578         private void simpleCal(Vector<SerialData> v1, Vector<SerialData> v2){
579                 SerialData d1;
580                 SerialData d2;
581                 int i=0;
582                 int j=0;
583                 while(i<v1.size()&& j<v2.size()){
584                         d1 = v1.get(i);
585                         d2 = v1.get(j);
586                         //if(abs(d1.))
587                 }
588         }
589         
590         private void timeDiff(int wrS1, int wrN1, int wrS2, int wrN2){
591                 /*long t1 = (long)(((long)(wrS1)*(long)(1000))+((long)(wrN1)/(long)(1000000)));
592                 long t2 = (long)(((long)(wrS2)*(long)(1000))+((long)(wrN2)/(long)(1000000)));
593                 String tt1 = new SimpleDateFormat("yyyy-MM-dd", Locale.US).
594                   format(new Date(currentTimeM)).toString()*/
595         }
596         
597         private int cnt=0;
598         private int xvlCnt;
599         private int dspCnt;
600         private int did_temp = 1;
601         private class MainCycle extends TimerTask{
602                 
603                 @Override
604                 public void run() {
605                         
606                         cnt++;
607                         dspCnt++;
608                         xvlCnt++;
609                         
610                         // for debugger
611                         if(cnt>=1000/interval){
612                                 cnt = 0;
613                                 Util.debug("check for alive");
614                         }
615                         
616                         
617                         //Serial
618                         Vector<SerialData> data  = serial1.checkPort();
619                         Vector<SerialData> data2 = serial2.checkPort();
620                         data.addAll(data2);
621                         
622                         //Fot test: data generator:
623                         /*SerialData sd = new SerialData();
624                         did_temp = (did_temp==1)?2:1;
625                         sd.evtMessage((short)did_temp, (short)0, System.currentTimeMillis(), (long)0);
626                         Vector<SerialData> data= new Vector<SerialData>();
627                         data.add(sd);*/
628                         
629                         
630                         
631                         //Xively
632                         new XivelyPack().execute(data);         //always pack data      
633                         if (xvlCnt>=2500/interval){
634                                 xvlCnt = 0;
635                                 new XivelyUpload().execute();   //upload when it is time
636                         }
637                         
638                         //File Log
639                         new LogToFile().execute(data);
640                         
641                         
642                         //Display
643                         final Vector<SerialData> dataToDisplay = data;
644                         runOnUiThread(new Runnable(){
645                                 @Override
646                                 public void run() {
647                                         packToView(dataToDisplay);
648                                         if(dspCnt>=1000/interval){
649                                                 dspCnt = 0;
650                                                 cutLines(stream1);
651                                                 cutLines(stream2);
652                                         }
653                                 }
654                                 
655                         });
656                         
657                         
658                         
659                         
660                         
661                         /*Vector<SerialData> data = serial.checkPort();
662                         new XivelyPack().execute(data);
663                         
664                         xvlCnt++;
665                         if(xvlCnt == (xvlTimeUp/interval)){
666                                 new XivelyUpload().execute();
667                         }
668                         
669                         new LogToFile().execute(data);*/
670                         
671                         
672                         
673                         
674                         
675                         
676                         
677                         //Original WorkFlow
678                         /*Vector<SerialData> data = serial.checkPort();
679                         xively.packSerialData(data);
680                         
681                         xvlCnt++;
682                         if(xvlCnt == (xvlTimeUp/interval)){
683                                 xively.uploadData();
684                         }*/
685                         
686                         //fileLog.writeExternal(data);
687                         //if(logEnable){ writeExternal(data);Util.debug("[M#9]Recording");}
688                         //else {Util.debug("[M#9]Not writing because of the permit");}
689                         //writeData(data);
690                         //Util.debug("[Read Result]"+readData());
691                         //Util.debug("[Read Result] "+Integer.toString(data.size()));
692                         
693                         //xively.packSerialData(data);
694                         
695                         //test for logThread
696                         /*SerialData sd = new SerialData();
697                         sd.evtMessage((short)0, (short)0, System.currentTimeMillis(), (long)0);
698                         Vector<SerialData> v= new Vector<SerialData>();
699                         v.add(sd);*/
700                         //xively.uploadData();
701                 }
702         }
703         
704         int seq = 0;
705         private void test(){
706                 SerialData evtData = new SerialData();
707                 evtData.evtMessage((short)1, (short)0, System.currentTimeMillis(), 0);
708                 serial.send(evtData.evtToBytes());
709                 /*SerialData syncData = new SerialData();
710                 syncData.evtMessage((short)1, (short)0, System.currentTimeMillis(), 0);
711                 //syncData.syncMessage(seq++, System.currentTimeMillis());*/
712                 //syncData.syncMessage(seq++, System.currentTimeMillis());
713         }
714         
715         private class LogToFile extends AsyncTask<Vector,Void,Void>{
716                 @Override
717                 @SuppressWarnings("unchecked")
718                 protected Void doInBackground(Vector... dataVctArray) {
719                         fileLog.writeExternal(dataVctArray[0]);
720                         return null;
721                 }
722         }
723         
724         private class XivelyPack extends AsyncTask<Vector,Void,Void>{
725                 @Override
726                 @SuppressWarnings("unchecked")
727                 protected Void doInBackground(Vector... dataVctArray) {
728                         xively.packSerialData(dataVctArray[0]);
729                         return null;
730                 }
731                 
732         }
733         
734         private class XivelyUpload extends AsyncTask<Void, Void, Void>{
735
736                 @Override
737                 protected Void doInBackground(Void... voids) {
738                         xively.uploadData();
739                         return null;
740                 }
741         }
742 }