#include "DFUMode.h" #include #include "stdafx.h" #include #include #include #include "lmdfu.h" #include "lmdfuwrap.h" #include "DFUDevice.h" #include "ProgressMode.h" #pragma once using namespace System::Windows::Forms; namespace Tango { namespace FirmwareUpdateLib { ref class ProgressForm : public Form { private: ProgressMode _mode; int _currentTotal; bool _verified; bool _verifiable; ProgressCallbackDelegate^ _callback; void RaiseCallback(ProgressMode mode, int current, int total) { if (_callback != nullptr) { _callback(mode, current, total); } } public: ProgressForm(ProgressCallbackDelegate^ callback, bool verifiable) { _verifiable = verifiable; _callback = callback; }; protected: virtual void WndProc(System::Windows::Forms::Message% m) override { switch (m.Msg) { case WM_DFU_DOWNLOAD: _verified = !_verifiable; _mode = ProgressMode::Uploading; _currentTotal = (int)m.WParam; RaiseCallback(_mode, 0, _currentTotal); break; case WM_DFU_UPLOAD: _verified = true; _mode = ProgressMode::Downloading; _currentTotal = (int)m.WParam; RaiseCallback(_mode, 0, _currentTotal); break; case WM_DFU_VERIFY: _verified = true; _mode = ProgressMode::Verifying; _currentTotal = (int)m.WParam; RaiseCallback(_mode, 0, _currentTotal); break; case WM_DFU_COMPLETE: if (_verified) { _mode = ProgressMode::Completed; _currentTotal = (int)m.WParam; RaiseCallback(_mode, 0, _currentTotal); } break; case WM_DFU_ERROR: _mode = ProgressMode::Error; _currentTotal = (int)m.WParam; RaiseCallback(_mode, 0, _currentTotal); break; case WM_DFU_PROGRESS: RaiseCallback(_mode, (int)m.WParam, _currentTotal); break; } Form::WndProc(m); } }; } }