1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-10 15:18:23 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiBatteryInfo.java
2022-08-19 23:13:27 +02:00

122 lines
4.2 KiB
Java

/* Copyright (C) 2016-2021 Andreas Shimokawa, Carsten Pfeiffer
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.service.devices.huami;
import java.util.GregorianCalendar;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandDateConverter;
import nodomain.freeyourgadget.gadgetbridge.model.BatteryState;
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.AbstractInfo;
//00000006-0000-3512-2118-0009af100700
//
// f = ?
// 30 = 48%
// 00 = 00 = STATUS_NORMAL, 01 = STATUS_CHARGING
// e0 07 = 2016
// 0b = 11
// 1a = 26
// 12 = 18
// 23 = 35
// 2c = 44
// 04 = 4 // num charges??
//
// e0 07 = 2016 // last charge time
// 0b = 11
// 1a = 26
// 17 = 23
// 2b = 43
// 3b = 59
// 04 = 4 // num charges??
// 64 = 100 // how much was charged
public class HuamiBatteryInfo extends AbstractInfo {
public static final byte DEVICE_BATTERY_NORMAL = 0;
public static final byte DEVICE_BATTERY_CHARGING = 1;
// public static final byte DEVICE_BATTERY_LOW = 1;
// public static final byte DEVICE_BATTERY_CHARGING_FULL = 3;
// public static final byte DEVICE_BATTERY_CHARGE_OFF = 4;
public HuamiBatteryInfo(byte[] data) {
super(data);
}
public int getLevelInPercent() {
if (mData.length >= 2) {
return mData[1];
}
return 50; // actually unknown
}
public BatteryState getState() {
if (mData.length >= 3) {
int value = mData[2];
switch (value) {
case DEVICE_BATTERY_NORMAL:
return BatteryState.BATTERY_NORMAL;
case DEVICE_BATTERY_CHARGING:
return BatteryState.BATTERY_CHARGING;
// case DEVICE_BATTERY_CHARGING:
// return BatteryState.BATTERY_CHARGING;
// case DEVICE_BATTERY_CHARGING_FULL:
// return BatteryState.BATTERY_CHARGING_FULL;
// case DEVICE_BATTERY_CHARGE_OFF:
// return BatteryState.BATTERY_NOT_CHARGING_FULL;
}
}
return BatteryState.UNKNOWN;
}
public int getLastChargeLevelInParcent() {
if (mData.length >= 20) {
return mData[19];
}
return 50; // actually unknown
}
public GregorianCalendar getLastChargeTime() {
GregorianCalendar lastCharge = MiBandDateConverter.createCalendar();
if (mData.length >= 18) {
lastCharge = BLETypeConversions.rawBytesToCalendar(new byte[]{
mData[10], mData[11], mData[12], mData[13], mData[14], mData[15], mData[16], mData[17]
});
}
return lastCharge;
}
public int getNumCharges() {
// if (mData.length >= 10) {
// return ((0xff & mData[7]) | ((0xff & mData[8]) << 8));
//
// }
return -1;
}
public GBDeviceEventBatteryInfo toDeviceEvent() {
final GBDeviceEventBatteryInfo deviceEventBatteryInfo = new GBDeviceEventBatteryInfo();
deviceEventBatteryInfo.level = ((short) getLevelInPercent());
deviceEventBatteryInfo.state = getState();
deviceEventBatteryInfo.lastChargeTime = getLastChargeTime();
deviceEventBatteryInfo.numCharges = getNumCharges();
return deviceEventBatteryInfo;
}
}