1b166940edca6e312463461438e2aa66e9852c26aBenoit Goby/*
2b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (C) 2010 The Android Open Source Project
3b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
4b166940edca6e312463461438e2aa66e9852c26aBenoit Goby *
5b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Not a Contribution, Apache license notifications and license are
6b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * retained for attribution purposes only.
7b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
8b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Licensed under the Apache License, Version 2.0 (the "License");
9b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * you may not use this file except in compliance with the License.
10b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * You may obtain a copy of the License at
11b166940edca6e312463461438e2aa66e9852c26aBenoit Goby *
12b166940edca6e312463461438e2aa66e9852c26aBenoit Goby *      http://www.apache.org/licenses/LICENSE-2.0
13b166940edca6e312463461438e2aa66e9852c26aBenoit Goby *
14b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * Unless required by applicable law or agreed to in writing, software
15b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * distributed under the License is distributed on an "AS IS" BASIS,
16b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * See the License for the specific language governing permissions and
18b166940edca6e312463461438e2aa66e9852c26aBenoit Goby * limitations under the License.
19b166940edca6e312463461438e2aa66e9852c26aBenoit Goby */
20b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
21b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <sys/types.h>
22b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <binder/Parcel.h>
23b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <binder/IBinder.h>
24b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <binder/IInterface.h>
25b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <utils/Errors.h>
26b166940edca6e312463461438e2aa66e9852c26aBenoit Goby#include <IQClient.h>
27b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
28b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyusing namespace android;
29b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
30b166940edca6e312463461438e2aa66e9852c26aBenoit Goby// ---------------------------------------------------------------------------
31b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
32b166940edca6e312463461438e2aa66e9852c26aBenoit Gobynamespace qClient {
33b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
34b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyenum {
35b166940edca6e312463461438e2aa66e9852c26aBenoit Goby    NOTIFY_CALLBACK = IBinder::FIRST_CALL_TRANSACTION,
36b166940edca6e312463461438e2aa66e9852c26aBenoit Goby};
37b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
38b166940edca6e312463461438e2aa66e9852c26aBenoit Gobyclass BpQClient : public BpInterface<IQClient>
39b166940edca6e312463461438e2aa66e9852c26aBenoit Goby{
40b166940edca6e312463461438e2aa66e9852c26aBenoit Gobypublic:
41b166940edca6e312463461438e2aa66e9852c26aBenoit Goby    BpQClient(const sp<IBinder>& impl)
42b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        : BpInterface<IQClient>(impl) {}
43b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
44b166940edca6e312463461438e2aa66e9852c26aBenoit Goby    virtual status_t notifyCallback(uint32_t msg, uint32_t value) {
45b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        Parcel data, reply;
46b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        data.writeInterfaceToken(IQClient::getInterfaceDescriptor());
47b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        data.writeInt32(msg);
48b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        data.writeInt32(value);
49b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        remote()->transact(NOTIFY_CALLBACK, data, &reply);
50b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        status_t result = reply.readInt32();
51b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        return result;
52b166940edca6e312463461438e2aa66e9852c26aBenoit Goby    }
53b166940edca6e312463461438e2aa66e9852c26aBenoit Goby};
54b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
55b166940edca6e312463461438e2aa66e9852c26aBenoit GobyIMPLEMENT_META_INTERFACE(QClient, "android.display.IQClient");
56b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
57b166940edca6e312463461438e2aa66e9852c26aBenoit Goby// ----------------------------------------------------------------------
58b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
59b166940edca6e312463461438e2aa66e9852c26aBenoit Gobystatus_t BnQClient::onTransact(
60b166940edca6e312463461438e2aa66e9852c26aBenoit Goby    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
61b166940edca6e312463461438e2aa66e9852c26aBenoit Goby{
62b166940edca6e312463461438e2aa66e9852c26aBenoit Goby    switch(code) {
63b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        case NOTIFY_CALLBACK: {
64b166940edca6e312463461438e2aa66e9852c26aBenoit Goby            CHECK_INTERFACE(IQClient, data, reply);
65b166940edca6e312463461438e2aa66e9852c26aBenoit Goby            uint32_t msg = data.readInt32();
66b166940edca6e312463461438e2aa66e9852c26aBenoit Goby            uint32_t value = data.readInt32();
67b166940edca6e312463461438e2aa66e9852c26aBenoit Goby            notifyCallback(msg, value);
68b166940edca6e312463461438e2aa66e9852c26aBenoit Goby            return NO_ERROR;
69b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        } break;
70b166940edca6e312463461438e2aa66e9852c26aBenoit Goby        default:
71b166940edca6e312463461438e2aa66e9852c26aBenoit Goby            return BBinder::onTransact(code, data, reply, flags);
72b166940edca6e312463461438e2aa66e9852c26aBenoit Goby    }
73b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}
74b166940edca6e312463461438e2aa66e9852c26aBenoit Goby
75b166940edca6e312463461438e2aa66e9852c26aBenoit Goby}; // namespace qClient
76