I'm trying to avoid getting too distracted by my Openmoko Freerunner this week as I have a very different project
that I want to concentrate on. But it is hard not to play with it sometimes, as it is just sitting there waiting.
But fortunately I managed to find something useful to do with it that required me leaving it alone.
I thought it was time to find out how long the battery really lasts. So I fully charged it a couple of days ago
and then left it sleeping with the intention of waking it up the next morning and seeing how much battery was left after a given time. Unfortunately I left it too long and the battery went completely flat, so I learned very little.
Now obviously I don't want to be checking it every so-often as that would distract me from my other project, and
turning the display on all the time would be more power usage that I was wanting to measure. So I came up with
the incredibly creative idea of getting the device to observe itself. That is of course the beauty of computers.
They can do the work for you.
So here is the script that I wrote and ran, saving the output to a file:
while :
do
echo ===========================================
date
cat /sys/class/power_supply/battery/capacity
cat /sys/class/i2c-adapter/i2c-0/0-0073/resume_reason
cat /sys/class/i2c-adapter/i2c-0/0-0073/neo1973-resume.0/resume_reason
/root/wkalrm +30m
sleep 20
apm -s
done
It very simply wakes up every 30 minutes, check the battery capacity and some other random
bits of information that I wanted to check, stays away for 20 seconds, then goes back to sleep.
There are two reasons for to 20 second sleep. One is that I wanted to be able to ssh in and kill the script if I needed to get control of the device again before the power ran out completely. The other is that the Xglamo X server seemed to get confused if I suspend too soon after waking up. I guess it needs a little while to sort itself out after a resume. I haven't experimented with this much so I'm I may be misinterpreting a single
failure with the wrong general cause.
And the results? The device just sat there for about 15 hours. The screen stays off the whole time. I might sometimes hear a little click from the speaker when it resumes, but that is the only external indication that
anything is happening.
The sequence of battery capacity readings was
97
94
91
88
85
82
79
77
74
71
68
65
62
59
56
53
50
47
44
41
38
35
32
29
25
22
19
16
13
10
A very consistent difference of 3% every 30 minutes, except 79-77 where the difference is 2, and 29-25 where it is 4.
So after 15 hours, 90% is gone. I was probably hoping for a bit more than that, but it should be workable.
This was with both the GSM and the GPS devices powered the whole time. And of course the CPU powered for 20
seconds every 30 minutes.
Later today after the device is fully charged, I'll try again with the GPS turned off. It might also be interesting to try with GSM off and GPS on. I assume Wifi and Bluetooth are turned of by suspend... I guess I
should check that.
So I tried with GPS and Bluetooth turned off. It didn't quite go as planned though. The samples I got are
===========================================
Wed Feb 25 12:27:36 EST 2009
94
===========================================
Wed Feb 25 12:57:38 EST 2009
93
===========================================
Thu Feb 26 05:46:05 EST 2009
62
i.e. the first wakeup worked, but then it didn't wake again until I woke it to check the results.
My guess is that my "go to sleep when idle" program put the device to sleep during the "sleep 20".
Then when the alarm woke it, the script sent the device back to sleep never to awake. I'll try
again with the auto-sleep disabled.
But the results are still good. Nearly 17 hours and only 32 percent gone. That is 1/3 of the power
usage for then GPS and possibly BT were powered. So while keeping the GPS on for regular sampling is
possible, it does eat battery life. The chip
apparently has a power-save mode where it remembers all the state data but doesn't listen to the voices from the sky.
I wonder if it is possible to enter that mode during suspend...
later ...
A proper run with bluetooth and gps turned off gives these samples, one per half hour:
95
94
93
92
92
91
90
89
88
87
86
85
84
83
82
81
80
79
78
77
76
75
74
73
73
71
70
69
68
67
Which suggests 50 hours from full to empty. So charging once a day with light use should be fine.
The GPS does have a mode where it can sleep for a set period, wake up to get a new fix, then go back to sleep.
I'll give that a try when I find time. I wonder what a good 'set period' is. 30 minutes? Maybe it depends on how
much you are traveling.
But more immediately, I'll test with GPS off but Bluetooth on. I'm hoping it gets turned off at suspend, but these is a simpe way to test...
Final Update...
The setting for bluetooth power made no difference. It seems it is turned off when we go into suspend, at least by default.