1b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent/* 2b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** 3b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** Copyright 2014, The Android Open Source Project 4b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** 5b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** Licensed under the Apache License, Version 2.0 (the "License"); 6b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** you may not use this file except in compliance with the License. 7b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** You may obtain a copy of the License at 8b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** 9b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** http://www.apache.org/licenses/LICENSE-2.0 10b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** 11b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** Unless required by applicable law or agreed to in writing, software 12b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** distributed under the License is distributed on an "AS IS" BASIS, 13b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** See the License for the specific language governing permissions and 15b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent** limitations under the License. 16b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent*/ 17b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 18b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <stdint.h> 19b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <sys/types.h> 20b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <binder/IMemory.h> 21b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <binder/Parcel.h> 22b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <binder/IPCThreadState.h> 23b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <binder/IServiceManager.h> 24b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent#include <soundtrigger/ISoundTriggerClient.h> 25b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 26b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentnamespace android { 27b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 28b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentenum { 29b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent ON_RECOGNITION_EVENT = IBinder::FIRST_CALL_TRANSACTION, 30df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent ON_SOUNDMODEL_EVENT, 31df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent ON_SERVICE_STATE_CHANGE 32b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent}; 33b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 34b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentclass BpSoundTriggerClient: public BpInterface<ISoundTriggerClient> 35b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent{ 36b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 37b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentpublic: 38b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent BpSoundTriggerClient(const sp<IBinder>& impl) 39b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent : BpInterface<ISoundTriggerClient>(impl) 40b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent { 41b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent } 42b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 43b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent virtual void onRecognitionEvent(const sp<IMemory>& eventMemory) 44b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent { 45b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent Parcel data, reply; 46b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor()); 47b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent data.writeStrongBinder(eventMemory->asBinder()); 48b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent remote()->transact(ON_RECOGNITION_EVENT, 49b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent data, 50b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent &reply); 51b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent } 52df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent 53df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent virtual void onSoundModelEvent(const sp<IMemory>& eventMemory) 54df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent { 55df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent Parcel data, reply; 56df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor()); 57df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data.writeStrongBinder(eventMemory->asBinder()); 58df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent remote()->transact(ON_SOUNDMODEL_EVENT, 59df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data, 60df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent &reply); 61df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent } 62df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent virtual void onServiceStateChange(const sp<IMemory>& eventMemory) 63df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent { 64df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent Parcel data, reply; 65df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor()); 66df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data.writeStrongBinder(eventMemory->asBinder()); 67df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent remote()->transact(ON_SERVICE_STATE_CHANGE, 68df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data, 69df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent &reply); 70df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent } 71b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent}; 72b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 73b7a11d83f749ad0200778c4815e907d011d4b5d3Eric LaurentIMPLEMENT_META_INTERFACE(SoundTriggerClient, 74b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent "android.hardware.ISoundTriggerClient"); 75b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 76b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent// ---------------------------------------------------------------------- 77b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 78b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurentstatus_t BnSoundTriggerClient::onTransact( 79b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 80b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent{ 81b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent switch(code) { 82b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent case ON_RECOGNITION_EVENT: { 83b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent CHECK_INTERFACE(ISoundTriggerClient, data, reply); 84b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent sp<IMemory> eventMemory = interface_cast<IMemory>( 85b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent data.readStrongBinder()); 86b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent onRecognitionEvent(eventMemory); 87b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent return NO_ERROR; 88b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent } break; 89df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent case ON_SOUNDMODEL_EVENT: { 90df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent CHECK_INTERFACE(ISoundTriggerClient, data, reply); 91df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent sp<IMemory> eventMemory = interface_cast<IMemory>( 92df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data.readStrongBinder()); 93df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent onSoundModelEvent(eventMemory); 94df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent return NO_ERROR; 95df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent } break; 96df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent case ON_SERVICE_STATE_CHANGE: { 97df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent CHECK_INTERFACE(ISoundTriggerClient, data, reply); 98df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent sp<IMemory> eventMemory = interface_cast<IMemory>( 99df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent data.readStrongBinder()); 100df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent onServiceStateChange(eventMemory); 101df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent return NO_ERROR; 102df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871Eric Laurent } break; 103b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent default: 104b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent return BBinder::onTransact(code, data, reply, flags); 105b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent } 106b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent} 107b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 108b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent// ---------------------------------------------------------------------------- 109b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent 110b7a11d83f749ad0200778c4815e907d011d4b5d3Eric Laurent}; // namespace android 111