Integrating the ublox LISA C200 modem

Fork of SprintUSBModemHTTPClientTest by Donatien Garnier

Committer:
sam_grove
Date:
Thu Sep 26 00:44:20 2013 -0500
Revision:
5:3f93dd1d4cb3
Exported program and replaced contents of the repo with the source
to build and debug using keil mdk. Libs NOT upto date are lwip, lwip-sys
and socket. these have newer versions under mbed_official but were starting
from a know working point

Who changed what in which revision?

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