184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal/* 284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * Copyright (c) 2017 The Android Open Source Project 384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * Licensed under the Apache License, Version 2.0 (the "License"); 584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * you may not use this file except in compliance with the License. 684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * You may obtain a copy of the License at 784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * http://www.apache.org/licenses/LICENSE-2.0 984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 1084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * Unless required by applicable law or agreed to in writing, software 1184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * distributed under the License is distributed on an "AS IS" BASIS, 1284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * See the License for the specific language governing permissions and 1484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * limitations under the License. 1584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal */ 1684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 1784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal/* 1884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * Defines the native inteface that is used by state machine/service to either or receive messages 1984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * from the native stack. This file is registered for the native methods in corresponding CPP file. 2084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal */ 2184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwalpackage com.android.bluetooth.hfpclient; 2284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 2384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwalimport android.bluetooth.BluetoothAdapter; 2484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwalimport android.bluetooth.BluetoothDevice; 2584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwalimport android.util.Log; 2684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 2784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwalclass NativeInterface { 281bd017d12cf16ecd52fb486722e300790bddeefcJack He private static final String TAG = "NativeInterface"; 291bd017d12cf16ecd52fb486722e300790bddeefcJack He private static final boolean DBG = false; 3084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 3184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal NativeInterface() {} 3284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 3384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal // Native methods that call into the JNI interface 3484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native void classInitNative(); 35c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 3684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native void initializeNative(); 37c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 3884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native void cleanupNative(); 39c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 4084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean connectNative(byte[] address); 41c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 4284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean disconnectNative(byte[] address); 43c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 4484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean connectAudioNative(byte[] address); 45c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 4684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean disconnectAudioNative(byte[] address); 47c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 4884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean startVoiceRecognitionNative(byte[] address); 49c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 5084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean stopVoiceRecognitionNative(byte[] address); 51c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 5284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean setVolumeNative(byte[] address, int volumeType, int volume); 53c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 5484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean dialNative(byte[] address, String number); 55c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 5684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean dialMemoryNative(byte[] address, int location); 57c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 5884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean handleCallActionNative(byte[] address, int action, int index); 59c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 6084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean queryCurrentCallsNative(byte[] address); 61c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 6284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean queryCurrentOperatorNameNative(byte[] address); 63c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 6484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean retrieveSubscriberInfoNative(byte[] address); 65c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 6684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean sendDtmfNative(byte[] address, byte code); 67c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 6884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal static native boolean requestLastVoiceTagNumberNative(byte[] address); 69c4fbd756e2645147470c486ae96f2253f5e13a52Jack He 70c4fbd756e2645147470c486ae96f2253f5e13a52Jack He static native boolean sendATCmdNative(byte[] address, int atCmd, int val1, int val2, 71c4fbd756e2645147470c486ae96f2253f5e13a52Jack He String arg); 7284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 7384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private BluetoothDevice getDevice(byte[] address) { 7484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal return BluetoothAdapter.getDefaultAdapter().getRemoteDevice(address); 7584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 7684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 7784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal // Callbacks from the native back into the java framework. All callbacks are routed via the 7884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal // Service which will disambiguate which state machine the message should be routed through. 79b7461b17cad5476a7a528cbf2a0b9c9706c6faefJack He private void onConnectionStateChanged(int state, int peerFeat, int chldFeat, byte[] address) { 8084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CONNECTION_STATE_CHANGED); 8184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = state; 82b7461b17cad5476a7a528cbf2a0b9c9706c6faefJack He event.valueInt2 = peerFeat; 83b7461b17cad5476a7a528cbf2a0b9c9706c6faefJack He event.valueInt3 = chldFeat; 8484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 85c4fbd756e2645147470c486ae96f2253f5e13a52Jack He // BluetoothAdapter.getDefaultAdapter().getRemoteDevice(Utils.getAddressStringFromByte 86c4fbd756e2645147470c486ae96f2253f5e13a52Jack He // (address)); 8784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 88c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "Device addr " + event.device.getAddress() + " State " + state); 8984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 9084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 9184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 9284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 9384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 9484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "Ignoring message because service not available: " + event); 9584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 9684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 9784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 9884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onAudioStateChanged(int state, byte[] address) { 9984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_AUDIO_STATE_CHANGED); 10084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = state; 10184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 10284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 103c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onAudioStateChanged: address " + address + " event " + event); 10484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 10584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 10684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 10784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 10884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 109c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.w(TAG, "onAudioStateChanged: Ignoring message because service not available: " 110c4fbd756e2645147470c486ae96f2253f5e13a52Jack He + event); 11184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 11284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 11384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 114a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo private void onVrStateChanged(int state, byte[] address) { 115a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_VR_STATE_CHANGED); 116a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo event.valueInt = state; 117a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo event.device = getDevice(address); 118a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo if (DBG) { 119a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo Log.d(TAG, "onVrStateChanged: address " + address + " event " + event); 120a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo } 121a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo 122a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 123a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo if (service != null) { 124a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo service.messageFromNative(event); 125a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo } else { 126a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo Log.w(TAG, 127a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo "onVrStateChanged: Ignoring message because service not available: " + event); 128a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo } 12984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 13084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 13184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onNetworkState(int state, byte[] address) { 13284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_NETWORK_STATE); 13384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = state; 13484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 13584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 136a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo Log.d(TAG, "onNetworkStateChanged: address " + address + " event " + event); 13784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 13884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 13984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 14084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 14184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 14284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 143c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.w(TAG, 144a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo "onNetworkStateChanged: Ignoring message because service not available: " 145a4cca006f948b1a2a3f36fd857f4ad837376b4eaJoseph Pirozzo + event); 14684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 14784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 14884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 14984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onNetworkRoaming(int state, byte[] address) { 15084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_ROAMING_STATE); 15184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = state; 15284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 15384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 15484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.d(TAG, "onNetworkRoaming: incoming: " + event); 15584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 15684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 15784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 15884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 15984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 160c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.w(TAG, 161c4fbd756e2645147470c486ae96f2253f5e13a52Jack He "onNetworkRoaming: Ignoring message because service not available: " + event); 16284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 16384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 16484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 16584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onNetworkSignal(int signal, byte[] address) { 16684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_NETWORK_SIGNAL); 16784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = signal; 16884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 16984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 170c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onNetworkSignal: address " + address + " event " + event); 17184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 17284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 17384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 17484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 17584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 17684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onNetworkSignal: Ignoring message because service not available: " + event); 17784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 17884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 17984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 18084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onBatteryLevel(int level, byte[] address) { 18184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_BATTERY_LEVEL); 18284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = level; 18384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 18484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 185c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onBatteryLevel: address " + address + " event " + event); 18684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 18784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 18884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 18984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 19084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 19184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onBatteryLevel: Ignoring message because service not available: " + event); 19284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 19384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 19484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 19584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onCurrentOperator(String name, byte[] address) { 19684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_OPERATOR_NAME); 19784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueString = name; 19884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 19984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 200c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onCurrentOperator: address " + address + " event " + event); 20184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 20284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 20384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 20484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 20584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 206c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.w(TAG, 207c4fbd756e2645147470c486ae96f2253f5e13a52Jack He "onCurrentOperator: Ignoring message because service not available: " + event); 20884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 20984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 21084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 21184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onCall(int call, byte[] address) { 21284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CALL); 21384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = call; 21484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 21584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 216c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onCall: address " + address + " event " + event); 21784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 21884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 21984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 22084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 22184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 22284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onCall: Ignoring message because service not available: " + event); 22384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 22484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 22584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 22684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal /** 22784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * CIEV (Call indicators) notifying if call(s) are getting set up. 22884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 22984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * Values include: 23084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 0 - No current call is in setup 23184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 1 - Incoming call process ongoing 23284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 2 - Outgoing call process ongoing 23384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 3 - Remote party being alerted for outgoing call 23484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal */ 23584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onCallSetup(int callsetup, byte[] address) { 23684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CALLSETUP); 23784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = callsetup; 23884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 23984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 24084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.d(TAG, "onCallSetup: addr " + address + " device" + event.device); 241c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onCallSetup: address " + address + " event " + event); 24284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 24384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 24484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 24584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 24684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 24784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onCallSetup: Ignoring message because service not available: " + event); 24884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 24984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 25084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 25184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal /** 25284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * CIEV (Call indicators) notifying call held states. 25384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 25484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * Values include: 25584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 0 - No calls held 25684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 1 - Call is placed on hold or active/held calls wapped (The AG has both an ACTIVE and HELD 25784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * call) 25884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal * 2 - Call on hold, no active call 25984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal */ 26084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onCallHeld(int callheld, byte[] address) { 26184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CALLHELD); 26284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = callheld; 26384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 26484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 265c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onCallHeld: address " + address + " event " + event); 26684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 26784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 26884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 26984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 27084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 27184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onCallHeld: Ignoring message because service not available: " + event); 27284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 27384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 27484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 275b7461b17cad5476a7a528cbf2a0b9c9706c6faefJack He private void onRespAndHold(int respAndHold, byte[] address) { 27684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_RESP_AND_HOLD); 277b7461b17cad5476a7a528cbf2a0b9c9706c6faefJack He event.valueInt = respAndHold; 27884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 27984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 280c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onRespAndHold: address " + address + " event " + event); 28184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 28284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 28384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 28484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 28584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 28684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onRespAndHold: Ignoring message because service not available: " + event); 28784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 28884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 28984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 29084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onClip(String number, byte[] address) { 29184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CLIP); 29284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueString = number; 29384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 29484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 295c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onClip: address " + address + " event " + event); 29684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 29784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 29884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 29984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 30084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 30184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onClip: Ignoring message because service not available: " + event); 30284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 30384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 30484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 30584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onCallWaiting(String number, byte[] address) { 30684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CALL_WAITING); 30784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueString = number; 30884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 30984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 310c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onCallWaiting: address " + address + " event " + event); 31184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 31284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 31384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 31484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 31584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 31684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onCallWaiting: Ignoring message because service not available: " + event); 31784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 31884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 31984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 320c4fbd756e2645147470c486ae96f2253f5e13a52Jack He private void onCurrentCalls(int index, int dir, int state, int mparty, String number, 321c4fbd756e2645147470c486ae96f2253f5e13a52Jack He byte[] address) { 32284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CURRENT_CALLS); 32384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = index; 32484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt2 = dir; 32584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt3 = state; 32684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt4 = mparty; 32784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueString = number; 32884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 32984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 330c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onCurrentCalls: address " + address + " event " + event); 33184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 33284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 33384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 33484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 33584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 33684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onCurrentCalls: Ignoring message because service not available: " + event); 33784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 33884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 33984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 34084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onVolumeChange(int type, int volume, byte[] address) { 34184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_VOLUME_CHANGED); 34284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = type; 34384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt2 = volume; 34484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 34584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 346c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onVolumeChange: address " + address + " event " + event); 34784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 34884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 34954d5aab5a8b6aaae4f561b2643e6b423aad165fdJoseph Pirozzo if (service != null) { 35054d5aab5a8b6aaae4f561b2643e6b423aad165fdJoseph Pirozzo service.messageFromNative(event); 35154d5aab5a8b6aaae4f561b2643e6b423aad165fdJoseph Pirozzo } else { 35254d5aab5a8b6aaae4f561b2643e6b423aad165fdJoseph Pirozzo Log.w(TAG, "onVolumeChange: Ignoring message because service not available: " + event); 35354d5aab5a8b6aaae4f561b2643e6b423aad165fdJoseph Pirozzo } 35484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 35584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 35684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onCmdResult(int type, int cme, byte[] address) { 35784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_CMD_RESULT); 35884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = type; 35984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt2 = cme; 36084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 36184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 362c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onCmdResult: address " + address + " event " + event); 36384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 36484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 36584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 36684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 36784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 36884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onCmdResult: Ignoring message because service not available: " + event); 36984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 37084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 37184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 37284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onSubscriberInfo(String number, int type, byte[] address) { 37384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_SUBSCRIBER_INFO); 37484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueInt = type; 37584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.valueString = number; 37684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 37784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 378c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onSubscriberInfo: address " + address + " event " + event); 37984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 38084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 38184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 38284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 38384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 384c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.w(TAG, 385c4fbd756e2645147470c486ae96f2253f5e13a52Jack He "onSubscriberInfo: Ignoring message because service not available: " + event); 38684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 38784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 38884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 389b7461b17cad5476a7a528cbf2a0b9c9706c6faefJack He private void onInBandRing(int inBand, byte[] address) { 3902ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_IN_BAND_RINGTONE); 3912ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo event.valueInt = inBand; 3922ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo event.device = getDevice(address); 3932ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo if (DBG) { 3942ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo Log.d(TAG, "onInBandRing: address " + address + " event " + event); 3952ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo } 3962ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 3972ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo if (service != null) { 3982ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo service.messageFromNative(event); 3992ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo } else { 4002ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo Log.w(TAG, 4012ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo "onInBandRing: Ignoring message because service not available: " + event); 4022ba7e903557e98517edcd51aaf2c0f971a317862Joseph Pirozzo } 40384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 40484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 40584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onLastVoiceTagNumber(String number, byte[] address) { 40684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal Log.w(TAG, "onLastVoiceTagNumber not supported"); 40784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 40884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal 40984f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal private void onRingIndication(byte[] address) { 41084f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal StackEvent event = new StackEvent(StackEvent.EVENT_TYPE_RING_INDICATION); 41184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal event.device = getDevice(address); 41284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (DBG) { 413c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.d(TAG, "onRingIndication: address " + address + " event " + event); 41484f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 41584f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal HeadsetClientService service = HeadsetClientService.getHeadsetClientService(); 41684f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal if (service != null) { 41784f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal service.messageFromNative(event); 41884f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } else { 419c4fbd756e2645147470c486ae96f2253f5e13a52Jack He Log.w(TAG, 420c4fbd756e2645147470c486ae96f2253f5e13a52Jack He "onRingIndication: Ignoring message because service not available: " + event); 42184f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 42284f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal } 42384f977c60b8d7feea9c9b20d60a7eb8e3e4869a9Sanket Agarwal} 424