1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 package com.intel.bluetooth;
27
28 import java.util.HashMap;
29 import java.util.Map;
30
31 import javax.bluetooth.BluetoothStateException;
32
33 import com.intel.bluetooth.emu.DeviceDescriptor;
34 import com.intel.bluetooth.emu.DeviceManagerService;
35 import com.intel.bluetooth.rmi.Client;
36
37 class EmulatorHelper {
38
39 private static Map<EmulatorLocalDevice, EmulatorCommandReceiver> receivers = new HashMap<EmulatorLocalDevice, EmulatorCommandReceiver>();
40
41 static DeviceManagerService getService() {
42 String host = BlueCoveImpl.getConfigProperty(BlueCoveConfigProperties.PROPERTY_EMULATOR_HOST);
43 String port = BlueCoveImpl.getConfigProperty(BlueCoveConfigProperties.PROPERTY_EMULATOR_PORT);
44 boolean isMaster = BlueCoveImpl.getConfigProperty(BlueCoveConfigProperties.PROPERTY_EMULATOR_RMI_REGISTRY,
45 false);
46 return (DeviceManagerService) Client.getService(DeviceManagerService.class, isMaster, host, port);
47 }
48
49 static EmulatorLocalDevice createNewLocalDevice() throws BluetoothStateException {
50 DeviceDescriptor deviceDescriptor;
51 DeviceManagerService service;
52 try {
53 service = getService();
54 deviceDescriptor = service.createNewDevice(BlueCoveImpl
55 .getConfigProperty(BlueCoveConfigProperties.PROPERTY_LOCAL_DEVICE_ID), BlueCoveImpl
56 .getConfigProperty(BlueCoveConfigProperties.PROPERTY_LOCAL_DEVICE_ADDRESS));
57 } catch (RuntimeException e) {
58 throw (BluetoothStateException) UtilsJavaSE.initCause(new BluetoothStateException(e.getMessage()), e);
59 }
60 EmulatorLocalDevice device = new EmulatorLocalDevice(service, deviceDescriptor);
61 EmulatorCommandReceiver receiver = new EmulatorCommandReceiver(device);
62 receivers.put(device, receiver);
63 receiver.setDaemon(true);
64 receiver.start();
65 return device;
66 }
67
68 static void releaseDevice(EmulatorLocalDevice device) {
69 EmulatorCommandReceiver receiver = receivers.remove(device);
70 if (receiver != null) {
71 receiver.shutdownReceiver();
72 }
73 device.getDeviceManagerService().releaseDevice(device.getAddress());
74 device.destroy();
75 }
76
77 }