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