View Javadoc

1   /**
2    *  BlueCove - Java library for Bluetooth
3    *  Copyright (C) 2008 Michael Lifshits
4    *  Copyright (C) 2008 Vlad Skarzhevskyy
5    *
6    *  Licensed to the Apache Software Foundation (ASF) under one
7    *  or more contributor license agreements.  See the NOTICE file
8    *  distributed with this work for additional information
9    *  regarding copyright ownership.  The ASF licenses this file
10   *  to you under the Apache License, Version 2.0 (the
11   *  "License"); you may not use this file except in compliance
12   *  with the License.  You may obtain a copy of the License at
13   *
14   *    http://www.apache.org/licenses/LICENSE-2.0
15   *
16   *  Unless required by applicable law or agreed to in writing,
17   *  software distributed under the License is distributed on an
18   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19   *  KIND, either express or implied.  See the License for the
20   *  specific language governing permissions and limitations
21   *  under the License.
22   *
23   *  @author vlads
24   *  @version $Id: EmulatorHelper.java 2471 2008-12-01 03:44:20Z skarzhevskyy $
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  }