APM minutes/seconds confusion
Liam J. Foy
liamfoy at sepulcrum.org
Sat Feb 19 07:09:45 PST 2005
On Sat(19)/Feb/05 - , YONETANI Tomokazu wrote:
> On Sat, Feb 19, 2005 at 12:46:05PM +0000, Liam J. Foy wrote:
> > Before I start, I am no APM expert =)
>
> Neither am I :)
>
> > If I am correct, this applies to both DragonFly BSD and FreeBSD.
> > The problem is that most applications which call upon APM for battery
> > information such as time remaining assume it to always be in seconds.
> >
> > However, in i386/apm/apm.c we see:
> >
> > /* get power status per battery */
> > static int
> > apm_get_pwstatus(apm_pwstatus_t app)
> > {
>
> :
>
> > sc->bios.r.edx &= 0xffff;
> > if (sc->bios.r.edx == 0xffff) /* Time is unknown */
> > app->ap_batt_time = -1;
> >
> > <-LOOK HERE->
> > else if (sc->bios.r.edx & 0x8000) /* Time is in minutes */
> > app->ap_batt_time = (sc->bios.r.edx & 0x7fff) * 60;
> > <-LOOK HERE->
> > else /* Time is in seconds */
> > app->ap_batt_time = sc->bios.r.edx;
> >
> > return 0;
> > }
> >
> > From what I see, the time can be returned in minutes. Do you all agree?
> >
> > If this is returned in minutes, it will lead to the incorrect time being
> > shown and calculated (most things assume seconds e.g apm).
>
> The BIOS can return the time either in minutes or seconds. When it
> returns the time in minutes, the bit 15 of DX register is set to 1
> and bits [14..0] represents the remaining time in minutes(so you have to
> multiply it by 60 to get the time in seconds). Otherwise the time returned
> in bits[14..0] is in seconds, and you need no conversion.
Ah I get you now. Seconds will always be returned. I see =)
>
> I'm talking based on the following document(too bad it's an .rtf file).
> http://www.osdever.net/cottontail/downloads/docs/APMV12.zip
Cheers,
--
- Liam J. Foy
<liamfoy at xxxxxxxxxxxxx>
http://www.bsd-systems.co.uk
More information about the Kernel
mailing list