package com.source.parse; import android.os.Handler; import android.util.Log; import com.rftransceiver.util.Constants; import com.source.DataPacketOptions; /** * Created by Rth on 2015/5/6. */ public class SoundsParser { /** * the handler to communicate with UI thread */ private Handler handler; /** * note the UI thread start receiving sounds data */ private boolean startNoteToUi = false; /** * need to unpack the big packet to small packet so that it can be decode */ byte[] soundsTemp = new byte[Constants.Small_Sounds_Packet_Length]; /** * the counter to count soundsTemp */ int soundsIndex = 0; private DataPacketOptions options; StringBuilder sb = new StringBuilder(); public void parseSounds(byte[] data) { if(!startNoteToUi) { handler.obtainMessage(Constants.MESSAGE_READ,0,0,null).sendToTarget(); startNoteToUi = true; } //check weather this packet is last packet or not if(data[options.getRealLenIndex()] == options.getRealLen()) { unPackData(data,options.getLength()-options.getOffset()-1); }else { //this is the last packet unPackData(data,data[Constants.Packet_real_data_index]); handler.obtainMessage(Constants.MESSAGE_READ,0,1,null).sendToTarget(); startNoteToUi = false; soundsIndex = 0; } } private void unPackData(byte[] data,int len) { if(len > (options.getLength()-options.getOffset()-1) || len % Constants.Small_Sounds_Packet_Length != 0) { return; } try { for(int i = options.getOffset();i < options.getOffset()+len;i++) { soundsTemp[soundsIndex++] = data[i]; if(soundsIndex==Constants.Small_Sounds_Packet_Length) { soundsIndex = 0; //soundsTemp have been full handler.obtainMessage(Constants.MESSAGE_READ,0,2,soundsTemp).sendToTarget(); soundsTemp = null; soundsTemp = new byte[Constants.Small_Sounds_Packet_Length]; } } } catch (Exception e) { e.printStackTrace(); Log.e("unPackSoundsData","the len is "+ len); } } public void setHandler(Handler han) { this.handler = null; this.handler = han; } public void setOptions(DataPacketOptions options) { this.options = null; this.options = options; } public void reset() { startNoteToUi = false; soundsIndex = 0; } }