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/

Reply via email to