Hallo,
ich arbeite derzeit an einem Projekt bei dem über Bluetooth Daten gesendet werden. Ich lese die virtuelle serielle Schnittstelle aus und will die Daten verarbeiten.
Die Daten kommen dabei immer wiefolgt an: [85, -1, 24,x0,x2,x3...x23]
Wobei die ersten 3 Stellen immer einem Header entsprechen den ich nicht weiter benötige...
Ich suche also nach den 3 Stellen in meinem SerialRingBuffer (siehe Code) und merke mir wo sie stehen... lese dann die Daten aus und lösche den Buffer bis hin zum neuen Header....
Sprich: nach dem ersten Durchlauf sollte i immer 0 bleiben, da ich ja den Buffer genau so lösche dass der Header wieder an stelle 0 steht...
Mein problem... das funktioniert auch hin und wieder... nur fängt er dann an, den header bei 26 oder 50 oder sonst irgendwo zu finden. Die Daten die von Bluetooth her kommen sind als korrekt anzusehen, da ichs mit dem Hyperterminal probiert habe und dort funktioniert....
Hier mal Code:
Und hier noch der Thread-Sleep...
Bitte um Hilfe, ärgere mich schon seit Tagen damit herum. Falls noch zusätzliche Infos benötigt werden bitte Bescheid sagen!
lg, richi
ich arbeite derzeit an einem Projekt bei dem über Bluetooth Daten gesendet werden. Ich lese die virtuelle serielle Schnittstelle aus und will die Daten verarbeiten.
Die Daten kommen dabei immer wiefolgt an: [85, -1, 24,x0,x2,x3...x23]
Wobei die ersten 3 Stellen immer einem Header entsprechen den ich nicht weiter benötige...
Ich suche also nach den 3 Stellen in meinem SerialRingBuffer (siehe Code) und merke mir wo sie stehen... lese dann die Daten aus und lösche den Buffer bis hin zum neuen Header....
Sprich: nach dem ersten Durchlauf sollte i immer 0 bleiben, da ich ja den Buffer genau so lösche dass der Header wieder an stelle 0 steht...
Mein problem... das funktioniert auch hin und wieder... nur fängt er dann an, den header bei 26 oder 50 oder sonst irgendwo zu finden. Die Daten die von Bluetooth her kommen sind als korrekt anzusehen, da ichs mit dem Hyperterminal probiert habe und dort funktioniert....
Hier mal Code:
Java:
InputStream in;
SerialPort sport;
static boolean headerfound= false;
byte[] buffer = new byte[4000];
ArrayList fin = new ArrayList();
byte[] realdata = new byte[24];
byte[] header = {85,-1,24};
String out="";
StringBuffer serialRingBuffer = new StringBuffer();
public ComRW ( InputStream in, SerialPort sp )
{
this.in = in;
this.sport=sp;
}
private void parsedata()
{
try {
in.read(buffer);
serialRingBuffer.append(new String(buffer).trim());
} catch (IOException e) {
e.printStackTrace();
}
int i=0;
while(!headerfound && serialRingBuffer.length()>=3 && i<serialRingBuffer.length())
{
if(serialRingBuffer.toString().getBytes()[i]==header[0]&&serialRingBuffer.toString().getBytes()[i+1]==header[1]&&serialRingBuffer.toString().getBytes()[i+2]==header[2])
{
System.out.println("Header beginnt bei: "+i+"\r\n");
headerfound=true;
}
i++;
}
i--;
String outtemp="";
if(i+26<serialRingBuffer.length()&&headerfound)
{
for(int s=0;s<24;s++)
{
realdata[s]=serialRingBuffer.toString().getBytes()[i+s+3];
outtemp = outtemp+realdata[s]+", ";
}
out = out+outtemp+", ";
fin.add(realdata);
System.out.println(outtemp);
serialRingBuffer.delete(0, i+27);
}
else if(!headerfound)
{
serialRingBuffer.delete(0, serialRingBuffer.length()+1);
}
headerfound=false;
}
Und hier noch der Thread-Sleep...
Java:
public void run ()
{
while (true)
{
parsedata();
try{
Thread.sleep(5);
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Bitte um Hilfe, ärgere mich schon seit Tagen damit herum. Falls noch zusätzliche Infos benötigt werden bitte Bescheid sagen!
lg, richi