diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..42fd8223 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ + +*.obj +*.ipch +*.tlog +*.pdb +*.idb +*.ilk +*.log +*.exp +*.db +BSP/SampleCode/emWin/GUIDemo/VC2022/ARM/Debug/.map +BSP/SampleCode/emWin/GUIDemo/VC2022/.vs/NuDemo/v17/.suo +BSP/SampleCode/emWin/GUIDemo/VC2022/ARM/Debug/emWin_GUIDemo.bin +*.o +*.d diff --git a/BSP/Driver/Include/N9H26_USBD.h b/BSP/Driver/Include/N9H26_USBD.h index 6b86e1f0..76941f0e 100644 --- a/BSP/Driver/Include/N9H26_USBD.h +++ b/BSP/Driver/Include/N9H26_USBD.h @@ -152,7 +152,7 @@ typedef void (*PFN_USBD_CALLBACK)(void); typedef BOOL (PFN_USBD_EXIT_CALLBACK)(void); typedef void (*PFN_USBD_EP_CALLBACK)(UINT32 u32IntEn,UINT32 u32IntStatus); -typedef struct __attribute__((__packed__)) { +typedef PACK(struct { /* Descriptor pointer */ PUINT32 pu32DevDescriptor; PUINT32 pu32QulDescriptor; @@ -257,13 +257,13 @@ typedef struct __attribute__((__packed__)) { UINT32 u32UVC; UINT32 USBStartFlag; -}USBD_INFO_T; +})USBD_INFO_T; -typedef struct __attribute__((__packed__)) { +typedef PACK(struct { UINT32 appConnected; UINT32 usbConnected; UINT32 appConnected_Audio; -}USBD_STATUS_T; +})USBD_STATUS_T; typedef struct diff --git a/BSP/Driver/Include/port.h b/BSP/Driver/Include/port.h index 5a9ff038..41549c73 100644 --- a/BSP/Driver/Include/port.h +++ b/BSP/Driver/Include/port.h @@ -33,5 +33,25 @@ typedef unsigned short Uint16; #define M_DEBUG sysprintf #define printk sysprintf +#if defined(__GNUC__) +#define PACK(__Declaration__) __Declaration__ __attribute__((__packed__)) +#elif defined(__CC_ARM) +#define PACK(__Declaration__) __Declaration__ __attribute__((packed)) +#elif defined(_MSC_VER) +#define PACK(__Declaration__) __pragma(pack(push, 1)) __Declaration__ __pragma(pack(pop)) +#endif + +#if defined(_MSC_VER) +#define ALIGNED_(x) __declspec(align(x)) +#elif defined(__GNUC__) || defined(__CC_ARM) +#define ALIGNED_(x) __attribute__ ((aligned(x))) +#endif + +#define ALIGNED_TYPE_(t,x) typedef t ALIGNED_(x) + +#if defined (_MSC_VER) +#define __weak +#endif + #endif diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/BuildCmd.bat b/BSP/SampleCode/emWin/GUIDemo/VC2022/BuildCmd.bat new file mode 100644 index 00000000..91c77c74 --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/BuildCmd.bat @@ -0,0 +1,32 @@ + +REM make tool path +REM set make_tool_provided_by=C:\Program Files (x86)\GNU ARM Eclipse\Build Tools\2.8-201611221915\bin +set make_tool_provided_by=C:\msys64\usr\bin +set MAKE_PATH=%make_tool_provided_by% + +REM gcc tool path +set GNU_TOOLS_ARM_EMBEDDED_PATH="C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin" + +set PATH=%MAKE_PATH%;%GNU_TOOLS_ARM_EMBEDDED_PATH%;%PATH% +echo %PATH% + +REM Cross Compiler +SET CROSS_COMPILE=arm-none-eabi- + +SET CC=arm-none-eabi-gcc +SET LD=arm-none-eabi-ld +SET AS=arm-none-eabi-as +SET OBJCOPY=arm-none-eabi-objcopy +SET SIZE=arm-none-eabi-size + +SET CXX= +SET RM=rm -rf + +echo ---------------------------------------------------------------------- +echo Current directory is %~dp0 +echo ---------------------------------------------------------------------- +echo Change directory to %2 +REM 'make -C' will change to directory %2 +echo ---------------------------------------------------------------------- + +make -C %2 -f ../../Makefile.mak %1 diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/Makefile.mak b/BSP/SampleCode/emWin/GUIDemo/VC2022/Makefile.mak new file mode 100644 index 00000000..19ace2f0 --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/Makefile.mak @@ -0,0 +1,189 @@ + +# Make phony targets .PHONY +# There isn't really an all file created and there really isn't clean file. +# There are actually just tags that identify a target whose rules should +# always be run. +.PHONY: all clean target + +# [SD] +# 1: enable SD 0: disable +SD = STORAGE_SD=1 + +# [LCD Resolution] +# __800x480__ __320x240__ +LCD_RESOLUTION = __800x480__ + +# The Preprocessor Macros +DEFS = \ + -DN9H26K6=1 \ + -D$(SD) \ + -D$(LCD_RESOLUTION) \ + +# [Include files] +INCLUDES = \ + -I../../../../../../../BSP/Driver/Include \ + -I../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application \ + -I../../../../../../../BSP/SampleCode/emWin/GUIDemo/tslib \ + -I../../../../../../../BSP/ThirdParty/emWin/Config \ + -I../../../../../../../BSP/ThirdParty/emWin/Include \ + +GFLAGS = \ + -mcpu=arm926ej-s \ + -marm \ + -mlittle-endian \ + -Os \ + -fmessage-length=0 \ + -fsigned-char \ + -ffunction-sections \ + -fdata-sections \ + -g \ + +CFLAGS = $(DEFS) $(INCLUDES) -std=gnu11 + +CPPFLAGS = +CXXFLAGS = + +ASFLAG = -g +TEMPLTFILE = ../../../../../../../BSP/Driver/Source/gcc_arm_SRAM.ld +LINKFILE = ../../../../../../../BSP/Driver/Source/gcc_arm_SRAM_N9H26K6_64MB.ld +LDFLAGS = + +# [LIBS] +LIBS = \ + -lN9H26_SYS \ + -lN9H26_VPOST_FW050TFT_800x480 \ + -lN9H26_ADC \ + -lN9H26_SIC \ + -lN9H26_GNAND \ + -lN9H26_NVTFAT \ + -lNUemWin_ARM9_GNU \ + -lN9H26_BLT \ + -lN9H26_JPEG \ + -lm \ + -L"../../../../../../../BSP/Library_GCC/IPLib" \ + -L"../../../../../../../BSP/Library_GCC/GNANDLib" \ + -L"../../../../../../../BSP/Library_GCC/NVTFATLib" \ + -L"../../../../../../../BSP/ThirdParty/emWin/Lib" \ + + +# define the C source files +# Don't include paths in filenames +# Inerting and maintaining paths everywhere is tedious and error prone. Better is to use +# VPATH within the Makefile like this: +# VPATH=../src +SRCS_C = \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/main.c \ + \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/tslib/N9H26TouchPanel.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/tslib/fbutils.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/tslib/testutils.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/tslib/ts_calibrate.c \ + \ + ../../../../../../../BSP/ThirdParty/emWin/Config/GUI_X.c \ + ../../../../../../../BSP/ThirdParty/emWin/Config/LCDConf.c \ + \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIConf.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_AntialiasedText.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Automotive.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_BarGraph.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Bitmap.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_ColorBar.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Conf.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Cursor.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Fading.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Graph.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_IconView.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_ImageFlow.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Intro.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Listview.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_RadialMenu.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Resource.c\ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Skinning.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Speed.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Speedometer.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Start.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_TransparentDialog.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_Treeview.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_VScreen.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_WashingMachine.c \ + ../../../../../../../BSP/SampleCode/emWin/GUIDemo/Application/GUIDEMO_ZoomAndRotate.c \ + + +# [Assembly Files] +SRCS_S = ../../../../../../../BSP/Driver/Source/Startup_GCC.S + + +# Explicitly name sources +# Lines like this one should be avoided. +# OS_C_SRCS := $(wildcard *.c) + + +# define the C object files +# +# This uses Suffix Replacement within a macro: +# $(name:string1=string2) +# For each word in 'name' replace 'string1' with 'string2' +# Below we are replacing the suffix .c of all words in the macros SRCS_C +# with the .o suffix +OBJS = $(SRCS_C:.c=.o) $(SRCS_S:.S=.o) + +C_DEPS = $(OBJS:.o=.d) + + +MAIN = emWin_GUIDemo.elf + +prebuild: + -arm-none-eabi-cpp -E -DN9H26K6_64MB=1 -P $(TEMPLTFILE) -o $(LINKFILE) + +$(MAIN): $(OBJS) + @echo 'Building target: $@' + @echo 'Invoking: GNU ARM Cross C Linker' + $(CC) $(GFLAGS) -T "$(LINKFILE)" -Xlinker --gc-sections $(LIBDIR) -Wl,-Map,"$*.map" --specs=rdimon.specs -Wl,--start-group $(LIBS) -Wl,--end-group -o "$@" $(OBJS) $(USER_OBJS) $(LIBS) + @echo 'Finished building target: $@' + @echo ' ' + + +TARGET = emWin_GUIDemo.bin + +$(TARGET): $(MAIN) + @echo 'Invoking: GNU ARM Cross Create Flash Image' + $(OBJCOPY) -O binary "$<" "$@" + @echo 'Finished building: $@' + @echo ' ' + + +# This is a suffix replacement rule for building .o's from .c's +# it uses automatic variables $< the name of the prerequisite of +# the rule (a .c file) and $@ the name of the target of the rule (a .o file) +# (see the GNU make manual section about automatic variables) +# +# Define an implicit rule +# +.c.o: + $(CC) $(GFLAGS) $(CFLAGS) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c "$<" -o "$@" + + +.S.o: + $(CC) $(GFLAGS) -x assembler-with-cpp $(INCLUDES) -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -c -o "$@" "$<" + + +# Define an implicit rule other than above +# The following means to build the target foo.S make should build foo.c + +pre-build: + -arm-none-eabi-cpp -E -DN9H26K6_64MB=1 -P ../../../../../../../BSP/Driver/Source/gcc_arm_SRAM.ld -o $(LINKFILE) + +all: pre-build $(TARGET) finalization + +finalization: $(MAIN) + @echo 'Invoking: GNU ARM Cross Print Size' + arm-none-eabi-size --format=berkeley "$<" + @echo ' ' + +rebuild: all + @echo "rebuild done" + +clean: + -$(RM) $(OBJS) $(LINKFILE) $(ASM_DEPS) $(S_UPPER_DEPS) $(C_DEPS) emWin_GUIDemo.elf + -@echo ' ' \ No newline at end of file diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/NuDemo.sln b/BSP/SampleCode/emWin/GUIDemo/VC2022/NuDemo.sln new file mode 100644 index 00000000..34047697 --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/NuDemo.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.32014.148 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "emWin_GUIDemo", "emWin_GUIDemo.vcxproj", "{0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Debug|ARM.ActiveCfg = Debug|ARM + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Debug|ARM.Build.0 = Debug|ARM + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Debug|x86.ActiveCfg = Debug|Win32 + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Debug|x86.Build.0 = Debug|Win32 + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Release|ARM.ActiveCfg = Release|ARM + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Release|ARM.Build.0 = Release|ARM + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Release|x86.ActiveCfg = Release|Win32 + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4F0D58D6-EC3A-401E-B3FE-32073F27C5DA} + EndGlobalSection +EndGlobal diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/NuSIM.dll b/BSP/SampleCode/emWin/GUIDemo/VC2022/NuSIM.dll new file mode 100644 index 00000000..0ac4af75 Binary files /dev/null and b/BSP/SampleCode/emWin/GUIDemo/VC2022/NuSIM.dll differ diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/NuSimDemo.exe b/BSP/SampleCode/emWin/GUIDemo/VC2022/NuSimDemo.exe new file mode 100644 index 00000000..1e3ad157 Binary files /dev/null and b/BSP/SampleCode/emWin/GUIDemo/VC2022/NuSimDemo.exe differ diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj b/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj new file mode 100644 index 00000000..a3318e99 --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj @@ -0,0 +1,188 @@ + + + + + Debug + ARM + + + Debug + Win32 + + + Release + ARM + + + Release + Win32 + + + + 16.0 + {0DC02475-37AE-4ED0-BAEC-532E3BE13D2C} + Win32Proj + emWin_GUIDemo + 10.0 + + + + DynamicLibrary + true + v143 + + + DynamicLibrary + false + v143 + + + v143 + Makefile + + + v143 + Makefile + + + + + + + + + + + + + + + BuildCmd.bat all + BuildCmd.bat clean + BuildCmd.bat rebuild + WIN32;_DEBUG;$(NMakePreprocessorDefinitions) + NuDemo + $(ProjectDir) + $(Platform)\$(Configuration)\ + + + BuildCmd.bat all + BuildCmd.bat clean + BuildCmd.bat rebuild + WIN32;NDEBUG;$(NMakePreprocessorDefinitions) + NuDemo + $(ProjectDir) + $(Platform)\$(Configuration)\ + + + $(MSBuildProjectDirectory)\BuildCmd.bat all $(MSBuildProjectDirectory)\$(Platform)\$(Configuration) + $(MSBuildProjectDirectory)\BuildCmd.bat rebuild $(MSBuildProjectDirectory)\$(Platform)\$(Configuration) + $(MSBuildProjectDirectory)\BuildCmd.bat clean $(MSBuildProjectDirectory)\$(Platform)\$(Configuration) + $(SolutionDir)Driver\Include;$(SolutionDir)SampleCode\emWin_GUIDemo\tslib;$(SolutionDir)ThirdParty\emWin\Include;$(SolutionDir)ThirdParty\emWin\Config;$(SolutionDir)ThirdParty\FATFS\src + + + $(MSBuildProjectDirectory)\BuildCmd.bat all $(MSBuildProjectDirectory)\$(Platform)\$(Configuration) + $(MSBuildProjectDirectory)\BuildCmd.bat rebuild $(MSBuildProjectDirectory)\$(Platform)\$(Configuration) + $(MSBuildProjectDirectory)\BuildCmd.bat clean $(MSBuildProjectDirectory)\$(Platform)\$(Configuration) + $(SolutionDir)Driver\Include;$(SolutionDir)SampleCode\emWin_GUIDemo\tslib;$(SolutionDir)ThirdParty\emWin\Include;$(SolutionDir)ThirdParty\emWin\Config;$(SolutionDir)ThirdParty\FATFS\src + + + + + + + + + + ..\..\..\..\..\BSP\Driver\Include;..\..\..\..\..\BSP\SampleCode\emWin\GUIDemo\tslib;..\..\..\..\..\BSP\ThirdParty\emWin\Include;..\..\..\..\..\BSP\ThirdParty\emWin\Config\Win32;..\..\..\..\..\BSP\ThirdParty\FATFS\src + /wd4047 %(AdditionalOptions) + _WINDLL;STORAGE_SD=0;%(PreprocessorDefinitions) + + + false + $(ProjectDir)nu_SimApp.def + NUGUICore.lib;NUGUISim.lib;winmm.lib;%(AdditionalDependencies) + LIBC.lib; + ..\..\..\..\..\BSP\ThirdParty\emWin\Lib + + + + + + + + + + + ..\..\..\..\..\BSP\Driver\Include;..\..\..\..\..\BSP\SampleCode\emWin\GUIDemo\tslib;..\..\..\..\..\BSP\ThirdParty\emWin\Include;..\..\..\..\..\BSP\ThirdParty\emWin\Config\Win32;..\..\..\..\..\BSP\ThirdParty\FATFS\src + /wd4047 %(AdditionalOptions) + _WINDLL;STORAGE_SD=0;%(PreprocessorDefinitions) + + + false + $(ProjectDir)nu_SimApp.def + NUGUICore.lib;NUGUISim.lib;winmm.lib;%(AdditionalDependencies) + LIBC.lib; + ..\..\..\..\..\BSP\ThirdParty\emWin\Lib + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + + + true + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj.filters b/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj.filters new file mode 100644 index 00000000..eeb8807c --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj.filters @@ -0,0 +1,159 @@ + + + + + + + + + + {2bdb2240-bfef-47e4-87e4-ad8e7ed36b8a} + + + {bd837dff-5871-400c-b478-d9d2e406bbde} + + + {89ed6c89-6f50-4c25-a4ff-410669081035} + + + {12807805-0a12-4963-b076-e4e45bcff489} + + + {9da0cd22-deb4-492b-8841-3f581d1051d7} + + + {84ca9a15-8591-4bcc-bb9d-04f28e56f9da} + + + {95f60f1c-8448-445c-bdbf-f2695d1943a0} + + + {3b17b48b-7925-4e44-b889-6ed9741d3561} + + + {8eb96bb0-13af-4580-8769-605485d3101b} + + + {9fb9d116-122b-4009-a05c-b17ee574d00f} + + + {76dd1651-1825-4be6-9605-73fa76cd9b2d} + + + {9dc1b233-580f-4b16-ad19-33c631b1ce10} + + + + + + ThirdParty\emWin\Config\ARM + + + ThirdParty\emWin\Config\ARM + + + ThirdParty\emWin\Config\WIN32 + + + ThirdParty\emWin\Config\WIN32 + + + ThirdParty\emWin\Config\WIN32 + + + + + + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + SampleCode\emWin\GUIDemo\Application + + + + + + SampleCode\emWin\GUIDemo\tslib + + + SampleCode\emWin\GUIDemo\tslib + + + SampleCode\emWin\GUIDemo\tslib + + + SampleCode\emWin\GUIDemo\tslib + + + \ No newline at end of file diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj.user b/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj.user new file mode 100644 index 00000000..c5ad4823 --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/emWin_GUIDemo.vcxproj.user @@ -0,0 +1,11 @@ + + + + $(ProjectDir)NuSimDemo.exe + WindowsLocalDebugger + + + $(ProjectDir)NuSimDemo.exe + WindowsLocalDebugger + + \ No newline at end of file diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.c b/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.c new file mode 100644 index 00000000..ab5e8f17 --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.c @@ -0,0 +1,50 @@ +#include "GUI.h" +#include "nu_SimApp.h" +#include "LCD_SIM.h" + +NUSIMAPI int CALLBACK AppMain(void) +{ + main(); + //MainTask(); + return 0; +} + +NUSIMAPI void CALLBACK NUSIM_GUI_Enable() +{ + SIM_GUI_Enable(); +} + +NUSIMAPI char* CALLBACK NUSIM_LCD_Init() +{ + return LCDSIM_Init(); +} + +NUSIMAPI void CALLBACK NUSIM_LCD_Exit() +{ + LCDSIM_Exit(); +} + +NUSIMAPI void CALLBACK NUSIM_SetMouseState(int x, int y, int KeyStat, int LayerIndex) +{ + LCDSIM_SetMouseState(x, y, KeyStat, LayerIndex); +} + +NUSIMAPI void CALLBACK NUSIM_CheckMouseState(int LayerIndex) +{ + LCDSIM_CheckMouseState(LayerIndex); +} + +NUSIMAPI int CALLBACK NUSIM_GetXSize(void) +{ + return LCD_GetXSize(); +} + +NUSIMAPI int CALLBACK NUSIM_GetYSize(void) +{ + return LCD_GetYSize(); +} + +NUSIMAPI int CALLBACK NUSIM_GUI_Version(void) +{ + return GUI_VERSION; +} \ No newline at end of file diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.def b/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.def new file mode 100644 index 00000000..abb21b2e --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.def @@ -0,0 +1,15 @@ +; Declares the module parameters for the DLL. + +LIBRARY NuDemo + +EXPORTS + ; Explicit exports can go here + AppMain @1 + NUSIM_GUI_Enable @2 + NUSIM_LCD_Init @3 + NUSIM_LCD_Exit @4 + NUSIM_SetMouseState @5 + NUSIM_CheckMouseState @6 + NUSIM_GetXSize @7 + NUSIM_GetYSize @8 + NUSIM_GUI_Version @9 \ No newline at end of file diff --git a/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.h b/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.h new file mode 100644 index 00000000..31ba7898 --- /dev/null +++ b/BSP/SampleCode/emWin/GUIDemo/VC2022/nu_SimApp.h @@ -0,0 +1,30 @@ +#if !defined (__NU_SIMAPP_H__) +#define __NU_SIMAPP_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define CALLBACK __stdcall + +# if defined (_WINDLL) +# define NUSIMAPI __declspec(dllexport) +# else +# define NUSIMAPI __declspec(dllimport) +# endif + +NUSIMAPI int CALLBACK AppMain(void); +NUSIMAPI void CALLBACK NUSIM_GUI_Enable(); +NUSIMAPI char* CALLBACK NUSIM_LCD_Init(); +NUSIMAPI void CALLBACK NUSIM_LCD_Exit(); +NUSIMAPI void CALLBACK NUSIM_SetMouseState(int x, int y, int KeyStat, int LayerIndex); +NUSIMAPI void CALLBACK NUSIM_CheckMouseState(int LayerIndex); +NUSIMAPI int CALLBACK NUSIM_GetXSize(void); +NUSIMAPI int CALLBACK NUSIM_GetYSize(void); +NUSIMAPI int CALLBACK NUSIM_GUI_Version(void); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/BSP/SampleCode/emWin/GUIDemo/main.c b/BSP/SampleCode/emWin/GUIDemo/main.c index b7267031..72cbc951 100644 --- a/BSP/SampleCode/emWin/GUIDemo/main.c +++ b/BSP/SampleCode/emWin/GUIDemo/main.c @@ -20,7 +20,7 @@ #pragma data_alignment = 32 UINT8 u8FrameBuf[XSIZE_PHYS*YSIZE_PHYS*2]; #else -UINT8 u8FrameBuf[XSIZE_PHYS*YSIZE_PHYS*2] __attribute__((aligned(32))); +UINT8 ALIGNED_(32) u8FrameBuf[XSIZE_PHYS * YSIZE_PHYS * 2]; #endif UINT8 *u8FrameBufPtr; @@ -33,7 +33,7 @@ extern int ts_readfile(int hFile); extern int ts_calibrate(int xsize, int ysize); extern void TouchTask(void); -#ifndef STORAGE_SD +#if defined (STORAGE_SD) && (STORAGE_SD == 0) #define NAND_2 1 // comment to use 1 disk foor NAND, uncomment to use 2 disk UINT32 StorageForNAND(void); @@ -111,7 +111,9 @@ UINT32 StorageForNAND(void) */ void TMR0_IRQHandler(void) { +#ifndef _MSC_VER OS_TimeMS++; +#endif } /********************************************************************* @@ -187,7 +189,9 @@ static void _SYS_Init(void) #endif /* start timer 0 */ +#ifndef _MSC_VER OS_TimeMS = 0; +#endif sysSetTimerReferenceClock(TIMER0, u32ExtFreq); //External Crystal sysStartTimer(TIMER0, 1000, PERIODIC_MODE); /* 1000 ticks/per sec ==> 1tick/1ms */ @@ -197,7 +201,7 @@ static void _SYS_Init(void) sysprintf("fsInitFileSystem.\n"); fsInitFileSystem(); -#ifdef STORAGE_SD +#if defined (STORAGE_SD) && (STORAGE_SD == 1) /*-----------------------------------------------------------------------*/ /* Init SD card */ /*-----------------------------------------------------------------------*/ @@ -245,22 +249,32 @@ int main(void) { // file does not exists, so do calibration hFile = fsOpenFile(szCalibrationFile, szFileName, O_CREATE|O_RDWR | O_FSEEK); - if ( hFile < 0 ) + if (hFile < 0) { sysprintf("CANNOT create the calibration file\n"); - return -1; + //return -1; } + GUI_Init(); + ts_calibrate(LCD_XSIZE, LCD_YSIZE); - ts_writefile(hFile); + + if (hFile) + { + ts_writefile(hFile); + } } else { ts_readfile(hFile); } - fsCloseFile(hFile); -#ifndef STORAGE_SD + if (hFile) + { + fsCloseFile(hFile); + } + +#if defined (STORAGE_SD) && (STORAGE_SD == 0) GNAND_UnMountNandDisk(&ptNDisk); sicClose(); #endif @@ -277,3 +291,193 @@ int main(void) } /*************************** End of file ****************************/ + +#ifdef _MSC_VER + +void sysUartPort(UINT32 u32Port) {} + +INT32 sysInitializeUART(WB_UART_T* uart) +{ + return 0; +} + +VOID sysprintf(PINT8 pcStr, ...) {} + +INT nand_ioctl(INT param1, INT param2, INT param3, INT param4) +{ + return 0; +} + +INT nandInit0(NDISK_T* NDISK_info) +{ + return 0; +} + +INT nandpread0(INT PBA, INT page, UINT8* buff) +{ + return 0; +} + +INT nandpwrite0(INT PBA, INT page, UINT8* buff) +{ + return 0; +} + +INT nand_is_page_dirty0(INT PBA, INT page) +{ + return 0; +} + +INT nand_is_valid_block0(INT PBA) +{ + return 0; +} + +INT nand_block_erase0(INT PBA) +{ + return 0; +} + +INT nand_chip_erase0(void) +{ + return 0; +} + +INT GNAND_InitNAND(NDRV_T* ndriver, NDISK_T* ptNDisk, BOOL bEraseIfNotGnandFormat) +{ + return 0; +} + +INT GNAND_MountNandDisk(NDISK_T* ptNDisk) +{ + return 0; +} + +VOID GNAND_UnMountNandDisk(NDISK_T* ptNDisk) {} + +INT32 sysEnableCache(UINT32 uCacheOpMode) +{ + return 0; +} + +VOID sysFlushCache(INT32 nCacheType) {} +VOID sysInvalidCache() {} + +INT32 DrvADC_Open(void) +{ + return 0; +} + +INT32 DrvADC_Close(void) +{ + return 0; +} + +INT32 adc_read(unsigned char mode, unsigned short int* x, unsigned short int* y) +{ + return 0; +} + +INT32 IsPenDown(void) +{ + return 0; +} + +INT fsInitFileSystem(VOID) +{ + return 0; +} + +INT fsAssignDriveNumber(INT nDriveNo, INT disk_type, INT instance, INT partition) +{ + return 0; +} + +INT fsDiskFreeSpace(INT nDriveNo, UINT32* puBlockSize, UINT32* puFreeSize, UINT32* puDiskSize) +{ + return 0; +} + +INT fsTwoPartAndFormatAll(PDISK_T* ptPDisk, INT firstPartSize, INT secondPartSize) +{ + return 0; +} + +INT fsSetVolumeLabel(INT nDriveNo, CHAR* szLabel, INT nLen) +{ + return 0; +} + +INT fsOpenFile(CHAR* suFileName, CHAR* szAsciiName, UINT32 uFlag) +{ + return 0; +} + +INT fsCloseFile(INT hFile) +{ + return 0; +} + +INT fsAsciiToUnicode(VOID* pvASCII, VOID* pvUniStr, BOOL bIsNullTerm) +{ + return 0; +} + +INT fsReadFile(INT hFile, UINT8* pucPtr, INT nBytes, INT* pnReadCnt) +{ + return 0; +} + +INT fsWriteFile(INT hFile, UINT8* pucBuff, INT nBytes, INT* pnWriteCnt) +{ + return 0; +} + +INT64 fsFileSeek(INT hFile, INT64 n64Offset, INT16 usWhence) +{ + return 0; +} + +void sicOpen(void) {} +void sicClose(void) {} + +INT32 vpostLCMInit(PLCDFORMATEX plcdformatex, UINT32* pFramebuf) +{ + return 0; +} + +INT32 sysSetTimerReferenceClock(INT32 nTimeNo, UINT32 uClockRate) +{ + return 0; +} + +INT32 sysStartTimer(INT32 nTimeNo, UINT32 uTicksPerSecond, INT32 nOpMode) +{ + return 0; +} + +INT32 sysSetTimerEvent(INT32 nTimeNo, UINT32 uTimeTick, PVOID pvFun) +{ + return 0; +} + +UINT32 sysGetExternalClock(void) +{ + return 0; +} + +ERRCODE +sysSetSystemClock(E_SYS_SRC_CLK eSrcClk, // Specified the system clock come from external clock, APLL or UPLL + UINT32 u32PllHz, // Specified the APLL/UPLL clock + UINT32 u32SysHz // Specified the system clock +) +{ + return 0; +} + +UINT32 sysSetDramClock(E_SYS_SRC_CLK eSrcClk, UINT32 u32PLLClockHz, UINT32 u32DdrClock) +{ + return 0; +} + +#endif diff --git a/BSP/ThirdParty/emWin/Config/Win32/GUIConf.c b/BSP/ThirdParty/emWin/Config/Win32/GUIConf.c new file mode 100644 index 00000000..32209556 --- /dev/null +++ b/BSP/ThirdParty/emWin/Config/Win32/GUIConf.c @@ -0,0 +1,61 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2019 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V6.10 - Graphical user interface for embedded applications ** +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with a license and should not be re- +distributed in any way. We appreciate your understanding and fairness. +---------------------------------------------------------------------- +File : GUIConf.c +Purpose : Display controller initialization +---------------------------END-OF-HEADER------------------------------ +*/ + +#include "GUI.h" + +/********************************************************************* +* +* Defines +* +********************************************************************** +*/ +// +// Define the available number of bytes available for the GUI +// +#define GUI_NUMBYTES 0x280000 + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* GUI_X_Config +* +* Purpose: +* Called during the initialization process in order to set up the +* available memory for the GUI. +*/ +void GUI_X_Config(void) { + // + // 32 bit aligned memory area + // + static U32 aMemory[GUI_NUMBYTES / 4]; + // + // Assign memory to emWin + // + GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES); +} + +/*************************** End of file ****************************/ diff --git a/BSP/ThirdParty/emWin/Config/Win32/GUIConf.h b/BSP/ThirdParty/emWin/Config/Win32/GUIConf.h new file mode 100644 index 00000000..bd553cea --- /dev/null +++ b/BSP/ThirdParty/emWin/Config/Win32/GUIConf.h @@ -0,0 +1,61 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2019 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V6.10 - Graphical user interface for embedded applications ** +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with a license and should not be re- +distributed in any way. We appreciate your understanding and fairness. +---------------------------------------------------------------------- +File : GUIConf.h +Purpose : Configuration of available features and default values +---------------------------------------------------------------------- +*/ + +#ifndef GUICONF_H +#define GUICONF_H + +/********************************************************************* +* +* Multi layer/display support +*/ +#define GUI_NUM_LAYERS 16 // Maximum number of available layers + +/********************************************************************* +* +* Multi tasking support +*/ +#define GUI_OS (1) // Compile with multitasking support + +/********************************************************************* +* +* Configuration of available packages +*/ +#define GUI_SUPPORT_TOUCH (1) // Support a touch screen (req. win-manager) +#define GUI_SUPPORT_MOUSE (1) // Support a mouse +#define GUI_WINSUPPORT (1) // Window manager package available +#define GUI_SUPPORT_MEMDEV (1) // Memory devices available + +/********************************************************************* +* +* Configuration of window manager +*/ +#define WM_SUPPORT_NOTIFY_VIS_CHANGED (1) // Enable sending of WM_NOTIFY_VIS_CHANGED messages + +/********************************************************************* +* +* Default font +*/ +#define GUI_DEFAULT_FONT &GUI_Font6x8 + +#endif /* Avoid multiple inclusion */ + +/*************************** End of file ****************************/ diff --git a/BSP/ThirdParty/emWin/Config/Win32/LCDConf.c b/BSP/ThirdParty/emWin/Config/Win32/LCDConf.c new file mode 100644 index 00000000..5f530324 --- /dev/null +++ b/BSP/ThirdParty/emWin/Config/Win32/LCDConf.c @@ -0,0 +1,199 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2019 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V6.10 - Graphical user interface for embedded applications ** +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with a license and should not be re- +distributed in any way. We appreciate your understanding and fairness. +---------------------------------------------------------------------- +File : LCDConf.c +Purpose : Display controller configuration (single layer) +---------------------------END-OF-HEADER------------------------------ +*/ + +#include "GUI.h" + +/********************************************************************* +* +* Layer configuration (to be modified) +* +********************************************************************** +*/ +// +// Physical display size +// +#define XSIZE_PHYS 375 +#define YSIZE_PHYS 640 + +// +// Color conversion +// +#if GUI_USE_ARGB + #define COLOR_CONVERSION GUICC_M8888I +#else + #define COLOR_CONVERSION GUICC_8888 +#endif + +// +// Display driver +// +#define DISPLAY_DRIVER GUIDRV_WIN32 + +/********************************************************************* +* +* Configuration checking +* +********************************************************************** +*/ +#ifndef VXSIZE_PHYS + #define VXSIZE_PHYS XSIZE_PHYS +#endif +#ifndef VYSIZE_PHYS + #define VYSIZE_PHYS YSIZE_PHYS +#endif +#ifndef VRAM_ADDR + #define VRAM_ADDR 0 +#endif + +#ifndef XSIZE_PHYS + #error Physical X size of display is not defined! +#endif +#ifndef YSIZE_PHYS + #error Physical Y size of display is not defined! +#endif +#ifndef COLOR_CONVERSION + #error Color conversion not defined! +#endif +#ifndef DISPLAY_DRIVER + #error No display driver defined! +#endif + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* LCD_X_Config +* +* Purpose: +* Called during the initialization process in order to set up the +* display driver configuration. +* +*/ +void LCD_X_Config(void) { + // + // Set display driver and color conversion for 1st layer + // + GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0); + // + // Display driver configuration + // + LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS); + LCD_SetVSizeEx (0, VXSIZE_PHYS, VYSIZE_PHYS); + LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR); + // + // Set user palette data (only required if no fixed palette is used) + // + #if defined(PALETTE) + LCD_SetLUTEx(0, PALETTE); + #endif +} + +/********************************************************************* +* +* LCD_X_DisplayDriver +* +* Purpose: +* This function is called by the display driver for several purposes. +* To support the according task the routine needs to be adapted to +* the display controller. Please note that the commands marked with +* 'optional' are not cogently required and should only be adapted if +* the display controller supports these features. +* +* Parameter: +* LayerIndex - Index of layer to be configured +* Cmd - Please refer to the details in the switch statement below +* pData - Pointer to a LCD_X_DATA structure +* +* Return Value: +* < -1 - Error +* -1 - Command not handled +* 0 - Ok +*/ +int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) { + int r; + + switch (Cmd) { + // + // Required + // + case LCD_X_INITCONTROLLER: { + // + // Called during the initialization process in order to set up the + // display controller and put it into operation. If the display + // controller is not initialized by any external routine this needs + // to be adapted by the customer... + // + // ... + return 0; + } + case LCD_X_SETVRAMADDR: { + // + // Required for setting the address of the video RAM for drivers + // with memory mapped video RAM which is passed in the 'pVRAM' element of p + // + LCD_X_SETVRAMADDR_INFO * p; + p = (LCD_X_SETVRAMADDR_INFO *)pData; + //... + return 0; + } + case LCD_X_SETORG: { + // + // Required for setting the display origin which is passed in the 'xPos' and 'yPos' element of p + // + LCD_X_SETORG_INFO * p; + p = (LCD_X_SETORG_INFO *)pData; + //... + return 0; + } + case LCD_X_SETLUTENTRY: { + // + // Required for setting a lookup table entry which is passed in the 'Pos' and 'Color' element of p + // + LCD_X_SETLUTENTRY_INFO * p; + p = (LCD_X_SETLUTENTRY_INFO *)pData; + //... + return 0; + } + case LCD_X_ON: { + // + // Required if the display controller should support switching on and off + // + return 0; + } + case LCD_X_OFF: { + // + // Required if the display controller should support switching on and off + // + // ... + return 0; + } + default: + r = -1; + } + return r; +} + +/*************************** End of file ****************************/ diff --git a/BSP/ThirdParty/emWin/Config/Win32/LCDConf.h b/BSP/ThirdParty/emWin/Config/Win32/LCDConf.h new file mode 100644 index 00000000..92363b7c --- /dev/null +++ b/BSP/ThirdParty/emWin/Config/Win32/LCDConf.h @@ -0,0 +1,28 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2019 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V6.10 - Graphical user interface for embedded applications ** +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with a license and should not be re- +distributed in any way. We appreciate your understanding and fairness. +---------------------------------------------------------------------- +File : LCDConf.h +Purpose : Display driver configuration file +---------------------------------------------------------------------- +*/ + +#ifndef LCDCONF_H +#define LCDCONF_H + +#endif /* LCDCONF_H */ + +/*************************** End of file ****************************/ diff --git a/BSP/ThirdParty/emWin/Config/Win32/SIMConf.c b/BSP/ThirdParty/emWin/Config/Win32/SIMConf.c new file mode 100644 index 00000000..8f936e0a --- /dev/null +++ b/BSP/ThirdParty/emWin/Config/Win32/SIMConf.c @@ -0,0 +1,52 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2019 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V6.10 - Graphical user interface for embedded applications ** +emWin is protected by international copyright laws. Knowledge of the +source code may not be used to write a similar product. This file may +only be used in accordance with a license and should not be re- +distributed in any way. We appreciate your understanding and fairness. +---------------------------------------------------------------------- +File : SIMConf.c +Purpose : Windows Simulator configuration +---------------------------END-OF-HEADER------------------------------ +*/ + +#ifdef WIN32 + +#include "LCD_SIM.h" + +/********************************************************************* +* +* Public code +* +********************************************************************** +*/ +/********************************************************************* +* +* SIM_X_Config +* +* Purpose: +* Called during the initialization process in order to configure +* the simulator. +*/ +void SIM_X_Config() { + SIM_GUI_SetTransColor(0xff0000); // Define the transparent color +} + +#else + +void SIMConf_C(void); // Avoid empty object files +void SIMConf_C(void) {} + +#endif + +/*************************** End of file ****************************/ diff --git a/BSP/ThirdParty/emWin/Lib/NUGUICore.lib b/BSP/ThirdParty/emWin/Lib/NUGUICore.lib new file mode 100644 index 00000000..00b8613c Binary files /dev/null and b/BSP/ThirdParty/emWin/Lib/NUGUICore.lib differ diff --git a/BSP/ThirdParty/emWin/Lib/NUGUISim.lib b/BSP/ThirdParty/emWin/Lib/NUGUISim.lib new file mode 100644 index 00000000..595606d0 Binary files /dev/null and b/BSP/ThirdParty/emWin/Lib/NUGUISim.lib differ