opensubscriber
   Find in this group all groups
 
Unknown more information…

p : palm-dev-forum@palm.lyris.net 27 April 2005 • 8:08PM -0400

Strange error when trying to intercept sysNotifyVolumeMountedEvent
by Dr. Vesselin Bontchev

REPLY TO AUTHOR
 
REPLY TO GROUP




Hello folks,

I'm trying to intercept the insertion of a memory card and to scan its contents. Here is what I'm doing:

1) On sysAppLaunchCmdSystemReset and sysAppLaunchCmdSyncNotify I register to receive notifications about the sysNotifyVolumeMountedEvent event:

UInt32 PilotMain (UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
    UInt16 cardNo;
    LocalID dbID;
    UInt32 romVersion;

    switch (cmd)
    {
        case sysAppLaunchCmdNormalLaunch:
            AppStart ();
            FrmGotoForm (kMainForm);
            AppEventLoop ();
            AppStop ();
            break;
        case sysAppLaunchCmdSystemReset:
        case sysAppLaunchCmdSyncNotify:
            FtrGet (sysFtrCreator, sysFtrNumROMVersion, &romVersion);
            if (romVersion >= version40)
                SysNotifyRegister (cardNo, dbID, sysNotifyVolumeMountedEvent, NULL, sysNotifyNormalPriority, NULL);
            break;
        case sysAppLaunchCmdNotify:
            HandleNotification ((SysNotifyParamType *) cmdPBP);
            break;
        default:
            break;
    }
    return 0;
}

2) When the notification arrives, I basically do

void HandleNotification (SysNotifyParamType *np)
{
    switch (np->notifyType)
    {
        case sysNotifyVolumeMountedEvent:
            AppStart ();
            FrmGotoForm (kScanningMemoryCardForm);
            AppEventLoop ();
            AppStop ();
            break;
        default:
            break;
    }
}

The code is written so that it doesn't use any global or static variables. This works fine on the Tungsten E simulator, using HostFS to simulate a card with a directory on the PC. True, I can't "insert a card" in the simulator - but the sysNotifyVolumeMountedEvent event is broadcast on soft reset too (makes sense - the volume has to be mounted during reset), and when I reset the simulator, my application is launched and it scans the card.

However, when I try it on a real device (Tungsten E), as soon as I insert a card (or during reset, if a card is left in the slot) I get a system crash with the memory manager complaining about a NULL pointer. I've been using a FrmCustomAlert to display debugging messages and, interestingly, the custom alert is flashed on the screen - but there is no waiting for the user to tap on its button; instead I immediately get the message for the crash.

Another thing. The crash does not happen and the application scans the inserted card properly, if the application was running at the moment when the card was inserted.

Any hints what might be the problem? The documentation explicitly says that you *can* use the user interface during notifications. Yet the program crashes as if there is no current form or something. And why doesn't it crash under the simulator? Is there anything obviuous that I might be missing?

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

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.