昨天写了一个2410和gprs通信的小程序,模拟xp的超级终端与gprs通信的方式。用户从命令行界面输入命令,和超级终端下调试的时候是一样的,就不多说了。代码比较少,如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <termios.h>
int open_port(void) { int fd;
fd = open("/dev/s3c2410_serial1", O_RDWR|O_NOCTTY|O_NDELAY);
if(fd == -1) printf("Unable to open uart1\n"); else fcntl(fd, F_SETFL, 0);
return fd; }
int setup_uart(int fd) { struct termios oldtio, newtio;
if((tcgetattr(fd, &oldtio)) != 0) { printf("Save old error!\n"); return -1; }
bzero(&newtio, sizeof(newtio));
newtio.c_cflag |= (CLOCAL | CREAD);
newtio.c_cflag &= ~CSIZE; newtio.c_cflag &= ~CSTOPB;// 1 stop bit
newtio.c_cflag &= ~PARENB;// No parity
newtio.c_cflag |= CS8; // 8 bits data
cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600);
//newtio.c_lflag |= (ICANON | ECHO);
//newtio.c_lflag &= ~ECHOE;
//newtio.c_iflag &= ~(IXON | IXOFF | IXANY);
newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0;
tcflush(fd, TCIFLUSH);
if((tcsetattr(fd, TCSANOW, &newtio)) != 0) { printf("Set new error!\n"); return -1; } }
int main(void) { int i; int fd; char c,str[200];
fd = open_port();
if(fd == -1) return 0;
i = setup_uart(fd); if(i == -1) return 0;
while(1) { for(i=0; i<200; i++) str[i] = '\0'; i = 0; printf("GPRS-CMD #");
while((c=getchar()) != 10) { str[i] = c; i++; } str[i] = 13; str[i+1] = '\0';
i = write(fd, str, strlen(str));
if(i < 0) printf("write error!"); for(i=0; i<100; i++) usleep(100);
i = read(fd, str, 200); printf("%s\n", str); } }
|
程序中还有一些小bug,由于只是用于调试,就没有花时间去修改。有兴趣的朋友可以修改一下。改完了别忘记告诉大家哈!
接下来要写一个自动发短信的程序,写好了会上传。
阅读(1552) | 评论(0) | 转发(0) |