实现动画效果

This commit is contained in:
wlk 2019-12-20 17:13:14 +08:00
parent 68f2a39aad
commit 837276fb62
43 changed files with 39436 additions and 35765 deletions

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
@ -45,7 +45,7 @@
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath></ListingPath>
<ListingPath />
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
@ -104,16 +104,16 @@
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>4</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<sDll />
<sDllPa />
<sDlgDll />
<sDlgPa />
<sIfile />
<tDll />
<tDllPa />
<tDlgDll />
<tDlgPa />
<tIfile />
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
@ -133,7 +133,7 @@
<Name>-U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F429IGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Breakpoint />
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
@ -163,19 +163,19 @@
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<LintExecutable />
<LintConfigFile />
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<pMisraName />
<pszMrule />
<pSingCmds />
<pMultCmds />
<pMisraNamep />
<pszMrulep />
<pSingCmdsp />
<pMultCmdsp />
</TargetOption>
</Target>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
@ -19,28 +18,28 @@
<PackID>Keil.STM32F4xx_DFP.2.5.0</PackID>
<PackURL>http://www.keil.com/pack</PackURL>
<Cpu>IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4")</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId></DeviceId>
<RegisterFile></RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<FlashUtilSpec/>
<StartupFile/>
<FlashDriverDll/>
<DeviceId/>
<RegisterFile/>
<MemoryEnv/>
<Cmp/>
<Asm/>
<Linker/>
<OHString/>
<InfinionOptionDll/>
<SLE66CMisc/>
<SLE66AMisc/>
<SLE66LinkerMisc/>
<SFDFile>$$Device:STM32F429IGTx$CMSIS\SVD\STM32F429x.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<BinPath/>
<IncludePath/>
<LibPath/>
<RegisterFilePath/>
<DBRegisterFilePath/>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
@ -55,15 +54,15 @@
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath></ListingPath>
<ListingPath/>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Name/>
<UserProg2Name/>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
@ -72,8 +71,8 @@
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Name/>
<UserProg2Name/>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
@ -82,15 +81,15 @@
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Name/>
<UserProg2Name/>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
<SVCSIdString/>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@ -104,8 +103,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<CustomArgument/>
<IncludeLibraryModules/>
<ComprImg>0</ComprImg>
</CommonProperty>
<DllOption>
@ -138,11 +137,11 @@
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<Flash3/>
<Flash4/>
<pFcarmOut/>
<pFcarmGrp/>
<pFcArmRoot/>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
@ -175,7 +174,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
<RvctDeviceName></RvctDeviceName>
<RvctDeviceName/>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@ -308,7 +307,7 @@
<Size>0x10000</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector></RvctStartVector>
<RvctStartVector/>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@ -335,10 +334,10 @@
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<MiscControls/>
<Define>USE_HAL_DRIVER,STM32F429xx</Define>
<Undefine></Undefine>
<IncludePath>../Inc; ../Src; ../TouchGFX/generated/fonts/include; ../TouchGFX/generated/texts/include; ../TouchGFX/generated/images/include; ../TouchGFX/generated/gui_generated/include; ../TouchGFX/gui/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/BSP/Components/exc7200; ../Drivers/BSP/Components/stmpe811; ../Drivers/BSP/Components/ts3510; ../Drivers/BSP/Components/ampire480272; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/BSP/Components/Common; ../Drivers/CMSIS/Include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ..\Drivers\BSP\Components; ../Middlewares/ST/TouchGFX/touchgfx/framework/include</IncludePath>
<Undefine/>
<IncludePath>../Inc; ../Src; ../TouchGFX/generated/fonts/include; ../TouchGFX/generated/texts/include; ../TouchGFX/generated/images/include; ../TouchGFX/generated/gui_generated/include; ../TouchGFX/gui/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/BSP/Components/exc7200; ../Drivers/BSP/Components/stmpe811; ../Drivers/BSP/Components/ts3510; ../Drivers/BSP/Components/ampire480272; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/BSP/Components/Common; ../Drivers/CMSIS/Include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ..\Drivers\BSP\Components; ../Middlewares/ST/TouchGFX/touchgfx/framework/include</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -353,9 +352,9 @@
<useXO>0</useXO>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<MiscControls/>
<Define/>
<Undefine/>
<IncludePath>..\Inc</IncludePath>
</VariousControls>
</Aads>
@ -368,13 +367,13 @@
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
<pXoBase/>
<ScatterFile/>
<IncludeLibs/>
<IncludeLibsPath/>
<Misc/>
<LinkerInputFile/>
<DisabledWarnings/>
</LDads>
</TargetArmAds>
</TargetOption>
@ -472,6 +471,21 @@
<FileType>1</FileType>
<FilePath>..\Drivers\BSP\Components\bsp_i2c_touch.c</FilePath>
</File>
<File>
<FileName>exc7200.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/BSP/Components/exc7200/exc7200.c</FilePath>
</File>
<File>
<FileName>stmpe811.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/BSP/Components/stmpe811/stmpe811.c</FilePath>
</File>
<File>
<FileName>ts3510.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/BSP/Components/ts3510/ts3510.c</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@ -258,14 +258,23 @@ void MX_DMA2D_Init(void)
/* Configure the DMA2D default mode */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB565;
hdma2d.Init.Mode = DMA2D_M2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0;
hdma2d.LayerCfg[1].InputOffset = 0;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0;
if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
{
Error_Handler( );
}
if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
{
Error_Handler( );
}
}
/* MSPInit/deInit Implementation */

View File

@ -205,9 +205,9 @@ void SystemClock_Config(void)
Error_Handler();
}
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 192;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 250;
PeriphClkInitStruct.PLLSAI.PLLSAIR = 5;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_4;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();

View File

@ -1,7 +1,7 @@
#MicroXplorer Configuration settings - do not modify
DMA2D.ColorMode=DMA2D_OUTPUT_RGB565
DMA2D.ColorMode=DMA2D_OUTPUT_ARGB8888
DMA2D.IPParameters=Mode,ColorMode
DMA2D.Mode=DMA2D_R2M
DMA2D.Mode=DMA2D_M2M
FMC.CASLatency1=FMC_SDRAM_CAS_LATENCY_3
FMC.ExitSelfRefreshDelay1=7
FMC.IPParameters=CASLatency1,SDClockPeriod1,SDClockPeriod2,ReadPipeDelay1,ReadPipeDelay2,LoadToActiveDelay1,ExitSelfRefreshDelay1,SelfRefreshTime1,RowCycleDelay1,RowCycleDelay2,WriteRecoveryTime1,RPDelay1,RPDelay2,RCDDelay1
@ -471,8 +471,8 @@ RCC.HCLKFreq_Value=180000000
RCC.HSE_VALUE=25000000
RCC.HSI_VALUE=16000000
RCC.I2SClocksFreq_Value=96000000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSAIDivR,PLLSAIN,PLLSAIR,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ
RCC.LCDTFTFreq_Value=9600000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSAIN,PLLSAIR,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ
RCC.LCDTFTFreq_Value=25000000
RCC.LSE_VALUE=32768
RCC.LSI_VALUE=32000
RCC.MCO2PinFreq_Value=180000000
@ -480,22 +480,21 @@ RCC.PLLCLKFreq_Value=180000000
RCC.PLLM=25
RCC.PLLN=360
RCC.PLLQCLKFreq_Value=90000000
RCC.PLLSAIDivR=RCC_PLLSAIDIVR_4
RCC.PLLSAIN=192
RCC.PLLSAIN=250
RCC.PLLSAIR=5
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=12500000
RCC.SAI_AClocksFreq_Value=48000000
RCC.SAI_BClocksFreq_Value=48000000
RCC.SAI_AClocksFreq_Value=62500000
RCC.SAI_BClocksFreq_Value=62500000
RCC.SYSCLKFreq_VALUE=180000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.VCOI2SOutputFreq_Value=192000000
RCC.VCOInputFreq_Value=1000000
RCC.VCOOutputFreq_Value=360000000
RCC.VCOSAIOutputFreq_Value=192000000
RCC.VCOSAIOutputFreq_ValueQ=48000000
RCC.VCOSAIOutputFreq_ValueR=38400000
RCC.VCOSAIOutputFreq_Value=250000000
RCC.VCOSAIOutputFreq_ValueQ=62500000
RCC.VCOSAIOutputFreq_ValueR=50000000
RCC.VcooutputI2S=96000000
RCC.VcooutputI2SQ=96000000
SH.FMC_A0.0=FMC_A0,12b-sda1

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<?xml version="1.0" encoding="UTF-8"?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
@ -45,7 +45,7 @@
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath></ListingPath>
<ListingPath />
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
@ -104,16 +104,16 @@
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>4</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<sDll />
<sDllPa />
<sDlgDll />
<sDlgPa />
<sIfile />
<tDll />
<tDllPa />
<tDlgDll />
<tDlgPa />
<tIfile />
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
@ -130,7 +130,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
<Name />
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -162,7 +162,7 @@
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>../touchgfx/gui/src/model/model.cpp</Filename>
<ExecCommand></ExecCommand>
<ExecCommand />
<Expression>\\hellotouchGFX_demo\../touchgfx/gui/src/model/model.cpp\21</Expression>
</Bp>
<Bp>
@ -178,7 +178,7 @@
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>../touchgfx/gui/src/model/model.cpp</Filename>
<ExecCommand></ExecCommand>
<ExecCommand />
<Expression>\\hellotouchGFX_demo\../touchgfx/gui/src/model/model.cpp\19</Expression>
</Bp>
</Breakpoint>
@ -211,19 +211,19 @@
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<LintExecutable />
<LintConfigFile />
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<pMisraName />
<pszMrule />
<pSingCmds />
<pMultCmds />
<pMisraNamep />
<pszMrulep />
<pSingCmdsp />
<pMultCmdsp />
</TargetOption>
</Target>
@ -441,6 +441,42 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/BSP/Components/exc7200/exc7200.c</PathWithFileName>
<FilenameWithoutPath>exc7200.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/BSP/Components/stmpe811/stmpe811.c</PathWithFileName>
<FilenameWithoutPath>stmpe811.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Drivers/BSP/Components/ts3510/ts3510.c</PathWithFileName>
<FilenameWithoutPath>ts3510.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -451,7 +487,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>17</FileNumber>
<FileNumber>20</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -463,7 +499,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>18</FileNumber>
<FileNumber>21</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -475,7 +511,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>19</FileNumber>
<FileNumber>22</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -487,7 +523,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>20</FileNumber>
<FileNumber>23</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -499,7 +535,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>21</FileNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -511,7 +547,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>22</FileNumber>
<FileNumber>25</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -523,7 +559,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>23</FileNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -535,7 +571,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -547,7 +583,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -559,7 +595,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -571,7 +607,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -583,7 +619,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -595,7 +631,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -607,7 +643,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -619,7 +655,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -631,7 +667,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -643,7 +679,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -655,7 +691,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -667,7 +703,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -679,7 +715,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -691,7 +727,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -703,7 +739,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -715,7 +751,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -727,7 +763,7 @@
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -747,7 +783,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -767,7 +803,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -779,7 +815,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -791,7 +827,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -803,7 +839,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -815,7 +851,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -827,7 +863,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -839,7 +875,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -851,7 +887,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -863,7 +899,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -875,7 +911,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -895,7 +931,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>55</FileNumber>
<FileType>4</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -907,7 +943,19 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>56</FileNumber>
<FileType>4</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>../Middlewares/ST/TouchGFX/touchgfx/lib/core/cortex_m4f/Keil/touchgfx_core.lib</PathWithFileName>
<FilenameWithoutPath>touchgfx_core.lib</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>57</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -927,7 +975,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>58</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -939,7 +987,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>59</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -951,7 +999,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>60</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -963,7 +1011,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>61</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -975,7 +1023,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>62</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -987,7 +1035,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>63</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1007,7 +1055,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>64</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1019,7 +1067,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>65</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1031,7 +1079,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>66</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1043,7 +1091,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>67</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1055,7 +1103,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>68</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1067,7 +1115,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>69</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1079,7 +1127,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>70</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1091,7 +1139,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>71</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1103,7 +1151,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>72</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1115,7 +1163,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>73</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1127,7 +1175,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>74</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1139,7 +1187,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>75</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1151,7 +1199,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>76</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1163,7 +1211,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>77</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1175,7 +1223,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>78</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1187,7 +1235,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>79</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1199,7 +1247,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>80</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1211,7 +1259,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>81</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1223,7 +1271,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>82</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1235,7 +1283,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>83</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1247,7 +1295,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>84</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1259,7 +1307,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>85</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1271,7 +1319,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>86</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1283,7 +1331,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>87</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1295,7 +1343,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>88</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
@ -19,28 +18,28 @@
<PackID>Keil.STM32F4xx_DFP.2.5.0</PackID>
<PackURL>http://www.keil.com/pack</PackURL>
<Cpu>IRAM(0x20000000-0x2002FFFF) IRAM2(0x10000000-0x1000FFFF) IROM(0x8000000-0x80FFFFF) CLOCK(25000000) FPU2 CPUTYPE("Cortex-M4")</Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId></DeviceId>
<RegisterFile></RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<FlashUtilSpec/>
<StartupFile/>
<FlashDriverDll/>
<DeviceId/>
<RegisterFile/>
<MemoryEnv/>
<Cmp/>
<Asm/>
<Linker/>
<OHString/>
<InfinionOptionDll/>
<SLE66CMisc/>
<SLE66AMisc/>
<SLE66LinkerMisc/>
<SFDFile>$$Device:STM32F429IGTx$CMSIS\SVD\STM32F429x.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath></BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<BinPath/>
<IncludePath/>
<LibPath/>
<RegisterFilePath/>
<DBRegisterFilePath/>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
@ -55,15 +54,15 @@
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath></ListingPath>
<ListingPath/>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Name/>
<UserProg2Name/>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
@ -72,8 +71,8 @@
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Name/>
<UserProg2Name/>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
@ -82,15 +81,15 @@
<AfterMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Name/>
<UserProg2Name/>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopA1X>0</nStopA1X>
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>0</SelectedForBatchBuild>
<SVCSIdString></SVCSIdString>
<SVCSIdString/>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@ -104,8 +103,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<CustomArgument/>
<IncludeLibraryModules/>
<ComprImg>0</ComprImg>
</CommonProperty>
<DllOption>
@ -138,11 +137,11 @@
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>STLink\ST-LINKIII-KEIL_SWO.dll</Flash2>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<Flash3/>
<Flash4/>
<pFcarmOut/>
<pFcarmGrp/>
<pFcArmRoot/>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
@ -175,7 +174,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
<RvctDeviceName></RvctDeviceName>
<RvctDeviceName/>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@ -308,7 +307,7 @@
<Size>0x10000</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector></RvctStartVector>
<RvctStartVector/>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@ -335,10 +334,10 @@
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<MiscControls/>
<Define>USE_HAL_DRIVER,STM32F429xx</Define>
<Undefine></Undefine>
<IncludePath>../Inc; ../Src; ../TouchGFX/generated/fonts/include; ../TouchGFX/generated/texts/include; ../TouchGFX/generated/images/include; ../TouchGFX/generated/gui_generated/include; ../TouchGFX/gui/include;../middlewares/st/touchgfx/touchgfx/framework/include; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/BSP/Components/exc7200; ../Drivers/BSP/Components/stmpe811; ../Drivers/BSP/Components/ts3510; ../Drivers/BSP/Components/ampire480272; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/BSP/Components/Common; ../Drivers/CMSIS/Include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include; ..\Drivers\BSP\Components;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include</IncludePath>
<Undefine/>
<IncludePath>../Inc; ../Src; ../TouchGFX/generated/fonts/include; ../TouchGFX/generated/texts/include; ../TouchGFX/generated/images/include; ../TouchGFX/generated/gui_generated/include; ../TouchGFX/gui/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/BSP/Components/exc7200; ../Drivers/BSP/Components/stmpe811; ../Drivers/BSP/Components/ts3510; ../Drivers/BSP/Components/ampire480272; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/BSP/Components/Common; ../Drivers/CMSIS/Include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ..\Drivers\BSP\Components; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../Middlewares/ST/TouchGFX/touchgfx/framework/include</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -353,9 +352,9 @@
<useXO>0</useXO>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<MiscControls/>
<Define/>
<Undefine/>
<IncludePath>..\Inc</IncludePath>
</VariousControls>
</Aads>
@ -368,13 +367,13 @@
<useFile>0</useFile>
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
<pXoBase/>
<ScatterFile/>
<IncludeLibs/>
<IncludeLibsPath/>
<Misc/>
<LinkerInputFile/>
<DisabledWarnings/>
</LDads>
</TargetArmAds>
</TargetOption>
@ -472,6 +471,21 @@
<FileType>1</FileType>
<FilePath>..\Drivers\BSP\Components\bsp_i2c_touch.c</FilePath>
</File>
<File>
<FileName>exc7200.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/BSP/Components/exc7200/exc7200.c</FilePath>
</File>
<File>
<FileName>stmpe811.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/BSP/Components/stmpe811/stmpe811.c</FilePath>
</File>
<File>
<FileName>ts3510.c</FileName>
<FileType>1</FileType>
<FilePath>../Drivers/BSP/Components/ts3510/ts3510.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -672,6 +686,11 @@
<FileType>4</FileType>
<FilePath>../middlewares/st/touchgfx/touchgfx/lib/core/cortex_m4f/Keil/touchgfx_core.lib</FilePath>
</File>
<File>
<FileName>touchgfx_core.lib</FileName>
<FileType>4</FileType>
<FilePath>../Middlewares/ST/TouchGFX/touchgfx/lib/core/cortex_m4f/Keil/touchgfx_core.lib</FilePath>
</File>
<File>
<FileName>OSWrappers.cpp</FileName>
<FileType>8</FileType>

View File

@ -258,14 +258,23 @@ void MX_DMA2D_Init(void)
/* Configure the DMA2D default mode */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB565;
hdma2d.Init.Mode = DMA2D_M2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0;
hdma2d.LayerCfg[1].InputOffset = 0;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0;
if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
{
Error_Handler( );
}
if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
{
Error_Handler( );
}
}
/* MSPInit/deInit Implementation */

View File

@ -217,9 +217,9 @@ void SystemClock_Config(void)
Error_Handler();
}
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 192;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 250;
PeriphClkInitStruct.PLLSAI.PLLSAIR = 5;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_4;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();

View File

@ -1,7 +1,7 @@
#MicroXplorer Configuration settings - do not modify
DMA2D.ColorMode=DMA2D_OUTPUT_RGB565
DMA2D.ColorMode=DMA2D_OUTPUT_ARGB8888
DMA2D.IPParameters=Mode,ColorMode
DMA2D.Mode=DMA2D_R2M
DMA2D.Mode=DMA2D_M2M
FMC.CASLatency1=FMC_SDRAM_CAS_LATENCY_3
FMC.ExitSelfRefreshDelay1=7
FMC.IPParameters=CASLatency1,SDClockPeriod1,SDClockPeriod2,ReadPipeDelay1,ReadPipeDelay2,LoadToActiveDelay1,ExitSelfRefreshDelay1,SelfRefreshTime1,RowCycleDelay1,RowCycleDelay2,WriteRecoveryTime1,RPDelay1,RPDelay2,RCDDelay1
@ -39,7 +39,7 @@ GRAPHICS.EA_3_in_file1_param7=MDK-ARM V5
GRAPHICS.EA_3_os-TouchGFX_F429_439=Windows
GRAPHICS.EW_FRAME_BUFFER_COLOR_FORMAT-TouchGFX_F429_439=RGB565
GRAPHICS.GUI_NUM_LAYERS-TouchGFX_F429_439=1
GRAPHICS.IPParameters=EA_3_in_file1_param2,EA_3_in_file1_param3,TGFX_Pixel_Format_DPI_DSI-TouchGFX_F429_439,TGFX_depth-TouchGFX_F429_439,GUI_NUM_LAYERS-TouchGFX_F429_439,Use_ili9341_Check-TouchGFX_F429_439,EA_3_os-TouchGFX_F429_439,EA_3_command_line_template-TouchGFX_F429_439,EW_FRAME_BUFFER_COLOR_FORMAT-TouchGFX_F429_439,Check_OTM8009A_PixelFormat-TouchGFX_F429_439,Use_SDRAM-TouchGFX_F429_439,Use_DSI-TouchGFX_F429_439,USE_Embedded_Wizard-TouchGFX_F429_439,USE_STTouchGFX-TouchGFX_F429_439,Use_ili9341,EA_3_input_param1,EA_3_in_file1_src,EA_3_in_file1_param4,EA_3_in_file1_param5,EA_3_in_file1_param7,EA_3_in_file1_trg,EA_3_in_dir1_src,EA_3_in_dir1_trg,EA_3_executable_name-TouchGFX_F429_439
GRAPHICS.IPParameters=EA_3_in_file1_param2,EA_3_in_file1_param3,TGFX_Pixel_Format_DPI_DSI-TouchGFX_F429_439,TGFX_depth-TouchGFX_F429_439,GUI_NUM_LAYERS-TouchGFX_F429_439,Use_ili9341_Check-TouchGFX_F429_439,EA_3_os-TouchGFX_F429_439,EA_3_command_line_template-TouchGFX_F429_439,EW_FRAME_BUFFER_COLOR_FORMAT-TouchGFX_F429_439,Check_OTM8009A_PixelFormat-TouchGFX_F429_439,Use_SDRAM-TouchGFX_F429_439,Use_DSI-TouchGFX_F429_439,USE_Embedded_Wizard-TouchGFX_F429_439,USE_STTouchGFX-TouchGFX_F429_439,Use_ili9341,EA_3_in_file1_param4,EA_3_in_file1_param7,EA_3_executable_name-TouchGFX_F429_439
GRAPHICS.TGFX_Pixel_Format_DPI_DSI-TouchGFX_F429_439=RGB565
GRAPHICS.TGFX_depth-TouchGFX_F429_439=16
GRAPHICS.USE_Embedded_Wizard-TouchGFX_F429_439=0
@ -487,8 +487,8 @@ RCC.HCLKFreq_Value=180000000
RCC.HSE_VALUE=25000000
RCC.HSI_VALUE=16000000
RCC.I2SClocksFreq_Value=96000000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSAIDivR,PLLSAIN,PLLSAIR,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ
RCC.LCDTFTFreq_Value=9600000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSAIN,PLLSAIR,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ
RCC.LCDTFTFreq_Value=25000000
RCC.LSE_VALUE=32768
RCC.LSI_VALUE=32000
RCC.MCO2PinFreq_Value=180000000
@ -496,22 +496,21 @@ RCC.PLLCLKFreq_Value=180000000
RCC.PLLM=25
RCC.PLLN=360
RCC.PLLQCLKFreq_Value=90000000
RCC.PLLSAIDivR=RCC_PLLSAIDIVR_4
RCC.PLLSAIN=192
RCC.PLLSAIN=250
RCC.PLLSAIR=5
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=12500000
RCC.SAI_AClocksFreq_Value=48000000
RCC.SAI_BClocksFreq_Value=48000000
RCC.SAI_AClocksFreq_Value=62500000
RCC.SAI_BClocksFreq_Value=62500000
RCC.SYSCLKFreq_VALUE=180000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.VCOI2SOutputFreq_Value=192000000
RCC.VCOInputFreq_Value=1000000
RCC.VCOOutputFreq_Value=360000000
RCC.VCOSAIOutputFreq_Value=192000000
RCC.VCOSAIOutputFreq_ValueQ=48000000
RCC.VCOSAIOutputFreq_ValueR=38400000
RCC.VCOSAIOutputFreq_Value=250000000
RCC.VCOSAIOutputFreq_ValueQ=62500000
RCC.VCOSAIOutputFreq_ValueR=50000000
RCC.VcooutputI2S=96000000
RCC.VcooutputI2SQ=96000000
SH.FMC_A0.0=FMC_A0,12b-sda1

View File

@ -53,6 +53,7 @@ void MemManage_Handler(void);
void BusFault_Handler(void);
void UsageFault_Handler(void);
void DebugMon_Handler(void);
void USART3_IRQHandler(void);
void TIM6_DAC_IRQHandler(void);
void LTDC_IRQHandler(void);
void DMA2D_IRQHandler(void);

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -338,7 +338,7 @@
<MiscControls></MiscControls>
<Define>USE_HAL_DRIVER,STM32F429xx</Define>
<Undefine></Undefine>
<IncludePath>../Inc; ../Src; ../TouchGFX/generated/fonts/include; ../TouchGFX/generated/texts/include; ../TouchGFX/generated/images/include; ../TouchGFX/generated/gui_generated/include; ../TouchGFX/gui/include;../middlewares/st/touchgfx/touchgfx/framework/include; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/BSP/Components/exc7200; ../Drivers/BSP/Components/stmpe811; ../Drivers/BSP/Components/ts3510; ../Drivers/BSP/Components/ampire480272; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/BSP/Components/Common; ../Drivers/CMSIS/Include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include; ..\Drivers\BSP\Components;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include;../middlewares/st/touchgfx/touchgfx/framework/include</IncludePath>
<IncludePath>../Inc; ../Src; ../TouchGFX/generated/fonts/include; ../TouchGFX/generated/texts/include; ../TouchGFX/generated/images/include; ../TouchGFX/generated/gui_generated/include; ../TouchGFX/gui/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../Drivers/STM32F4xx_HAL_Driver/Inc; ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F; ../Drivers/BSP/Components/exc7200; ../Drivers/BSP/Components/stmpe811; ../Drivers/BSP/Components/ts3510; ../Drivers/BSP/Components/ampire480272; ../Drivers/CMSIS/Device/ST/STM32F4xx/Include; ../Drivers/BSP/Components/Common; ../Drivers/CMSIS/Include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ..\Drivers\BSP\Components; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../middlewares/st/touchgfx/touchgfx/framework/include; ../Middlewares/ST/TouchGFX/touchgfx/framework/include; ..\TouchGFX\gui\include\gui\common; ..\TouchGFX\gui\include\gui\graph_widget</IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -360,7 +360,7 @@
</VariousControls>
</Aads>
<LDads>
<umfTarg>1</umfTarg>
<umfTarg>0</umfTarg>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<noStLib>0</noStLib>
@ -369,7 +369,7 @@
<TextAddressRange>0x08000000</TextAddressRange>
<DataAddressRange>0x20000000</DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile></ScatterFile>
<ScatterFile>hellotouchGFX_demo\hellotouchGFX_demo.sct</ScatterFile>
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
@ -392,6 +392,11 @@
<Group>
<GroupName>Application/User</GroupName>
<Files>
<File>
<FileName>sensor.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\Src\sensor.cpp</FilePath>
</File>
<File>
<FileName>main.cpp</FileName>
<FileType>8</FileType>
@ -672,6 +677,11 @@
<FileType>4</FileType>
<FilePath>../middlewares/st/touchgfx/touchgfx/lib/core/cortex_m4f/Keil/touchgfx_core.lib</FilePath>
</File>
<File>
<FileName>touchgfx_core.lib</FileName>
<FileType>4</FileType>
<FilePath>../Middlewares/ST/TouchGFX/touchgfx/lib/core/cortex_m4f/Keil/touchgfx_core.lib</FilePath>
</File>
<File>
<FileName>OSWrappers.cpp</FileName>
<FileType>8</FileType>
@ -1014,6 +1024,41 @@
</File>
</Files>
</Group>
<Group>
<GroupName>graph_widget</GroupName>
<Files>
<File>
<FileName>AbstractGraph.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\TouchGFX\gui\src\graph_widget\AbstractGraph.cpp</FilePath>
</File>
<File>
<FileName>Graph.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\TouchGFX\gui\src\graph_widget\Graph.cpp</FilePath>
</File>
<File>
<FileName>GraphBelow.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\TouchGFX\gui\src\graph_widget\GraphBelow.cpp</FilePath>
</File>
<File>
<FileName>GraphDots.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\TouchGFX\gui\src\graph_widget\GraphDots.cpp</FilePath>
</File>
<File>
<FileName>GraphLine.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\TouchGFX\gui\src\graph_widget\GraphLine.cpp</FilePath>
</File>
<File>
<FileName>PainterVerticalAlpha.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\TouchGFX\gui\src\graph_widget\PainterVerticalAlpha.cpp</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>

View File

@ -172,7 +172,7 @@ void MX_FMC_Init(void)
hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_2;
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_DISABLE;
hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_1;
/* SdramTiming */
SdramTiming.LoadToActiveDelay = 2;
@ -258,14 +258,23 @@ void MX_DMA2D_Init(void)
/* Configure the DMA2D default mode */
hdma2d.Instance = DMA2D;
hdma2d.Init.Mode = DMA2D_R2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB565;
hdma2d.Init.Mode = DMA2D_M2M;
hdma2d.Init.ColorMode = DMA2D_OUTPUT_ARGB8888;
hdma2d.Init.OutputOffset = 0;
hdma2d.LayerCfg[1].InputOffset = 0;
hdma2d.LayerCfg[1].InputColorMode = DMA2D_INPUT_ARGB8888;
hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
hdma2d.LayerCfg[1].InputAlpha = 0;
if (HAL_DMA2D_Init(&hdma2d) != HAL_OK)
{
Error_Handler( );
}
if (HAL_DMA2D_ConfigLayer(&hdma2d, 1) != HAL_OK)
{
Error_Handler( );
}
}
/* MSPInit/deInit Implementation */

View File

@ -24,6 +24,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "sensor.h"
/* USER CODE END Includes */
@ -47,12 +48,15 @@ CRC_HandleTypeDef hcrc;
SPI_HandleTypeDef hspi5;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart3;
osThreadId mainTaskHandle;
osThreadId keyTaskHandle;
osThreadId sensorTaskHandle;
osMessageQId gui_msg_qHandle;
osMessageQId sensor_msg_qHandle;
/* USER CODE BEGIN PV */
ts_sensor_data s_sensor_data;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
@ -64,8 +68,10 @@ extern void GRAPHICS_HW_Init(void);
extern void GRAPHICS_Init(void);
extern void GRAPHICS_MainTask(void);
static void MX_USART1_UART_Init(void);
static void MX_USART3_UART_Init(void);
void StartmainTask(void const * argument);
void StartkeyTask(void const * argument);
void StartsensorTask(void const * argument);
/* USER CODE BEGIN PFP */
@ -107,6 +113,7 @@ int main(void)
MX_GPIO_Init();
MX_CRC_Init();
MX_USART1_UART_Init();
MX_USART3_UART_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
@ -136,6 +143,10 @@ int main(void)
osMessageQDef(gui_msg_q, 16, uint8_t);
gui_msg_qHandle = osMessageCreate(osMessageQ(gui_msg_q), NULL);
/* definition and creation of sensor_msg_q */
osMessageQDef(sensor_msg_q, 20, uint32_t);
sensor_msg_qHandle = osMessageCreate(osMessageQ(sensor_msg_q), NULL);
/* USER CODE BEGIN RTOS_QUEUES */
/* add queues, ... */
/* USER CODE END RTOS_QUEUES */
@ -149,6 +160,10 @@ int main(void)
osThreadDef(keyTask, StartkeyTask, osPriorityNormal, 0, 256);
keyTaskHandle = osThreadCreate(osThread(keyTask), NULL);
/* definition and creation of sensorTask */
osThreadDef(sensorTask, StartsensorTask, osPriorityNormal, 0, 512);
sensorTaskHandle = osThreadCreate(osThread(sensorTask), NULL);
/* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */
/* USER CODE END RTOS_THREADS */
@ -217,9 +232,9 @@ void SystemClock_Config(void)
Error_Handler();
}
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 192;
PeriphClkInitStruct.PLLSAI.PLLSAIN = 250;
PeriphClkInitStruct.PLLSAI.PLLSAIR = 5;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_4;
PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
@ -323,6 +338,39 @@ static void MX_USART1_UART_Init(void)
}
/**
* @brief USART3 Initialization Function
* @param None
* @retval None
*/
static void MX_USART3_UART_Init(void)
{
/* USER CODE BEGIN USART3_Init 0 */
/* USER CODE END USART3_Init 0 */
/* USER CODE BEGIN USART3_Init 1 */
/* USER CODE END USART3_Init 1 */
huart3.Instance = USART3;
huart3.Init.BaudRate = 9600;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART3_Init 2 */
/* USER CODE END USART3_Init 2 */
}
/**
* @brief GPIO Initialization Function
* @param None
@ -457,6 +505,30 @@ void StartkeyTask(void const * argument)
/* USER CODE END StartkeyTask */
}
/* USER CODE BEGIN Header_StartsensorTask */
/**
* @brief Function implementing the sensorTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartsensorTask */
void StartsensorTask(void const * argument)
{
/* USER CODE BEGIN StartsensorTask */
sensor_read_init();
osMessagePut(sensor_msg_qHandle,(uint32_t)&s_sensor_data,200);
/* Infinite loop */
for(;;)
{
if(sensor_read_func()==0)
{
osMessagePut(sensor_msg_qHandle,(uint32_t)&s_sensor_data,200);
}
osDelay(500);
}
/* USER CODE END StartsensorTask */
}
/**
* @brief Period elapsed callback in non blocking mode
* @note This function is called when TIM6 interrupt took place, inside

View File

@ -0,0 +1,139 @@
/**
******************************************************************************
* @file
* @author
* @version V2.0.0
* @date 07/13/2019
******************************************************************************
*/
#include "sensor.h"
#include "stdio.h"
#include "string.h"
extern UART_HandleTypeDef huart3;
uint8_t aTxBuffer[30]; //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
uint8_t aRxBuffer[1];
__IO ITStatus Tx_ready_UART3 = SET; //<2F>˴<EFBFBD><CBB4><EFBFBD><EFBFBD>븳ֵSET
__IO ITStatus Rx_ready_UART3 = RESET;
uint8_t Rx_buff_UART3[30];
uint8_t Rx_count_UART3=0; //UART3 <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
uint8_t Rx_num_UART3=0; //UART3 һ<><D2BB>ָ<EFBFBD><D6B8>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><D5BA>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
extern ts_sensor_data s_sensor_data;
//68 01 0E 01 19 01 B4 00(wifi) 00 00 00 10(crc) 5C 6E
#define FRM_START 0x68
#define FRM_CMD_UPD_SENSOR 0x01
#define FRM_FIXLEN 14
#define FRM_END0 0x5c
#define FRM_END1 0x6e
#define FRM_POS_START 0
#define FRM_POS_CMD 1
#define FRM_POS_LEN 2
#define FRM_POS_DATA 3
#define FRM_POS_CRC 11
#define FRM_POS_END0 12
#define FRM_POS_END1 13
uint8_t cal_crc(uint8_t *buf,uint8_t len)
{
uint8_t t_crc = 0;
uint8_t r_crc = 0;
//check crc
for(int i=0; i<len ;i++)
{
t_crc += buf[i];
}
r_crc = (uint8_t)t_crc;
return r_crc;
}
int8_t parse_sensor_package(void)
{
uint8_t msg[8];
int rc = 0;
if(Rx_buff_UART3[FRM_POS_START]==FRM_START && Rx_buff_UART3[FRM_POS_CRC] == cal_crc(Rx_buff_UART3,FRM_FIXLEN-3))
{
if(Rx_buff_UART3[FRM_POS_CMD]==FRM_CMD_UPD_SENSOR)
{
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_11);
msg[0]=Rx_buff_UART3[FRM_POS_DATA];
msg[1]=Rx_buff_UART3[FRM_POS_DATA+1];
msg[2]=Rx_buff_UART3[FRM_POS_DATA+2];
msg[3]=Rx_buff_UART3[FRM_POS_DATA+3];
msg[4]=Rx_buff_UART3[FRM_POS_DATA+4];
s_sensor_data.temperature[1] = (msg[0]*256+msg[1])/10;
s_sensor_data.temperature[0] = (msg[0]*256+msg[1])%10;
s_sensor_data.humidity[1] = (msg[2]*256+msg[3])/10;
s_sensor_data.humidity[0] = (msg[2]*256+msg[3])%10;
s_sensor_data.wifi_status = msg[4];//wifi status
//printf("s_sensor_data.wifi_status =%d\n\r",s_sensor_data.wifi_status);
}
}else{
rc = -1;
}
return rc;
}
void Start_Next_UART_Receive_IT(UART_HandleTypeDef *UartHandle)
{
HAL_UART_Receive_IT(UartHandle,aRxBuffer,1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if(UartHandle->Instance == USART3)
{
Rx_buff_UART3[Rx_count_UART3] = aRxBuffer[0];
if((Rx_buff_UART3[Rx_count_UART3-1] == 0x5c && Rx_buff_UART3[Rx_count_UART3] == 0x6e) || Rx_count_UART3 > FRM_FIXLEN)
{
Rx_ready_UART3 = SET;
Rx_num_UART3 = ++Rx_count_UART3;
Start_Next_UART_Receive_IT(&huart3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
else
{
Rx_count_UART3++;
Start_Next_UART_Receive_IT(&huart3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ж<EFBFBD>
}
}
}
void sensor_read_init(void)
{
Start_Next_UART_Receive_IT(&huart3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ж<EFBFBD>
s_sensor_data.wifi_status=FRM_CMD_UPD_INITSTAT;
}
int sensor_read_func(void)
{
int rc = 0;
if(Rx_ready_UART3==SET)
{
Rx_ready_UART3 = RESET;
rc = parse_sensor_package();
Rx_count_UART3=0;
memset(Rx_buff_UART3,0,sizeof(Rx_buff_UART3));
}else{
rc = -1;
}
return rc;
}
void sensor_read_start_next()
{
Start_Next_UART_Receive_IT(&huart3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ν<EFBFBD><CEBD><EFBFBD><EFBFBD>ж<EFBFBD>
}

View File

@ -267,6 +267,33 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
/* USER CODE END USART1_MspInit 1 */
}
else if(huart->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspInit 0 */
/* USER CODE END USART3_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_USART3_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**USART3 GPIO Configuration
PB10 ------> USART3_TX
PB11 ------> USART3_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* USART3 interrupt Init */
HAL_NVIC_SetPriority(USART3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);
/* USER CODE BEGIN USART3_MspInit 1 */
/* USER CODE END USART3_MspInit 1 */
}
}
@ -296,6 +323,26 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
/* USER CODE END USART1_MspDeInit 1 */
}
else if(huart->Instance==USART3)
{
/* USER CODE BEGIN USART3_MspDeInit 0 */
/* USER CODE END USART3_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART3_CLK_DISABLE();
/**USART3 GPIO Configuration
PB10 ------> USART3_TX
PB11 ------> USART3_RX
*/
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_10|GPIO_PIN_11);
/* USART3 interrupt DeInit */
HAL_NVIC_DisableIRQ(USART3_IRQn);
/* USER CODE BEGIN USART3_MspDeInit 1 */
/* USER CODE END USART3_MspDeInit 1 */
}
}

View File

@ -60,6 +60,7 @@
/* External variables --------------------------------------------------------*/
extern DMA2D_HandleTypeDef hdma2d;
extern LTDC_HandleTypeDef hltdc;
extern UART_HandleTypeDef huart3;
extern TIM_HandleTypeDef htim6;
/* USER CODE BEGIN EV */
@ -162,6 +163,20 @@ void DebugMon_Handler(void)
/* please refer to the startup file (startup_stm32f4xx.s). */
/******************************************************************************/
/**
* @brief This function handles USART3 global interrupt.
*/
void USART3_IRQHandler(void)
{
/* USER CODE BEGIN USART3_IRQn 0 */
/* USER CODE END USART3_IRQn 0 */
HAL_UART_IRQHandler(&huart3);
/* USER CODE BEGIN USART3_IRQn 1 */
/* USER CODE END USART3_IRQn 1 */
}
/**
* @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts.
*/

View File

@ -0,0 +1,84 @@
/**
******************************************************************************
* File Name : SENSOR.h
* Description : This file provides code for the configuration
* of the sensor instances.
******************************************************************************
** This notice applies to any and all portions of this file
* that are not between comment pairs USER CODE BEGIN and
* USER CODE END. Other portions of this file, whether
* inserted by the user or by software development tools
* are owned by their respective copyright owners.
*
* COPYRIGHT(c) 2019 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __sensor_H
#define __sensor_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef SIMULATOR
//#include "usart.h"
#endif
#include "stm32f4xx_hal.h"
#include <stdint.h>
/* Includes ------------------------------------------------------------------*/
#define FRM_CMD_UPD_SENSOR 0x01//SHT30 DATA
#define FRM_CMD_UPD_RESTWIFI 0x02//REST WIFI
#define FRM_CMD_UPD_AIRLINK 0x03//CONFIG WIFI TO ROUTER
#define FRM_CMD_UPD_CONFIGEND 0x04//LINKED TO ROUTER
#define FRM_CMD_UPD_INITSTAT 0x05//INIT STATUS
typedef struct _s_sensor_data
{
uint8_t temperature[2];
uint8_t humidity[2];
uint16_t pm25;
uint8_t wifi_status;
}ts_sensor_data;
void sensor_read_init(void);
int sensor_read_func(void);
void sensor_read_start_next();
#ifdef __cplusplus
}
#endif
#endif /*__ sensor_H */
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,493 @@
#ifndef ABSTRACTGRAPH_HPP
#define ABSTRACTGRAPH_HPP
#include <touchgfx/hal/Types.hpp>
#include <touchgfx/widgets/Widget.hpp>
#include <touchgfx/widgets/canvas/Canvas.hpp>
#include <touchgfx/widgets/canvas/CanvasWidget.hpp>
#include <touchgfx/Color.hpp>
using namespace touchgfx;
/**
* @class AbstractGraph AbstractGraph.hpp
*
* @brief Simple widget capable of drawing a graph line. The graph line consists of a number of
* points with different x values. Points on the graph can be added and removed and the
* coordinate system of the graph can easily be setup. The graph is limited to integer
* values for x and y and the values should not exceed 1000.
*
* @see CanvasWidget
*/
class AbstractGraph : public CanvasWidget
{
public:
/**
* @class GraphPoint AbstractGraph.hpp gui/common/AbstractGraph.hpp
*
* @brief A graph point on the graph line.
*
* A graph point on the graph line. The point stores the slope of the line going from
* this point to the next on the graph line.
*/
class GraphPoint
{
public:
/**
* @fn GraphPoint::GraphPoint()
*
* @brief Default constructor.
*
* Default constructor.
*/
GraphPoint()
{
}
int x; ///< The x coordinate of the points.
int y; ///< The y coordinate of the points.
CWRUtil::Q5 dx, dy; ///< The slope from the GridPoint to the next on the AbstractGraph
};
/**
* @fn AbstractGraph::AbstractGraph()
*
* @brief Constructs a new NewGraph.
*
* Constructs a new NewGraph.
*/
AbstractGraph();
/**
* @fn virtual AbstractGraph::~AbstractGraph()
*
* @brief Virtual Destructor.
*
* Virtual Destructor. Not used.
*/
virtual ~AbstractGraph();
/**
* @fn CWRUtil::Q5 AbstractGraph::widgetX(int x) const;
*
* @brief Calculate Widget x coordinate.
*
* Calculate widget x coordinate from a graph x coordinate.
*
* @param x The x coordinate.
*
* @return The x coordinate in the widget in Q5 format.
*/
CWRUtil::Q5 widgetX(int x) const;
/**
* @fn CWRUtil::Q5 AbstractGraph::widgetY(int y) const;
*
* @brief Calculate Widget y coordinate.
*
* Calculate widget y coordinate from a graph y coordinate.
*
* @param y The y coordinate.
*
* @return The y coordinate in the widget in Q5 format.
*/
CWRUtil::Q5 widgetY(int y) const;
/**
* @fn CWRUtil::Q5 AbstractGraph::widgetXindex(int index) const;
*
* @brief Calculate Widget x coordinate of the index'th point.
*
* Calculate widget x coordinate of the index'th point.
*
* @param index The index.
*
* @return The x coordinate in the widget in Q5 format.
*/
CWRUtil::Q5 widgetXindex(int index) const;
/**
* @fn CWRUtil::Q5 AbstractGraph::widgetYindex(int index) const;
*
* @brief Calculate Widget y coordinate of the index'th point.
*
* Calculate widget y coordinate of the index'th point.
*
* @param index The index.
*
* @return The y coordinate in the widget in Q5 format.
*/
CWRUtil::Q5 widgetYindex(int index) const;
/**
* @fn void AbstractGraph::setBuffer(GraphPoint *pointsBuffer, int numPointsInBuffer)
*
* @brief Sets a buffer to be used to store points on the graph line.
*
* Sets a buffer to be used to store points on the graph line.
*
* @param [in] pointsBuffer If non-null, buffer for points data.
* @param numPointsInBuffer Number of points in buffers.
*/
void setBuffer(GraphPoint* pointsBuffer, int numPointsInBuffer);
/**
* @fn void AbstractGraph::setLinkedGraph(AbstractGraph &other);
*
* @brief Sets linked graph.
*
* Sets linked graph which is updated when necessary. Invalidation etc is also
* handled. Linked graphs share the memory used for graph points and will thus
* reduce memory requirements.
*
* @note this is only intended to link to another graph with lineWidth==0 at the moment.
*
* @param [in] other The other graph to link to.
*/
void setLinkedGraph(AbstractGraph& other);
/**
* @fn void AbstractGraph::setRange(int newLleft, int newRight, int newTop, int newBottom)
*
* @brief Sets the range of the graph.
*
* Sets the range of the graph.
*
* @param newLeft The value at the left of the graph area.
* @param newRight The value at the right of the graph area.
* @param newTop The value at the top of the graph area.
* @param newBottom The value at the bottom of the graph area.
*/
void setRange(int newLleft, int newRight, int newTop, int newBottom);
/**
* @fn virtual void Drawable::setX(int16_t x)
*
* @brief Sets the x coordinate of this drawable.
*
* Sets the x coordinate of this drawable.
*
* @note Changing this does not automatically yield a redraw.
*
* @param x The new x value, relative to the parent. A negative value is allowed.
*/
virtual void setX(int16_t x);
/**
* @fn virtual void Drawable::setY(int16_t y)
*
* @brief Sets the y coordinate of this drawable.
*
* Sets the y coordinate of this drawable.
*
* @note Changing this does not automatically yield a redraw.
*
* @param y The new y value, relative to the parent. A negative value is allowed.
*/
virtual void setY(int16_t y);
/**
* @fn virtual void AbstractGraph::setWidth(int16_t width)
*
* @brief Sets the width of this drawable.
*
* Sets the width of this drawable.
*
* @note Changing this does not automatically yield a redraw.
*
* @param width The new width.
*/
virtual void setWidth(int16_t width);
/**
* @fn virtual void AbstractGraph::setHeight(int16_t height)
*
* @brief Sets the height of this drawable.
*
* Sets the height of this drawable.
*
* @note Changing this does not automatically yield a redraw.
*
* @param height The new height.
*/
virtual void setHeight(int16_t height);
/**
* @fn template <class T> void AbstractGraph::setLineWidth(T width)
*
* @brief Sets the width for this graph line.
*
* Sets the width for this graph line. A line width of 0 is handled specially as
* it will fill the area below the graph line.
*
* @note The graph line is invalidated.
*
* @tparam T Generic type parameter.
* @param width The width of the line measured in pixels.
*/
template <class T>
void setLineWidth(T width)
{
CWRUtil::Q5 newLineWidth = CWRUtil::toQ5(width);
if (lineWidth == newLineWidth)
{
return;
}
lineWidth = newLineWidth;
if (numPoints > 0)
{
updateAndInvalidateCacheForLinesBetweenIndeces(0, numPoints - 1);
}
}
/**
* @fn template <class T> T AbstractGraph::getLineWidth() const
*
* @brief Gets line width.
*
* Gets line width.
*
* @tparam T Generic type parameter.
*
* @return The line width.
*/
template <class T>
T getLineWidth() const
{
return int(lineWidth) / T(Rasterizer::POLY_BASE_SIZE);
}
/**
* @fn virtual void NewGraph::clearGraph()
*
* @brief Clears the graph.
*
* @note The graph line is not invalidated.
*/
virtual void clearGraph();
/**
* @fn virtual bool AbstractGraph::addValue(int x, int y)
*
* @brief Adds a value to the graph.
*
* Adds a value to the graph.
*
* @note The updated graph line is invalidated.
*
* @param x The value.
* @param y The y coordinate.
*
* @return true if it succeeds, false if it fails.
*/
virtual bool addValue(int x, int y);
/**
* @fn virtual bool AbstractGraph::deleteValue(int x)
*
* @brief Deletes the value on the graph line at the given x coordinate.
*
* Deletes the value on the graph line at the given x coordinate.
*
* @param x The x coordinate.
*
* @return true if a point with the given x value was found and deleted, false otherwise.
*/
virtual bool deleteValue(int x);
/**
* @fn virtual bool AbstractGraph::drawCanvasWidget(const Rect& invalidatedArea) const
*
* @brief Draw the graph line.
*
* Draw the graph line. Care is taken not to spend time drawing graphs lines
* that are outside the invalidated area.
*
* @param invalidatedArea The rectangle to draw, with coordinates relative to this drawable.
*
* @return true if it succeeds, false if there was insufficient memory to draw the line.
*/
virtual bool drawCanvasWidget(const Rect& invalidatedArea) const;
protected:
virtual Rect getMinimalRectContainingIndices(int firstIndex, int lastIndex) const = 0;
virtual void invalidateRectContainingIndices(int firstIndex, int lastIndex) const;
/**
* @fn Rect AbstractGraph::updateCacheForLinesBetweenIndeces(int firstIndex, int lastIndex)
*
* @brief Updates the NewGraph cache for one element.
*
* The cache is used to be able to quickly redraw the graph line without
* calculating the slope of all the lines that make up the graph line.
*
* @param firstIndex Zero-based index of the first index to update cache for.
* @param lastIndex Zero-based index of the last index to update cache for (actually lastIndex-1 is the last).
*
* @return A Rect enclosing the graph line in the given range from firstIndex to lastIndex (inclusive).
*/
virtual void updateAndInvalidateCacheForLinesBetweenIndeces(int firstIndex, int lastIndex);
/**
* @fn Rect AbstractGraph::getMinimalRect() const
*
* @brief Gets minimal rectangle containing the NewGraph. Used for invalidating only the
* required part of the screen.
*
* @return The minimal rectangle.
*/
virtual Rect getMinimalRect() const;
AbstractGraph* linkedGraph; ///< Graph sharing data with this graph. Updated when setting range, changing values etc.
int left, right, top, bottom; ///< Limits of the values of the graph line area
GraphPoint* points; ///< Pointer to buffer where the coordinates are stored
int maxPoints; ///< Maximum number of points possible on graph line
int numPoints; ///< Number of points currently in use
CWRUtil::Q5 lineWidth; ///< Line with (0=fill below graph line)
CWRUtil::Q5 widgetWidth; ///< Width of the widget as Q5
CWRUtil::Q5 widgetHeight; ///< Height of the widget as Q5
CWRUtil::Q5 graphWidth; ///< Width of the graph range (left to right) as Q5
CWRUtil::Q5 graphHeight; ///< Height of the graph range (top to bottom) as Q5
/**
* @fn void AbstractGraph::setNumPoints(int numPointsUsed)
*
* @brief Sets number of used points.
*
* Sets number of used points, synchronize with linked graph.
*
* @param numPointsUsed The number of used points.
*/
virtual void setNumPoints(int numPointsUsed);
/**
* @fn void AbstractGraph::invalidateLineFromIndex(int index)
*
* @brief Invalidate line from index to index+1.
*
* Invalidate line from index to index+1.
*
* @param index Zero-based index of the left end point.
*/
virtual void invalidateLineFromIndex(int index);
/**
* @fn void AbstractGraph::insertPointAtIndex(int index)
*
* @brief Inserts a point at the given index.
*
* There is only made room for the point, by moving all points after the given
* index one index up.
*
* @param index Zero-based index of the point.
*/
virtual void insertPointAtIndex(int index);
/**
* @fn void AbstractGraph::deletePointAtIndex(int index)
*
* @brief Deletes the point at the given index.
*
* Deletes the point at the given index.
*
* @param index Zero-based index of the point.
*/
virtual void deletePointAtIndex(int index);
/**
* @fn int AbstractGraph::findX(int x)
*
* @brief Searches for the given x coordinate.
*
* Searches for the given x coordinate. If the x coordinate is not found, the
* closest index is returned so that the point at the returned index has the
* first x value higher than the sought x coordinate (or at usedPoints if the x
* coordinate is higher than the x coordinate of all existing points)
*
* @param x The x coordinate.
*
* @return The index of the found x coordinate where the x should be inserted.
*/
virtual int findX(int x);
// A handful of functions to get the Q5 coordinates of the corners of the line segments making up the line
CWRUtil::Q5 xAboveOutgoing(int index) const
{
return widgetXindex(index) + points[index].dy;
}
CWRUtil::Q5 yAboveOutgoing(int index) const
{
return widgetYindex(index) - points[index].dx;
}
CWRUtil::Q5 xBelowOutgoing(int index) const
{
return widgetXindex(index) - points[index].dy;
}
CWRUtil::Q5 yBelowOutgoing(int index) const
{
return widgetYindex(index) + points[index].dx;
}
CWRUtil::Q5 xAboveIncoming(int index) const
{
return widgetXindex(index) + points[index - 1].dy;
}
CWRUtil::Q5 yAboveIncoming(int index) const
{
return widgetYindex(index) - points[index - 1].dx;
}
CWRUtil::Q5 xBelowIncoming(int index) const
{
return widgetXindex(index) - points[index - 1].dy;
}
CWRUtil::Q5 yBelowIncoming(int index) const
{
return widgetYindex(index) + points[index - 1].dx;
}
private:
/**
* @fn void AbstractGraph::assignRange(int newLeft, int newRight, int newTop, int newBottom)
*
* @brief Sets the range of the graph.
*
* Sets the range of the graph.
*
* @param newLeft The value at the left of the graph area.
* @param newRight The value at the right of the graph area.
* @param newTop The value at the top of the graph area.
* @param newBottom The value at the bottom of the graph area.
*/
void assignRange(int newLeft, int newRight, int newTop, int newBottom);
/**
* @fn virtual void AbstractGraph::assignWidth(int16_t width)
*
* @brief Sets the width of this drawable.
*
* Sets the width of this drawable.
*
* @note Changing this does not automatically yield a redraw.
*
* @param width The new width.
*/
virtual void assignWidth(int16_t width);
/**
* @fn virtual void AbstractGraph::assignHeight(int16_t height)
*
* @brief Sets the height of this drawable.
*
* Sets the height of this drawable.
*
* @note Changing this does not automatically yield a redraw.
*
* @param height The new height.
*/
virtual void assignHeight(int16_t height);
};
#endif

View File

@ -0,0 +1,115 @@
#ifndef GRAPH_HPP
#define GRAPH_HPP
#include "GraphLine.hpp"
#include "GraphBelow.hpp"
#include "GraphDots.hpp"
#include "PainterVerticalAlpha.hpp"
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/Image.hpp>
#include <touchgfx/widgets/canvas/Circle.hpp>
#if !defined(USE_BPP) || USE_BPP==16
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565Bitmap.hpp>
#elif USE_BPP==24
#include <touchgfx/widgets/canvas/PainterRGB888.hpp>
#include <touchgfx/widgets/canvas/PainterRGB888Bitmap.hpp>
#elif USE_BPP==4
#include <touchgfx/widgets/canvas/PainterGRAY4.hpp>
#include <touchgfx/widgets/canvas/PainterGRAY4Bitmap.hpp>
#elif USE_BPP==2
#include <touchgfx/widgets/canvas/PainterGRAY2.hpp>
#include <touchgfx/widgets/canvas/PainterGRAY2Bitmap.hpp>
#else
#error Unknown USE_BPP
#endif
#include <BitmapDatabase.hpp>
#include <touchgfx/widgets/Box.hpp>
using namespace touchgfx;
class Graph : public Container
{
public:
static const int NUMBER_OF_POINTS = 8000;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ĸ<EFBFBD><C4B8><EFBFBD>
Graph();
virtual ~Graph() { }
void setup(int newWidth, int newHeight, colortype lineColor, colortype backgroundColor);
bool addValue(int x, int y)
{
return graphLine.addValue(x, y);
}
bool deleteValue(int x)
{
return graphLine.deleteValue(x);
}
void clear()
{
graphLine.clearGraph();
}
void setRange(int left, int right, int top, int bottom);
void setLineVisible(bool lineVisible);
void setDotsVisible(bool dotsVisible);
void setDotsBackgroundVisible(bool dotsBackgroundVisible);
void setAreaVisible(bool areaVisible);
void setDotShape(int startAngle, int angleStep, int lineWidth);
void setDotBackgroundShape(int startAngle, int angleStep, int lineWidth);
void setLineWidth(int width);
void set_Draw_Range(int left,int right,int top,int button);
uint8_t getAlpha()
{
return myAlpha;
}
void setAlpha(uint8_t alpha)
{
myAlpha = alpha;
graphLine.setAlpha(myAlpha);
graphArea.setAlpha(myAlpha);
graphDots.setAlpha(myAlpha);
graphDotsBackground.setAlpha(myAlpha);
invalidate();
}
protected:
GraphLine graphLine;
GraphBelow graphArea;
GraphDots graphDots;
GraphDots graphDotsBackground;
GraphLine::GraphPoint graphBuffer[NUMBER_OF_POINTS];
#if !defined(USE_BPP) || USE_BPP==16
PainterRGB565 graphLinePainter;
PainterRGB565 graphDotsPainter;
PainterRGB565 graphDotsBackgroundPainter;
#elif USE_BPP==24
PainterRGB888 graphLinePainter;
PainterRGB888 graphDotsPainter;
PainterRGB888 graphDotsBackgroundPainter;
#elif USE_BPP==4
PainterGRAY4 graphLinePainter;
PainterGRAY4 graphDotsPainter;
PainterGRAY4 graphDotsBackgroundPainter;
#elif USE_BPP==2
PainterGRAY2 graphLinePainter;
PainterGRAY2 graphDotsPainter;
PainterGRAY2 graphDotsBackgroundPainter;
#else
#error Unknown USE_BPP
#endif
PainterVerticalAlpha graphAreaPainter;
uint8_t myAlpha;
};
#endif /* GRAPH_HPP */

View File

@ -0,0 +1,52 @@
#ifndef GRAPHBELOW_HPP
#define GRAPHBELOW_HPP
#include "GraphLine.hpp"
#include <touchgfx/hal/Types.hpp>
#include <touchgfx/widgets/Widget.hpp>
#include <touchgfx/widgets/canvas/Canvas.hpp>
#include <touchgfx/widgets/canvas/CanvasWidget.hpp>
#include <touchgfx/Color.hpp>
using namespace touchgfx;
/**
* @class GraphBelow GraphBelow.hpp
*
* @brief Simple widget capable of drawing a graph line. The graph line consists of a number of
* points with different x values. Points on the graph can be added and removed and the
* coordinate system of the graph can easily be setup.
*
* @see CanvasWidget
*/
class GraphBelow : public GraphLine
{
public:
/**
* @fn virtual GraphBelow::~GraphBelow()
*
* @brief Virtual Destructor. Not used.
*
* Virtual Destructor. Not used.
*/
virtual ~GraphBelow();
/**
* @fn virtual bool GraphBelow::drawCanvasWidget(const Rect& invalidatedArea) const
*
* @brief Draw the graph line.
*
* Draw the graph line. Care is taken not to spend time drawing graphs lines
* that are outside the invalidated area.
*
* @param invalidatedArea The rectangle to draw, with coordinates relative to this drawable.
*
* @return true if it succeeds, false if there was insufficient memory to draw the line.
*/
virtual bool drawCanvasWidget(const Rect& invalidatedArea) const;
protected:
virtual Rect getMinimalRectContainingIndices(int firstIndex, int lastIndex) const;
};
#endif

View File

@ -0,0 +1,81 @@
#ifndef GRAPHDOTS_HPP
#define GRAPHDOTS_HPP
#include "AbstractGraph.hpp"
#include <touchgfx/hal/Types.hpp>
#include <touchgfx/widgets/Widget.hpp>
#include <touchgfx/widgets/canvas/Canvas.hpp>
#include <touchgfx/widgets/canvas/CanvasWidget.hpp>
#include <touchgfx/Color.hpp>
using namespace touchgfx;
/**
* @class GraphDots GraphDots.hpp
*
* @brief Simple widget capable of drawing a graph of dots. The graph consists of a number of
* points with different x values. Points on the graph can be added and removed and the
* coordinate system of the graph can easily be setup.
*
* @see CanvasWidget
*/
class GraphDots : public AbstractGraph
{
public:
/**
* @fn GraphDots::GraphDots();
*
* @brief Default constructor.
*
* Default constructor.
*/
GraphDots();
/**
* @fn void GraphDots::setDotShape(int dotStartAngle, int dotAngleStep);
*
* @brief Sets dot shape.
*
* Sets dot shape. Using the start angle and angle step various shapes can be made.
* Example shapes are (0,30) circle, (0,90) diamond, (0,120) triangle, (0,144)
* pentagram, (0,135) octagram, (45,90) square, (0,72) pentagon, etc.
*
* @param dotStartAngle The start angle.
* @param dotAngleStep The angle step.
*/
void setDotShape(int dotStartAngle, int dotAngleStep);
/**
* @fn virtual bool GraphDots::drawCanvasWidget(const Rect& invalidatedArea) const;
*
* @brief Draw the graph.
*
* Draw the graph. Care is taken not to spend time drawing graph dots that are
* outside the invalidated area.
*
* @param invalidatedArea The rectangle to draw, with coordinates relative to this drawable.
*
* @return true if it succeeds, false if there was insufficient memory to draw the line.
*/
virtual bool drawCanvasWidget(const Rect& invalidatedArea) const;
protected:
/**
* @fn virtual Rect GraphDots::getMinimalRectContainingIndices(int firstIndex, int lastIndex) const;
*
* @brief Gets minimal rectangle containing dots for the given indices.
*
* Gets minimal rectangle containing dots for the given range of indices. Line width
* is taken into account to get the right rectangle.
*
* @param firstIndex Zero-based index of the first.
* @param lastIndex Zero-based index of the last.
*
* @return The minimal rectangle containing indices.
*/
virtual Rect getMinimalRectContainingIndices(int firstIndex, int lastIndex) const;
int startAngle, angleStep;
};
#endif

View File

@ -0,0 +1,56 @@
#ifndef GRAPHLINE_HPP
#define GRAPHLINE_HPP
#include "AbstractGraph.hpp"
#include <touchgfx/hal/Types.hpp>
#include <touchgfx/widgets/Widget.hpp>
#include <touchgfx/widgets/canvas/Canvas.hpp>
#include <touchgfx/widgets/canvas/CanvasWidget.hpp>
#include <touchgfx/Color.hpp>
using namespace touchgfx;
/**
* @class GraphLine GraphLine.hpp
*
* @brief Simple widget capable of drawing a graph line. The graph line consists of a number of
* points with different x values. Points on the graph can be added and removed and the
* coordinate system of the graph can easily be setup.
*
* @see CanvasWidget
*/
class GraphLine : public AbstractGraph
{
public:
/**
* @fn virtual bool GraphLine::drawCanvasWidget(const Rect& invalidatedArea) const;
*
* @brief Draw the graph line.
*
* Draw the graph line. Care is taken not to spend time drawing graph lines that are
* outside the invalidated area.
*
* @param invalidatedArea The rectangle to draw, with coordinates relative to this drawable.
*
* @return true if it succeeds, false if there was insufficient memory to draw the line.
*/
virtual bool drawCanvasWidget(const Rect& invalidatedArea) const;
protected:
/**
* @fn virtual Rect GraphLine::getMinimalRectContainingIndices(int firstIndex, int lastIndex) const;
*
* @brief Gets minimal rectangle containing line between the given indices.
*
* Gets minimal rectangle containing line between the given indices. Line width is
* taken into account to get the right rectangle.
*
* @param firstIndex Zero-based index of the first.
* @param lastIndex Zero-based index of the last.
*
* @return The minimal rectangle containing indices.
*/
virtual Rect getMinimalRectContainingIndices(int firstIndex, int lastIndex) const;
};
#endif

View File

@ -0,0 +1,105 @@
#ifndef PAINTERVERTICALALPHA_HPP
#define PAINTERVERTICALALPHA_HPP
#include <touchgfx/hal/Types.hpp>
#include <stdint.h>
#if !defined(USE_BPP) || USE_BPP==16
#include <touchgfx/widgets/canvas/AbstractPainterRGB565.hpp>
#elif USE_BPP==24
#include <touchgfx/widgets/canvas/AbstractPainterRGB888.hpp>
#elif USE_BPP==4
#include <touchgfx/widgets/canvas/AbstractPainterGRAY4.hpp>
#include <platform/driver/lcd/LCD4bpp.hpp>
#elif USE_BPP==2
#include <touchgfx/widgets/canvas/AbstractPainterGRAY2.hpp>
#include <platform/driver/lcd/LCD2bpp.hpp>
#else
#error Unknown USE_BPP
#endif
using namespace touchgfx;
/**
* @class PainterVerticalAlpha PainterVerticalAlpha.hpp
*
* @brief A Painter that will paint using a fading color.
*
* PainterVerticalAlpha will paint using the given color at y coordinate 0 fading
* the color to invisible at the given y coordinate.
*
* @see AbstractPainter
*/
class PainterVerticalAlpha :
#if !defined(USE_BPP) || USE_BPP==16
public AbstractPainterRGB565
#elif USE_BPP==24
public AbstractPainterRGB888
#elif USE_BPP==4
public AbstractPainterGRAY4
#elif USE_BPP==2
public AbstractPainterGRAY2
#else
#error Unknown USE_BPP
#endif
{
public:
/**
* @fn PainterVerticalAlpha::PainterVerticalAlpha(colortype color = 0, int alpha0atY = 100);
*
* @brief Constructor.
*
* Constructor.
*
* @param color The color.
* @param alpha0atY The y coordinate where alpha has faded to 0.
*/
PainterVerticalAlpha(colortype color = 0, int alpha0atY = 100);
/**
* @fn void PainterVerticalAlpha::setColor(colortype color, int alphaZeroAt);
*
* @brief Sets color and alpha to use when drawing the CanvasWidget.
*
* Sets color and alpha to use when drawing the CanvasWidget.
*
* @param color The color.
* @param alphaZeroAt The y coordinate where alpha has faded to 0.
*/
void setColor(colortype color, int alphaZeroAt);
virtual void render(uint8_t* ptr, int x, int xAdjust, int y, unsigned count, const uint8_t* covers);
protected:
/**
* @fn virtual bool PainterVerticalAlpha::renderInit();
*
* @brief Get ready to render (part of) a scanline.
*
* Get ready to render (part of) a scanline. Since the scanline will have the same y
* coordinate, the alpha for the scanline can be calculated here and used for all
* pixels in the scanline.
*
* @return true if it succeeds, false if it fails.
*/
virtual bool renderInit();
#if !defined(USE_BPP) || USE_BPP==16 || USE_BPP==24
virtual bool renderNext(uint8_t& pixelRed, uint8_t& pixelGreen, uint8_t& pixelBlue, uint8_t& pixelAlpha);
uint8_t painterRed; ///< The red part of the color
uint8_t painterGreen; ///< The green part of the color
uint8_t painterBlue; ///< The blue part of the color
#elif USE_BPP==4 || USE_BPP==2
virtual bool renderNext(uint8_t& gray, uint8_t& alpha);
uint8_t painterGray; ///< The gray color
#else
#error Unknown USE_BPP
#endif
uint8_t painterAlpha; ///< Current alpha for the scan line
int alpha0atY; ///< The Y coordinate where alpha has faded to 0
private:
}; // class PainterVerticalAlpha
#endif /* PAINTERVERTICALALPHA_HPP */

View File

@ -2,7 +2,7 @@
#define MODELLISTENER_HPP
#include <gui/model/Model.hpp>
#include "sensor.h"
/**
* ModelListener is the interface through which the Model can inform the currently
* active presenter of events. All presenters should derive from this class.
@ -31,6 +31,10 @@ public:
{
// Override and implement this function in Presenter
}
virtual void update_sensor_event(ts_sensor_data *p_sensor_data)
{
// Override and implement this function in Presenter
}
protected:
Model* model;
};

View File

@ -26,6 +26,8 @@ public:
virtual void deactivate();
virtual ~Screen1Presenter() {};
virtual void update_sensor_event(ts_sensor_data *p_sensor_data);
private:
Screen1Presenter();

View File

@ -1,12 +1,13 @@
#ifndef SCREEN1VIEW_HPP
#define SCREEN1VIEW_HPP
#include <stdlib.h>
#include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
#include <touchgfx/widgets/Image.hpp>
#include <touchgfx/widgets/TextureMapper.hpp>
#include <touchgfx/widgets/AnimationTextureMapper.hpp>
#include <touchgfx/EasingEquations.hpp>
#include "Graph.hpp"
class Screen1View : public Screen1ViewBase
{
@ -16,7 +17,31 @@ public:
virtual void setupScreen();
virtual void tearDownScreen();
virtual void handleTickEvent();
virtual void update_sensor_value(ts_sensor_data *p_sensor_data);
virtual void set_sensor_value(ts_sensor_data *p_sensor_data);
void setupHand(TextureMapper& hand, const BitmapId bitmapId, int16_t clockRotationCenterX, int16_t clockRotationCenterY, int16_t rotationCenterX, int16_t rotationCenterY);
private:
// uint16_t g_tick;
// float max_sim;
// uint8_t max_z;
// uint8_t max_w;
// uint16_t From_Presenter_temperature;
// uint16_t From_Presenter_temperature_z;
// float real_temperature;
// uint8_t Time_base;
// uint8_t Time_baseg;
// uint8_t Time_baseS;
// float avg;
// uint16_t avg_flag;
// float avg_all;
// float avg_r;
// uint8_t avg_r_w;
// uint8_t avg_r_z;
protected:
int tickCounter;
int hours;
@ -26,7 +51,13 @@ protected:
float humidityEntropi;
float temperatureEntropi;
uint16_t g_y;
ts_sensor_data v_sensor_data;
uint16_t wait;
};
#endif // SCREEN1VIEW_HPP

View File

@ -0,0 +1,422 @@
#include "AbstractGraph.hpp"
using namespace touchgfx;
AbstractGraph::AbstractGraph() :
CanvasWidget(), linkedGraph(0), left(-1), right(-1), top(-1), bottom(-1), points(0), maxPoints(0), lineWidth(0)
{
clearGraph();
}
AbstractGraph::~AbstractGraph()
{
}
CWRUtil::Q5 AbstractGraph::widgetX(int x) const
{
if (graphWidth == 0)
{
return CWRUtil::toQ5(0);
}
return CWRUtil::toQ5(x - left) * widgetWidth / graphWidth;
}
CWRUtil::Q5 AbstractGraph::widgetY(int y) const
{
if (graphHeight == 0)
{
return CWRUtil::toQ5(0);
}
return CWRUtil::toQ5(y - top) * widgetHeight / graphHeight;
}
CWRUtil::Q5 AbstractGraph::widgetXindex(int index) const
{
return widgetX(points[index].x);
}
CWRUtil::Q5 AbstractGraph::widgetYindex(int index) const
{
return widgetY(points[index].y);
}
void AbstractGraph::setBuffer(GraphPoint* pointsBuffer, int numPointsInBuffer)
{
points = pointsBuffer;
maxPoints = numPointsInBuffer;
numPoints = 0;
if (linkedGraph)
{
linkedGraph->setBuffer(pointsBuffer, numPointsInBuffer);
}
}
void AbstractGraph::setLinkedGraph(AbstractGraph& other)
{
if (linkedGraph == &other)
{
return;
}
if (linkedGraph != 0)
{
linkedGraph->setLinkedGraph(other);
}
else
{
linkedGraph = &other;
}
}
void AbstractGraph::setRange(int newLleft, int newRight, int newTop, int newBottom)
{
if (left != newLleft || right != newRight || top != newTop || bottom != newBottom)
{
assignRange(newLleft, newRight, newTop, newBottom);
if (numPoints > 0)
{
updateAndInvalidateCacheForLinesBetweenIndeces(0, numPoints - 1);
}
}
}
void AbstractGraph::setX(int16_t x)
{
CanvasWidget::setX(x);
if (linkedGraph)
{
linkedGraph->setX(x);
}
}
void AbstractGraph::setY(int16_t y)
{
CanvasWidget::setY(y);
if (linkedGraph)
{
linkedGraph->setY(y);
}
}
void AbstractGraph::setWidth(int16_t width)
{
assignWidth(width);
if (numPoints > 0)
{
updateAndInvalidateCacheForLinesBetweenIndeces(0, numPoints - 1);
}
}
void AbstractGraph::setHeight(int16_t height)
{
assignHeight(height);
if (numPoints > 0)
{
updateAndInvalidateCacheForLinesBetweenIndeces(0, numPoints - 1);
}
}
void AbstractGraph::clearGraph()
{
numPoints = 0;
if (linkedGraph)
{
linkedGraph->clearGraph();
}
}
bool AbstractGraph::addValue(int x, int y)
{
if (numPoints >= maxPoints)
{
return false;
}
if (numPoints == 0 || x > points[numPoints - 1].x)
{
// Point added at end of graph line
points[numPoints].x = x;
points[numPoints].y = y;
setNumPoints(numPoints + 1);
updateAndInvalidateCacheForLinesBetweenIndeces(numPoints - 2, numPoints - 1);
}
else
{
int index = findX(x);
assert(points[index].x >= x && "Bug in binary search algorithm");
if (points[index].x > x)
{
// Point with given X not already in graph line, insert it
invalidateLineFromIndex(index);
insertPointAtIndex(index);
points[index].x = x;
points[index].y = y;
updateAndInvalidateCacheForLinesBetweenIndeces(index - 1, index + 1);
}
else // (points[index].x == x)
{
// Point with given X already exists in graph line, replace it (unless the
// exact same point was already there)
if (points[index].y != y)
{
// New Y value, so update the point on the graph line
invalidateLineFromIndex(index - 1);
invalidateLineFromIndex(index);
points[index].x = x; // Actually not necessary
points[index].y = y;
updateAndInvalidateCacheForLinesBetweenIndeces(index - 1, index + 1);
}
}
}
return true;
}
bool AbstractGraph::deleteValue(int x)
{
int index = findX(x);
if (index < numPoints && points[index].x == x)
{
// Point with given X found in graph line
if (index > 0)
{
invalidateLineFromIndex(index - 1);
}
invalidateLineFromIndex(index);
deletePointAtIndex(index);
if (numPoints > 0)
{
updateAndInvalidateCacheForLinesBetweenIndeces(MAX(0, index - 1), index);
}
return true;
}
return false;
}
bool AbstractGraph::drawCanvasWidget(const Rect& invalidatedArea) const
{
if (numPoints < 2)
{
// A graph line with a single (or not even a single) point is invisible
return true;
}
int firstIndex = 0;
int lastIndex = numPoints - 1;
// We can skip the line from index if the left part of the line at index+1 is to the left of the invalidated area
while (firstIndex < lastIndex &&
invalidatedArea.x > (widgetXindex(firstIndex + 1) + lineWidth / 2).to<int>())
{
firstIndex++;
}
// We can skip the line from index if the left part of the line at index-1 is to the right of the invalidated area
while (lastIndex > firstIndex &&
invalidatedArea.right() < (widgetXindex(lastIndex - 1) - lineWidth / 2).to<int>())
{
lastIndex--;
}
if (firstIndex < lastIndex)
{
Canvas canvas(this, invalidatedArea);
canvas.moveTo(xAboveOutgoing(firstIndex), yAboveOutgoing(firstIndex));
canvas.lineTo(xAboveIncoming(firstIndex + 1), yAboveIncoming(firstIndex + 1));
for (int index = firstIndex + 1; index < lastIndex; index++)
{
canvas.lineTo(xAboveOutgoing(index), yAboveOutgoing(index));
canvas.lineTo(xAboveIncoming(index + 1), yAboveIncoming(index + 1));
}
if (lineWidth == 0)
{
CWRUtil::Q5 xBelow = xBelowIncoming(lastIndex);
if (xBelow > xAboveIncoming(lastIndex))
{
canvas.lineTo(xBelow, yBelowIncoming(lastIndex));
}
canvas.lineTo(xAboveIncoming(lastIndex), widgetY(bottom));
canvas.lineTo(xAboveOutgoing(firstIndex), widgetY(bottom));
xBelow = xBelowOutgoing(firstIndex);
if (xBelow < xAboveOutgoing(firstIndex))
{
canvas.lineTo(xBelow, yBelowOutgoing(firstIndex));
}
}
else
{
for (int index = lastIndex - 1; index >= firstIndex; index--)
{
canvas.lineTo(xBelowIncoming(index + 1), yBelowIncoming(index + 1));
canvas.lineTo(xBelowOutgoing(index), yBelowOutgoing(index));
}
}
return canvas.render();
}
return true;
}
void AbstractGraph::invalidateRectContainingIndices(int firstIndex, int lastIndex) const
{
Rect minimalRect = getMinimalRectContainingIndices(firstIndex, lastIndex);
invalidateRect(minimalRect);
if (linkedGraph)
{
linkedGraph->invalidateRectContainingIndices(firstIndex, lastIndex);
}
}
void AbstractGraph::updateAndInvalidateCacheForLinesBetweenIndeces(int firstIndex, int lastIndex)
{
if (firstIndex < 0)
{
firstIndex = 0;
}
if (lastIndex >= numPoints)
{
lastIndex = numPoints - 1;
}
if (firstIndex > lastIndex)
{
return;
}
if (getWidth() == 0 || getHeight() == 0 || left == right || top == bottom)
{
// No width or no height
return;
}
// Calculate the slopes of all lines
for (int index = firstIndex; index < lastIndex; index++)
{
CWRUtil::Q5 dy = (widgetYindex(index + 1) - widgetYindex(index));
CWRUtil::Q5 dx = (widgetXindex(index + 1) - widgetXindex(index));
CWRUtil::Q5 d = CWRUtil::sqrtQ10(dy * dy + dx * dx);
if (d != 0) // Should not happen, but if range is zero high/wide it does
{
points[index].dy = (lineWidth * dy / d) / 2;
points[index].dx = (lineWidth * dx / d) / 2;
}
}
invalidateRectContainingIndices(firstIndex, lastIndex);
}
Rect AbstractGraph::getMinimalRect() const
{
if (numPoints < 1 || graphWidth == 0 || graphHeight == 0)
{
return Rect(0, 0, 0, 0);
}
return getMinimalRectContainingIndices(0, numPoints - 1);
}
void AbstractGraph::setNumPoints(int numPointsUsed)
{
numPoints = numPointsUsed;
if (linkedGraph)
{
linkedGraph->setNumPoints(numPointsUsed);
}
}
void AbstractGraph::invalidateLineFromIndex(int index)
{
invalidateRectContainingIndices(index, index + 1);
if (linkedGraph)
{
linkedGraph->invalidateLineFromIndex(index);
}
}
void AbstractGraph::insertPointAtIndex(int index)
{
assert(numPoints < maxPoints && "Unable to insert more points in array");
assert(index >= 0 && index <= numPoints && "Illegal index"); // Allow insert at first position outside array
for (int i = numPoints; i > index; i--)
{
points[i] = points[i - 1];
}
setNumPoints(numPoints + 1);
}
void AbstractGraph::deletePointAtIndex(int index)
{
assert(index >= 0 && index < numPoints && "Illegal index");
setNumPoints(numPoints - 1);
for (int i = index; i < numPoints; i++)
{
points[i] = points[i + 1];
}
}
int AbstractGraph::findX(int x)
{
// No points, or x larger than all existing x coordinates
if (numPoints == 0 || x > points[numPoints - 1].x)
{
return numPoints;
}
// Setup search limits
int loIndex = 0;
int hiIndex = numPoints - 1;
while (loIndex <= hiIndex)
{
int midIndex = (loIndex + hiIndex) / 2;
int midX = points[midIndex].x;
if (x < midX)
{
// Search lower half
hiIndex = midIndex - 1;
}
else if (x > midX)
{
// Search higher half
loIndex = midIndex + 1;
}
else
{
// Found
return midIndex;
}
}
// Return first index over wanted x coordinate
return loIndex;
}
void AbstractGraph::assignRange(int newLeft, int newRight, int newTop, int newBottom)
{
left = newLeft;
right = newRight;
top = newTop;
bottom = newBottom;
graphWidth = CWRUtil::toQ5(newRight - newLeft);
graphHeight = CWRUtil::toQ5(newBottom - newTop);
if (linkedGraph)
{
linkedGraph->assignRange(newLeft, newRight, newTop, newBottom);
}
}
void AbstractGraph::assignWidth(int16_t width)
{
CanvasWidget::setWidth(width);
widgetWidth = CWRUtil::toQ5(getWidth());
if (linkedGraph)
{
linkedGraph->assignWidth(width);
}
}
void AbstractGraph::assignHeight(int16_t height)
{
CanvasWidget::setHeight(height);
widgetHeight = CWRUtil::toQ5(getHeight());
if (linkedGraph)
{
linkedGraph->assignHeight(height);
}
}

View File

@ -0,0 +1,96 @@
#include "Graph.hpp"
#include <touchgfx/Color.hpp>
#include <touchgfx/EasingEquations.hpp>
#include <math.h>
Graph::Graph() :
myAlpha(255)
{
}
void Graph::setup(int newWidth, int newHeight, colortype lineColor, colortype backgroundColor)
{
setWidth(newWidth);
setHeight(newHeight);
graphLinePainter.setColor(lineColor);
graphAreaPainter.setColor(lineColor, getHeight());
graphDotsPainter.setColor(lineColor);
graphDotsBackgroundPainter.setColor(backgroundColor);
graphLine.setLinkedGraph(graphArea);
graphLine.setLinkedGraph(graphDots);
graphLine.setLinkedGraph(graphDotsBackground);
graphLine.setPosition(0, 0, getWidth(), getHeight());
graphLine.setPainter(graphLinePainter);
graphLine.setBuffer(graphBuffer, NUMBER_OF_POINTS);
graphLine.setLineWidth(1);
graphLine.setRange(0, 0, 0, 0);
graphArea.setPainter(graphAreaPainter);
graphArea.setLineWidth(0);
graphDots.setPainter(graphDotsPainter);
graphDots.setLineWidth(7);
graphDots.setDotShape(0, 90);
graphDotsBackground.setPainter(graphDotsBackgroundPainter);
graphDotsBackground.setLineWidth(9);
graphDots.setDotShape(0, 30);
add(graphArea);
add(graphLine);
add(graphDotsBackground);
add(graphDots);
}
void Graph::setRange(int left, int right, int top, int bottom)
{
graphLine.setRange(left, right, top, bottom);
}
void Graph::setLineVisible(bool lineVisible)
{
graphLine.setVisible(lineVisible);
}
void Graph::setDotsVisible(bool dotsVisible)
{
graphDots.setVisible(dotsVisible);
}
void Graph::setDotsBackgroundVisible(bool dotsBackgroundVisible)
{
graphDotsBackground.setVisible(dotsBackgroundVisible);
}
void Graph::setAreaVisible(bool areaVisible)
{
graphArea.setVisible(areaVisible);
}
void Graph::setDotShape(int startAngle, int angleStep, int lineWidth)
{
graphDots.setDotShape(startAngle, angleStep);
graphDots.setLineWidth(lineWidth);
graphDots.invalidate();
}
void Graph::setDotBackgroundShape(int startAngle, int angleStep, int lineWidth)
{
graphDotsBackground.setDotShape(startAngle, angleStep);
graphDotsBackground.setLineWidth(lineWidth);
graphDots.invalidate();
}
void Graph::setLineWidth(int width)
{
graphLine.setLineWidth(width);
}
void Graph::set_Draw_Range(int left, int right, int top, int button)
{
graphLine.setRange(left, right, top, button);
}

View File

@ -0,0 +1,65 @@
#include "GraphBelow.hpp"
using namespace touchgfx;
GraphBelow::~GraphBelow()
{
}
bool GraphBelow::drawCanvasWidget(const Rect& invalidatedArea) const
{
if (numPoints < 2)
{
// A graph line with a single (or not even a single) point is invisible
return true;
}
int firstIndex = 0;
int lastIndex = numPoints - 1;
// We can skip the line from index if the left part of the line at index+1 is to the left of the invalidated area
while (firstIndex < lastIndex &&
invalidatedArea.x > (widgetXindex(firstIndex + 1) + lineWidth / 2).to<int>())
{
firstIndex++;
}
// We can skip the line from index if the left part of the line at index-1 is to the right of the invalidated area
while (lastIndex > firstIndex &&
invalidatedArea.right() < (widgetXindex(lastIndex - 1) - lineWidth / 2).to<int>())
{
lastIndex--;
}
if (firstIndex < lastIndex)
{
Canvas canvas(this, invalidatedArea);
canvas.moveTo(widgetXindex(firstIndex), widgetYindex(firstIndex));
for (int index = firstIndex + 1; index <= lastIndex; index++)
{
canvas.lineTo(widgetXindex(index), widgetYindex(index));
}
canvas.lineTo(widgetXindex(lastIndex), widgetY(0));
canvas.lineTo(widgetXindex(firstIndex), widgetY(0));
// canvas.lineTo(widgetXindex(lastIndex), widgetY(bottom));
// canvas.lineTo(widgetXindex(firstIndex), widgetY(bottom));
return canvas.render();
}
return true;
}
Rect GraphBelow::getMinimalRectContainingIndices(int firstIndex, int lastIndex) const
{
int minX = widgetXindex(firstIndex).to<int>();
int maxX = widgetXindex(lastIndex).to<int>();
int zeroY = widgetY(0).to<int>();
int firstY = widgetYindex(firstIndex).to<int>();
int minY = MIN(zeroY, firstY);
int maxY = MAX(zeroY, firstY);
for (int index = firstIndex + 1; index <= lastIndex; index++)
{
int y = widgetYindex(index).to<int>();
minY = MIN(minY, y);
maxY = MAX(maxY, y);
}
return Rect(minX, minY, maxX - minX + 1, maxY - minY + 1);
}

View File

@ -0,0 +1,73 @@
#include "GraphDots.hpp"
using namespace touchgfx;
GraphDots::GraphDots() :
AbstractGraph(), startAngle(0), angleStep(30)
{
}
void GraphDots::setDotShape(int dotStartAngle, int dotAngleStep)
{
startAngle = dotStartAngle;
angleStep = dotAngleStep;
}
bool GraphDots::drawCanvasWidget(const Rect& invalidatedArea) const
{
if (numPoints < 2)
{
// A graph line with a single (or not even a single) point is invisible
return true;
}
int firstIndex = 0;
int lastIndex = numPoints - 1;
// We can skip the line from index if the left part of the line at index+1 is to the left of the invalidated area
while (firstIndex < lastIndex &&
invalidatedArea.x > (widgetXindex(firstIndex + 1) + lineWidth / 2).to<int>())
{
firstIndex++;
}
// We can skip the line from index if the left part of the line at index-1 is to the right of the invalidated area
while (lastIndex > firstIndex &&
invalidatedArea.right() < (widgetXindex(lastIndex - 1) - lineWidth / 2).to<int>())
{
lastIndex--;
}
if (firstIndex < lastIndex)
{
Canvas canvas(this, invalidatedArea);
for (int index = firstIndex; index <= lastIndex; index++)
{
CWRUtil::Q5 circleCenterX, circleCenterY;
circleCenterX = widgetXindex(index);
circleCenterY = widgetYindex(index);
canvas.moveTo(circleCenterX + ((lineWidth * CWRUtil::sine(startAngle)) / 2), circleCenterY - ((lineWidth * CWRUtil::cosine(startAngle)) / 2));
for (int angle = startAngle + angleStep; (angle % 360) != startAngle; angle += angleStep)
{
canvas.lineTo(circleCenterX + ((lineWidth * CWRUtil::sine(angle)) / 2), circleCenterY - ((lineWidth * CWRUtil::cosine(angle)) / 2));
}
}
return canvas.render();
}
return true;
}
Rect GraphDots::getMinimalRectContainingIndices(int firstIndex, int lastIndex) const
{
int minX = (widgetXindex(firstIndex) - lineWidth / 2).to<int>();
int maxX = (widgetXindex(lastIndex) + lineWidth / 2).to<int>();
int minY = (widgetYindex(firstIndex) - lineWidth / 2).to<int>();
int maxY = (widgetYindex(firstIndex) + lineWidth / 2).to<int>();
for (int index = firstIndex + 1; index <= lastIndex; index++)
{
minY = MIN(minY, (widgetYindex(index) - lineWidth / 2).to<int>());
maxY = MAX(maxY, (widgetYindex(index) + lineWidth / 2).to<int>());
}
Rect minimalRect = Rect(minX, minY, maxX - minX + 1, maxY - minY + 1);
return minimalRect;
}

View File

@ -0,0 +1,63 @@
#include "GraphLine.hpp"
using namespace touchgfx;
bool GraphLine::drawCanvasWidget(const Rect& invalidatedArea) const
{
if (numPoints < 2)
{
// A graph line with a single (or not even a single) point is invisible
return true;
}
int firstIndex = 0;
int lastIndex = numPoints - 1;
// We can skip the line from index if the left part of the line at index+1 is to the left of the invalidated area
while (firstIndex < lastIndex &&
invalidatedArea.x > (widgetXindex(firstIndex + 1) + lineWidth / 2).to<int>())
{
firstIndex++;
}
// We can skip the line from index if the left part of the line at index-1 is to the right of the invalidated area
while (lastIndex > firstIndex &&
invalidatedArea.right() < (widgetXindex(lastIndex - 1) - lineWidth / 2).to<int>())
{
lastIndex--;
}
if (firstIndex < lastIndex)
{
Canvas canvas(this, invalidatedArea);
canvas.moveTo(xAboveOutgoing(firstIndex), yAboveOutgoing(firstIndex));
canvas.lineTo(xAboveIncoming(firstIndex + 1), yAboveIncoming(firstIndex + 1));
for (int index = firstIndex + 1; index < lastIndex; index++)
{
canvas.lineTo(xAboveOutgoing(index), yAboveOutgoing(index));
canvas.lineTo(xAboveIncoming(index + 1), yAboveIncoming(index + 1));
}
for (int index = lastIndex - 1; index >= firstIndex; index--)
{
canvas.lineTo(xBelowIncoming(index + 1), yBelowIncoming(index + 1));
canvas.lineTo(xBelowOutgoing(index), yBelowOutgoing(index));
}
return canvas.render();
}
return true;
}
Rect GraphLine::getMinimalRectContainingIndices(int firstIndex, int lastIndex) const
{
int minX = (widgetXindex(firstIndex) - lineWidth / 2).to<int>();
int maxX = (widgetXindex(lastIndex) + lineWidth / 2).to<int>();
int minY = (widgetYindex(firstIndex) - lineWidth / 2).to<int>();
int maxY = (widgetYindex(firstIndex) + lineWidth / 2).to<int>();
for (int index = firstIndex + 1; index <= lastIndex; index++)
{
minY = MIN(minY, (widgetYindex(index) - lineWidth / 2).to<int>());
maxY = MAX(maxY, (widgetYindex(index) + lineWidth / 2).to<int>());
}
Rect minimalRect = Rect(minX, minY, maxX - minX + 1, maxY - minY + 1);
return minimalRect;
}

View File

@ -0,0 +1,143 @@
#include "PainterVerticalAlpha.hpp"
#include <touchgfx/Color.hpp>
using namespace touchgfx;
PainterVerticalAlpha::PainterVerticalAlpha(colortype color /*= 0*/, int alpha0atY /*= 100*/)
{
setColor(color, alpha0atY);
}
void PainterVerticalAlpha::setColor(colortype color, int alphaZeroAt)
{
#if !defined(USE_BPP) || USE_BPP==16 || USE_BPP==24
painterRed = Color::getRedColor(color);
painterGreen = Color::getGreenColor(color);
painterBlue = Color::getBlueColor(color);
#elif USE_BPP==4 || USE_BPP==2
painterGray = (uint8_t)color;
#else
#error Unknown USE_BPP
#endif
alpha0atY = alphaZeroAt;
}
bool PainterVerticalAlpha::renderInit()
{
int gradientAlpha = 255 - (currentY * 255 / alpha0atY);
if (gradientAlpha < 0)
{
gradientAlpha = 0;
}
if (gradientAlpha > 255)
{
gradientAlpha = 255;
}
painterAlpha = gradientAlpha;
return true;
}
void PainterVerticalAlpha::render(uint8_t* ptr, int x, int xAdjust, int y, unsigned count, const uint8_t* covers)
{
currentY = y + areaOffsetY;
renderInit(); // re-use code to set painterAlpha
#if !defined(USE_BPP) || USE_BPP==16 || USE_BPP==24
#if !defined(USE_BPP) || USE_BPP==16
uint16_t* p = reinterpret_cast<uint16_t*>(ptr) + (x + xAdjust);
currentX = x + areaOffsetX; // CurrentX is not used in 24bpp
#else
uint8_t* p = ptr + ((x + xAdjust) * 3);
#endif
uint8_t totalAlpha = (widgetAlpha * painterAlpha) / 255u;
do
{
uint32_t combinedAlpha = (*covers) * totalAlpha;
covers++;
#if !defined(USE_BPP) || USE_BPP==16
uint8_t p_red = (*p & RMASK) >> 8;
uint8_t p_green = (*p & GMASK) >> 3;
uint8_t p_blue = (*p & BMASK) << 3;
uint8_t pixelRed = static_cast<uint8_t>((((painterRed - p_red) * combinedAlpha) >> 16) + p_red);
uint8_t pixelGreen = static_cast<uint8_t>((((painterGreen - p_green) * combinedAlpha) >> 16) + p_green);
uint8_t pixelBlue = static_cast<uint8_t>((((painterBlue - p_blue) * combinedAlpha) >> 16) + p_blue);
#define fastrand(g_seed) ((214013*(uint32_t)(g_seed)+2531011)>>16)
uint8_t rand = fastrand((currentX + *p) * (currentY + *p));
if (pixelRed < 0xF8)
{
pixelRed = pixelRed + ((rand >> 5)); // Add bit 7-5 of rand to red to get rounding
}
if (pixelGreen < 0xFC)
{
pixelGreen = pixelGreen + ((rand >> 3) & 0x3); // Add bit 4-3 of rand to green to get rounding
}
if (pixelBlue < 0xF8)
{
pixelBlue = pixelBlue + ((rand) & 0x7); // Add bit 2-0 of rand to blue to get rounding
}
*p++ = ((pixelRed << 8) & RMASK) | ((pixelGreen << 3) & GMASK) | ((pixelBlue >> 3) & BMASK);
currentX++;
#else
uint8_t pixelBlue = static_cast<uint8_t>((((painterBlue - *p) * combinedAlpha) >> 16) + *p);
*p++ = pixelBlue;
uint8_t pixelGreen = static_cast<uint8_t>((((painterGreen - *p) * combinedAlpha) >> 16) + *p);
*p++ = pixelGreen;
uint8_t pixelRed = static_cast<uint8_t>((((painterRed - *p) * combinedAlpha) >> 16) + *p);
*p++ = pixelRed;
#endif
}
while (--count != 0);
#elif USE_BPP==4
x += xAdjust;
uint8_t totalAlpha = (widgetAlpha * painterAlpha) / 255u;
do
{
uint16_t combinedAlpha = (*covers) * totalAlpha;
covers++;
if (combinedAlpha != 0)
{
uint8_t p_gray = LCD4getPixel(ptr, x);
LCD4setPixel(ptr, x, static_cast<uint8_t>((((painterGray - p_gray) * combinedAlpha) >> 16) + p_gray));
}
x++;
}
while (--count != 0);
#elif USE_BPP==2
x += xAdjust;
uint8_t totalAlpha = (widgetAlpha * painterAlpha) / 255u;
do
{
uint8_t combinedAlpha = (*covers) * totalAlpha;
covers++;
if (combinedAlpha != 0)
{
uint8_t p_gray = LCD2getPixel(ptr, x);
LCD2setPixel(ptr, x, static_cast<uint8_t>((((painterGray - p_gray) * combinedAlpha) >> 16) + p_gray));
}
x++;
}
while (--count != 0);
#else
#error Unknown USE_BPP
#endif
}
#if !defined(USE_BPP) || USE_BPP==16 || USE_BPP==24
bool PainterVerticalAlpha::renderNext(uint8_t& pixelRed, uint8_t& pixelGreen, uint8_t& pixelBlue, uint8_t& pixelAlpha)
{
return false;
}
#elif USE_BPP==4 || USE_BPP==2
bool PainterVerticalAlpha::renderNext(uint8_t& pixelGray, uint8_t& pixelAlpha)
{
return false;
}
#else
#error Unknown USE_BPP
#endif

View File

@ -2,9 +2,11 @@
#include <gui/model/ModelListener.hpp>
#include "cmsis_os.h"
#include "main.h"
#include <stdio.h>
#include <string.h>
#define MAX_P_SENSORBOARD_LOST_TIM 300
extern osMessageQId gui_msg_qHandle;
extern osMessageQId sensor_msg_qHandle;
Model::Model() : modelListener(0)
{
@ -12,7 +14,10 @@ Model::Model() : modelListener(0)
void Model::tick()
{
static ts_sensor_data *p_sensor_data=NULL;
static uint16_t s_p_sensorboard_lost_tcnt = 0;
osEvent retkey;
retkey.value.v = 0;
retkey = osMessageGet(gui_msg_qHandle,1);
if(retkey.status == osEventMessage)
{
@ -21,6 +26,27 @@ void Model::tick()
modelListener->key_event();
}
}
osEvent retsensor;
retsensor.value.v = 0;
retsensor = osMessageGet(sensor_msg_qHandle,1);
if(retsensor.status == osEventMessage)
{
if(retsensor.value.v!=0)
{
p_sensor_data = (ts_sensor_data *)(retsensor.value.v|0x20000000);
modelListener->update_sensor_event(p_sensor_data);
s_p_sensorboard_lost_tcnt = 0;
}
}
//check if the sensor board disconnected
if(s_p_sensorboard_lost_tcnt++>MAX_P_SENSORBOARD_LOST_TIM)
{
p_sensor_data->humidity[0]=0;
p_sensor_data->humidity[1]=0;
p_sensor_data->temperature[0]=0;
p_sensor_data->temperature[1]=0;
modelListener->update_sensor_event(p_sensor_data);
}
}
void Model::set_light_onoff(uint8_t data)
{

View File

@ -15,3 +15,8 @@ void Screen1Presenter::deactivate()
{
}
void Screen1Presenter::update_sensor_event(ts_sensor_data *p_sensor_data)
{
view.update_sensor_value(p_sensor_data);
}

View File

@ -4,6 +4,14 @@
#include <touchgfx/widgets/TextureMapper.hpp>
#include <touchgfx/widgets/AnimationTextureMapper.hpp>
#include <touchgfx/EasingEquations.hpp>
#include <stdio.h>
#include <string.h>
//static const uint16_t CANVAS_BUFFER_SIZE = 4800;
//uint8_t canvasBuffer[CANVAS_BUFFER_SIZE] __attribute__ ((section ("EXRAM")));
//Graph graphT __attribute__ ((section ("EXRAM")));
//Graph graph_Base __attribute__ ((section ("EXRAM")));
//Graph graph_avg __attribute__ ((section ("EXRAM")));
Screen1View::Screen1View():
tickCounter(0),
@ -18,11 +26,14 @@ Screen1View::Screen1View():
void Screen1View::setupScreen()
{
wait = 0;
tickCounter = 0;
Screen1ViewBase::setupScreen();
// Set hands to initial positions
analogClock1.setTime24Hour(hours, minutes, seconds);
wait = 0;
tickCounter = 0;
// CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE);
}
void Screen1View::tearDownScreen()
@ -34,7 +45,7 @@ void Screen1View::handleTickEvent()
{
wait++;
++tickCounter;
if (tickCounter % 22 == 0)
if (tickCounter % 52 == 0)
{
if (++seconds >= 60)
{
@ -48,20 +59,7 @@ void Screen1View::handleTickEvent()
}
}
}
// Update humidity
humidityEntropi = ((seconds * seconds + seconds * 5 + hours) % 180) / 360.0f * 2 * PI - PI / 2;
humidity.setupAnimation(AnimationTextureMapper::Z_ROTATION, humidityEntropi, 10, 0, EasingEquations::cubicEaseInOut);
humidity.startAnimation();
// Update pressure
temperatureEntropi = (((seconds + minutes + hours) * (seconds + minutes + hours)) % 180) / 360.0f * 2 * PI - PI / 2;
temperature.setupAnimation(AnimationTextureMapper::Z_ROTATION, temperatureEntropi, 10, 0, EasingEquations::cubicEaseInOut);
temperature.startAnimation();
Unicode::snprintf(TemvalueBuffer1, TEMVALUEBUFFER1_SIZE, "%d", 88);
Unicode::snprintf(HumvalueBuffer1, HUMVALUEBUFFER1_SIZE, "%d", 88);
Humvalue.invalidate();
Temvalue.invalidate();
// Update the clock
analogClock1.setTime24Hour(hours, minutes, seconds);
}
@ -73,5 +71,32 @@ void Screen1View::handleTickEvent()
}
}
void Screen1View::update_sensor_value(ts_sensor_data *p_sensor_data)
{
Unicode::snprintf(TemvalueBuffer1, TEMVALUEBUFFER1_SIZE, "%d", p_sensor_data->temperature[1]);
Unicode::snprintf(TemvalueBuffer2, TEMVALUEBUFFER2_SIZE, "%d", p_sensor_data->temperature[0]);
Temvalue.invalidate();
Unicode::snprintf(HumvalueBuffer1, HUMVALUEBUFFER1_SIZE, "%d", p_sensor_data->humidity[1]);
Unicode::snprintf(HumvalueBuffer2, HUMVALUEBUFFER2_SIZE, "%d", p_sensor_data->humidity[0]);
Humvalue.invalidate();
// Update humidity
humidityEntropi = (uint8_t(1.8*(p_sensor_data->humidity[1])) % 180) / 360.0f * 2 * PI - PI / 2;
humidity.setupAnimation(AnimationTextureMapper::Z_ROTATION, humidityEntropi, 10, 0, EasingEquations::cubicEaseInOut);
humidity.startAnimation();
// Update pressure
temperatureEntropi = (uint8_t(3*(p_sensor_data->temperature[1])) % 180) / 360.0f * 2 * PI - PI / 2;
temperature.setupAnimation(AnimationTextureMapper::Z_ROTATION, temperatureEntropi, 10, 0, EasingEquations::cubicEaseInOut);
temperature.startAnimation();
}
void Screen1View::set_sensor_value(ts_sensor_data *p_sensor_data)
{
v_sensor_data.temperature[0] = p_sensor_data->temperature[0];
v_sensor_data.temperature[1] = p_sensor_data->temperature[1];
v_sensor_data.humidity[0] = p_sensor_data->humidity[0];
v_sensor_data.humidity[1] = p_sensor_data->humidity[1];
}

View File

@ -1026,7 +1026,7 @@
"Version": "1.0.0",
"Description": "STM32CubeMX Generated Simulator Application Template",
"AvailableColorDepths": [
16
16
],
"AvailableSections": [
"ExtFlashSection",
@ -1048,4 +1048,4 @@
"DisplayOrientation": "Landscape"
},
"Version": "4.12.3"
}
}

View File

@ -1,14 +1,16 @@
#MicroXplorer Configuration settings - do not modify
DMA2D.ColorMode=DMA2D_OUTPUT_RGB565
DMA2D.ColorMode=DMA2D_OUTPUT_ARGB8888
DMA2D.IPParameters=Mode,ColorMode
DMA2D.Mode=DMA2D_R2M
DMA2D.Mode=DMA2D_M2M
FMC.CASLatency1=FMC_SDRAM_CAS_LATENCY_3
FMC.ExitSelfRefreshDelay1=7
FMC.IPParameters=CASLatency1,SDClockPeriod1,SDClockPeriod2,ReadPipeDelay1,ReadPipeDelay2,LoadToActiveDelay1,ExitSelfRefreshDelay1,SelfRefreshTime1,RowCycleDelay1,RowCycleDelay2,WriteRecoveryTime1,RPDelay1,RPDelay2,RCDDelay1
FMC.IPParameters=CASLatency1,SDClockPeriod1,SDClockPeriod2,ReadPipeDelay1,ReadPipeDelay2,LoadToActiveDelay1,ExitSelfRefreshDelay1,SelfRefreshTime1,RowCycleDelay1,RowCycleDelay2,WriteRecoveryTime1,RPDelay1,RPDelay2,RCDDelay1,ReadBurst1,ReadBurst2
FMC.LoadToActiveDelay1=2
FMC.RCDDelay1=2
FMC.RPDelay1=2
FMC.RPDelay2=2
FMC.ReadBurst1=FMC_SDRAM_RBURST_ENABLE
FMC.ReadBurst2=FMC_SDRAM_RBURST_ENABLE
FMC.ReadPipeDelay1=FMC_SDRAM_RPIPE_DELAY_1
FMC.ReadPipeDelay2=FMC_SDRAM_RPIPE_DELAY_1
FMC.RowCycleDelay1=7
@ -19,8 +21,8 @@ FMC.SelfRefreshTime1=4
FMC.WriteRecoveryTime1=3
FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,configTOTAL_HEAP_SIZE,FootprintOK,configUSE_RECURSIVE_MUTEXES,configUSE_COUNTING_SEMAPHORES,configUSE_IDLE_HOOK,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,Queues01
FREERTOS.Queues01=gui_msg_q,16,uint8_t,0,Dynamic,NULL,NULL
FREERTOS.Tasks01=mainTask,1,4096,StartmainTask,Default,NULL,Dynamic,NULL,NULL;keyTask,0,256,StartkeyTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.Queues01=gui_msg_q,16,uint8_t,0,Dynamic,NULL,NULL;sensor_msg_q,20,uint32_t,0,Dynamic,NULL,NULL
FREERTOS.Tasks01=mainTask,1,4096,StartmainTask,Default,NULL,Dynamic,NULL,NULL;keyTask,0,256,StartkeyTask,Default,NULL,Dynamic,NULL,NULL;sensorTask,0,512,StartsensorTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configCHECK_FOR_STACK_OVERFLOW=2
FREERTOS.configTOTAL_HEAP_SIZE=32768
FREERTOS.configUSE_COUNTING_SEMAPHORES=1
@ -123,6 +125,7 @@ Mcu.IP0=CRC
Mcu.IP1=DMA2D
Mcu.IP10=TIM7
Mcu.IP11=USART1
Mcu.IP12=USART3
Mcu.IP2=FMC
Mcu.IP3=FREERTOS
Mcu.IP4=GRAPHICS
@ -131,7 +134,7 @@ Mcu.IP6=NVIC
Mcu.IP7=RCC
Mcu.IP8=SPI5
Mcu.IP9=SYS
Mcu.IPNb=12
Mcu.IPNb=13
Mcu.Name=STM32F429I(E-G)Tx
Mcu.Package=LQFP176
Mcu.Pin0=PC13
@ -167,64 +170,66 @@ Mcu.Pin35=PE12
Mcu.Pin36=PE13
Mcu.Pin37=PE14
Mcu.Pin38=PE15
Mcu.Pin39=PH6
Mcu.Pin39=PB10
Mcu.Pin4=PF1
Mcu.Pin40=PH7
Mcu.Pin41=PH8
Mcu.Pin42=PH10
Mcu.Pin43=PH11
Mcu.Pin44=PH12
Mcu.Pin45=PD8
Mcu.Pin46=PD9
Mcu.Pin47=PD10
Mcu.Pin48=PD12
Mcu.Pin49=PD13
Mcu.Pin40=PB11
Mcu.Pin41=PH6
Mcu.Pin42=PH7
Mcu.Pin43=PH8
Mcu.Pin44=PH10
Mcu.Pin45=PH11
Mcu.Pin46=PH12
Mcu.Pin47=PD8
Mcu.Pin48=PD9
Mcu.Pin49=PD10
Mcu.Pin5=PF2
Mcu.Pin50=PD14
Mcu.Pin51=PD15
Mcu.Pin52=PG4
Mcu.Pin53=PG5
Mcu.Pin54=PG6
Mcu.Pin55=PG7
Mcu.Pin56=PG8
Mcu.Pin57=PC7
Mcu.Pin58=PA9
Mcu.Pin59=PA10
Mcu.Pin50=PD12
Mcu.Pin51=PD13
Mcu.Pin52=PD14
Mcu.Pin53=PD15
Mcu.Pin54=PG4
Mcu.Pin55=PG5
Mcu.Pin56=PG6
Mcu.Pin57=PG7
Mcu.Pin58=PG8
Mcu.Pin59=PC7
Mcu.Pin6=PF3
Mcu.Pin60=PA11
Mcu.Pin61=PA12
Mcu.Pin62=PA13
Mcu.Pin63=PH13
Mcu.Pin64=PH15
Mcu.Pin65=PI0
Mcu.Pin66=PI2
Mcu.Pin67=PA14
Mcu.Pin68=PD0
Mcu.Pin69=PD1
Mcu.Pin60=PA9
Mcu.Pin61=PA10
Mcu.Pin62=PA11
Mcu.Pin63=PA12
Mcu.Pin64=PA13
Mcu.Pin65=PH13
Mcu.Pin66=PH15
Mcu.Pin67=PI0
Mcu.Pin68=PI2
Mcu.Pin69=PA14
Mcu.Pin7=PF4
Mcu.Pin70=PD4
Mcu.Pin71=PD6
Mcu.Pin72=PD7
Mcu.Pin73=PG9
Mcu.Pin74=PG10
Mcu.Pin75=PG11
Mcu.Pin76=PG12
Mcu.Pin77=PG15
Mcu.Pin78=PB8
Mcu.Pin79=PB9
Mcu.Pin70=PD0
Mcu.Pin71=PD1
Mcu.Pin72=PD4
Mcu.Pin73=PD6
Mcu.Pin74=PD7
Mcu.Pin75=PG9
Mcu.Pin76=PG10
Mcu.Pin77=PG11
Mcu.Pin78=PG12
Mcu.Pin79=PG15
Mcu.Pin8=PF5
Mcu.Pin80=PE0
Mcu.Pin81=PE1
Mcu.Pin82=PI4
Mcu.Pin83=VP_CRC_VS_CRC
Mcu.Pin84=VP_DMA2D_VS_DMA2D
Mcu.Pin85=VP_FREERTOS_VS_CMSIS_V1
Mcu.Pin86=VP_GRAPHICS_VS-Touch-GFX
Mcu.Pin87=VP_GRAPHICS_VS-DisplayInterface-LTDC
Mcu.Pin88=VP_SYS_VS_tim6
Mcu.Pin89=VP_TIM7_VS_ClockSourceINT
Mcu.Pin80=PB8
Mcu.Pin81=PB9
Mcu.Pin82=PE0
Mcu.Pin83=PE1
Mcu.Pin84=PI4
Mcu.Pin85=VP_CRC_VS_CRC
Mcu.Pin86=VP_DMA2D_VS_DMA2D
Mcu.Pin87=VP_FREERTOS_VS_CMSIS_V1
Mcu.Pin88=VP_GRAPHICS_VS-Touch-GFX
Mcu.Pin89=VP_GRAPHICS_VS-DisplayInterface-LTDC
Mcu.Pin9=PF7
Mcu.PinsNb=90
Mcu.Pin90=VP_SYS_VS_tim6
Mcu.Pin91=VP_TIM7_VS_ClockSourceINT
Mcu.PinsNb=92
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F429IGTx
@ -245,6 +250,7 @@ NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false
NVIC.TIM6_DAC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
NVIC.TimeBase=TIM6_DAC_IRQn
NVIC.TimeBaseIP=TIM6
NVIC.USART3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA0/WKUP.GPIOParameters=GPIO_PuPd,GPIO_Label
PA0/WKUP.GPIO_Label=KEY1
@ -274,6 +280,10 @@ PB0.Signal=LTDC_R3
PB1.Locked=true
PB1.Mode=RGB565
PB1.Signal=LTDC_R6
PB10.Mode=Asynchronous
PB10.Signal=USART3_TX
PB11.Mode=Asynchronous
PB11.Signal=USART3_RX
PB8.Locked=true
PB8.Mode=RGB565
PB8.Signal=LTDC_B6
@ -470,7 +480,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=MDK-ARM V5
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CRC_Init-CRC-false-HAL-true,4-MX_SPI5_Init-SPI5-true-HAL-false,5-GRAPHICS_Init-GRAPHICS-false-HAL-false,6-MX_USART1_UART_Init-USART1-false-HAL-true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_CRC_Init-CRC-false-HAL-true,4-MX_SPI5_Init-SPI5-true-HAL-false,5-GRAPHICS_Init-GRAPHICS-false-HAL-false,6-MX_USART1_UART_Init-USART1-false-HAL-true,7-MX_USART3_UART_Init-USART3-false-HAL-true
RCC.48MHZClocksFreq_Value=90000000
RCC.AHBFreq_Value=180000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4
@ -487,8 +497,8 @@ RCC.HCLKFreq_Value=180000000
RCC.HSE_VALUE=25000000
RCC.HSI_VALUE=16000000
RCC.I2SClocksFreq_Value=96000000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSAIDivR,PLLSAIN,PLLSAIR,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ
RCC.LCDTFTFreq_Value=9600000
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LCDTFTFreq_Value,LSE_VALUE,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSAIN,PLLSAIR,PLLSourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SAI_AClocksFreq_Value,SAI_BClocksFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VCOSAIOutputFreq_Value,VCOSAIOutputFreq_ValueQ,VCOSAIOutputFreq_ValueR,VcooutputI2S,VcooutputI2SQ
RCC.LCDTFTFreq_Value=25000000
RCC.LSE_VALUE=32768
RCC.LSI_VALUE=32000
RCC.MCO2PinFreq_Value=180000000
@ -496,22 +506,21 @@ RCC.PLLCLKFreq_Value=180000000
RCC.PLLM=25
RCC.PLLN=360
RCC.PLLQCLKFreq_Value=90000000
RCC.PLLSAIDivR=RCC_PLLSAIDIVR_4
RCC.PLLSAIN=192
RCC.PLLSAIN=250
RCC.PLLSAIR=5
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
RCC.RTCFreq_Value=32000
RCC.RTCHSEDivFreq_Value=12500000
RCC.SAI_AClocksFreq_Value=48000000
RCC.SAI_BClocksFreq_Value=48000000
RCC.SAI_AClocksFreq_Value=62500000
RCC.SAI_BClocksFreq_Value=62500000
RCC.SYSCLKFreq_VALUE=180000000
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
RCC.VCOI2SOutputFreq_Value=192000000
RCC.VCOInputFreq_Value=1000000
RCC.VCOOutputFreq_Value=360000000
RCC.VCOSAIOutputFreq_Value=192000000
RCC.VCOSAIOutputFreq_ValueQ=48000000
RCC.VCOSAIOutputFreq_ValueR=38400000
RCC.VCOSAIOutputFreq_Value=250000000
RCC.VCOSAIOutputFreq_ValueQ=62500000
RCC.VCOSAIOutputFreq_ValueR=50000000
RCC.VcooutputI2S=96000000
RCC.VcooutputI2SQ=96000000
SH.FMC_A0.0=FMC_A0,12b-sda1
@ -595,6 +604,9 @@ SPI5.Mode=SPI_MODE_MASTER
SPI5.VirtualType=VM_MASTER
USART1.IPParameters=VirtualMode
USART1.VirtualMode=VM_ASYNC
USART3.BaudRate=9600
USART3.IPParameters=VirtualMode,BaudRate
USART3.VirtualMode=VM_ASYNC
VP_CRC_VS_CRC.Mode=CRC_Activate
VP_CRC_VS_CRC.Signal=CRC_VS_CRC
VP_DMA2D_VS_DMA2D.Mode=DMA2D_Activate