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 用户主目录的基 ...
随机推荐
- 简历生成平台项目开发-STEP3第一次项目例会探讨
时间:2016.7.13周三7点半 地点:图书馆 讨论主题:项目需求和功能分析.第一次任务分配 内容:按照之前的讨论,我们认为简历生成功能,不仅要适应学生求职的需求,更多的是要在格式和内容上满足HR的 ...
- Linux下命令行安装weblogic10.3.6
Linux下命令行安装weblogic10.3.6 一.安装前准备工作: 1.创建用户useradd weblogic;创建用户成功linux系统会自动创建一个和用户名相同的分组,并将该用户分到改组中 ...
- Linux安装详情图解
本文讲解Linux的安装 因为是纯属学习使用,所以安装在了虚拟机里 需要软件: VirtualBox-5.1.10 ubuntu-16.04.1-desktop-amd64 说明: 虚拟机可以选择 ...
- TCP连接建立和终止小结
TCP连接建立(三次握手) 如图: 请求端发送一个SYN到服务器的相应端口,以及初始序号ISN 服务器发送包含服务器的初始序号的SYN作为应答,同时确认序号设置为客户的ISN+1 客户将确认序号设置为 ...
- 理解Docker(4):Docker 容器使用 cgroups 限制资源使用
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- Dynamic Programming [Algorithm]
今天学习动态规划01背包问题,从一篇非常不错的文章中学习甚多.转载于此,感谢作者的分享! 原文地址 通过金矿模型介绍动态规划 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总 ...
- Jquery UI
jQuery UI简介 jQuery UI包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的 ...
- Servlet编程
Servlet编程 1. servlet概念及相关接口简介 java Servlet是运行在web服务器或应用服务器上的程序,他是作为来自web浏览器或其他HTTP客户端的请求和HTTP服务器山的数据 ...
- struts2中各个jar包作用
Struts2.3.4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方j ...
- 时隔一年再读到the star
The Star Arthur C. Clarke It is three thousand light-years to the Vatican. Once, I believed that spa ...