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#include <stdint.h>
1887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <sys/types.h>
1987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <batteryservice/IBatteryPropertiesListener.h>
2087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor#include <binder/Parcel.h>
2187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
2287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynornamespace android {
2387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
2487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynorclass BpBatteryPropertiesListener : public BpInterface<IBatteryPropertiesListener>
2587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor{
2687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynorpublic:
276ca70efdaef8c07e91692101c7a3ae35dc1e0cbbChih-Hung Hsieh    explicit BpBatteryPropertiesListener(const sp<IBinder>& impl)
2887bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        : BpInterface<IBatteryPropertiesListener>(impl)
2987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    {
3087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    }
3187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
3287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    void batteryPropertiesChanged(struct BatteryProperties props)
3387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    {
3487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        Parcel data, reply;
3587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        data.writeInterfaceToken(IBatteryPropertiesListener::getInterfaceDescriptor());
3687bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        data.writeInt32(1);
3787bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor        props.writeToParcel(&data);
38347f2884dbb29efd9b996bbd7ae7ca7996eb5f08Andreas Gampe        remote()->transact(TRANSACT_BATTERYPROPERTIESCHANGED, data, &reply, IBinder::FLAG_ONEWAY);
3987bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor    }
4087bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor};
4187bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
4287bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd PoynorIMPLEMENT_META_INTERFACE(BatteryPropertiesListener, "android.os.IBatteryPropertiesListener");
4387bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
4487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor// ----------------------------------------------------------------------------
4587bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor
460bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qianstatus_t BnBatteryPropertiesListener::onTransact(uint32_t code, const Parcel& data,
470bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian                                                 Parcel* reply, uint32_t flags)
480bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian{
490bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian    switch(code) {
500bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian        case TRANSACT_BATTERYPROPERTIESCHANGED: {
510bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian            CHECK_INTERFACE(IBatteryPropertiesListener, data, reply);
520bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian            struct BatteryProperties props = {};
530bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian            if (data.readInt32() != 0) {
540bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian                props.readFromParcel((Parcel*)&data);
550bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian            }
560bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian            batteryPropertiesChanged(props);
570bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian            return NO_ERROR;
580bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian        }
590bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian        default:
600bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian            return BBinder::onTransact(code, data, reply, flags);
610bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian    }
620bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian};
630bd44d154ec25b27b624c3c2ec447031fe65e2cdJin Qian
6487bf0d97be5ef2689546b246dfb6c21c4eec3ce0Todd Poynor}; // namespace android
65