176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- *
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Pportions of this file taken from the dmidecode project
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Copyright (C) 2000-2002 Alan Cox <alan@redhat.com>
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Copyright (C) 2002-2008 Jean Delvare <khali@linux-fr.org>
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   This program is free software; you can redistribute it and/or modify
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   it under the terms of the GNU General Public License as published by
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   the Free Software Foundation; either version 2 of the License, or
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   (at your option) any later version.
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   This program is distributed in the hope that it will be useful,
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   but WITHOUT ANY WARRANTY; without even the implied warranty of
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   GNU General Public License for more details.
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   You should have received a copy of the GNU General Public License
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   along with this program; if not, write to the Free Software
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   For the avoidance of doubt the "preferred form" of this code is one which
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   is in an open unpatent encumbered format. Where cryptographic key signing
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   forms part of the process of creating an executable the information
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   including keys needed to generate an equivalently functional executable
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman *   are deemed to be part of the source code.
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman*/
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <dmi/dmi.h>
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdio.h>
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanconst char *dmi_battery_chemistry(uint8_t code)
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    /* 3.3.23.1 */
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    static const char *chemistry[] = {
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Other",		/* 0x01 */
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Unknown",
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Lead Acid",
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Nickel Cadmium",
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Nickel Metal Hydride",
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Lithium Ion",
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Zinc Air",
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	"Lithium Polymer"	/* 0x08 */
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    };
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code >= 0x01 && code <= 0x08)
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	return chemistry[code - 0x01];
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return out_of_spec;
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid dmi_battery_capacity(uint16_t code, uint8_t multiplier, char *capacity)
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code == 0)
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	sprintf(capacity, "%s", "Unknown");
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    else
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	sprintf(capacity, "%u mWh", code * multiplier);
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid dmi_battery_voltage(uint16_t code, char *voltage)
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code == 0)
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	sprintf(voltage, "%s", "Unknown");
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    else
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	sprintf(voltage, "%u mV", code);
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid dmi_battery_maximum_error(uint8_t code, char *error)
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (code == 0xFF)
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	sprintf(error, "%s", "Unknown");
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    else
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	sprintf(error, "%u%%", code);
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
73