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:
mbed_official
Date:
Thu May 08 11:00:26 2014 +0100
Revision:
8:944cd194963e
Parent:
1:4a23efdf0da9
Synchronized with git revision df12bf01ac7dbb50751e2b16a351c894994e1dcf

Full URL: https://github.com/mbedmicro/mbed/commit/df12bf01ac7dbb50751e2b16a351c894994e1dcf/

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
mbed_official 8:944cd194963e 32 using std::sscanf;
mbed_official 8:944cd194963e 33
bogdanm 1:4a23efdf0da9 34 #define DEFAULT_TIMEOUT 10000
bogdanm 1:4a23efdf0da9 35
bogdanm 1:4a23efdf0da9 36 CDMASMSInterface::CDMASMSInterface(ATCommandsInterface* pIf) : m_pIf(pIf), m_msg(NULL), m_maxMsgLength(0), m_msisdn(NULL)
bogdanm 1:4a23efdf0da9 37 {
bogdanm 1:4a23efdf0da9 38 }
bogdanm 1:4a23efdf0da9 39
bogdanm 1:4a23efdf0da9 40 int CDMASMSInterface::init()
bogdanm 1:4a23efdf0da9 41 {
bogdanm 1:4a23efdf0da9 42 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 43
bogdanm 1:4a23efdf0da9 44 DBG("Get number of messages in the different inboxes");
bogdanm 1:4a23efdf0da9 45 int ret = updateInbox();
bogdanm 1:4a23efdf0da9 46 if(ret)
bogdanm 1:4a23efdf0da9 47 {
bogdanm 1:4a23efdf0da9 48 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 49 }
bogdanm 1:4a23efdf0da9 50
bogdanm 1:4a23efdf0da9 51 DBG("Initialization done");
bogdanm 1:4a23efdf0da9 52 return OK;
bogdanm 1:4a23efdf0da9 53 }
bogdanm 1:4a23efdf0da9 54
bogdanm 1:4a23efdf0da9 55 int CDMASMSInterface::send(const char* number, const char* message)
bogdanm 1:4a23efdf0da9 56 {
bogdanm 1:4a23efdf0da9 57 if( strlen(number) > 16 )
bogdanm 1:4a23efdf0da9 58 {
bogdanm 1:4a23efdf0da9 59 return NET_INVALID; //Number too long
bogdanm 1:4a23efdf0da9 60 }
bogdanm 1:4a23efdf0da9 61
bogdanm 1:4a23efdf0da9 62 int ret;
bogdanm 1:4a23efdf0da9 63
bogdanm 1:4a23efdf0da9 64 //Prepare infos
bogdanm 1:4a23efdf0da9 65 m_state = SMS_SEND_CMD_SENT;
bogdanm 1:4a23efdf0da9 66
bogdanm 1:4a23efdf0da9 67 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 68
bogdanm 1:4a23efdf0da9 69 DBG("Send SM");
bogdanm 1:4a23efdf0da9 70 //Send command
bogdanm 1:4a23efdf0da9 71 char cmd[32+strlen(message)];
bogdanm 1:4a23efdf0da9 72 std::sprintf(cmd, "AT!SSMS=0,%s%s,,\"%s\"",intlNumber?"011":"", intlNumber?(number+1):number, message); //Send with normal priority
bogdanm 1:4a23efdf0da9 73 ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 74
bogdanm 1:4a23efdf0da9 75 if(ret != OK)
bogdanm 1:4a23efdf0da9 76 {
bogdanm 1:4a23efdf0da9 77 WARN("ret %d", ret);
bogdanm 1:4a23efdf0da9 78 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 79 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 80 }
bogdanm 1:4a23efdf0da9 81
bogdanm 1:4a23efdf0da9 82 DBG("Check status");
bogdanm 1:4a23efdf0da9 83 m_txState = SMS_PENDING;
bogdanm 1:4a23efdf0da9 84
bogdanm 1:4a23efdf0da9 85 int tries = 10;
bogdanm 1:4a23efdf0da9 86 while(tries--)
bogdanm 1:4a23efdf0da9 87 {
bogdanm 1:4a23efdf0da9 88 m_state = SMS_GET_TX_STATUS_CMD_SENT;
bogdanm 1:4a23efdf0da9 89 ret = m_pIf->execute("AT!SSMS?", this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 90 if(ret)
bogdanm 1:4a23efdf0da9 91 {
bogdanm 1:4a23efdf0da9 92 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 93 return ret;
bogdanm 1:4a23efdf0da9 94 }
bogdanm 1:4a23efdf0da9 95 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 96 if(m_txState == SMS_PENDING) //Wait more
bogdanm 1:4a23efdf0da9 97 {
bogdanm 1:4a23efdf0da9 98 Thread::wait(1000);
bogdanm 1:4a23efdf0da9 99 continue;
bogdanm 1:4a23efdf0da9 100 }
bogdanm 1:4a23efdf0da9 101 else if(m_txState == SMS_FAILED)
bogdanm 1:4a23efdf0da9 102 {
bogdanm 1:4a23efdf0da9 103 ERR("The modem could not send the SM");
bogdanm 1:4a23efdf0da9 104 return NET_CONN; //Probably a conenction issue, the user can retry
bogdanm 1:4a23efdf0da9 105 }
bogdanm 1:4a23efdf0da9 106 else
bogdanm 1:4a23efdf0da9 107 {
bogdanm 1:4a23efdf0da9 108 break;
bogdanm 1:4a23efdf0da9 109 }
bogdanm 1:4a23efdf0da9 110 }
bogdanm 1:4a23efdf0da9 111 if(!tries)
bogdanm 1:4a23efdf0da9 112 {
bogdanm 1:4a23efdf0da9 113 ERR("The is still trying to send the SM");
bogdanm 1:4a23efdf0da9 114 return NET_TIMEOUT;
bogdanm 1:4a23efdf0da9 115 }
bogdanm 1:4a23efdf0da9 116 return OK;
bogdanm 1:4a23efdf0da9 117 }
bogdanm 1:4a23efdf0da9 118
bogdanm 1:4a23efdf0da9 119
bogdanm 1:4a23efdf0da9 120 int CDMASMSInterface::get(char* number, char* message, size_t maxLength)
bogdanm 1:4a23efdf0da9 121 {
bogdanm 1:4a23efdf0da9 122 if( maxLength < 1 )
bogdanm 1:4a23efdf0da9 123 {
bogdanm 1:4a23efdf0da9 124 return NET_INVALID; //Buffer too short
bogdanm 1:4a23efdf0da9 125 }
bogdanm 1:4a23efdf0da9 126
bogdanm 1:4a23efdf0da9 127 int ret;
bogdanm 1:4a23efdf0da9 128
bogdanm 1:4a23efdf0da9 129 DBG("Get next message");
bogdanm 1:4a23efdf0da9 130 if( (m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]) == 0)
bogdanm 1:4a23efdf0da9 131 {
bogdanm 1:4a23efdf0da9 132 DBG("Message list count is 0 and needs updating. Running updateInbox.");
bogdanm 1:4a23efdf0da9 133 ret = updateInbox();
bogdanm 1:4a23efdf0da9 134 if (ret)
bogdanm 1:4a23efdf0da9 135 {
bogdanm 1:4a23efdf0da9 136 return ret;
bogdanm 1:4a23efdf0da9 137 }
bogdanm 1:4a23efdf0da9 138 }
bogdanm 1:4a23efdf0da9 139
bogdanm 1:4a23efdf0da9 140 if( (m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]) == 0)
bogdanm 1:4a23efdf0da9 141 {
bogdanm 1:4a23efdf0da9 142 DBG("Message list count is 0");
bogdanm 1:4a23efdf0da9 143 return NET_EMPTY; //No message to read
bogdanm 1:4a23efdf0da9 144 }
bogdanm 1:4a23efdf0da9 145
bogdanm 1:4a23efdf0da9 146 //Determine which index to use : 3 (read), then 1 (urgent), then 2 (regular)
bogdanm 1:4a23efdf0da9 147 int index;
bogdanm 1:4a23efdf0da9 148 if(m_msgInListsCount[2])
bogdanm 1:4a23efdf0da9 149 {
bogdanm 1:4a23efdf0da9 150 index = 3;
bogdanm 1:4a23efdf0da9 151 }
bogdanm 1:4a23efdf0da9 152 else if(m_msgInListsCount[0])
bogdanm 1:4a23efdf0da9 153 {
bogdanm 1:4a23efdf0da9 154 index = 1;
bogdanm 1:4a23efdf0da9 155 }
bogdanm 1:4a23efdf0da9 156 else //if(m_msgInListsCount[1])
bogdanm 1:4a23efdf0da9 157 {
bogdanm 1:4a23efdf0da9 158 index = 2;
bogdanm 1:4a23efdf0da9 159 }
bogdanm 1:4a23efdf0da9 160
bogdanm 1:4a23efdf0da9 161 //Prepare infos
bogdanm 1:4a23efdf0da9 162 m_state = SMS_GET_CMD_SENT;
bogdanm 1:4a23efdf0da9 163 m_msisdn = (char*) number;
bogdanm 1:4a23efdf0da9 164 m_msg = (char*) message;
bogdanm 1:4a23efdf0da9 165 m_maxMsgLength = maxLength;
bogdanm 1:4a23efdf0da9 166 m_headersToRead = 3;
bogdanm 1:4a23efdf0da9 167
bogdanm 1:4a23efdf0da9 168 m_msisdn[0] = '\0';
bogdanm 1:4a23efdf0da9 169
bogdanm 1:4a23efdf0da9 170 DBG("Get SMS");
bogdanm 1:4a23efdf0da9 171 //Read command
bogdanm 1:4a23efdf0da9 172 char cmd[32];
bogdanm 1:4a23efdf0da9 173 std::sprintf(cmd, "AT!GSMS?%d,1", index); //1 is the oldest message
bogdanm 1:4a23efdf0da9 174 ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 175 if( ret != OK )
bogdanm 1:4a23efdf0da9 176 {
bogdanm 1:4a23efdf0da9 177 WARN("AT!GSMS returned %d", ret);
bogdanm 1:4a23efdf0da9 178 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 179 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 180 }
bogdanm 1:4a23efdf0da9 181
bogdanm 1:4a23efdf0da9 182 //If message is not read, it will be put at the end of the read list
bogdanm 1:4a23efdf0da9 183 int item;
bogdanm 1:4a23efdf0da9 184 if( index != 3 )
bogdanm 1:4a23efdf0da9 185 {
bogdanm 1:4a23efdf0da9 186 //Decrement count in relevant list
bogdanm 1:4a23efdf0da9 187 m_msgInListsCount[index-1]--;
bogdanm 1:4a23efdf0da9 188 //Increment count in read list
bogdanm 1:4a23efdf0da9 189 m_msgInListsCount[3-1]++;
bogdanm 1:4a23efdf0da9 190 item = m_msgInListsCount[3-1];
bogdanm 1:4a23efdf0da9 191 //Normally item should be equal to 1 as we'd have read any older messages first
bogdanm 1:4a23efdf0da9 192 if( item != 1 )
bogdanm 1:4a23efdf0da9 193 {
bogdanm 1:4a23efdf0da9 194 WARN("Still some older messages pending in the read inbox");
bogdanm 1:4a23efdf0da9 195 }
bogdanm 1:4a23efdf0da9 196 }
bogdanm 1:4a23efdf0da9 197 else
bogdanm 1:4a23efdf0da9 198 {
bogdanm 1:4a23efdf0da9 199 //The item is still the oldest one
bogdanm 1:4a23efdf0da9 200 item = 1;
bogdanm 1:4a23efdf0da9 201 }
bogdanm 1:4a23efdf0da9 202
bogdanm 1:4a23efdf0da9 203 DBG("Deleting message");
bogdanm 1:4a23efdf0da9 204 //Delete message from inbox
bogdanm 1:4a23efdf0da9 205 std::sprintf(cmd, "AT!DSMS=3"/*,%d", item*/); //FIXME why doesn't that work when specifying the index??
bogdanm 1:4a23efdf0da9 206 ret = m_pIf->executeSimple(cmd, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 207 if(ret != OK)
bogdanm 1:4a23efdf0da9 208 {
bogdanm 1:4a23efdf0da9 209 ERR("Could not delete message");
bogdanm 1:4a23efdf0da9 210 }
bogdanm 1:4a23efdf0da9 211 else
bogdanm 1:4a23efdf0da9 212 {
bogdanm 1:4a23efdf0da9 213 //Now we can decrease the number of read messages
bogdanm 1:4a23efdf0da9 214 m_msgInListsCount[3-1]--;
bogdanm 1:4a23efdf0da9 215 }
bogdanm 1:4a23efdf0da9 216
bogdanm 1:4a23efdf0da9 217 if (m_state != SMS_CMD_PROCESSED)
bogdanm 1:4a23efdf0da9 218 {
bogdanm 1:4a23efdf0da9 219 WARN("Message could not be retrieved properly");
bogdanm 1:4a23efdf0da9 220 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 221 return NET_EMPTY;
bogdanm 1:4a23efdf0da9 222 }
bogdanm 1:4a23efdf0da9 223
bogdanm 1:4a23efdf0da9 224 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 225
bogdanm 1:4a23efdf0da9 226 return OK;
bogdanm 1:4a23efdf0da9 227 }
bogdanm 1:4a23efdf0da9 228
bogdanm 1:4a23efdf0da9 229
bogdanm 1:4a23efdf0da9 230 int CDMASMSInterface::getCount(size_t* pCount)
bogdanm 1:4a23efdf0da9 231 {
bogdanm 1:4a23efdf0da9 232 int ret = updateInbox();
bogdanm 1:4a23efdf0da9 233 if(ret)
bogdanm 1:4a23efdf0da9 234 {
bogdanm 1:4a23efdf0da9 235 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 236 }
bogdanm 1:4a23efdf0da9 237
bogdanm 1:4a23efdf0da9 238 *pCount = m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]; //Urgent messages + regular messages + read messages
bogdanm 1:4a23efdf0da9 239
bogdanm 1:4a23efdf0da9 240 return OK;
bogdanm 1:4a23efdf0da9 241 }
bogdanm 1:4a23efdf0da9 242
bogdanm 1:4a23efdf0da9 243
bogdanm 1:4a23efdf0da9 244 /*virtual*/ int CDMASMSInterface::onNewATResponseLine(ATCommandsInterface* pInst, const char* line)
bogdanm 1:4a23efdf0da9 245 {
bogdanm 1:4a23efdf0da9 246 if(m_state == SMS_SEND_CMD_SENT)
bogdanm 1:4a23efdf0da9 247 {
bogdanm 1:4a23efdf0da9 248 DBG("SMS Send: %s", line);
bogdanm 1:4a23efdf0da9 249 }
bogdanm 1:4a23efdf0da9 250 else if(m_state == SMS_GET_TX_STATUS_CMD_SENT)
bogdanm 1:4a23efdf0da9 251 {
bogdanm 1:4a23efdf0da9 252 if(!strcmp(line, "sent"))
bogdanm 1:4a23efdf0da9 253 {
bogdanm 1:4a23efdf0da9 254 m_txState = SMS_SENT;
bogdanm 1:4a23efdf0da9 255 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 256 }
bogdanm 1:4a23efdf0da9 257 else if(!strcmp(line, "failed"))
bogdanm 1:4a23efdf0da9 258 {
bogdanm 1:4a23efdf0da9 259 m_txState = SMS_FAILED;
bogdanm 1:4a23efdf0da9 260 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 261 }
bogdanm 1:4a23efdf0da9 262 else if(!strcmp(line, "none"))
bogdanm 1:4a23efdf0da9 263 {
bogdanm 1:4a23efdf0da9 264 m_txState = SMS_NONE;
bogdanm 1:4a23efdf0da9 265 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 266 }
bogdanm 1:4a23efdf0da9 267 else if(!strcmp(line, "pending"))
bogdanm 1:4a23efdf0da9 268 {
bogdanm 1:4a23efdf0da9 269 m_txState = SMS_PENDING;
bogdanm 1:4a23efdf0da9 270 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 271 }
bogdanm 1:4a23efdf0da9 272 }
bogdanm 1:4a23efdf0da9 273 else if(m_state == SMS_GET_CMD_SENT)
bogdanm 1:4a23efdf0da9 274 {
bogdanm 1:4a23efdf0da9 275 DBG("Header: %s", line);
bogdanm 1:4a23efdf0da9 276
bogdanm 1:4a23efdf0da9 277 if(m_msisdn[0]=='\0')
bogdanm 1:4a23efdf0da9 278 {
bogdanm 1:4a23efdf0da9 279 sscanf(line, "From: %16s", m_msisdn);
bogdanm 1:4a23efdf0da9 280 }
bogdanm 1:4a23efdf0da9 281
bogdanm 1:4a23efdf0da9 282 m_headersToRead--;
bogdanm 1:4a23efdf0da9 283
bogdanm 1:4a23efdf0da9 284 if(m_headersToRead==0) //End of headers
bogdanm 1:4a23efdf0da9 285 {
bogdanm 1:4a23efdf0da9 286 if(m_msisdn[0]!='\0') //Checks that the incoming number has been retrieved
bogdanm 1:4a23efdf0da9 287 {
bogdanm 1:4a23efdf0da9 288 m_state = SMS_GET_HDR_RECEIVED;
bogdanm 1:4a23efdf0da9 289 }
bogdanm 1:4a23efdf0da9 290 else
bogdanm 1:4a23efdf0da9 291 {
bogdanm 1:4a23efdf0da9 292 m_state = SMS_IDLE; //Error, signal it
bogdanm 1:4a23efdf0da9 293 }
bogdanm 1:4a23efdf0da9 294 }
bogdanm 1:4a23efdf0da9 295 }
bogdanm 1:4a23efdf0da9 296 else if(m_state == SMS_GET_HDR_RECEIVED)
bogdanm 1:4a23efdf0da9 297 {
bogdanm 1:4a23efdf0da9 298 DBG("Message: %s", line);
bogdanm 1:4a23efdf0da9 299 size_t cpyLen = MIN( std::strlen(line), m_maxMsgLength - 1 );
bogdanm 1:4a23efdf0da9 300 std::memcpy( m_msg, line, cpyLen );
bogdanm 1:4a23efdf0da9 301 m_msg[cpyLen] = '\0';
bogdanm 1:4a23efdf0da9 302 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 303 }
bogdanm 1:4a23efdf0da9 304 else if(m_state == SMS_GET_COUNT_CMD_SENT)
bogdanm 1:4a23efdf0da9 305 {
bogdanm 1:4a23efdf0da9 306 DBG("Inbox: %s", line);
bogdanm 1:4a23efdf0da9 307 int index;
bogdanm 1:4a23efdf0da9 308 size_t count;
bogdanm 1:4a23efdf0da9 309 if((strlen(line) > 16) && sscanf(line + 16, "{Index = %d}: %d", &index, &count) == 2)
bogdanm 1:4a23efdf0da9 310 {
bogdanm 1:4a23efdf0da9 311 if((index > 0) && (index <=4))
bogdanm 1:4a23efdf0da9 312 {
bogdanm 1:4a23efdf0da9 313 m_msgInListsCount[index-1] = count;
bogdanm 1:4a23efdf0da9 314 }
bogdanm 1:4a23efdf0da9 315 if(index == 4)
bogdanm 1:4a23efdf0da9 316 {
bogdanm 1:4a23efdf0da9 317 m_state = SMS_CMD_PROCESSED;
bogdanm 1:4a23efdf0da9 318 }
bogdanm 1:4a23efdf0da9 319 }
bogdanm 1:4a23efdf0da9 320 }
bogdanm 1:4a23efdf0da9 321 return OK;
bogdanm 1:4a23efdf0da9 322 }
bogdanm 1:4a23efdf0da9 323
bogdanm 1:4a23efdf0da9 324 /*virtual*/ int CDMASMSInterface::onNewEntryPrompt(ATCommandsInterface* pInst)
bogdanm 1:4a23efdf0da9 325 {
bogdanm 1:4a23efdf0da9 326 return OK;
bogdanm 1:4a23efdf0da9 327 }
bogdanm 1:4a23efdf0da9 328
bogdanm 1:4a23efdf0da9 329
bogdanm 1:4a23efdf0da9 330 int CDMASMSInterface::updateInbox()
bogdanm 1:4a23efdf0da9 331 {
bogdanm 1:4a23efdf0da9 332 //Get number of unread/read messages
bogdanm 1:4a23efdf0da9 333
bogdanm 1:4a23efdf0da9 334 DBG("Updating inbox");
bogdanm 1:4a23efdf0da9 335 m_msgInListsCount[0] = m_msgInListsCount[1] = m_msgInListsCount[2] = m_msgInListsCount[3] = 0; //Reset counts
bogdanm 1:4a23efdf0da9 336
bogdanm 1:4a23efdf0da9 337 //Get counts
bogdanm 1:4a23efdf0da9 338 m_state = SMS_GET_COUNT_CMD_SENT;
bogdanm 1:4a23efdf0da9 339 int ret = m_pIf->execute("AT!CNTSMS", this, NULL, DEFAULT_TIMEOUT);
bogdanm 1:4a23efdf0da9 340 if( ret != OK )
bogdanm 1:4a23efdf0da9 341 {
bogdanm 1:4a23efdf0da9 342 WARN("AT!CNTSMS returned %d", ret);
bogdanm 1:4a23efdf0da9 343 m_msgInListsCount[0] = m_msgInListsCount[1] = m_msgInListsCount[2] = m_msgInListsCount[3] = 0; //Invalidate counts
bogdanm 1:4a23efdf0da9 344 m_state = SMS_IDLE;
bogdanm 1:4a23efdf0da9 345 return NET_PROTOCOL;
bogdanm 1:4a23efdf0da9 346 }
bogdanm 1:4a23efdf0da9 347
bogdanm 1:4a23efdf0da9 348 return OK;
bogdanm 1:4a23efdf0da9 349 }
bogdanm 1:4a23efdf0da9 350