package blucat;
import java.lang.reflect.Field;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.LocalDevice;
import com.intel.bluetooth.BlueCoveConfigProperties;
import com.intel.bluetooth.BlueCoveImpl;
import com.intel.bluetooth.BlueCoveLocalDeviceProperties;
import com.intel.bluetooth.BluetoothStack;
public class BluCatUtil {
public static void doctorDevice() throws BluetoothStateException{
if(System.getProperty("os.name").contains("Linux")){
PrintUtil.err.println("Is libbluetooth3 and libbluetooth-dev installed?");
PrintUtil.err.println("run: sudo apt-get install libbluetooth3 libbluetooth-dev");
}
if (!LocalDevice.isPowerOn()){
PrintUtil.err.println("#There is no Bluetooth Adaptor powered on");
System.exit(-1);
}
PrintUtil.out.println(" BlueCoveState");
try{
PrintUtil.out.println(" ThreadBluetoothStackID = " + BlueCoveImpl.getThreadBluetoothStackID());
PrintUtil.out.println(" CurrentThreadBluetoothStackID = " + BlueCoveImpl.getCurrentThreadBluetoothStackID());
PrintUtil.out.println(" LocalDevicesID = " + BlueCoveImpl.getLocalDevicesID());
}catch(Exception e){
PrintUtil.out.println("Error enabling bluecove stack: " + e.getMessage());
return;
}
PrintUtil.out.println(" BlueCoveConfigProperties");
try{
String result = "";
for (Field f : BlueCoveConfigProperties.class.getDeclaredFields()){
if (f.getName().startsWith("PROPERTY")){
PrintUtil.out.print( " " + f.getName() + " = ");
try{
result = String.valueOf(LocalDevice.getProperty(String.valueOf(f.get(null))));
}catch(Exception e){
result = e.getMessage();
}catch(IllegalAccessError iae){
result = "IllegalAccessError";
}
PrintUtil.out.println(result);
}
}
}catch(Exception e){
PrintUtil.out.println("Error getting properties " + e.getMessage());
//e.printStackTrace();
return;
}
PrintUtil.out.println(" LocalDeviceProperties");
try{
String result = "";
String[] deviceprops = {
"bluetooth.api.version",
"bluetooth.master.switch",
"bluetooth.sd.attr.retrievable.max",
"bluetooth.connected.devices.max",
"bluetooth.l2cap.receiveMTU.max",
"bluetooth.sd.trans.max",
"bluetooth.connected.inquiry.scan",
"bluetooth.connected.page.scan",
"bluetooth.connected.inquiry",
"bluetooth.connected.page"
};
for (String prop: deviceprops){
PrintUtil.out.print( " " + prop + " = ");
result = LocalDevice.getProperty(prop);
PrintUtil.out.println(result);
}
for (Field f : BlueCoveLocalDeviceProperties.class.getDeclaredFields()){
if (f.getName().startsWith("LOCAL_DEVICE")){
PrintUtil.out.print( " " + f.getName() + " = ");
result = String.valueOf(LocalDevice.getProperty(String.valueOf(f.get(null))));
PrintUtil.out.println(result);
}
}
}catch(Exception e){
PrintUtil.out.println("Error getting local device properties " + e.getMessage());
//e.printStackTrace();
return;
}
PrintUtil.out.println(" LocalDeviceFeatures");
try{
String result = "";
for (Field f : BluetoothStack.class.getDeclaredFields()){
if (f.getName().startsWith("FEATURE")){
PrintUtil.out.print( " " + f.getName() + " = ");
result = String.valueOf(BlueCoveImpl.instance().getLocalDeviceFeature((f.getInt(null))));
PrintUtil.out.println(result);
}
}
}catch(Exception e){
PrintUtil.out.println("Error getting local device features " + e.getMessage());
//e.printStackTrace();
return;
}
//TODO look for more problems using lsusb and command line debug tools
PrintUtil.out.println("\nI don't see anything wrong");
}
public static String clean(String str){
if (str != null)
return str.replace("\"", "''")
.replace("\n", " ");
else
return str;
}
}