Chiarificazione inserimento nuovi metodi in libreria

Hai ragione ho postato il codice della libreria per il protocollo mqtt, che usa la sim900

#include "SIM900.h"  
#include "Streaming.h"

#define _GSM_CONNECTION_TOUT_ 5
#define _TCP_CONNECTION_TOUT_ 20
#define _GSM_DATA_TOUT_ 10

//#define RESETPIN 7

SIMCOM900 gsm;
SIMCOM900::SIMCOM900(){};
SIMCOM900::~SIMCOM900(){};
 

int SIMCOM900::read(char* result, int resultlength)
{
  // Or maybe do it with AT+QIRD

  int charget;
  //_tf.setTimeout(3);
  // Not well. This way we read whatever comes in one second. If a CLOSED 
  // comes, we have spent a lot of time
    //charget=_tf.getString("",'\0',result, resultlength);
    //charget=_tf.getString("","",result, resultlength);
  /*if(strtok(result, "CLOSED")) // whatever chain the Q10 returns...
  {
    // TODO: use strtok to delete from the chain everything from CLOSED
    if(getStatus()==TCPCONNECTEDCLIENT)
      setStatus(ATTACHED);
    else
      setStatus(TCPSERVERWAIT);
  }  */
  
  return charget;
}

 int SIMCOM900::readCellData(int &mcc, int &mnc, long &lac, long &cellid)
{
  if (getStatus()==IDLE)
    return 0;
    
   //_tf.setTimeout(_GSM_DATA_TOUT_);
   //_cell.flush();
  SimpleWriteln(F("AT+QENG=1,0")); 
  SimpleWriteln(F("AT+QENG?")); 
  if(gsm.WaitResp(5000, 50, "+QENG")!=RX_FINISHED_STR_NOT_RECV)
    return 0;

  //mcc=_tf.getValue(); // The first one is 0
  mcc=_cell.read();
  //mcc=_tf.getValue();
  mcc=_cell.read();
  //mnc=_tf.getValue();
  mnc=_cell.read();
  //lac=_tf.getValue();
  lac=_cell.read();
  //cellid=_tf.getValue();
  cellid=_cell.read();
  
  gsm.WaitResp(5000, 50, "+OK");
  SimpleWriteln(F("AT+QENG=1,0")); 
  gsm.WaitResp(5000, 50, "+OK");
  return 1;
}

boolean SIMCOM900::readSMS(char* msg, int msglength, char* number, int nlength)
{
  long index;
  char *p_char; 
  char *p_char1;

  /*
  if (getStatus()==IDLE)
    return false;
  */
  _tf.setTimeout(_GSM_DATA_TOUT_);
  //_cell.flush();
  SimpleWriteln(F("AT+CMGL=\"REC UNREAD\",1"));
  
  //gsm.WaitResp(5000, 100, "OK");
  //if(gsm.IsStringReceived("+CMGL"))
  if(_tf.find("+CMGL: "))
  {
	Serial.println("TEST");
	/*
	//index
	p_char = strchr((char *)(gsm.comm_buf),':');
	p_char1 = p_char+2;  //we are on the first char of string
	p_char = strchr((char *)(p_char1), ',');
	if (p_char != NULL) {
          *p_char = 0; 
    }
	//strcpy(msg, (char *)(p_char1));	
	
	// rec unread
	p_char++;
	p_char1 = strchr((char *)(p_char), ',');
	if (p_char1 != NULL) {
          *p_char1 = 0; 
    }	
	
	// number
	p_char1++;
	p_char1++;
	p_char = strchr((char *)(p_char1), '\"');
	if (p_char != NULL) {
          *p_char = 0; 
    }	
	strcpy(number, (char *)(p_char1));
	
	// UTC time
	p_char = strchr((char *)(p_char), '\n');
	p_char1 = strchr((char *)(p_char), '\n');
	if (p_char1 != NULL) {
          *p_char1 = 0; 
    }	
	strcpy(msg, (char *)(p_char));	
	*/
	
    index=_tf.getValue();
	//index=_cell.read();
	#ifdef UNO
		_tf.getString("\",\"", "\"", number, nlength);
	#endif
	#ifdef MEGA
		_cell.getString("\",\"", "\"", number, nlength);
	#endif
	#ifdef UNO
		_tf.getString("\n", "\nOK", msg, msglength);
	#endif
	#ifdef MEGA
		_cell.getString("\n", "\nOK", msg, msglength);
	#endif
    SimpleWrite(F("AT+CMGD="));
	SimpleWriteln(index);
	// Serial.print("VAL= ");
	// Serial.println(index);
    gsm.WaitResp(5000, 50, "OK"); 
    return true;
  };
  return false;
};

boolean SIMCOM900::readCall(char* number, int nlength)
{
  int index;

  if (getStatus()==IDLE)
    return false;
  
  //_tf.setTimeout(_GSM_DATA_TOUT_);
  if(gsm.WaitResp(5000, 50, "+CLIP: \"")!=RX_FINISHED_STR_RECV)
  //if(_tf.find("+CLIP: \""))
  {
	#ifdef UNO
		_tf.getString("", "\"", number, nlength);
	#endif
	#ifdef MEGA
		_cell.getString("", "\"", number, nlength);
	#endif
    SimpleWriteln("ATH");
    delay(1000);
    //_cell.flush();
    return true;
  };
  return false;
};

boolean SIMCOM900::call(char* number, unsigned int milliseconds)
{ 
  if (getStatus()==IDLE)
    return false;
  
  //_tf.setTimeout(_GSM_DATA_TOUT_);

  SimpleWrite("ATD");
  SimpleWrite(number);
  SimpleWriteln(";");
  delay(milliseconds);
  SimpleWriteln("ATH");

  return true;
 
}

int SIMCOM900::setPIN(char *pin)
{
  //Status = READY or ATTACHED.
  if((getStatus() != IDLE))
    return 2;
      
  //_tf.setTimeout(_GSM_DATA_TOUT_);	//Timeout for expecting modem responses.

  //_cell.flush();

  //AT command to set PIN.
  SimpleWrite(F("AT+CPIN="));
  SimpleWriteln(pin);

  //Expect "OK".
  
  if(gsm.WaitResp(5000, 50, "OK")!=RX_FINISHED_STR_NOT_RECV)
    return 0;
  else  
    return 1;
}

int SIMCOM900::changeNSIPmode(char mode)
{
    //_tf.setTimeout(_TCP_CONNECTION_TOUT_);
    
    //if (getStatus()!=ATTACHED)
    //    return 0;

    //_cell.flush();

    SimpleWrite(F("AT+QIDNSIP="));
	SimpleWriteln(mode);
	if(gsm.WaitResp(5000, 50, "OK")!=RX_FINISHED_STR_NOT_RECV) return 0;
    //if(!_tf.find("OK")) return 0;
    
    return 1;
}

int SIMCOM900::getCCI(char *cci)
{
  //Status must be READY
  if((getStatus() != READY))
    return 2;
      
  //_tf.setTimeout(_GSM_DATA_TOUT_);	//Timeout for expecting modem responses.

  //_cell.flush();

  //AT command to get CCID.
  SimpleWriteln(F("AT+QCCID"));
  
  //Read response from modem
  #ifdef UNO
	_tf.getString("AT+QCCID\r\r\r\n","\r\n",cci, 21);
  #endif
  #ifdef MEGA
	_cell.getString("AT+QCCID\r\r\r\n","\r\n",cci, 21);
  #endif
  
  //Expect "OK".
  if(gsm.WaitResp(5000, 50, "OK")!=RX_FINISHED_STR_NOT_RECV)
    return 0;
  else  
    return 1;
}
  
int SIMCOM900::getIMEI(char *imei)
{
      
  //_tf.setTimeout(_GSM_DATA_TOUT_);	//Timeout for expecting modem responses.

  //_cell.flush();

  //AT command to get IMEI.
  SimpleWriteln(F("AT+GSN"));
  
  //Read response from modem
  #ifdef UNO
	_tf.getString("\r\n","\r\n",imei, 16);
  #endif
  #ifdef MEGA
	_cell.getString("\r\n","\r\n",imei, 16);
  #endif
  
  //Expect "OK".
  if(gsm.WaitResp(5000, 50, "OK")!=RX_FINISHED_STR_NOT_RECV)
    return 0;
  else  
    return 1;
}

uint8_t SIMCOM900::read()
{
  return _cell.read();
}

void SIMCOM900::SimpleRead()
{
	char datain;
	if(_cell.available()>0){
		datain=_cell.read();
		if(datain>0){
			Serial.print(datain);
		}
	}
}

void SIMCOM900::SimpleWrite(char *comm)
{
	_cell.print(comm);
}

void SIMCOM900::SimpleWrite(const char *comm)
{
	_cell.print(comm);
}

void SIMCOM900::SimpleWrite(int comm)
{
	_cell.print(comm);
}
void SIMCOM900::SimpleWrite(int comm1,uint8_t comm,uint8_t &comm2)
{
	_cell.print(comm1,comm,comm2);
}
void SIM900::SimpleWrite(uint8_t *comm, uint8_t &comm1){
	_cell.print(comm,comm1);
}
void SIM900::SimpleWrite(uint8_t *&comm, uint16_t &comm1){
	_cell.print(comm,comm1);
}
void SIM900::SimpleWrite(uint8_t comm, uint8_t &comm1){
	_cell.print(comm,comm1);
}
void SIMCOM900::SimpleWrite(const __FlashStringHelper *pgmstr)
{
	_cell.print(pgmstr);
}
void SIMCOM900::SimpleWrite(uint8_t *comm,int length)
{
	_cell.print(comm,length);
}
void SIMCOM900::SimpleWrite(uint8_t *comm,uint8_t *comm1,int length)
{
	_cell.print(comm,com1,length);
}

void SIMCOM900::SimpleWriteln(char *comm)
{
	_cell.println(comm);
}

void SIMCOM900::SimpleWriteln(const __FlashStringHelper *pgmstr)
{
	_cell.println(pgmstr);
}

void SIMCOM900::SimpleWriteln(char const *comm)
{
	_cell.println(comm);
}

void SIMCOM900::SimpleWriteln(int comm)
{
	_cell.println(comm);
}

void SIMCOM900::WhileSimpleRead()
{
	char datain;
	while(_cell.available()>0){
		datain=_cell.read();
		if(datain>0){
			Serial.print(datain);
		}
	}
}

//---------------------------------------------
/**********************************************************

Quello che mi interessa è implementare dei metodi per quell'errore che ho in fase di compilazione