diff options
author | Todd Poynor <toddpoynor@google.com> | 2013-05-16 14:51:15 -0700 |
---|---|---|
committer | Todd Poynor <toddpoynor@google.com> | 2013-07-25 01:57:32 +0000 |
commit | 87bf0d97be5ef2689546b246dfb6c21c4eec3ce0 (patch) | |
tree | 07ead5657d11419fc9547cbe094f2731364664e0 /services/batteryservice | |
parent | a7b0f04aaf7f04a9617dbbc839b1aaa6f20ca6d6 (diff) | |
download | frameworks_native-87bf0d97be5ef2689546b246dfb6c21c4eec3ce0.zip frameworks_native-87bf0d97be5ef2689546b246dfb6c21c4eec3ce0.tar.gz frameworks_native-87bf0d97be5ef2689546b246dfb6c21c4eec3ce0.tar.bz2 |
add libbatteryservice
IBatteryPropertiesListener is used by clients such as BatteryService to
receive notifications of changed battery/power status (from healthd).
IBatteryPropertiesRegistrar manages registrations of
IBatteryPropertiesListener clients.
Add BatteryService native header with defines from BatteryManager, and
class BatteryProperties to pass battery/power status around.
Change-Id: I44e2736e503b586794097b7b9d31d07fefd9b15a
Diffstat (limited to 'services/batteryservice')
-rw-r--r-- | services/batteryservice/Android.mk | 17 | ||||
-rw-r--r-- | services/batteryservice/BatteryProperties.cpp | 60 | ||||
-rw-r--r-- | services/batteryservice/IBatteryPropertiesListener.cpp | 46 | ||||
-rw-r--r-- | services/batteryservice/IBatteryPropertiesRegistrar.cpp | 78 |
4 files changed, 201 insertions, 0 deletions
diff --git a/services/batteryservice/Android.mk b/services/batteryservice/Android.mk new file mode 100644 index 0000000..0a29c36 --- /dev/null +++ b/services/batteryservice/Android.mk @@ -0,0 +1,17 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_SRC_FILES:= \ + BatteryProperties.cpp \ + IBatteryPropertiesListener.cpp \ + IBatteryPropertiesRegistrar.cpp + +LOCAL_STATIC_LIBRARIES := \ + libutils \ + libbinder + +LOCAL_MODULE:= libbatteryservice + +LOCAL_MODULE_TAGS := optional + +include $(BUILD_STATIC_LIBRARY) diff --git a/services/batteryservice/BatteryProperties.cpp b/services/batteryservice/BatteryProperties.cpp new file mode 100644 index 0000000..ab636a9 --- /dev/null +++ b/services/batteryservice/BatteryProperties.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdint.h> +#include <sys/types.h> +#include <batteryservice/BatteryService.h> +#include <binder/Parcel.h> +#include <utils/Errors.h> +#include <utils/String8.h> +#include <utils/String16.h> + +namespace android { + +/* + * Parcel read/write code must be kept in sync with + * frameworks/base/core/java/android/os/BatteryProperties.java + */ + +status_t BatteryProperties::readFromParcel(Parcel* p) { + chargerAcOnline = p->readInt32() == 1 ? true : false; + chargerUsbOnline = p->readInt32() == 1 ? true : false; + chargerWirelessOnline = p->readInt32() == 1 ? true : false; + batteryStatus = p->readInt32(); + batteryHealth = p->readInt32(); + batteryPresent = p->readInt32() == 1 ? true : false; + batteryLevel = p->readInt32(); + batteryVoltage = p->readInt32(); + batteryTemperature = p->readInt32(); + batteryTechnology = String8((p->readString16()).string()); + return OK; +} + +status_t BatteryProperties::writeToParcel(Parcel* p) const { + p->writeInt32(chargerAcOnline ? 1 : 0); + p->writeInt32(chargerUsbOnline ? 1 : 0); + p->writeInt32(chargerWirelessOnline ? 1 : 0); + p->writeInt32(batteryStatus); + p->writeInt32(batteryHealth); + p->writeInt32(batteryPresent ? 1 : 0); + p->writeInt32(batteryLevel); + p->writeInt32(batteryVoltage); + p->writeInt32(batteryTemperature); + p->writeString16(String16(batteryTechnology)); + return OK; +} + +}; // namespace android diff --git a/services/batteryservice/IBatteryPropertiesListener.cpp b/services/batteryservice/IBatteryPropertiesListener.cpp new file mode 100644 index 0000000..19ac7f0 --- /dev/null +++ b/services/batteryservice/IBatteryPropertiesListener.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <stdint.h> +#include <sys/types.h> +#include <batteryservice/IBatteryPropertiesListener.h> +#include <binder/Parcel.h> + +namespace android { + +class BpBatteryPropertiesListener : public BpInterface<IBatteryPropertiesListener> +{ +public: + BpBatteryPropertiesListener(const sp<IBinder>& impl) + : BpInterface<IBatteryPropertiesListener>(impl) + { + } + + void batteryPropertiesChanged(struct BatteryProperties props) + { + Parcel data, reply; + data.writeInterfaceToken(IBatteryPropertiesListener::getInterfaceDescriptor()); + data.writeInt32(1); + props.writeToParcel(&data); + status_t err = remote()->transact(TRANSACT_BATTERYPROPERTIESCHANGED, data, &reply, IBinder::FLAG_ONEWAY); + } +}; + +IMPLEMENT_META_INTERFACE(BatteryPropertiesListener, "android.os.IBatteryPropertiesListener"); + +// ---------------------------------------------------------------------------- + +}; // namespace android diff --git a/services/batteryservice/IBatteryPropertiesRegistrar.cpp b/services/batteryservice/IBatteryPropertiesRegistrar.cpp new file mode 100644 index 0000000..6c2d2a5 --- /dev/null +++ b/services/batteryservice/IBatteryPropertiesRegistrar.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "IBatteryPropertiesRegistrar" +//#define LOG_NDEBUG 0 +#include <utils/Log.h> + +#include <batteryservice/IBatteryPropertiesListener.h> +#include <batteryservice/IBatteryPropertiesRegistrar.h> +#include <stdint.h> +#include <sys/types.h> +#include <binder/Parcel.h> + +namespace android { + +class BpBatteryPropertiesRegistrar : public BpInterface<IBatteryPropertiesRegistrar> { +public: + BpBatteryPropertiesRegistrar(const sp<IBinder>& impl) + : BpInterface<IBatteryPropertiesRegistrar>(impl) {} + + void registerListener(const sp<IBatteryPropertiesListener>& listener) { + Parcel data; + data.writeInterfaceToken(IBatteryPropertiesRegistrar::getInterfaceDescriptor()); + data.writeStrongBinder(listener->asBinder()); + remote()->transact(REGISTER_LISTENER, data, NULL); + } + + void unregisterListener(const sp<IBatteryPropertiesListener>& listener) { + Parcel data; + data.writeInterfaceToken(IBatteryPropertiesRegistrar::getInterfaceDescriptor()); + data.writeStrongBinder(listener->asBinder()); + remote()->transact(UNREGISTER_LISTENER, data, NULL); + } +}; + +IMPLEMENT_META_INTERFACE(BatteryPropertiesRegistrar, "android.os.IBatteryPropertiesRegistrar"); + +status_t BnBatteryPropertiesRegistrar::onTransact(uint32_t code, + const Parcel& data, + Parcel* reply, + uint32_t flags) +{ + switch(code) { + case REGISTER_LISTENER: { + CHECK_INTERFACE(IBatteryPropertiesRegistrar, data, reply); + sp<IBatteryPropertiesListener> listener = + interface_cast<IBatteryPropertiesListener>(data.readStrongBinder()); + registerListener(listener); + return OK; + } + + case UNREGISTER_LISTENER: { + CHECK_INTERFACE(IBatteryPropertiesRegistrar, data, reply); + sp<IBatteryPropertiesListener> listener = + interface_cast<IBatteryPropertiesListener>(data.readStrongBinder()); + unregisterListener(listener); + return OK; + } + } + return BBinder::onTransact(code, data, reply, flags); +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android |