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的 求详细解释
。。。
你是啥都不懂吗 全部都要解释? 一点资料都没有? 谁会花那么多时间一字一句解释啊