带硬件编码轮的 TouchGFX

TouchGFX with hardware encoder wheel

尝试在 ARM 上实现 touchGFX,UI 由按钮编码轮控制,这在汽车中很常见。

我遇到的问题是低级编码轮部分是从 C 中的主要后端应用程序处理的。

TouchGFX,在 C++ 中。设计器应用程序允许直接实现硬件按钮,由堆栈直接处理,但是编码器轮需要实现一些逻辑,最好在后端实现。

通常,从后端与 touchGFX 交互的方式是通过轮询数据的模型 class(根据文档,大约 60Hz)。

但是,对于物理编码器,最好在后端和 GFX 之间进行基于触发器的通信,但是,文档或示例中并不清楚如何获取 GFX 上下文以及如何集成从后端触发,通过直接调用或回调而不是轮询。

我尝试实现 C->C++ 回调,但找不到 GFX 上下文。

在查阅文档和大量 post 之后,我还没有找到解决方案。

您可以执行以下操作:

  1. 向前端应用程序添加一个函数,returns指向模型的指针

  2. 添加一个 C++ 源文件,其中包含从 C 调用并调用模型中函数的函数:

     #include <gui/common/FrontendApplication.hpp>
    
     #ifdef __cplusplus
     extern "C" {
     #endif
    
     void func1()
     {
         Model * model = static_cast<FrontendApplication*>(Application::getInstance())->getModelPtr();
         if (model)
         {
             model->funcOnModel();   
         }
     }
    
    
     #ifdef __cplusplus
     }
     #endif
    
  3. 从您的 C 后端调用 func1()

从 funcOnModel 可以通过 ModelListener 或派生的 Presenter 访问 touchgfx 小部件。