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; ; 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下的应用的更多相关文章
- linux下GPRS模块的应用程序
---------------------------------------------------------------------------------------------------- ...
- Linux下的编程实战【转】
一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...
- 在Linux下用C语言实现短信收发
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lyserver/archive/2008/10/01/3007090.aspx 首先,我根据功能需要创建了几个头文件 ...
- linux下编程epoll实现将GPS定位信息上报到服务器
操作系统:CentOS 开发板:fl2440 开发模块:A7(GPS/GPRS),RT3070(无线网卡) ********************************************** ...
- 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 ...
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- Linux下Nodejs安装(完整详细)
之前安装过windows下以及Mac下的node,感觉还是很方便的,不成想今天安装linux下的坑了老半天,特此记录. 首先去官网下载代码,这里一定要注意安装分两种,一种是Source Code源码, ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
随机推荐
- 学习 git基础命令
缘起 年后到了新公司,由于个人意愿到了一个海外的项目组,除了自己从Java技术栈转了C#技术栈外,很多技术都是第一次使用,学习压力不小啊. 自己也就先从常用的技术开始学起,比如C#,AngularJS ...
- Echarts在JavaWeb中与后台的交互实现
本Web系统后台框架是:Spring+SpringMVC+Mybatis+Shiro+Maven.完整系统搭建的配置过程见上一篇文章:基于Spring+SpringMVC+Mybatis的Web系统搭 ...
- 树莓派3B初始化后一些必须的设置
接上一篇,SSH已经登录成功(http://www.cnblogs.com/crosys/p/6220108.html) 1.树莓派系统的设置 1.1扩展系统空间 因为内存卡还有很多空间没有分配,第一 ...
- OSI七层模型详解 TCP/IP协议
总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...
- 在使用EF时调用DBFUNCTION扩展方法时,发生ENTITYCOMMANDEXECUTIONEXCEPTION 异常的解决办法
System.Data.Entity.Core.EntityCommandExecutionException : An error occurred while executing the comm ...
- monkeyrunner之控件ID不存在或重复
我们在用monkeyrunner进行Android自动化时,通过获取坐标点或控件ID进行一系列操作.由于使用坐标点时,屏幕分辨率一旦更改,则代码中用到坐标的地方都要修改,这样导致代码的复用率较低.因此 ...
- Strust OGNL详解
首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...
- [No0000A4]DOS命令(cmd)批处理:替换字符串、截取字符串、扩充字符串、获取字符串长度
1.替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串.举例说明其功能:========================================= @echo off set a ...
- Stream流
在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口.例如请求HTTP服务器的request是一个 流,类似于stdout(标准输出):包括文件系统.HTTP 请求 ...
- FujiXerox CP116w换无线路由器后重新连接
因为手头没有安装光盘, 不得不用土办法修改cp116w的wifi连接参数 1. 将路由器的2.4GHz SSID和密码设置为和旧路由器一样, 这样打印机就能连接上了 2. 在路由器控制界面中找到类似于 ...