#include #include #include #include #include #include #include #include #include #include #include #define READLEN (128) void sigalrm(int signal) { fprintf(stderr,"atcmd_response_read timed out.\n"); exit(-1); } void atcmd_response_read(int fd) { int i,count; char tmpbuf; //alarm(5); for (i=0;;i++) { count=read(fd,&tmpbuf,1); if (count < 0) { perror("read failed\n"); exit(-1); } if (count == 1 ) { printf("%c",tmpbuf); if( i > 2&& (tmpbuf==0xd || tmpbuf==0xa)) break; } } fflush(stdout); alarm(0); } void atcmd_write(int fd, char *buf) { ssize_t written=0,retval; size_t count=strlen(buf); while (written < count) { retval=write(fd, &buf[written], 1); if (retval < 0) { perror("write failed\n"); exit(-1); } if(retval==1) printf("%c",buf[written]); written+=retval; } } double getrand() { int rnd; double randfloat; rnd=rand(); return (double)rnd/(double)RAND_MAX; } int main(int argc,char *argv[]) { int fd; int count; char *devname; char tmpbuff[READLEN]; int i; if (argc != 2) { fprintf(stderr,"Usage:\n" "randsleep \n"); return -1; } devname=argv[1]; fd=open(devname,O_RDWR); if (fd<0) { perror("open failed"); return -1; } signal(SIGALRM,sigalrm); atcmd_write(fd,"ATE0\r\n"); atcmd_response_read(fd); for(i=0;;i++) { printf("\nLoop %d\n",i); atcmd_write(fd,"AT\r\n"); usleep(getrand()*(double)4000000); atcmd_response_read(fd); usleep(getrand()*(double)4000000); } }