如何在Linux下使用红外进行手机通讯

如何在Linux下使用红外进行手机通讯,第1张

1、准备软件

irda-utils和gnokii红旗5.0已经包含。

2、配置irda

不同的irda有不同的配置方法。这里仅据一例,使用USB转串口的力特Z-TEK ZK-ID5红外适配器(芯片为MA600),到中关村转了一圈,市面上流行的多数红外适配器都是可以支持的,比如力特(除ZK-ID7之外,使用Moschip 7703),水木行等。建议使用ma600/mcs7780/esi/tekram/actisys/girbil/ep7211等芯片的红外适配器。

力特ZK-ID6配置命令如下(可以将这些命令写入一个脚本):

modprobe uhci_hcd modprobe pl2303 modprobe irda echo 9600 >/proc/sys/net/irda/max_baud_rate modprobe irtty-sir modprobe ma600-sir modprobe ircomm-tty irattach /dev/usb/ttyUSB0 -d ma600 -s

运行后,使用ifconfig查看,可以看到一个irda0的接口。

3、测试红外连接

我使用nokia 8250手机,只要支持红外的手机都可以。打开手机的红外连接,对准红外适配器(距离在1米以内,角度为30度以内)。然后运行irdadump命令。可以看到:

06:28:15.560217 xid:rsp 721dfac0 <d91a0000 S=6 s=5 Nokia 8250 hint=b125 [ PnP Modem Fax Telephony IrCOMM IrOBEX ] (27)

这时候连接就已经完成了。

4、配置gnokii

vi /etc/gnokiirc

写入:

[global] port=/dev/usb/ttyUSB0 model = 8250 initlength = default connection = irda serial_baudrate = 9600

5、运行xgnokii

从命令行,启动xgnokii。这时候你会看到一个图形界面。上面有contacts, sms等。点击相应的按钮,就可以下载或者上传通讯录。或者使用软件发送和接受短信了。

注:由于手机都有节电的功能,一段时间不活动会自动关闭红外接口,所以,请确认运行xgnokii的时候,手机的红外接受功能是打开的,一般手机屏幕上都会有显示。

#lsmod 或者cat /proc/modules 查看驱动 开发板资料上肯定有红外模块开发文档,参考文档做 红外如果是板子上就有的 系统肯定加上驱动 上网查查红外测试程序 简单测试下看红外能不能用

用于进程间通信,通信机制由 *** 作系统保证,比较稳定。

在linux中可以通过kill -l查看所有信号的类型。

kill -信号类型 进程ID

int kill(pid_t pid, int sig)

入参pid :

pid >0: 发送信号给指定的进程。

pid = 0: 发送信号给 与调用kill函数进程属于同一进程组的所有进程。

pid <0: 取|pid|发给对应进程组。

pid = -1:发送给进程有权限发送的系统中所有进程。

sig :信号类型。

返回值 :成功:0;失败:-1 (ID非法,信号非法,普通用户杀init进程等权级问题),设置errno

以OpenHarmony源码为例,应用ANR后,AbilityManagerService会通知应用dump堆栈信息,就是通过信号量做的。

头文件位置 :

include <signal.h>

函数解释 :

typedef void (*sighandler_t)(int)

sighandler_t signal(int signum, sighandler_t handler)

当接收到指定的信号signum时,就会跳转到参数handler指定的函数执行。其中handler的入参是信号值。

函数原型

signum参数指出要捕获的信号类型,act参数指定新的信号处理方式,oldact参数输出先前信号的处理方式(如果不为NULL的话)。

sigaction结构体

sa_handler 信号处理函数

sa_mask 在处理该信号时可以暂时将sa_mask 指定的信号集搁置

sa_flags 指定一组修改信号行为的标志。 它由以下零个或多个的按位或组成

   SA_RESETHAND:当调用信号处理函数时,将信号的处理函数重置为缺省值SIG_DFL

   SA_RESTART:如果信号中断了进程的某个系统调用,则系统自动启动该系统调用

   SA_NODEFER :一般情况下, 当信号处理函数运行时,内核将阻塞该给定信号。但是如果设置了 SA_NODEFER标记, 那么在该信号处理函数运行时,内核将不会阻塞该信号

sa_restorer 是一个替代的信号处理程序,当设置SA_SIGINFO时才会用它。

相关函数

int sigemptyset( sigset_t *set)

sigemptyset()用来将参数set信号集初始化并清空。

执行成功则返回0,如果有错误则返回-1。

完整示例


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7309270.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存