linux下串口编程
Linux 串口编程的一些问题解决
Linux下串口编程的文章网上是满天飞,但大都是出自一篇文章,而且写的都是些基本的操作,像控制RTS/CTS等串口引脚状态,接收发送二进制数据等,都没有很好的说明,我在使用中遇到了些问题,写出来,希望能对大家有所帮助,少走弯路,呵呵!
我使用的操作系统是Redhat9,gcc版本是3.2.2
其实在linux下对串口的设置主要是通过termios这个结构体实现的,但是这个结构体却没有提供控制RTS或获得CTS等串口引脚状态的接口,可以通过ioctl系统调用来获得/控制。
获得:
ioctl(fd, TIOCMGET, &controlbits);
if (controlbits & TIOCM_CTS)
printf(“有信号\n”);
else
printf(“无信号\n”);
设置:
ioctl(fd, TIOCMGET, &ctrlbits);
if (flag)
ctrlbits |= TIOCM_RTS;
else
ctrlbits &= ~TIOCM_RTS;
ioctl(fd, TIOCMSET, &ctrlbits);
其实TIOCM_RTS有效后是把串口的RTS设置为有信号,但串口的电平为低时是有信号,为高时为无信号,和用TIOCMGET获得的状态正好相反,也就是说TIOCMGET/TIOCMSET只是获得/控制串口的相应引脚是否有信号,并不反应当前串口的真实电平高低。
网上许多流行的linux串口编程的版本中都没对c_iflag(termios成员变量)这个变量进行有效的设置,这样传送ASCII码时没什么问题,但传送二进制数据时遇到0x0d,0x11和0x13却会被丢掉。不用说也知道,这几个肯定是特殊字符,被用作特殊控制了。关掉ICRNL和IXON选项即可解决。
c_iflag &= ~(ICRNL | IXON);
0x0d 回车符CR
0x11 ^Q VSTART字符
0x13 ^S VSTOP字符
ICRNL 将输入的CR转换为NL
IXON 使起动/停止输出控制流起作用
在《UNIX环境高级编程 第二版》第18章第11小节看到把终端I/O设置为原始模式(串口通讯就是终端I/O的原始模式)时输入属性设置为
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
屏蔽了许多属性,怪不得有人说如果是使用串口通讯c_iflag和c_oflag都设置为0就行了!
以下是我的设置的一些重要的串口属性
term.c_cflag |= CLOCAL | CREAD;
term.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
term.c_oflag &= ~OPOST;
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
static void request_send(void)
{
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
Linux系统省略输入用户名密码(字符界面下)
1、省略密码验证
很简单,只需把/etc/passwd中的root:x:0:0:root:/root:/bin/bash,改为root::0:0:root:/root:/bin/bash,就可以了,就是去掉了里面的x,这样root用户就不用密码了。其他用户也一样。
2、省略输入用户名
(1)修改/etc/inittab
在inittab中,有如下配 ......
刚开始学Linux,看到那些纷繁复杂的目录真是感觉有点手足无措,现在总算知道自己的软件应该装在/usr目录下,呵呵~~
下面是各个目录的说明:
/bin
该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。
/boot
该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这 ......
对于hci层的编程 是相当复杂的 功能也是强大的,建议学习者 去读bluez-lib中的hci和sdp
这里简要介绍 我在开发公司的项目中的 一个小的基础动作. 该编程的过程基本理清了hci和sdp的衔接和应用.希望对学习者有帮助
说明有不到之处,望大家多多研究,不要局限,每个人有自己的方式,也许你的在逻辑算法上比我的好! ......
在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是
Red Hat Package Manager(简称RPM)。此工具包最先是由Red
Hat公司推出的,后来被其他Linux开发商所借用。由于它为Linux使用者省去了很多时间,所以被广泛应 ......