簡介

在看HDMI的spec前,先來定義幾個名詞:

Broadcast Message: 送到logical address 15,所有device都可收到
Clear: 設為empty/undefined state, physical address則設為F.F.F.F,logical address為15
Destination: 收cec message的device
Follower:收到cec message且需做response
Initiator: 送cec message且等待response
Source Device: 正在提供av streaming的device
TV: 可顯示hdmi signal的device,通常不會做output

一般透過CEC的訊息傳遞流程為,使用者按搖控器,裝置收到後,檢查系統的狀態,若有需要,則發送CEC message給其他裝置。若有需要,其他裝置傳送response,如下圖所示。

cec example flow

 

Frame description

由一個start bit 開始,接下來是一個header block以及數個data block。每個block是10 bits,而一個frame 最多可有16個block。每個block的最後兩個bit都EOM(End Of Message)及ACK。Header block放source和destination的位址,各4bits,其值為0~15,意即最多只能有15個裝置。Data block則可放opcode,用來指明是哪種訊息,及該訊息可能需要的參數,參見下表。

 

cec frame description

 

block struc

One touch display

以one touch display這個feature為例,看看spec裡如何定義這個feature。這個特色是只需按一個鈕,讓裝置成為active source並播放。此特色使用了3種訊息:<Active Source>, <Image View On>, <Text View On>:

1. 當裝置需要將其A/V顯示出來時,送<Image View On>至電視。

2. 電視檢查本身狀態:

    a. 若在standby,則開機

    b. 切換模式,如text display state轉至image display state。legay tv如圖文電視(teletext),是在每個frame的中間傳送一些圖文訊息,如氣象,股市等。使用者可像翻雜誌一樣去流灠這些訊息,此為text display state。在收到<Image View On>後,則切回image display state。

3. 若此時有menu (應該是一些設定的UI,如亮度對比什麼的),則仍然將此menu保留。相對於此,<Text View On>與<Image View On>的差別只在於<Text View On>將此menu移除。因此在spec中也說明<Text View On>與<Image View On>至少需實作一種。

 

Other actions

在上述的流程中,還有一些細節如timing等,spec也有定義。當然細節不只有timing,只是一項功能在普及前,都會有些灰色地帶,而產生相容性的問題。在spec中想到了一種情況: 當電視從standy轉到active時,需要一些時間。此時收到的<active source>需buffer起來,等到state轉換後再來做判斷。如果無法做buffer的動作(任何原因),仍可發送<request active source>來查詢。

當裝置成為新的source時 (已有東西要播放),則廣播<active source>。當前的active source則需採取適當動作,如暫停播放。

 

Example

driver層實作message的tx和rx。ap層透過read/write/ioctl其device node (如/dev/misc/cec)傳送。ap層範例如下,driver可看kernel。

 

STM32F10xxx的實作

 

 

kezeodsnx 發表在 痞客邦 PIXNET 留言(0) 人氣()