Home | History | Annotate | Download | only in soundtrigger
      1 /*
      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 
     26 namespace android {
     27 
     28 enum {
     29     ON_RECOGNITION_EVENT = IBinder::FIRST_CALL_TRANSACTION,
     30     ON_SOUNDMODEL_EVENT,
     31     ON_SERVICE_STATE_CHANGE
     32 };
     33 
     34 class BpSoundTriggerClient: public BpInterface<ISoundTriggerClient>
     35 {
     36 
     37 public:
     38     explicit BpSoundTriggerClient(const sp<IBinder>& impl)
     39         : BpInterface<ISoundTriggerClient>(impl)
     40     {
     41     }
     42 
     43     virtual void onRecognitionEvent(const sp<IMemory>& eventMemory)
     44     {
     45         Parcel data, reply;
     46         data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor());
     47         data.writeStrongBinder(IInterface::asBinder(eventMemory));
     48         remote()->transact(ON_RECOGNITION_EVENT,
     49                            data,
     50                            &reply);
     51     }
     52 
     53     virtual void onSoundModelEvent(const sp<IMemory>& eventMemory)
     54     {
     55         Parcel data, reply;
     56         data.writeInterfaceToken(ISoundTriggerClient::getInterfaceDescriptor());
     57         data.writeStrongBinder(IInterface::asBinder(eventMemory));
     58         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());
     66         data.writeStrongBinder(IInterface::asBinder(eventMemory));
     67         remote()->transact(ON_SERVICE_STATE_CHANGE,
     68                            data,
     69                            &reply);
     70     }
     71 };
     72 
     73 IMPLEMENT_META_INTERFACE(SoundTriggerClient,
     74                          "android.hardware.ISoundTriggerClient");
     75 
     76 // ----------------------------------------------------------------------
     77 
     78 status_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;
     89         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;
    103         default:
    104             return BBinder::onTransact(code, data, reply, flags);
    105     }
    106 }
    107 
    108 // ----------------------------------------------------------------------------
    109 
    110 }; // namespace android
    111