.NET Micro Framework (MF) 雖已支援 FAT16/FAT32 檔案系統,但裝置端無法直接被 PC 遠端存取。為解決此問題,作者開發了 MFDeploy 遠端檔案瀏覽器外掛,讓開發者能像使用 FTP 一樣管理裝置上的檔案。本文深入剖析其實作架構:通道建立、裝置端類 FTP 服務、PC 端外掛 UI。
Custom 命令 (0x0000000F),作為檔案系統指令的專用通道。PWD、CD、CDUP、MKD、DELE、UPLOAD、DOWNLOAD、DIR_FindOpen/Next/Close 等。TinyCLR_Debugging.h:於 CLR_DBG_Commands 結構加入 c_Monitor_Custom = 0x0000000F 及 Monitor_Custom 承載結構 (m_command, m_length, m_data[])。CLR_DBG_Debugger 結構加入 Monitor_Custom 處理函數指標。Debugger_full.cpp:c_Debugger_Lookup_Request 陣列加入 DEFINE_CMD2(Custom)。Debugger.cpp:實作 Monitor_Custom 呼叫 Monitor_Custom_Process 處理實際邏輯。WireProtocol.cs:Commands 類別加入 c_Monitor_Custom 常數、Monitor_Custom 類別 (含 PrepareForSend、Reply)、ResolveCommandToPayload 註冊 Request/Reply 類型。Engine.cs:新增 CustomCommand 方法封裝發送邏輯。於 \DeviceCode\PAL\CustomProcess 新增 CustomProcess.cpp:
Custom_Command_FileSystem = 0x01 及子指令 (FileSystem_Start、PWD、CD、MKD、DELE、UPLOAD、DOWNLOAD 等)。Monitor_Custom_Process 分派至 FileSystem_Process。FileSystem_Process 維護目前工作目錄、尋找控制代碼、檔案系統磁碟區指標,逐一處理各子指令。編譯時需於 TinyCLR.proj 加入專案參考:
<ItemGroup>
<RequiredProjects Include="$(SPOCLIENT)\DeviceCode\PAL\CustomProcess\dotNetMF.proj" />
<DriverLibs Include="CustomProcess.$(LIB_EXT)" />
</ItemGroup>
MFPlugInMenuItem,OnAction 啟動 frmFileViewer 視窗。Send 方法封裝 CustomCommand 呼叫,處理位元組陣列編碼/解碼 (Unicode)。CDUP)、新增資料夾 (MKD)、刪除 (DELE)、上傳/下載等,均呼叫 Send 並刷新列表。