Can you run an app with the LCD turned off?

2002-04-02 Thread Scott Schoen

Does anybody know if there's a way to run an application with the LCD 
(display) turned off to conserve power?  I've heard that the LCD drains 
a lot of power and the application I'm writing doesn't need any 
interaction from the screen and may be up and running for a long period 
of time.  I know there are procedure alarms that can be set that will 
run library code without turning on the display (AlmSetProcAlarm) , but 
the documentation seems to imply that you can't run a full-on 
application as a callback to one of those alarms. Has anyone ever tried 
this?  I would assume I have no globals available to me but I could 
easily allocate those on the heap and pass a pointer to them around to 
the various function in my app.  Any restrictions on running an event 
loop within a ProcAlarm?

Thanks in advance,
Scott Schoen


-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/



RE: Can you run an app with the LCD turned off?

2002-04-02 Thread Danny Epstein

 Does anybody know if there's a way to run an application with the LCD 
 (display) turned off to conserve power? 

A search of the archives for procedure alarm turned up this post by Jim
Schram:

  http://www.escribe.com/computing/pcpqa/m12458.html

I would add another option to Jim's list: lock (one of) your app's code
resource(s) and protect your app's database. This will prevent your callback
from being moved. It will also prevent your app from being deleted, but
that's pretty much a given with any procedure alarm.

 I've heard that the LCD drains a lot of power ...

See Peter's post on this subject:

  http://www.escribe.com/computing/pcpqa/m44248.html

 I would assume I have no globals available

Correct: your callback won't necessarily have access to globals. Your app
may or may not be the current UI app at the time the callback is invoked.

 Any restrictions on running an event loop within a ProcAlarm?

For non-procedure alarms (ie. using a launch code), there are two launches,
one for trigger and one for display. The former isn't allowed to do UI (ie.
run an event loop). The latter is. A procedure alarms only gets the
equivalent of a trigger invocation. You're not allowed to do UI in a
procedure alarm. You can use another (non-procedure) alarm if you needed to
do UI. Or you could use the Attention Manager on Palm OS 4.0 and later.

To summarize, what you're trying to do isn't easy, but is possible. :)
--
Danny  PalmSource

-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/



Re: Can you run an app with the LCD turned off?

2002-04-02 Thread Scott Schoen

Danny,

Thanks for the great references.

It seems the easiest and (unfortunately) sneakiest approach would be to call
the (undocumented) sysTrapHwrDisplaySleep which before OS 3.5 was
sysTrapHwrLCDSleep.  This way I wouldn't have to change the overall way my
application runs.

I'm using alarms to automatically start and stop my app, so the more
supported route is using procedure alarms (even though its in a way they
were probably not originally intended to be used.)  From reading the
articles you referenced it occurred to me that to get around the potentially
tricky issues of locking and protecting my databases and resources I could
instead briefly wake up with a non-procedure alarm, SysUIAppSwitch() to my
app, register a procedure alarm with a pointer to one of my app's functions
to trigger immediately, and then power the device off programmatically.
When the procedure alarm triggers I could then be assured that my function
pointer is still valid (since my app's code  resource is currently loaded)
and my globals are available.  Is that right?

When I'm done running in my ProcAlarm routine, I set another non-procedure
alarm to wake up my app again so that it can continue where it left off and
shut down (which may entail restoring whatever app was running before mine
came up).  This way I avoid loading and unloading entire applications during
the procedure alarm (though I'm not sure if I should worry about this or
not.)

This approach requires that the device fully power up briefly once when the
app starts up, and once again when it shuts down.  I know alarms deliver 2
launch codes: Does the device power up fully before either is delivered, or
only for the latter?  If so, would it be dangerous to do my start-up and
shut-down when the first alarm launch code triggers?  The documentation says
you should do very little when the first alarm launch code is triggered.  I
would normally wait for the second launch code, make sure my app is loaded
(or launch it if it is not) and then do my work.  Should I assume a
SysUIAppSwitch() is too much to perform on the first alarm launch code?

Thanks again for your help,
Scott Schoen

Danny Epstein [EMAIL PROTECTED] wrote in message
news:82466@palm-dev-forum...

  Does anybody know if there's a way to run an application with the LCD
  (display) turned off to conserve power?

 A search of the archives for procedure alarm turned up this post by Jim
 Schram:

   http://www.escribe.com/computing/pcpqa/m12458.html

 I would add another option to Jim's list: lock (one of) your app's code
 resource(s) and protect your app's database. This will prevent your
callback
 from being moved. It will also prevent your app from being deleted, but
 that's pretty much a given with any procedure alarm.

  I've heard that the LCD drains a lot of power ...

 See Peter's post on this subject:

   http://www.escribe.com/computing/pcpqa/m44248.html

  I would assume I have no globals available

 Correct: your callback won't necessarily have access to globals. Your app
 may or may not be the current UI app at the time the callback is invoked.

  Any restrictions on running an event loop within a ProcAlarm?

 For non-procedure alarms (ie. using a launch code), there are two
launches,
 one for trigger and one for display. The former isn't allowed to do UI
(ie.
 run an event loop). The latter is. A procedure alarms only gets the
 equivalent of a trigger invocation. You're not allowed to do UI in a
 procedure alarm. You can use another (non-procedure) alarm if you needed
to
 do UI. Or you could use the Attention Manager on Palm OS 4.0 and later.

 To summarize, what you're trying to do isn't easy, but is possible. :)
 --
 Danny @ PalmSource





-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/