Base library for cellular modem implementations

Dependencies:   Socket lwip-sys lwip

Dependents:   CellularUSBModem CellularUSBModem

Deprecated

This is an mbed 2 networking library. For mbed 5, the networking libraries have been revised to better support additional network stacks and thread safety here.

Committer:
bogdanm
Date:
Thu Oct 17 12:29:05 2013 +0300
Revision:
1:4a23efdf0da9
Child:
8:944cd194963e
Initial release of the CellularModem library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bogdanm 1:4a23efdf0da9 1 /* CDMASMSInterface.cpp */
bogdanm 1:4a23efdf0da9 2 /* Copyright (C) 2012 mbed.org, MIT License
bogdanm 1:4a23efdf0da9 3 *
bogdanm 1:4a23efdf0da9 4 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
bogdanm 1:4a23efdf0da9 5 * and associated documentation files (the "Software"), to deal in the Software without restriction,
bogdanm 1:4a23efdf0da9 6 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
bogdanm 1:4a23efdf0da9 7 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
bogdanm 1:4a23efdf0da9 8 * furnished to do so, subject to the following conditions:
bogdanm 1:4a23efdf0da9 9 *
bogdanm 1:4a23efdf0da9 10 * The above copyright notice and this permission notice shall be included in all copies or
bogdanm 1:4a23efdf0da9 11 * substantial portions of the Software.
bogdanm 1:4a23efdf0da9 12 *
bogdanm 1:4a23efdf0da9 13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
bogdanm 1:4a23efdf0da9 14 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
bogdanm 1:4a23efdf0da9 15 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
bogdanm 1:4a23efdf0da9 16 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
bogdanm 1:4a23efdf0da9 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
bogdanm 1:4a23efdf0da9 18 */
bogdanm 1:4a23efdf0da9 19
bogdanm 1:4a23efdf0da9 20 #define __DEBUG__ 0
bogdanm 1:4a23efdf0da9 21 #ifndef __MODULE__
bogdanm 1:4a23efdf0da9 22 #define __MODULE__ "CDMASMSInterface.cpp"
bogdanm 1:4a23efdf0da9 23 #endif
bogdanm 1:4a23efdf0da9 24
bogdanm 1:4a23efdf0da9 25 #include "core/fwk.h"
bogdanm 1:4a23efdf0da9 26
bogdanm 1:4a23efdf0da9 27 #include "CDMASMSInterface.h"
bogdanm 1:4a23efdf0da9 28
bogdanm 1:4a23efdf0da9 29 #include <cstdio>
bogdanm 1:4a23efdf0da9 30 #include <cstring>
bogdanm 1:4a23efdf0da9 31
bogdanm 1:4a23efdf0da9 32 #define DEFAULT_TIMEOUT 10000
bogdanm 1:4a23efdf0da9 33
bogdanm 1:4a23efdf0da9 34 CDMASMSInterface::CDMASMSInterface(ATCommandsInterface* pIf) : m_pIf(pIf), m_msg(NULL), m_maxMsgLength(0), m_msisdn(NULL)
bogdanm 1:4a23efdf0da9 35 {
bogdanm 1:4a23efdf0da9 36 }
bogdanm 1:4a23efdf0da9 37
bogdanm 1:4a23efdf0da9 38 int CDMASMSInterface::init()
bogdanm 1:4a23efdf0da9 39 {
bogdanm 1:4a23efdf0da9 40 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 41
bogdanm 1:4a23efdf0da9 42 DBG("Get number of messages in the different inboxes");
bogdanm 1:4a23efdf0da9 43 int ret = updateInbox();
bogdanm 1:4a23efdf0da9 44 if(ret)
bogdanm 1:4a23efdf0da9 45 {
bogdanm 1:4a23efdf0da9 46 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 47 }
bogdanm 1:4a23efdf0da9 48
bogdanm 1:4a23efdf0da9 49 DBG("Initialization done");
bogdanm 1:4a23efdf0da9 50 return OK;
bogdanm 1:4a23efdf0da9 51 }
bogdanm 1:4a23efdf0da9 52
bogdanm 1:4a23efdf0da9 53 int CDMASMSInterface::send(const char* number, const char* message)
bogdanm 1:4a23efdf0da9 54 {
bogdanm 1:4a23efdf0da9 55 if( strlen(number) > 16 )
bogdanm 1:4a23efdf0da9 56 {
bogdanm 1:4a23efdf0da9 57 return NET_INVALID; //Number too long
bogdanm 1:4a23efdf0da9 58 }
bogdanm 1:4a23efdf0da9 59
bogdanm 1:4a23efdf0da9 60 int ret;
bogdanm 1:4a23efdf0da9 61
bogdanm 1:4a23efdf0da9 62 //Prepare infos
bogdanm 1:4a23efdf0da9 63 m_state = SMS_SEND_CMD_SENT;
bogdanm 1:4a23efdf0da9 64
bogdanm 1:4a23efdf0da9 65 bool intlNumber=(number[0]=='+'); //If the number starts with the + sign, replace it with 011 instead (int'l dialing code in the US)
bogdanm 1:4a23efdf0da9 66
bogdanm 1:4a23efdf0da9 67 DBG("Send SM");
bogdanm 1:4a23efdf0da9 68 //Send command
bogdanm 1:4a23efdf0da9 69 char cmd[32+strlen(message)];
bogdanm 1:4a23efdf0da9 70 std::sprintf(cmd, "AT!SSMS=0,%s%s,,\"%s\"",intlNumber?"011":"", intlNumber?(number+1):number, message); //Send with normal priority
bogdanm 1:4a23efdf0da9 71 ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 72
bogdanm 1:4a23efdf0da9 73 if(ret != OK)
bogdanm 1:4a23efdf0da9 74 {
bogdanm 1:4a23efdf0da9 75 WARN("ret %d", ret);
bogdanm 1:4a23efdf0da9 76 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 77 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 78 }
bogdanm 1:4a23efdf0da9 79
bogdanm 1:4a23efdf0da9 80 DBG("Check status");
bogdanm 1:4a23efdf0da9 81 m_txState = SMS_PENDING;
bogdanm 1:4a23efdf0da9 82
bogdanm 1:4a23efdf0da9 83 int tries = 10;
bogdanm 1:4a23efdf0da9 84 while(tries--)
bogdanm 1:4a23efdf0da9 85 {
bogdanm 1:4a23efdf0da9 86 m_state = SMS_GET_TX_STATUS_CMD_SENT;
bogdanm 1:4a23efdf0da9 87 ret = m_pIf->execute("AT!SSMS?", this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 88 if(ret)
bogdanm 1:4a23efdf0da9 89 {
bogdanm 1:4a23efdf0da9 90 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 91 return ret;
bogdanm 1:4a23efdf0da9 92 }
bogdanm 1:4a23efdf0da9 93 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 94 if(m_txState == SMS_PENDING) //Wait more
bogdanm 1:4a23efdf0da9 95 {
bogdanm 1:4a23efdf0da9 96 Thread::wait(1000);
bogdanm 1:4a23efdf0da9 97 continue;
bogdanm 1:4a23efdf0da9 98 }
bogdanm 1:4a23efdf0da9 99 else if(m_txState == SMS_FAILED)
bogdanm 1:4a23efdf0da9 100 {
bogdanm 1:4a23efdf0da9 101 ERR("The modem could not send the SM");
bogdanm 1:4a23efdf0da9 102 return NET_CONN; //Probably a conenction issue, the user can retry
bogdanm 1:4a23efdf0da9 103 }
bogdanm 1:4a23efdf0da9 104 else
bogdanm 1:4a23efdf0da9 105 {
bogdanm 1:4a23efdf0da9 106 break;
bogdanm 1:4a23efdf0da9 107 }
bogdanm 1:4a23efdf0da9 108 }
bogdanm 1:4a23efdf0da9 109 if(!tries)
bogdanm 1:4a23efdf0da9 110 {
bogdanm 1:4a23efdf0da9 111 ERR("The is still trying to send the SM");
bogdanm 1:4a23efdf0da9 112 return NET_TIMEOUT;
bogdanm 1:4a23efdf0da9 113 }
bogdanm 1:4a23efdf0da9 114 return OK;
bogdanm 1:4a23efdf0da9 115 }
bogdanm 1:4a23efdf0da9 116
bogdanm 1:4a23efdf0da9 117
bogdanm 1:4a23efdf0da9 118 int CDMASMSInterface::get(char* number, char* message, size_t maxLength)
bogdanm 1:4a23efdf0da9 119 {
bogdanm 1:4a23efdf0da9 120 if( maxLength < 1 )
bogdanm 1:4a23efdf0da9 121 {
bogdanm 1:4a23efdf0da9 122 return NET_INVALID; //Buffer too short
bogdanm 1:4a23efdf0da9 123 }
bogdanm 1:4a23efdf0da9 124
bogdanm 1:4a23efdf0da9 125 int ret;
bogdanm 1:4a23efdf0da9 126
bogdanm 1:4a23efdf0da9 127 DBG("Get next message");
bogdanm 1:4a23efdf0da9 128 if( (m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]) == 0)
bogdanm 1:4a23efdf0da9 129 {
bogdanm 1:4a23efdf0da9 130 DBG("Message list count is 0 and needs updating. Running updateInbox.");
bogdanm 1:4a23efdf0da9 131 ret = updateInbox();
bogdanm 1:4a23efdf0da9 132 if (ret)
bogdanm 1:4a23efdf0da9 133 {
bogdanm 1:4a23efdf0da9 134 return ret;
bogdanm 1:4a23efdf0da9 135 }
bogdanm 1:4a23efdf0da9 136 }
bogdanm 1:4a23efdf0da9 137
bogdanm 1:4a23efdf0da9 138 if( (m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]) == 0)
bogdanm 1:4a23efdf0da9 139 {
bogdanm 1:4a23efdf0da9 140 DBG("Message list count is 0");
bogdanm 1:4a23efdf0da9 141 return NET_EMPTY; //No message to read
bogdanm 1:4a23efdf0da9 142 }
bogdanm 1:4a23efdf0da9 143
bogdanm 1:4a23efdf0da9 144 //Determine which index to use : 3 (read), then 1 (urgent), then 2 (regular)
bogdanm 1:4a23efdf0da9 145 int index;
bogdanm 1:4a23efdf0da9 146 if(m_msgInListsCount[2])
bogdanm 1:4a23efdf0da9 147 {
bogdanm 1:4a23efdf0da9 148 index = 3;
bogdanm 1:4a23efdf0da9 149 }
bogdanm 1:4a23efdf0da9 150 else if(m_msgInListsCount[0])
bogdanm 1:4a23efdf0da9 151 {
bogdanm 1:4a23efdf0da9 152 index = 1;
bogdanm 1:4a23efdf0da9 153 }
bogdanm 1:4a23efdf0da9 154 else //if(m_msgInListsCount[1])
bogdanm 1:4a23efdf0da9 155 {
bogdanm 1:4a23efdf0da9 156 index = 2;
bogdanm 1:4a23efdf0da9 157 }
bogdanm 1:4a23efdf0da9 158
bogdanm 1:4a23efdf0da9 159 //Prepare infos
bogdanm 1:4a23efdf0da9 160 m_state = SMS_GET_CMD_SENT;
bogdanm 1:4a23efdf0da9 161 m_msisdn = (char*) number;
bogdanm 1:4a23efdf0da9 162 m_msg = (char*) message;
bogdanm 1:4a23efdf0da9 163 m_maxMsgLength = maxLength;
bogdanm 1:4a23efdf0da9 164 m_headersToRead = 3;
bogdanm 1:4a23efdf0da9 165
bogdanm 1:4a23efdf0da9 166 m_msisdn[0] = '\0';
bogdanm 1:4a23efdf0da9 167
bogdanm 1:4a23efdf0da9 168 DBG("Get SMS");
bogdanm 1:4a23efdf0da9 169 //Read command
bogdanm 1:4a23efdf0da9 170 char cmd[32];
bogdanm 1:4a23efdf0da9 171 std::sprintf(cmd, "AT!GSMS?%d,1", index); //1 is the oldest message
bogdanm 1:4a23efdf0da9 172 ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 173 if( ret != OK )
bogdanm 1:4a23efdf0da9 174 {
bogdanm 1:4a23efdf0da9 175 WARN("AT!GSMS returned %d", ret);
bogdanm 1:4a23efdf0da9 176 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 177 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 178 }
bogdanm 1:4a23efdf0da9 179
bogdanm 1:4a23efdf0da9 180 //If message is not read, it will be put at the end of the read list
bogdanm 1:4a23efdf0da9 181 int item;
bogdanm 1:4a23efdf0da9 182 if( index != 3 )
bogdanm 1:4a23efdf0da9 183 {
bogdanm 1:4a23efdf0da9 184 //Decrement count in relevant list
bogdanm 1:4a23efdf0da9 185 m_msgInListsCount[index-1]--;
bogdanm 1:4a23efdf0da9 186 //Increment count in read list
bogdanm 1:4a23efdf0da9 187 m_msgInListsCount[3-1]++;
bogdanm 1:4a23efdf0da9 188 item = m_msgInListsCount[3-1];
bogdanm 1:4a23efdf0da9 189 //Normally item should be equal to 1 as we'd have read any older messages first
bogdanm 1:4a23efdf0da9 190 if( item != 1 )
bogdanm 1:4a23efdf0da9 191 {
bogdanm 1:4a23efdf0da9 192 WARN("Still some older messages pending in the read inbox");
bogdanm 1:4a23efdf0da9 193 }
bogdanm 1:4a23efdf0da9 194 }
bogdanm 1:4a23efdf0da9 195 else
bogdanm 1:4a23efdf0da9 196 {
bogdanm 1:4a23efdf0da9 197 //The item is still the oldest one
bogdanm 1:4a23efdf0da9 198 item = 1;
bogdanm 1:4a23efdf0da9 199 }
bogdanm 1:4a23efdf0da9 200
bogdanm 1:4a23efdf0da9 201 DBG("Deleting message");
bogdanm 1:4a23efdf0da9 202 //Delete message from inbox
bogdanm 1:4a23efdf0da9 203 std::sprintf(cmd, "AT!DSMS=3"/*,%d", item*/); //FIXME why doesn't that work when specifying the index??
bogdanm 1:4a23efdf0da9 204 ret = m_pIf->executeSimple(cmd, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 205 if(ret != OK)
bogdanm 1:4a23efdf0da9 206 {
bogdanm 1:4a23efdf0da9 207 ERR("Could not delete message");
bogdanm 1:4a23efdf0da9 208 }
bogdanm 1:4a23efdf0da9 209 else
bogdanm 1:4a23efdf0da9 210 {
bogdanm 1:4a23efdf0da9 211 //Now we can decrease the number of read messages
bogdanm 1:4a23efdf0da9 212 m_msgInListsCount[3-1]--;
bogdanm 1:4a23efdf0da9 213 }
bogdanm 1:4a23efdf0da9 214
bogdanm 1:4a23efdf0da9 215 if (m_state != SMS_CMD_PROCESSED)
bogdanm 1:4a23efdf0da9 216 {
bogdanm 1:4a23efdf0da9 217 WARN("Message could not be retrieved properly");
bogdanm 1:4a23efdf0da9 218 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 219 return NET_EMPTY;
bogdanm 1:4a23efdf0da9 220 }
bogdanm 1:4a23efdf0da9 221
bogdanm 1:4a23efdf0da9 222 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 223
bogdanm 1:4a23efdf0da9 224 return OK;
bogdanm 1:4a23efdf0da9 225 }
bogdanm 1:4a23efdf0da9 226
bogdanm 1:4a23efdf0da9 227
bogdanm 1:4a23efdf0da9 228 int CDMASMSInterface::getCount(size_t* pCount)
bogdanm 1:4a23efdf0da9 229 {
bogdanm 1:4a23efdf0da9 230 int ret = updateInbox();
bogdanm 1:4a23efdf0da9 231 if(ret)
bogdanm 1:4a23efdf0da9 232 {
bogdanm 1:4a23efdf0da9 233 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 234 }
bogdanm 1:4a23efdf0da9 235
bogdanm 1:4a23efdf0da9 236 *pCount = m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]; //Urgent messages + regular messages + read messages
bogdanm 1:4a23efdf0da9 237
bogdanm 1:4a23efdf0da9 238 return OK;
bogdanm 1:4a23efdf0da9 239 }
bogdanm 1:4a23efdf0da9 240
bogdanm 1:4a23efdf0da9 241
bogdanm 1:4a23efdf0da9 242 /*virtual*/ int CDMASMSInterface::onNewATResponseLine(ATCommandsInterface* pInst, const char* line)
bogdanm 1:4a23efdf0da9 243 {
bogdanm 1:4a23efdf0da9 244 if(m_state == SMS_SEND_CMD_SENT)
bogdanm 1:4a23efdf0da9 245 {
bogdanm 1:4a23efdf0da9 246 DBG("SMS Send: %s", line);
bogdanm 1:4a23efdf0da9 247 }
bogdanm 1:4a23efdf0da9 248 else if(m_state == SMS_GET_TX_STATUS_CMD_SENT)
bogdanm 1:4a23efdf0da9 249 {
bogdanm 1:4a23efdf0da9 250 if(!strcmp(line, "sent"))
bogdanm 1:4a23efdf0da9 251 {
bogdanm 1:4a23efdf0da9 252 m_txState = SMS_SENT;
bogdanm 1:4a23efdf0da9 253 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 254 }
bogdanm 1:4a23efdf0da9 255 else if(!strcmp(line, "failed"))
bogdanm 1:4a23efdf0da9 256 {
bogdanm 1:4a23efdf0da9 257 m_txState = SMS_FAILED;
bogdanm 1:4a23efdf0da9 258 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 259 }
bogdanm 1:4a23efdf0da9 260 else if(!strcmp(line, "none"))
bogdanm 1:4a23efdf0da9 261 {
bogdanm 1:4a23efdf0da9 262 m_txState = SMS_NONE;
bogdanm 1:4a23efdf0da9 263 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 264 }
bogdanm 1:4a23efdf0da9 265 else if(!strcmp(line, "pending"))
bogdanm 1:4a23efdf0da9 266 {
bogdanm 1:4a23efdf0da9 267 m_txState = SMS_PENDING;
bogdanm 1:4a23efdf0da9 268 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 269 }
bogdanm 1:4a23efdf0da9 270 }
bogdanm 1:4a23efdf0da9 271 else if(m_state == SMS_GET_CMD_SENT)
bogdanm 1:4a23efdf0da9 272 {
bogdanm 1:4a23efdf0da9 273 DBG("Header: %s", line);
bogdanm 1:4a23efdf0da9 274
bogdanm 1:4a23efdf0da9 275 if(m_msisdn[0]=='\0')
bogdanm 1:4a23efdf0da9 276 {
bogdanm 1:4a23efdf0da9 277 sscanf(line, "From: %16s", m_msisdn);
bogdanm 1:4a23efdf0da9 278 }
bogdanm 1:4a23efdf0da9 279
bogdanm 1:4a23efdf0da9 280 m_headersToRead--;
bogdanm 1:4a23efdf0da9 281
bogdanm 1:4a23efdf0da9 282 if(m_headersToRead==0) //End of headers
bogdanm 1:4a23efdf0da9 283 {
bogdanm 1:4a23efdf0da9 284 if(m_msisdn[0]!='\0') //Checks that the incoming number has been retrieved
bogdanm 1:4a23efdf0da9 285 {
bogdanm 1:4a23efdf0da9 286 m_state = SMS_GET_HDR_RECEIVED;
bogdanm 1:4a23efdf0da9 287 }
bogdanm 1:4a23efdf0da9 288 else
bogdanm 1:4a23efdf0da9 289 {
bogdanm 1:4a23efdf0da9 290 m_state = SMS_IDLE; //Error, signal it
bogdanm 1:4a23efdf0da9 291 }
bogdanm 1:4a23efdf0da9 292 }
bogdanm 1:4a23efdf0da9 293 }
bogdanm 1:4a23efdf0da9 294 else if(m_state == SMS_GET_HDR_RECEIVED)
bogdanm 1:4a23efdf0da9 295 {
bogdanm 1:4a23efdf0da9 296 DBG("Message: %s", line);
bogdanm 1:4a23efdf0da9 297 size_t cpyLen = MIN( std::strlen(line), m_maxMsgLength - 1 );
bogdanm 1:4a23efdf0da9 298 std::memcpy( m_msg, line, cpyLen );
bogdanm 1:4a23efdf0da9 299 m_msg[cpyLen] = '\0';
bogdanm 1:4a23efdf0da9 300 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 301 }
bogdanm 1:4a23efdf0da9 302 else if(m_state == SMS_GET_COUNT_CMD_SENT)
bogdanm 1:4a23efdf0da9 303 {
bogdanm 1:4a23efdf0da9 304 DBG("Inbox: %s", line);
bogdanm 1:4a23efdf0da9 305 int index;
bogdanm 1:4a23efdf0da9 306 size_t count;
bogdanm 1:4a23efdf0da9 307 if((strlen(line) > 16) && sscanf(line + 16, "{Index = %d}: %d", &index, &count) == 2)
bogdanm 1:4a23efdf0da9 308 {
bogdanm 1:4a23efdf0da9 309 if((index > 0) && (index <=4))
bogdanm 1:4a23efdf0da9 310 {
bogdanm 1:4a23efdf0da9 311 m_msgInListsCount[index-1] = count;
bogdanm 1:4a23efdf0da9 312 }
bogdanm 1:4a23efdf0da9 313 if(index == 4)
bogdanm 1:4a23efdf0da9 314 {
bogdanm 1:4a23efdf0da9 315 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 316 }
bogdanm 1:4a23efdf0da9 317 }
bogdanm 1:4a23efdf0da9 318 }
bogdanm 1:4a23efdf0da9 319 return OK;
bogdanm 1:4a23efdf0da9 320 }
bogdanm 1:4a23efdf0da9 321
bogdanm 1:4a23efdf0da9 322 /*virtual*/ int CDMASMSInterface::onNewEntryPrompt(ATCommandsInterface* pInst)
bogdanm 1:4a23efdf0da9 323 {
bogdanm 1:4a23efdf0da9 324 return OK;
bogdanm 1:4a23efdf0da9 325 }
bogdanm 1:4a23efdf0da9 326
bogdanm 1:4a23efdf0da9 327
bogdanm 1:4a23efdf0da9 328 int CDMASMSInterface::updateInbox()
bogdanm 1:4a23efdf0da9 329 {
bogdanm 1:4a23efdf0da9 330 //Get number of unread/read messages
bogdanm 1:4a23efdf0da9 331
bogdanm 1:4a23efdf0da9 332 DBG("Updating inbox");
bogdanm 1:4a23efdf0da9 333 m_msgInListsCount[0] = m_msgInListsCount[1] = m_msgInListsCount[2] = m_msgInListsCount[3] = 0; //Reset counts
bogdanm 1:4a23efdf0da9 334
bogdanm 1:4a23efdf0da9 335 //Get counts
bogdanm 1:4a23efdf0da9 336 m_state = SMS_GET_COUNT_CMD_SENT;
bogdanm 1:4a23efdf0da9 337 int ret = m_pIf->execute("AT!CNTSMS", this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 338 if( ret != OK )
bogdanm 1:4a23efdf0da9 339 {
bogdanm 1:4a23efdf0da9 340 WARN("AT!CNTSMS returned %d", ret);
bogdanm 1:4a23efdf0da9 341 m_msgInListsCount[0] = m_msgInListsCount[1] = m_msgInListsCount[2] = m_msgInListsCount[3] = 0; //Invalidate counts
bogdanm 1:4a23efdf0da9 342 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 343 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 344 }
bogdanm 1:4a23efdf0da9 345
bogdanm 1:4a23efdf0da9 346 return OK;
bogdanm 1:4a23efdf0da9 347 }
bogdanm 1:4a23efdf0da9 348