Article View: comp.sys.palmtops.pilot
Article #146Receiving SMS messages using the Telephony API calls
From: Trevor Menagh
Date: Wed, 10 Jul 2002 01:02
Date: Wed, 10 Jul 2002 01:02
132 lines
6331 bytes
6331 bytes
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 synchronously (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 (sorry for the cross post ^^;;;),
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)
trevor@iambic.com
(408) 367-1600 x20
Technical Details
Message-ID:
<db28f35.0207091702.6471b34@posting.google.com>Path:
arc1-ca.pugleaf.net!archiver1.google.com!postnews1.google.com!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 109d41,367dcf1877dd217b,start X-Google-Attributes: gid109d41,public X-Google-Thread: 112073,367dcf1877dd217b,start X-Google-Attributes: gid112073,public X-Google-Thread: f635a,367dcf1877dd217b,start X-Google-Attributes: gidf635a,public X-Google-Thread: 10baa0,367dcf1877dd217b,start X-Google-Attributes: gid10baa0,public X-Google-Thread: 10c638,367dcf1877dd217b,start X-Google-Attributes: gid10c638,public X-Google-ArrivalTime: 2002-07-09 18:02:36 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!postnews1.google.com!not-for-mail From: jumex@gocougs.wsu.edu (Trevor Menagh) Newsgroups: comp.sys.palmtops.pilot,pilot.programmer,pilot.programmer.codewarrior,pilot.programmer.gcc,codewarrior.palm Subject: Receiving SMS messages using the Telephony API calls Date: 9 Jul 2002 18:02:35 -0700 Organization: http://groups.google.com/ Lines: 132 Message-ID: <db28f35.0207091702.6471b34@posting.google.com> NNTP-Posting-Host: 209.133.34.242 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: posting.google.com 1026262955 32564 127.0.0.1 (10 Jul 2002 01:02:35 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: 10 Jul 2002 01:02:35 GMT