diff --git a/hardware/c2000/serial_loader2000/serial_loader2000.opensdf b/hardware/c2000/serial_loader2000/serial_loader2000.opensdf new file mode 100644 index 00000000000..b0de36db75d Binary files /dev/null and b/hardware/c2000/serial_loader2000/serial_loader2000.opensdf differ diff --git a/hardware/c2000/serial_loader2000/serial_loader2000.sdf b/hardware/c2000/serial_loader2000/serial_loader2000.sdf new file mode 100644 index 00000000000..4427977466b Binary files /dev/null and b/hardware/c2000/serial_loader2000/serial_loader2000.sdf differ diff --git a/hardware/c2000/serial_loader2000/serial_loader2000.sln b/hardware/c2000/serial_loader2000/serial_loader2000.sln new file mode 100644 index 00000000000..4de0d644d7f --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2013 for Windows Desktop +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "serial_loader2000", "serial_loader2000\serial_loader2000.vcxproj", "{9B357C22-A82C-480D-9D8F-335937E9312A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9B357C22-A82C-480D-9D8F-335937E9312A}.Debug|Win32.ActiveCfg = Debug|Win32 + {9B357C22-A82C-480D-9D8F-335937E9312A}.Debug|Win32.Build.0 = Debug|Win32 + {9B357C22-A82C-480D-9D8F-335937E9312A}.Release|Win32.ActiveCfg = Release|Win32 + {9B357C22-A82C-480D-9D8F-335937E9312A}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/hardware/c2000/serial_loader2000/serial_loader2000.v12.suo b/hardware/c2000/serial_loader2000/serial_loader2000.v12.suo new file mode 100644 index 00000000000..745e8b975ce Binary files /dev/null and b/hardware/c2000/serial_loader2000/serial_loader2000.v12.suo differ diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/ReadMe.txt b/hardware/c2000/serial_loader2000/serial_loader2000/ReadMe.txt new file mode 100644 index 00000000000..df8cdae51f3 --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/ReadMe.txt @@ -0,0 +1,40 @@ +======================================================================== + CONSOLE APPLICATION : serial_loader2000 Project Overview +======================================================================== + +AppWizard has created this serial_loader2000 application for you. + +This file contains a summary of what you will find in each of the files that +make up your serial_loader2000 application. + + +serial_loader2000.vcxproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +serial_loader2000.vcxproj.filters + This is the filters file for VC++ projects generated using an Application Wizard. + It contains information about the association between the files in your project + and the filters. This association is used in the IDE to show grouping of files with + similar extensions under a specific node (for e.g. ".cpp" files are associated with the + "Source Files" filter). + +serial_loader2000.cpp + This is the main application source file. + +///////////////////////////////////////////////////////////////////////////// +Other standard files: + +StdAfx.h, StdAfx.cpp + These files are used to build a precompiled header (PCH) file + named serial_loader2000.pch and a precompiled types file named StdAfx.obj. + +///////////////////////////////////////////////////////////////////////////// +Other notes: + +AppWizard uses "TODO:" comments to indicate parts of the source code you +should add to or customize. + +///////////////////////////////////////////////////////////////////////////// diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.cpp b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.cpp new file mode 100644 index 00000000000..0c49680cf36 --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.cpp @@ -0,0 +1,668 @@ +// serial_loader2000.cpp : Defines the entry point for the console application. +// + +#include "stdafx.h" +#include +#include +#include +#include +#include +#include + +//***************************************************************************** +// +// Helpful macros for generating output depending upon verbose and quiet flags. +// +//***************************************************************************** +#define VERBOSEPRINT(...) if(g_bVerbose) { _tprintf(__VA_ARGS__); } +#define QUIETPRINT(...) if(!g_bQuiet) { _tprintf(__VA_ARGS__); } + +//***************************************************************************** +// +// Globals whose values are set or overridden via command line parameters. +// +//***************************************************************************** +bool g_bVerbose = false; +bool g_bQuiet = false; +bool g_bOverwrite = false; +bool g_bUpload = false; +bool g_bClear = false; +bool g_bBinary = false; +bool g_bWaitOnExit = false; +bool g_bReset = false; +bool g_bSwitchMode = false; +wchar_t *g_pszAppFile = NULL; +wchar_t *g_pszKernelFile = NULL; +wchar_t *g_pszComPort = NULL; +wchar_t *g_pszBaudRate; +int g_iDeviceIndex = 0; + +//COM Port stuff +HANDLE file; +DCB port; + +//***************************************************************************** +// +// Exit the application, optionally pausing for a key press first. +// +//***************************************************************************** +void +ExitApp(int iRetcode) +{ + + // + // Has the caller asked us to pause before exiting? + // + if (g_bWaitOnExit) + { + _tprintf(_T("\nPress any key to exit...\n")); + while (!_kbhit()) + { + // + // Wait for a key press. + // + } + } + + exit(iRetcode); +} + +//***************************************************************************** +// +// Display the welcome banner when the program is started. +// +//***************************************************************************** +void +PrintWelcome(void) +{ + if (g_bQuiet) + { + return; + } + + _tprintf(_T("\nSerial Firmware Upgrade Example\n")); + _tprintf(_T("Copyright (c) 2013 Texas Instruments Incorporated. All rights reserved.\n\n")); +} + +//***************************************************************************** +// +// Show help on the application command line parameters. +// +//***************************************************************************** +void +ShowHelp(void) +{ + // + // Only print help if we are not in quiet mode. + // + if (g_bQuiet) + { + return; + } + + _tprintf(_T("This application may be used to download images to a Texas Instruments\n")); + _tprintf(_T("C2000 microcontroller in the SCI boot mode.\n")); + _tprintf(_T("Supported parameters are:\n\n")); + + _tprintf(_T("-f - The file name for download use. This file must be in the SCI boot format.\n")); + _tprintf(_T("-k - The file name for flash kernel. This file must be in the SCI boot format.\n")); + _tprintf(_T("-p COM - Set the COM port to be used for communications.\n")); + _tprintf(_T("-b - Set the baud rate for the COM port.\n")); + _tprintf(_T("-? or -h - Show this help.\n")); + _tprintf(_T("-q - Quiet mode. Disable output to stdio.\n")); + _tprintf(_T("-w - Wait for a key press before exiting.\n")); + _tprintf(_T("-v - Enable verbose output\n\n")); + _tprintf(_T("Examples:\n\n")); + _tprintf(_T(" dfuprog -f program.bin -a 0x1800\n\n")); + _tprintf(_T("Writes binary file program.bin to the device at address 0x1800\n\n")); + _tprintf(_T(" dfuprog -i 1 -f program.dfu\n\n")); + _tprintf(_T("Writes DFU-formatted file program.dfu to the second connected\n")); + _tprintf(_T("device (index 1) at the address found in the DFU file prefix.\n\n")); + _tprintf(_T(" dfuprog -u -f appimage.dfu\n\n")); + _tprintf(_T("Reads the current board application image into DFU-formatted file\n")); + _tprintf(_T("appimage.dfu\n\n")); +} + +//***************************************************************************** +// +// Parse the command line, extracting all parameters. +// +// Returns 0 on success. On failure, calls ExitApp(1). +// +//***************************************************************************** +int +ParseCommandLine(int argc, wchar_t *argv[]) +{ + int iParm; + bool bShowHelp; + wchar_t *pcOptArg; + + // + // By default, don't show the help screen. + // + bShowHelp = false; + + // Set the default baud rate + g_pszBaudRate = L"9600"; + + // + // Walk through each of the parameters in the list, skipping the first one + // which is the executable name itself. + // + for (iParm = 1; iParm < argc; iParm++) + { + // + // Does this look like a valid switch? + // + if (!argv || ((argv[iParm][0] != L'-') && (argv[iParm][0] != L'/')) || + (argv[iParm][1] == L'\0')) + { + // + // We found something on the command line that didn't look like a + // switch so bomb out. + // + _tprintf(_T("Unrecognized or invalid argument: %s\n"), argv[iParm]); + ExitApp(1); + } + else + { + // + // For convenience, get a pointer to the next argument since this + // is often a parameter for a given switch (and since this code was + // converted from a previous version which used getopt which is not + // available in the Windows SDK). + // + pcOptArg = ((iParm + 1) < argc) ? argv[iParm + 1] : NULL; + } + + switch (argv[iParm][1]) + { + case 'w': + g_bWaitOnExit = true; + break; + + case 'f': + g_pszAppFile = pcOptArg; + iParm++; + break; + + case 'k': + g_pszKernelFile = pcOptArg; + iParm++; + break; + + case 'b': + g_pszBaudRate = pcOptArg; + iParm++; + break; + + case 'p': + g_pszComPort = pcOptArg; + iParm++; + break; + + case 'v': + g_bVerbose = TRUE; + break; + + case 'q': + g_bQuiet = TRUE; + break; + + case 'x': + g_bOverwrite = TRUE; + break; + + case '?': + case 'h': + bShowHelp = TRUE; + break; + + default: + _tprintf(_T("Unrecognized argument: %s\n"), argv[iParm]); + ExitApp(1); + } + } + + // + // Show the welcome banner unless we have been told to be quiet. + // + PrintWelcome(); + + // + // Show the help screen if requested. + // + if (bShowHelp) + { + ShowHelp(); + ExitApp(0); + } + + // + // Catch various invalid or pointless parameter cases. + // + if (!g_pszAppFile || !g_pszKernelFile || !g_pszComPort) + { + // + // No file name provided. If we haven't displayed it already, + // show command line help then display the error information. + // + ShowHelp(); + + if (!g_pszAppFile) + { + QUIETPRINT(_T("ERROR: No application file name was specified. Please use -f to provide one.\n")); + } + if (!g_pszKernelFile) + { + QUIETPRINT(_T("ERROR: No flash kernel file name was specified. Please use -k to provide one.\n")); + } + if (!g_pszComPort) + { + QUIETPRINT(_T("ERROR: No COM port number was specified. Please use -p to provide one.\n")); + } + + ExitApp(1); + } + + + + // + // Tell the caller that everything is OK. + // + return(0); +} + + + +//***************************************************************************** +// +// Download an image to the the device identified by the passed handle. The +// image to be downloaded and other parameters related to the operation are +// controlled by command line parameters via global variables. +// +// Returns 0 on success or a positive error return code on failure. +// +//***************************************************************************** +int +DownloadImage(void) +{ + FILE *Kfh; + FILE *Afh; + unsigned char *pcKFileBuf; + unsigned char *pcKNextChar; + unsigned char *pcAFileBuf; + unsigned char *pcANextChar; + unsigned char sendData[8]; + unsigned int rcvData = 0; + unsigned int rcvDataH = 0; + unsigned int txCount = 0; + size_t iLen; + size_t iRead; + bool bTIFormat; + DWORD dwWritten; + DWORD dwRead; + uint16_t checksum; + unsigned int fileStatus; + unsigned char readLine[80]; + + QUIETPRINT(_T("Downloading %s to device...\n"), g_pszAppFile); + + + + // + // Does the input file exist? + // + Kfh = _tfopen(g_pszKernelFile, _T("rb")); + if (!Kfh) + { + QUIETPRINT(_T("Unable to open Kernel file %s. Does it exist?\n"), g_pszAppFile); + return(10); + } + // + // How big is the file? + // + //fseek(Kfh, 0, SEEK_END); + //iLen = ftell(Kfh); + //fseek(Kfh, 0, SEEK_SET); + + // + // Allocate a buffer large enough for the file. + // + //pcKFileBuf = (unsigned char *)malloc(iLen); + //if (!pcKFileBuf) + //{ + // QUIETPRINT(_T("Error allocating %d bytes of memory!\n"), iLen); + // fclose(Kfh); + // return(11); + //} + + // + // Read the file into our buffer and check that it was correctly read. + // + //iRead = fread(pcKFileBuf, 1, iLen, Kfh); + //fclose(Kfh); + + //if (iRead != iLen) + //{ + // QUIETPRINT(_T("Error reading input file!\n")); + // free(pcKFileBuf); + // return(12); + //} + //pcKNextChar = pcKFileBuf + 3; + + + + + Afh = _tfopen(g_pszAppFile, L"rb"); + if (!Afh) + { + QUIETPRINT(_T("Unable to open Application file %s. Does it exist?\n"), g_pszAppFile); + return(10); + } + // + // How big is the file? + // + //fseek(Afh, 0, SEEK_END); + //iLen = ftell(Afh); + //fseek(Afh, 0, SEEK_SET); + + // + // Allocate a buffer large enough for the file. + // + //pcAFileBuf = (unsigned char *)malloc(iLen); + //if (!pcAFileBuf) + //{ + // QUIETPRINT(_T("Error allocating %d bytes of memory!\n"), iLen); + // fclose(Afh); + // return(11); + //} + + // + //Read the file into our buffer and check that it was correctly read. + // + //iRead = fread(pcAFileBuf, 1, iLen, Afh); + //fclose(Afh); + + //if (iRead != iLen) + //{ + // QUIETPRINT(_T("Error reading input file!\n")); + // free(pcAFileBuf); + // return(12); + //} + //pcANextChar = pcAFileBuf; + + + //Both Kernel, Application, and COM port are open + //Time to blow an go! + + //Do AutoBaud + dwRead = 0; + sendData[0] = 'A'; + WriteFile(file, &sendData[0], 1, &dwWritten, NULL); + while (dwRead == 0) + { + ReadFile(file, &rcvData, 1, &dwRead, NULL); + } + + if (sendData[0] != rcvData) + return(12); + + + //Find the start of the kernel data + getc(Kfh); + getc(Kfh); + getc(Kfh); + + fileStatus = fscanf_s(Kfh, "%x", &sendData[0]); + + while (fileStatus == 1) + { + //Send next char + WriteFile(file, &sendData[0], 1, &dwWritten, NULL); + //dwRead = 0; + //while (dwRead == 0) + //{ + //ReadFile(file, &rcvData, 1, &dwRead, NULL); + //} + ////Ensure data matches + //if (sendData[0] != rcvData) + // return(12); + //Read next char + fileStatus = fscanf_s(Kfh, "%x ", &sendData[0]); + + } + + Sleep(200); + PurgeComm(file, PURGE_RXCLEAR); + //Do AutoBaud + sendData[0] = 'A'; + WriteFile(file, &sendData[0], 1, &dwWritten, NULL); + dwRead = 0; + while (dwRead == 0) + { + ReadFile(file, &rcvData, 1, &dwRead, NULL); + } + + if (sendData[0] != rcvData) + return(12); + + //Find the start of the application data + txCount = 0; + checksum = 0; + getc(Afh); + getc(Afh); + getc(Afh); + + + + while (txCount < 22) + { + txCount++; + fscanf_s(Afh, "%x", &sendData[0]); + checksum += sendData[0]; + //Send next char + WriteFile(file, &sendData[0], 1, &dwWritten, NULL); + + } + dwRead = 0; + while (dwRead == 0) + { + ReadFile(file, &rcvData, 1, &dwRead, NULL); + } + dwRead = 0; + while (dwRead == 0) + { + ReadFile(file, &rcvDataH, 1, &dwRead, NULL); + } + //Ensure checksum matches + if (checksum != (rcvData | (rcvDataH << 8))) + return(12); + + + //RONNIES CODE + int wordData; + int byteData; + txCount = 0; + checksum = 0; + int j; + int totalCount = 0; + QUIETPRINT(_T("\n\n\n\n")); + wordData = 0x0000; + byteData = 0x0000; + fileStatus = 1; + + //Load the flash kernel + while (1){ + + if (totalCount == 0x101) + j = 0; + + fileStatus = fscanf_s(Afh, "%x ", &sendData[0]); + if (fileStatus == 0) + break; + QUIETPRINT(_T("%x\n"), sendData[0]); + WriteFile(file, &sendData[0], 1, &dwWritten, NULL); + checksum += sendData[0]; + + // Get a dest addr + if (txCount == 0x00) + { + wordData = sendData[0]; + } + else if (txCount == 0x01) + { + byteData = sendData[0]; + // form the wordData from the MSB:LSB + wordData |= (byteData << 8); + } + + txCount++; + totalCount++; + + //If the next block size is 0, exit the while loop. + if (wordData == 0x00 && txCount > 1) + { + + //for (j = 0; j<10000000; j++); + + wordData = 0x0000; + byteData = 0x0000; + + break; + } + //If the block size is bigger than 0x400 words, every 0x400 words later it takes time for flash program. Them waiting for feedback. + else if ((txCount - 6) % 0x800 == 0 && txCount > 6) + { + dwRead = 0; + while (dwRead == 0) + { + ReadFile(file, &rcvData, 1, &dwRead, NULL); + } + dwRead = 0; + while (dwRead == 0) + { + ReadFile(file, &rcvDataH, 1, &dwRead, NULL); + } + //Ensure checksum matches + if (checksum != (rcvData | (rcvDataH << 8))) + return(12); + else + checksum = 0; + } + //If CountInt meets the block size, countint and dest addr will be initialized. + else if (txCount == 2 * (wordData + 3)) + { + dwRead = 0; + while (dwRead == 0) + { + ReadFile(file, &rcvData, 1, &dwRead, NULL); + } + dwRead = 0; + while (dwRead == 0) + { + ReadFile(file, &rcvDataH, 1, &dwRead, NULL); + } + //Ensure checksum matches + if (checksum != (rcvData | (rcvDataH << 8))) + return(12); + else + checksum = 0; + + wordData = 0x0000; + byteData = 0x0000; + txCount = 0x00; + } + } + + +} + + +//***************************************************************************** +// +// The main entry point of the DFU programmer example application. +// +//***************************************************************************** +int +_tmain(int argc, TCHAR* argv[]) +{ + int iRetCode = 0; + int iExitCode = 0; + int iDevIndex; + bool bCompleted; + bool bDeviceFound; + TCHAR baudString[64]; + DWORD error; + + + // + // Parse the command line parameters, print the welcome banner and + // tell the user about any errors they made. + // + ParseCommandLine(argc, argv); + + //Try opening the COM Port + // open the comm port. + file = CreateFile((LPCWSTR)g_pszComPort, + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + 0, + NULL); + + //Check if COM port opened correctly + if (INVALID_HANDLE_VALUE == file) { + QUIETPRINT(_T("Unable to open COM port...does someone else have it open?\n")); + ExitApp(1); + } + + //Append baudrate to config string + _stprintf(baudString, _T("%s,n,8,1"), g_pszBaudRate); + + // get the current DCB, and adjust a few bits to our liking. + memset(&port, 0, sizeof(port)); + port.DCBlength = sizeof(port); + iRetCode = GetCommState(file, &port); + if (iRetCode) + { + QUIETPRINT(_T("getting comm state \n")); + } + else + { + QUIETPRINT(_T("Problem Getting Comm State \n")); + ExitApp(iExitCode); + } + + + iRetCode = BuildCommDCB((LPCTSTR)baudString, &port); + if (iRetCode) + { + QUIETPRINT(_T("building comm DCB\n")); + } + else + { + QUIETPRINT(_T("Problem Building DCB...are your parameters correct? \n")); + ExitApp(iExitCode); + } + + iRetCode = SetCommState(file, &port); + if (iRetCode) + { + QUIETPRINT(_T("adjusting port settings\n")); + } + else + { + QUIETPRINT(_T("Problem setting port configuration \n")); + ExitApp(iExitCode); + } + + iRetCode = DownloadImage(); + + + + ExitApp(iExitCode); +} + + diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj new file mode 100644 index 00000000000..dbf5107d967 --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj @@ -0,0 +1,93 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {9B357C22-A82C-480D-9D8F-335937E9312A} + Win32Proj + serial_loader2000 + + + + Application + true + v120 + Unicode + + + Application + false + v120 + true + Unicode + + + + + + + + + + + + + true + + + false + + + + Use + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + + + Console + true + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions) + + + Console + true + true + true + + + + + + + + + + + + + Create + Create + + + + + + \ No newline at end of file diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj.filters b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj.filters new file mode 100644 index 00000000000..ebec51f0ce1 --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj.user b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj.user new file mode 100644 index 00000000000..96ecc545c97 --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/serial_loader2000.vcxproj.user @@ -0,0 +1,7 @@ + + + + -f C:\test.txt -k C:\flash_kernel.txt -p COM4 -w -b 38400 + WindowsLocalDebugger + + \ No newline at end of file diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/stdafx.cpp b/hardware/c2000/serial_loader2000/serial_loader2000/stdafx.cpp new file mode 100644 index 00000000000..f234b9e1dcf --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes +// serial_loader2000.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" + +// TODO: reference any additional headers you need in STDAFX.H +// and not in this file diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/stdafx.h b/hardware/c2000/serial_loader2000/serial_loader2000/stdafx.h new file mode 100644 index 00000000000..47a0d0252b1 --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/stdafx.h @@ -0,0 +1,15 @@ +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, but +// are changed infrequently +// + +#pragma once + +#include "targetver.h" + +#include +#include + + + +// TODO: reference additional headers your program requires here diff --git a/hardware/c2000/serial_loader2000/serial_loader2000/targetver.h b/hardware/c2000/serial_loader2000/serial_loader2000/targetver.h new file mode 100644 index 00000000000..90e767bfce7 --- /dev/null +++ b/hardware/c2000/serial_loader2000/serial_loader2000/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Including SDKDDKVer.h defines the highest available Windows platform. + +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. + +#include