//package org.oobd.tools.oobdflash; import java.io.IOException; import java.util.Enumeration; import java.util.Vector; import javax.bluetooth.*; import java.io.*; import javax.microedition.io.*; import com.intel.bluetooth.RemoteDeviceHelper; /** * * Minimal Services Search example. */ public class OobdBtWrapper { public static final Vector<OOBDDongleDescriptor> serviceFound = new Vector(); public static DiscoveryListener listener; public static Vector<OOBDDongleDescriptor> discover() { // First run RemoteDeviceDiscovery and use discoved device System.out.print("."); RemoteDeviceDiscovery.discover(); serviceFound.clear(); UUID serviceUUID = new UUID(0x1101); //UUID serviceUUID = "1e0ca4ea-299d-4335-93eb-27fcfe7fa848"; final Object serviceSearchCompletedEvent = new Object(); listener = new DiscoveryListener() { public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { try { RemoteDeviceHelper.authenticate(btDevice, "1234"); } catch (IOException CantAuthenticate) { } } public void inquiryCompleted(int discType) { } public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { for (int i = 0; i < servRecord.length; i++) { String url = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); if (url == null) { continue; } try { serviceFound.add(new OOBDDongleDescriptor(servRecord[i].getHostDevice().getFriendlyName(false), servRecord[i].getHostDevice().getBluetoothAddress(), url)); System.out.print("."); } catch ( IOException e ) { System.err.print(e.toString()); } } } public void serviceSearchCompleted(int transID, int respCode) { System.out.print("."); synchronized(serviceSearchCompletedEvent) { serviceSearchCompletedEvent.notifyAll(); } } }; UUID[] searchUuidSet = new UUID[] { serviceUUID }; int[] attrIDs = new int[] { //0x0100 // Service name 0x0003 // Service name }; System.out.print("."); for(Enumeration en = RemoteDeviceDiscovery.devicesDiscovered.elements(); en.hasMoreElements(); ) { RemoteDevice btDevice = (RemoteDevice)en.nextElement(); System.out.print("."); synchronized(serviceSearchCompletedEvent) { try { System.out.print("."); LocalDevice.getLocalDevice().getDiscoveryAgent().searchServices(attrIDs, searchUuidSet, btDevice, listener); serviceSearchCompletedEvent.wait(); } catch ( IOException ex ) { ex.printStackTrace(); } catch ( InterruptedException ex ) { ex.printStackTrace(); } } } return serviceFound; } } class RemoteDeviceDiscovery { public static final Vector<RemoteDevice> devicesDiscovered = new Vector(); static Vector<RemoteDevice> discover() { try { final Object inquiryCompletedEvent = new Object(); devicesDiscovered.clear(); DiscoveryListener listener = new DiscoveryListener() { public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { System.out.print("."); try { String name= btDevice.getFriendlyName(false); System.out.print("."); if (name.matches("^OOBD.*")) { devicesDiscovered.addElement(btDevice); } } catch (IOException cantGetDeviceName) { } } public void inquiryCompleted(int discType) { System.out.print("."); synchronized(inquiryCompletedEvent) { inquiryCompletedEvent.notifyAll(); } } public void serviceSearchCompleted(int transID, int respCode) { } public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { } }; synchronized(inquiryCompletedEvent) { boolean started = LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, listener); if (started) { System.out.print("."); inquiryCompletedEvent.wait(); System.out.print("."); } } } catch ( IOException ex ) { ex.printStackTrace(); } catch ( InterruptedException ex ) { ex.printStackTrace(); } return devicesDiscovered; } } class OOBDDongleDescriptor { public String friendlyName; public String BluetoothAddress; public String url; public String hardwareID; public String revision; public String design; public String layout; OOBDDongleDescriptor(String friendlyName, String BluetoothAddress, String url) { this.friendlyName = friendlyName; this.BluetoothAddress = BluetoothAddress; this.url = url; } }