之前有篇随笔整理了一种在裸机下用状态机+超时的机制来操作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;
    ; i<nbytes; i++) {
        write(fd,&buf[i],);
        usleep();
    }
    return tcdrain(fd);
}

int tty_writecmd(char *buf,int nbytes)
{
    int i;
    ; i<nbytes; i++) {
        write(fd,&buf[i],);
        usleep();
    }
    write(fd,);
    sleep();
    return tcdrain(fd);
}

int tty_init()
{
    fd = open(COM1, O_RDWR ); //| O_NONBLOCK);//
    ) {
            perror(COM1);
            exit(-);
      }

      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 = ;
    newtio.c_lflag = ICANON;

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

    tcflush(fd, TCIFLUSH);
    tcsetattr(fd,TCSANOW,&newtio);/*set attrib      */
    ;
}

void gprs_msg()
{
    char a;
    };
    char text[]="Hello!Witech!";
    tty_write("at", strlen("at"));
    sleep();
    write(fd,);
    sleep();
    tty_write("at+cmgf=1", strlen("at+cmgf=1"));
    sleep();
    write(fd,);
    sleep();
    tty_write("at+cmgs=13730191959", strlen("at+cmgs=13730191959"));
    sleep();
    write(fd,);
    sleep();
    tty_write("Hello!Witech!", strlen("Hello!Witech!"));
    sleep();
    tty_write(ctl, );
    sleep();
    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(); }

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

end

gprs/gsm 在linux下的应用的更多相关文章

  1. linux下GPRS模块的应用程序

    ---------------------------------------------------------------------------------------------------- ...

  2. Linux下的编程实战【转】

    一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...

  3. 在Linux下用C语言实现短信收发

     本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2008/10/01/3007090.aspx 首先,我根据功能需要创建了几个头文件 ...

  4. linux下编程epoll实现将GPS定位信息上报到服务器

    操作系统:CentOS 开发板:fl2440 开发模块:A7(GPS/GPRS),RT3070(无线网卡) ********************************************** ...

  5. UMTSkeeper: keep your UMTS/GPRS/GSM connection alive automatically

    UMTSkeeper: keep your UMTS/GPRS/GSM connection alive automatically by Elias from Mintaka This page i ...

  6. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  7. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  8. Linux下Nodejs安装(完整详细)

    之前安装过windows下以及Mac下的node,感觉还是很方便的,不成想今天安装linux下的坑了老半天,特此记录. 首先去官网下载代码,这里一定要注意安装分两种,一种是Source Code源码, ...

  9. (转载)linux下各个文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

随机推荐

  1. AngularJS 系列 02 - 模块

    引导目录: AngularJS 系列 学习笔记 目录篇 前言: 其实,在上篇文章介绍数据绑定的时候,我们的HelloWorld的代码案例中就已经使用了模块(module).哈哈. 本篇就着重介绍一下a ...

  2. C#语言基础

    第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...

  3. CSS3:backgroud-size和background-origin的使用方法

    backgroud-size CSS3以前,背景图像大小由图像的实际大小决定,background-size指定背景图像的大小. 你可以指定像素或百分比大小,你指定的大小是相对于父元素的宽度和高度的百 ...

  4. Java 中一个过时的类,能够很好的统计单个字符串的次数

    //StringTokenizer st1=new StringTokenizer("rirtirtjdlkfjlksadfoiyetryetretrejtlkjdsflkiuetuiojr ...

  5. MySQL 主从复制

    1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  6. [笔记]linux磁盘管理

    sudo mount -r /dev/sda3 /mnt/vista 只读挂载 sudo umount sudo umount -r 无法卸载时只读重新挂载 mount -t(指明设备类型) 可用参数 ...

  7. Python version 3.4 required, which was not found in the registry.解决

    问题描述: 在Win7环境下已安装Python3.4,准备安装numpy和nltk,运行安装程序报如题错误,具体解决方案如下: 1.将LOCAL_MACHINE\software\python\Pyh ...

  8. Windows 7 在资源管理器中显示软件快捷方式

    该方法是利用资源管理器中储存网络位置的文件夹实现的, 不需要修改注册表. 效果如图: 操作方法: 在资源管理器中打开路径 "%appdata%\Microsoft\Windows\Netwo ...

  9. Windows Installer 服务启动错误 14007 的解决办法

    问题: 在 本地计算机 无法启动 Windows Installer 服务. 错误代码 14007: 在活动的激活上下文中没有找到任何查找密钥. 这个问题似乎涉及到 Windows Installer ...

  10. js特效,加速度,图标跳动

    看到一个在地图上的特效,就是标注当前位置之后,图标一直在跳动,那效果看着比较得劲,就自己写了个图标跳动的jsjs代码: setTimeout("jump()",5); var t= ...