package pl.llp.aircasting.sensor.bioharness; import pl.llp.aircasting.sensor.BluetoothSocketReader; import android.bluetooth.BluetoothSocket; import com.google.common.eventbus.EventBus; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import static pl.llp.aircasting.sensor.BluetoothConnector.sleepFor; public class BioharnessDataReader implements BluetoothSocketReader { private final BluetoothSocket socket; private EventBus eventBus; BioharnessPacketReader reader; ByteArrayOutputStream bos = new ByteArrayOutputStream(); public BioharnessDataReader(BluetoothSocket socket, EventBus eventBus) { this.socket = socket; this.reader = new BioharnessPacketReader(eventBus); } @Override public void read() throws IOException { InputStream stream = socket.getInputStream(); byte[] readBuffer = new byte[4096]; int bytesRead = stream.read(readBuffer); if (bytesRead > 0) { bos.write(readBuffer, 0, bytesRead); int processed = reader.tryReading(bos); if(processed > 0) { byte[] bytes = bos.toByteArray(); bos = new ByteArrayOutputStream(); bos.write(bytes, processed, bytes.length - processed); } } else { sleepFor(100); } } @Override public void setBus(EventBus eventBus) { this.eventBus = eventBus; } }