aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h')
-rw-r--r--Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h189
1 files changed, 189 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h b/Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h
new file mode 100644
index 000000000..c5d954cb2
--- /dev/null
+++ b/Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h
@@ -0,0 +1,189 @@
+#include "DFUMode.h"
+#include <stdio.h>
+#include "stdafx.h"
+#include <stdlib.h>
+#include <conio.h>
+#include <windows.h>
+#include "lmdfu.h"
+#include "lmdfuwrap.h"
+#include "ProgressMode.h"
+#include "TwineDFUExtras.h"
+
+#pragma once
+
+using namespace System;
+
+namespace Tango
+{
+ namespace FirmwareUpdateLib {
+
+ /// <summary>
+ /// Represents the upload operation progress callback delegate.
+ /// </summary>
+ /// <param name="progressMode">The progress mode.</param>
+ /// <param name="current">The current.</param>
+ /// <param name="total">The total.</param>
+ public delegate void ProgressCallbackDelegate(ProgressMode progressMode, int current, int total);
+
+ public ref class DFUDevice
+ {
+ private:
+ unsigned char *lastDownloadBytes;
+ tLMDFUDeviceInfo *devInfo;
+ tLMDFUHandle devHandle;
+ bool _isDisposed;
+
+ public:
+
+ /// <summary>
+ /// Vendor ID published in the device descriptor.
+ /// </summary>
+ property String^ VID;
+ /// <summary>
+ /// Product ID published in the device descriptor.
+ /// </summary>
+ property String^ PID;
+ /// <summary>
+ /// BCD device release number published in the device descriptor.
+ /// </summary>
+ property String^ DeviceName;
+ /// <summary>
+ /// The manufacturer name string published in the device.
+ /// </summary>
+ property String^ Manufacturer;
+ /// <summary>
+ /// The interface string published in the DFU interface descriptor.
+ /// </summary>
+ property String^ DFUInterface;
+ /// <summary>
+ /// The serial number string published in the device descriptor.
+ /// </summary>
+ property String^ SerialNumber;
+ /// <summary>
+ /// Maximum number of bytes that the device can accept per control-write transaction as published in the DFU functional descriptor.
+ /// </summary>
+ property int MaxTransfer;
+ /// <summary>
+ /// Determines the current DFU driver mode. (An update can only be applied while in DFU mode).
+ /// </summary>
+ property DFUMode Mode;
+ /// <summary>
+ /// Indicates that the device will detach and reattach automatically on receipt of the DFU_DETACH request whereas 'false' indicates that the host must issue a USB reset after the DFU_DETACH request.
+ /// </summary>
+ property bool WillDetach;
+ /// <summary>
+ /// Indicates that the device supports firmware download operations and: 'false' indicates that download is not supported.
+ /// </summary>
+ property bool ManifestTolerant;
+
+ property bool UploadCable;
+
+ property bool DownloadCable;
+ /// <summary>
+ ///Determines whether the DFU device supports the Tiva DFU binary protocol or false otherwise. (If not than AppStartAddress should be provided!).
+ /// </summary>
+ property bool SupportsTivaExtensions;
+ /// <summary>
+ /// The size of a flash block in bytes.
+ /// </summary>
+ property short FlashBlockSize;
+ /// <summary>
+ /// The number of blocks of flash in the device. Total flash size is NumFlashBlocks * FlashBlockSize.
+ /// </summary>
+ property short NumFlashBlocks;
+ /// <summary>
+ /// Address 1 byte above the highest location the boot loader can access.
+ /// </summary>
+ property long FlashTopAddress;
+ /// <summary>
+ /// Total flash size in bytes.
+ /// </summary>
+ property int FlashSize;
+ /// <summary>
+ /// Lowest address the boot loader can write or erase.
+ /// </summary>
+ property long AppStartAddress;
+
+ /// <summary>
+ /// Image Size.
+ /// </summary>
+ property long ImageLength;
+
+ /// <summary>
+ /// Optional Twine information which will be flashed to the top of the memory.
+ /// </summary>
+ property TwineDFUExtras^ TwineExtras;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="DFUDevice"/> class.
+ /// </summary>
+ DFUDevice();
+
+ /// <summary>
+ /// Finalizes an instance of the <see cref="DFUDevice"/> class.
+ /// </summary>
+ ~DFUDevice();
+
+ /// <summary>
+ /// Switch the device to DFU upgrade mode.
+ /// </summary>
+ void SwitchToDFUMode();
+
+ /// <summary>
+ /// Clears the flash.
+ /// </summary>
+ void ClearFlash();
+
+ /// <summary>
+ /// Resets the device.
+ /// </summary>
+ void Reset();
+
+ /// <summary>
+ /// Uploads the specified image bytes to the firmware via the DFU class.
+ /// </summary>
+ /// <param name="bytes">The bytes.</param>
+ /// <param name="callback">The progress callback.</param>
+ void Upload(array<byte>^ bytes, ProgressCallbackDelegate^ callback);
+
+ /// <summary>
+ /// Uploads the specified twine extras to the top of the flash memory.
+ /// </summary>
+ /// <param name="extras">The extras.</param>
+ /// <param name="callback">The progress callback.</param>
+ void UploadTwineExtras(TwineDFUExtras^ extras, ProgressCallbackDelegate^ callback);
+
+ /// <summary>
+ /// Downloads the existing image bytes from the firmware via the DFU class.
+ /// </summary>
+ /// <param name="callback">The progress callback.</param>
+ /// <returns></returns>
+ void Download(ProgressCallbackDelegate^ callback);
+
+ /// <summary>
+ /// Gets the last download operation bytes.
+ /// </summary>
+ /// <returns></returns>
+ array<byte>^ GetDownloadBytes();
+
+ internal:
+
+ const int EXTENSION_LENGTH = 1024;
+ const int EXTENSION_CODE = 1357;
+ const int EXTENSION_COMMENTS_LENGTH = 992;
+
+ /// <summary>
+ /// Fetches the twine extras.
+ /// </summary>
+ void FetchTwineExtras();
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="DFUDevice"/> class.
+ /// </summary>
+ /// <param name="deviceInfo">The device information.</param>
+ /// <param name="deviceHandle">The device handle.</param>
+ DFUDevice(tLMDFUDeviceInfo *deviceInfo, tLMDFUHandle deviceHandle);
+ };
+
+ }
+} \ No newline at end of file