0

車でよく見られる、押しボタン式のエンコーダー ホイールから制御される UI を使用して、ARM に touchGFX を実装しようとしています。

私が遭遇した問題は、低レベルのエンコーダー ホイール部分が C のメイン バックエンド アプリケーションから処理されることです。

TouchGFX は C++ です。デザイナー アプリでは、スタックによって直接処理されるハードウェア ボタンを直接実装できますが、エンコーダー ホイールには、できればバックエンドで何らかのロジックを実装する必要があります。

通常、バックエンドから touchGFX に対話する方法は、データがポーリングされるモデル クラスを介して行われます (ドキュメントによると約 60Hz)。

ただし、物理エンコーダーの場合、バックエンドと GFX の間でトリガーベースの通信を行うことが望ましいですが、GFX コンテキストを取得する方法とバックエンドからトリガーを統合する方法がドキュメントまたは例で明確ではありません。ポーリングではなく、直接呼び出しまたはコールバックによって。

C->C++ コールバックを実装しようとしましたが、GFX コンテキストが見つかりませんでした。

ドキュメントと多くの投稿を掘り下げた後、私はまだ解決策を見つけていません。

4

1 に答える 1

1

次のことができます。

  1. モデルへのポインターを返す関数をフロントエンド アプリケーションに追加します。

  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 または派生プレゼンターを介して touchgfx ウィジェットにアクセスできます。

于 2021-09-17T19:04:39.957 に答える