IR红外遥控软件设计思想

        近期,因为工作需要,迈入了IR驱动软件的设计和编码。在此过程中,一路坎坷,总结了下文中的内容,希望能够对做IR遥控,或者对IR遥控有兴趣的小伙伴,各大群体,技术牛人提供参考。

1. 分层设计

        分层设计在所有的软件架构设计中,都是普遍存在的设计思想。红外遥控的设计亦是如此,具体分为了以下层次:

IR Remote分层
应用层
协议层
通用适配层
HW驱动层

下面自上而下的进行描述:

1.1 应用层

        所谓的应用层,即在实际的使用过程中,能够看到明显效果的一种软件控制逻辑。我们知道,对于每一种遥控器而言,都有不同的按键功能,他们之间大同小异。遥控器中的某个按键被按下去之后,能够远程控制接收方执行某个对应的事件。而这些内容在应用层中百花齐放。

主要内容:

(1)定义规则:命令和地址

命令特定的命令对应特定的事件或功能
地址特定的设备

(2)发送与执行

发送人机交互的体现,将某个动作封装为一组编码数据
执行解析命令后执行相应的事件或功能

(3)与协议层通信

1.2 协议层

        所谓协议层,即对红外协议的具体实现。这里可以是通用,标准的协议(例如RC5,RC6,NEC),也可以是自定义协议。

主要内容:

(1)实现红外协议的编解码逻辑

(2)为应用层提供接口及解码数据

1.3 通用适配层

        这一层其实可以作为非必须的层级划分。这里所谓的通用,其实是对协议层和驱动层适配性的具体实现。为了适配所有的协议和不同的硬件平台。

主要内容:

(1)实现不同协议之间的通用数据处理逻辑

(2)实现对不同硬件平台的编解码的封装和修改

(3)为协议层提供接口

1.4 HW驱动层

        这一层是相对独立的一个层次划分,主要取决于选择的硬件平台,因为每个SOC,MCU产商对于IR驱动的设计存在着一定的差异,当然实现的原理都区别不大。

部分产商会将IR作为完全独立的外设模块,而有些会通过定时器,GPIO的组合实现。那么这一层的主要内容:

(1)实现IR初始化,配置,启动,停止,中断逻辑

(2)实现数据帧的发送与接收

2. 参考设计

        在前文的基础上,这里的参考设计的概念是一种学习、理解和使用的过程。主要分为两个部分:

(1)红外协议的理解

(2)开源项目的参考

       红外遥控已经是非常成熟的技术,市面上的各式各样的红外协议,都有着相同的特征,都是将脉冲宽度表示为一种特定bit数据和含义。因此,在学习和理解常见的红外协议,有助于整个开发项目的深入掌握。

这里介绍两个开源项目:助力项目的高效运行

(1)LIRCicon-default.png?t=N7T8https://sourceforge.net/projects/lirc/

linux下C语言开发的开源项目,设备驱动,和文件IO思想较为集中,编解码逻辑非常丰富。

(2)IR remoteicon-default.png?t=N7T8https://gitcode.com/Arduino-IRremote/Arduino-IRremote/overview?utm_source=artical_gitcode&isLogin=1

 Arduino上C++开发的开源红外遥控器库,红外协议的编解码逻辑性强,API丰富,非常适合学习和理解红外协议。

     

        

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K成长日志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值