aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/broeuschmeul/android/gps/bluetooth/provider/BlueetoothGpsManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/broeuschmeul/android/gps/bluetooth/provider/BlueetoothGpsManager.java')
-rw-r--r--src/org/broeuschmeul/android/gps/bluetooth/provider/BlueetoothGpsManager.java303
1 files changed, 128 insertions, 175 deletions
diff --git a/src/org/broeuschmeul/android/gps/bluetooth/provider/BlueetoothGpsManager.java b/src/org/broeuschmeul/android/gps/bluetooth/provider/BlueetoothGpsManager.java
index f4cfb92..0a1f67f 100644
--- a/src/org/broeuschmeul/android/gps/bluetooth/provider/BlueetoothGpsManager.java
+++ b/src/org/broeuschmeul/android/gps/bluetooth/provider/BlueetoothGpsManager.java
@@ -52,100 +52,94 @@ import android.util.Log;
public class BlueetoothGpsManager {
private class ConnectedGps extends Thread {
- private final InputStream in;
- private final OutputStream out;
- private final PrintStream out2;
- private boolean ready = false;
-
- public ConnectedGps(BluetoothSocket socket) {
- InputStream tmpIn = null;
- OutputStream tmpOut = null;
- PrintStream tmpOut2 = null;
- try {
- tmpIn = socket.getInputStream();
- tmpOut = socket.getOutputStream();
- if (tmpOut != null){
- tmpOut2 = new PrintStream(tmpOut, false, "US-ASCII");
- }
- } catch (IOException e) {
- Log.e("BT test", "error while getting socket streams", e);
- }
- in = tmpIn;
- out = tmpOut;
- out2 = tmpOut2;
- }
-
- public void run() {
- try {
- BufferedReader reader = new BufferedReader(new InputStreamReader(in,"US-ASCII"));
- String s;
- long now = SystemClock.uptimeMillis();
- long lastRead = now;
-// while((enabled && (s = reader.readLine()) != null)){
- while((enabled) && (now < lastRead+5000 )){
- if (reader.ready()){
- s = reader.readLine();
+ private final InputStream in;
+ private final OutputStream out;
+ private final PrintStream out2;
+ private boolean ready = false;
+
+ public ConnectedGps(BluetoothSocket socket) {
+ InputStream tmpIn = null;
+ OutputStream tmpOut = null;
+ PrintStream tmpOut2 = null;
+ try {
+ tmpIn = socket.getInputStream();
+ tmpOut = socket.getOutputStream();
+ if (tmpOut != null){
+ tmpOut2 = new PrintStream(tmpOut, false, "US-ASCII");
+ }
+ } catch (IOException e) {
+ Log.e("BT test", "error while getting socket streams", e);
+ }
+ in = tmpIn;
+ out = tmpOut;
+ out2 = tmpOut2;
+ }
+
+ public void run() {
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(in,"US-ASCII"));
+ String s;
+ long now = SystemClock.uptimeMillis();
+ long lastRead = now;
+ while((enabled) && (now < lastRead+5000 )){
+ if (reader.ready()){
+ s = reader.readLine();
Log.e("BT test", "data: "+System.currentTimeMillis()+" "+s + "xxx");
notifyNmeaSentence(s+"\r\n");
ready = true;
lastRead = SystemClock.uptimeMillis();
-// parser.parseNmeaSentence(s);
-// // writer.println(s);
-// addNMEAString(s);
-// nmeaSentenceHandler.ob
- } else {
- Log.e("BT test", "data: not ready "+System.currentTimeMillis());
- SystemClock.sleep(500);
- }
- now = SystemClock.uptimeMillis();
+ } else {
+ Log.e("BT test", "data: not ready "+System.currentTimeMillis());
+ SystemClock.sleep(500);
}
- } catch (IOException e) {
- Log.e("BT test", "error while getting data", e);
- setMockLocationProviderOutOfService();
- } finally {
- // remove because we want to retry...
-// disable();
+ now = SystemClock.uptimeMillis();
}
- }
+ } catch (IOException e) {
+ Log.e("BT test", "error while getting data", e);
+ setMockLocationProviderOutOfService();
+ } finally {
+ // remove because we want to retry...
+ // disable();
+ }
+ }
- /**
- * Write to the connected OutStream.
- * @param buffer The bytes to write
- */
- public void write(byte[] buffer) {
- try {
- do {
- Thread.sleep(100);
- } while (! ready);
- out.write(buffer);
- out.flush();
- } catch (IOException e) {
- Log.e("BT test", "Exception during write", e);
- } catch (InterruptedException e) {
- Log.e("BT test", "Exception during write", e);
- }
- }
- /**
- * Write to the connected OutStream.
- * @param buffer The data to write
- */
- public void write(String buffer) {
- try {
- do {
- Thread.sleep(100);
- } while (! ready);
- out2.print(buffer);
- out2.flush();
-// } catch (IOException e) {
-// Log.e("BT test", "Exception during write", e);
- } catch (InterruptedException e) {
- Log.e("BT test", "Exception during write", e);
- }
- }
+ /**
+ * Write to the connected OutStream.
+ * @param buffer The bytes to write
+ */
+ public void write(byte[] buffer) {
+ try {
+ do {
+ Thread.sleep(100);
+ } while (! ready);
+ out.write(buffer);
+ out.flush();
+ } catch (IOException e) {
+ Log.e("BT test", "Exception during write", e);
+ } catch (InterruptedException e) {
+ Log.e("BT test", "Exception during write", e);
+ }
}
+ /**
+ * Write to the connected OutStream.
+ * @param buffer The data to write
+ */
+ public void write(String buffer) {
+ try {
+ do {
+ Thread.sleep(100);
+ } while (! ready);
+ out2.print(buffer);
+ out2.flush();
+ // } catch (IOException e) {
+ // Log.e("BT test", "Exception during write", e);
+ } catch (InterruptedException e) {
+ Log.e("BT test", "Exception during write", e);
+ }
+ }
+ }
private Service callingService;
- private BluetoothDevice gpsDevice;
private BluetoothSocket gpsSocket;
private String gpsDeviceAddress;
private NmeaParser parser = new NmeaParser(10f);
@@ -154,12 +148,7 @@ public class BlueetoothGpsManager {
private ScheduledExecutorService connectionAndReadingPool;
private List<NmeaListener> nmeaListeners = Collections.synchronizedList(new LinkedList<NmeaListener>());
private LocationManager locationManager;
-// private boolean mockGpsEnabled = true;
-// private String mockLocationProvider = LocationManager.GPS_PROVIDER;
private ConnectedGps connectedGps;
-
-// private Handler nmeaSentenceHandler = new Handler();
-
/**
* @return true if the bluetooth GPS is enabled
@@ -178,29 +167,29 @@ public class BlueetoothGpsManager {
public synchronized boolean enable() {
if (! enabled){
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
- if (bluetoothAdapter == null) {
- // Device does not support Bluetooth
- Log.e("BT test", "Device does not support Bluetooth");
- } else if (!bluetoothAdapter.isEnabled()) {
-// Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
-// startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
- Log.e("BT test", "Bluetooth is not enabled");
- } else {
- final BluetoothDevice gpsDevice = bluetoothAdapter.getRemoteDevice(gpsDeviceAddress);
- if (gpsDevice == null){
- Log.e("BT test", "GPS device not found");
- } else {
- Log.e("BT test", "current device: "+gpsDevice.getName() + " -- " + gpsDevice.getAddress());
- try {
- gpsSocket = gpsDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
- } catch (IOException e) {
- Log.e("BT test", "Error during connection", e);
- }
- if (gpsSocket == null){
- Log.e("BT test", "Error while establishing connection: no socket");
- } else {
- Runnable connectThread = new Runnable() {
- private int connectionTry=0;
+ if (bluetoothAdapter == null) {
+ // Device does not support Bluetooth
+ Log.e("BT test", "Device does not support Bluetooth");
+ } else if (!bluetoothAdapter.isEnabled()) {
+ // Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
+ // startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
+ Log.e("BT test", "Bluetooth is not enabled");
+ } else {
+ final BluetoothDevice gpsDevice = bluetoothAdapter.getRemoteDevice(gpsDeviceAddress);
+ if (gpsDevice == null){
+ Log.e("BT test", "GPS device not found");
+ } else {
+ Log.e("BT test", "current device: "+gpsDevice.getName() + " -- " + gpsDevice.getAddress());
+ try {
+ gpsSocket = gpsDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
+ } catch (IOException e) {
+ Log.e("BT test", "Error during connection", e);
+ }
+ if (gpsSocket == null){
+ Log.e("BT test", "Error while establishing connection: no socket");
+ } else {
+ Runnable connectThread = new Runnable() {
+ private int connectionTry=0;
@Override
public void run() {
try {
@@ -232,50 +221,26 @@ public class BlueetoothGpsManager {
connectionTry=0;
connectedGps = new ConnectedGps(gpsSocket);
connectionAndReadingPool.execute(connectedGps);
-// connectedGps.start();
-// String command = callingService.getString(R.string.sirf_gll_on);
-// String sentence = String.format((Locale)null,"$%s*%X\r\n", command, parser.computeChecksum(command));
-// String command1 = callingService.getString(R.string.sirf_gll_off);
-// String sentence1 = String.format((Locale)null,"$%s*%X\r\n", command1, parser.computeChecksum(command1));
-// String command2 = callingService.getString(R.string.sirf_vtg_off);
-// String sentence2 = String.format((Locale)null,"$%s*%X\r\n", command2, parser.computeChecksum(command2));
-// try {
-// Thread.sleep(5000);
-// } catch (InterruptedException e) {
-// // TODO Auto-generated catch block
-// e.printStackTrace();
-// }
-// Log.e("BT test", "sending NMEA sentence: "+"$PSRF105,1*3E\r\n");
-// connectedGps.write("$PSRF105,1*3E\r\n");
-// Log.e("BT test", "sending NMEA sentence: "+sentence1);
-// connectedGps.write(sentence1);
-// Log.e("BT test", "sending NMEA sentence: "+sentence2);
-// connectedGps.write(sentence2);
-// Thread.sleep(5000);
}
-// } catch (InterruptedException e) {
-// Log.e("BT test", "error while connecting to socket", e);
} catch (IOException connectException) {
- // Unable to connect; close everything and get out
- Log.e("BT test", "error while connecting to socket", connectException);
-// callingService.stopSelf();
- } finally {
- // if bluetooth has bean disabled or
- // if two much tries consider that we are enable to connect. So close everything and get out
- if ((!bluetoothAdapter.isEnabled()) || (connectionTry > 5 )){
- disable();
- }
- }
+ // Unable to connect; close everything and get out
+ Log.e("BT test", "error while connecting to socket", connectException);
+ } finally {
+ // if bluetooth has bean disabled or
+ // if two much tries consider that we are enable to connect. So close everything and get out
+ if ((!bluetoothAdapter.isEnabled()) || (connectionTry > 5 )){
+ disable();
+ }
+ }
}
};
this.enabled = true;
notificationPool = Executors.newSingleThreadExecutor();
connectionAndReadingPool = Executors.newSingleThreadScheduledExecutor();
connectionAndReadingPool.scheduleWithFixedDelay(connectThread, 100, 60000, TimeUnit.MILLISECONDS);
-// enableMockLocationProvider(LocationManager.GPS_PROVIDER);
- }
- }
- }
+ }
+ }
+ }
}
return this.enabled;
}
@@ -284,38 +249,26 @@ public class BlueetoothGpsManager {
if (enabled){
enabled = false;
if (gpsSocket != null){
- try {
- gpsSocket.close();
- } catch (IOException closeException) {
- Log.e("BT test", "error while closing socket", closeException);
- }
+ try {
+ gpsSocket.close();
+ } catch (IOException closeException) {
+ Log.e("BT test", "error while closing socket", closeException);
+ }
}
nmeaListeners.clear();
disableMockLocationProvider();
notificationPool.shutdown();
-//// locationManager.setTestProviderEnabled(mockLocationProvider, mockGpsEnabled);
-// LocationProvider prov = locationManager.getProvider(mockLocationProvider);
-// Log.e("BT test", "Mock power: "+prov.getPowerRequirement()+" "+prov.getAccuracy()+" "+locationManager.isProviderEnabled(mockLocationProvider));
-// locationManager.clearTestProviderEnabled(mockLocationProvider);
-// prov = locationManager.getProvider(mockLocationProvider);
-// Log.e("BT test", "Mock power: "+prov.getPowerRequirement()+" "+prov.getAccuracy()+" "+locationManager.isProviderEnabled(mockLocationProvider));
-// locationManager.clearTestProviderStatus(mockLocationProvider);
-// locationManager.removeTestProvider(mockLocationProvider);
-// prov = locationManager.getProvider(mockLocationProvider);
-// Log.e("BT test", "Mock power: "+prov.getPowerRequirement()+" "+prov.getAccuracy()+" "+locationManager.isProviderEnabled(mockLocationProvider));
-// Log.e("BT test", "removed mock GPS");
-
callingService.stopSelf();
}
}
-
+
public void enableMockLocationProvider(String gpsName){
if (parser != null){
parser.enableMockLocationProvider(gpsName);
}
}
-
+
public void disableMockLocationProvider(){
if (parser != null){
parser.disableMockLocationProvider();
@@ -342,7 +295,7 @@ public class BlueetoothGpsManager {
}
return mockLocationProvider;
}
-
+
private void setMockLocationProviderOutOfService(){
if (parser != null){
parser.setMockLocationProviderOutOfService();
@@ -355,11 +308,11 @@ public class BlueetoothGpsManager {
}
return true;
}
-
+
public void removeNmeaListener(NmeaListener listener){
- nmeaListeners.remove(listener);
+ nmeaListeners.remove(listener);
}
-
+
private void notifyNmeaSentence(final String nmeaSentence){
if (enabled){
final String recognizedSentence = parser.parseNmeaSentence(nmeaSentence);
@@ -379,7 +332,7 @@ public class BlueetoothGpsManager {
}
}
}
-
+
public void sendPackagedNmeaCommand(final String command){
Log.e("BT test", "sending NMEA sentence: "+command);
if (isEnabled()){
@@ -394,7 +347,7 @@ public class BlueetoothGpsManager {
});
}
}
-
+
public void sendPackagedSirfCommand(final String commandHexa){
Log.e("BT test", "sending SIRF sentence: "+commandHexa);
if (isEnabled()){
@@ -410,12 +363,12 @@ public class BlueetoothGpsManager {
});
}
}
-
+
public void sendNmeaCommand(String sentence){
String command = String.format((Locale)null,"$%s*%X\r\n", sentence, parser.computeChecksum(sentence));
sendPackagedNmeaCommand(command);
}
-
+
public void sendSirfCommand(String payload){
String command = SirfUtils.createSirfCommandFromPayload(payload);
sendPackagedSirfCommand(command);