En nuestro proyecto de Graduación, se supone que debemos conectar un módulo GSM (ADH8066) a nuestra placa ARM (OK-6410) que ejecuta Linux incorporado (Qtopia) y comunicarnos con él.
Cuando operamos por primera vez en el módulo, envía un mensaje "Listo", luego podemos comunicarnos con él a través de comandos AT. Nos comunicamos con éxito usando Hyper-Terminal y logramos enviar un simple SMS.
El problema ocurre cuando intentamos comunicarnos con él desde la placa ARM.
Nos las arreglamos para recibir el mensaje "Listo", pero luego no tenemos ninguna respuesta.
Aquí está el código que hemos desarrollado hasta ahora:
int main(void){
int fd;
char *dev ="/dev/ttySAC3";
struct termios options;
char buffer[20];
char buffer2[20];
char *bufptr;
char *bufptr2;
bufptr = buffer;
bufptr2 = buffer2;
int nbytes,nbytes2=0;
fd = open (dev, O_RDWR | O_NOCTTY);
tcflush(fd, TCIOFLUSH);
tcgetattr(fd, &options);
cfsetispeed(&options, B115200); //Set Baud-rate to 115200
cfsetospeed(&options, B115200);
options.c_cflag |= CLOCAL | CREAD; //Enable the receiver and set local mode
options.c_cflag &= ~PARENB; //No parity (8N1)
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~CRTSCTS; //Disable hardware flow control
options.c_lflag |= (ICANON | ECHO | ECHOE); //enable input-canonical mode
options.c_iflag = IGNPAR; //Ignore parity errors
options.c_iflag &= ~(IXON | IXOFF | IXANY); //Disable software flow control
options.c_oflag &= ~OPOST; //disable output-processing mode
tcsetattr(fd, TCSANOW, &options);
printf("Hello GSM\n");
tcflush(fd, TCIOFLUSH);
//capture the "Ready" message
while(1){
nbytes = read(fd, bufptr, 1);
if (0!=strstr(buffer,"Ready")){
printf("\nReady Found!\n");
break;
}
bufptr += nbytes;
}
tcflush(fd, TCIOFLUSH);
// send simple "AT" AT command
int y = write(fd,"AT\r\n",4);
if (y==4)
printf("Written\n");
//trying to capture the "OK" response for the above AT command
while(1){
nbytes2 = read(fd, bufptr2, 1);
printf("%c\n",*bufptr2);
}
return 1;
}
obtuvimos esta respuesta:
Hello GSM
--- Ready Found! ---
Written: 3
y luego bloquea y permanece inactivo.
Si logramos capturar el mensaje "Listo", ¿no significa que "leer" funciona bien? y si "escrito" está impreso arriba, ¿no significa eso que "escribir" funciona bien?
Entonces, ¿por qué no podemos comunicarnos con el módulo?
Gracias.