天天看點

[XMOVE自主設計的體感方案] XMove Studio管理系統(二)應用開發API簡要介紹

  xmove4.0以開放式的結構滿足擴充性的要求。所有無線協定,底層算法和控制邏輯全部上移到pc端。節點隻根據接受的控制邏輯傳回傳感器資料。新的架構使得開發新應用非常友善。

  本節将主要介紹xmove應用開發api及其使用。

  我們将以開發“空中滑鼠”應用為例,介紹開發應用的方法。

  空中滑鼠是通過陀螺儀傳感器采集的旋轉資料,傳遞給pc機,在空中旋轉節點即可控制pc滑鼠的功能。由于需要滑鼠左右鍵,是以最低節點需求是含鍵盤的節點。

  在vs中建立c#類庫工程,引用xfrmwork.xmove.interface 基類庫的dll檔案。該檔案包含了xmove的核心基類和抽象邏輯。若您曾經做過這步,可以跳過。添加功能時僅需在該工程中添加新的類即可。

  注意,需将該工程的dll輸出路徑修改為xmove應用插件檔案夾xmoveplugin。這樣就可以不用手動拷貝了。

  xmove應用基類是abstractapp,它提供基礎的服務和接口。新應用從abstractapp繼承。

為了能被xfrmwork插件搜尋器搜尋到,需要添加xfrmworkattribute插件标記。四個參數分别是: app名稱,接口限制(應用固定為iprogramwpf), 說明介紹,和圖檔資源位址(友善主架構顯示應用logo)、

  生成工程,運作xmove主程式,如下圖所示,xfrmwork已經成功加載該應用。

[XMOVE自主設計的體感方案] XMove Studio管理系統(二)應用開發API簡要介紹

 

   要想擷取節點傳遞來的資訊,首先要配置應用程式節點映射。節點映射一般在預設情況下給出映射到哪個節點組的哪個節點,并給出其名稱和最低節點功能需求。

  在應用程式啟動時,首先嘗試讀取硬碟中存儲的節點映射表,否則嘗試重建預設映射表。是以必須重寫重建函數:

 如上案例所示,隻增加一個節點,名稱是手持裝置,預設組别為0,組内id是左手節點。最低要求是xnodehid(包含鍵盤的mems節點)

  若您允許使用者在應用中修改映射表的表項數量,需要重寫以下屬性:

  由于空中滑鼠隻需一個節點,是以不需要改變節點映射項數量,return false. 預設是return false的。此時,使用者在運作時修改數量的按鈕将不可用。

 基類已經将從外部讀取映射表,和結束程式時存儲映射表的功能實作,作為開發者的您可以不關心這些問題。您隻需關心重建函數和ismountchangedeable屬性。

  為了盡可能降低節點工作功耗,應該給出應用程式所需的節點重新整理速率,是否需要陀螺儀等屬性。節點工作狀态的描述類為:

[XMOVE自主設計的體感方案] XMove Studio管理系統(二)應用開發API簡要介紹

  其中nodeworkmode類描述了節點目前的工作狀态,而nodecontrolledworkmode類從nodeworkmode繼承,描述目前對該節點所有工作狀态需求的彙總。

  nodecontrolledworkmode類會自動彙總所有應用對該節點需求,求出能滿足所有應用的最低需求。進而在應用發生改變時,控制節點切換到相應模式。

其中函數的定義為:

 參數分别為該程式的引用,是否能開啟陀螺儀和重新整理速度。  由于陀螺儀是傳感器中的耗電大戶,是以應該在不需要的情形下盡可能關閉之。

  應用一般有兩種類型:

  隔一段時間擷取傳感器資料,實作重新整理,但并不關心資料是否是最新的

隻有當新資料到來時才會觸發應用事件。

   我們分别将将它們稱作定時器型應用和事件型應用。對于空中滑鼠而言,應屬于事件型應用。

  首先必須獲得映射表定義的節點的引用:

  xnodegroupmanager是節點管理器類,通過單例模式提供友善的通路權限,索引器中,可以按上述格式,擷取節點引用。

  定時器型應用不關心資料是否是最新的,但需要穩定的定時實作重新整理。要想實作定時重新整理,需要重寫以下字段:

 應用程式管理器會為重寫該字段的每個應用提供定時器支援,在點選開啟按鈕後,會自動啟動定時器,按下停止後關閉。應用程式可不關心其具體實作。

  至于在定時到來時要處理的邏輯,可以通過重寫dataprocess()函數:

   值得注意的是,lefthandxnodehid是該類的節點引用持有者。這樣,系統會在每隔1/25秒執行該函數。

   另外一種類型是事件型應用,它對處理性能的要求更低,也更靈活。應用應該通過事件的方式訂閱節點管理器發出的通知:如節點擷取新資料,建立新連接配接或斷開連接配接等。

  要想配置成事件型應用,您需要将processpersecond屬性中傳回值改為0,這樣系統就不會提供定時器了。

  對于空中滑鼠應用,可以隻關心節點傳遞來的新資料通知。在開啟時,需要将處理方法挂接在該事件上,如下程式所示:

關閉應用時,将該事件取消挂接:  

 lefthandxnodehid_onprogramevent是處理事件,其功能與上述dataprocess()描述完全一緻,此處從略。

  若您同時需要定時器和事件,可以将processpersecond設定成需要的值,同時挂載事件,與1,2描述一緻,此處從略。

  在很多情形下,您可能需要開發帶ui控件的應用。此時的開發要比一般情形複雜。具體實作方法和您的具體設計有關。目前僅提供wpf内置的usercontrol控件的支援。

  若您對mvvm結構很熟悉,則推薦采用這種開發方式,此時,需要讓您開發的類實作iview接口:

  我們假設您對mvvm模式已經很熟悉,需要另外設計viewmodel,該類中是dynidentitytrainnerui, 在構造函數中,實作資料上下文綁定。

  若您對mvvm不熟悉,通常的解決辦法是從usercontrol類繼承。但是c#隻支援單繼承,通常的辦法是實作xmove基本應用的所有接口,這對于開發者是不合适的,是以我提供了一個ui類,解決了這一問題:  

  在開發時,您需要從abstractuiapp類繼承,此時可獲得界面設計器的支援,其他的開發方式和上述一緻,此處不贅述。

  除了以上可能要修改的屬性和重寫函數外,還有兩個函數可能需要重寫:

     loadmainresource函數在使用者将其拖到應用清單時執行,若加載大型資源時必須重寫該函數,而不是定義在initprocess函數中,因為使用者随時都可能開啟或關閉程式,不應該在此函數中過分耗時。

  例如空中滑鼠,它需要在第一次初始化時加載svm識别模型。用于手勢識别。

   除此之外,還有對應的釋放函數。和初始化需要的注意點一緻:

  一些管理型應用,不僅需要擷取節點的資料,還需要知悉整個系統的工作狀态,此時就需要獲得一些擴充功能。

  系統提供在基類中提供了兩個服務者,解決了以上問題:

   分别是通信管理器接口和程式管理器接口,它封裝了和限制了應用對管理器的控制權限,提供了可讀的一些有用資訊。

  例如,在thisprogrammanager的幫助下,應用可以開啟或關閉另外一個應用,可以在界面上添加或删除新的ui元件,

  與其類似的是,可以開啟或關閉通信方法,或擷取已開啟通信方法的枚舉等。

  由于系統使用和開發環境都是基于專業使用者的,是以以開放的精神,api提供的接口的權限都達到甚至超過了實際應用的最大需求。在開發應用時,您應該考慮隻讀取資料,而不非法寫入或修改核心狀态資料,這可能會導緻系統崩潰或出現不可預見的問題。

  xmove開發環境内置了xfrmwork的全部功能集合,同時有.net framework作為支援,您所需的大部分函數和功能類都可以在其中找到,這包括網絡通信,資料庫,圖形ui等。您可以參考詳細開發文檔,此處不進行較長的描述。

  您可以将您的工程編譯為dll,提供給使用者。在目前架構下,無法實作自動更新,是以需要手動拷貝。未來架構會加入自動更新功能。

  本文較詳細的介紹了在xmove架構下開發新應用的方法和注意事項。目前xmove架構已經支援多達20多種應用,涉及節點管理,人機互動,虛拟現實等應用,我會在後續文章中繼續介紹。  

繼續閱讀