I have written the following code to receive SMS messages from a phone using the Telephony APIs, and it all appears to work except for one step: TelSmsSelectStorage never changes the storage from store 0 (the SIM card). No matter what I do it never changes. I have written the code synchoronously (as seen here), asynchronously, trying different values for the storage, still nothing. The Palm France team, who wrote the Telephony APIs, haven't been able to help me out with this so I am really hoping that someone here will know something about what I need to do to retrieve messages from all available stores. Any help would be greatly appreciated.
Thanks, trv PS: I stripped out all the code pertaining to my app specifically, like the storing of the messages in my database, etc. #define errIambicMailMemAllocFail (appErrorClass | 0x01) Err SMS_RetrieveMessages (void) { Err err; TelSmsGetMessageCountType messageCount; TelSmsReadMessagesType readMessages; TelSmsGetAvailableStorageType getAvailStore; UInt16 dataMaxSize, j, i, count = 8, msgCount; getAvailStore.count = count; // get the first 8 stores getAvailStore.storagesP = MemPtrNew (8 * sizeof (UInt8)); if (getAvailStore.storagesP) { err = TelSmsGetAvailableStorage (smsLibRef, smsPalmTelAppID, &getAvailStore, NULL); if (err == errNone || err == telErrBufferSize) // not fitting is OK { count = (getAvailStore.count > 8 ? 8 : getAvailStore.count); for (j = 0; j < count ; j++) { err = TelSmsSelectStorage (smsLibRef, smsPalmTelAppID, getAvailStore.storagesP[j], NULL); // this function call doesn't seem to properly sellect the storage! if (err == errNone) { messageCount.messageType = kTelSmsMessageTypeDelivered; err = TelSmsGetMessageCount (smsLibRef, smsPalmTelAppID, &messageCount, NULL); if (err == errNone) { err = TelSmsGetDataMaxSize (smsLibRef, smsPalmTelAppID, &dataMaxSize, NULL); if (err == errNone) { readMessages.first = 0; readMessages.count = messageCount.count; readMessages.messagesP = MemPtrNew ((readMessages.count + 1) * sizeof (TelSmsDeliveryMessageType)); if (readMessages.messagesP) { for (i = 0; i < readMessages.count; i++) { readMessages.messagesP[i].version = kTelSmsAPIVersion; readMessages.messagesP[i].index = 0; readMessages.messagesP[i].dataSize = dataMaxSize; readMessages.messagesP[i].data = MemPtrNew ((dataMaxSize + 1) * sizeof (UInt8)); if (! readMessages.messagesP[i].data) { err = errIambicMailMemAllocFail; break; } readMessages.messagesP[i].originatingAddressSize = kTelMaxPhoneNumberLen + 1; readMessages.messagesP[i].originatingAddress = MemPtrNew ((kTelMaxPhoneNumberLen + 1) * sizeof (Char)); if (! readMessages.messagesP[i].originatingAddress) { err = errIambicMailMemAllocFail; break; } readMessages.messagesP[i].advancedParams.advancedGSM.serviceCenterNumber = MemPtrNew ((kTelMaxPhoneNumberLen + 1) * sizeof (Char)); if (! readMessages.messagesP[i].advancedParams.advancedGSM.serviceCenterNumber) { err = errIambicMailMemAllocFail; break; } readMessages.messagesP[i].advancedParams.advancedGSM.serviceCenterNumberSize = kTelMaxPhoneNumberLen + 1; readMessages.messagesP[i].extensionsCount = 5; // Palm OS Ref pg. 1797 says to allocate between 3 and 5 extensions for a message readMessages.messagesP[i].extensionsP = MemPtrNew (5 * sizeof (TelSmsExtensionType)); if (! readMessages.messagesP[i].extensionsP) { err = errIambicMailMemAllocFail; break; } } err = TelSmsReadMessages (smsLibRef, smsPalmTelAppID, &readMessages, NULL); if (! err || err == telErrBufferSize) // not fitting into buffers is OK { for (i = 0; i < readMessages.count; i++) { // Store the received message i // Free the memory allocated by received message i } } MemPtrFree (readMessages.messagesP); } else err = errIambicMailMemAllocFail; } } } } } MemPtrFree (getAvailStore.storagesP); } else err = errIambicMailMemAllocFail; return (err); } -- Trevor Lalish-Menagh, Software Engineer iambic, Inc. (www.iambic.com) [EMAIL PROTECTED] (408) 367-1600 x20 -- For information on using the Palm Developer Forums, or to unsubscribe, please see http://www.palmos.com/dev/support/forums/