diff options
Diffstat (limited to 'Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h')
| -rw-r--r-- | Software/Visual_Studio/Firmware/Tango.FirmwareUpdateLib/DFUDevice.h | 189 |
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 |
