#!/bin/sh # jrbme "just replaces bme" in fact does more than just that # It implements FOSS charging via bq24150 and manages hostmode # For this it implements a daemon mode which is entered by default # when jrbme is called by user root (i.e. on system init usually) # and which cares about keeping battery charged and about signalling # battery charge status and other events via system dbus # When called by any user who's not root, jrbme doesn't enter daemon # mode. Instead it serves as a cmd interface between user and a daemonized # instance of itself, talking to the daemon via signal and named pipes, # and reporting back to user all result codes, messages to stdout/stderr. # # sed -i "s/LEDPatterns=/LEDPatterns=PatternVboost;/" /etc/mce/mce.ini # vboost with reset on exit and (#'d) partial hostmode for PF-kernel #(c) 20101030 J.Reisenweber set -eu true=true false="" ${debug=/bin/false} && set -vx; # call like ~# debug="echo -n $0; date" script.sh #const PatternVboost=PatternVboost dbussend="/usr/bin/run-standalone.sh /usr/bin/dbus-send" i2cset=/usr/local/sbin/i2cset i2cget=/usr/local/sbin/i2cget #var : ${start_bme=$true} : ${notify=$true} trap cleanup INT QUIT TERM EXIT cleanup(){ trap - INT QUIT TERM EXIT # reset bq24150 $i2cset -y -m 0x80 2 0x6b 0x04 0x80 # stop LED indicator $dbussend --system --type=method_call \ --dest=com.nokia.mce /com/nokia/mce/request \ com.nokia.mce.request.req_led_pattern_deactivate \ string:$PatternVboost $debug && ( Reg1=`$i2cget -y 2 0x6b 0x00` echo $Reg1 ) if [ $start_bme ] then sleep 2 log "Starting bme" /sbin/start --quiet bme fi exit } log(){ echo "${0}: $@" } logn(){ echo -n "${0}: $@" } # the script body. We read in whole text, and then execute a main at end of script, # this ensures the whole script has correct syntax and there'll be no reads at # runtime main(){ log "Stopping bme" /sbin/stop --quiet bme sleep 3 #echo host >mode # start vbus boost 5V $i2cset -y -m 0x07 2 0x6b 0x01 0x05; # set notification LED $dbussend --system --type=method_call \ --dest=com.nokia.mce /com/nokia/mce/request \ com.nokia.mce.request.req_led_pattern_activate \ string:$PatternVboost #sleep 1 #echo F >/proc/driver/musb-hdrc while sleep 5; do Reg1=`$i2cget -y 2 0x6b 0x00` if [ 8 -ne $(( Reg1 & 0x0F )) ]; then errortext1="ERROR in VBUS supply: BQ24150-Reg1=$Reg1" case $(( Reg1 & 0x07)) in 0) errortext2="No error, just stopped";; 1) errortext2="VBUS OVERVOLTAGE - You just fried your N900";; 2) errortext2="OVERLOAD - N900 can deliver max 200mA. VBUS got shut off";; 3) errortext2="Battery too low. VBUS shut off";; 4) errortext2="Battery OVP - WTF are you doing?";; 5) errortext2="Thermal Shutdown (too hot)";; 6) errortext2="Watchdog expired. Script sucks";; *) errortext2="WTF? This should not happen";; esac log "$errortext1" log "$errortext2" if [ $notify ]; then $dbussend --type=method_call --dest=org.freedesktop.Notifications \ /org/freedesktop/Notifications \ org.freedesktop.Notifications.SystemNoteDialog \ string:"`echo -en "Shutting down 5V supply for USB! Reason:\n$errortext2"`" uint32:0 string:"WARN"; #no idea about WARN fi cleanup fi # tickle watchdog timer $i2cset -y -m 0x80 2 0x6b 0x00 0x80; done cleanup } main "$@"; exit