電池が切れた時のrtcの振る舞いについて

@fmt_mika

いつもお世話になっております。
Toradex Japanのアルバロです。
ご確認とご質問ありがとうございます。


1.Qtアプリから “oscillator stop detected” を確認する方法について

はい、Qt(C++)アプリケーション内からこのログメッセージを確認することは可能です。
以下に、journalctl を使用してカーネルログから該当メッセージを探す例を示します:

:white_check_mark: Qt5/6の例(C++)

#include <QProcess>
#include <QString>
#include <QDebug>

bool checkOscillatorStopLog() {
    QProcess process;
    process.start("journalctl", {"-k", "-b", "--no-pager"});
    process.waitForFinished();

    QString output = process.readAllStandardOutput();
    return output.contains("oscillator stop detected");
}

この関数をアプリの起動時に呼び出して、true を返した場合は電池切れを示す画面を表示することができます。

※ システムログの読み取りには環境によって追加の権限が必要な場合があります。

:warning: ご注意:
上記コードはAIにより生成された参考例です。QtのバージョンやLinuxの環境によってはそのままでは動作しない可能性がありますので、必要に応じて調整をお願いします。


2.QtからI2C経由でVLFレジスタを直接読む方法について

技術的には、RX8130のレジスタをI2C経由で読み取ってVLFビットを確認することは可能です。
この場合、基板の改造は不要で、ソフトウェア側の対応(デバイスツリーやドライバの無効化)だけで実現可能です

ただし、この方法は推奨いたしません。理由は以下の通りです:

  • RTCドライバを無効化すると、LinuxのRTC機能(時刻管理、/dev/rtc0の利用など)が全て無効になります
  • VLFの判定や初期化処理も含め、カーネルドライバが担当している処理をすべてユーザ空間で再実装する必要があります。

:white_check_mark: 推奨する方法

Linux側のRTCドライバはそのまま有効にしておき、
Qtアプリからカーネルログを確認してメッセージを検出する方法が最も簡潔かつ信頼性の高いアプローチです。

もしQtアプリへの統合でお困りの点があれば、お気軽にご相談ください。

以上、引き続きよろしくお願いいたします。
アルバロ。