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