Difference between revisions of "Code/thinkpad-smapi.sh"
m (-c option in shebang is unnecessary.) |
(Put script in pre block.) |
||
Line 1: | Line 1: | ||
+ | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
# Copyright (C) 2007 William Poetra Yoga Hadisoeseno <williampoetra@gmail.com> | # Copyright (C) 2007 William Poetra Yoga Hadisoeseno <williampoetra@gmail.com> | ||
Line 325: | Line 326: | ||
fi | fi | ||
fi | fi | ||
+ | </pre> |
Revision as of 09:53, 11 April 2025
#!/bin/bash # Copyright (C) 2007 William Poetra Yoga Hadisoeseno <williampoetra@gmail.com> # This file is licensed under the GPL v2. E-mail me if you have any ideas of # other licenses to use (BSD, GPL v3, Public Domain, etc.), I'm open :) # IDEAS # - make an ncurses interface, and also maybe gtk+ and qt # - add option to enable modifying the charge control variables TP_SMAPI_BASE=/sys/devices/platform/smapi # function to simplify reading from files # syntax: read_file <variable> <filename> <check_return_value 0/1> <translate 0/1> [[value] [translation_string]] read_file() { local VARIABLE local FILENAME local CHECK_RETURN local TRANSLATE local VAL local RET VARIABLE="$1"; shift FILENAME="$1"; shift CHECK_RETURN="$1"; shift TRANSLATE="$1"; shift VAL=`cat "$FILENAME" 2> /dev/null` RET=$? if [[ "$CHECK_RETURN" == "1" ]] && [[ $RET -gt 0 ]] then RESULT="[unavailable]" elif [ "$TRANSLATE" == "1" ] then RESULT="unknown ($RET)" while [ -n "$1" ] do if [ "$VAL" == "$1" ] then RESULT="$2" break fi shift 2 done else RESULT="$VAL" fi eval "$VARIABLE="'"'"$RESULT"'"' # eval "$VARIABLE=$RESULT" } give_units() { local VARIABLE local UNIT local VALUE local RESULT VARIABLE="$1" UNIT="$2" eval "VALUE=\$$VARIABLE" if (echo "$VALUE" | grep -qs "^-\?[0-9]") then RESULT="$VALUE $UNIT" else RESULT="$VALUE" fi eval "$VARIABLE="'"'"$RESULT"'"' } replace_val() { local VARIABLE local OLD_VALUE local NEW_VALUE local VALUE local RESULT VARIABLE="$1" OLD_VALUE="$2" NEW_VALUE="$3" eval "VALUE=\$$VARIABLE" if [ "$VALUE" == "$OLD_VALUE" ] then RESULT="$NEW_VALUE" else RESULT="$VALUE" fi eval "$VARIABLE="'"'"$RESULT"'"' } show_help() { cat << EOF thinkpad-smapi.sh - Show SMAPI information on ThinkPad laptops, through the exported SMAPI information by the tp_smapi module. -a Show all available information -b [n] Show all available information for battery [n] -h Show this help text -m Show miscellaneous information EOF } show_misc() { cd $TP_SMAPI_BASE read_file PCI_POWER_SAVINGS "enable_pci_power_saving_on_boot" 1 1 1 "enabled" 0 "disabled" read_file AC_ADAPTER "ac_connected" 1 1 1 "connected" 0 "disconnected" cat << EOF MISCELLANEOUS INFORMATION ========================= PCI power savings on boot: $PCI_POWER_SAVINGS AC adapter status: $AC_ADAPTER EOF } show_batt() { SLOT=$1 cd $TP_SMAPI_BASE/BAT$SLOT TMP=`cat installed` if [ $TMP -eq 1 ] then BATT_INSTALLED="yes" else BATT_INSTALLED="no" fi BATT_STATE=`cat state` if [ $BATT_INSTALLED == "yes" ] then read_file BARCODING "barcoding" 1 0 read_file BATT_CHEMISTRY "chemistry" 1 0 read_file DESIGN_CAPACITY "design_capacity" 1 0 read_file DESIGN_VOLTAGE "design_voltage" 1 0 read_file MANUFACTURE_DATE "manufacture_date" 1 0 read_file BATT_FRU "model" 1 0 read_file MANUFACTURER "manufacturer" 1 0 read_file BATT_SERIAL "serial" 1 0 read_file FIRST_USE_DATE "first_use_date" 1 0 read_file CYCLE_COUNT "cycle_count" 1 0 read_file LAST_FULL_CAPACITY "last_full_capacity" 1 0 read_file CURRENT_1MIN "current_avg" 1 0 read_file POWER_1MIN "power_avg" 1 0 read_file CAPACITY_MWH "remaining_capacity" 1 0 read_file CAPACITY_PERCENT "remaining_percent" 1 0 read_file REMAINING_RUNNING_TIME "remaining_running_time" 1 0 read_file CURRENT_NOW "current_now" 1 0 read_file POWER_NOW "power_now" 1 0 read_file BATT_TEMPERATURE "temperature" 1 0 read_file BATT_VOLTAGE "voltage" 1 0 read_file REMAINING_CHARGING_TIME "remaining_charging_time" 1 0 # fixups give_units DESIGN_CAPACITY "mWh" give_units DESIGN_VOLTAGE "mV" give_units CURRENT_NOW "mA" give_units POWER_NOW "mW" give_units CURRENT_1MIN "mA" give_units POWER_1MIN "mW" give_units LAST_FULL_CAPACITY "mWh" give_units REMAINING_RUNNING_TIME "min" give_units REMAINING_CHARGING_TIME "min" give_units CAPACITY_PERCENT "%" give_units BATT_TEMPERATURE "mC" give_units BATT_VOLTAGE "mV" # some more replace_val REMAINING_RUNNING_TIME "not_discharging" "[not discharging]" replace_val REMAINING_CHARGING_TIME "not_charging" "[not charging]" else BATT_FRU= MANUFACTURER= BATT_SERIAL= BARCODING= BATT_CHEMISTRY= DESIGN_CAPACITY= DESIGN_VOLTAGE= MANUFACTURE_DATE= FIRST_USE_DATE= CYCLE_COUNT= LAST_FULL_CAPACITY= CURRENT_1MIN= POWER_1MIN= CAPACITY_MWH= CAPACITY_PERCENT= REMAINING_RUNNING_TIME= CURRENT_NOW= POWER_NOW= BATT_TEMPERATURE= BATT_VOLTAGE= REMAINING_CHARGING_TIME= fi read_file START_CHARGE_THRESH "start_charge_thresh" 1 0 read_file STOP_CHARGE_THRESH "stop_charge_thresh" 1 0 read_file INHIBIT_CHARGE_MIN "inhibit_charge_minutes" 1 0 read_file BATT_FORCE_DISCHARGE "force_discharge" 1 1 1 "yes" 0 "no" # installed*, state*, dump # barcoding, chemistry, design_capacity, design_voltage, manufacture_date, model, manufacturer, serial # first_use_date, cycle_count, last_full_capacity, current_avg, power_avg # remaining_capacity, remaining_percent, remaining_running_time, current_now, power_now, temperature, voltage, remaining_charging_time # start_charge_thresh*, stop_charge_thresh*, inhibit_charge_minutes*, force_discharge* cat << EOF BATTERY $SLOT INFORMATION ===================== Battery slot: Battery present: $BATT_INSTALLED Battery state: $BATT_STATE EOF if [ "$BATT_INSTALLED" == "yes" ] then cat << EOF Embedded info: FRU P/N: $BATT_FRU Barcoding: $BARCODING Serial number: $BATT_SERIAL OEM Manufacturer: $MANUFACTURER Chemistry: $BATT_CHEMISTRY Manufacture date: $MANUFACTURE_DATE Design capacity & voltage: $DESIGN_CAPACITY, $DESIGN_VOLTAGE Battery health: First use date: $FIRST_USE_DATE Cycle count: $CYCLE_COUNT Last full capacity: $LAST_FULL_CAPACITY Average current / power (past 1 minute): $CURRENT_1MIN, $POWER_1MIN Battery status: Remaining capacity: $CAPACITY_MWH mWh ($CAPACITY_PERCENT) Remaining running time: $REMAINING_RUNNING_TIME Running current & power: $CURRENT_NOW, $POWER_NOW Temperature: $BATT_TEMPERATURE Voltage: $BATT_VOLTAGE Remaining charging time: $REMAINING_CHARGING_TIME EOF fi cat << EOF Battery charging control: Start charging at: $START_CHARGE_THRESH % Stop charging at: $STOP_CHARGE_THRESH % Prevent charging for: $INHIBIT_CHARGE_MIN min Force battery discharge: $BATT_FORCE_DISCHARGE EOF } SHOW_ALL= SHOW_BATT= SHOW_MISC= GOT_OPTS= while getopts ab:hm OPT do GOT_OPTS=y case ${OPT} in a) SHOW_ALL=y;; b) if [ ${OPTARG} -eq 0 -o ${OPTARG} -eq 1 ] then SHOW_BATT=${OPTARG} else SHOW_BATT=y fi ;; h) show_help exit 0 ;; m) SHOW_MISC=y;; \?) show_help exit 1 ;; esac done if [ "$GOT_OPTS" != y ] then show_help exit 1 fi if [ "$SHOW_ALL" == y ] then show_misc show_batt 0 show_batt 1 else if [ -n "$SHOW_MISC" ] then show_misc fi if [ -n "$SHOW_BATT" ] then show_batt $SHOW_BATT fi fi