]> Pileus Git - ~andy/csm213a-hw/blobdiff - syc/src/com/example/sycapp/MainActivity.java
Add Android app from Yue
[~andy/csm213a-hw] / syc / src / com / example / sycapp / MainActivity.java
diff --git a/syc/src/com/example/sycapp/MainActivity.java b/syc/src/com/example/sycapp/MainActivity.java
new file mode 100644 (file)
index 0000000..73575a6
--- /dev/null
@@ -0,0 +1,742 @@
+package com.example.sycapp;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.Vector;
+
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Environment;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.text.format.Time;
+import android.text.method.ScrollingMovementMethod;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.EditText;
+import android.widget.Switch;
+import android.widget.TextView;
+import android.widget.Toast;
+import android.hardware.usb.*;
+
+public class MainActivity extends Activity {
+
+       //private String           fileNameExt = "logFile.txt";
+       //private String           fileName    = "logFile";
+       private FileOutputStream fout;
+       private FileInputStream  fin;
+       
+       // for serial
+       private SerialIO     serial;
+       private SerialIO     serial0;
+       private SerialIO     serial1;
+       private SerialIO     serial2;
+       private SerialIO     serial3;
+       private SerialIO     serial4;
+       private SerialIO     serial5;
+       private Timer        timer;
+       private final int    interval  = 100;
+       private final int    xvlTimeUp = 2500;
+       private long         currentSeconds;
+       
+       // for xively
+       private XivelyUL     xively;
+       
+       // TODO: need to be deleted
+       private EventGen     evtGen;
+       
+       private FileLogger   fileLog;
+       
+       
+       // view related
+       private Switch       logSW;
+       private Switch       xvlSW;
+       private Switch       evtSW;
+       private Button       startBttn;
+       private Button       logBttn;
+       private Button       xvlBttn;
+       private Button       evtBttn;
+       private EditText     fileText;
+       private EditText     xvlFeed;
+       private EditText     xvlKey;
+       private EditText     evtTrInt;
+       private EditText     newName;
+       private TextView     stream1;
+       private TextView     stream2;
+       private TextView     diffStr;
+       
+       private boolean      logEnable;
+       
+       private View         xvlView;
+       private View         evtView;
+       private View         logView;
+       
+       
+       //Display
+       private final int    LINENUM = 30;
+       
+       @Override
+       protected void onCreate(Bundle savedInstanceState) {
+               super.onCreate(savedInstanceState);
+               setContentView(R.layout.activity_main);
+               Util.debug("Program Start!!");
+               
+               LayoutInflater viewGen = LayoutInflater.from(this);
+               //LayoutInflater viewGen = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+               this.xvlView = viewGen.inflate(R.layout.xively_cfg_layout, null, false);
+               this.evtView = viewGen.inflate(R.layout.one_alert_layout, null, false);
+               this.logView = viewGen.inflate(R.layout.one_alert_layout, null, false);
+               
+               this.timer = new Timer();
+
+               // initial layout
+               this.logSW   = (Switch)   findViewById(R.id.logSwitch);
+               this.xvlSW   = (Switch)   findViewById(R.id.xvlSwitch);
+               this.evtSW   = (Switch)   findViewById(R.id.evtSwitch);
+               this.logBttn = (Button)   findViewById(R.id.fileBttn);
+               this.xvlBttn = (Button)   findViewById(R.id.xvlBttn);
+               this.evtBttn = (Button)   findViewById(R.id.evtBttn);
+               this.startBttn=(Button)   findViewById(R.id.startBttn);
+               this.stream1 = (TextView) findViewById(R.id.dataStream1);
+               this.stream2 = (TextView) findViewById(R.id.dataStream2);
+               this.fileText= (EditText) findViewById(R.id.fileText);
+               this.xvlFeed = (EditText) xvlView.findViewById(R.id.xvlFeed);
+               this.xvlKey  = (EditText) xvlView.findViewById(R.id.xvlKey);
+               this.evtTrInt= (EditText) evtView.findViewById(R.id.oneLineEdit);
+               this.newName = (EditText) logView.findViewById(R.id.oneLineEdit);
+                       
+               this.logSW.setOnCheckedChangeListener(new SwitchChangedListener()); 
+               this.xvlSW.setOnCheckedChangeListener(new SwitchChangedListener());
+               this.evtSW.setOnCheckedChangeListener(new SwitchChangedListener());
+               this.startBttn.setOnClickListener(new ButtonClickListener());
+               this.logBttn  .setOnClickListener(new ButtonClickListener());
+               this.xvlBttn  .setOnClickListener(new ButtonClickListener());
+               this.evtBttn  .setOnClickListener(new ButtonClickListener());
+               
+               /*logSW  .setEnabled(false);
+               xvlSW  .setEnabled(false);
+               evtSW  .setEnabled(false);
+               logBttn.setEnabled(false);
+               xvlBttn.setEnabled(false);
+               evtBttn.setEnabled(false);*/
+               
+
+               
+
+
+               
+               //try {fout   = openFileOutput(fileName, Context.MODE_PRIVATE);
+               //     fin    = openFileInput (fileName);} 
+               //catch(Exception e) {Util.debug("[M#1]"+e.toString());}
+               this.serial = new SerialIO(fout);
+               //this.serial0= new SerialIO("/dev/ttyO0");
+               this.serial1= new SerialIO("/dev/ttyO1", 1);
+               this.serial2= new SerialIO("/dev/ttyO2", 2);
+               //this.serial3= new SerialIO("/dev/ttyO3");
+               this.xively = new XivelyUL();
+               this.evtGen = new EventGen();
+               this.fileLog= new FileLogger();
+               
+               //logEnable = true;
+               xively.setEnable(false);
+               evtGen.SetEnable(false);
+               fileLog.setEnable(false);
+               
+
+               //stream1.setMovementMethod(new ScrollingMovementMethod().getInstance());
+               timer.scheduleAtFixedRate(new MainCycle(), 0, interval);
+               
+               
+               /*stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");
+               stream1.append("aa\n");
+               stream1.append("bb\n");
+               stream1.append("cc\n");
+               stream1.append("dd\n");
+               stream1.append("ee\n");*/
+               
+               
+               
+               /*String longText = "aaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbb\ncccccccccccccccccccc\n"+
+                                                 "dddddddddddddddddddddd\neeeeeeeeeeeeeeeeeeee\nffffffffffffffffffff\n"+
+                                                 "gggggggggggggggggggggg\nhhhhhhhhhhhhhhhhhhhh\niiiiiiiiiiiiiiiiiiii\n"+
+                                                 "jjjjjjjjjjjjjjjjjjjjjj\nkkkkkkkkkkkkkkkkkkkk\nllllllllllllllllllll\n"+
+                                                 "mmmmmmmmmmmmmmmmmmmmmm\nnnnnnnnnnnnnnnnnnnnn\noooooooooooooooooooo\n"+
+                                                 "pppppppppppppppppppppp\nqqqqqqqqqqqqqqqqqqqq\nrrrrrrrrrrrrrrrrrrrr\n";*/
+
+               //stream2.setText(longText);
+       }
+       
+       /*private int lineEnd(TextView text){
+               int lineEnd = -1;
+               if (text.getLineCount()< LINENUM)return -1;
+               String s = text.getText().toString();
+               if (s.length()==0)return -1;
+               while (lineEnd<s.length()&&s.charAt(lineEnd)!='\n'){
+                       lineEnd++;
+               }
+               if(lineEnd>=s.length())return -1;
+               return lineEnd+1;
+       }*/
+       /*private void cutLines(TextView text){
+               String s = text.getText().toString();
+               if (s.length()==0)return;
+               while (text.getLineCount()> LINENUM){
+                       int lineEnd = 0;
+                       while (lineEnd<s.length()&&s.charAt(lineEnd)!='\n'){
+                               lineEnd++;
+                       }
+                       if(lineEnd>=s.length())return;
+                       text.getEditableText().delete(0, lineEnd+1);
+               }
+       }*/
+       
+       /*private void cutLines(TextView text){
+               String content = text.getText().toString();
+               int totalLen = text.getLineCount();
+               int _nCnt = 0;
+               if(totalLen<LINENUM){
+                       return;
+               }else if(totalLen <2*LINENUM){
+                       //Approach 1
+                       int i;
+                       for(i=0; i<content.length(); i++){
+                               if(content.charAt(i)=='i'){
+                                       _nCnt++;
+                                       if(_nCnt == LINENUM){
+                                               break;
+                                       }
+                               }
+                       }
+                       if(i==content.length())return;
+                       text.getEditableText().delete(0, i+1);
+               }else{
+                       //Approach 2
+                       int i;
+                       if (totalLen<=LINENUM)return;
+                       for(i=content.length(); i>0; i--){
+                               if(content.charAt(i)=='\n'){
+                                       _nCnt++;
+                                       if((_nCnt+LINENUM-1)>=totalLen){
+                                               break;
+                                       }
+                               }
+                       }
+                       if(i<0)return;
+                       text.getEditableText().delete(0, i+1);
+               }
+       }*/
+       
+       private void cutLines(TextView text){
+               String content = text.getText().toString();
+               int totalLine = text.getLineCount();
+               if (totalLine>LINENUM+1){
+                       text.getEditableText().delete(0, 25*(totalLine-1-LINENUM));
+               }
+       }
+       
+       
+       
+       
+       @Override
+       public boolean onCreateOptionsMenu(Menu menu) {
+               getMenuInflater().inflate(R.menu.main, menu);
+               return true;
+       }
+       
+       private void initTimeStamp(){
+               long currentTimeM = System.currentTimeMillis();
+               SerialData initiator = new SerialData();
+               initiator.initMessage((short)0x00FF, (short)1, currentTimeM, (long)(currentTimeM+1000), (long)100);
+               serial1.send(initiator.initToBytes());
+               initiator.initMessage((short)0x80FF, (short)2, currentTimeM, (long)(currentTimeM+1000), (long)100);
+               serial2.send(initiator.initToBytes());
+               int i;
+               i=0;
+       }
+       
+       //--------------------------------------------------------------------
+       // Log Data Related
+       
+       private class SwitchChangedListener implements OnCheckedChangeListener{
+
+               @Override
+               public void onCheckedChanged(CompoundButton sw, boolean checked) {
+                       // TODO Auto-generated method stub
+                       switch(sw.getId()){
+                       case R.id.logSwitch:  logEnable = !checked;  break;
+                       case R.id.xvlSwitch:  xively.setEnable(checked); break;
+                       case R.id.evtSwitch:  evtGen.SetEnable(checked); break;
+                       }
+               }
+       }
+       
+       private class ButtonClickListener implements OnClickListener{
+
+               @Override
+               public void onClick(View v) {
+                       switch(v.getId()){
+                       case R.id.startBttn:                            
+                               //for(int i=0; i<100;i++){
+                               initTimeStamp();
+                               //}
+                               logSW  .setEnabled(true);
+                               xvlSW  .setEnabled(true);
+                               evtSW  .setEnabled(true);
+                               logBttn.setEnabled(true);
+                               xvlBttn.setEnabled(true);
+                               evtBttn.setEnabled(true);
+                               break;
+                       case R.id.fileBttn:
+                               AlertDialog.Builder fileDialog = new AlertDialog.Builder(MainActivity.this);
+                               fileDialog.setTitle("New File Name");
+                               fileDialog.setView(logView);
+                               fileDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which) {
+                                               String newFileName = newName.getText().toString();
+                                               if (newFileName==""){
+                                                       toast("Fail:Empty File Name");
+                                               }else{
+                                                       toast("File Setting Succeed");
+                                                       //fileNameExt = newFileName+".txt";
+                                                       fileLog.setNewFile(newFileName+".txt");
+                                                       toast("New File Name Available");
+                                               }
+                                               dismiss(logView);
+                                               dialog.dismiss();
+                                       }
+                               });
+                               fileDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which) {
+                                               dismiss(logView);
+                                               dialog.dismiss();
+                                       }
+                               });
+                               fileDialog.create().show();
+                               break;
+                               
+                               /*try{
+                                       String newFileName = fileText.getText().toString();
+                                       if(newFileName==""){
+                                               Toast.makeText(getApplicationContext(), "Fail:Empty File Name", Toast.LENGTH_LONG).show();
+                                               return;
+                                       }
+                                       fileNameExt = fileText.getText().toString()+".txt";
+                                       Toast.makeText(getApplicationContext(), "Change Success!!", Toast.LENGTH_LONG).show();
+                                       //fileNameExt = "newFile.txt";
+                                       Util.debug("[M#8]FileName Changed to:"+fileNameExt);
+                               }catch (Exception e){
+                                       Util.debug("[M#0]"+e.toString());
+                               }
+                               
+                               break;*/
+                       case R.id.xvlBttn:
+                               Util.debug("[M#10]I'm clicked");
+                               AlertDialog.Builder xvlDialog = new AlertDialog.Builder(MainActivity.this);
+                               xvlDialog.setTitle("Xively Configuration");
+                               xvlDialog.setView(xvlView);
+                               xvlDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which) {
+                                               toast("Xively Feed/Key Set");
+                                               String newXvlFeed = xvlFeed.getText().toString();
+                                               String newXvlKey  = xvlKey.getText().toString();
+                                               if (newXvlFeed!="") xively.setFeedID(newXvlFeed);
+                                               if (newXvlKey !="") xively.setApiKey(newXvlKey);
+                                               xively.createChannel("mbed1");
+                                               xively.createChannel("mbed2");
+                                               dismiss(xvlView);
+                                               dialog.dismiss();
+                                       }
+                               });
+                               xvlDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int arg1) {
+                                               dismiss(xvlView);
+                                               dialog.dismiss();
+                                       }
+                               });
+                               xvlDialog.setNeutralButton("Reset", new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which){
+                                               toast("Xively Reset Succeed!");
+                                               xively.resetFeedID();
+                                               xively.resetApiKey();
+                                               dismiss(xvlView);
+                                               dialog.dismiss();
+                                       }
+                               });
+                               xvlDialog.create().show();
+                               break;
+                       case R.id.evtBttn:
+                               AlertDialog.Builder evtDialog = new AlertDialog.Builder(MainActivity.this);
+                               evtDialog.setTitle("Event Trigger Interval(ms)");
+                               evtDialog.setView(evtView);
+                               evtDialog.setPositiveButton("Save", new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which) {
+                                               String newIntervalS = evtTrInt.getText().toString();
+                                               if(newIntervalS.length()>0) {
+                                                       int interval = Integer.parseInt(evtTrInt.getText().toString());
+                                                       if (interval<10||interval>10000){
+                                                               toast("Fail:In valid Interval");
+                                                       }else{
+                                                               toast("Setting Succeed!");
+                                                               evtGen.setInterval(interval);
+                                                               SerialData cmd = evtGen.genTriggerCmd(1);
+                                                               serial1.send(cmd.initToBytes());
+                                                               cmd = evtGen.genTriggerCmd(2);
+                                                               serial2.send(cmd.initToBytes());
+                                                       }
+                                               }
+                                               dismiss(evtView);
+                                               dialog.dismiss();
+                                       }
+                               });
+                               evtDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
+                                       @Override
+                                       public void onClick(DialogInterface dialog, int which) {
+                                               dismiss(evtView);
+                                               dialog.dismiss();
+                                       }
+                               });
+                               evtDialog.create().show();
+                               break;
+
+                       }
+               }
+       }
+       
+       private void toast(String s){
+               Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();
+       }
+
+       private void dismiss(View view){
+               ViewGroup vg = (ViewGroup) view.getParent();
+               vg.removeView(view);
+       }
+       
+       /*private void writeExternal(Vector<SerialData> sData){
+               try{
+                       File myFile = new File(Environment
+                           .getExternalStorageDirectory(), fileNameExt);
+                   //if (!myFile.exists())
+                       //myFile.createNewFile();
+                   FileOutputStream fex;
+                   fex = new FileOutputStream(myFile,true);
+               for (int i = 0; i < sData.size(); i++){
+                       SerialData data = sData.get(i);
+                   fex.write(("[Node "+Integer.toString(data.devID)+"]  ["+Integer.toString(data.msgSeq)+"] "+data.timeStamp()+"\n").getBytes()) ;
+               }
+                   fex.flush();
+                   fex.close();
+               }catch(Exception e){
+                       Util.debug("M#7"+e.toString());
+               }
+       }*/
+       
+       /*private void writeData(Vector<SerialData> sData){
+               if (sData==null){
+                       return;
+               }
+               try{
+                       OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(fileName, Context.MODE_APPEND));
+               
+                       for(int i=0; i<sData.size(); i++){
+                               SerialData data = sData.get(i);
+                               //fout = (data.devId==1)?fout1:fout2;
+                               outputStreamWriter.write("[Node "+Integer.toString(data.devID)+"]  "+data.timeStamp()+"\n");
+                       }
+                       outputStreamWriter.close();
+               }catch(Exception e){
+                       Util.debug("[M#5]"+e.toString());
+               }
+       }*/
+       
+       /*private String readData() {
+
+           String ret = "";
+
+           try {
+               InputStream inputStream = openFileInput(fileName);
+
+               if ( inputStream != null ) {
+                   InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
+                   BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
+                   String receiveString = "";
+                   StringBuilder stringBuilder = new StringBuilder();
+
+                   while ( (receiveString = bufferedReader.readLine()) != null ) {
+                       stringBuilder.append(receiveString);
+                   }
+
+                   inputStream.close();
+                   ret = stringBuilder.toString();
+               }
+           }
+           catch (FileNotFoundException e) {
+               Util.debug("File not found: " + e.toString());
+           } catch (IOException e) {
+               Util.debug("Can not read file: " + e.toString());
+           }
+           return ret;
+       }*/
+       
+       // Serial 1 for the moment
+       private void packToView(Vector<SerialData> data){
+               for(int i=0; i<data.size(); i++){
+                       SerialData d = data.get(i);
+                       if(d.portId==1){
+                               stream1.append(d.devID+": "+d.timeDisplay()+"\n");
+                       }else{
+                               stream2.append(d.devID+": "+d.timeDisplay()+"\n");
+                       }
+               }
+       }
+       
+       private void simpleCal(Vector<SerialData> v1, Vector<SerialData> v2){
+               SerialData d1;
+               SerialData d2;
+               int i=0;
+               int j=0;
+               while(i<v1.size()&& j<v2.size()){
+                       d1 = v1.get(i);
+                       d2 = v1.get(j);
+                       //if(abs(d1.))
+               }
+       }
+       
+       private void timeDiff(int wrS1, int wrN1, int wrS2, int wrN2){
+               /*long t1 = (long)(((long)(wrS1)*(long)(1000))+((long)(wrN1)/(long)(1000000)));
+               long t2 = (long)(((long)(wrS2)*(long)(1000))+((long)(wrN2)/(long)(1000000)));
+               String tt1 = new SimpleDateFormat("yyyy-MM-dd", Locale.US).
+                 format(new Date(currentTimeM)).toString()*/
+       }
+       
+       private int cnt=0;
+       private int xvlCnt;
+       private int dspCnt;
+       private int did_temp = 1;
+       private class MainCycle extends TimerTask{
+               
+               @Override
+               public void run() {
+                       
+                       cnt++;
+                       dspCnt++;
+                       xvlCnt++;
+                       
+                       // for debugger
+                       if(cnt>=1000/interval){
+                               cnt = 0;
+                               Util.debug("check for alive");
+                       }
+                       
+                       
+                       //Serial
+                       Vector<SerialData> data  = serial1.checkPort();
+                       Vector<SerialData> data2 = serial2.checkPort();
+                       data.addAll(data2);
+                       
+                       //Fot test: data generator:
+                       /*SerialData sd = new SerialData();
+                       did_temp = (did_temp==1)?2:1;
+                       sd.evtMessage((short)did_temp, (short)0, System.currentTimeMillis(), (long)0);
+                       Vector<SerialData> data= new Vector<SerialData>();
+                       data.add(sd);*/
+                       
+                       
+                       
+                       //Xively
+                       new XivelyPack().execute(data);         //always pack data      
+                       if (xvlCnt>=2500/interval){
+                               xvlCnt = 0;
+                               new XivelyUpload().execute();   //upload when it is time
+                       }
+                       
+                       //File Log
+                       new LogToFile().execute(data);
+                       
+                       
+                       //Display
+                       final Vector<SerialData> dataToDisplay = data;
+                       runOnUiThread(new Runnable(){
+                               @Override
+                               public void run() {
+                                       packToView(dataToDisplay);
+                                       if(dspCnt>=1000/interval){
+                                               dspCnt = 0;
+                                               cutLines(stream1);
+                                               cutLines(stream2);
+                                       }
+                               }
+                               
+                       });
+                       
+                       
+                       
+                       
+                       
+                       /*Vector<SerialData> data = serial.checkPort();
+                       new XivelyPack().execute(data);
+                       
+                       xvlCnt++;
+                       if(xvlCnt == (xvlTimeUp/interval)){
+                               new XivelyUpload().execute();
+                       }
+                       
+                       new LogToFile().execute(data);*/
+                       
+                       
+                       
+                       
+                       
+                       
+                       
+                       //Original WorkFlow
+                       /*Vector<SerialData> data = serial.checkPort();
+                       xively.packSerialData(data);
+                       
+                       xvlCnt++;
+                       if(xvlCnt == (xvlTimeUp/interval)){
+                               xively.uploadData();
+                       }*/
+                       
+                       //fileLog.writeExternal(data);
+                       //if(logEnable){ writeExternal(data);Util.debug("[M#9]Recording");}
+                       //else {Util.debug("[M#9]Not writing because of the permit");}
+                       //writeData(data);
+                       //Util.debug("[Read Result]"+readData());
+                       //Util.debug("[Read Result] "+Integer.toString(data.size()));
+                       
+                       //xively.packSerialData(data);
+                       
+                       //test for logThread
+                       /*SerialData sd = new SerialData();
+                       sd.evtMessage((short)0, (short)0, System.currentTimeMillis(), (long)0);
+                       Vector<SerialData> v= new Vector<SerialData>();
+                       v.add(sd);*/
+                       //xively.uploadData();
+               }
+       }
+       
+       int seq = 0;
+       private void test(){
+               SerialData evtData = new SerialData();
+               evtData.evtMessage((short)1, (short)0, System.currentTimeMillis(), 0);
+               serial.send(evtData.evtToBytes());
+               /*SerialData syncData = new SerialData();
+               syncData.evtMessage((short)1, (short)0, System.currentTimeMillis(), 0);
+               //syncData.syncMessage(seq++, System.currentTimeMillis());*/
+               //syncData.syncMessage(seq++, System.currentTimeMillis());
+       }
+       
+       private class LogToFile extends AsyncTask<Vector,Void,Void>{
+               @Override
+               @SuppressWarnings("unchecked")
+               protected Void doInBackground(Vector... dataVctArray) {
+                       fileLog.writeExternal(dataVctArray[0]);
+                       return null;
+               }
+       }
+       
+       private class XivelyPack extends AsyncTask<Vector,Void,Void>{
+               @Override
+               @SuppressWarnings("unchecked")
+               protected Void doInBackground(Vector... dataVctArray) {
+                       xively.packSerialData(dataVctArray[0]);
+                       return null;
+               }
+               
+       }
+       
+       private class XivelyUpload extends AsyncTask<Void, Void, Void>{
+
+               @Override
+               protected Void doInBackground(Void... voids) {
+                       xively.uploadData();
+                       return null;
+               }
+       }
+}