本發(fā)明專利技術(shù)實施例公開了一種檢測安全數(shù)碼卡熱插拔的方法,還提供了相應(yīng)的裝置。本發(fā)明專利技術(shù)中通過以預(yù)設(shè)的頻率向讀卡器中的安全數(shù)碼卡發(fā)送詢問命令,接收根據(jù)該詢問命令返回的命令返回消息,然后根據(jù)該命令返回消息判斷該安全數(shù)碼卡是否被拔除或者被插入;能夠及時檢測到安全數(shù)碼卡的熱插拔狀態(tài),從而為上層的應(yīng)用提供準(zhǔn)確的數(shù)碼卡狀態(tài)。
【技術(shù)實現(xiàn)步驟摘要】
本專利技術(shù)涉及計算機(jī)領(lǐng)域,特別是涉及一種檢測安全數(shù)碼卡熱插拔的方法及裝置。
技術(shù)介紹
安全數(shù)碼卡(SD, Secure Digital Memory Card) 一般是通過SD讀卡器轉(zhuǎn)為USB設(shè)備來操作的。當(dāng)SD讀卡器仍然插在系統(tǒng)的USB接口上,而SD卡被用戶從SD讀卡器中拔除時,目前的Linux系統(tǒng)是無法偵測到這種狀況的。在實際應(yīng)用中,如果SD卡已經(jīng)被用戶從SD讀卡器中拔除了,而上層應(yīng)用程序并不知道該SD卡已經(jīng)被拔除,始終認(rèn)為該SD卡仍然可讀可寫,從而在實際上的讀寫操作時,既無法讀取數(shù)據(jù)也無法寫入數(shù)據(jù),從而導(dǎo)致讀寫失敗。因此,由于偵測不到SD卡的插拔事件,往往會給一些應(yīng)用程序造成混淆。
技術(shù)實現(xiàn)思路
本專利技術(shù)主要解決的技術(shù)問題是提供一種檢測安全數(shù)碼卡熱插拔的方法,本專利技術(shù)還提供相應(yīng)的檢測安全數(shù)碼卡熱插拔的裝置,能夠及時檢測到安全數(shù)碼卡的熱插拔,從而為上層的應(yīng)用提供準(zhǔn)確的數(shù)碼卡狀態(tài)。一種檢測安全數(shù)碼卡熱插拔的方法,其特征在于,包括當(dāng)系統(tǒng)有讀卡器插入時,以預(yù)設(shè)的頻率向所述讀卡器中的安全數(shù)碼卡發(fā)送詢問命令;接收根據(jù)所述詢問命令返回的本次命令返回消息,所述命令返回消息包括安全數(shù)碼卡存在的消息或安全數(shù)碼卡不存在的消息;根據(jù)保存在本地的上一次接收的命令返回消息和所述本次命令返回消息判斷在所述讀卡器上是否有安全數(shù)碼卡被拔除或者被插入;如果上一次接收的是安全數(shù)碼卡存在的消息,本次接收的是安全數(shù)碼卡不存在的消息,則檢測出安全數(shù)碼卡被拔除;如果上一次接收的是安全數(shù)碼卡不存在的消息,本次接收的是安全數(shù)碼卡存在的消息,則檢測出安全數(shù)碼卡被插入。一種檢測安全數(shù)碼卡熱插拔的裝置,其特征在于,包括發(fā)送模塊,用于當(dāng)系統(tǒng)有讀卡器插入時,以預(yù)設(shè)的頻率向所述讀卡器中的安全數(shù)碼卡發(fā)送詢問命令;接收模塊,用于接收根據(jù)所述詢問命令返回的命令返回消息,所述命令返回消息包括安全數(shù)碼卡存在的消息或安全數(shù)碼卡不存在的消息;判斷模塊,耦接于所述接收模塊,用于根據(jù)所述命令返回消息判斷所述安全數(shù)碼卡是否被拔除或者被插入,當(dāng)上次接收的是安全數(shù)碼卡存在的消息,本次接收的是安全數(shù)碼卡不存在的消息時,則檢測出所述安全數(shù)碼卡被拔除;當(dāng)上次接收的是安全數(shù)碼卡不存在的消息,本次接收的是安全數(shù)碼卡存在的消息時,則檢測出所述安全數(shù)碼卡被插入。、本專利技術(shù)實施例中通過以預(yù)設(shè)的頻率向讀卡器中的安全數(shù)碼卡發(fā)送詢問命令,接收根據(jù)該詢問命令返回的命令返回消息,然后根據(jù)該命令返回消息判斷該安全數(shù)碼卡是否被拔除或者被插入;能夠及時檢測到安全數(shù)碼卡的熱插拔狀態(tài),從而為上層的應(yīng)用提供準(zhǔn)確的數(shù)碼卡狀態(tài)。附圖說明圖I是本專利技術(shù)檢測安全數(shù)碼卡熱插拔的方法實施例的數(shù)據(jù)流程圖;圖2是本專利技術(shù)檢測安全數(shù)碼卡熱插拔的裝置實施例的邏輯結(jié)構(gòu)示意圖;圖3是本專利技術(shù)檢測安全數(shù)碼卡熱插拔的裝置實施例的另一邏輯結(jié)構(gòu)示意圖。具體實施例方式參閱圖1,本專利技術(shù)檢測安全數(shù)碼卡熱插拔的方法的實施例包括 101、當(dāng)系統(tǒng)有讀卡器插入時,開啟一個用于以預(yù)設(shè)的頻率向讀卡器中的安全數(shù)碼卡發(fā)送詢問命令的輪詢線程;當(dāng)系統(tǒng)有讀卡器插入時,開啟一個用于以預(yù)設(shè)的頻率向該讀卡器中的安全數(shù)碼卡發(fā)送詢問命令的輪詢線程,該輪詢線程與該讀卡器對應(yīng),即一個讀卡器對應(yīng)一個輪詢線程,例如以Iinux系統(tǒng)為例,在sd_probe函數(shù)中創(chuàng)建一個線程kernel thread。102、以預(yù)設(shè)的頻率向讀卡器中的安全數(shù)碼卡發(fā)送詢問命令;在101步驟中建立的輪詢線程以預(yù)設(shè)的頻率向讀卡器中的安全數(shù)碼卡發(fā)送詢問命令,例如kernel thread線程以一定的頻率向安全數(shù)碼卡發(fā)送TEST UNIT READY命令;103、接收第n+1次命令返回消息;命令返回消息是根據(jù)步驟102中的詢問命令和安全數(shù)碼卡的插拔狀態(tài)發(fā)出的,其中,命令返回消息包括安全數(shù)碼卡存在的消息和安全數(shù)碼卡不存在的消息兩種,每次只包含這兩種消息中的一種;例如,安全數(shù)碼卡存在的消息用返回值I來表示,安全數(shù)碼卡不存在的消息用返回值O來表示;104、判斷保存在本地的第η次接收的命令返回消息和第n+1次命令返回消息是否相同;在本地保存了第η次接收的命令返回消息,接收到第n+1次命令返回消息后,獲取保存在本地的第η次接收的命令返回消息,然后判斷第η次接收的命令返回消息和第n+1次命令返回消息是否相同,根據(jù)判斷結(jié)果對安全數(shù)碼卡當(dāng)前的狀態(tài)做出判斷;如果保存在本地的第η次接收的命令返回消息和第n+1次命令返回消息不相同,執(zhí)行步驟105 ;如果保存在本地的第η次接收的命令返回消息和第n+1次命令返回消息相同,執(zhí)行步驟107 ;105、如果第η次接收的是安全數(shù)碼卡存在的消息,第n+1次接收的是安全數(shù)碼卡不存在的消息,則檢測出讀卡器中的安全數(shù)碼卡被拔除;如果第η次接收的是安全數(shù)碼卡不存在的消息,第n+1次接收的是安全數(shù)碼卡存在的消息,則檢測出讀卡器中有安全數(shù)碼卡被插入;如果檢測出安全數(shù)碼卡被拔除,則清除本系統(tǒng)中與該安全數(shù)碼卡有關(guān)的信息,并向上層應(yīng)用發(fā)送該安全數(shù)碼卡已被拔除的消息,具體的以Iinux系統(tǒng)為例,在系統(tǒng)文件procfs和sysfs文件中清除與該安全數(shù)碼卡相關(guān)的信息,再通過uevent文件發(fā)送K0BJ_REMOVE事件表示安全數(shù)碼卡已被拔除,上層應(yīng)用程序截獲K0BJ_REM0VE事件后進(jìn)行后續(xù)處理;如果檢測出讀卡器中有安全數(shù)碼卡被插入,則在本系統(tǒng)中記錄與該安全數(shù)碼卡有關(guān)的信息,并向上層應(yīng)用發(fā)送該安全數(shù)碼卡已被插入的消息,具體的以Iinux系統(tǒng)為例,在系統(tǒng)文件procfs和sysfs文件中記錄該安全數(shù)碼卡的相關(guān)信息,再通過K0BJ_ADD事件表示安全數(shù)碼卡被插入,上層應(yīng)用程序截獲K0BJ_ADD事件后進(jìn)行后續(xù)處理;106、用第n+1次命令返回消息替代第η次接收的命令返回消息;用第n+1次命令返回消息替代第η次接收的命令返回消息,以備下一次判斷保存在本地的第η次接收的命令返回消息和第n+1次命令返回消息是否相同時調(diào)用;107、如果第η次接收的是安全數(shù)碼卡存在的消息,第n+1次接收的還是安全數(shù)碼卡存在的消息,則檢測出讀卡器中的安全數(shù)碼卡未被拔除;如果第η次接收的是安全數(shù)碼·卡不存在的消息,第n+1次接收的還是安全數(shù)碼卡不存在的消息,則檢測出讀卡器中有安全數(shù)碼卡未被插入。108、檢測讀卡器是否被拔除;在對第n+1次命令返回消息處理完之后,判斷讀卡器是否被拔除;如果讀卡器還沒有被拔除,則返回步驟102 ;如果該讀卡器已經(jīng)被拔除,則執(zhí)行步驟109 ;109、銷毀該讀卡器對應(yīng)的輪詢線程;如果步驟108中檢測出讀卡器已經(jīng)被拔除,則銷毀該讀卡器對應(yīng)的輪詢線程;需要指出的是,本實施例只是對一個讀卡器中的安全數(shù)碼卡的熱插拔情況進(jìn)行描述,系統(tǒng)中完全可以插入多個讀卡器,每個讀卡器對應(yīng)有一個輪詢線程,對每個讀卡器中的安全數(shù)碼卡的熱插拔的檢測都是相同的,此處只以某一個讀卡器為例進(jìn)行說明,不能作為本專利技術(shù)的限制;在本實施例中,通過在系統(tǒng)底層,即核心態(tài)下利用輪詢線程,以預(yù)設(shè)的頻率向讀卡器中的安全數(shù)碼卡發(fā)送詢問命令,接收根據(jù)該詢問命令返回的命令返回消息,然后根據(jù)該命令返回消息判斷該安全數(shù)碼卡是否被拔除或者被插入;能夠及時檢測到安全數(shù)碼卡的熱插拔狀態(tài),上層應(yīng)用只需要調(diào)用即可,并且,核心態(tài)下的線程開銷比較小,生命周期也與讀卡器插拔周期相同,大大減小了系統(tǒng)的線程開銷。參閱圖2和圖本文檔來自技高網(wǎng)...
【技術(shù)保護(hù)點】
【技術(shù)特征摘要】
1.一種檢測安全數(shù)碼卡熱插拔的方法,其特征在于,包括 當(dāng)系統(tǒng)有讀卡器插入時,以預(yù)設(shè)的頻率向所述讀卡器中的安全數(shù)碼卡發(fā)送詢問命令;接收根據(jù)所述詢問命令返回的本次命令返回消息,所述命令返回消息包括安全數(shù)碼卡存在的消息或安全數(shù)碼卡不存在消息; 根據(jù)保存在本地的上一次接收的命令返回消息和所述本次命令返回消息判斷在所述讀卡器上是否有安全數(shù)碼卡被拔除或者被插入; 如果上一次接收的是安全數(shù)碼卡存在的消息,本次接收的是安全數(shù)碼卡不存在的消息,則檢測出安全數(shù)碼卡被拔除;以及 如果上一次接收的是安全數(shù)碼卡不存在的消息,本次接收的是安全數(shù)碼卡存在的消息,則檢測出安全數(shù)碼卡被插入。2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述以預(yù)設(shè)的頻率向所述讀卡器中的安全數(shù)碼卡發(fā)送詢問命令的步驟之前還包括 檢測系統(tǒng)是否有所述讀卡器插入;以及 當(dāng)檢測到系統(tǒng)有所述讀卡器插入時,開啟一個用于以預(yù)設(shè)的頻率向所述讀卡器中的安全數(shù)碼卡發(fā)送詢問命令的輪詢線程,所述輪詢線程與所述讀卡器對應(yīng)。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述方法還包括 檢測所述讀卡器是否被拔除;以及 當(dāng)檢測到所述讀卡器被拔除時,銷毀所述讀卡器對應(yīng)的輪詢線程。4.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述根據(jù)保存在本地的上一次接收的命令返回消息和所述本次命令返回消息判斷在所述讀卡器上是否有安全數(shù)碼卡被拔除或者被插入的步驟還包括 如果上一次接收的是安全數(shù)碼卡存在的消息,本次接收的還是安全數(shù)碼卡存在的消息,則檢測出所述讀卡器中的安全數(shù)碼卡未被拔除;以及 如果上一次接收的是安全數(shù)碼卡不存在的消息,本次接收的還是安全數(shù)碼卡不存在的消息,則檢測出所述讀卡器中的沒有安全數(shù)碼卡被插入。5.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述根據(jù)保存在本地的上一次接收的命令返回消息和所述本次命令返回消息判斷在所述讀卡器上是否有安全數(shù)碼卡被拔除或者被插入的步驟之后還包括 如果檢測出安全數(shù)碼卡被拔除,則清除本系統(tǒng)中與所述安全數(shù)碼卡有關(guān)的信息;以及 如果檢測出安全數(shù)碼卡被插入,則在本系統(tǒng)中記錄與所述安全數(shù)碼卡有關(guān)的信息。6.一種檢測...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:余德軍,
申請(專利權(quán))人:晨星軟件研發(fā)深圳有限公司,晨星半導(dǎo)體股份有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。