Show smart battery status with 'battery' command

The smart battery status register holds some useful info. This displays it
along with all the other stuff.

This decodes the alarm and status bits, but not the error code, since that
field is only valid immediately after a failed i2c transaction (that's how
the battery indicates error). Since we do all sorts of automatic battery
probing in other threads, that value will never be reliable when we run the
"battery" console command.

BUG=none
BRANCH=none
TEST=manual

Run "battery". You should see a new line amongst the output:

  Status:    0x00c0 DCHG INIT

Change-Id: I5e684198af2cf7767f89786c91a7d946ad95d4c2
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/175659
This commit is contained in:
Bill Richardson
2013-11-05 07:00:17 -08:00
committed by chrome-internal-fetch
parent 48dfd8c5ee
commit d64de2bb1b
4 changed files with 33 additions and 4 deletions

View File

@@ -38,6 +38,30 @@ static int print_battery_info(void)
char text[32];
const char *unit;
print_item_name("Status:");
if (check_print_error(battery_status(&value))) {
const char * const st[] = {"EMPTY", "FULL", "DCHG", "INIT",};
const char * const al[] = {"RT", "RC", "--", "TD",
"OT", "--", "TC", "OC"};
int i;
ccprintf("0x%04x", value);
/* bits 0-3 are only valid when the previous transaction
* failed, so ignore them */
/* bits 4-7 are status */
for (i = 0; i < 4; i++)
if (value & (1 << (i+4)))
ccprintf(" %s", st[i]);
/* bits 15-8 are alarms */
for (i = 0; i < 8; i++)
if (value & (1 << (i+8)))
ccprintf(" %s", al[i]);
ccprintf("\n");
}
print_item_name("Temp:");
if (check_print_error(battery_temperature(&value)))
ccprintf("0x%04x = %.1d K (%.1d C)\n",

View File

@@ -205,6 +205,11 @@ int battery_get_mode(int *mode)
return EC_ERROR_UNIMPLEMENTED;
}
int battery_status(int *status)
{
return EC_ERROR_UNIMPLEMENTED;
}
int battery_is_in_10mw_mode(int *val)
{
/* Always using mAh unit */

View File

@@ -86,7 +86,7 @@ int battery_is_connected(void);
/**
* Get battery mode.
*
* See MODE_* constants in smart_battery.h
* See MODE_* constants in battery_smart.h
*
* @param mode Destination for current mode.
* @return non-zero if error.
@@ -96,7 +96,7 @@ int battery_get_mode(int *mode);
/**
* Set battery mode.
*
* See MODE_* constants in smart_battery.h
* See MODE_* constants in battery_smart.h
*
* @param mode New mode.
* @return non-zero if error.
@@ -267,7 +267,7 @@ int battery_charging_allowed(int *allowed);
/**
* Read battery status.
*
* @param status Destination for status; see STATUS_* in smart_battery.h.
* @param status Destination for status; see STATUS_* in battery_smart.h.
* @return non-zero if error.
*/
int battery_status(int *status);

View File

@@ -80,7 +80,7 @@
#define STATUS_FULLY_DISCHARGED (1 << 4)
#define STATUS_FULLY_CHARGED (1 << 5)
#define STATUS_DISCHARGING (1 << 6)
#define STATUS_INITIALIZING (1 << 7)
#define STATUS_INITIALIZED (1 << 7)
#define STATUS_REMAINING_TIME_ALARM (1 << 8)
#define STATUS_REMAINING_CAPACITY_ALARM (1 << 9)
#define STATUS_TERMINATE_DISCHARGE_ALARM (1 << 11)