Hi.
In the source code I am just sending "AT" command and trying to check its "OK" response.
My code is....
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include<sys/signal.h>
#include<sys/ioctl.h>
#define BAUDRATE B9600
#define Modem "/dev/ttyAM1"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1
/******************************************** Functions Prototype *****************************************************/
void Modem_Interface(void);
void sig_handler(int status);
void serial_cnfg(void);
void modemdelay(void);
void modemdelay1(void);
/*************************************************************************************************************************/
/************************************************* Structures **********************************************************/
struct termios oldtio,newtio;
struct termios oldtio1,newtio1;
/*************************************************************************************************************************/
/********************************************** Global Variables *******************************************************/
int FD_Printer, FD_Modem, FD_CM;
unsigned char sig_flag;
int data;
int fd,cashfd,c, res,cntr=0,virus=0;
unsigned int CM_rply_Cntr=0;
char CM_rply_Buf[250];
char rx_data,rx_cntr=0;
/*************************************************************************************************************************/
void sig_handler(int status)
{
read(FD_Modem,&rx_data,1);
//read(FD_Modem,CM_rply_Buf,100);
//CM_rply_Buf[rx_cntr++]=rx_data;
printf("rx_data=%c\n",rx_data);
}
void modemdelay(void)
{
unsigned int i=0,j;
for(i=0;i<5632;i++)
for(j=0;j<4234;j++);
}
void modemdelay1(void)
{
unsigned int i=0,j;
for(i=0;i<632;i++)
for(j=0;j<234;j++);
}
void serial_cnfg(void)
{
struct sigaction sa;
sa.sa_handler = sig_handler;
sa.sa_flags = 0;
sa.sa_restorer = NULL;
sigemptyset(&sa.sa_mask);
sigaction(SIGIO,&sa,NULL);
fcntl(FD_Modem,F_SETOWN,getpid());
fcntl(FD_Modem,F_SETFL,FASYNC);
}
void Modem_Interface(void)
{
char cmd[]="AT",data,enter=0x0D;
unsigned int i=0;
printf("Transmitting \n");
while(cmd!='\0')
{
data=cmd[i++];
write(FD_Modem,&data,1);
}
write(FD_Modem,0x0D,1);
}
int main(void)
{
unsigned int i;
while(1)
{
FD_Printer = open(Printer, O_WRONLY | O_NOCTTY );
if (FD_Printer <0) {perror(Printer); exit(-1); }
FD_Modem = open(Modem, O_RDWR | O_NOCTTY ); //for modem
if (FD_Modem <0) {perror(Modem); exit(-1); }
serial_cnfg();
tcgetattr(FD_Modem,&oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0; /* set input mode (non-canonical, no echo,...) */
newtio.c_cc[VTIME] = 2; /* inter-character timer unused */
tcflush(FD_Modem, TCIFLUSH);
tcsetattr(FD_Modem,TCSANOW,&newtio);
modemdelay();
for(i=0;i<248;i++)
CM_rply_Buf='\0';
rx_cntr=0;
rx_data='\0';
//printf("\nIn Modem_Interface");
Modem_Interface();
modemdelay();
modemdelay();
}
tcsetattr(FD_Modem,TCSANOW,&oldtio);
return 0;
}
I am using wavecom GPRS ( Q24PL002) modem, with 9600 baud rate. I am setting everything in while loop beacuse whenever i used while(1) for only command transmission after some time signal handler did not worked.