0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

迅為RK3588S開發(fā)板多屏同顯多屏異顯多屏異觸

北京迅為電子 ? 2024-11-29 14:59 ? 次閱讀

迅為RK3588S開發(fā)板多屏同顯多屏異顯多屏異觸

迅為電子RK3588 S開發(fā)板最多可以支持7個屏幕顯示,這主要取決于RK3588芯片內置了VOP控制器,支持四路視頻同顯或異顯,可有效提高行業(yè)定制的拓展性。本章節(jié)我們將介紹在RK3588S的Android12系統(tǒng)上實現(xiàn)多屏顯示。

1.1 Android 多屏同顯

iTOP-RK3588S開發(fā)板支持以下屏幕

迅為MIPI 7寸屏幕

標準HDMI屏幕(通過HDMI線連接)

迅為 LVDS 7 寸屏幕

迅為 LVDS 10.1 寸 1024*600 屏幕

迅為 LVDS 10.1 寸 1280*800 屏幕

迅為 LVDS 10.1 寸 1280*800 新屏幕

迅為RK3588S開發(fā)板:

wKgZO2dJZhiAAeL5AARRshmouKI633.png

然后修改Android源碼kernel-5.10/arch/arm64/boot/dts/rockchip/topeet_screen_lcds.dts中的

設備樹文件,如下圖所示。LVDS屏幕是MIPI通過轉接板連接顯示的,RK3588S不支持LVDS顯示接口。

wKgZPGdJZheAPTURAAGyeQmTCig968.png

我們可以根據(jù)自己的需求來修改topeet_screen_choose.dtsi文件??傊?,修改

topeet_screen_choose.dtsi的規(guī)律是:打開所連接的屏幕對應的宏定義,rk3588有四個顯示通道vp0 vp1 vp2 vp3,所打開的宏定義對應的vp通道不能重復。默認打開對應的宏定義為多屏同顯。

如果打開的宏定義是#define LCD_TYPE_LVDS_10_1_1280x800_GT9271,需要將kernel-5.10/arch/arm64/configs/rockchip_defconfig文件中的

CONFIG_TOUCHSCREEN_GT9271=y宏定義使能,然后再編譯源碼如果打開的宏定義是#define LCD_TYPE_LVDS_10_1_1024x600_GT911,需要將

kernel-5.10/arch/arm64/configs/rockchip_defconfig文件中的

CONFIG_TOUCHSCREEN_GT9XX宏定義使能,然后再編譯源碼。

RK3588 VP和各顯示接口的連接關系如下圖所示。

wKgZO2dJZheAU0pcAAKlXP8u1z0311.png

Android 多屏異顯

如果要支持多屏異顯,首先要調試好雙屏或多屏都可以正常顯示,并且分別掛載在不同的vp上,可以參考上一個小節(jié)根據(jù)自己的需求打開opeet_screen_choose.dtsi設備樹中的宏定義。

默認開啟后,多屏顯示的是同一個畫面(如果要支持雙屏或者多屏異顯,需要應用支持異顯, 才會顯示不同的內容)。查看當前的屏幕顯示狀態(tài)輸入以下命令

cat /sys/kernel/debug/dri/0/summary如果雙屏或者多屏的顯示器分辨率比例不同,比如說主屏是16:9,副屏是4:3,那么副 屏顯示的畫面會拉伸或者縮小,原因是副屏的畫面是主屏映射過去的,所以副屏上顯示的是 主屏的分辨率。如果同樣的屏幕情況下,應用支持異顯,那么副屏會顯示實際正常的分辨率。

所以如果要支持雙屏或者多屏同顯并要求顯示正常,雙屏或者多屏的屏幕的分辨率比要一致。

指定主副屏

多屏異顯的實際應用中,需要指定哪個是主屏,哪個是副屏。修改Android源碼目錄下

device/rockchip/rk3588/topeet_rk3588s/topeet_rk3588s.mk文件,添加如下內容:

如果要指定MIPI屏幕為主屏,HDMI屏幕為副屏,如下設置:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A

如果要指定MIPI屏幕為主屏,EDP屏幕為副屏,如下設置:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=eDP

如果需要定義多個主副屏時,需要用逗號隔開,比如指定MIPI eDP為主屏,HDMI-A為副屏, 設置如下:

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI,eDP

PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A

異顯方案介紹

目前有兩種異顯方案分別是Android PresentationAndorid Activity指定屏幕啟動。

Android Presentation,需要APP應用開發(fā)中調用相應接口使指定的view (Presentationview是一個特殊的dialog類型view)在副屏中顯示。

Android Activity指定屏幕啟動,APP在啟動activity時可以使用display id參數(shù)在對應的屏幕上直接顯示。

兩者主要區(qū)別在:

1前者的acitivity需要獨立開發(fā),把需要顯示的內容投到副屏,后者可以不需要源碼,調用命令行或者系統(tǒng)接口把第三方app的acitivity投送到副屏;

2 .前者只有一個activity在頂層,通過特殊的dialog將指定內容顯示在副屏,后者是兩 個activity分別顯示在主副屏。

接下來我們詳細講述這倆種方法。

1.2.3 Android Presentation

本小節(jié)講解Android Presentation異顯方案,瑞芯微和迅為提供了使用Android Presentation編寫好的APP例程,接下來進行測試。

1.2.3.1 ApiDemos APP

在Android12源碼中瑞芯微已經提供了使用Presentation接口的測試APP,在源碼development/samples/ApiDemos目錄下,需要使用mm命令編譯APP。迅為提供了編譯好的 測試APP在網盤資料iTOP-RK3588S開發(fā)板/02_【iTOP-RK3588S開發(fā)板】/13_多屏顯示配 套資料/Android/ApiDemosAPK”目錄下。

此APP源碼在Android源碼development/samples/ApiDemos目錄下,進入此目錄,輸入“mm”命令進行編譯,如下圖所示:

wKgZPGdJZhiAPFIUAAUCxnMLvhI397.png

然后使用adb命令安裝APP,依次點擊App->Activity->Presentation選項,即可進入Presentation調用界面。如下圖所示:

wKgZPGdJZheAcuTlAAEBi5K3XR8037.png

wKgZO2dJZheAG0thAADEAokazqo983.png


在該界面需點擊如下副屏的checkbox選項,即可在副屏顯示相應圖片。

副屏HDMi屏幕顯示圖片,

Presentation sampleAPP

此APP在網盤資料“iTOP-RK3588S開發(fā)板/02_【iTOP-RK3588S開發(fā)板】/13_多屏顯示配套資料/Android/Presentation sample”目錄下,下載此APP工程,然后用Androidstudio打開,并編譯apk。編譯成功之后,安裝APP,APP安裝成功之后如下圖所示:

wKgZO2dJZheAUR0LAAEtHAr2K84355.png

打開APP如下圖所示:

wKgZPGdJZheAX7oIAABwUEcg3Rs834.png

點擊“顯示副屏”按鈕,會在副屏顯示,如下圖所示:

wKgZO2dJZhiAXfM6AARIPNadRKk296.png

APP重要知識點講解:

隨著用戶的需求增多,特別是對于一些Android平板電腦以及其他的一些Android智能設備可能有多個屏幕,用戶不僅想要在主屏幕上顯示內容,同樣在第二屏幕上也要顯示想要的內容,這樣可以達到更好的體驗效果。Google也是不負眾望在Android4.2版本以后提供了Presentation類,可以輕松實現(xiàn)在兩塊屏幕上同時顯示不同的內容。Presentation是一個特殊的dialog,它的目的是顯示內容到第二屏幕。在Presentation創(chuàng)建的時候關聯(lián)一個目標設備,確 定Presentation要顯示在那個設備上,根據(jù)這個設備的信息來配置Presentation的context和resources信息。目前系統(tǒng)提供了兩種方式來與目標顯示屏進行綁定。

1通過MediaRouter接口獲取并綁定:

選擇顯示presentation的設備最簡單的方法就是使用Media Router,media router服務持續(xù)追蹤在系統(tǒng)中哪個音頻、視頻線路是可用的,當routes被選擇或者不被選擇,或者更好的顯 示presentation display的線路發(fā)生改變后media router就會發(fā)送消息。所以一些應用程序可以自動監(jiān)視這些消息來在首選設備上顯示或取消presentation。

首選顯示presentation的設備是Media Router進行推薦的,如果應用想要顯示內容在第二屏幕上就該使用該設備。下面將給出如何使用media router在主屏的設備創(chuàng)建和顯示presentation。

MediaRouter mediaRouter =(MediaRouter)

context.getSystemService(Context.MEDIA_ROUTER_SERVICE); MediaRouter.RouteInfo route =

mediaRouter.getSelectedRoute();

if(route !=null){

Display presentationDisplay = route.getPresentationDisplay();

if(presentationDisplay !=null){

Presentation presentation =newMyPresentation(context, presentationDisplay);

presentation.show();

}

}

根據(jù)上面代碼可以看出通過系統(tǒng)服務Media Router來選擇一個合適的route,從route中來 獲取首選的display,如果display不為空就會創(chuàng)建該presentation,創(chuàng)建完成后調用presentation的show方法將該presentation顯示出來。

2通過DisplayManager接口獲取并綁定另外一個獲取首選display的方法是直接使用display Manager來獲取。display manager服務提供方法枚舉和描述系統(tǒng)中所有的設備,包括可以顯示presentation的設備。display manager

持續(xù)追蹤系統(tǒng)中所有的設備,然而,并不是所有的設備都適合顯示presentation,例如,如果一個Activity試圖在主屏幕上顯示一個presentation,它可能會掩蓋自己的內容,這就像在Activity上打開一個dialog一樣。

DisplayManager displayManager =(DisplayManager)

context.getSystemService(Context.DISPLAY_SERVICE); Display[] presentationDisplays

=displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);

if(presentationDisplays.length >0){

// If there is more than one suitable presentation display, then we could consider

// giving the user a choice. For this example, we simply choose the first display

// which is the one the system recommends as the preferred presentation display.

Display display = presentationDisplays[1]; // displays[1]是副屏

Presentation presentation =new MyPresentation(context, presentationDisplay);

presentation.show();

}

根據(jù)上面代碼可以看出通過系統(tǒng)服務Display Manager來獲取所有適合顯示presentation的display列表,如果獲取到了多個適合display對象,我們選擇副屏的display。最后顯示presentation。

1.2.4 Android Activity 指定屏幕啟動

本小節(jié)講解Android Activity指定屏幕啟動異顯方案,瑞芯微提供了使用Android Activity指定屏幕啟動編寫好的APP例程,接下來進行測試。

1.2.4.1 dualscreendemo APPRK DualScreen主要區(qū)別與android presentation,在于它實現(xiàn)了應用的派發(fā),允許廠商快 速根據(jù)現(xiàn)有的app功能,進行模塊的集成,減少開發(fā)周期和研發(fā)成本。示例代碼為DualScreenDemo.zip工程,在網盤資料“iTOP-RK3588S開發(fā)板/02_【iTOP-RK3588S開發(fā)板】

/13_多屏顯示配套資料/Android/DualScreenDemo”目錄下下載。

使用Androidstudio打開此工程代碼,編譯安裝APP,安裝完成后如下所示:

wKgZPGdJZhiABe2DAAJJoeJ57hA624.png

打開此APP,如下所示,有三個按鈕。

第三個按鈕使用了Android Activity指定屏幕啟動,關鍵代碼如下所示,第一個和第二個 按鈕使用了Presentation。

private void showSecondByActivity(Context context){

ActivityOptions options = ActivityOptions.makeBasic();

MediaRouter mediaRouter = (MediaRouter)

context.getSystemService(Context.MEDIA_ROUTER_SERVICE);

MediaRouter.RouteInfo route =

mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);

if (route != null) {

Display presentationDisplay = route.getPresentationDisplay();

options.setLaunchDisplayId(presentationDisplay.getDisplayId());

Intent intent = new Intent("android.intent.action.MUSIC_PLAYER");

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent, options.toBundle());

}

}

在startActivity接口參數(shù)中設置指定屏幕的display id,Activity將在指定屏幕上直接啟動顯示。

Activity的多顯示器支持需要設備支持

name="android.software.activities_on_secondary_displays" />。

同時application或者activity需要支持分屏屬性即或者標簽下設 置新的屬性android:resizeableActivity="true",這個屬性在你target到Android N后android:resizeableActivity的默認值就是true。

ActivityOptions提供兩個新函數(shù)以支持多個顯示器,分別是setLaunchDisplayId()和getLaunchDisplayId()。

setLaunchDisplayId()指定Activity在啟動后應顯示在哪個顯示器上。

getLaunchDisplayId()返回操作組件的當前啟動顯示器。

在上述代碼中使用MediaRouter接口獲取副屏的display id,同理也可以使用

DisplayManager接口獲取響應的display id。

多屏異觸

多屏異觸需要指定主副屏。這里使用修改Android源碼的方式實現(xiàn)綁定副屏觸摸芯片。這樣設置以后,系統(tǒng)開機會自動將ft5x06觸摸綁定到副屏上面去。修改文件:

frameworks/native/services/inputflinger/reader/EventHub.cpp,添加如下加紅的代碼。通過修改EventHub.cpp文件,在isExternalDeviceLocked函數(shù)中判斷設備名稱為指定的副屏設備(比如

副屏的設備名稱是generic ft5x06 (79)),則返回true。

bool EventHub::isExternalDeviceLocked(Device* device) {

const char *I2C_DEVICE_NAME = "generic ft5x06 (79)";

ALOGE("input deviceis '%s' ",device->identifier.name.c_str());

if (strcmp(device->identifier.name.c_str(), I2C_DEVICE_NAME) == 0) {

return true;

}

if (device->configuration) {

bool value;

if (device->configuration->tryGetProperty(String8("device.internal"), value)) {

return !value;

}

}

return device->identifier.bus == BUS_USB || device->identifier.bus ==

BUS_BLUETOOTH;

}

這里的I2C_DEVICE_NAME需要根據(jù)實際情況添加,用戶可根據(jù)ALOGE打印信息在

logcat中尋找識別到的芯片實際的名字。下面是添加了ALOGE打印信息后在logcat中得到的 設備名字:

上圖中的goodix-ts和generic ft5x06 (79)即為這里使用的觸摸IC芯片的名字,將這個復制

到代碼中即可。修改完畢,重新編譯Android鏡像,用戶測試的時候可以直接使用ApiDemo APP

進行測試。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5050

    瀏覽量

    97455
  • rk3588s
    +關注

    關注

    0

    文章

    33

    瀏覽量

    228
  • 迅為電子
    +關注

    關注

    0

    文章

    32

    瀏覽量

    29
收藏 人收藏

    評論

    相關推薦

    瑞芯微RK3588開發(fā)板RK3588 EVB和RK3588S EVB解讀

    開發(fā)工程師Damon的解答。 RK3588開發(fā)板的兩款產品分別為RK3588 EVB及RK3588S EVB。
    的頭像 發(fā)表于 09-22 15:54 ?1.8w次閱讀
    瑞芯微<b class='flag-5'>RK3588</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588S</b> EVB解讀

    基于3568開發(fā)板/動態(tài)方案

    iTOP-RK3568開發(fā)板采用四核Cortex-A55處理器,芯片內置VOP控制器,支持HDMI、LVDS、MIPI、EDP四種顯示接口的
    發(fā)表于 12-27 14:30

    【手冊上新】RK3588開發(fā)板顯示手冊

    ,可有效提高行業(yè)定制的拓展性。 iTOP-RK3588
    發(fā)表于 11-07 10:37

    RK3568開發(fā)板支持/動態(tài)方案

    iTOP-RK3568開發(fā)板采用四核Cortex-A55處理器,芯片內置VOP控制器,支持HDMI、LVDS、MIPI、EDP四種顯示接口的
    發(fā)表于 12-27 16:48 ?871次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)板</b>支持<b class='flag-5'>多</b><b class='flag-5'>屏</b><b class='flag-5'>同</b><b class='flag-5'>顯</b>/<b class='flag-5'>異</b><b class='flag-5'>顯</b>動態(tài)方案

    【技術案例】RK3568三

    讓科技更簡單、讓生活更智能RK3568系列主板支持三控,即一塊主板可同時接入三個顯示
    的頭像 發(fā)表于 04-14 11:24 ?1997次閱讀
    【技術案例】<b class='flag-5'>RK</b>3568三<b class='flag-5'>屏</b><b class='flag-5'>異</b><b class='flag-5'>顯</b><b class='flag-5'>異</b><b class='flag-5'>觸</b>控

    3399開發(fā)板Ubuntu 系統(tǒng)雙屏,雙屏測試

    3399開發(fā)板Ubuntu 系統(tǒng)雙屏,雙屏
    的頭像 發(fā)表于 12-09 16:39 ?1209次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b>3399<b class='flag-5'>開發(fā)板</b>Ubuntu 系統(tǒng)雙屏<b class='flag-5'>異</b><b class='flag-5'>顯</b>,雙屏<b class='flag-5'>同</b><b class='flag-5'>顯</b>測試

    RK3568開發(fā)板可實現(xiàn)控方案

    RK3568開發(fā)板可實現(xiàn)
    的頭像 發(fā)表于 07-15 17:30 ?1843次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK</b>3568<b class='flag-5'>開發(fā)板</b>可實現(xiàn)<b class='flag-5'>多</b><b class='flag-5'>屏</b><b class='flag-5'>異</b><b class='flag-5'>顯</b>控方案

    iTOP-RK3588開發(fā)板

    iTOP-RK3588開發(fā)板
    的頭像 發(fā)表于 11-10 14:46 ?1125次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b>iTOP-<b class='flag-5'>RK3588</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>多</b><b class='flag-5'>屏</b><b class='flag-5'>同</b><b class='flag-5'>顯</b><b class='flag-5'>多</b><b class='flag-5'>屏</b><b class='flag-5'>異</b><b class='flag-5'>顯</b><b class='flag-5'>異</b><b class='flag-5'>觸</b>

    RK3568-三、方案演示

    RK3568-三方案演示
    的頭像 發(fā)表于 01-18 15:11 ?904次閱讀
    <b class='flag-5'>RK</b>3568-三<b class='flag-5'>屏</b><b class='flag-5'>同</b><b class='flag-5'>顯</b>、<b class='flag-5'>異</b><b class='flag-5'>顯</b>方案演示

    TL3588--、方案演示.

    TL3588--方案演示.
    的頭像 發(fā)表于 01-24 14:57 ?689次閱讀
    TL<b class='flag-5'>3588</b>--<b class='flag-5'>多</b><b class='flag-5'>屏</b><b class='flag-5'>同</b><b class='flag-5'>顯</b>、<b class='flag-5'>異</b><b class='flag-5'>顯</b>方案演示.

    M3568應用實例

    M3568-T核心、技術,提升效率與安
    的頭像 發(fā)表于 02-20 08:23 ?592次閱讀
    M3568<b class='flag-5'>多</b><b class='flag-5'>屏</b><b class='flag-5'>同</b><b class='flag-5'>顯</b><b class='flag-5'>異</b><b class='flag-5'>顯</b>應用實例

    RK3588S邊緣計算開發(fā)板Android13系統(tǒng)功能

    RK3588S邊緣計算開發(fā)板Android13系統(tǒng)功能
    的頭像 發(fā)表于 04-10 15:43 ?903次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b><b class='flag-5'>RK3588S</b>邊緣計算<b class='flag-5'>開發(fā)板</b>Android13系統(tǒng)功能

    MD9360應用實例

    MD9360-T核心、技術,讓你的顯示
    的頭像 發(fā)表于 08-07 08:25 ?335次閱讀
    MD9360<b class='flag-5'>多</b><b class='flag-5'>屏</b><b class='flag-5'>同</b><b class='flag-5'>顯</b><b class='flag-5'>異</b><b class='flag-5'>顯</b>應用實例

    電子RK3588S開發(fā)板第三章Buildroot系統(tǒng)功能測試

    電子RK3588S開發(fā)板第三章Buildroot系統(tǒng)功能測試
    的頭像 發(fā)表于 09-02 14:45 ?770次閱讀
    <b class='flag-5'>迅</b><b class='flag-5'>為</b>電子<b class='flag-5'>RK3588S</b><b class='flag-5'>開發(fā)板</b>第三章Buildroot系統(tǒng)功能測試

    玩轉RK3588開發(fā)板基于connector-split 功能實現(xiàn)聯(lián)動

    玩轉RK3588開發(fā)板基于connector-split 功能實現(xiàn)聯(lián)動
    的頭像 發(fā)表于 12-02 16:05 ?301次閱讀
    玩轉<b class='flag-5'>RK3588</b><b class='flag-5'>開發(fā)板</b>基于connector-split 功能實現(xiàn)<b class='flag-5'>多</b><b class='flag-5'>屏</b>聯(lián)動