基于Android的機頂盒CAS系統(tǒng)的開發(fā)
2.3 智能卡任務(wù)模塊
智能卡的通信標(biāo)準(zhǔn)有T0和T1兩種,T0按字節(jié)傳送,T1按塊傳送,而在設(shè)計過程中通常支持兩種協(xié)議。一般采用I2C總線通信,而智能卡內(nèi)部一般沒有上拉電阻,所以在電路設(shè)計過程中,SCL和SDA的引腳處必須加上拉電阻,否則無法正常通信。根據(jù)通信協(xié)議,如果要對智能卡數(shù)據(jù)讀寫操作,首先要發(fā)送5字節(jié)的命令字,這5字節(jié)命令字依次為CLA、INS、P1、P2、P3,其中CLA為指令類型,INS為命令符,P1、P2為操作文件位置,P3為后續(xù)字符數(shù)。智能卡接收到命令符就可以根據(jù)命令種類對其后續(xù)數(shù)據(jù)進(jìn)行操作,同時智能卡就可以發(fā)出兩個字節(jié)W1、W2的應(yīng)答符。如果成功,W1、W2分別為0x90、0x00;如果不成功則會返回相應(yīng)的代碼,以便給開發(fā)者提供調(diào)試。因為智能卡內(nèi)部十分復(fù)雜,篇幅有限,所以想深入了解原理的話可以參考智能卡標(biāo)準(zhǔn),這里僅介紹機頂盒操作智能卡過程的設(shè)計。本文引用地址:http://www.ex-cimer.com/article/154097.htm
如圖6所示,在智能卡任務(wù)模塊中,在系統(tǒng)啟動之初,未進(jìn)入文件系統(tǒng)之前,就要對智能卡進(jìn)行初始化,分配內(nèi)存池,強制為智能卡復(fù)位,從而選擇通信類型(T0或T1),全部完成之后就可以進(jìn)入文件系統(tǒng)。通過CAS_CARD_TASK()為智能卡建立線程,在其線程內(nèi)部使用CAS_CARD _ReceiveMessage()接收來自EMM或者ECM的命令字。如果合法,通過CAS_CARD_SendMessage()可以把應(yīng)答字給其兩個模塊,同時通知其他兩個模塊發(fā)送操作數(shù),若是EMM則到此結(jié)束,若為ECM則智能卡會把解密的CW通過CAS_CARD_SendMessage()發(fā)送給機頂盒。
2.4 其他細(xì)節(jié)設(shè)計
CAS系統(tǒng)除了最重要的解擾以外,還有其他重要的附屬功能,如郵件、在線付費、在線充值、節(jié)目點播、區(qū)域限制、用戶管理。這些信息都存儲在EMM表中,所以EMM和ECM表的解析也是一個十分重要的步驟,只有正確地提取出 EMM中的CA信息,才能順利地進(jìn)行下一步的操作。根據(jù)MPEG-2標(biāo)準(zhǔn)和PSI/SI協(xié)議,以及智能卡廠商的提供功能表,就能設(shè)計出EMM和ECM的解析函數(shù)。
表1列出了一個通用CA的描述符。
由于每個智能卡廠商的填充數(shù)據(jù)不一樣,所以必須根據(jù)廠商的定義再去提取數(shù)據(jù)、處理數(shù)據(jù)。由于筆者參與設(shè)計的是某公司提供的智能卡,所以數(shù)據(jù)的格式也都以它為標(biāo)準(zhǔn)。最終設(shè)計包括12個源文件、5個頭文件。
3 CAS子系統(tǒng)Android的移植
CAS終端子系統(tǒng)起初沒計由于涉及到與底層交互,采用的是C語言。如果想要使上層的JAVA環(huán)境調(diào)用其API,就要遵循JNI規(guī)范添加新的頭文件,使其應(yīng)用層能夠方便地調(diào)用。同時Google在設(shè)計Androld之初就提供了NDK套件,有著獨有的交叉編譯器,使得原有的許多C語言編寫的驅(qū)動、應(yīng)用程序可十分方便地移植到Android系統(tǒng)中。
評論