Skip to content

Commit 19b5704

Browse files
authored
Merge pull request #4 from blemasle/bugfixes-httpstack-601
Fix the bearer configuration and GPRS initialization sequence
2 parents 2e7f09a + 3541703 commit 19b5704

File tree

4 files changed

+31
-5
lines changed

4 files changed

+31
-5
lines changed

examples/Tester/Tester.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,9 @@ void sim() {
272272
Log.notice(S_F("SIM status : \"%s\"" NL), buffer);
273273
}
274274
else if(BUFFER_IS("UNLOCK")) {
275-
size_t length = readNext();
275+
readNext();
276+
277+
size_t length = strlen(buffer);
276278
if(length != 4) {
277279
Log.error(S_F("4 digit pin code required" NL));
278280
return;

library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=SIM808
2-
version=1.0.0
2+
version=1.0.1
33
author=Bertrand Lemasle
44
maintainer=Bertrand Lemasle
55
sentence=Straightforward Arduino library for the SIM808

src/SIM808.Gprs.cpp

+23-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
#include "SIM808.h"
22

3+
AT_COMMAND(SET_BEARER_SETTING_PARAMETER, "+SAPBR=3,1,\"%S\",\"%s\"");
34
AT_COMMAND(SET_BEARER_SETTING, "+SAPBR=%d,%d");
4-
AT_COMMAND(GPRS_START_TASK, "+CSTT=\"%s\",\"%s\",\"%s\"");
55
AT_COMMAND(GPRS_ATTACH, "+CGATT=%d");
66

7+
AT_COMMAND_PARAMETER(BEARER, CONTYPE);
8+
AT_COMMAND_PARAMETER(BEARER, APN);
9+
AT_COMMAND_PARAMETER(BEARER, USER);
10+
AT_COMMAND_PARAMETER(BEARER, PWD);
11+
12+
TOKEN_TEXT(GPRS, "GPRS");
713
TOKEN_TEXT(CGATT, "+CGATT");
814
TOKEN_TEXT(CIPSHUT, "+CIPSHUT");
915
TOKEN_TEXT(SHUT_OK, "SHUT OK");
1016
TOKEN_TEXT(CGREG, "+CGREG");
1117

18+
bool SIM808::setBearerSetting(ATConstStr parameter, const char* value)
19+
{
20+
sendFormatAT(TO_F(AT_COMMAND_SET_BEARER_SETTING_PARAMETER), parameter, value);
21+
return waitResponse() == 0;
22+
}
23+
1224
bool SIM808::getGprsPowerState(bool *state)
1325
{
1426
uint8_t result;
@@ -26,19 +38,27 @@ bool SIM808::getGprsPowerState(bool *state)
2638

2739
bool SIM808::enableGprs(const char *apn, const char* user = NULL, const char *password = NULL)
2840
{
41+
char gprsToken[5];
42+
strcpy_P(gprsToken, TOKEN_GPRS);
43+
2944
return
3045
(sendAT(TO_F(TOKEN_CIPSHUT)), waitResponse(65000L, TO_F(TOKEN_SHUT_OK)) == 0) && //AT+CIPSHUT
3146
(sendFormatAT(TO_F(AT_COMMAND_GPRS_ATTACH), 1), waitResponse(10000L) == 0) && //AT+CGATT=1
3247

33-
(sendFormatAT(TO_F(AT_COMMAND_GPRS_START_TASK), apn, user, password), waitResponse() == 0) && //AT+CSTT="apn","user","password"
48+
(setBearerSetting(TO_F(AT_COMMAND_PARAMETER_BEARER_CONTYPE), gprsToken)) && //AT+SAPBR=3,1,"CONTYPE","GPRS"
49+
50+
(setBearerSetting(TO_F(AT_COMMAND_PARAMETER_BEARER_APN), apn)) && //AT+SAPBR=3,1,"APN","xxx"
51+
(user == NULL || setBearerSetting(TO_F(AT_COMMAND_PARAMETER_BEARER_USER), user)) && //AT+SAPBR=3,1,"USER","xxx"
52+
(password == NULL || setBearerSetting(TO_F(AT_COMMAND_PARAMETER_BEARER_PWD), password)) && //AT+SAPBR=3,1,"PWD","xxx"
53+
3454
(sendFormatAT(TO_F(AT_COMMAND_SET_BEARER_SETTING), 1, 1), waitResponse(65000L) == 0); //AT+SAPBR=1,1
3555
}
3656

3757
bool SIM808::disableGprs()
3858
{
3959
return
40-
(sendAT(TO_F(TOKEN_CIPSHUT)), waitResponse(65000L, TO_F(TOKEN_SHUT_OK)) == 0) && //AT+CIPSHUT
4160
(sendFormatAT(TO_F(AT_COMMAND_SET_BEARER_SETTING), 0, 1), waitResponse(65000L) != -1) && //AT+SAPBR=0,1
61+
(sendAT(TO_F(TOKEN_CIPSHUT)), waitResponse(65000L, TO_F(TOKEN_SHUT_OK)) == 0) && //AT+CIPSHUT
4262
(sendFormatAT(TO_F(AT_COMMAND_GPRS_ATTACH), 0), waitResponse(10000L) == 0); //AT+CGATT=0
4363
}
4464

src/SIM808.h

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ class SIM808 : public SIMComAT
4646
* Terminate the HTTP service.
4747
*/
4848
bool httpEnd();
49+
/**
50+
* Set one of the bearer settings for application based on IP.
51+
*/
52+
bool setBearerSetting(ATConstStr parameter, const char* value);
4953

5054
public:
5155
SIM808(uint8_t resetPin, uint8_t pwrKeyPin, uint8_t statusPin);

0 commit comments

Comments
 (0)