blob: 13856317450e0c713ebc458b6a11d4c5ee389446 [file] [log] [blame]
Eric Laurentb7a11d82014-04-18 17:40:41 -07001/*
2**
3** Copyright 2014, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9** http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#include <stdint.h>
19#include <sys/types.h>
20#include <binder/IMemory.h>
21#include <binder/Parcel.h>
22#include <binder/IPCThreadState.h>
23#include <binder/IServiceManager.h>
24#include <soundtrigger/ISoundTriggerClient.h>
25
26namespace android {
27
28enum {
29 ON_RECOGNITION_EVENT = IBinder::FIRST_CALL_TRANSACTION,
Eric Laurentdf3dc7e2014-07-27 18:39:40 -070030 ON_SOUNDMODEL_EVENT,
31 ON_SERVICE_STATE_CHANGE
Eric Laurentb7a11d82014-04-18 17:40:41 -070032};
33
34class BpSoundTriggerClient: public BpInterface<ISoundTriggerClient>
35{
36
37public:
Chih-Hung Hsieh090ef602016-04-27 10:39:54 -070038 explicit BpSoundTriggerClient(const sp<IBinder>& impl)
Eric Laurentb7a11d82014-04-18 17:40:41 -070039 : BpInterface<ISoundTriggerClient>(impl)
40 {
41 }
42
43 virtual void onRecognitionEvent(const sp<IMemory>& eventMemory)
44 {
45 Parcel data, reply;
46 data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor());
Marco Nelissen06b46062014-11-14 07:58:25 -080047 data.writeStrongBinder(IInterface::asBinder(eventMemory));
Eric Laurentb7a11d82014-04-18 17:40:41 -070048 remote()->transact(ON_RECOGNITION_EVENT,
49 data,
50 &reply);
51 }
Eric Laurentdf3dc7e2014-07-27 18:39:40 -070052
53 virtual void onSoundModelEvent(const sp<IMemory>& eventMemory)
54 {
55 Parcel data, reply;
56 data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor());
Marco Nelissen06b46062014-11-14 07:58:25 -080057 data.writeStrongBinder(IInterface::asBinder(eventMemory));
Eric Laurentdf3dc7e2014-07-27 18:39:40 -070058 remote()->transact(ON_SOUNDMODEL_EVENT,
59 data,
60 &reply);
61 }
62 virtual void onServiceStateChange(const sp<IMemory>& eventMemory)
63 {
64 Parcel data, reply;
65 data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor());
Marco Nelissen06b46062014-11-14 07:58:25 -080066 data.writeStrongBinder(IInterface::asBinder(eventMemory));
Eric Laurentdf3dc7e2014-07-27 18:39:40 -070067 remote()->transact(ON_SERVICE_STATE_CHANGE,
68 data,
69 &reply);
70 }
Eric Laurentb7a11d82014-04-18 17:40:41 -070071};
72
73IMPLEMENT_META_INTERFACE(SoundTriggerClient,
74 "android.hardware.ISoundTriggerClient");
75
76// ----------------------------------------------------------------------
77
78status_t BnSoundTriggerClient::onTransact(
79 uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
80{
81 switch(code) {
82 case ON_RECOGNITION_EVENT: {
83 CHECK_INTERFACE(ISoundTriggerClient, data, reply);
84 sp<IMemory> eventMemory = interface_cast<IMemory>(
85 data.readStrongBinder());
86 onRecognitionEvent(eventMemory);
87 return NO_ERROR;
88 } break;
Eric Laurentdf3dc7e2014-07-27 18:39:40 -070089 case ON_SOUNDMODEL_EVENT: {
90 CHECK_INTERFACE(ISoundTriggerClient, data, reply);
91 sp<IMemory> eventMemory = interface_cast<IMemory>(
92 data.readStrongBinder());
93 onSoundModelEvent(eventMemory);
94 return NO_ERROR;
95 } break;
96 case ON_SERVICE_STATE_CHANGE: {
97 CHECK_INTERFACE(ISoundTriggerClient, data, reply);
98 sp<IMemory> eventMemory = interface_cast<IMemory>(
99 data.readStrongBinder());
100 onServiceStateChange(eventMemory);
101 return NO_ERROR;
102 } break;
Eric Laurentb7a11d82014-04-18 17:40:41 -0700103 default:
104 return BBinder::onTransact(code, data, reply, flags);
105 }
106}
107
108// ----------------------------------------------------------------------------
109
110}; // namespace android