libbatteryservice: add interface to read individual battery properties

Change-Id: I089eb6348053a8a9c8bca59e57ed97b4af14825a
This commit is contained in:
Todd Poynor 2013-08-14 17:23:37 -07:00
parent c7fbebe87e
commit cf80873586
5 changed files with 80 additions and 0 deletions

View File

@ -43,6 +43,12 @@ enum {
BATTERY_HEALTH_COLD = 7, // equals BatteryManager.BATTERY_HEALTH_COLD constant
};
// must be kept in sync with definitions in BatteryProperty.java
enum {
BATTERY_PROP_CHARGE_COUNTER = 1, // equals BatteryProperty.BATTERY_PROP_CHARGE_COUNTER constant
BATTERY_PROP_CURRENT_NOW = 2, // equals BatteryProperty.BATTERY_PROP_CURRENT_NOW constant
};
struct BatteryProperties {
bool chargerAcOnline;
bool chargerUsbOnline;
@ -61,6 +67,13 @@ struct BatteryProperties {
status_t readFromParcel(Parcel* parcel);
};
struct BatteryProperty {
int valueInt;
status_t writeToParcel(Parcel* parcel) const;
status_t readFromParcel(Parcel* parcel);
};
}; // namespace android
#endif // ANDROID_BATTERYSERVICE_H

View File

@ -26,6 +26,7 @@ namespace android {
enum {
REGISTER_LISTENER = IBinder::FIRST_CALL_TRANSACTION,
UNREGISTER_LISTENER,
GET_PROPERTY,
};
class IBatteryPropertiesRegistrar : public IInterface {
@ -34,6 +35,7 @@ public:
virtual void registerListener(const sp<IBatteryPropertiesListener>& listener) = 0;
virtual void unregisterListener(const sp<IBatteryPropertiesListener>& listener) = 0;
virtual status_t getProperty(int id, struct BatteryProperty *val) = 0;
};
class BnBatteryPropertiesRegistrar : public BnInterface<IBatteryPropertiesRegistrar> {

View File

@ -3,6 +3,7 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
BatteryProperties.cpp \
BatteryProperty.cpp \
IBatteryPropertiesListener.cpp \
IBatteryPropertiesRegistrar.cpp

View File

@ -0,0 +1,40 @@
/*
* 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>
namespace android {
/*
* Parcel read/write code must be kept in sync with
* frameworks/base/core/java/android/os/BatteryProperty.java
*/
status_t BatteryProperty::readFromParcel(Parcel* p) {
valueInt = p->readInt32();
return OK;
}
status_t BatteryProperty::writeToParcel(Parcel* p) const {
p->writeInt32(valueInt);
return OK;
}
}; // namespace android

View File

@ -44,6 +44,18 @@ public:
data.writeStrongBinder(listener->asBinder());
remote()->transact(UNREGISTER_LISTENER, data, NULL);
}
status_t getProperty(int id, struct BatteryProperty *val) {
Parcel data, reply;
data.writeInterfaceToken(IBatteryPropertiesRegistrar::getInterfaceDescriptor());
data.writeInt32(id);
remote()->transact(GET_PROPERTY, data, &reply);
status_t ret = reply.readInt32();
int parcelpresent = reply.readInt32();
if (parcelpresent)
val->readFromParcel(&reply);
return ret;
}
};
IMPLEMENT_META_INTERFACE(BatteryPropertiesRegistrar, "android.os.IBatteryPropertiesRegistrar");
@ -69,6 +81,18 @@ status_t BnBatteryPropertiesRegistrar::onTransact(uint32_t code,
unregisterListener(listener);
return OK;
}
case GET_PROPERTY: {
CHECK_INTERFACE(IBatteryPropertiesRegistrar, data, reply);
int id = data.readInt32();
struct BatteryProperty val;
status_t result = getProperty(id, &val);
reply->writeNoException();
reply->writeInt32(result);
reply->writeInt32(1);
val.writeToParcel(reply);
return OK;
}
}
return BBinder::onTransact(code, data, reply, flags);
};