palm-os-sdk/sdk-5r4/include/Core/System/NotifyMgr.h
2018-08-30 15:18:26 +01:00

560 lines
26 KiB
C
Executable File

/******************************************************************************
*
* Copyright (c) 1998-2004 PalmSource, Inc. All rights reserved.
*
* File: NotifyMgr.h
*
* Release: eclipse 5 SDK (68K) R4.
*
* Description:
* Include file for Notification Manager
*
*****************************************************************************/
#ifndef __NOTIFY_H__
#define __NOTIFY_H__
#include <PalmTypes.h>
#include <CoreTraps.h>
#include <LocaleMgr.h>
#include <DataMgr.h>
#include <SysEvent.h>
#include <Day.h>
#include <PalmOptErrorCheckLevel.h>
typedef struct SysNotifyParamType
{
UInt32 notifyType; // What type of event occurred?
UInt32 broadcaster; // normally creator code of broadcasting app
void * notifyDetailsP; // ptr to notification-specific data, if any
void * userDataP; // user specified ptr passed back with notification
Boolean handled; // true if event is handled yet
UInt8 reserved2;
} SysNotifyParamType;
typedef Err (*SysNotifyProcPtr)(SysNotifyParamType *notifyParamsP);
#define sysNotifyNormalPriority 0 // clients should use this priority
#define sysNotifyBroadcasterCode sysFileCSystem // broadcaster code for events broadcast by the system
#define sysNotifyNoDatabaseID 0xFFFFFFFF // for system use only!!!
#define sysNotifyVersionNum 1 // version of the NotifyMgr, obtained from the feature
// The queue is much smaller in debug builds so that we aren't tempted to overflow it
// (and larger for release builds so that when we do, it will work).
#if ERROR_CHECK_LEVEL == ERROR_CHECK_FULL
#define sysNotifyDefaultQueueSize 10
#else
#define sysNotifyDefaultQueueSize 30
#endif
/*
Notify Manager Events:
Note that in general, for notifications regarding the creation of information
(e.g. sysNotifyDBAddedEvent) the broadcast goes out AFTER the fact (e.g.,
after the database has been created) and that notifications regarding
the deletion of information are broadcast BEFORE the fact. A notable and
unfortunate exception to this rule is the database deleted notification, which
is sent out after the fact.
The sleep & wake notifications require a little special attention. These
notifications are _not_ guaranteed to always be broadcast, and hence are unsuitable
for applications where external hardware must be shut off to conserve power when
we go to sleep. For example, the sleep notification will not be broadcast when
we do an emergency shutdown due to low battery conditions. Also note that any
sort of prolonged activity (especially displaying UI sich as a dialog) in response
to these noticfications can complicate things immensely. UI is very tricky because
these notifications are broadcast from SysHandleEvent. The result is that you may
receive more than one sleep notification if one of the notification clients puts up
a dialog or something, and it remains there long enough for another AutoOff event
to come through. There are also possible problems with reentrancy and stack space
usage since the notification is broadcast from SysHandleEvent inside an application's
event loop.
*/
#define sysNotifySyncStartEvent 'hots' // Sent at the start of a hotsync.
// Always sent from UI thread.
// param: none
#define sysNotifySyncFinishEvent 'sync' // Sent at the end of a hotsync.
// Always sent from UI thread.
// param: none
#define sysNotifyAntennaRaisedEvent 'tena' // Sent when the antenna is raised on a
// Palm VII series device.
// Always sent from UI thread.
// param: none
#define sysNotifyResetFinishedEvent 'rstf' // Broadcast after all app launchcodes
// are sent after a reset.
// Always sent from UI thread.
// param: none
#define sysNotifyForgotPasswordEvent 'bozo' // Broadcast when the user presses the
// 'Forgotten Password' button in the
// security app, just before every database's
// private records are deleted.
#define sysNotifySecuritySettingEvent 'ssch' // Broadcast when the security setting
// is changed either by the user in the Security application or
// programmatically using SecSvcsSetDeviceSetting.
#define sysNotifyTimeChangeEvent 'time' // Broadcast when the time is changed by the user.
// param: Int32*, ptr to time change delta in
// seconds (e.g., a value of 100 means that the
// user set the clock ahead 100 seconds).
#define sysNotifySleepRequestEvent 'slpq' // A "Sleep Request Event" is broadcast when the device
// is about to go to sleep, and is a chance for clients
// to do perform an action or even delay going to sleep
// for a little while. This may be broadcast multiple
// times if one or more clients defer the sleep. Parameter
// is a pointer to a SleepEventParamType. See below
// details on this structure. Note that this event is
// NOT guaranteed to be broadcast. See the big comment
// at the top of this list for important detials & warnings.
// Always sent from UI thread.
#define sysNotifySleepNotifyEvent 'slp!' // A "Sleep Notify Event" is broadcast when the device is
// definitely going to sleep as soon as the broadcast
// is finished. Parameter is unused.
// Note that this event is NOT guaranteed to be broadcast.
// See the big comment at the top of this list for
// important detials & warnings.
// Always sent from UI thread.
#define sysNotifyEarlyWakeupEvent 'worm' // ...the early bird gets the worm...
// Broadcast just after the device wakes up
// at the early stage where the screen may
// still be turned off and we may quickly go
// back to sleep after handling an alarm or
// charger event.
// Always sent from UI thread.
#define sysNotifyLateWakeupEvent 'lazy' // Broadcast after the device wakes up
// at the later stage of the wakeup
// process after we turn the screen on,
// broadcast from EvtResetAutoOffEvent
// the first time it is called implying
// that the device will remain awake
// for at least a little while.
// Always sent from UI thread.
#define sysNotifyDisplayChangeEvent 'scrd' // Sent when the display depth is
// changed, notifyDetailsP has old/new depth
// see SysNotifyDisplayChangeDetailsType
#define sysNotifyMenuCmdBarOpenEvent 'cbar' // Sent by FormHandleEvent when a menuCmdBarOpenEvent
// passes through. The system will not open the toolbar
// if the 'handled' field is set in the parameter block,
// so most clients should not set it. The notification
// is provided so that Hack-like entities can catch
// it and add their own buttons to the bar. These
// buttons will show up to the left of cut/copy/paste/undo and
// to the right of everything else.
#define cncNotifyProfileEvent 'cncp' // sent by the Connection Panel to inform its clients
// that the current configuration has change
// void * notifyDetailsP : has to be casted as UInt32
// to get the Broadcasted Profile ID user specified ptr
// passed back with notification
// void * userDataP : has to be casted as UInt16
// to get the device kind of the Broadcasted Profile ID
#define sysExternalConnectorAttachEvent 'ecna' // Broadcast when anything is attached to
// the external connector.
#define sysExternalConnectorDetachEvent 'ecnd' // Broadcast when anything is detached from
// the external connector.
#define sysNotifyCardInsertedEvent 'crdi' // Broadcast when an ExpansionMgr card is
// inserted into a slot, and the slot driver
// calls ExpCardInserted. Always broadcast
// from UI task.
// ExpansionMgr will play a sound & attempt to
// mount a volume unless the corresponding
// bits in the 'handled' field are set by a
// notification handler (see ExpansionMgr.h).
// PARAMETER: slot number cast as void*
#define sysNotifyCardRemovedEvent 'crdo' // Broadcast when an ExpansionMgr card is
// removed from a slot, and the slot driver
// calls ExpCardRemoved. Always broadcast
// from UI task.
// ExpansionMgr will play a sound & attempt to
// unmount a volume unless the corresponding
// bits in the 'handled' field are set by a
// notification handler (see ExpansionMgr.h).
// PARAMETER: slot number cast as void*
#define sysNotifyVolumeMountedEvent 'volm' // Broadcast when a VFSMgr volume is
// mounted, Always broadcast from UI task.
// VFSMgr will run start.prc (if present),
// and SysUIAppSwitch to it or the Launcher
// unless the appropriate bits in the 'handled'
// field are set by a notification handler.
// PARAMETER: VFSAnyMountParamPtr cast as void*
#define sysNotifyVolumeUnmountedEvent 'volu' // Broadcast AFTER a VFSMgr volume is
// unmounted, Always broadcast from UI task.
// VFSMgr will delete start.prc (if it was loaded).
// The volume ref number for the unmounted volume is
// NO LONGER VALID, so don't bother trying to use it.
// PARAMETER: volume refNum cast as void*
#define sysNotifyHelperEvent 'hlpr' // Sent by Address Book (or any
// 3rd party application) to
// communicate with Phone Apps
#define sysNotifyPOSEMountEvent 'pose' // Sent by HostFS to communicate with itself,
// saving on stack depth.
#define sysNotifyLocaleChangedEvent 'locc' // Notify apps/panel that the system locale
// has changed.
// This is broadcast by the language picker after it
// has changed the locale.
// Always sent from UI thread.
// param: ptr to SysNotifyLocaleChangedType
#define sysNotifyRetryEnqueueKey 'retk' // An EvtEnqueueKey failed, so retry.
#define sysNotifyGotUsersAttention 'attn' // Got users attention.
#define sysNotifyDBDeletedEvent 'dbs-' // broadcast AFTER a database is removed from the device.
// Note that the database ID in the parameter block is
// NO LONGER VALID, and you WILL CRASH the device if you
// try to pass it to any DataMgr routines.
// notifyDetailsP: ptr to SysNotifyDBDeletedType.
// Notification CreatorID for notifying Launcher and third-party Launchers of changes
#define sysNotifyDBCreatedEvent 'dbcr' // broadcast (deferred) after a database is created on the device.
#define sysNotifyDBChangedEvent 'dbmn' // broadcast (deferred) after database info is set on a database, such
// as by DmSetDatabaseInfo
#define sysNotifyDBDirtyEvent 'dbdr' // broadcast (deferred) when an overlay is opened, a database is opened for
// write, or other events which can "dirty" the database info --
// the Launcher normally checks over such databases on reset and
// updates the LaunchDB.
#define sysNotifyDeviceUnlocked 'unlk' // Broadcasted by the Security app After the device is
//unlocked.
//notifyDetailsP: none
#define sysNotifyPhoneEvent 'fone' // Sent by third-party applications to communicate
// with built-in or external phones.
// NOTE THAT THIS EVENT IS FOR FUTURE USE
#define sysNotifyNetLibIFMediaEvent 'neti' // Broadcasted by NetLib to communicate its interfaces media Up and Down requests
// to registered Apps.
// notifyDetailsP: ptr to SysNotifyNetLibIFMediaType.
#define sysNotifyDeleteProtectedEvent '-pdb' // Broadcast BEFORE a database is removed from the device when a user
// or installer application wants to remove a protected database. This
// will ONLY be issued from the UI task and should be issued before each
// user driven deletion that targets a protected database that the app
// running does not own (i.e. needs to request be unprotected).
// This gives the unlucky client a chance to do any required
// cleanup work. Note that if an application has multiple protected
// databases, this notification may be sent out more than once.
// notifyDetailsP: ptr to SysNotifyDBInfoType.
#define sysNotifyIrDASniffEvent 'irda' // Sent by IrDA sniffing code when an incomming IrDA frame is detected
#define sysNotifyProcessPenStrokeEvent 'hpps' // Sent to enable custom recognition of strokes on the system area of the digitizer (buttons, etc.)
// Note: future OS releases might not send this notification.
#define sysNotifyVirtualCharHandlingEvent 'hvch' // Sent to enable custom handling handling of vchars
// Note: future OS releases might not send this notification.
#define sysNotifyEventDequeuedEvent 'hede' // Sent for each event being returned by EvtGetEvent. Be very careful
// about registering for this; you can easily impact performance (in a bad way!)
// Also note: for speed, notifyDetailsP points to a event structure with
// system-native endianness, meaning you might need to byte-swap what you
// read depending on what endianness your code uses.
// Note: future OS releases might not send this notification.
#define sysNotifyIdleTimeEvent 'hidl' // Sent when the system is idle and is about to doze.
// Note: future OS releases might not send this notification.
#define sysNotifyAppLaunchingEvent 'hapl' // Sent before an app is launched (normalLaunch only)
// Note: future OS releases might not send this notification.
#define sysNotifyAppQuittingEvent 'hapq' // Sent right after an app has quit (normalLaunch only)
// Note: future OS releases might not send this notification.
#define sysNotifyInsPtEnableEvent 'hipe' // Sent at the start of InsPtEnable(). notifyDetailsP points to a Boolean: the enableIt param.
// Note: future OS releases might not send this notification.
#define sysNotifyKeyboardDialogEvent 'hkbd' // Sent to enable replacement of SysKeyboardDialog()'s UI.
// The notifyDetailsP points to the KeyboardType.
// Note: future OS releases might not send this notification.
#define sysNotifyDisplayResizedEvent 'scrs' // Broadcast by PINSetInputAreaState after the input area
// opens or closes. NotifyDetailsP is a pointer to a
// SysNotifyDisplayResizedDetailsType structure.
#define sysNotifyInputAreaDrawingEvent 'iaad' // Broadcast by HALRedrawInputArea right before the input area bitmap
// is drawn. If the notification is handled, the bitmap is not drawn.
// NotifyDetailsP is a pointer to a SysNotifyInputAreaDrawingDetailsType structure.
// Note: future OS releases might not send this notification.
#define sysNotifyInputAreaPendownEvent 'iapd' // Broadcast by SysHandleEvent when a pen-down has occurred in the input area.
// If the notification is handled, further pen-down processing is skipped.
// NotifyDetailsP is a pointer to a SysNotifyInputAreaPendownDetailType structure.
// Note: future OS releases might not send this notification.
#define sysNotifySelectDay 'seld' // Broadcast by SelectDay before displaying any UI.
// If the notification is handled, further UI is skipped.
// NotifyDetailsP is a pointer to a SysNotifySelectDayDetailsType structure.
// Note: future OS releases might not send this notification.
#define sysNotifyGsiDrawIndicator 'gsid' // Broadcast by GsiDrawIndicator before drawing the GSI.
// If the notification is handled, further drawing is skipped.
// Note: future OS releases might not send this notification.
// for sysNotifyAppLaunchingEvent and sysNotifyAppQuittingEvent
typedef struct SysNotifyAppLaunchOrQuitTag {
UInt32 version; // this is version 0
UInt32 dbID; // the application being started or quitting (note: type unsafeness is intentional)
UInt16 cardNo; // the application being started or quitting
} SysNotifyAppLaunchOrQuitType;
// for sysNotifyVirtualCharHandlingEvent
typedef struct SysNotifyVirtualCharHandlingTag {
UInt32 version; // this is version 0
struct _KeyDownEventType keyDown;
} SysNotifyVirtualCharHandlingType;
// for sysNotifyProcessPenStrokeEvent
typedef struct SysNotifyPenStrokeTag {
UInt32 version; // this is version 0
PointType startPt;
PointType endPt;
} SysNotifyPenStrokeType;
// for sysNotifyDisplayChangeEvent
typedef struct SysNotifyDisplayChangeDetailsTag {
UInt32 oldDepth;
UInt32 newDepth;
} SysNotifyDisplayChangeDetailsType;
// For sysNotifyLocaleChangedEvent
typedef struct SysNotifyLocaleChangedTag {
LmLocaleType oldLocale;
LmLocaleType newLocale;
} SysNotifyLocaleChangedType;
// Possible values for the sleep-reason for the sysNotifySleepEvent
#define sysSleepPowerButton 0
#define sysSleepAutoOff 1
#define sysSleepResumed 2
#define sysSleepUnknown 3
// for sysNotifySleepRequestEvent
typedef struct SleepEventParamTag {
UInt16 reason; // contains the reason we are going to sleep. See above list for possible values.
UInt16 deferSleep; // Only used for the sysNotifySleepRequestEvent, this should be incremented by
// clients that want to defer the sleep. They are then responsible for enqueing
// a resumeSleepChr in the event queue.
} SleepEventParamType;
// for sysNotifyDeleteProtectedEvent, and possibly others...
typedef struct SysNotifyDBInfoTag {
LocalID dbID; // database ID of dabatase
UInt16 cardNo; // card number that dabatase resides on
UInt16 attributes; // database attributes
Char dbName[dmDBNameLength]; // name of database
UInt32 creator; // creator code of dabatase
UInt32 type; // type of dabatase
} SysNotifyDBInfoType;
// for sysNotifyDBDeletedEvent
typedef struct SysNotifyDBDeletedTag {
LocalID oldDBID; // old database ID of dabatase, no longer valid
UInt16 cardNo; // card number that dabatase resides on
UInt16 attributes; // database attributes
Char dbName[dmDBNameLength];
UInt32 creator; // creator code of dabatase
UInt32 type; // type code of dabatase
} SysNotifyDBDeletedType;
// for sysNotifyDBCreatedEvent
typedef struct SysNotifyDBCreatedTag {
Char dbName[dmDBNameLength]; // Database name
UInt32 creator; // creator code of dabatase
UInt32 type; // type code of dabatase
LocalID newDBID; // LocalID of newly-created database
UInt16 cardNo; // card number that dabatase resides on
Boolean resDB; // Is it a resource DB?
UInt8 padding; // Explicitly pad struct to multiple of 4
} SysNotifyDBCreatedType;
// for sysNotifyDBChangedEvent
typedef struct SysNotifyDBChangedTag {
Char dbName[dmDBNameLength]; // new database name of DB
LocalID dbID; // database ID of DB
UInt32 creator; // creator code of DB
UInt32 type; // new type code of DB
UInt32 crDate; // new creation date of DB
UInt32 modDate; // new modification date of DB
UInt32 bckUpDate; // new backup date of DB
UInt32 modNum; // new modification number of DB
LocalID appInfoID; // new appinfo block of DB
LocalID sortInfoID; // new sortinfo block of DB
UInt16 attributes; // new DB attributes
UInt16 cardNo; // card number that dabatase resides on
UInt16 version; // new DB version
UInt16 fields; // what fields above are set?
/* Old field values, prior to the DmSetDatabaseInfo */
Char oldName[dmDBNameLength];
UInt32 oldCreator;
UInt32 oldType;
UInt16 oldAttributes;
UInt16 padding; // Explicitly pad struct to multiple of 4
} SysNotifyDBChangedType;
#define DBChangedFieldSetName 0x1
#define DBChangedFieldSetCreator 0x2
#define DBChangedFieldSetType 0x4
#define DBChangedFieldSetCrDate 0x8
#define DBChangedFieldSetModDate 0x10
#define DBChangedFieldSetBckUpDate 0x20
#define DBChangedFieldSetModNum 0x40
#define DBChangedFieldSetAppInfo 0x80
#define DBChangedFieldSetSortInfo 0x100
#define DBChangedFieldSetAttributes 0x200
#define DBChangedFieldSetVersion 0x400
// for sysNotifyDBDirtyEvent
typedef struct SysNotifyDBDirtyTag {
Char dbName[dmDBNameLength]; // Database name
UInt32 creator; // creator code of dabatase
UInt32 type; // type code of dabatase
} SysNotifyDBDirtyType;
// for sysNotifyDisplayResizedEvent
typedef struct SysNotifyDisplayResizedDetailsTag {
RectangleType newBounds;
} SysNotifyDisplayResizedDetailsType;
// for sysNotifyInputAreaDrawingEvent. All structure data is in
// ARM native format!!!
typedef struct SysNotifyInputAreaDrawingDetailsTag {
RectangleType updateBounds; // Area to redraw, in native coords, relative to input area window.
const BitmapType* bitmapP; // Ptr to bitmap that would be drawn by the OS.
Boolean selected; // True if area is being drawn in response to user tap (button selected)
Boolean fullRedraw; // True if <updateBounds> should be ignored.
UInt16 padding;
} SysNotifyInputAreaDrawingDetailsType;
// for sysNotifyInputAreaPendownEvent. All structure data is
// in ARM native format!!!
typedef struct SysNotifyInputAreaPendownDetailTag {
PointType where; // Pendown location, in native coords, relative to input area window.
} SysNotifyInputAreaPendownDetailType;
// for sysNotifySelectDay. All structure data is in ARM native format!!!
typedef struct SysNotifySelectDayDetailsTag {
DaySelectorType* daySelectorP; // Describes selected date
const
Char* titleP; // Suggested form title
Boolean dayChanged; // Return true if date changed
UInt8 padding[3];
} SysNotifySelectDayDetailsType;
/*
Possible event types to be added in the future:
NOTE that these are NOT implemented yet!!!!
#define sysNotifyDBAddedEvent 'dbs+' // Broadcast after a database is added to the device
// param: ptr to SysNotifyDBInfoType.
#define sysNotifyInitializeEvent 'helo' // broadcast to an app after its installed
// so it can do any necessary initalization
// This event is always broadcast.
// param: ptr to SysNotifyDBInfoType.
#define sysNotifyCleanupEvent 'gbye' // broadcast to an app just before its deleted
// so it can do any necessary cleanup work.
// This event is always broadcast.
// The database's type will have been set to
// sysFileTTemp so that if case the handler
// crashes, the DB will be deleted on reset.
// param: ptr to SysNotifyDBInfoType.
#define sysNotifyCardChangedEvent 'card' // broadcast when the owner's business card
// has changed, allowing apps to adjust for that.
// param: ptr to new owner data.
*/
#ifdef __cplusplus
extern "C" {
#endif
extern Err SysNotifyRegister(UInt16 cardNo, LocalID dbID, UInt32 notifyType,
SysNotifyProcPtr callbackP, Int8 priority, void *userDataP)
SYS_TRAP(sysTrapSysNotifyRegister);
extern Err SysNotifyUnregister(UInt16 cardNo, LocalID dbID, UInt32 notifyType, Int8 priority)
SYS_TRAP(sysTrapSysNotifyUnregister);
/*
* WARNING: Never call SysNotifyBroadcast from a background task
* (or from any code that might be called from a BG task)
* with the memory semaphore reserved. Deadlock will
* result when the broadcast is deferred and the UI task
* tries to acquire the mem semaphore in order to send it out.
*/
extern Err SysNotifyBroadcast(SysNotifyParamType *notify)
SYS_TRAP(sysTrapSysNotifyBroadcast);
extern Err SysNotifyBroadcastDeferred(SysNotifyParamType *notify, Int16 paramSize)
SYS_TRAP(sysTrapSysNotifyBroadcastDeferred);
// Kick off a notification from an interrupt handler.
// Note: non-interrupt code should use SysNotifyBroadcast
extern Err SysNotifyBroadcastFromInterrupt(UInt32 notifyType, UInt32 broadcaster,
void *notifyDetailsP)
SYS_TRAP(sysTrapSysNotifyBroadcastFromInterrupt);
#ifdef __cplusplus
}
#endif
#endif // __NOTIFY_H__