專利名稱:串口讀卡器的識(shí)別方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明IC卡讀卡器領(lǐng)域,特別涉及一種串口讀卡器的識(shí)別方法和裝置。
背景技術(shù):
IC(Integrated Circuit,集成電路)卡是繼磁卡之后出現(xiàn)的又一種新型信息工 具。它是將一個(gè)微電子芯片嵌入符合ISO 7816標(biāo)準(zhǔn)的卡基中,做成卡片形式。目前,IC卡 已經(jīng)被廣泛地應(yīng)用到金融、交通、社保等很多領(lǐng)域,例如,我們經(jīng)常使用的公交車卡就是IC 卡的一種。 IC卡讀寫器(簡(jiǎn)稱讀卡器)是IC卡與應(yīng)用系統(tǒng)間的橋梁,在ISO國(guó)際標(biāo)準(zhǔn)中稱之 為IFD(Interface Device,接口設(shè)備)。 一般常見的IC卡采用射頻技術(shù)與IFD進(jìn)行通訊, 即IFD內(nèi)的CPU通過一個(gè)接口電路與IC卡相連并進(jìn)行通信。其中,IC卡接口電路是IC卡 讀寫器中至關(guān)重要的部分,根據(jù)實(shí)際應(yīng)用系統(tǒng)的不同,可選擇并行通信、半雙工串行通信和 I2C通信等不同的IC卡讀寫芯片。 在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下缺點(diǎn) IC卡讀寫器可以通過串行通信接口 (又稱串口 )與計(jì)算機(jī)的應(yīng)用系統(tǒng)建立連接,
但在建立連接的過程中,由于串口本身的特性,無法實(shí)現(xiàn)串口讀卡器的即插即用功能。
發(fā)明內(nèi)容
為了實(shí)現(xiàn)串口讀卡器的即插即用功能,本發(fā)明提供了一種識(shí)別串口讀卡器的方法 和裝置。所述技術(shù)方案如下 —種串口讀卡器的識(shí)別方法,所述方法包括 操作系統(tǒng)加載串口總線驅(qū)動(dòng),所述操作系統(tǒng)通過所述串口總線驅(qū)動(dòng)與串口進(jìn)行通 信; 所述串口總線驅(qū)動(dòng)向所述串口發(fā)送詢問指令,并接收所述串口返回的應(yīng)答信息, 所述詢問指令用于詢問與所述串口連接的讀卡器中卡座的設(shè)備類型,所述應(yīng)答信息中攜帶 與所述串口連接的讀卡器中卡座的設(shè)備類型和數(shù)目; 所述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng) 的物理設(shè)備對(duì)象,所述操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象安裝相應(yīng)類型的功能驅(qū)動(dòng)及在智能卡 服務(wù)中添加新的設(shè)備記錄; 所述串口總線驅(qū)動(dòng)向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令,并接收返 回的卡座狀態(tài)信息; 所述串口總線驅(qū)動(dòng)將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)。 所述操作系統(tǒng)加載串口總線驅(qū)動(dòng),通過所述串口總線驅(qū)動(dòng)與串口通信,具體包 括 操作系統(tǒng)加載串口總線驅(qū)動(dòng); 所述串口總線驅(qū)動(dòng)注冊(cè)串口類設(shè)備的即插即用回調(diào)通知;
串口驅(qū)動(dòng)發(fā)現(xiàn)串口,并創(chuàng)建串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象,通過即插即用管理器將所述 串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象返回給所述串口總線驅(qū)動(dòng); 所述串口總線驅(qū)動(dòng)判斷所述串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象是否正確;
如果正確,則所述串口總線驅(qū)動(dòng)創(chuàng)建串口對(duì)象,與所述串口進(jìn)行通信;
如果不正確,則不進(jìn)行操作。 所述串口總線驅(qū)動(dòng)中保存設(shè)備狀態(tài)標(biāo)識(shí)信息,用于標(biāo)識(shí)是否有設(shè)備與串口相連 接。 所述接收所述串口返回的應(yīng)答信息之后,所述方法還包括 所述串口總線驅(qū)動(dòng)判斷是否在規(guī)定時(shí)間內(nèi)接收到所述串口返回的應(yīng)答信息; 如果是,則繼續(xù)執(zhí)行所述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀
卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象的步驟; 如果否,判斷是否發(fā)生設(shè)備拔出動(dòng)作; 當(dāng)發(fā)生設(shè)備拔出動(dòng)作時(shí),修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為無設(shè)備連接狀態(tài);
當(dāng)未發(fā)生設(shè)備拔出動(dòng)作時(shí),結(jié)束操作。 所述接收所述串口返回的應(yīng)答信息之后,所述方法還包括 所述串口總線驅(qū)動(dòng)判斷與所述串口連接的讀卡器是否為新設(shè)備; 如果是,則修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為有設(shè)備連接狀態(tài),執(zhí)行所述操作系統(tǒng)所
述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備
對(duì)象的步驟; 如果否,則執(zhí)行所述向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令的步驟。
所述串口總線驅(qū)動(dòng)中保存卡座狀態(tài)標(biāo)識(shí)符,所述卡座狀態(tài)標(biāo)識(shí)符用于標(biāo)識(shí)與所述 串口對(duì)象相連接的讀卡器的卡座狀態(tài),所述卡座狀態(tài)包括有卡已上電、有卡未上電和無卡。 所述串口總線驅(qū)動(dòng)接收到所述卡座狀態(tài)信息之后,所述方法還包括
判斷所述卡座狀態(tài)信息是否發(fā)生改變; 如果發(fā)生改變,則修改所述串口驅(qū)動(dòng)總線中保存的卡座狀態(tài)標(biāo)識(shí)符后,執(zhí)行將所 述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)的步驟;
如果未發(fā)生改變,則結(jié)束操作。 所述串口總線驅(qū)動(dòng)將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)之后,所述方法還包 括當(dāng)所述卡座狀態(tài)信息為有卡已上電或者有卡未上電時(shí),所述功能驅(qū)動(dòng)生成卡片操作指 令; 所述功能驅(qū)動(dòng)判斷所述串口總線驅(qū)動(dòng)與所述讀卡器之間的通信信道是否被占 用; 如果是,則所述串口總線驅(qū)動(dòng)將所述卡片操作指令掛起,等待通信信道不被占 用; 如果否,則所述串口總線驅(qū)動(dòng)將所述卡片操作指令發(fā)送給所述讀卡器,并接收所
述讀卡器返回的操作指令執(zhí)行結(jié)果,返回給所述功能驅(qū)動(dòng)。 所述功能驅(qū)動(dòng)生成卡片操作指令,具體包括 所述功能驅(qū)動(dòng)將所述操作系統(tǒng)的上層應(yīng)用傳入的卡片操作請(qǐng)求進(jìn)行封裝,封裝成符合CCID協(xié)議報(bào)文格式的卡片操作指令。 所述功能驅(qū)動(dòng)判斷所述串口總線驅(qū)動(dòng)與所述讀卡器之間的通信信道是否被占用, 具體包括 所述功能驅(qū)動(dòng)向所述操作系統(tǒng)申請(qǐng)獨(dú)占通信信道的互斥量;
如果申請(qǐng)成功,則所述通信信道未被占用;
如果申請(qǐng)失敗,則所述通信信道已被占用。 所述串口總線驅(qū)動(dòng)將所述卡片操作指令發(fā)送給所述讀卡器,并接收所述讀卡器返 回的操作指令執(zhí)行結(jié)果,返回給所述功能驅(qū)動(dòng),具體包括 所述串口總線驅(qū)動(dòng)接收所述卡片操作指令,并按照串口傳輸協(xié)議報(bào)文格式的規(guī)定 對(duì)所述卡片操作指令進(jìn)行封裝,然后通過相應(yīng)的串口發(fā)送給所述讀卡器;
所述讀卡器對(duì)接收到的操作指令進(jìn)行解析后,根據(jù)所述操作指令對(duì)卡片進(jìn)行相應(yīng) 的操作; 所述讀卡器將所述操作指令的執(zhí)行結(jié)果進(jìn)行封裝,發(fā)送給所述串口總線驅(qū)動(dòng);
所述串口總線驅(qū)動(dòng)將所述執(zhí)行結(jié)果解析后發(fā)送給所述功能驅(qū)動(dòng)。
—種串口讀卡器的識(shí)別裝置,所述裝置包括 加載模塊,用于加載串口總線驅(qū)動(dòng),操作系統(tǒng)通過所述串口總線驅(qū)動(dòng)與串口進(jìn)行 通信; 第一收發(fā)模塊,用于向所述串口發(fā)送詢問指令,并接收所述串口返回的應(yīng)答信息, 所述詢問指令用于詢問與所述串口連接的讀卡器中卡座的設(shè)備類型,所述應(yīng)答信息中攜帶 與所述串口連接的讀卡器中卡座的設(shè)備類型和數(shù)目; 創(chuàng)建模塊,用于根據(jù)所述第一收發(fā)模塊接收到的應(yīng)答信息,為所述串口連接的讀 卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象,所述操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象安裝相應(yīng)類型的 功能驅(qū)動(dòng)及在智能卡服務(wù)中添加新的設(shè)備記錄; 第二收發(fā)模塊,用于向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令,并接收 返回的卡座狀態(tài)信息; 第三收發(fā)模塊,用于將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)。 所述加載模塊,具體包括 加載單元,用于加載串口總線驅(qū)動(dòng); 注冊(cè)單元,用于串口類設(shè)備的即插即用回調(diào)通知; 創(chuàng)建單元,用于發(fā)現(xiàn)串口,并創(chuàng)建串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象,通過即插即用管理器將
所述串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象返回給所述串口總線驅(qū)動(dòng); 判斷單元,用于判斷所述串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象是否正確; 如果正確,則所述串口總線驅(qū)動(dòng)創(chuàng)建串口對(duì)象,與所述串口進(jìn)行通信; 如果不正確,則不進(jìn)行操作。 所述裝置還包括第一保存模塊,用于保存設(shè)備狀態(tài)標(biāo)識(shí)信息,用于標(biāo)識(shí)是否有設(shè)
備與串口相連接。
所述裝置還包括 應(yīng)答消息判斷模塊,用于判斷是否在規(guī)定時(shí)間內(nèi)接收到所述串口返回的應(yīng)答信 息;
如果是,則所述創(chuàng)建模塊執(zhí)行根據(jù)所述第一收發(fā)模塊接收到的應(yīng)答信息,為所述 串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象的步驟;
如果否,判斷是否發(fā)生設(shè)備拔出動(dòng)作; 當(dāng)發(fā)生設(shè)備拔出動(dòng)作時(shí),所述第一保存模塊修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為無設(shè)備 連接狀態(tài); 當(dāng)未發(fā)生設(shè)備拔出動(dòng)作時(shí),結(jié)束操作。
所述裝置還包括 新設(shè)備判斷模塊,用于判斷與所述串口連接的讀卡器是否為新設(shè)備;
如果是,則所述第一保存模塊修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為有設(shè)備連接狀態(tài),所 述創(chuàng)建模塊執(zhí)行所述操作系統(tǒng)所述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀 卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象的步驟; 如果否,則第二收發(fā)模塊執(zhí)行所述向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài) 指令的步驟。 所述裝置還包括第二保存模塊,用于保存卡座狀態(tài)標(biāo)識(shí)符,所述卡座狀態(tài)標(biāo)識(shí)符
用于標(biāo)識(shí)與所述串口對(duì)象相連接的讀卡器的卡座狀態(tài),所述卡座狀態(tài)包括有卡已上電、有
卡未上電和無卡。
所述裝置還包括 卡座狀態(tài)判斷模塊,用于判斷所述卡座狀態(tài)信息是否發(fā)生改變; 如果發(fā)生改變,則所述第二保存模塊修改所述串口驅(qū)動(dòng)總線中保存的卡座狀態(tài)標(biāo)
識(shí)符后,所述第三收發(fā)模塊將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)的步驟; 如果未發(fā)生改變,則結(jié)束操作。
所述裝置還包括 生成指令模塊,用于當(dāng)所述卡座狀態(tài)信息為有卡已上電或者有卡未上電時(shí),所述 功能驅(qū)動(dòng)生成卡片操作指令; 通信通道判斷模塊,用于判斷所述串口總線驅(qū)動(dòng)與所述讀卡器之間的通信信道是 否被占用; 執(zhí)行模塊,用于如果所述通信通道判斷模塊的判斷結(jié)果為是,則將所述卡片操作 指令掛起,等待通信信道不被占用;如果所述通信通道判斷模塊的判斷結(jié)果為否,則將所述 卡片操作指令發(fā)送給所述讀卡器,并接收所述讀卡器返回的操作指令執(zhí)行結(jié)果,返回給所 述功能驅(qū)動(dòng)。 所述生成指令模塊,具體用于 將所述操作系統(tǒng)的上層應(yīng)用傳入的卡片操作請(qǐng)求進(jìn)行封裝,封裝成符合CCID協(xié) 議報(bào)文格式的卡片操作指令。 所述通信通道判斷模塊,具體用于向所述操作系統(tǒng)申請(qǐng)獨(dú)占通信信道的互斥 如果申請(qǐng)成功,則所述通信信道未被占用; 如果申請(qǐng)失敗,則所述通信信道已被占用。 本發(fā)明實(shí)施例提供的技術(shù)方案帶來的有益效果是 通過提供一種識(shí)別串口讀卡器的方法和裝置,可以使串口讀卡器在主機(jī)的串口上
9實(shí)現(xiàn)即插即用,既繼承了串口的優(yōu)點(diǎn)又具備了即插即用的便利特點(diǎn),實(shí)現(xiàn)過程中不需要對(duì) 現(xiàn)有的串口讀卡器進(jìn)行任何的修改,還可以支持串口多卡座讀卡器。
圖1是本發(fā)明實(shí)施例1中提供的 圖; 圖2是本發(fā)明實(shí)施例1中提供的- 圖3是本發(fā)明實(shí)施例1中提供的- 圖4是本發(fā)明實(shí)施例1中提供的- 圖5是本發(fā)明實(shí)施例2中提供的-
-種串口讀卡器的識(shí)別方法中的準(zhǔn)備工作流程
種串口總線驅(qū)動(dòng)的功能結(jié)構(gòu)示意圖; 種串口讀卡器的識(shí)別方法流程圖; 種串口讀卡器的識(shí)別方法中通訊方法流程圖; 種串口讀卡器的識(shí)別裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方
式作進(jìn)一步地詳細(xì)描述。
實(shí)施例1 本發(fā)明實(shí)施例1提供了一種識(shí)別串口讀卡器的方法,在本方法中,以計(jì)算機(jī)為執(zhí) 行主體,并設(shè)定該計(jì)算機(jī)中預(yù)先安裝了讀卡器設(shè)備的串口總線驅(qū)動(dòng),參見圖l,該方法包 括 步驟101 :操作系統(tǒng)加載串口總線驅(qū)動(dòng); 需要說明的是,步驟101中加載的串口總線驅(qū)動(dòng)可以如圖2所示,其中,串口總線 驅(qū)動(dòng)的主要用途在于1、對(duì)讀卡器進(jìn)行輪詢、創(chuàng)建設(shè)備及向功能驅(qū)動(dòng)上報(bào)設(shè)備狀態(tài)變化; 2、對(duì)功能驅(qū)動(dòng)生成的卡片操作指令按照串口傳輸協(xié)議報(bào)文格式的規(guī)定進(jìn)行封裝;3、操作指 令以及輪詢指令之間的互斥收發(fā);4、支持多卡槽讀卡器。 步驟102 :串口總線驅(qū)動(dòng)向即插即用管理器注冊(cè)串口類設(shè)備的即插即用回調(diào)通 知; 具體地,當(dāng)即插即用管理器接收到該串口類型設(shè)備的即插即用回調(diào)通知后,操作 系統(tǒng)檢查是否存在串口。
步驟103 :操作系統(tǒng)發(fā)現(xiàn)串口后加載串口驅(qū)動(dòng); 步驟104 :串口驅(qū)動(dòng)為每個(gè)發(fā)現(xiàn)的串口創(chuàng)建串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象,并通過即插
即用管理器將串口驅(qū)動(dòng)創(chuàng)建的串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象返回給串口總線驅(qū)動(dòng); 其中,如果操作系統(tǒng)的串口驅(qū)動(dòng)發(fā)現(xiàn)了多個(gè)串口,則創(chuàng)建多個(gè)相對(duì)應(yīng)的串口驅(qū)動(dòng)
實(shí)例設(shè)備對(duì)象,并通過即插即用管理器將多個(gè)串口驅(qū)動(dòng)實(shí)例對(duì)象逐個(gè)返回給串口總線驅(qū)
動(dòng); 當(dāng)主機(jī)中存在多個(gè)串口時(shí),可以分別使用C0M1、 C0M2等進(jìn)行區(qū)分。其中,COM即 COMmun i cat i on ,通{言的簡(jiǎn)稱。
步驟105 :串口總線驅(qū)動(dòng)接收回調(diào)的參數(shù); 其中,回調(diào)的參數(shù)具體為串口驅(qū)動(dòng)創(chuàng)建的串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象。
步驟106 :串口總線驅(qū)動(dòng)判斷回調(diào)的參數(shù)是否正確;
如果正確,則執(zhí)行步驟107 ;
如果不正確,則不進(jìn)行操作。 其中,判斷回調(diào)的參數(shù)是否正確具體可以為串口總線驅(qū)動(dòng)判斷接收到的串口驅(qū) 動(dòng)實(shí)例設(shè)備對(duì)象與操作系統(tǒng)指定的串口是否匹配,如果匹配,則回調(diào)的參數(shù)正確;如果不匹 配,則回調(diào)的參數(shù)不正確; 串口總線驅(qū)動(dòng)根據(jù)回調(diào)的次數(shù)判斷出是C0M1還是C0M2(第一次是C0M1,第二次則 是COM2),然后綜合注冊(cè)表信息判斷是否使用當(dāng)前串口 ;判斷注冊(cè)表中指定使用的是C0M1 還是COM2。 步驟107 :串口總線驅(qū)動(dòng)創(chuàng)建串口對(duì)象。 其中,串口總線驅(qū)動(dòng)創(chuàng)建的串口對(duì)象與串口驅(qū)動(dòng)創(chuàng)建的串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象相 對(duì)應(yīng)。 完成步驟107之后,即已完成識(shí)別串口讀卡器的方法的準(zhǔn)備工作。準(zhǔn)備工作完成 后,串口總線驅(qū)動(dòng)以輪詢的方式,每隔固定的一段時(shí)間向串口對(duì)象發(fā)送詢問指令,該詢問指 令用于檢查是否有串口讀卡器設(shè)備的插入或拔出。由于串口對(duì)象與串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象 之間的對(duì)應(yīng)關(guān)系,串口驅(qū)動(dòng)可以將該詢問指令下發(fā)給相應(yīng)的串口 。參見圖3,串口總線驅(qū)動(dòng) 的輪詢具體為 步驟301 :串口總線驅(qū)動(dòng)向串口發(fā)送詢問指令;其中,具體的詢問指令可以為Oxlb 01 00 77 78 00 ; 需要說明的是,串口總線驅(qū)動(dòng)向串口發(fā)送的詢問指令需要遵循串口通信協(xié)議的規(guī) 定,指令的第一個(gè)字節(jié)Oxlb是串口通信協(xié)議規(guī)定的下行指令頭,表示該指令為下行指令, 即由串口總線驅(qū)動(dòng)下發(fā)給串口的指令;指令中的第2個(gè)字節(jié)和第3個(gè)字節(jié)表示該指令中封 裝的數(shù)據(jù)的長(zhǎng)度,其中第2個(gè)字節(jié)表示數(shù)據(jù)長(zhǎng)度的低字節(jié),第3個(gè)字節(jié)表示數(shù)據(jù)長(zhǎng)度的高字 節(jié);指令中封裝的數(shù)據(jù)是從第4個(gè)字節(jié)開始到倒數(shù)第3個(gè)字節(jié);指令的倒數(shù)第l個(gè)字節(jié)和倒 數(shù)第2個(gè)字節(jié)是指令的校驗(yàn)和,由指令第2個(gè)字節(jié)數(shù)據(jù)至倒數(shù)第3個(gè)字節(jié)數(shù)據(jù)相加得到,其 中,倒數(shù)第一個(gè)字節(jié)是表示指令校驗(yàn)和的高字節(jié),倒數(shù)第2個(gè)字節(jié)表示指令校驗(yàn)和的低字 節(jié)。 其中,該詢問指令的第4字節(jié)0x77表示詢問讀卡器中卡座設(shè)備類型。
步驟302 :串口總線驅(qū)動(dòng)判斷是否在規(guī)定時(shí)間內(nèi)接收到串口返回的信息;
如果是,則執(zhí)行步驟303 ;
如果否,則執(zhí)行步驟311。 其中,如果當(dāng)前串口上連接著讀卡器設(shè)備,則當(dāng)讀卡器接收到串口總線驅(qū)動(dòng)發(fā)送
的詢問指令后,校驗(yàn)該指令是否正確,并向串口總線驅(qū)動(dòng)返回校驗(yàn)結(jié)果,校驗(yàn)結(jié)果中的數(shù)據(jù)
可以表示本次詢問指令執(zhí)行的結(jié)果是成功或者失敗。例如 Oxbl 01 00 00 01 00表示成功 Oxbl 01 00 01 02 00表示校驗(yàn)和錯(cuò)誤 Oxbl 01 00 02 03 00表示數(shù)據(jù)長(zhǎng)度超過271 Oxbl 01 00 03 04 00表示命令頭不正確 其中,如果讀卡器校驗(yàn)詢問指令正確,返回校驗(yàn)結(jié)果正確的同時(shí),讀卡器還要向串 口總線驅(qū)動(dòng)返回指令的執(zhí)行結(jié)果(即應(yīng)答信息)。具體的,應(yīng)答信息可以為Oxbl 01 00 43 44 00。在該應(yīng)答信息中,包含了卡座的類型標(biāo)識(shí),其中,Oxbl是串口通信協(xié)議規(guī)定的上行指令頭,0x43表示該讀卡器卡座類型是C型。 如果該讀卡器是多卡座讀卡器,則應(yīng)答消息可以為0xbl 03 00 43 43 53 dc 00,表示該讀卡器的三個(gè)卡座的卡座類型分別為C型、C型和S型。
步驟303 :串口總線驅(qū)動(dòng)判斷是否收到應(yīng)答消息;
若是,則執(zhí)行步驟304;
若不是,則執(zhí)行步驟311。
步驟304 :串口總線驅(qū)動(dòng)判斷當(dāng)前連接到串口的設(shè)備是否是新設(shè)備;
如果是,執(zhí)行步驟305;
如果不是,執(zhí)行步驟306。 具體的,在串口總線驅(qū)動(dòng)中,存在一個(gè)用于表示當(dāng)前串口是否連接設(shè)備的設(shè)備狀 態(tài)標(biāo)識(shí)信息,串口總線驅(qū)動(dòng)每次輪詢后更新該設(shè)備狀態(tài)標(biāo)識(shí)信息。 串口總線驅(qū)動(dòng)根據(jù)該設(shè)備狀態(tài)標(biāo)識(shí)信息判斷當(dāng)前連接到串口的設(shè)備是否是新設(shè) 備;如果設(shè)備狀態(tài)標(biāo)識(shí)信息為無設(shè)備連接狀態(tài),則可以判斷出當(dāng)前連接到串口的設(shè)備是新 設(shè)備,并在輪詢結(jié)束后修改設(shè)備狀態(tài)標(biāo)識(shí)為已有設(shè)備連接狀態(tài)。 步驟305 :串口總線驅(qū)動(dòng)分析讀卡器返回的應(yīng)答消息,并在主機(jī)中創(chuàng)建智能卡設(shè) 備; 其中,串口總線驅(qū)動(dòng)分析讀卡器返回的詢問指令的應(yīng)答信息,根據(jù)應(yīng)答信息中的
卡座類型和數(shù)目,在主機(jī)中創(chuàng)建智能卡設(shè)備,具體過程可以為 (1)串口總線驅(qū)動(dòng)為讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象; 這里需要說明的是,串口總線驅(qū)動(dòng)根據(jù)讀卡器的卡座類型和卡座個(gè)數(shù),為創(chuàng)建相 應(yīng)的物理設(shè)備對(duì)象。
(2)操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象安裝相應(yīng)類型的功能驅(qū)動(dòng); 這里需要說明的是,主機(jī)的操作系統(tǒng)為已創(chuàng)建的物理設(shè)備對(duì)象安裝并加載功能驅(qū) 動(dòng),每個(gè)功能驅(qū)動(dòng)注冊(cè)一個(gè)標(biāo)準(zhǔn)的智能卡驅(qū)動(dòng)庫(kù)。其中,操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象所對(duì) 應(yīng)的卡座安裝相應(yīng)類型的智能卡設(shè)備的功能驅(qū)動(dòng)(簡(jiǎn)稱功能驅(qū)動(dòng)),每個(gè)功能驅(qū)動(dòng)注冊(cè)一 個(gè)標(biāo)準(zhǔn)的智能卡驅(qū)動(dòng)庫(kù)。這里,智能卡驅(qū)動(dòng)庫(kù)用于提供一個(gè)標(biāo)準(zhǔn)的框架使功能驅(qū)動(dòng)與智能 卡服務(wù)的服務(wù)控制器進(jìn)行交互。 還需要說明的是,智能卡服務(wù)可以包括服務(wù)控制器、資源管理器和數(shù)據(jù)庫(kù)。其中, 服務(wù)控制器用于管理智能卡服務(wù)、接收來自功能驅(qū)動(dòng)的請(qǐng)求、管理資源管理器等;資源管理 器用于在數(shù)據(jù)庫(kù)中添加新的智能卡設(shè)備記錄、或者刪除已有的智能卡設(shè)備記錄等。
(3)在主機(jī)的智能卡服務(wù)中添加新的設(shè)備記錄。 其中,智能卡服務(wù)根據(jù)加載的功能驅(qū)動(dòng)和注冊(cè)的智能卡驅(qū)動(dòng)庫(kù),在智能卡服務(wù)的 資源管理器中創(chuàng)建新的智能卡設(shè)備記錄。
步驟306 :串口總線驅(qū)動(dòng)向讀卡器發(fā)送查詢卡座狀態(tài)指令; 其中,查詢卡座狀態(tài)指令具體可以為0x bl Oa 00 65 00 00 00 00 00 77 00 00 00 e6 00 ; 如果串口總線驅(qū)動(dòng)通過應(yīng)答信息判斷該讀卡器為多卡座讀卡器,則串口總線驅(qū)動(dòng) 生成與卡座數(shù)目相同的查詢卡座狀態(tài)的指令發(fā)送給讀卡器。以讀卡器有3個(gè)卡座為例,串 口總線驅(qū)動(dòng)向讀卡器發(fā)送的三條查詢卡座狀態(tài)的指令分別可以為
Ox bl Oa 00 65 00 00 00 00 00 77 00 00 00 e6 00表示查詢1號(hào)卡座狀態(tài)
Ox bl Oa 00 65 00 00 00 00 01 78 00 00 00 e8 00表示查詢2號(hào)卡座狀態(tài)
Ox bl Oa 00 65 00 00 00 00 02 79 00 00 00 ea 00表示查詢3號(hào)卡座狀態(tài)
其中,查詢卡座狀態(tài)的指令第9個(gè)字節(jié)表示卡座編號(hào),OO代表1號(hào)卡座、01代表2 號(hào)卡座,并以此類推。 需要說明的是,在串口總線驅(qū)動(dòng)中,保存有一個(gè)卡座狀態(tài)標(biāo)識(shí)符,用于保存讀卡器 中卡座的狀態(tài),每次輪詢后更新該卡座狀態(tài)標(biāo)識(shí)符;如果讀卡器是多卡座讀卡器,則串口總 線驅(qū)動(dòng)中會(huì)保存多個(gè)卡座狀態(tài)標(biāo)識(shí)符,與讀卡器中的卡座一一對(duì)應(yīng)??ㄗ鶢顟B(tài)標(biāo)識(shí)符可以 包括三個(gè)值,分別與讀卡器中卡座的三個(gè)狀態(tài)相對(duì)應(yīng),分別為有卡未上電、有卡已上電、無卡。
步驟307 :串口總線驅(qū)動(dòng)接收讀卡器返回的卡座狀態(tài)信息; 返回的卡座狀態(tài)信息可以為指令Oxbl Oa 00 81 00 00 00 00 00 al 00 00 00 2c 01 ; 其中,指令的第11個(gè)字節(jié)表示卡座的狀態(tài),其中,0x00表示有卡已上電、0x01標(biāo)識(shí) 有卡未上電、0x02表示無卡。因此,在上述具體的指令中,卡座狀態(tài)為有卡已上電。
步驟308 :串口總線驅(qū)動(dòng)根據(jù)卡座狀態(tài)信息判斷相應(yīng)的卡座狀態(tài)是否發(fā)生了改 變; 如果改變,執(zhí)行步驟309 ;
如果未改變,執(zhí)行步驟310 ; 其中,使用卡座狀態(tài)信息中攜帶的卡座狀態(tài)與串口總線驅(qū)動(dòng)保存的卡座狀態(tài)標(biāo)識(shí) 符進(jìn)行比較,如果不同,則卡座狀態(tài)發(fā)生了改變;如果相同,則卡座狀態(tài)未改變。
步驟309 :串口總線驅(qū)動(dòng)更新相應(yīng)的卡座狀態(tài)標(biāo)識(shí)符,并向功能驅(qū)動(dòng)報(bào)告相應(yīng)卡 座狀態(tài)的變化; 步驟310 :串口總線驅(qū)動(dòng)對(duì)讀卡器的一次輪詢結(jié)束;
步驟311 :串口總線驅(qū)動(dòng)判斷串口設(shè)備是否斷開連接;
如果是,則執(zhí)行步驟312 ;
如果否,則執(zhí)行步驟310。 其中,串口總線驅(qū)動(dòng)根據(jù)其內(nèi)部存儲(chǔ)的設(shè)備狀態(tài)標(biāo)識(shí)信息判斷串口設(shè)備是否斷開 連接;如果設(shè)備狀態(tài)標(biāo)識(shí)信息為已有設(shè)備連接狀態(tài),則可以判斷出串口設(shè)備已經(jīng)斷開連接, 即串口連接的設(shè)備已拔出。 步驟312 :串口總線驅(qū)動(dòng)向操作系統(tǒng)報(bào)告串口設(shè)備斷開連接,并更新設(shè)備狀態(tài)標(biāo) 識(shí)信息后執(zhí)行步驟310; 其中,串口總線驅(qū)動(dòng)修改設(shè)備狀態(tài)標(biāo)識(shí)信息為無設(shè)備連接狀態(tài),并向操作系統(tǒng)報(bào)
告串口設(shè)備已斷開連接,操作系統(tǒng)卸載功能驅(qū)動(dòng)、刪除系統(tǒng)中相應(yīng)的設(shè)備記錄。 串口總線驅(qū)動(dòng)通過輪詢發(fā)現(xiàn)串口讀卡器并與之建立連接后,串口總線驅(qū)動(dòng)接收功
能驅(qū)動(dòng)發(fā)送的卡片操作指令,并對(duì)卡片操作指令進(jìn)行封裝后發(fā)送給讀卡器、接收讀卡器返
回的指令執(zhí)行結(jié)果并解析后傳遞給功能驅(qū)動(dòng);或者,根據(jù)時(shí)間計(jì)數(shù)器的設(shè)定,向讀卡器定期
發(fā)送詢問指令、執(zhí)行輪詢。 當(dāng)主機(jī)通過串口總線驅(qū)動(dòng)的輪詢發(fā)現(xiàn)有讀卡器通過串口與其連接時(shí),在輪詢結(jié)束
13后,可以執(zhí)行以下操作,參見圖4 : 步驟401 :主機(jī)的上層應(yīng)用發(fā)送卡片操作請(qǐng)求給功能驅(qū)動(dòng); 具體地,主機(jī)的上層應(yīng)用根據(jù)PCSC (Personal Computer/Smart Card)協(xié)議標(biāo)準(zhǔn)調(diào)
用智能卡服務(wù),并向功能驅(qū)動(dòng)發(fā)送操作請(qǐng)求。
步驟402 :功能驅(qū)動(dòng)生成卡片操作指令; 具體的,功能驅(qū)動(dòng)將主機(jī)上層應(yīng)用發(fā)送的卡片操作請(qǐng)求進(jìn)行封裝,封裝成符合 CCID(USBChip/Smart Card Interface Devices-USB,芯片智能卡接口設(shè)備)協(xié)議報(bào)文格式 的卡片操作指令。如果讀卡器是多卡座讀卡器,則相應(yīng)地按照CCID協(xié)議的報(bào)文格式使用第 6個(gè)字節(jié)表示該功能驅(qū)動(dòng)所對(duì)應(yīng)的讀卡器卡座的編號(hào),0x00表示1號(hào)卡座、0x01表示2號(hào)卡 座,并以此類推。 例如,功能驅(qū)動(dòng)接收到上層應(yīng)用產(chǎn)生的取隨機(jī)數(shù)請(qǐng)求OxOO 84 00 00 08,功能驅(qū) 動(dòng)使用CCID協(xié)議報(bào)文格式規(guī)定的指令頭(0x6f 05 00 00 00 00 10 00 00 00)對(duì)接收到 的取隨機(jī)數(shù)請(qǐng)求進(jìn)行封裝,得到取隨機(jī)數(shù)的卡片操作指令為0x6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08。
步驟403 :功能驅(qū)動(dòng)判斷串口總線驅(qū)動(dòng)與讀卡器之間的通信信道是否被占用;
如果是,則執(zhí)行步驟404 ;
如果否,則執(zhí)行步驟405。 在本發(fā)明實(shí)施例中,由于串口總線驅(qū)動(dòng)不斷對(duì)串口進(jìn)行輪詢,因此,在主機(jī)與讀卡 器通信過程中需要使輪詢指令與卡片操作指令互斥地、有序地收發(fā),這一過程可以由串口 總線驅(qū)動(dòng)進(jìn)行控制。即功能驅(qū)動(dòng)生成卡片指令操作后,向操作系統(tǒng)申請(qǐng)標(biāo)志該功能驅(qū)動(dòng)能 夠獨(dú)占通信信道的互斥量,使得功能驅(qū)動(dòng)通過串口總線驅(qū)動(dòng)向讀卡器下發(fā)卡片操作指令, 與讀卡器進(jìn)行數(shù)據(jù)的交互、指令的收發(fā)等,并在完成后釋放互斥量; 或者,串口總線驅(qū)動(dòng)生成詢問指令后,向操作系統(tǒng)申請(qǐng)標(biāo)志輪詢過程中通信信道 為專用的互斥量,一次輪詢結(jié)束后釋放互斥量。 由此,判斷通信信道是否被占用的方法可以為判斷功能驅(qū)動(dòng)是否能夠成功獲得 互斥量; 如果功能驅(qū)動(dòng)能夠成功獲得互斥量,則說明通信信道沒有被占用或者處于空閑狀 態(tài); 如果功能驅(qū)動(dòng)獲得互斥量失敗,則說明通信信道已經(jīng)被占用。 步驟404 :串口總線驅(qū)動(dòng)將該功能驅(qū)動(dòng)的指令掛起,等待互斥量被釋放后,該功能 驅(qū)動(dòng)獲取互斥量; 如果獲取成功,則執(zhí)行步驟405 ; 如果獲取不成功,則繼續(xù)等待互斥量被釋放。 例如,當(dāng)前讀卡器中的卡座狀態(tài)為卡片已上電,功能驅(qū)動(dòng)封裝一條符合CCID協(xié)議 報(bào)文格式的取隨機(jī)數(shù)指令0x6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08 ;但是在 當(dāng)前時(shí)刻,串口總線驅(qū)動(dòng)正在對(duì)讀卡器進(jìn)行輪詢,由于互斥量被占用,功能驅(qū)動(dòng)獲取互斥量 失敗,則將該取隨機(jī)數(shù)指令掛起,等待串口總線驅(qū)動(dòng)輪詢結(jié)束后釋放互斥量,再重新獲取互 斥量,獲取成功后,執(zhí)行步驟405。
步驟4Q5 :串口總線驅(qū)動(dòng)接收功能驅(qū)動(dòng)生成的卡片操作指令,并保存互斥量;
功能驅(qū)動(dòng)獲取互斥量成功后,向串口總線驅(qū)動(dòng)發(fā)送生成的卡片操作指令,并且,將 互斥量保存到串口總線驅(qū)動(dòng),當(dāng)串口總線驅(qū)動(dòng)接收到該指令的執(zhí)行結(jié)果后釋放互斥量。
步驟406 :串口總線驅(qū)動(dòng)對(duì)接收到的功能驅(qū)動(dòng)生成的卡片操作指令進(jìn)行封裝后發(fā) 送給讀卡器; 其中,串口總線驅(qū)動(dòng)對(duì)接收到的功能驅(qū)動(dòng)生成的符合CCID協(xié)議報(bào)文格式的卡片 操作指令按照串口傳輸協(xié)議報(bào)文格式的規(guī)定進(jìn)行封裝,然后通過串口發(fā)送給讀卡器。
例如,串口總線驅(qū)動(dòng)對(duì)取隨機(jī)數(shù)指令進(jìn)行封裝,即在該指令前加3個(gè)字節(jié)的數(shù)據(jù), 依次是串口傳輸協(xié)議報(bào)文格式規(guī)定的下行指令頭Oxlb、指令長(zhǎng)度的低字節(jié)和指令長(zhǎng)度的高 字節(jié),并在該指令之后加2個(gè)字節(jié)的數(shù)據(jù),分別是校驗(yàn)和的低字節(jié)和校驗(yàn)和的高字節(jié),封裝 后的取隨機(jī)數(shù)指令可以為0x6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08
步驟407 :讀卡器對(duì)接收到的操作指令進(jìn)行解析; 在本發(fā)明實(shí)施例中,讀卡器對(duì)接收到的指令進(jìn)行解析,去掉該指令中串口傳 輸協(xié)議報(bào)文格式規(guī)定的部分,得到CCID協(xié)議報(bào)文格式的指令,如果該指令不是上、下 電指令,則進(jìn)一步將CCID協(xié)議報(bào)文格式規(guī)定的前10個(gè)字節(jié)的指令頭去掉,得到功能 APDU(ApplicationProtocol Data Unit應(yīng)用協(xié)議數(shù)據(jù)單元)。 例如,讀卡器解析取隨機(jī)數(shù)指令0x6f 05 00 00 00 00 10 00 00 00 00 84 00 00 08,得到CCID協(xié)議報(bào)文格式的指令0x6f 05 00 00 00 00 10 00 00 00 00 84 00 00
08,由于該指令不是上電指令或者下電指令,則讀卡器進(jìn)一步解析得到功能APDU :0x00 84 00 00 08。 步驟408 :讀卡器根據(jù)解析出的指令對(duì)卡片進(jìn)行相應(yīng)的操作,或?qū)⒔馕龊蟮闹噶?下發(fā)給卡片; 其中,讀卡器解析得到CCID協(xié)議報(bào)文格式的指令后,如果該指令是上電指令、或 者下電指令,則讀卡器對(duì)相應(yīng)的卡片進(jìn)行上電操作或者下電操作;或者將功能APDU發(fā)送給 讀卡器中的相應(yīng)卡片。 例如,如果主機(jī)解析出的操作指令為0x62 08 00 00 00 00 00 00 00 00,根據(jù) CCID協(xié)議報(bào)文格式規(guī)定可知該指令是卡片上電指令,于是,讀卡器根據(jù)該指令對(duì)指定的卡 片進(jìn)行上電操作。 步驟409 :讀卡器將指令的執(zhí)行結(jié)果進(jìn)行封裝,發(fā)送給串口總線驅(qū)動(dòng);
例如,讀卡器中的卡片執(zhí)行完成取隨機(jī)數(shù)指令后,返回給讀卡器的指令執(zhí)行結(jié) 果為0x2111 ca 2b 2e bb 20 05 90 00 ;讀卡器按照CCID協(xié)議報(bào)文格式的規(guī)定對(duì)卡 片返回的指令執(zhí)行結(jié)果進(jìn)行第一次封裝,得到0x21 11 ca 2b 2e bb 20 05 90 00 ;然 后,讀卡器按照串口傳輸協(xié)議報(bào)文格式的規(guī)定添加上行指令頭Oxbl以及指令長(zhǎng)度、校 驗(yàn)和,得到封裝后的指令執(zhí)行結(jié)果為Oxbl 14 00 80 Oa 00 00 00 00 10 00 00 00 2111ca2b2ebb20059000 73 03。 步驟410 :串口總線驅(qū)動(dòng)將讀卡器返回的指令執(zhí)行結(jié)果解析后發(fā)給功能驅(qū)動(dòng)。
串口總線驅(qū)動(dòng)將讀卡器返回的指令執(zhí)行結(jié)果按照串口傳輸協(xié)議進(jìn)行解析,將解析 得到的結(jié)果傳遞給功能驅(qū)動(dòng)。 本發(fā)明實(shí)施例提供了一種識(shí)別串口讀卡器的方法,可以使串口讀卡器在主機(jī)的串 口上實(shí)現(xiàn)即插即用,既繼承了串口的優(yōu)點(diǎn)又具備了即插即用的便利特點(diǎn),實(shí)現(xiàn)過程中不需要對(duì)現(xiàn)有的串口讀卡器進(jìn)行任何的修改,另外還可以支持串口多卡座讀卡器。
實(shí)施例2 本發(fā)明實(shí)施例2提供了一種識(shí)別串口讀卡器的裝置,參見圖5,該裝置包括
加載模塊501,用于加載串口總線驅(qū)動(dòng),操作系統(tǒng)通過串口總線驅(qū)動(dòng)與串口進(jìn)行通 信; 第一收發(fā)模塊502,用于向串口發(fā)送詢問指令,并接收串口返回的應(yīng)答信息,詢問 指令用于詢問與串口連接的讀卡器中卡座的設(shè)備類型,應(yīng)答信息中攜帶與串口連接的讀卡 器中卡座的設(shè)備類型和數(shù)目; 創(chuàng)建模塊503,用于根據(jù)第一收發(fā)模塊接收到的應(yīng)答信息,為串口連接的讀卡器的 卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象,操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象安裝相應(yīng)類型的功能驅(qū)動(dòng)及 在智能卡服務(wù)中添加新的設(shè)備記錄; 第二收發(fā)模塊504,用于向與串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令,并接收返 回的卡座狀態(tài)信息; 第三收發(fā)模塊505,用于將卡座狀態(tài)信息發(fā)送給功能驅(qū)動(dòng)。 其中,加載模塊501具體包括 加載單元,用于加載串口總線驅(qū)動(dòng); 注冊(cè)單元,用于串口類設(shè)備的即插即用回調(diào)通知; 創(chuàng)建單元,用于發(fā)現(xiàn)串口,并創(chuàng)建串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象,通過即插即用管理器將
串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象返回給串口總線驅(qū)動(dòng); 判斷單元,用于判斷串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象是否正確; 如果正確,則串口總線驅(qū)動(dòng)創(chuàng)建串口對(duì)象,與串口進(jìn)行通信; 如果不正確,則不進(jìn)行操作。
進(jìn)一步的,該裝置還包括 第一保存模塊,用于保存設(shè)備狀態(tài)標(biāo)識(shí)信息,用于標(biāo)識(shí)是否有設(shè)備與串口相連接。
進(jìn)一步的,該裝置還包括 應(yīng)答消息判斷模塊,用于判斷在規(guī)定時(shí)間內(nèi)是否接收到串口返回的應(yīng)答信息;
如果是,則第一收發(fā)模塊502執(zhí)行接收串口返回的應(yīng)答信息的步驟;
如果否,判斷是否發(fā)生設(shè)備拔出動(dòng)作; 當(dāng)發(fā)生設(shè)備拔出動(dòng)作時(shí),第一保存模塊修改設(shè)備狀態(tài)標(biāo)識(shí)信息為無設(shè)備連接狀 態(tài); 當(dāng)未發(fā)生設(shè)備拔出動(dòng)作時(shí),結(jié)束操作。
進(jìn)一步的,該裝置還包括 新設(shè)備判斷模塊,用于判斷與串口連接的讀卡器是否為新設(shè)備; 如果是,則第一保存模塊修改設(shè)備狀態(tài)標(biāo)識(shí)信息為有設(shè)備連接狀態(tài),創(chuàng)建模塊503
執(zhí)行操作系統(tǒng)串口總線驅(qū)動(dòng)根據(jù)應(yīng)答信息,為串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)
備對(duì)象的步驟; 如果否,則第二收發(fā)模塊504執(zhí)行向與串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令 的步驟。 進(jìn)一步的,該裝置還包括
第二保存模塊,用于保存卡座狀態(tài)標(biāo)識(shí)符,卡座狀態(tài)標(biāo)識(shí)符用于標(biāo)識(shí)與串口對(duì)象
相連接的讀卡器的卡座狀態(tài),卡座狀態(tài)包括有卡已上電、有卡未上電和無卡。
進(jìn)一步的,該裝置還包括 卡座狀態(tài)判斷模塊,用于判斷卡座狀態(tài)信息是否發(fā)生改變; 如果發(fā)生改變,則第二保存模塊修改串口驅(qū)動(dòng)總線中保存的卡座狀態(tài)標(biāo)識(shí)符后, 第三收發(fā)模塊將卡座狀態(tài)信息發(fā)送給功能驅(qū)動(dòng)的步驟;
如果未發(fā)生改變,則結(jié)束操作。
進(jìn)一步的,該裝置還包括 生成指令模塊,用于當(dāng)卡座狀態(tài)信息為有卡已上電或者有卡未上電時(shí),功能驅(qū)動(dòng) 生成卡片操作指令; 通信通道判斷模塊,用于判斷串口總線驅(qū)動(dòng)與讀卡器之間的通信信道是否被占 用; 執(zhí)行模塊,用于如果通信通道判斷模塊的判斷結(jié)果為是,則將卡片操作指令掛起, 等待通信信道不被占用;如果通信通道判斷模塊的判斷結(jié)果為否,則將卡片操作指令發(fā)送 給讀卡器,并接收讀卡器返回的操作指令執(zhí)行結(jié)果,返回給功能驅(qū)動(dòng)。
其中,生成指令模塊具體用于 將操作系統(tǒng)的上層應(yīng)用傳入的卡片操作請(qǐng)求進(jìn)行封裝,封裝成符合CCID協(xié)議報(bào) 文格式的卡片操作指令。
其中,通信通道判斷模塊具體用于向操作系統(tǒng)申請(qǐng)獨(dú)占通信信道的互斥量;
如果申請(qǐng)成功,則通信信道未被占用;
如果申請(qǐng)失敗,則通信信道已被占用。 本發(fā)明實(shí)施例提供了一種識(shí)別串口讀卡器的裝置,可以使串口讀卡器在主機(jī)的串
口上實(shí)現(xiàn)即插即用,既繼承了串口的優(yōu)點(diǎn)又具備了即插即用的便利特點(diǎn),實(shí)現(xiàn)過程中不需
要對(duì)現(xiàn)有的串口讀卡器進(jìn)行任何的修改,另外還可以支持串口多卡座讀卡器。 以上僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則
之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種串口讀卡器的識(shí)別方法,其特征在于,所述方法包括操作系統(tǒng)加載串口總線驅(qū)動(dòng),所述操作系統(tǒng)通過所述串口總線驅(qū)動(dòng)與串口進(jìn)行通信;所述串口總線驅(qū)動(dòng)向所述串口發(fā)送詢問指令,并接收所述串口返回的應(yīng)答信息,所述詢問指令用于詢問與所述串口連接的讀卡器中卡座的設(shè)備類型,所述應(yīng)答信息中攜帶與所述串口連接的讀卡器中卡座的設(shè)備類型和數(shù)目;所述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象,所述操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象安裝相應(yīng)類型的功能驅(qū)動(dòng)及在智能卡服務(wù)中添加新的設(shè)備記錄;所述串口總線驅(qū)動(dòng)向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令,并接收返回的卡座狀態(tài)信息;所述串口總線驅(qū)動(dòng)將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)。
2. 如權(quán)利要求l所述的串口讀卡器的識(shí)別方法,其特征在于,所述操作系統(tǒng)加載串口 總線驅(qū)動(dòng),通過所述串口總線驅(qū)動(dòng)與串口通信,具體包括操作系統(tǒng)加載串口總線驅(qū)動(dòng);所述串口總線驅(qū)動(dòng)注冊(cè)串口類設(shè)備的即插即用回調(diào)通知;串口驅(qū)動(dòng)發(fā)現(xiàn)串口 ,并創(chuàng)建串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象,通過即插即用管理器將所述串口 驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象返回給所述串口總線驅(qū)動(dòng);所述串口總線驅(qū)動(dòng)判斷所述串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象是否正確; 如果正確,則所述串口總線驅(qū)動(dòng)創(chuàng)建串口對(duì)象,與所述串口進(jìn)行通信; 如果不正確,則不進(jìn)行操作。
3. 如權(quán)利要求1所述的串口讀卡器的識(shí)別方法,其特征在于,所述串口總線驅(qū)動(dòng)中保 存設(shè)備狀態(tài)標(biāo)識(shí)信息,用于標(biāo)識(shí)是否有設(shè)備與串口相連接。
4. 如權(quán)利要求3所述的串口讀卡器的識(shí)別方法,其特征在于,所述接收所述串口返回 的應(yīng)答信息的同時(shí),所述方法還包括所述串口總線驅(qū)動(dòng)判斷是否在規(guī)定時(shí)間內(nèi)接收到所述串口返回的應(yīng)答信息; 如果是,則繼續(xù)執(zhí)行所述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀卡器 的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象的步驟; 如果否,判斷是否發(fā)生設(shè)備拔出動(dòng)作;當(dāng)發(fā)生設(shè)備拔出動(dòng)作時(shí),修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為無設(shè)備連接狀態(tài); 當(dāng)未發(fā)生設(shè)備拔出動(dòng)作時(shí),結(jié)束操作。
5.如權(quán)利要求3所述的串口讀卡器的識(shí)別方法,其特征在于,所述接收所述串口返回 的應(yīng)答信息之后,所述方法還包括所述串口總線驅(qū)動(dòng)判斷與所述串口連接的讀卡器是否為新設(shè)備;如果是,則修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為有設(shè)備連接狀態(tài),執(zhí)行所述操作系統(tǒng)所述串 口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象 的步驟;如果否,則執(zhí)行所述向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令的步驟。
6. 如權(quán)利要求1所述的串口讀卡器的識(shí)別方法,其特征在于,所述串口總線驅(qū)動(dòng)中保 存卡座狀態(tài)標(biāo)識(shí)符,所述卡座狀態(tài)標(biāo)識(shí)符用于標(biāo)識(shí)與所述串口對(duì)象相連接的讀卡器的卡座狀態(tài),所述卡座狀態(tài)包括有卡已上電、有卡未上電和無卡。
7. 如權(quán)利要求6所述的串口讀卡器的識(shí)別方法,其特征在于,所述串口總線驅(qū)動(dòng)接收 到所述卡座狀態(tài)信息之后,所述方法還包括判斷所述卡座狀態(tài)信息是否發(fā)生改變;如果發(fā)生改變,則修改所述串口驅(qū)動(dòng)總線中保存的卡座狀態(tài)標(biāo)識(shí)符后,執(zhí)行將所述卡 座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)的步驟; 如果未發(fā)生改變,則結(jié)束操作。
8. 如權(quán)利要求1所述的串口讀卡器的識(shí)別方法,其特征在于,所述串口總線驅(qū)動(dòng)將所 述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)之后,所述方法還包括當(dāng)所述卡座狀態(tài)信息為有卡 已上電或者有卡未上電時(shí),所述功能驅(qū)動(dòng)生成卡片操作指令;所述功能驅(qū)動(dòng)判斷所述串口總線驅(qū)動(dòng)與所述讀卡器之間的通信信道是否被占用; 如果是,則所述串口總線驅(qū)動(dòng)將所述卡片操作指令掛起,等待通信信道不被占用; 如果否,則所述串口總線驅(qū)動(dòng)將所述卡片操作指令發(fā)送給所述讀卡器,并接收所述讀 卡器返回的操作指令執(zhí)行結(jié)果,返回給所述功能驅(qū)動(dòng)。
9. 如權(quán)利要求8所述的串口讀卡器的識(shí)別方法,其特征在于,所述功能驅(qū)動(dòng)生成卡片 操作指令,具體包括所述功能驅(qū)動(dòng)將所述操作系統(tǒng)的上層應(yīng)用傳入的卡片操作請(qǐng)求進(jìn)行封裝,封裝成符合 CCID協(xié)議報(bào)文格式的卡片操作指令。
10. 如權(quán)利要求8所述的串口讀卡器的識(shí)別方法,其特征在于,所述功能驅(qū)動(dòng)判斷所述 串口總線驅(qū)動(dòng)與所述讀卡器之間的通信信道是否被占用,具體包括所述功能驅(qū)動(dòng)向所述操作系統(tǒng)申請(qǐng)獨(dú)占通信信道的互斥量; 如果申請(qǐng)成功,則所述通信信道未被占用; 如果申請(qǐng)失敗,則所述通信信道已被占用。
11. 如權(quán)利要求8所述的串口讀卡器的識(shí)別方法,其特征在于,所述串口總線驅(qū)動(dòng)將所 述卡片操作指令發(fā)送給所述讀卡器,并接收所述讀卡器返回的操作指令執(zhí)行結(jié)果,返回給 所述功能驅(qū)動(dòng),具體包括所述串口總線驅(qū)動(dòng)接收所述卡片操作指令,并按照串口傳輸協(xié)議報(bào)文格式的規(guī)定對(duì)所 述卡片操作指令進(jìn)行封裝,然后通過相應(yīng)的串口發(fā)送給所述讀卡器;所述讀卡器對(duì)接收到的操作指令進(jìn)行解析后,根據(jù)所述操作指令對(duì)卡片進(jìn)行相應(yīng)的操作;所述讀卡器將所述操作指令的執(zhí)行結(jié)果進(jìn)行封裝,發(fā)送給所述串口總線驅(qū)動(dòng); 所述串口總線驅(qū)動(dòng)將所述執(zhí)行結(jié)果解析后發(fā)送給所述功能驅(qū)動(dòng)。
12. —種串口讀卡器的識(shí)別裝置,其特征在于,所述裝置包括加載模塊,用于加載串口總線驅(qū)動(dòng),操作系統(tǒng)通過所述串口總線驅(qū)動(dòng)與串口進(jìn)行通信;第一收發(fā)模塊,用于向所述串口發(fā)送詢問指令,并接收所述串口返回的應(yīng)答信息,所述 詢問指令用于詢問與所述串口連接的讀卡器中卡座的設(shè)備類型,所述應(yīng)答信息中攜帶與所 述串口連接的讀卡器中卡座的設(shè)備類型和數(shù)目;創(chuàng)建模塊,用于根據(jù)所述第一收發(fā)模塊接收到的應(yīng)答信息,為所述串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象,所述操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象安裝相應(yīng)類型的功能 驅(qū)動(dòng)及在智能卡服務(wù)中添加新的設(shè)備記錄;第二收發(fā)模塊,用于向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令,并接收返回 的卡座狀態(tài)信息;第三收發(fā)模塊,用于將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)。
13. 如權(quán)利要求12所述的串口讀卡器的識(shí)別裝置,其特征在于,所述加載模塊,具體包括加載單元,用于加載串口總線驅(qū)動(dòng); 注冊(cè)單元,用于串口類設(shè)備的即插即用回調(diào)通知;創(chuàng)建單元,用于發(fā)現(xiàn)串口 ,并創(chuàng)建串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象,通過即插即用管理器將所述 串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象返回給所述串口總線驅(qū)動(dòng);判斷單元,用于判斷所述串口驅(qū)動(dòng)實(shí)例設(shè)備對(duì)象是否正確; 如果正確,則所述串口總線驅(qū)動(dòng)創(chuàng)建串口對(duì)象,與所述串口進(jìn)行通信; 如果不正確,則不進(jìn)行操作。
14. 如權(quán)利要求12所述的串口讀卡器的識(shí)別裝置,其特征在于,所述裝置還包括第一 保存模塊,用于保存設(shè)備狀態(tài)標(biāo)識(shí)信息,用于標(biāo)識(shí)是否有設(shè)備與串口相連接。
15. 如權(quán)利要求14所述的串口讀卡器的識(shí)別裝置,其特征在于,所述裝置還包括 應(yīng)答消息判斷模塊,用于判斷是否在規(guī)定時(shí)間內(nèi)接收到所述串口返回的應(yīng)答信息; 如果是,則所述創(chuàng)建模塊執(zhí)行根據(jù)所述第一收發(fā)模塊接收到的應(yīng)答信息,為所述串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象的步驟; 如果否,判斷是否發(fā)生設(shè)備拔出動(dòng)作;當(dāng)發(fā)生設(shè)備拔出動(dòng)作時(shí),所述第一保存模塊修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為無設(shè)備連接 狀態(tài);當(dāng)未發(fā)生設(shè)備拔出動(dòng)作時(shí),結(jié)束操作。
16. 如權(quán)利要求14所述的串口讀卡器的識(shí)別裝置,其特征在于,所述裝置還包括 新設(shè)備判斷模塊,用于判斷與所述串口連接的讀卡器是否為新設(shè)備;如果是,則第一保存模塊修改所述設(shè)備狀態(tài)標(biāo)識(shí)信息為有設(shè)備連接狀態(tài),所述創(chuàng)建模 塊執(zhí)行所述操作系統(tǒng)所述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀卡器的卡 座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象的步驟;如果否,則第二收發(fā)模塊執(zhí)行所述向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令 的步驟。
17. 如權(quán)利要求12所述的串口讀卡器的識(shí)別裝置,其特征在于,所述裝置還包括第二 保存模塊,用于保存卡座狀態(tài)標(biāo)識(shí)符,所述卡座狀態(tài)標(biāo)識(shí)符用于標(biāo)識(shí)與所述串口對(duì)象相連 接的讀卡器的卡座狀態(tài),所述卡座狀態(tài)包括有卡已上電、有卡未上電和無卡。
18. 如權(quán)利要求17所述的串口讀卡器的識(shí)別裝置,其特征在于,所述裝置還包括 卡座狀態(tài)判斷模塊,用于判斷所述卡座狀態(tài)信息是否發(fā)生改變;如果發(fā)生改變,則所述第二保存模塊修改所述串口驅(qū)動(dòng)總線中保存的卡座狀態(tài)標(biāo)識(shí)符 后,所述第三收發(fā)模塊將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)的步驟; 如果未發(fā)生改變,則結(jié)束操作。
19. 如權(quán)利要求12所述的串口讀卡器的識(shí)別裝置,其特征在于,所述裝置還包括 生成指令模塊,用于當(dāng)所述卡座狀態(tài)信息為有卡已上電或者有卡未上電時(shí),所述功能驅(qū)動(dòng)生成卡片操作指令;通信通道判斷模塊,用于判斷所述串口總線驅(qū)動(dòng)與所述讀卡器之間的通信信道是否被 占用;執(zhí)行模塊,用于如果所述通信通道判斷模塊的判斷結(jié)果為是,則將所述卡片操作指令 掛起,等待通信信道不被占用;如果所述通信通道判斷模塊的判斷結(jié)果為否,則將所述卡片 操作指令發(fā)送給所述讀卡器,并接收所述讀卡器返回的操作指令執(zhí)行結(jié)果,返回給所述功 能驅(qū)動(dòng)。
20. 如權(quán)利要求19所述的串口讀卡器的識(shí)別裝置,其特征在于,所述生成指令模塊,具 體用于將所述操作系統(tǒng)的上層應(yīng)用傳入的卡片操作請(qǐng)求進(jìn)行封裝,封裝成符合CCID協(xié)議報(bào) 文格式的卡片操作指令。
21. 如權(quán)利要求19所述的串口讀卡器的識(shí)別裝置,其特征在于,所述通信通道判斷模 塊,具體用于向所述操作系統(tǒng)申請(qǐng)獨(dú)占通信信道的互斥量;如果申請(qǐng)成功,則所述通信信道未被占用; 如果申請(qǐng)失敗,則所述通信信道已被占用。
全文摘要
本發(fā)明公開了一種串口讀卡器的識(shí)別方法和裝置,涉及IC卡讀卡器領(lǐng)域。方法包括操作系統(tǒng)加載串口總線驅(qū)動(dòng);串口總線驅(qū)動(dòng)向所述串口發(fā)送詢問指令,并接收所述串口返回的應(yīng)答信息;所述串口總線驅(qū)動(dòng)根據(jù)所述應(yīng)答信息,為所述串口連接的讀卡器的卡座創(chuàng)建對(duì)應(yīng)的物理設(shè)備對(duì)象,所述操作系統(tǒng)為每個(gè)物理設(shè)備對(duì)象安裝相應(yīng)類型的功能驅(qū)動(dòng)及在智能卡服務(wù)中添加新的設(shè)備記錄;所述串口總線驅(qū)動(dòng)向與所述串口連接的讀卡器發(fā)送查詢卡座狀態(tài)指令,并接收返回的卡座狀態(tài)信息;所述串口總線驅(qū)動(dòng)將所述卡座狀態(tài)信息發(fā)送給所述功能驅(qū)動(dòng)。
文檔編號(hào)G06K7/00GK101719212SQ200910242449
公開日2010年6月2日 申請(qǐng)日期2009年12月11日 優(yōu)先權(quán)日2009年12月11日
發(fā)明者于華章, 陸舟 申請(qǐng)人:北京飛天誠(chéng)信科技有限公司