android平台应用GPIO模拟IR控制车载DTV

简介: android平台应用GPIO模拟IR控制车载DTV           数字电视—DTV对我们来说早已不是一个新东西,在车载电子上DTV大多是以模块的形式独立存在的,是可配的。

android平台应用GPIO模拟IR控制车载DTV

 

        数字电视—DTV对我们来说早已不是一个新东西,在车载电子上DTV大多是以模块的形式独立存在的,是可配的。在车载的市场上,客户的需求是多种多样的,如果把DTV也做到车载导航主PCB上去,还是不灵活,不要DTV的就得是不同的PCB板,这对于售后维护、开发都不是一个好办法。

        DTV在家里,大家一般都是通过遥控器来操作,当然现在有些android的电视盒子可以通过手机来控制,有个泰捷遥控器的apk,通过同一个wifi热点的电视盒,可以用手机来操作也挺方便。但是在车上,怎么去操作DTV呢?在小车上,一般空间都是比较狭窄的,使用遥控器是很不方便的,因此我们需要把控制做到导航主控上去。在遥控器的协议中,NEC协议是使用得最普遍的,下面就以NEC协议为例学习一下使用GPIO模拟IR按键消息的方法。

        NEC的一条按键信息由数据头、客户码、客户码反码、键值、键值反码、停止位组成,在此不介绍重复码。数据头是一个9ms + 4.5ms的高低组合,后面就是紧跟4个字节的数值,也就是32bit01组合。IR口的gpio口一般是默认是高电平的,解码驱动大多都是采用下降沿触发中断。在此我们主要是要编出一串IR脉冲。组合这一串脉冲的代码如下:

   gpio_write_one_pin_value(simulate_ir_gpio_hdle, 0, "simulate_ir_gpio");    	
		  Delay10us(900);// 9ms
   gpio_write_one_pin_value(simulate_ir_gpio_hdle, 1, "simulate_ir_gpio");    	
		  Delay10us(450);// 4.5ms
		 
   //IR Customer Code: 0x807f ,  NEC IR protocol  
   SendByteData(0x80);  // DVB HEADER_CODE0 
   SendByteData(0x7F);  // DVB HEADER_CODE1 

   SendByteData(IRData);
   SendByteData(~IRData); 
   gpio_write_one_pin_value(simulate_ir_gpio_hdle, 0, "simulate_ir_gpio");    	
			Delay10us(56); 
   gpio_write_one_pin_value(simulate_ir_gpio_hdle, 1, "simulate_ir_gpio");    	


        在此有一个问题,就是编这一段脉冲需要50ms以上,标准的一个完整的消息大概是108ms-110ms。这就要求我们在发送4字节数据以及停止码中间不能被任务调度,因为任务一调度的话编的码的宽度就会有很大出入,接收端解析就会认为是一个错误的遥控值。那我们怎么去尽力保证呢?在linux中有一个spinlock,也就是自旋锁,一旦获得这个锁就可以保证当然执行的进程不被调度抢占。因此在上面的这段代码前后加上锁以及取消锁操作,笔者在实际操作中,在近百次的操作中,发送IR键值的成功率是百分之百。加锁的相关代码如下:

#include <linux/spinlock.h>
spinlock_t		lock;

  spin_lock_init(&lock);

   spin_lock(&lock);
 ////////////////for your process//////////////////
   spin_unlock(&lock);


       在android上层,可以通过ioctl来控制,向上层可以封装在service里面供上层应用使用。

       以上仅供参考。

 

 

目录
相关文章
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
102 1
|
6天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
6天前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
10天前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
|
12天前
|
算法 Java 数据库
Android 应用的主线程在什么情况下会被阻塞?
【10月更文挑战第20天】为了避免主线程阻塞,我们需要合理地设计和优化应用的代码。将耗时操作移到后台线程执行,使用异步任务、线程池等技术来提高应用的并发处理能力。同时,要注意避免出现死循环、不合理的锁使用等问题。通过这些措施,可以确保主线程能够高效地运行,提供流畅的用户体验。
25 2
|
16天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
44 5
|
16天前
|
移动开发 Dart 搜索推荐
打造个性化安卓应用:从零开始的Flutter之旅
【10月更文挑战第20天】本文将引导你开启Flutter开发之旅,通过简单易懂的语言和步骤,让你了解如何从零开始构建一个安卓应用。我们将一起探索Flutter的魅力,实现快速开发,并见证代码示例如何生动地转化为用户界面。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供价值。
|
25天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
40 4
|
23天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
73 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
25天前
|
编解码 Android开发 UED
构建高效Android应用:从内存优化到用户体验
【10月更文挑战第11天】本文探讨了如何通过内存优化和用户体验改进来构建高效的Android应用。介绍了使用弱引用来减少内存占用、懒加载资源以降低启动时内存消耗、利用Kotlin协程进行异步处理以保持UI流畅,以及采用响应式设计适配不同屏幕尺寸等具体技术手段。
47 2
下一篇
无影云桌面