Page 1 of 1

Battery Level

Posted: Mon Oct 12, 2009 1:14 pm
by MrAndini
Is there any way to read the DS battery level?

If so, how is this done?

I notice the deprecated IPC stucture has a battery value and assume this was previously used for the battery levell, how is it now replaced?

Thanks

Re: Battery Level

Posted: Mon Oct 12, 2009 3:08 pm
by StevenH
At the moment the battery level consists of 3 states that I can think of:

0 - Off
1 - On Battery
2 - On AC Power.

There might be a 4th level - low battery, but I'm not sure as it's not something that I would normally attempt to use, I did look into it a while back and the DS's Power reports are not very specific.
I think this is why the battery level is not a part of the new IPC system.

Warning Assumption alert - You have been warned:
On the DSi's official SDK there's a way to read the battery level but that's only on DSi(a)Ware titles, since the battery indicator has been in a couple of the DSiWare titles I've downloaded, and I do not know if it's on any of the DSi-aware games out there.
End of Assumption alert..

Re: Battery Level

Posted: Tue Oct 13, 2009 2:40 am
by MrAndini
Thanks for the reply.

Even if I can get those 4 levels only would be helpful for my purpose.

How can they be read now if not through IPC?

Re: Battery Level

Posted: Fri Oct 16, 2009 4:07 pm
by MrAndini
Can anyone tell me how to read the states
Battery OK
Battery Bad
Charger connected

These seem to be the only one available and would be useful for my purpose but there is no real documentation on how to read them

Have seen some reference to register 4 bit 3 but not how to read it

touchRead(TSC_MEASURE_BATTERY) on arm7 always returns 0, so this is obviously not what I need to do.

Re: Battery Level

Posted: Fri Oct 16, 2009 4:46 pm
by StevenH
After a quick look at the sourcs code for the default arm7 this is what I worked out, it might be wrong as I only had a quick glance.

The only way to read those values would be to write your own arm7 code, including the fifo handling code. To give you an idea of what you need to do I've pasted below the code I used to work out what DS model I was running the nds on:

Code: Select all

void testHandler(u32 command, void* userdata)
{
	u8 ret1, ret2;
	u8 dsGen = 0;

	ret1 = readPowerManagement(4);
	ret2 = readPowerManagement(5);
	if( ret1 & BIT(6) )
		dsGen++;

	if( ret1 == ret2 )
		dsGen++; 

	fifoSendValue32( FIFO_USER_01, dsGen );
}
You would need to change the code above to read the different parts of the battery indicators, and add in a call to set up the fifo handler. Hopefully this will help you out with your problem.

Actually looking at the docs on the nocash site you will need to read 2 power registers:

Register 1 - Battery Status (R)
Register 4 - DS-Lite Only - Backlight Levels/Power Source (R/W)

So your results will be limited to the DS that you are running on:

DSPhat - You get a Good (0) or low power (1) indicator
DSLite - You get the DSPhat's OK/low power indicator and gain a power source indicator - Battery(0) or Wall socket(1) on BIT 3.

Re: Battery Level

Posted: Sat Oct 17, 2009 3:00 am
by MrAndini
Thanks heaps

I already had a FIFO in place for brighness, so easy to add in another command on that one.

Do you have the URL that has the registers / bits for the power managment.

Re: Battery Level

Posted: Sat Oct 17, 2009 1:56 pm
by StevenH
http://nocash.emubase.de/gbatek.htm#dspowermanagement is the one I used for the information.