/[projects]/smsdaemon/ModemTransceiver.cpp
ViewVC logotype

Diff of /smsdaemon/ModemTransceiver.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 75 by torben, Fri Jun 13 10:10:06 2008 UTC revision 144 by torben, Sun Dec 7 16:27:34 2008 UTC
# Line 5  Line 5 
5  #include <string>  #include <string>
6  #include <stdexcept>  #include <stdexcept>
7    
 #include <sys/time.h>  
8  #include <time.h>  #include <time.h>
9    
10    
11  #include "SerialPort.h"  #include "serialport/SerialPort.h"
12    
13  #include "GsmModem.h"  #include "GsmModem.h"
14    
# Line 17  Line 16 
16  #include "common.h"  #include "common.h"
17    
18  #include "SmsPdu.h"  #include "SmsPdu.h"
19    #include "SmsHelper.h"
20    
21  using namespace std;  using namespace std;
22    
# Line 110  vector<SMS> GsmModem::ReadSms(bool readA Line 110  vector<SMS> GsmModem::ReadSms(bool readA
110    
111                                    
112                  string sms_entry = result.substr(0,endpos);                  string sms_entry = result.substr(0,endpos);
113                  retval.push_back( SMS::FromPduString(sms_entry) );;                  retval.push_back( SmsHelper::FromPduString(sms_entry) );;
114    
115                  if (endpos == string::npos)                  if (endpos == string::npos)
116                          break;                          break;
# Line 149  void GsmModem::SendSms(string to, string Line 149  void GsmModem::SendSms(string to, string
149          if (to.at(0) == '+')          if (to.at(0) == '+')
150                  to.erase(0,0);                  to.erase(0,0);
151    
152          vector<PduInfo> pdu_vec = SmsPdu::CreateSmsPdu(to, message, allowMultipart);          vector<PduInfo> pdu_vec = SmsPdu::CreateSmsPdu(to, Util::str_latin2gsm(message), allowMultipart);
153    
154          for (unsigned i=0; i<pdu_vec.size(); ++i)          for (unsigned i=0; i<pdu_vec.size(); ++i)
155          {          {
# Line 157  void GsmModem::SendSms(string to, string Line 157  void GsmModem::SendSms(string to, string
157    
158                  SendSmsPdu(pdu.pdu, pdu.len);                  SendSmsPdu(pdu.pdu, pdu.len);
159          }          }
160            Common::instance()->logMessage( "All PDU's send");
161    
162  }  }
163    
# Line 173  int  GsmModem::DeleteAllSms() Line 174  int  GsmModem::DeleteAllSms()
174    
175          for (unsigned int i= 0; i<sms.size(); ++i)          for (unsigned int i= 0; i<sms.size(); ++i)
176          {          {
177                  DeleteSms( sms[i].sms_index);                  DeleteSms( sms[i].GetIndex() );
178          }          }
179          return sms.size();          return sms.size();
180  }  }
181    
182    
183    
184    void GsmModem::WaitForSimcard()
185    {
186            int start = time(0);
187            string result;
188    
189    
190            while (result != "^SSIM READY")
191            {
192                    result += GetResponse();
193                    result = Util::str_trim(result);
194    
195                    if ( (time(0) - start) > 10)
196                            throw std::runtime_error("Sim card timed out:");
197                    Util::Sleep(100);
198            }
199    
200    }
201    
202    void GsmModem::HandlePincode()
203    {
204            string result = Command("AT+CPIN?");
205            result = Util::str_trim(result);
206            result.erase(result.length() -2, 2); //remove trailing ok
207            result = Util::str_trim(result);
208            if (result != "+CPIN: READY")
209            {
210                    if (result == "+CPIN: SIM PIN")
211                    {
212                            Command("AT^SSET=1");
213                            result = Command("AT+CPIN=0067");
214                            if ( result.substr(result.length()-4, 4) != "OK\r\n")
215                                    throw std::runtime_error(string("Illegal pincode: ") + result);
216                            
217                            WaitForSimcard();
218                    }
219                    else
220                    {
221                            throw std::runtime_error(string("AT+CPIN? returned unhandled code: ") + result);
222                    }
223    
224            }
225    }
226    
227  void GsmModem::Init()  void GsmModem::Init()
228  {  {
229          Command( "AT" );          Command( "AT" );
# Line 194  void GsmModem::Init() Line 238  void GsmModem::Init()
238    
239          Command ("AT^SM20=0,0" ); //No SM20 compability          Command ("AT^SM20=0,0" ); //No SM20 compability
240    
241          //Set RealTimeClock ??          //Command("AT+CGATT=1"); //GPRS Attach
242            
243          //Enter pin code ??          //Command("AT+CGSMS=2"); //SMS over GPRS preferred
244    
245            HandlePincode();
246  }  }
247    
248    
# Line 218  void DebugGsmModem::SendSms(std::string Line 264  void DebugGsmModem::SendSms(std::string
264          }          }
265  }  }
266    
267    std::vector<SMS> DebugGsmModem::ReadSms(bool readAll)
268    {
269            vector<SMS> result;
270            return result;
271    }

Legend:
Removed from v.75  
changed lines
  Added in v.144

  ViewVC Help
Powered by ViewVC 1.1.20