Fix TouchGFX and update UI
This commit is contained in:
		@ -23,37 +23,47 @@
 | 
			
		||||
#include <touchgfx/hal/PaintRGB565Impl.hpp>
 | 
			
		||||
 | 
			
		||||
#include "stm32h7xx.h"
 | 
			
		||||
#include "stm32h7xx_hal_ltdc.h"
 | 
			
		||||
 | 
			
		||||
using namespace touchgfx;
 | 
			
		||||
 | 
			
		||||
namespace
 | 
			
		||||
{
 | 
			
		||||
// Use the section "TouchGFX_Framebuffer" in the linker script to specify the placement of the buffer
 | 
			
		||||
LOCATION_PRAGMA_NOLOAD("TouchGFX_Framebuffer")
 | 
			
		||||
uint32_t frameBuf[(320 * 480 * 2 + 3) / 4] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Framebuffer");
 | 
			
		||||
static uint16_t lcd_int_active_line;
 | 
			
		||||
static uint16_t lcd_int_porch_line;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TouchGFXGeneratedHAL::initialize()
 | 
			
		||||
{
 | 
			
		||||
    HAL::initialize();
 | 
			
		||||
    registerEventListener(*(Application::getInstance()));
 | 
			
		||||
    setFrameBufferStartAddresses((void*)frameBuf, (void*)0, (void*)0);
 | 
			
		||||
    setFrameBufferStartAddresses((void*)0x24040000, (void*)0x24040000, (void*)0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TouchGFXGeneratedHAL::configureInterrupts()
 | 
			
		||||
{
 | 
			
		||||
    NVIC_SetPriority(LTDC_IRQn, 9);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TouchGFXGeneratedHAL::enableInterrupts()
 | 
			
		||||
{
 | 
			
		||||
    NVIC_EnableIRQ(LTDC_IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TouchGFXGeneratedHAL::disableInterrupts()
 | 
			
		||||
{
 | 
			
		||||
    NVIC_DisableIRQ(LTDC_IRQn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TouchGFXGeneratedHAL::enableLCDControllerInterrupt()
 | 
			
		||||
{
 | 
			
		||||
    lcd_int_active_line = (LTDC->BPCR & 0x7FF) - 1;
 | 
			
		||||
    lcd_int_porch_line = (LTDC->AWCR & 0x7FF) - 1;
 | 
			
		||||
 | 
			
		||||
    /* Sets the Line Interrupt position */
 | 
			
		||||
    LTDC->LIPCR = lcd_int_active_line;
 | 
			
		||||
    /* Line Interrupt Enable            */
 | 
			
		||||
    LTDC->IER |= LTDC_IER_LIE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool TouchGFXGeneratedHAL::beginFrame()
 | 
			
		||||
@ -66,21 +76,17 @@ void TouchGFXGeneratedHAL::endFrame()
 | 
			
		||||
    HAL::endFrame();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline uint8_t* TouchGFXGeneratedHAL::advanceFrameBufferToRect(uint8_t* fbPtr, const touchgfx::Rect& rect) const
 | 
			
		||||
{
 | 
			
		||||
    //       Advance vertically                   Advance horizontally
 | 
			
		||||
    fbPtr += rect.y * lcd().framebufferStride() + rect.x * 2;
 | 
			
		||||
    return fbPtr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t* TouchGFXGeneratedHAL::getTFTFrameBuffer() const
 | 
			
		||||
{
 | 
			
		||||
    return (uint16_t*)frameBuf;
 | 
			
		||||
    return (uint16_t*)LTDC_Layer1->CFBAR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TouchGFXGeneratedHAL::setTFTFrameBuffer(uint16_t* adr)
 | 
			
		||||
{
 | 
			
		||||
    //setTFTFrameBuffer() not used for selected display interface
 | 
			
		||||
    LTDC_Layer1->CFBAR = (uint32_t)adr;
 | 
			
		||||
 | 
			
		||||
    /* Reload immediate */
 | 
			
		||||
    LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect)
 | 
			
		||||
 | 
			
		||||
@ -156,24 +156,6 @@ public:
 | 
			
		||||
     *        Called when a rendering pass is completed.
 | 
			
		||||
     */
 | 
			
		||||
    virtual void endFrame();
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     * @fn inline uint8_t* TouchGFXGeneratedHAL::advanceFrameBufferToRect(uint8_t* fbPtr, const touchgfx::Rect& rect) const;
 | 
			
		||||
     *
 | 
			
		||||
     * @brief This function calculates the offset in the framebuffer address according to "rect" coordinates.
 | 
			
		||||
     *
 | 
			
		||||
     *        This function is typically for users who need to transfer framebuffer data to
 | 
			
		||||
     *        a display from within flushFrameBuffer(Rect& rect). While HAL::lockFrameBuffer()
 | 
			
		||||
     *        returns a pointer to the current drawing framebuffer, users must manually calculate
 | 
			
		||||
     *        the offset from that pointer to the Rect to transfer. This function will advance the offset
 | 
			
		||||
     *        in the framebuffer equal to the rect's upper left corner (x, y).
 | 
			
		||||
     *
 | 
			
		||||
     *
 | 
			
		||||
     * @param fbPtr Pointer to the start of the framebuffer, coordinates (0, 0)
 | 
			
		||||
     * @param rect The area of the screen expressed in absolute coordinates, which has to be transformed to address.
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    inline uint8_t* advanceFrameBufferToRect(uint8_t* fbPtr, const touchgfx::Rect& rect) const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user