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

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

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

File size: 5.3 KB
Line 
1#include <GSM3ShieldV1ServerProvider.h>
2#include <GSM3ShieldV1ModemCore.h>
3#include <Arduino.h>
4
5GSM3ShieldV1ServerProvider::GSM3ShieldV1ServerProvider()
6{
7 theGSM3MobileServerProvider=this;
8};
9
10//Response management.
11void GSM3ShieldV1ServerProvider::manageResponse(byte from, byte to)
12{
13 switch(theGSM3ShieldV1ModemCore.getOngoingCommand())
14 {
15 case NONE:
16 theGSM3ShieldV1ModemCore.gss.cb.deleteToTheEnd(from);
17 break;
18 case CONNECTSERVER:
19 connectTCPServerContinue();
20 break;
21 /*case GETIP:
22 getIPContinue();
23 break;*/
24 }
25}
26
27//Connect Server main function.
28int GSM3ShieldV1ServerProvider::connectTCPServer(int port)
29{
30 // We forget about LocalIP as it has no real use, the modem does whatever it likes
31 theGSM3ShieldV1ModemCore.setPort(port);
32 theGSM3ShieldV1ModemCore.openCommand(this,CONNECTSERVER);
33 // From this moment on we wait for a call
34 connectTCPServerContinue();
35 return theGSM3ShieldV1ModemCore.getCommandError();
36}
37
38//Connect Server continue function.
39void GSM3ShieldV1ServerProvider::connectTCPServerContinue()
40{
41
42 bool resp;
43 // 1: Read Local IP "AT+QILOCIP"
44 // 2: Waiting for IP and Set local port "AT+QILPORT"
45 // 3: Waiting for QILPOR OK andConfigure as server "AT+QISERVER"
46 // 4: Wait for SERVER OK
47
48 switch (theGSM3ShieldV1ModemCore.getCommandCounter()) {
49 case 1:
50 //"AT+QILOCIP."
51 theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QILOCIP"));
52 theGSM3ShieldV1ModemCore.setCommandCounter(2);
53 break;
54 case 2:
55 //Not IP storing but the command is necessary.
56 //if(parseQILOCIP_rsp(local_IP, local_IP_Length, resp))
57 // This awful trick saves some RAM bytes
58 char aux[3];
59 aux[0]='\r';aux[1]='\n';aux[2]=0;
60 if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp, aux))
61 {
62 //Response received
63 if(resp)
64 {
65 // Great. Go for the next step
66 // AT+QILPORT
67 theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QILPORT=\"TCP\","),false);
68 theGSM3ShieldV1ModemCore.print( theGSM3ShieldV1ModemCore.getPort());
69 theGSM3ShieldV1ModemCore.print('\r');
70 theGSM3ShieldV1ModemCore.setCommandCounter(3);
71 }
72 else theGSM3ShieldV1ModemCore.closeCommand(3);
73 }
74 break;
75 case 3:
76 if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
77 {
78 // Response received
79 if(resp)
80 {
81 // OK received
82 // Great. Go for the next step
83 // AT+QISERVER
84 theGSM3ShieldV1ModemCore.genericCommand_rq(PSTR("AT+QISERVER"),true);
85 theGSM3ShieldV1ModemCore.setCommandCounter(4);
86 }
87 else theGSM3ShieldV1ModemCore.closeCommand(3);
88 }
89 break;
90 case 4:
91 if(theGSM3ShieldV1ModemCore.genericParse_rsp(resp))
92 {
93 // Response received
94 // OK received, kathapoon, chessespoon
95 if (resp)
96 {
97 theGSM3ShieldV1ModemCore.registerUMProvider(this);
98 theGSM3ShieldV1ModemCore.closeCommand(1);
99 }
100 else
101 theGSM3ShieldV1ModemCore.closeCommand(3);
102 }
103 break;
104 }
105}
106
107//QILOCIP parse.
108/*bool GSM3ShieldV1ServerProvider::parseQILOCIP_rsp(char* LocalIP, int LocalIPlength, bool& rsp)
109{
110 if (!(theGSM3ShieldV1ModemCore.theBuffer().extractSubstring("\r\n","\r\n", LocalIP, LocalIPlength)))
111 rsp = false;
112 else
113 rsp = true;
114 return true;
115}
116
117//Get IP main function.
118int GSM3ShieldV1ServerProvider::getIP(char* LocalIP, int LocalIPlength)
119{
120 theGSM3ShieldV1ModemCore.setPhoneNumber(LocalIP);
121 theGSM3ShieldV1ModemCore.setPort(LocalIPlength);
122 theGSM3ShieldV1ModemCore.openCommand(this,GETIP);
123 getIPContinue();
124 return theGSM3ShieldV1ModemCore.getCommandError();
125}
126
127void GSM3ShieldV1ServerProvider::getIPContinue()
128{
129
130 bool resp;
131 // 1: Read Local IP "AT+QILOCIP"
132 // 2: Waiting for IP.
133
134 switch (theGSM3ShieldV1ModemCore.getCommandCounter()) {
135 case 1:
136 //AT+QILOCIP
137 theGSM3ShieldV1ModemCore.genericCommand_rq(_command_MonoQILOCIP);
138 theGSM3ShieldV1ModemCore.setCommandCounter(2);
139 break;
140 case 2:
141 if(parseQILOCIP_rsp(theGSM3ShieldV1ModemCore.getPhoneNumber(), theGSM3ShieldV1ModemCore.getPort(), resp))
142 {
143 if (resp)
144 theGSM3ShieldV1ModemCore.closeCommand(1);
145 else
146 theGSM3ShieldV1ModemCore.closeCommand(3);
147 }
148 theGSM3ShieldV1ModemCore.theBuffer().flush();
149 theGSM3ShieldV1ModemCore.gss.spaceAvailable();
150 break;
151 }
152}*/
153
154bool GSM3ShieldV1ServerProvider::getSocketAsServerModemStatus(int s)
155{
156 if(theGSM3ShieldV1ModemCore.getStatus()==TRANSPARENT_CONNECTED)
157 return true;
158 else
159 return false;
160}
161
162
163//URC recognize.
164bool GSM3ShieldV1ServerProvider::recognizeUnsolicitedEvent(byte oldTail)
165{
166
167 int nlength;
168 char auxLocate [15];
169
170 //REMOTE SOCKET CLOSED.
171 prepareAuxLocate(PSTR("CLOSED\r\n"), auxLocate);
172 if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate))
173 {
174 //To detect remote socket closed for example inside socket data.
175 theGSM3ShieldV1ModemCore.setStatus(GPRS_READY);
176 }
177
178
179 //REMOTE SOCKET ACCEPTED.
180 prepareAuxLocate(PSTR("CONNECT\r\n"), auxLocate);
181 if(theGSM3ShieldV1ModemCore.gss.cb.locate(auxLocate))
182 {
183 //To detect remote socket closed for example inside socket data.
184 theGSM3ShieldV1ModemCore.theBuffer().chopUntil(auxLocate, true);
185 theGSM3ShieldV1ModemCore.gss.spaceAvailable();
186 theGSM3ShieldV1ModemCore.setStatus(TRANSPARENT_CONNECTED);
187 return true;
188 }
189
190 return false;
191}
192
193bool GSM3ShieldV1ServerProvider::getStatusSocketAsServer(uint8_t socket)
194{
195 return(theGSM3ShieldV1ModemCore.getStatus()==TRANSPARENT_CONNECTED);
196};
197
198void GSM3ShieldV1ServerProvider::releaseSocket(int socket)
199{
200}
201
202int GSM3ShieldV1ServerProvider::getNewOccupiedSocketAsServer()
203{
204 return 0;
205}
Note: See TracBrowser for help on using the repository browser.