gprs/gsm 在linux下的应用

发布时间:2017-1-17 20:58:20 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"gprs/gsm 在linux下的应用 ",主要涉及到gprs/gsm 在linux下的应用 方面的内容,对于gprs/gsm 在linux下的应用 感兴趣的同学可以参考一下。

之前有篇随笔整理了一种在裸机下用状态机+超时的机制来操作gprs/gsm,linux下就不需要了,本身有完善的调度机制,在等待的流程中直接sleep就行了。

下面是飞凌OK6410下的 demo, 其他基于linux的硬件平台都是一样操作。

main.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>                                                  
#include <sys/stat.h>                                                      
#include <termios.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>
#include <string.h>
                                                  
 
#ifndef  __TTY_H__
#define __TTY_H__

int tty_init();
int tty_end();
int tty_write(char *buf,int nbytes);
int tty_writecmd(char *buf,int nbytes);
int tty_read(char *buf,int nbytes);
#endif

#ifndef __GPRS_H__
#define __GPRS_H__


void gprs_init();
void gprs_msg();
void gprs_read();
#endif

#define BAUDRATE B9600
#define COM0 "/dev/ttySAC0"
#define COM1 "/dev/ttySAC1"
#define COM2 "/dev/ttySAC2"

static int fd;
static struct termios oldtio,newtio;

#define ENDMINITERM 27 
#define FALSE    0
#define TRUE      1
volatile int STOP=FALSE;
int GET_GPRS_OK=FALSE;
int baud=B9600;

int tty_end()
{
      tcsetattr(fd,TCSANOW,&oldtio);
      close(fd);
}
int tty_read(char *buf,int nbytes)
{
    return read(fd,buf,nbytes);
}

int tty_write(char *buf,int nbytes)
{
    int i;
    for(i=0; i<nbytes; i++) {
        write(fd,&buf[i],1);
        usleep(100);
    }
    return tcdrain(fd);
}

int tty_writecmd(char *buf,int nbytes)
{
    int i;
    for(i=0; i<nbytes; i++) {
        write(fd,&buf[i],1);
        usleep(100);
    }
    write(fd,"\r",1);
    sleep(3);
    return tcdrain(fd);
}

int tty_init()
{
    fd = open(COM1, O_RDWR ); //| O_NONBLOCK);//
    if (fd <0) {
            perror(COM1);
            exit(-1);
      }
    
      tcgetattr(fd,&oldtio); /* save current modem settings */
    bzero(&newtio, sizeof(newtio)); 


    newtio.c_cflag = baud | /*CRTSCTS |*/ CS8 /*| CLOCAL | CREAD */;
    newtio.c_iflag = IGNPAR | ICRNL; 
    newtio.c_oflag = 0; 
    newtio.c_lflag = ICANON;

     newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */  
     newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */ 
     newtio.c_cc[VERASE]   = 0;     /* del */ 
     newtio.c_cc[VKILL]    = 0;     /* @ */ 
     newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */ 
     newtio.c_cc[VTIME]    = 0;     
     newtio.c_cc[VMIN]     = 1;     
     newtio.c_cc[VSWTC]    = 0;     /* '\0' */ 
     newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */  
     newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */ 
     newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */ 
     newtio.c_cc[VEOL]     = 0;     /* '\0' */ 
     newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */ 
     newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */ 
     newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */ 
     newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */ 
     newtio.c_cc[VEOL2]    = 0;     /* '\0' */ 


    tcflush(fd, TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);/*set attrib      */
return 0; } void gprs_msg() { char a; char ctl[]={26}; char text[]="Hello!Witech!"; tty_write("at", strlen("at")); sleep(3); write(fd,"\r", 1); sleep(3); tty_write("at+cmgf=1", strlen("at+cmgf=1")); sleep(3); write(fd,"\r", 1); sleep(3); tty_write("at+cmgs=13730191959", strlen("at+cmgs=13730191959")); sleep(3); write(fd,"\r", 1); sleep(3); tty_write("Hello!Witech!", strlen("Hello!Witech!")); sleep(3); tty_write(ctl, 1); sleep(3); printf("sending is end!!\n"); } int main(void) { void * retval; tty_init(); printf("wait for sending a message!\n"); fflush(stdout); printf("sending......\n"); gprs_msg(); printf("Bye-Bye!\n"); tty_end(); exit(0);
}

很久以前收集的几个demo,附件打包下载http://files.cnblogs.com/files/dong1/Linux_gprs.rar

end

上一篇:利用东方财富网获取股票代码
下一篇:10 个原则让动画带你飞(转)

相关文章

相关评论