diff --git a/include/batteryservice/BatteryService.h b/include/batteryservice/BatteryService.h new file mode 100644 index 000000000..855262b33 --- /dev/null +++ b/include/batteryservice/BatteryService.h @@ -0,0 +1,64 @@ +/* + * 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. + */ + +#ifndef ANDROID_BATTERYSERVICE_H +#define ANDROID_BATTERYSERVICE_H + +#include +#include +#include + +namespace android { + +// must be kept in sync with definitions in BatteryManager.java +enum { + BATTERY_STATUS_UNKNOWN = 1, // equals BatteryManager.BATTERY_STATUS_UNKNOWN constant + BATTERY_STATUS_CHARGING = 2, // equals BatteryManager.BATTERY_STATUS_CHARGING constant + BATTERY_STATUS_DISCHARGING = 3, // equals BatteryManager.BATTERY_STATUS_DISCHARGING constant + BATTERY_STATUS_NOT_CHARGING = 4, // equals BatteryManager.BATTERY_STATUS_NOT_CHARGING constant + BATTERY_STATUS_FULL = 5, // equals BatteryManager.BATTERY_STATUS_FULL constant +}; + +// must be kept in sync with definitions in BatteryManager.java +enum { + BATTERY_HEALTH_UNKNOWN = 1, // equals BatteryManager.BATTERY_HEALTH_UNKNOWN constant + BATTERY_HEALTH_GOOD = 2, // equals BatteryManager.BATTERY_HEALTH_GOOD constant + BATTERY_HEALTH_OVERHEAT = 3, // equals BatteryManager.BATTERY_HEALTH_OVERHEAT constant + BATTERY_HEALTH_DEAD = 4, // equals BatteryManager.BATTERY_HEALTH_DEAD constant + BATTERY_HEALTH_OVER_VOLTAGE = 5, // equals BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE constant + BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6, // equals BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE constant + BATTERY_HEALTH_COLD = 7, // equals BatteryManager.BATTERY_HEALTH_COLD constant +}; + +struct BatteryProperties { + bool chargerAcOnline; + bool chargerUsbOnline; + bool chargerWirelessOnline; + int batteryStatus; + int batteryHealth; + bool batteryPresent; + int batteryLevel; + int batteryVoltage; + int batteryTemperature; + String8 batteryTechnology; + + status_t writeToParcel(Parcel* parcel) const; + status_t readFromParcel(Parcel* parcel); +}; + +}; // namespace android + +#endif // ANDROID_BATTERYSERVICE_H diff --git a/include/batteryservice/IBatteryPropertiesListener.h b/include/batteryservice/IBatteryPropertiesListener.h new file mode 100644 index 000000000..b02d8e907 --- /dev/null +++ b/include/batteryservice/IBatteryPropertiesListener.h @@ -0,0 +1,45 @@ +/* + * 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. + */ + +#ifndef ANDROID_IBATTERYPROPERTIESLISTENER_H +#define ANDROID_IBATTERYPROPERTIESLISTENER_H + +#include +#include + +#include + +namespace android { + +// must be kept in sync with interface defined in IBatteryPropertiesListener.aidl +enum { + TRANSACT_BATTERYPROPERTIESCHANGED = IBinder::FIRST_CALL_TRANSACTION, +}; + +// ---------------------------------------------------------------------------- + +class IBatteryPropertiesListener : public IInterface { +public: + DECLARE_META_INTERFACE(BatteryPropertiesListener); + + virtual void batteryPropertiesChanged(struct BatteryProperties props) = 0; +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android + +#endif // ANDROID_IBATTERYPROPERTIESLISTENER_H diff --git a/include/batteryservice/IBatteryPropertiesRegistrar.h b/include/batteryservice/IBatteryPropertiesRegistrar.h new file mode 100644 index 000000000..8d28b1d35 --- /dev/null +++ b/include/batteryservice/IBatteryPropertiesRegistrar.h @@ -0,0 +1,47 @@ +/* + * 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. + */ + +#ifndef ANDROID_IBATTERYPROPERTIESREGISTRAR_H +#define ANDROID_IBATTERYPROPERTIESREGISTRAR_H + +#include +#include + +namespace android { + +// must be kept in sync with interface defined in IBatteryPropertiesRegistrar.aidl +enum { + REGISTER_LISTENER = IBinder::FIRST_CALL_TRANSACTION, + UNREGISTER_LISTENER, +}; + +class IBatteryPropertiesRegistrar : public IInterface { +public: + DECLARE_META_INTERFACE(BatteryPropertiesRegistrar); + + virtual void registerListener(const sp& listener) = 0; + virtual void unregisterListener(const sp& listener) = 0; +}; + +class BnBatteryPropertiesRegistrar : public BnInterface { +public: + virtual status_t onTransact(uint32_t code, const Parcel& data, + Parcel* reply, uint32_t flags = 0); +}; + +}; // namespace android + +#endif // ANDROID_IBATTERYPROPERTIESREGISTRAR_H diff --git a/services/batteryservice/Android.mk b/services/batteryservice/Android.mk new file mode 100644 index 000000000..0a29c36d5 --- /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 000000000..ab636a9f8 --- /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 +#include +#include +#include +#include +#include +#include + +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 000000000..19ac7f0ec --- /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 +#include +#include +#include + +namespace android { + +class BpBatteryPropertiesListener : public BpInterface +{ +public: + BpBatteryPropertiesListener(const sp& impl) + : BpInterface(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 000000000..6c2d2a5bc --- /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 + +#include +#include +#include +#include +#include + +namespace android { + +class BpBatteryPropertiesRegistrar : public BpInterface { +public: + BpBatteryPropertiesRegistrar(const sp& impl) + : BpInterface(impl) {} + + void registerListener(const sp& listener) { + Parcel data; + data.writeInterfaceToken(IBatteryPropertiesRegistrar::getInterfaceDescriptor()); + data.writeStrongBinder(listener->asBinder()); + remote()->transact(REGISTER_LISTENER, data, NULL); + } + + void unregisterListener(const sp& 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 listener = + interface_cast(data.readStrongBinder()); + registerListener(listener); + return OK; + } + + case UNREGISTER_LISTENER: { + CHECK_INTERFACE(IBatteryPropertiesRegistrar, data, reply); + sp listener = + interface_cast(data.readStrongBinder()); + unregisterListener(listener); + return OK; + } + } + return BBinder::onTransact(code, data, reply, flags); +}; + +// ---------------------------------------------------------------------------- + +}; // namespace android