日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/3/7 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android平台应用GPIO模拟IR控制车载DTV 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? 數(shù)字電視—DTV對(duì)我們來(lái)說(shuō)早已不是一個(gè)新東西,在車載電子上DTV大多是以模塊的形式獨(dú)立存在的,是可配的。在車載的市場(chǎng)上,客戶的需求是多種多樣的,如果把DTV也做到車載導(dǎo)航主PCB上去,還是不靈活,不要DTV的就得是不同的PCB板,這對(duì)于售后維護(hù)、開(kāi)發(fā)都不是一個(gè)好辦法。

??????? DTV在家里,大家一般都是通過(guò)遙控器來(lái)操作,當(dāng)然現(xiàn)在有些android的電視盒子可以通過(guò)手機(jī)來(lái)控制,有個(gè)泰捷遙控器的apk,通過(guò)同一個(gè)wifi熱點(diǎn)的電視盒,可以用手機(jī)來(lái)操作也挺方便。但是在車上,怎么去操作DTV呢?在小車上,一般空間都是比較狹窄的,使用遙控器是很不方便的,因此我們需要把控制做到導(dǎo)航主控上去。在遙控器的協(xié)議中,NEC協(xié)議是使用得最普遍的,下面就以NEC協(xié)議為例學(xué)習(xí)一下使用GPIO模擬IR按鍵消息的方法。

??????? NEC的一條按鍵信息由數(shù)據(jù)頭、客戶碼、客戶碼反碼、鍵值、鍵值反碼、停止位組成,在此不介紹重復(fù)碼。數(shù)據(jù)頭是一個(gè)9ms + 4.5ms的高低組合,后面就是緊跟4個(gè)字節(jié)的數(shù)值,也就是32bit01組合。IR口的gpio口一般是默認(rèn)是高電平的,解碼驅(qū)動(dòng)大多都是采用下降沿觸發(fā)中斷。在此我們主要是要編出一串IR脈沖。組合這一串脈沖的代碼如下:

[plain]?view plaincopy
  • 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");???????

  • ??????? 在此有一個(gè)問(wèn)題,就是編這一段脈沖需要50ms以上,標(biāo)準(zhǔn)的一個(gè)完整的消息大概是108ms-110ms。這就要求我們?cè)诎l(fā)送4字節(jié)數(shù)據(jù)以及停止碼中間不能被任務(wù)調(diào)度,因?yàn)槿蝿?wù)一調(diào)度的話編的碼的寬度就會(huì)有很大出入,接收端解析就會(huì)認(rèn)為是一個(gè)錯(cuò)誤的遙控值。那我們?cè)趺慈ケM力保證呢?在linux中有一個(gè)spinlock,也就是自旋鎖,一旦獲得這個(gè)鎖就可以保證當(dāng)然執(zhí)行的進(jìn)程不被調(diào)度搶占。因此在上面的這段代碼前后加上鎖以及取消鎖操作,筆者在實(shí)際操作中,在近百次的操作中,發(fā)送IR鍵值的成功率是百分之百。加鎖的相關(guān)代碼如下:

    [plain]?view plaincopy
  • #include?<linux/spinlock.h>??
  • spinlock_t??????lock;??
  • ??
  • ??spin_lock_init(&lock);??
  • ??
  • ???spin_lock(&lock);??
  • ?for?your?process//??
  • ???spin_unlock(&lock);??

  • ?????? 在android上層,可以通過(guò)ioctl來(lái)控制,向上層可以封裝在service里面供上層應(yīng)用使用。

    ?????? 以上僅供參考。

    總結(jié)

    以上是生活随笔為你收集整理的android平台应用GPIO模拟IR控制车载DTV的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。