Comment avoir deux librairies dépendentes

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

J'aimerais encore préciser que me slibrairies se trouvent dans

Documents/Arduino/librairies/Wi968c/Wi968c.h
Documents/Arduino/librairies/Wi968c/Wi968c.cpp
Documents/Arduino/librairies/Wi968c/Gps.h
Documents/Arduino/librairies/Wi968c/Gps.cpp

Soit dans le même dossier /Wi968c/