Clase GSMVoiceCall

GSMVoiceCall class Permite la comunicación de voz a través del módem. Hay que añadir un micrófono y un altavoz para poder utilizarlo.

GSMVoiceCall constructor GSMVoiceCall es la clase base para todas las funciones relacionadas con recibir y realizar llamadas de voz GSM .

FUNCIONES

getVoiceCallStatus()
Descripción Devuelve el estado de la llamada de voz.
Sintaxis voice.getVoiceCallStatus()
Parámetros Ninguno
Retornos char : IDLE_CALL, CALLING, RECEIVINGCALL, TALKING
Ejemplo

Ver  abajo
________________________________________________________________


ready()
Descripción Informa si el comando previo voz se ha ejecutado con éxito
Sintaxis voice.Ready()
Parámetros Ninguno
Retornos




int
En el modo asíncrono, ready () devuelve 0 si el último comando se sigue ejecutando, 1 si hay éxito, y > 1 en caso de error. En el modo síncrono, devuelve 1 si se ha ejecutado correctamente, 0 si no.

________________________________________________________________
voiceCall()
Descripción
Realiza una llamada de voz a un número especificado. El método devuelve una información diferente dependiendo del modo de conexión GSM (síncrona o asíncrona). Véase más abajo para más detalles.
Sintaxis voice.voiceCall(number)
Parámetros number: char array. El número a llamar.
Retornos int
En el modo asíncrono, voiceCall () devuelve 0 si la última orden se sigue ejecutando, 1 si tiene éxito, y > 1 en caso de error. En el modo síncrono, devuelve 1 si se realiza la llamada, 0 en caso contrario.


Ejemplo












































































#include <GSM.h>
// Numero de PIN 
#define PINNUMBER ""
// initializa la biblioteca
GSM gsmAccess; // incluye un parametro 'true' para habilitar la depuracion
GSMVoiceCall vcs;
String remoteNumber = "";  // el numeo al que se quiere llamar
char charbuffer[20];
void setup()
{
  // initializa la comunicacion serie
  Serial.begin(9600); 
  Serial.println("Hace una llamada de voz");
  // estado de la conexion
  boolean notConnected = true;
  // Arranca el escudo GMS
  // Si su tarjeta SIM tiene PIN, pasarlo como un parámetro de begin () entre comillas
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("No conectado");
      delay(1000);
    }
  }
  Serial.println("GSM inicializado.");
  Serial.println("Introduzca el numero de telefono.");
}

void loop()
{
  // añade cualquier caracter entrante a la cadena:
  while (Serial.available() > 0)
  {
    char inChar = Serial.read();
    // si se trata de una nueva línea, significa que usted debe hacer la llamada:
    if (inChar == '\n')
    {
      // asegúrese de que el número de teléfono no es demasiado largo:
      if (remoteNumber.length() < 20)
      {
        // que el usuario sepa que está llamando:
        Serial.print("Llamando : ");
        Serial.println(remoteNumber);
        Serial.println();
        // Llama al número remoto
        remoteNumber.toCharArray(charbuffer, 20);
        // Compruebe si el receptor ha recogido la llamada
        if(vcs.voiceCall(charbuffer))
        {
          Serial.println("Llamada establecida. Introduzca una linea para terminar");
          // Espera que entre alguna linea
          while(Serial.read() !='\n' && (vcs.getvoiceCallStatus()==TALKING));          
          // Y colgar
          vcs.hangCall();
        }
        Serial.println("Llamada terminada");
        remoteNumber="";
        Serial.println("Introduzca el numero al que quiere llamar.");
      } 
      else
      {
        Serial.println("Demasiado tiempo para un numero de telefono"); 
        remoteNumber = "";
      }
    } 
    else
    {
      // añada el último carácter al mensaje que desea enviar:
      if(inChar!='\r')
        remoteNumber += inChar;
    }
  } 
}
________________________________________________________________
answerCall()
Descripción
Acepta una llamada de voz entrante. El método devuelve una información diferente dependiendo del modo del módem (síncrono o asíncrono), ver los detalles a continuación.
Sintaxis voice.answerCall()
Parámetros Ninguno
Retornos int
En modo asíncrono, answerCall () devuelve 0 si la última orden se sigue ejecutando, 1 si tiene éxito, y > 1 en caso de error. En el modo síncrono, devuelve 1 si la llamada es contestada, 0 en caso contrario.
Ejemplo
Ver  abajo
_________________________________________________________________

hangCall()
Descripción Colgar una llamada establecida o durante el timbre entrante. Dependiendo del modo de módem (síncrono o asíncrono) el método devolverá información diferente, ver más abajo para obtener más detalles.
Sintaxis voice.hangCall()
Parámetros Ninguno
Retornos
int
En el modo asíncrono, hangCall () devuelve 0 si el último comando se sigue ejecutando, 1 si hay éxito, y > 1 en caso de error. En el modo síncrono, devuelve 1 si se cuelga la llamada, 0 en caso contrario.

Ejemplo

Ver  abajo
__________________________________________________________________

retrieveCallingNumber()
Descripción Recupera el número que llama, y lo almacena.
Sintaxis voice.retrieveCallingNumber(number, size)
Parámetros number: matriz de caracteres para contener el número
size: el tamaño de la matriz
Retornos

int
En modo asíncrono, retrieveCallingNumber () devuelve 0 si el último comando se sigue ejecutando, si éxito 1 y > 1 si hay un error. En el modo síncrono, devuelve 1 si 

se obtiene el número 0 en caso contrario.
Ejemplo

Ejemplo
Ver  abajo


#include <GSM.h>
// Numero de PIN 
#define PINNUMBER ""
// initializa la biblioteca
GSM gsmAccess; // incluye un parametro 'true' para habilitar la depueracion
GSMVoiceCall vcs;
char numtel[20];           // buffer para la llamada entrante

void setup()
{
  // initializa la cmunicacion serie
  Serial.begin(9600);
  Serial.println("Recibe una llamada de xoz");
  // estado de la conexion
  boolean notConnected = true;
  // Arranca el escudo GSM 
  // Si su tarjeta SIM tiene PIN, pasarlo como un parámetro de begin () entre comillas
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("No conectado");
      delay(1000);
    }
  }
  // Esto hace que el módem notifique correctamente próximos eventos
  vcs.hangCall();
  Serial.println("Esperando llamada");
}

void loop()
{
  // Comprueba es estado de la llamada de voz
  switch (vcs.getvoiceCallStatus()) 
  {
    case IDLE_CALL: // Nada esta pasando
      break;
    case CALLING: // Esto no debería ocurrir, ya que no va a poner una llamada
      Serial.println("LLAMANDO");
      break;
    case RECEIVINGCALL: // ¡Sí! Alguien nos está llamando
      Serial.println("RECIBIENDO LLAMADA");
      // Recupera el numero que llama
      vcs.retrieveCallingNumber(numtel, 20);
      // Imprime el numeo que llama
      Serial.print("Numero:");
      Serial.println(numtel);
      // Responder a la llamada, establecer la llamada
      vcs.answerCall();         
      break;
    case TALKING:  // In this case the call would be established
      Serial.println("LLAMAND. Introducier una linea para interrumpir.");
      while(Serial.read()!='\n')
        delay(100);
      vcs.hangCall();
      Serial.println("COLGAR. Llamada en espera.");      
      break;
  }
  delay(1000);
}


No hay comentarios:

Publicar un comentario