ISoundTriggerClient.cpp revision df3dc7e2fe6c639529b70e3f3a7d2bf0f4c6e871
1391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent/* 2391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** 3391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** Copyright 2014, The Android Open Source Project 4391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** 5391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** Licensed under the Apache License, Version 2.0 (the "License"); 6391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** you may not use this file except in compliance with the License. 7391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** You may obtain a copy of the License at 8391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** 9391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** http://www.apache.org/licenses/LICENSE-2.0 10391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** 11391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** Unless required by applicable law or agreed to in writing, software 12391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** distributed under the License is distributed on an "AS IS" BASIS, 13391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** See the License for the specific language governing permissions and 15391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent** limitations under the License. 16391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent*/ 17391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 18391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent#include <stdint.h> 191a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurent#include <sys/types.h> 20391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent#include <binder/IMemory.h> 21391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent#include <binder/Parcel.h> 22391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent#include <binder/IPCThreadState.h> 23391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent#include <binder/IServiceManager.h> 24391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent#include <soundtrigger/ISoundTriggerClient.h> 25391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 26391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentnamespace android { 27391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 28391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentenum { 29391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent ON_RECOGNITION_EVENT = IBinder::FIRST_CALL_TRANSACTION, 30391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent ON_SOUNDMODEL_EVENT, 31391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent ON_SERVICE_STATE_CHANGE 32391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent}; 33391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 34391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentclass BpSoundTriggerClient: public BpInterface<ISoundTriggerClient> 35391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent{ 36391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 37391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentpublic: 38391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent BpSoundTriggerClient(const sp<IBinder>& impl) 39391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent : BpInterface<ISoundTriggerClient>(impl) 40391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent { 41391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 42391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 43391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent virtual void onRecognitionEvent(const sp<IMemory>& eventMemory) 44391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent { 45391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Parcel data, reply; 46391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor()); 47391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.writeStrongBinder(eventMemory->asBinder()); 48391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent remote()->transact(ON_RECOGNITION_EVENT, 49391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data, 50391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent &reply); 51391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 52391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 53391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent virtual void onSoundModelEvent(const sp<IMemory>& eventMemory) 54391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent { 55391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Parcel data, reply; 56391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor()); 57391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.writeStrongBinder(eventMemory->asBinder()); 58391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent remote()->transact(ON_SOUNDMODEL_EVENT, 59391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data, 60391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent &reply); 61391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 62391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent virtual void onServiceStateChange(const sp<IMemory>& eventMemory) 63391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent { 64391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent Parcel data, reply; 65391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor()); 66391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.writeStrongBinder(eventMemory->asBinder()); 67391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent remote()->transact(ON_SERVICE_STATE_CHANGE, 68391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data, 69391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent &reply); 70391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 71391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent}; 72391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 73391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric LaurentIMPLEMENT_META_INTERFACE(SoundTriggerClient, 74391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent "android.hardware.ISoundTriggerClient"); 75391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 76391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent// ---------------------------------------------------------------------- 77391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent 78391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurentstatus_t BnSoundTriggerClient::onTransact( 79391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 80391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent{ 81391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent switch(code) { 82391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent case ON_RECOGNITION_EVENT: { 83391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent CHECK_INTERFACE(ISoundTriggerClient, data, reply); 84391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent sp<IMemory> eventMemory = interface_cast<IMemory>( 85391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.readStrongBinder()); 86391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent onRecognitionEvent(eventMemory); 87391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent return NO_ERROR; 88391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } break; 89391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent case ON_SOUNDMODEL_EVENT: { 90391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent CHECK_INTERFACE(ISoundTriggerClient, data, reply); 91391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent sp<IMemory> eventMemory = interface_cast<IMemory>( 92391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.readStrongBinder()); 93391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent onSoundModelEvent(eventMemory); 94391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent return NO_ERROR; 95391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } break; 96391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent case ON_SERVICE_STATE_CHANGE: { 97391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent CHECK_INTERFACE(ISoundTriggerClient, data, reply); 98391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent sp<IMemory> eventMemory = interface_cast<IMemory>( 99391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent data.readStrongBinder()); 100391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent onServiceStateChange(eventMemory); 101391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent return NO_ERROR; 102391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } break; 103391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent default: 104391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent return BBinder::onTransact(code, data, reply, flags); 105391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent } 106391e2d0d88c1acd87b1503be276cfa4e7ce66c88Eric Laurent} 107 108// ---------------------------------------------------------------------------- 109 110}; // namespace android 111