187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor/*
287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * Copyright (C) 2013 The Android Open Source Project
387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor *
487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * Licensed under the Apache License, Version 2.0 (the "License");
587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * you may not use this file except in compliance with the License.
687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * You may obtain a copy of the License at
787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor *
887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor *      http://www.apache.org/licenses/LICENSE-2.0
987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor *
1087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * Unless required by applicable law or agreed to in writing, software
1187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * distributed under the License is distributed on an "AS IS" BASIS,
1287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * See the License for the specific language governing permissions and
1487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor * limitations under the License.
1587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor */
1687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
1787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#define LOG_TAG "IBatteryPropertiesRegistrar"
1887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor//#define LOG_NDEBUG 0
1987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <utils/Log.h>
2087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
2187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <batteryservice/IBatteryPropertiesListener.h>
2287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <batteryservice/IBatteryPropertiesRegistrar.h>
2387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <stdint.h>
2487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <sys/types.h>
2587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <binder/Parcel.h>
2687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
2787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynornamespace android {
2887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
2987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynorclass BpBatteryPropertiesRegistrar : public BpInterface<IBatteryPropertiesRegistrar> {
3087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynorpublic:
3187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    BpBatteryPropertiesRegistrar(const sp<IBinder>& impl)
3287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        : BpInterface<IBatteryPropertiesRegistrar>(impl) {}
3387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
3487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        void registerListener(const sp<IBatteryPropertiesListener>& listener) {
3587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            Parcel data;
3687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            data.writeInterfaceToken(IBatteryPropertiesRegistrar::getInterfaceDescriptor());
3787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            data.writeStrongBinder(listener->asBinder());
3887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            remote()->transact(REGISTER_LISTENER, data, NULL);
3987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        }
4087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
4187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        void unregisterListener(const sp<IBatteryPropertiesListener>& listener) {
4287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            Parcel data;
4387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            data.writeInterfaceToken(IBatteryPropertiesRegistrar::getInterfaceDescriptor());
4487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            data.writeStrongBinder(listener->asBinder());
4587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            remote()->transact(UNREGISTER_LISTENER, data, NULL);
4687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        }
4787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor};
4887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
4987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd PoynorIMPLEMENT_META_INTERFACE(BatteryPropertiesRegistrar, "android.os.IBatteryPropertiesRegistrar");
5087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
5187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynorstatus_t BnBatteryPropertiesRegistrar::onTransact(uint32_t code,
5287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor                                                  const Parcel& data,
5387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor                                                  Parcel* reply,
5487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor                                                  uint32_t flags)
5587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor{
5687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    switch(code) {
5787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        case REGISTER_LISTENER: {
5887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            CHECK_INTERFACE(IBatteryPropertiesRegistrar, data, reply);
5987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            sp<IBatteryPropertiesListener> listener =
6087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor                interface_cast<IBatteryPropertiesListener>(data.readStrongBinder());
6187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            registerListener(listener);
6287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            return OK;
6387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        }
6487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
6587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        case UNREGISTER_LISTENER: {
6687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            CHECK_INTERFACE(IBatteryPropertiesRegistrar, data, reply);
6787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            sp<IBatteryPropertiesListener> listener =
6887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor                interface_cast<IBatteryPropertiesListener>(data.readStrongBinder());
6987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            unregisterListener(listener);
7087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor            return OK;
7187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        }
7287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    }
7387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    return BBinder::onTransact(code, data, reply, flags);
7487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor};
7587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
7687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor// ----------------------------------------------------------------------------
7787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
7887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor}; // namespace android
79