專利名稱:一種stk菜單處理系統(tǒng)及其對菜單的處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及智能卡應(yīng)用領(lǐng)域,尤其涉及一種STK菜單處理系統(tǒng)及其對菜單的處理方法。
背景技術(shù):
隨著手機的普及和移動通訊技術(shù)的迅猛發(fā)展,移動互聯(lián)網(wǎng)和移動電子商務(wù),移動電子證務(wù)也得到很大發(fā)展。新的業(yè)務(wù)的不斷推出和舊有業(yè)務(wù)的迅速淘汰使得SIM卡上菜單列表經(jīng)過增加、刪除后的重組顯示的需求越來越迫切。例如排行榜類和業(yè)務(wù)推薦等功能需要利用SIM卡內(nèi)有限資源顯示按照指定順序業(yè)務(wù)列表,而且經(jīng)常需要對顯示的列表進行更改。目前一些移動終端上的應(yīng)用本身也用列表顯示來直觀的和用戶交互,傳遞信息,并有動態(tài)更新菜單項和顯示順序的需求?,F(xiàn)有技術(shù)中存在利用SIM卡內(nèi)的循環(huán)文件來增加菜單列表項,但是該技術(shù)卻無法處理刪除菜單以及刪除后的菜單重新排列及顯示問題。傳統(tǒng)的鏈表結(jié)構(gòu)雖然可以滿足菜單的重新排列問題,但是不管是菜單的修改還是顯示都需要查找整個鏈表來查找指定位置,并在查找和鏈表維護過程中多次擦寫FLASH,這就造成了 SIM卡使用壽命縮短和程序結(jié)構(gòu)復(fù)雜,執(zhí)行效率低等問題。而且一旦出現(xiàn)意外掉電,將有可能造成整個鏈表斷裂,顯示結(jié)果不可控。并且這些方法在用戶企圖建立多于應(yīng)用支持的菜單項時,束手無策。這種實現(xiàn)方式無法方便的替換掉最老的菜單項,用戶感受相當不好。
發(fā)明內(nèi)容
本發(fā)明的目的就是提供一種高效準確的STK菜單處理系統(tǒng)對菜單進行動態(tài)處理的技術(shù)方案,減少傳統(tǒng)的通過鏈表查找和維護的方式導(dǎo)致的在執(zhí)行效率和FLASH讀寫上的開銷,從而實現(xiàn)菜單處理的靈活快速。本發(fā)明提供一種STK菜單處理系統(tǒng)對菜單的處理方法,包括如下步驟 步驟Sl 從手機終端接收到菜單更新APDU命后將命令轉(zhuǎn)換成菜單更新數(shù)據(jù); 步驟S2 解析該菜單更新數(shù)據(jù)獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù); 步驟S3 從存儲器中的菜單存儲區(qū)讀取有效菜單項個數(shù)和原有排序的線性關(guān)聯(lián)數(shù)據(jù),
根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)、線性關(guān)聯(lián)數(shù)據(jù)進行處理,獲得新的有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù),所述菜單序號通過所述線性關(guān)聯(lián)數(shù)據(jù)索引菜單存儲區(qū)數(shù)據(jù);
步驟S4 根據(jù)更新類型的不同將相應(yīng)的數(shù)據(jù)寫入菜單存儲區(qū); 步驟S5:處理完數(shù)據(jù)寫入菜單存儲區(qū)后,讀取菜單存儲區(qū)的內(nèi)容,把菜單屬性數(shù)據(jù)區(qū)內(nèi)容按照現(xiàn)有的菜單存儲區(qū)中的線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容組織成菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理。
進一步地,所述菜單屬性數(shù)據(jù)包括菜單名稱、菜單所對應(yīng)應(yīng)用的大小和菜單所對應(yīng)應(yīng)用的信息。進一步地,所述步驟S3中根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)進行處理包括
如果所述更新類型為刪除N個菜單,則將有效菜單項個數(shù)減小要刪除的菜單項個數(shù)N, 線性關(guān)聯(lián)區(qū)的新的排序為原排序從要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)字節(jié)開始到線性關(guān)聯(lián)區(qū)的末字節(jié),循環(huán)左移N字節(jié),即要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之前的字節(jié)不變,要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之后的排序整體前移N個字節(jié),要刪除的菜單序號對應(yīng)的字節(jié)循環(huán)移到線性關(guān)聯(lián)區(qū)的末位;
如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)仍未超過最大菜單項個數(shù), 則將有效菜單項個數(shù)增加需要增加菜單的數(shù)目,原有線性關(guān)聯(lián)區(qū)的字節(jié)排序不變;
如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)超過最大菜單項個數(shù)X個, 則將有效菜單項個數(shù)修改為最大菜單項個數(shù),新的線性關(guān)聯(lián)區(qū)的字節(jié)為原線性關(guān)聯(lián)區(qū)的字節(jié)循環(huán)左移X字節(jié),即原線性關(guān)聯(lián)區(qū)的前X字節(jié)為新排序線性關(guān)聯(lián)區(qū)的最后X字節(jié),原排序線性關(guān)聯(lián)區(qū)字節(jié)從X+1字節(jié)開始左移X字節(jié)。進一步地,所述步驟S4中根據(jù)更新類型的不同將相應(yīng)的數(shù)據(jù)寫入菜單存儲區(qū)的步驟包括
如果更新類型是增加菜單操作,則把菜單屬性數(shù)據(jù)按照新的線性關(guān)聯(lián)區(qū)的字節(jié)寫入關(guān)聯(lián)的菜單存儲區(qū)內(nèi)的菜單屬性數(shù)據(jù)區(qū);完成所有菜單屬性數(shù)據(jù)的寫入后將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入;
如果更新類型是刪除菜單操作,直接將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入。進一步地,在所述步驟Sl之前還包括初始化過程,具體如下
步驟1 從手機終端接收到直接顯示菜單的APDU命后轉(zhuǎn)換成菜單更新數(shù)據(jù); 步驟2 解析該菜單更新數(shù)據(jù),獲得更新類型為直接顯示菜單; 步驟3 從菜單存儲區(qū)讀取有效菜單項個數(shù)區(qū)和線性關(guān)聯(lián)區(qū)數(shù)據(jù),并按照線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容讀取菜單存儲區(qū)的菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理。本發(fā)明還提供一種STK菜單處理系統(tǒng),包括數(shù)據(jù)接收模塊、解析模塊、排序模塊、 數(shù)據(jù)寫入及呈現(xiàn)模塊及存儲器;其中
數(shù)據(jù)接收模塊從手機終端接收菜單更新APDU命后將命令轉(zhuǎn)換成菜單更新數(shù)據(jù)后發(fā)送給所述解析模塊;
解析模塊用于接收到數(shù)據(jù)接收模塊發(fā)送的菜單更新數(shù)據(jù)后,解析該數(shù)據(jù),獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)并發(fā)送給排序模塊;
排序模塊用于接收到解析模塊發(fā)送的更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)后,從存儲器的菜單存儲區(qū)讀取有效菜單項個數(shù)和原有排序線性關(guān)聯(lián)數(shù)據(jù),根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)、線性關(guān)聯(lián)數(shù)據(jù)進行處理,處理完排序后,將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)、菜單屬性數(shù)據(jù)和更新類型發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊;數(shù)據(jù)寫入及呈現(xiàn)模塊用于接收到排序模塊發(fā)送的新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)、菜單屬性數(shù)據(jù)和更新類型后,根據(jù)上述數(shù)據(jù)進行存儲器的菜單存儲區(qū)的數(shù)據(jù)更新并重新讀取菜單存儲區(qū)數(shù)據(jù),按照現(xiàn)有的菜單存儲區(qū)中的線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容將菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理;
存儲器包括菜單存儲區(qū),用于存儲菜單數(shù)據(jù),所述菜單數(shù)據(jù)為數(shù)據(jù)寫入及呈現(xiàn)模塊寫入及讀出,并為排序模塊提供菜單數(shù)據(jù)讀出服務(wù)。進一步地,所述解析模塊如果解析菜單更新數(shù)據(jù)僅獲得更新類型,且更新類型為直接顯示菜單,則將菜單更新數(shù)據(jù)發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊;
數(shù)據(jù)寫入及呈現(xiàn)模塊接收到直接顯示菜單的菜單更新數(shù)據(jù)后,從菜單存儲區(qū)讀取有效菜單項個數(shù)區(qū)和線性關(guān)聯(lián)區(qū)數(shù)據(jù),并按照線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容讀取菜單存儲區(qū)的菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理。進一步地,所述菜單屬性數(shù)據(jù)包括菜單名稱、菜單所對應(yīng)應(yīng)用的大小和菜單所對應(yīng)應(yīng)用的信息。進一步地,所述排序模塊根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)進行處理的過程如下
如果所述更新類型為刪除N個菜單,則將有效菜單項個數(shù)減小要刪除的菜單項個數(shù)N, 線性關(guān)聯(lián)區(qū)的新的排序為原排序從要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)字節(jié)開始到線性關(guān)聯(lián)區(qū)的末字節(jié),循環(huán)左移N字節(jié),即要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之前的字節(jié)不變,要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之后的排序整體前移N個字節(jié),要更新的菜單序號對應(yīng)的字節(jié)移到線性關(guān)聯(lián)區(qū)的末位;
如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)仍未超過最大菜單項個數(shù), 則將有效菜單項個數(shù)增加需要增加菜單的數(shù)目,原有線性關(guān)聯(lián)區(qū)的字節(jié)排序不變;
如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)超過最大菜單項個數(shù)X個, 則將有效菜單項個數(shù)修改為最大菜單項個數(shù),新的線性關(guān)聯(lián)區(qū)的字節(jié)為原線性關(guān)聯(lián)區(qū)的字節(jié)循環(huán)左移X字節(jié),即原線性關(guān)聯(lián)區(qū)的前X字節(jié)為新排序線性關(guān)聯(lián)區(qū)的最后X字節(jié),原排序線性關(guān)聯(lián)區(qū)字節(jié)從X+1字節(jié)開始前移X字節(jié)。進一步地,所述數(shù)據(jù)寫入及呈現(xiàn)模塊進行菜單存儲區(qū)的數(shù)據(jù)更新具體如下
如果更新類型是增加菜單操作,則把菜單屬性數(shù)據(jù)按照新的線性關(guān)聯(lián)區(qū)的字節(jié)寫入關(guān)聯(lián)的菜單存儲區(qū)內(nèi)的菜單屬性數(shù)據(jù)區(qū);
完成所有菜單屬性數(shù)據(jù)的寫入后將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫
入;
如果更新類型是刪除菜單操作,直接將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入。按照本發(fā)明上述方案,在整個菜單處理操作中,效果遠優(yōu)于傳統(tǒng)的鏈表結(jié)構(gòu)實現(xiàn)中既需要維護鏈表又需要把實際菜單數(shù)據(jù)區(qū)擦寫為無效的方法。通過以下結(jié)合附圖對本發(fā)明優(yōu)選實施方式的描述,本發(fā)明的其他特點、目的和效果將變得更加清楚和易于理解。
圖1為本發(fā)明SIM卡中STK菜單處理系統(tǒng)結(jié)構(gòu)圖2為本發(fā)明提供的動態(tài)菜單實現(xiàn)方法中無菜單顯示情況示意圖; 圖3為本發(fā)明提供的動態(tài)菜單實現(xiàn)方法中增加菜單示意圖;; 圖4為本發(fā)明提供的動態(tài)菜單實現(xiàn)方法中的增加菜單數(shù)目超過最大菜單項個數(shù)的示意圖5為本發(fā)明提供的動態(tài)菜單實現(xiàn)方法中的刪除菜單的示意圖; 在所有的上述附圖中,相同的標號表示具有相同、相似或相應(yīng)的特征或功能。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明的技術(shù)方案進行進一步詳細的說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。SIM卡是符合IS07816規(guī)范的智能卡。手機與SIM之間的數(shù)據(jù)交互過程符合 IS07816-3 T=O協(xié)議,GSMl 1. 11及GSMl 1. 14規(guī)范。智能卡安裝在手機終端,通過一種可以運行在SIM卡的小應(yīng)用程序一SIM應(yīng)用工具(SIM Tools Kit),向手機用戶提供SIM卡應(yīng)用。SIM卡應(yīng)用簡單方便,不依賴于手機終端,可以擴展各種手機上業(yè)務(wù)應(yīng)用。參見圖1,為本發(fā)明的一種SIM卡中STK菜單處理系統(tǒng)結(jié)構(gòu)圖,智能卡STK應(yīng)用系統(tǒng)通過手機終端向用戶提供菜單更新應(yīng)用服務(wù),應(yīng)用服務(wù)包括菜單的選擇、刪除和添加等, 手機終端接收用戶的操作,將其以APDU命令的形式發(fā)送到智能卡STK應(yīng)用系統(tǒng);該智能卡 STK應(yīng)用系統(tǒng)中的STK菜單處理系統(tǒng)處理系統(tǒng)主要包括數(shù)據(jù)接收模塊1,解析模塊2,排序模塊3,數(shù)據(jù)寫入及呈現(xiàn)模塊4及存儲器。其中
數(shù)據(jù)接收模塊1 主要用于從手機終端接收菜單更新APDU命后將命令轉(zhuǎn)換成菜單更新數(shù)據(jù)后發(fā)送給解析模塊2 ;
解析模塊2 主要用于接收到數(shù)據(jù)接收模塊1發(fā)送的菜單更新數(shù)據(jù)后,解析該數(shù)據(jù),獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)或者僅有更新類型(直接顯示菜單),如果獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù),則發(fā)送給排序模塊3 ;如果更新類型為 “直接顯示菜單”,則發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊4 ;
排序模塊3 主要用于接收到解析模塊2發(fā)送的更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)后,從存儲器中的菜單存儲區(qū)讀取有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)(原有排序),根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)進行針對性的處理,處理完排序后,將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié),菜單屬性數(shù)據(jù)和更新類型發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊4;
數(shù)據(jù)寫入及呈現(xiàn)模塊4 主要用于接收到排序模塊3發(fā)送的新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)、菜單屬性數(shù)據(jù)和更新類型后,根據(jù)上述數(shù)據(jù)進行菜單存儲區(qū)的數(shù)據(jù)更新并重新讀取菜單存儲區(qū)數(shù)據(jù),按照現(xiàn)有的菜單存儲區(qū)中的線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容將菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù),手機終端讀取到該數(shù)據(jù)后解析出菜單顯示數(shù)據(jù)并根據(jù)菜單顯示數(shù)據(jù)中包含的顯示命令顯示菜單。如果接收到解析模塊2發(fā)送的菜單更新類型為“直接顯示菜單”的菜單更新數(shù)據(jù)后從菜單存儲區(qū)讀取有效菜單項個數(shù)區(qū)和線性關(guān)聯(lián)區(qū)數(shù)據(jù),并按照線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容讀取菜單存儲區(qū)的菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù),手機終端讀取到該數(shù)據(jù)后解析出菜單顯示數(shù)據(jù)并根據(jù)菜單顯示數(shù)據(jù)中包含的顯示命令顯示菜單。存儲器5 包括菜單存儲區(qū),用于存儲菜單數(shù)據(jù),所述菜單數(shù)據(jù)為數(shù)據(jù)寫入及呈現(xiàn)模塊4寫入及讀出,并為排序模塊3提供菜單數(shù)據(jù)讀出服務(wù)。排序模塊3處于解析模塊2和數(shù)據(jù)寫入及呈現(xiàn)模塊4之間,起到?jīng)Q定存儲位置和確定修改數(shù)據(jù)所在位置的關(guān)鍵作用。經(jīng)過解析模塊2解析后的菜單屬性數(shù)據(jù)進入排序模塊 3之后會依照更新類型的不同修改線性關(guān)聯(lián)區(qū)字節(jié)。而經(jīng)由排序模塊3處理后,數(shù)據(jù)寫入及呈現(xiàn)模塊4只需按照線性關(guān)聯(lián)區(qū)的字節(jié)所指示的位置進行菜單屬性數(shù)據(jù)的存儲即可。數(shù)據(jù)之間的相互關(guān)系通過對存儲區(qū)的數(shù)據(jù)結(jié)構(gòu)設(shè)計體現(xiàn)。菜單初始化過程如下
步驟1 數(shù)據(jù)接收模塊1在從手機終端接收到直接顯示菜單的APDU命后轉(zhuǎn)換成菜單更新數(shù)據(jù)后發(fā)送給解析模塊2 ;所述更新數(shù)據(jù)中的更新類型為直接顯示菜單;
步驟2 解析模塊2接收到數(shù)據(jù)接收模塊1發(fā)送的菜單更新數(shù)據(jù)后,解析該數(shù)據(jù),獲得更新類型為直接顯示菜單,于是將內(nèi)容為直接顯示菜單的菜單更新類型發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊4 ;
步驟3 數(shù)據(jù)寫入及呈現(xiàn)模塊4接收到直接顯示菜單的菜單更新類型數(shù)據(jù)后從存儲器中的菜單存儲區(qū)讀取有效菜單項個數(shù)區(qū)和線性關(guān)聯(lián)區(qū)的數(shù)據(jù),按菜單存儲區(qū)中的線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容讀取菜單屬性數(shù)據(jù)區(qū)域數(shù)據(jù)并組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù),手機終端讀取到該數(shù)據(jù)后解析出菜單顯示數(shù)據(jù)并根據(jù)菜單顯示數(shù)據(jù)中包含的顯示命令顯示菜單。菜單的刪除和添加過程如下
步驟Sl 數(shù)據(jù)接收模塊1在從手機終端接收到代表菜單項的更新APDU命后將命令轉(zhuǎn)換成菜單更新數(shù)據(jù)后發(fā)送給解析模塊2。步驟S2 解析模塊2收到菜單更新數(shù)據(jù)后,解析該數(shù)據(jù)獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)(包括菜單名稱、菜單對應(yīng)應(yīng)用的大小和菜單對應(yīng)應(yīng)用的信息),而后,解析模塊2將以上數(shù)據(jù)發(fā)送給排序模塊3。步驟S3 排序模塊3收到數(shù)據(jù)后,首先從存儲器中的菜單存儲區(qū)讀取有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)(原有排序),然后根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)進行針對性的處理,獲得新的有效菜單項個數(shù)、線性關(guān)聯(lián)數(shù)據(jù)和菜單屬性數(shù)據(jù),所述菜單序號通過所述線性關(guān)聯(lián)數(shù)據(jù)索引菜單存儲區(qū)數(shù)據(jù);
如果所述更新類型為刪除菜單,則排序模塊3將有效菜單項個數(shù)減小1,線性關(guān)聯(lián)區(qū)的新的排序為原排序從要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)字節(jié)開始到線性關(guān)聯(lián)區(qū)的末字節(jié),循環(huán)左移1字節(jié)。即要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之前的字節(jié)不變,要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之后的排序整體前移一個字節(jié),要更新的菜單序號對應(yīng)的字節(jié)移到線性關(guān)聯(lián)區(qū)的末位。
如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)仍未超過最大菜單項個數(shù),則排序模塊3將有效菜單項個數(shù)增加需要增加菜單的數(shù)目。原有線性關(guān)聯(lián)區(qū)的字節(jié)排序不變。如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)超過最大菜單項個數(shù)X 個,則排序模塊3將有效菜單項個數(shù)修改為最大菜單項個數(shù),新的線性關(guān)聯(lián)區(qū)的字節(jié)為原線性關(guān)聯(lián)區(qū)的字節(jié)循環(huán)左移X字節(jié)。即原線性關(guān)聯(lián)區(qū)的前X字節(jié)為新排序線性關(guān)聯(lián)區(qū)的最后X字節(jié),原排序線性關(guān)聯(lián)區(qū)字節(jié)從X+1字節(jié)開始左移X字節(jié)。排序模塊3在整理排序時暫時不將新線性關(guān)聯(lián)區(qū)的字節(jié)存儲到FLASH上,而是留待存儲模塊將有效菜單項個數(shù)和新的線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入FLASH。這種一次寫入 FLASH的處理機制能夠簡化程序流程,減少FLASH的讀寫次數(shù),提高模塊處理效率。排序模塊3處理完排序后,將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié),菜單屬性數(shù)據(jù)和更新類型發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊4。步驟S4 數(shù)據(jù)寫入及呈現(xiàn)模塊4接收到更新類型、新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)和菜單屬性數(shù)據(jù)后,根據(jù)更新類型的不同對數(shù)據(jù)進行針對性的處理。如果排序模塊3傳入的更新類型是增加菜單操作數(shù)據(jù)寫入及呈現(xiàn)模塊4把菜單屬性數(shù)據(jù)按照新的線性關(guān)聯(lián)區(qū)的字節(jié)寫入關(guān)聯(lián)的菜單存儲區(qū)內(nèi)的菜單屬性數(shù)據(jù)區(qū)。例如
數(shù)據(jù)寫入及呈現(xiàn)模塊4接收的更新類型為新增m個菜單項,則數(shù)據(jù)寫入及呈現(xiàn)模塊4 從新的線性關(guān)聯(lián)區(qū)有效菜單項個數(shù)的倒數(shù)第m個字節(jié)開始依次將菜單屬性數(shù)據(jù)寫入對應(yīng)的菜單屬性數(shù)據(jù)區(qū)。
數(shù)據(jù)寫入及呈現(xiàn)模塊4完成所有菜單屬性數(shù)據(jù)的寫入后將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入。如果排序模塊3傳入的數(shù)據(jù)是刪除菜單操作數(shù)據(jù)數(shù)據(jù)寫入及呈現(xiàn)模塊4直接將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入。S5 數(shù)據(jù)寫入及呈現(xiàn)模塊4處理完數(shù)據(jù)寫入菜單存儲區(qū)后,讀取菜單存儲區(qū)的內(nèi)容,把菜單屬性數(shù)據(jù)區(qū)內(nèi)容按照線形關(guān)聯(lián)區(qū)數(shù)據(jù)組織菜單顯示數(shù)據(jù),指示手機終端讀取該菜單顯示數(shù)據(jù),完成菜單顯示。表1是菜單存儲結(jié)構(gòu)權(quán)利要求
1.一種STK菜單處理系統(tǒng)對菜單的處理方法,包括如下步驟步驟Sl 從手機終端接收到菜單更新APDU命后將命令轉(zhuǎn)換成菜單更新數(shù)據(jù); 步驟S2 解析該菜單更新數(shù)據(jù)獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù); 步驟S3 從存儲器中的菜單存儲區(qū)讀取有效菜單項個數(shù)和原有排序的線性關(guān)聯(lián)數(shù)據(jù), 根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)、線性關(guān)聯(lián)數(shù)據(jù)進行處理,獲得新的有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù),所述菜單序號通過所述線性關(guān)聯(lián)數(shù)據(jù)索引菜單存儲區(qū)數(shù)據(jù);步驟S4 根據(jù)更新類型的不同將相應(yīng)的數(shù)據(jù)寫入菜單存儲區(qū); 步驟S5:處理完數(shù)據(jù)寫入菜單存儲區(qū)后,讀取菜單存儲區(qū)的內(nèi)容,把菜單屬性數(shù)據(jù)區(qū)內(nèi)容按照現(xiàn)有的菜單存儲區(qū)中的線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容組織成菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理。
2.根據(jù)權(quán)利要求1所述的一種STK菜單處理系統(tǒng)對菜單的處理方法,其特征在于, 所述菜單屬性數(shù)據(jù)包括菜單名稱、菜單所對應(yīng)應(yīng)用的大小和菜單所對應(yīng)應(yīng)用的信息。
3.根據(jù)權(quán)利要求1所述的一種STK菜單處理系統(tǒng)對菜單的處理方法,其特征在于,所述步驟S3中根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)進行處理包括如果所述更新類型為刪除N個菜單,則將有效菜單項個數(shù)減小要刪除的菜單項個數(shù)N, 線性關(guān)聯(lián)區(qū)的新的排序為原排序從要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)字節(jié)開始到線性關(guān)聯(lián)區(qū)的末字節(jié),循環(huán)左移N字節(jié),即要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之前的字節(jié)不變,要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之后的排序整體前移N個字節(jié),要刪除的菜單序號對應(yīng)的字節(jié)循環(huán)移到線性關(guān)聯(lián)區(qū)的末位;如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)仍未超過最大菜單項個數(shù), 則將有效菜單項個數(shù)增加需要增加菜單的數(shù)目,原有線性關(guān)聯(lián)區(qū)的字節(jié)排序不變;如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)超過最大菜單項個數(shù)X個, 則將有效菜單項個數(shù)修改為最大菜單項個數(shù),新的線性關(guān)聯(lián)區(qū)的字節(jié)為原線性關(guān)聯(lián)區(qū)的字節(jié)循環(huán)左移X字節(jié),即原線性關(guān)聯(lián)區(qū)的前X字節(jié)為新排序線性關(guān)聯(lián)區(qū)的最后X字節(jié),原排序線性關(guān)聯(lián)區(qū)字節(jié)從X+1字節(jié)開始左移X字節(jié)。
4.根據(jù)權(quán)利要求1所述的一種STK菜單處理系統(tǒng)對菜單的處理方法,其特征在于,所述步驟S4中根據(jù)更新類型的不同將相應(yīng)的數(shù)據(jù)寫入菜單存儲區(qū)的步驟包括如果更新類型是增加菜單操作,則把菜單屬性數(shù)據(jù)按照新的線性關(guān)聯(lián)區(qū)的字節(jié)寫入關(guān)聯(lián)的菜單存儲區(qū)內(nèi)的菜單屬性數(shù)據(jù)區(qū);完成所有菜單屬性數(shù)據(jù)的寫入后將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入;如果更新類型是刪除菜單操作,直接將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入。
5.根據(jù)權(quán)利要求1所述的一種STK菜單處理系統(tǒng)對菜單的處理方法,其特征在于,在所述步驟Sl之前還包括初始化過程,具體如下步驟1 從手機終端接收到直接顯示菜單的APDU命后轉(zhuǎn)換成菜單更新數(shù)據(jù); 步驟2 解析該菜單更新數(shù)據(jù),獲得更新類型為直接顯示菜單; 步驟3 從菜單存儲區(qū)讀取有效菜單項個數(shù)區(qū)和線性關(guān)聯(lián)區(qū)數(shù)據(jù),并按照線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容讀取菜單存儲區(qū)的菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理。
6.一種STK菜單處理系統(tǒng),包括數(shù)據(jù)接收模塊、解析模塊、排序模塊、數(shù)據(jù)寫入及呈現(xiàn)模塊及存儲器;其中數(shù)據(jù)接收模塊用于從手機終端接收菜單更新APDU命后將命令轉(zhuǎn)換成菜單更新數(shù)據(jù)后發(fā)送給所述解析模塊;解析模塊用于接收到數(shù)據(jù)接收模塊發(fā)送的菜單更新數(shù)據(jù)后,解析該數(shù)據(jù),獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)并發(fā)送給排序模塊;排序模塊用于接收到解析模塊發(fā)送的更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)后,從存儲器的菜單存儲區(qū)讀取有效菜單項個數(shù)和原有排序線性關(guān)聯(lián)數(shù)據(jù),根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)、線性關(guān)聯(lián)數(shù)據(jù)進行處理,處理完排序后,將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)、菜單屬性數(shù)據(jù)和更新類型發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊;數(shù)據(jù)寫入及呈現(xiàn)模塊用于接收到排序模塊發(fā)送的新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)、菜單屬性數(shù)據(jù)和更新類型后,根據(jù)上述數(shù)據(jù)進行存儲器的菜單存儲區(qū)的數(shù)據(jù)更新并重新讀取菜單存儲區(qū)數(shù)據(jù),按照現(xiàn)有的菜單存儲區(qū)中的線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容將菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理;存儲器包括菜單存儲區(qū),用于存儲菜單數(shù)據(jù),所述菜單數(shù)據(jù)為數(shù)據(jù)寫入及呈現(xiàn)模塊寫入及讀出,并為排序模塊提供菜單數(shù)據(jù)讀出服務(wù)。
7.根據(jù)權(quán)利要求6所述的一種STK菜單處理系統(tǒng),其特征在于,所述解析模塊如果解析菜單更新數(shù)據(jù)僅獲得更新類型,且更新類型為直接顯示菜單, 則將菜單更新數(shù)據(jù)發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊;數(shù)據(jù)寫入及呈現(xiàn)模塊接收到直接顯示菜單的菜單更新數(shù)據(jù)后,從菜單存儲區(qū)讀取有效菜單項個數(shù)區(qū)和線性關(guān)聯(lián)區(qū)數(shù)據(jù),并按照線性關(guān)聯(lián)區(qū)內(nèi)容和有效菜單項個數(shù)內(nèi)容讀取菜單存儲區(qū)的菜單屬性數(shù)據(jù)區(qū)數(shù)據(jù)組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理。
8.根據(jù)權(quán)利要求6所述的一種STK菜單處理系統(tǒng),其特征在于,所述菜單屬性數(shù)據(jù)包括菜單名稱、菜單所對應(yīng)應(yīng)用的大小和菜單所對應(yīng)應(yīng)用的信息。
9.根據(jù)權(quán)利要求6所述的一種STK菜單處理系統(tǒng),其特征在于,所述排序模塊根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)和線性關(guān)聯(lián)數(shù)據(jù)進行處理的過程如下如果所述更新類型為刪除N個菜單,則將有效菜單項個數(shù)減小要刪除的菜單項個數(shù)N, 線性關(guān)聯(lián)區(qū)的新的排序為原排序從要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)字節(jié)開始到線性關(guān)聯(lián)區(qū)的末字節(jié),循環(huán)左移N字節(jié),即要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之前的字節(jié)不變,要更新的菜單序號對應(yīng)的線性關(guān)聯(lián)區(qū)的字節(jié)之后的排序整體前移N個字節(jié),要更新的菜單序號對應(yīng)的字節(jié)移到線性關(guān)聯(lián)區(qū)的末位;如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)仍未超過最大菜單項個數(shù), 則將有效菜單項個數(shù)增加需要增加菜單的數(shù)目,原有線性關(guān)聯(lián)區(qū)的字節(jié)排序不變;如果所述更新類型為增加菜單,且菜單增加后,菜單項個數(shù)超過最大菜單項個數(shù)X個, 則將有效菜單項個數(shù)修改為最大菜單項個數(shù),新的線性關(guān)聯(lián)區(qū)的字節(jié)為原線性關(guān)聯(lián)區(qū)的字節(jié)循環(huán)左移X字節(jié),即原線性關(guān)聯(lián)區(qū)的前X字節(jié)為新排序線性關(guān)聯(lián)區(qū)的最后X字節(jié),原排序線性關(guān)聯(lián)區(qū)字節(jié)從X+1字節(jié)開始前移X字節(jié)。
10.根據(jù)權(quán)利要求6所述的一種STK菜單處理系統(tǒng),其特征在于, 所述數(shù)據(jù)寫入及呈現(xiàn)模塊進行菜單存儲區(qū)的數(shù)據(jù)更新具體如下 如果更新類型是增加菜單操作,則把菜單屬性數(shù)據(jù)按照新的線性關(guān)聯(lián)區(qū)的字節(jié)寫入關(guān)聯(lián)的菜單存儲區(qū)內(nèi)的菜單屬性數(shù)據(jù)區(qū);完成所有菜單屬性數(shù)據(jù)的寫入后將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入;如果更新類型是刪除菜單操作,直接將新的有效菜單項個數(shù)、線性關(guān)聯(lián)區(qū)的字節(jié)一次性寫入。
全文摘要
本發(fā)明公開了一種STK菜單處理系統(tǒng)及方法,包括數(shù)據(jù)接收模塊,從手機終端接收命令轉(zhuǎn)換成菜單更新數(shù)據(jù);解析模塊,解析該菜單更新數(shù)據(jù),獲得更新類型、要更新的菜單序號和菜單屬性數(shù)據(jù)并發(fā)送給排序模塊;排序模塊,接收從排序模塊接收的數(shù)據(jù),從存儲器的菜單存儲區(qū)讀取有效菜單項個數(shù)和原有排序線性關(guān)聯(lián)數(shù)據(jù),根據(jù)更新類型和要更新的菜單序號對有效菜單項個數(shù)、線性關(guān)聯(lián)數(shù)據(jù)進行處理,處理完排序后,發(fā)送給數(shù)據(jù)寫入及呈現(xiàn)模塊;數(shù)據(jù)寫入及呈現(xiàn)模塊,根據(jù)接收的數(shù)據(jù)進行存儲器的菜單存儲區(qū)的數(shù)據(jù)更新并組織成命令為顯示菜單的菜單顯示數(shù)據(jù)存到緩存,發(fā)送狀態(tài)字通知手機終端讀取數(shù)據(jù)并處理。本發(fā)明的上述方案使得菜單處理靈活快速。
文檔編號H04M1/725GK102436380SQ20111036106
公開日2012年5月2日 申請日期2011年11月15日 優(yōu)先權(quán)日2011年11月15日
發(fā)明者鄒勇 申請人:福源立信(北京)科技有限公司