首页 新闻 搜索 专区 学院

android 火焰传感器数据接收处理问题

0
悬赏园豆:100 [待解决问题]
  1 package com.example.d_condition;
  2 import com.newland.jni.Linuxc;
  3 
  4 import android.os.AsyncTask;
  5 
  6 public class ReceiveThread extends AsyncTask<Integer,String,Integer> {
  7 public int count=0;
  8 public char[] data=new char[1024];
  9 public int datalen=0;
 10 public int mark_head;
 11 public int lengthcount=21;
 12 public char funCode=0x01;//功能码
 13     @Override
 14     protected Integer doInBackground(Integer... params) {
 15         // TODO 自动生成的方法存根
 16         int len=0;
 17         char[] d=new char[1024];
 18         String str_receive=null;
 19         
 20         while(ShareData.fd>0){
 21             str_receive=Linuxc.receiveMsgUartHex(ShareData.fd);
 22             if(isCancelled()){
 23                 break;
 24             }
 25             try {
 26                 Thread.currentThread().sleep(100);
 27             } catch (Exception e) {
 28                 // TODO: handle exception
 29             }
 30             if(str_receive==null){
 31                 continue;
 32             }
 33             
 34             len=str_receive.length();
 35             count=len+count;
 36             if(len==0){
 37                 continue;
 38             }
 39             d=str_receive.toCharArray();
 40             System.arraycopy(d, 0, data, datalen, len);
 41             datalen+=len;
 42             while(true){
 43                 mark_head=findCharInReceiveData(0, (char)0x01);
 44                 if(mark_head<0){
 45                     datalen=0;
 46                     break;
 47                 }
 48                 lengthcount=6;
 49                 if(datalen<lengthcount){
 50                     break;
 51                 }
 52                 funCode=(char)0x01;
 53                 int length=1;
 54                 if(data[mark_head+1]!=funCode){
 55                     if(datalen>=lengthcount){
 56                         datalen=datalen-lengthcount-mark_head;
 57                         if(datalen>0){
 58                             System.arraycopy(data, mark_head+lengthcount, data, 0, datalen);
 59                         }
 60                     }
 61                     continue;
 62                 }else{
 63                     if(datalen-mark_head<lengthcount){
 64                     break;
 65                 }
 66                     if(data[mark_head+2]!=length){
 67                         datalen=datalen-lengthcount-mark_head;
 68                         System.arraycopy(data, mark_head+lengthcount, data, 0, datalen);
 69                         break;
 70                     }
 71                     
 72                     
 73                     MainActivity.data4150=data[mark_head+3];
 74                     datalen=datalen-lengthcount-mark_head;
 75                     System.arraycopy(data, mark_head+lengthcount, data, 0, datalen);
 76                     count=0;
 77                 }
 78             }
 79         }        
 80         return 1;
 81         
 82     }
 83     
 84     public int findCharInReceiveData(int start,char ch2){
 85         for(int i=start;i<datalen;i++){
 86             if(data[i]==ch2){
 87                 return i;
 88             }
 89         }
 90         return -1;
 91     }
 92 public int judge(String data){
 93     if(data.contains("+")){
 94         return Integer.parseInt(data.substring(1));
 95     }
 96     else{
 97         return 0;
 98     }
 99 }
100 
101 }

这就是得到的str_receive的内容       

str_receive 是通过串口接收到的数据
ShareData.mdata.data4150 就是处理后最终要得到的值
我的问题就是 谁能帮我解释下这个代码的流程和这个数据的结构
这个代码是如何处理str_receive最终得到data4150的 求详细解释             

保护伞的主页 保护伞 | 初学一级 | 园豆:102
提问于:2013-05-11 21:45
< >
分享
所有回答(1)
0

。。。
你是啥都不懂吗 全部都要解释? 一点资料都没有? 谁会花那么多时间一字一句解释啊

牧羊人361 | 园豆:211 (菜鸟二级) | 2019-08-12 11:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册