Bonjour à tous,
Je refais ma librairie au propore.
J'ai donc ma librairie principale sim968c.h/sim968c.cpp avec des fonctions liées au GPS.
J'aimerais donc séparés ces fonctions et les mettres dans un autre fichier gps.h/gps.cpp
Dans ma librarie sim968.h et sim968c.cpp, j'ai des fonctions qui doivent être utilisées dans la gps.cpp, comme par exemple
(extrait du fichier sim968c.h)
void SimpleWriteln(char *comm);
byte WaitResp(uint16_t start_comm_tmout, uint16_t max_interchar_tmout,
char const *expected_resp_string, bool debug);
La librairie sim968c.h fonctionne.
Dans ma deuxième librairie j'ai ajouté ces lignes de code.
A savoir que la variable
str_aux1
est déclarée dans sim968c.h et elle est public
char str_aux1[60];
#ifndef Gps_h
#define Gps_h
#include "Wi968c.h"
//#include "SoftwareSerial.h"
#include "avr/pgmspace.h"
//#include "Arduino.h"
class GPS
{
private:
public:
bool get_cellid(char * fixs);
};
#endif
et gps.cpp
#include "Gps.h"
/*
#include "Wi968c.h"
#include "SoftwareSerial.h"
#include "avr/pgmspace.h"
#include "Arduino.h"
*/
const char AT[] PROGMEM = "AT";
const char SMS_STORAGE[] PROGMEM = "AT+CPMS"; //1
const char DIR_STORAGE[] PROGMEM = "AT+CPBS"; //2
const char GET_IMEI[] PROGMEM = "AT+GSN"; //3
const char GET_ICCID[] PROGMEM = "AT+CCID"; //4
const char GET_OPERATOR[] PROGMEM = "AT+COPS"; //5
const char GET_BATT[] PROGMEM = "AT+CBC"; //6
const char AT_CPIN[] PROGMEM = "AT+CPIN"; //7
const char AT_CSQ[] PROGMEM = "AT+CSQ"; //8
const char AT_CREG[] PROGMEM = "AT+CREG"; //9
const char AT_CGATT[] PROGMEM = "AT+CGATT"; //10
const char AT_IPR[] PROGMEM = "AT+IPR"; //11
const char DIR_CPBR[] PROGMEM = "AT+CPBR"; //12
const char DIR_CPBW[] PROGMEM = "AT+CPBW"; //13
const char SMS_CPBW[] PROGMEM = "AT+CMGL"; //14
const char SMS_CMGD[] PROGMEM = "AT+CMGD"; //15
const char SMS_CMGF[] PROGMEM = "AT+CMGF"; //16
const char SMS_CMGS[] PROGMEM = "AT+CMGS"; //17
const char SMS_CMGR[] PROGMEM = "AT+CMGR"; //18
const char AT_CLTS[] PROGMEM = "AT+CLTS"; //19
const char AT_CCLK[] PROGMEM = "AT+CCLK"; //20
const char AT_CENG[] PROGMEM = "AT+CENG"; //21
const char AT_SAPBR[] PROGMEM = "AT+SAPBR"; //22
const char HTTP_INIT[] PROGMEM = "AT+HTTPINIT"; //23
const char HTTP_PARA[] PROGMEM = "AT+HTTPPARA"; //24
const char HTTP_ACTION[] PROGMEM = "AT+HTTPACTION"; //25
const char HTTPACTION[] PROGMEM = "+HTTPACTION:0"; //26
const char HTTP_TERM[] PROGMEM = "AT+HTTPTERM"; //27
const char HTTP_READ[] PROGMEM = "AT+HTTPREAD"; //28
const char FTP_CID[] PROGMEM = "AT+FTPCID"; //29
const char FTP_MODE[] PROGMEM = "AT+FTPMODE"; //30
const char FTP_TYPE[] PROGMEM = "AT+FTPTYPE"; //31
const char FTP_SERVER[] PROGMEM = "AT+FTPSERV"; //32
const char FTP_PORT[] PROGMEM = "AT+FTPPORT"; //33
const char FTP_UN[] PROGMEM = "AT+FTPUN"; //34
const char FTP_PW[] PROGMEM = "AT+FTPPW"; //35
const char FTP_PUTNAME[] PROGMEM = "AT+FTPPUTNAME"; //36
const char FTP_PUTPATH[] PROGMEM = "AT+FTPPUTPATH"; //37
const char FTP_PUT[] PROGMEM = "AT+FTPPUT"; //38
const char FTPPUT[] PROGMEM = "+FTPPUT"; //39
const char CIPGSMLOC[] PROGMEM = "AT+CIPGSMLOC"; //40
const char CIFSR[] PROGMEM = "AT+CIFSR"; //41
const char CIPCLOSE[] PROGMEM = "AT+CIPCLOSE"; //42
const char CIPSERVER[] PROGMEM = "AT+CIPSERVER"; //43
const char CIPSHUT[] PROGMEM = "AT+CIPSHUT"; //44
const char CSTT[] PROGMEM = "AT+CSTT"; //45
const char* const table_AT[] PROGMEM =
{
AT, //0
SMS_STORAGE, //1
DIR_STORAGE, //2
GET_IMEI, //3
GET_ICCID, //4
GET_OPERATOR, //5
GET_BATT, //6
AT_CPIN, //7
AT_CSQ, //8
AT_CREG, //9
AT_CGATT, //10
AT_IPR, //11
DIR_CPBR, //12
DIR_CPBW, //13
SMS_CPBW, //14
SMS_CMGD, //15
SMS_CMGF, //16
SMS_CMGS, //17
SMS_CMGR, //18
AT_CLTS, //19
AT_CCLK, //20
AT_CENG, //21
AT_SAPBR, //22
HTTP_INIT, //23
HTTP_PARA, //24
HTTP_ACTION, //25
HTTPACTION, //26
HTTP_TERM, //27
HTTP_READ, //28
FTP_CID, //29
FTP_MODE, //30
FTP_TYPE, //31
FTP_SERVER, //32
FTP_PORT, //33
FTP_UN, //34
FTP_PW, //35
FTP_PUTNAME, //36
FTP_PUTPATH, //37
FTP_PUT, //38
FTPPUT, //39
CIPGSMLOC, //40
CIFSR, //41
CIPCLOSE, //42
CIPSERVER, //43
CIPSHUT, //44
CSTT, //45
};
//WI968C wi968c;
bool GPS::get_cellid(char * fixs)
{
// comment this if you want to have the GPS fix witj
// memset(fix,'\0',sizeof(fix));
char fix[80];
strcpy_P(wi968c.str_aux1, (char*)pgm_read_word(&(table_AT[21]))); //AT+CENG=3
snprintf(wi968c.str_aux1, sizeof(wi968c.str_aux1), "%s=3", wi968c.str_aux1);
// If you change AT+CENG=3 to 2 or 1, the coce below will not work because the order of mnc,mcc, lat are not the
//same. Correct,then the code
#ifdef DEBUG2
wi968c.sprint(wi968c.str_aux1);
wi968c.sprint(F("\t\t"));
#endif
wi968c.SimpleWriteln(wi968c.str_aux1);
//_cell.println(wi968c.str_aux1);
byte an;
an = wi968c.WaitResp(100,3000,OK_RESPONSE,false);
if(an==RX_FINISHED_STR_RECV)
{
#ifdef DEBUG2
wi968c.sprintln(OK_RESPONSE);
#endif
strcpy_P(wi968c.str_aux1, (char*)pgm_read_word(&(table_AT[21]))); // AT+CENG?
snprintf(wi968c.str_aux1, sizeof(wi968c.str_aux1), "%s?", wi968c.str_aux1);
wi968c.SimpleWriteln(wi968c.str_aux1);
//_cell.println(wi968c.str_aux1);
byte an;
an = wi968c.WaitResp(100,3000,"+CENG:1",false);
if(an==RX_FINISHED_STR_RECV)
{
#ifdef DEBUG2
wi968c.sprintln(OK_RESPONSE);
#endif
wi968c.sprintln((char *)wi968c.comm_buf);
return true;
}
else // AT+CENG?
{
#ifdef DEBUG2
wi968c.sprintln(KO_RESPONSE);
#endif
#ifdef DEBUG2
switch(an)
{
case RX_TMOUT_ERR:
wi968c.sprintln(ALERT_RX_TMOUT);
break;
case RX_FINISHED_STR_NOT_RECV:
wi968c.sprintln(ALERT_RX_FINISHED_STR_NOT_RECV);
break;
}
#endif
} // END AT+CENG?
}
else // //AT+CENG=3
{
#ifdef DEBUG2
wi968c.sprintln(KO_RESPONSE);
#endif
#ifdef DEBUG2
switch(an)
{
case RX_TMOUT_ERR:
wi968c.sprintln(ALERT_RX_TMOUT);
break;
case RX_FINISHED_STR_NOT_RECV:
wi968c.sprintln(ALERT_RX_FINISHED_STR_NOT_RECV);
break;
}
#endif
} // END //AT+CENG=3
}
Quand je compile, j'ai ce message d'erreur:
/Users/pierrot/Documents/Arduino/libraries/Wi968c/gps.cpp: In member function 'bool GPS::get_cellid(char*)':
/Users/pierrot/Documents/Arduino/libraries/Wi968c/gps.cpp:121:12: error: 'wi968c' was not declared in this scope
strcpy_P(wi968c.str_aux1, (char*)pgm_read_word(&(table_AT[21]))); //AT+CENG=3
^
Erreur lors de la compilation.
Comment dois-je alors déclarer wi968c. qui fais le "lien" avec la première librairie??
J'ai aussi décommenté ceci
//WI968C wi968c;
dans gps.cpp
Voyez-vous mon but? je veux créer un fichier par fonctionnalités. Plus tard, il y aura openlog.h etc.
Merci pour vos lumières