天天看點

【物聯網智能網關-10】建構.NET MF平台下的流式驅動模型

無論是做linux下的驅動開發,還是Windows CE平台下的驅動開發,對流式驅動模型一定非常熟悉。在此架構下,把所有的硬體裝置都看成檔案,和裝置的互動其實就是讀寫檔案,也就是資料流動。這樣開發驅動不僅簡單實用,并且使用者也用一緻的接口通路硬體,大大降低了學習代價。但是在.NET Micro Framework平台下,卻沒有提供這樣的驅動開發接口,使用者如果想在應用層操作硬體,必須要做一個專門的接口庫(Interop),如果有n個裝置,對應的驅動接口庫檔案也必須n個,如果一個應用程式和n個裝置通信,那就必須引用n個庫了。另外如果庫接口有更改,那麼上層和底層代碼還必須重新編譯才能使用。

流式驅動應用層的C#接口代碼如下:

public sealed class GeneralStream

    {

        publicGeneralStream();

        public event GeneralStreamEventHandlerNotice;

        public int Close();

        public int IOControl(intcode);

        public int IOControl(intcode, int parameter);

        public int IOControl(intcode, byte[] inBuffer, intinCount, byte[] outBuffer, int outCount);

        public int Open(stringname);

        public int Open(string name,int config);

        public int Open(string name,string config);

        public int Read(byte[]buffer, int offset, intcount);

        public int Write(byte[]buffer, int offset, intcount);

    }

以上接口其實和WinCE平台下的流式接口非常類似了,但是比較有特色的是,還提供了一個事件通知接口,這樣就為各種硬體驅動開發提供了更靈活的支援。有了這個流式接口,一般情況下,為上層C#語言提供專有的硬體底層功能,就不需要再編寫接口相關的代碼了,直接寫相關的C/C++代碼,然後編譯連結即可。

目前已經基于流式驅動接口,實作了10個裝置和功能子產品的驅動,下面先簡單介紹一下,後續将詳細寫文章一一介紹。

序号

名稱

說明

備注

000

UserDriver

使用者流式驅動開發接口

MDK下的C++開發

001

Watchdog

看門狗驅動

002

Ultrasonic

超音波子產品驅動

測距

003

DHT11

溫濕度子產品驅動

004

GPIO

GPIO特殊功能驅動

比如可以配置開漏

005

Counter

高速計數器

006

ADIS16227

ADIS16227子產品驅動

基于特殊的SPI接口

007

MAX7219

MAX71219晶片驅動

LED和點陣控制

008

PCD8544

Norkia5110顯示子產品驅動

009

LCD1602

LCD1602子產品驅動

   在開發ADIS16227、Norkia5110和LCD1602子產品驅動的過程中,深切感受到,給使用者留一個C++驅動開發接口非常重要,因為這類驅動,上層應用一是沒有現成的接口,二是直接用C#是不能實作的,是以必須底層移植,如果沒有現成使用者接口,就必須依賴廠商了,這很大層度上限制了使用者的開發的主動性和靈活性,還有對産品及項目的把控性。

   關于這部分内容,我在使用者流式驅動開發接口(UserDriver)的文章中會詳細介紹。

繼續閱讀