source: rtos_arduino/trunk/arduino_lib/libraries/GSM/src/GSM3ShieldV1ModemCore.cpp@ 136

Last change on this file since 136 was 136, checked in by ertl-honda, 8 years ago

ライブラリとOS及びベーシックなサンプルの追加.

File size: 3.7 KB
Line 
1#include <GSM3ShieldV1ModemCore.h>
2#include <Arduino.h>
3
4GSM3ShieldV1ModemCore theGSM3ShieldV1ModemCore;
5
6char* __ok__="OK";
7
8GSM3ShieldV1ModemCore::GSM3ShieldV1ModemCore() : gss()
9{
10 gss.registerMgr(this);
11 _dataInBufferFrom=0;
12 _dataInBufferTo=0;
13 commandError=1;
14 commandCounter=0;
15 ongoingCommand=NONE;
16 takeMilliseconds();
17
18 for(int i=0;i<UMPROVIDERS;i++)
19 UMProvider[i]=0;
20}
21
22void GSM3ShieldV1ModemCore::registerUMProvider(GSM3ShieldV1BaseProvider* provider)
23{
24 for(int i=0;i<UMPROVIDERS;i++)
25 {
26 if(UMProvider[i]==0)
27 {
28 UMProvider[i]=provider;
29 break;
30 }
31
32 }
33
34}
35
36void GSM3ShieldV1ModemCore::unRegisterUMProvider(GSM3ShieldV1BaseProvider* provider)
37{
38 for(int i=0;i<UMPROVIDERS;i++)
39 {
40 if(UMProvider[i]==provider)
41 {
42 UMProvider[i]=0;
43 break;
44 }
45 }
46}
47
48
49//Response parse.
50bool GSM3ShieldV1ModemCore::genericParse_rsp(bool& rsp, char* string, char* string2)
51{
52 if((string==0) && (string2==0))
53 string=__ok__;
54
55 rsp=theBuffer().locate(string);
56
57 if((!rsp)&&(string2!=0))
58 rsp=theBuffer().locate(string2);
59
60 return true;
61}
62
63void GSM3ShieldV1ModemCore::closeCommand(int code)
64{
65 // If we were configuring the modem,
66 // and there's been an error
67 // we don't know exactly where we are
68 if((code!=1)&&(theGSM3ShieldV1ModemCore.getOngoingCommand()==MODEMCONFIG))
69 theGSM3ShieldV1ModemCore.setStatus(ERROR);
70
71 setCommandError(code);
72 ongoingCommand=NONE;
73 activeProvider=0;
74 commandCounter=1;
75}
76
77//Generic command (stored in flash).
78void GSM3ShieldV1ModemCore::genericCommand_rq(PGM_P str, bool addCR)
79{
80 theBuffer().flush();
81 writePGM(str, addCR);
82}
83
84//Generic command (const string).
85void GSM3ShieldV1ModemCore::genericCommand_rqc(const char* str, bool addCR)
86{
87 theBuffer().flush();
88 print(str);
89 if(addCR)
90 print("\r");
91}
92
93// If we are not debugging, lets manage data in interrupt time
94// but if we are not, just take note.
95void GSM3ShieldV1ModemCore::manageMsg(byte from, byte to)
96{
97 if(_debug)
98 {
99 _dataInBufferFrom=from;
100 _dataInBufferTo=to;
101 }
102 else
103 {
104 manageMsgNow(from, to);
105 }
106}
107
108void GSM3ShieldV1ModemCore::manageReceivedData()
109{
110 if(_debug)
111 {
112/* Serial.print(theBuffer().getHead());
113 Serial.print(" ");
114 Serial.println(theBuffer().getTail());*/
115 if(_dataInBufferFrom != _dataInBufferTo)
116 {
117 theBuffer().debugBuffer();
118 manageMsgNow(_dataInBufferFrom, _dataInBufferTo);
119 _dataInBufferFrom=0;
120 _dataInBufferTo=0;
121 }
122 }
123 else
124 {
125 // Just debugging the non debugging
126// Serial.println();
127// Serial.print("Com:");
128// Serial.print(ongoingCommand);
129// Serial.print(" Step:");
130// Serial.print(commandCounter);
131 }
132}
133
134//Select between URC or response.
135void GSM3ShieldV1ModemCore::manageMsgNow(byte from, byte to)
136{
137 bool recognized=false;
138
139 for(int i=0;(i<UMPROVIDERS)&&(!recognized);i++)
140 {
141 if(UMProvider[i])
142 recognized=UMProvider[i]->recognizeUnsolicitedEvent(from);
143 }
144 if((!recognized)&&(activeProvider))
145 activeProvider->manageResponse(from, to);
146}
147
148
149void GSM3ShieldV1ModemCore::openCommand(GSM3ShieldV1BaseProvider* provider, GSM3_commandType_e c)
150{
151 activeProvider=provider;
152 commandError=0;
153 commandCounter=1;
154 ongoingCommand=c;
155 _dataInBufferFrom=0;
156 _dataInBufferTo=0;
157
158};
159
160size_t GSM3ShieldV1ModemCore::writePGM(PGM_P str, bool CR)
161{
162 int i=0;
163 char c;
164
165 do
166 {
167 c=pgm_read_byte_near(str + i);
168 if(c!=0)
169 write(c);
170 i++;
171 } while (c!=0);
172 if(CR)
173 print("\r");
174
175 return 1;
176}
177
178size_t GSM3ShieldV1ModemCore::write(uint8_t c)
179{
180 if(_debug)
181 GSM3CircularBuffer::printCharDebug(c);
182 return gss.write(c);
183}
184
185unsigned long GSM3ShieldV1ModemCore::takeMilliseconds()
186{
187 unsigned long now=millis();
188 unsigned long delta;
189 delta=now-milliseconds;
190 milliseconds=now;
191 return delta;
192}
193
194void GSM3ShieldV1ModemCore::delayInsideInterrupt(unsigned long milliseconds)
195{
196 for (unsigned long k=0;k<milliseconds;k++)
197 theGSM3ShieldV1ModemCore.gss.tunedDelay(1000);
198}
Note: See TracBrowser for help on using the repository browser.