1f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood/* 2f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * Copyright (C) 2015 The Android Open Source Project 3f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * 4f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 5f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * you may not use this file except in compliance with the License. 6f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * You may obtain a copy of the License at 7f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * 8f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 9f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * 10f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * Unless required by applicable law or agreed to in writing, software 11f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 12f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * See the License for the specific language governing permissions and 14f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood * limitations under the License. 15f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood */ 16f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood 17f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodpackage com.android.bluetoothmidiservice; 18f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood 19f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.app.Service; 20f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.bluetooth.BluetoothDevice; 21f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.content.Intent; 227cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burkimport android.media.midi.IBluetoothMidiService; 23f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.media.midi.MidiManager; 24f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.os.IBinder; 25f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport android.util.Log; 26f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood 27f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodimport java.util.HashMap; 28f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood 29f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwoodpublic class BluetoothMidiService extends Service { 30f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood private static final String TAG = "BluetoothMidiService"; 31f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood 32f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood // BluetoothMidiDevices keyed by BluetoothDevice 33f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood private final HashMap<BluetoothDevice,BluetoothMidiDevice> mDeviceServerMap 34f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood = new HashMap<BluetoothDevice,BluetoothMidiDevice>(); 35f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood 36f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood @Override 37f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood public IBinder onBind(Intent intent) { 387cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk // Return the interface 397cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk return mBinder; 407cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk } 417cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk 427cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk 437cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk private final IBluetoothMidiService.Stub mBinder = new IBluetoothMidiService.Stub() { 447cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk 457cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk public IBinder addBluetoothDevice(BluetoothDevice bluetoothDevice) { 467cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk BluetoothMidiDevice device; 47f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood if (bluetoothDevice == null) { 487cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk Log.e(TAG, "no BluetoothDevice in addBluetoothDevice()"); 49f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood return null; 50f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood } 51f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood synchronized (mDeviceServerMap) { 52f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood device = mDeviceServerMap.get(bluetoothDevice); 53f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood if (device == null) { 547cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk device = new BluetoothMidiDevice(BluetoothMidiService.this, 557cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk bluetoothDevice, BluetoothMidiService.this); 56e5f722e55c5708c2b48b8c9688c135e451225032Phil Burk mDeviceServerMap.put(bluetoothDevice, device); 57f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood } 58f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood } 59f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood return device.getBinder(); 60f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood } 617cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk 627cd06c0b9e087a555d2c5dd4cab5b7eac8497526Phil Burk }; 63f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood 64f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood void deviceClosed(BluetoothDevice device) { 65f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood synchronized (mDeviceServerMap) { 66f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood mDeviceServerMap.remove(device); 67f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood } 68f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood } 69f0a41d1c591193fbe02c9ddbaf24c79af4da9972Mike Lockwood} 70