2022-02-01 05:35 AM
2022-02-01 06:15 AM
You need animation buffer enable when you have ram ... in target hal code
2022-02-01 06:30 AM
Can you explain it better? I have the same issue and I´m studing an example provided by ST.
In a working ScreenView.cpp I can see the following code (Im will copy only one part)
void Screen1View::handleKeyEvent(uint8_t key)
{
if (animationState != ANIMATION_READY ||
menuAnimationState != MENU_ANIMATION_READY)
{
return;
}
if (key == '6')
{
// Right
menuSelectRight();
}
else if (key == '4')
{
// Left
menuSelectLeft();
}
else
where menuSelectRight is:
void Screen1View::menuSelectRight()
{
menuAnimationState = MENU_ANIMATION_STEP_0;
menuAnimationTickCounter = 0;
menuAnimationDirectionLeft = false;
}
where menuAnimationState is a enum and menuAnimationDirectionLeft is a boolean flag.
What I don´find is "who" trigs the acton to move to the other slide.
PS in debug mode, i can see that the GPIO of the joystick works.
Fausto
2022-02-01 10:26 PM
I was working like this post explains. Used a dummy button to generte screen transition and then calling it in some other place like gestureEventHandler or dragEventHandler:
https://community.st.com/s/question/0D53W00000XHSWySAP/example-on-how-to-swipe-to-change-a-screen
But I still did not found the solution to my problem.
2022-02-01 10:45 PM
Hi. Thank you for the advice but I need some more help. I am searching in the TouchGFXHAL.cpp file and can't find any animation buffer.
2022-02-02 01:24 AM
In generated HAL for double buffer ...
void TouchGFXGeneratedHAL::initialize()
{
HAL::initialize();
registerEventListener(*(Application::getInstance()));
setFrameBufferStartAddresses((void*)disp_mem, (void*)(disp_mem+0x00200000), (void*)0);
}
and in user HAL
void TouchGFXHAL::initialize()
{
// Calling parent implementation of initialize().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
// Please note, HAL::initialize() must be called to initialize the framework.
TouchGFXGeneratedHAL::initialize();
}
for override read comment and change
void TouchGFXHAL::initialize()
{
// Calling parent implementation of initialize().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
// Please note, HAL::initialize() must be called to initialize the framework.
HAL::initialize();
registerEventListener(*(Application::getInstance()));
setFrameBufferStartAddresses((void*)disp_mem, (void*)(disp_mem+0x00200000), (void*)(disp_mem+0x00400000));
}
third parameter is animate buffer start addr. My disp_mem define is 0xD0000000
you need change buffers to your
2022-02-02 01:57 AM
Thank you this worked. Can you also explain how much space should there be between start of dubble buffer and animation buffer?
2022-02-03 07:01 AM
I use bank size as offsets, but for low resolution displays you can use display dimensions as offsets, read LTDC optimizing appnote.
2022-02-03 07:04 AM
Hi,
You need to make sure you have enough space for your double buffer, so usually you would set the animation buffer right at the end of the second buffer. In general the amount of memory used by a framebuffer is: Width * Height * color depth in bits / 8 bytes.
/Romain