Author |
Topic |
|
masseyi
20 Posts |
Posted - 06 Mar 2006 : 10:42:43
|
Hi,
Is is possible to progmatically check the battery level and notify the main application when the level is below a certain threshold ? I want my application to respond when the level gets close to zero.
Regards, Steve
|
|
bsamuels
53 Posts |
Posted - 06 Mar 2006 : 10:44:40
|
Hi,
What system are you using? |
|
|
masseyi
20 Posts |
Posted - 06 Mar 2006 : 10:46:43
|
Hi,
BitsyX on windows CE. |
|
|
masseyi
20 Posts |
Posted - 07 Mar 2006 : 05:37:41
|
I've found some notification code which handles notifications from RequestPowerNotifications. It uses a message queue, the problem is, this message queue just blocks all the time after I get a PBT_POWERINFOCHANGE message within the queue. Any ideas why this is the case ?
Thanks, Steve |
|
|
akidder
1519 Posts |
Posted - 07 Mar 2006 : 16:25:44
|
Thanks for your note.
For battery monitoring, most applications implement a thread that regularly reads the battery voltage. You can do this with very little overhead (e.g. put a Sleep(1000) in the reading loop).
Let us know if you have trouble implementing this. |
|
|
masseyi
20 Posts |
Posted - 08 Mar 2006 : 01:56:03
|
Hi, Have you got an example of reading the battery voltage, like I said previously, I used RequestPowerNotifications but my message queue just sits and blocks.
Thanks, Steve |
|
|
kurtwl
28 Posts |
Posted - 08 Mar 2006 : 03:20:18
|
GetSystemPowerStatusEx is usefull, which you can check whenever you need. CeSetUserNotificationEx can be used for the WAKEUP events, "VDDPWROFF" and "PWROFF" can be caught with CreateEvent. There is little mileage in waiting for suspend, as the OS is 'off' shortly after that happens.
No idea why your MsgQueue is blocking, are you requesting only one message in MSGQUEUEOPTIONS, and is cbMaxMessage big enough for the stucture to be received? If you are using one of the WaitFor functions, are you resetting the event? |
|
|
masseyi
20 Posts |
Posted - 08 Mar 2006 : 06:18:07
|
Thanks for that.
GetSystemPowerStatusEx -> I keep getting an error when calling this, I did try this yesterday, error is something about service not being recognised ?
Using WaitForSingleObject but this doesn't block, just the ReadMsgQueue, in fact, it does eventually come out of the loop after about 2 minutes ?
Allowing three messages in MSGQUEUEOPTIONS structure and cbMaxMessage is the sizeof the structure + 200.
if ( !ReadMsgQueue(hMsgQ, &buf, QUEUE_SIZE, &iBytesInQueue, INFINITE, &dwFlags)) { }
Thanks again, Steve |
|
|
kurtwl
28 Posts |
Posted - 08 Mar 2006 : 06:58:56
|
On the BitsyX system we have, there are 'no' batteries. Battery power comes in (don't quote me on this) as External DC. It is either On or Off. Thats it.
We have SuperCaps fitted (to allow some small (ms) time) to panic before the system dies. A background app loads at startup, and 'guesses' the charge of the supercaps based on a charging constant and time. It then 'fills' in the power sturucture and updates a 'dummy battery driver'. Any of our applications on the BitsyX can then wait for the Bitsy to power down, check that the 'charge' in the 'battery' is OK for any last minute processing, and decided what to do from there.
Again, don't quote me on this, but in other CE based devices that we have used, the battery can be a pretty clever thing, and can furnish the pwr.dll (bat.dll etc) drivers with information that they require. I think that the OEM is responsible for that driver and interface (using the Microsoft api).
I'm guessing that you are plugging a battery into your bitsy and assuming that the OS will handle the rest?
|
|
|
masseyi
20 Posts |
Posted - 08 Mar 2006 : 08:43:18
|
You guess correct ! Does this mean we need to do write a low level driver ? |
|
|
kurtwl
28 Posts |
Posted - 08 Mar 2006 : 09:07:57
|
That all depends on your hardware and what you need by the way of battery info etc. As mentioned, I kludged (no, hacked!) together a solution that met our needs. |
|
|
masseyi
20 Posts |
Posted - 10 Mar 2006 : 03:32:21
|
Hi, Going to try and hook up to one of the A/D inputs and set an interrupt up on IRQ1 to trigger when the voltage is low, possibly use a comparetor chip which will signal the interrupt when the condition occurs.
This sound like a good idea ?
Regards, Steve
|
|
|
akidder
1519 Posts |
Posted - 10 Mar 2006 : 10:13:07
|
Hi Steve. For the benefit of other readers, here's what I wrote you earlier today:
Using a level-detecting chip to trigger an interrupt will work fine. It won't give you any information about the state of charge, but you're right that it can serve as a critical-level trigger.
Polling isn't nearly as bad as it sounds, especially in a multi-threaded environment. The overhead is negligible (ADSmartIO takes about 14ms per reading), especially if you're reading it only every couple of seconds, you can track trends over time, and you can send notifications/events to other threads as different states arise. All this with little or no external hardware. It's usually a win-win.
Topic 2057 also includes another response on this topic.
|
|
|
rdall
16 Posts |
Posted - 24 Jul 2007 : 18:48:13
|
Using Bitsy Xb with recent CE Kernel Image version 5.00.32.
We want to power the Bitsy at close to its minimum specified voltage of 5VDC. We find that voltages as low as 9VDC applied to VBATTPOS cause misbehaviour, failure to wake up from sleep or vice-versa.
Is there any way to get around this? Are these behaviours caused by power fail interrupt behaviour or the like?
The main internal rail of the system is 5VDC, so it seems that a DC supply above the input regulator drop out voltage should be able to do the job.
Thanks,
Rick Dall, Senior Electronic Engineer QRS Diagnostic LLC Email [removed] |
|
|
akidder
1519 Posts |
Posted - 25 Jul 2007 : 19:48:20
|
Since this is a bit of a different thread, I've responded at new topic topic 2422.
p.s. I've removed your email address from your last post, as it's too easy for bots to crawl a site and use your address for spam. If you set up your forum user account with a valid email address, other users can contact you if necessary. |
|
|
|
Topic |
|