1 #include "BayTCPSim900.h" 3 void RTC_SIM900::adjust(
const DateTime& dt) {
9 unsigned long diff=(millis()-last_millis)/1000L;
18 uint8_t BayGPRSInterface::changeIPR(
long baud) {
20 long t_baud[] = { baud, 9600, 38400, 57600 };
21 for (uint8_t i = 0; i < 4; i++) {
29 if (!wait_forOK(200)) {
48 if(! wait_forOK(200)){
52 printlnP(
"AT+CSCLK=2");
56 while(wait_forPGM(PSTR(
"+CPIN: "),5000,7,_base64buffer)){
59 printlnP(
"AT+CFUN=0");
62 printlnP(
"AT+CFUN=1");
72 if(_base64buffer[5]==
'U')
return 3;
73 if(_base64buffer[5]==
'I'){
79 if(wait_forOK(30000)) {
82 wait_for(
"SMS Ready",(unlock_only?5000:60000));
85 if(unlock_only)
return 0;
88 if(isRegistered())
break;
93 if(isAttached())
break;
112 if(count>1)
return 1;
118 Serial.println(
"softSwitch");
120 pinMode(_powerPin, OUTPUT);
121 digitalWrite(_powerPin,LOW);
123 digitalWrite(_powerPin,HIGH);
125 digitalWrite(_powerPin,LOW);
131 if(!_resetPin)
return;
133 Serial.println(
"softReset");
135 pinMode(_resetPin, OUTPUT);
136 digitalWrite(_resetPin,LOW);
138 digitalWrite(_resetPin,HIGH);
140 digitalWrite(_resetPin,LOW);
142 pinMode(_resetPin, INPUT);
148 printP(
"AT+CCLK=\"");
156 return wait_forOK(1000);
165 wait_forPGM(PSTR(
"+CSQ: "),500,2,_base64buffer);
166 return (uint8_t)114 -(2*(uint8_t)atoi(_base64buffer));
172 printlnP(
"AT+CREG?");
173 wait_forPGM(PSTR(
"+CREG: "),2000,3,_base64buffer);
174 if(_base64buffer[2]==
'1'|| _base64buffer[2]==
'5')
return 1;
181 printlnP(
"AT+CGATT?");
182 if(! wait_for(
"+CGATT: 1",2000))
return 1;
189 uint8_t m,d,hh,mm,ss;
192 printlnP(
"AT+CCLK?");
193 if(! wait_forPGM(PSTR(
"+CCLK: \""),3000,20,_base64buffer)){
196 y = atoi(_base64buffer+0) + 2000;
197 m = atoi(_base64buffer+3);
198 d = atoi(_base64buffer+6);
199 hh = atoi(_base64buffer+9);
200 mm = atoi(_base64buffer+12);
201 ss = atoi(_base64buffer+15);
203 dt=
DateTime(dt.get()-(3600L*atoi(_base64buffer+17)));
223 void BayGPRSInterface::flushMTU(
void){
224 write((uint8_t) 0x1a);
226 printlnP(
"AT+CIPSEND");
227 wait_for(
"> ",20000);
230 void BayGPRSInterface::finishTransmissionMode(
void){
231 write((uint8_t) 0x1a);
236 if(_tx_error_count>20) softSwitch();
239 if(res=init())
return res+1;
241 printlnP(
"AT+CIFSR");
242 if(wait_for(
"ERROR",2000)){
244 printP(
"AT+CIPSTART=\"TCP\",\"");
248 if(wait_for(
"CONNECT",10000))
return 1;
250 printlnP(
"AT+CIPSEND?");
251 if(! wait_forPGM(PSTR(
": "),200,4,_base64buffer)){
253 _mtu=atoi(_base64buffer);
254 _mtu-=(BayTCP_BUFFER+17);
258 printlnP(
"AT+CIPSEND");
259 if(wait_for(
"> ",10000))
return 1;
267 printlnP(
"AT+CIPMUX=0");
270 printlnP(
"AT+CIPCLOSE");
272 printlnP(
"AT+CIPSHUT");
276 printP(
"AT+CSTT=\"");
283 if(wait_forOK(400))
goto setup_start;
285 printlnP(
"AT+CIICR");
286 if(wait_forOK(10000))
goto setup_start;
294 printlnP(
"AT+CIPCLOSE");
303 printlnP(
"AT+CMGF=1");
304 if(wait_forOK(2000))
return 2;
305 printP(
"AT+CMGS=\"");
308 if(wait_for(
"> ",2000))
return 2;
311 if(wait_for(
"+CMGS: ",2000))
return 2;
325 return init(unlock_only);
335 int BayGPRS::available(
void){
return _serial->available();}
336 int BayGPRS::read(
void){
338 int c=_serial->read();
339 if(c!=-1) Serial.write(c);
342 return _serial->read();
346 void BayGPRS::i_begin(
long b){ _serial->begin(b);}
347 void BayGPRS::i_end(
void){ _serial->end();}
348 int BayGPRS::i_available(
void){
return _serial->available();}
349 size_t BayGPRS::write(uint8_t b){
353 return _serial->write(b);
355 int BayGPRS::peek(
void){
return _serial->peek();};
356 void BayGPRS::flush(
void){_serial->flush();};
364 uint8_t BayGPRSsoftserial::begin(
long baud,uint8_t unlock_only){
368 int BayGPRSsoftserial::available(
void){
return SoftwareSerial::available();}
369 int BayGPRSsoftserial::read(
void){
371 int c=SoftwareSerial::read();
372 if(c!=-1) Serial.write(c);
375 return SoftwareSerial::read();
378 void BayGPRSsoftserial::i_begin(
long b){ SoftwareSerial::begin(b);}
379 void BayGPRSsoftserial::i_end(
void){ SoftwareSerial::end();}
380 int BayGPRSsoftserial::i_available(
void){
return SoftwareSerial::available();}
381 size_t BayGPRSsoftserial::write(uint8_t b){
385 return SoftwareSerial::write(b);
387 int BayGPRSsoftserial::peek(
void){
return SoftwareSerial::peek();};
388 void BayGPRSsoftserial::flush(
void){SoftwareSerial::flush();};
uint8_t sendSMS(const String &phone, const String &sms)
uint8_t init(uint8_t unlock_only=0)
uint8_t setClock(const char *time)
BayGPRS(HardwareSerial &serial, uint8_t powerPin=9, uint8_t resetPin=0)
uint8_t begin(long baud, uint8_t unlock_only=0)
uint8_t isRegistered(void)
BayGPRSsoftserial(uint8_t rxPin, uint8_t txPin, uint8_t powerPin=6, uint8_t resetPin=0)