Skip to content

Releases: jp1lrt/ChronoGPS

ChronoGPS v2.5.3 - System Tray Localization & Korean Translation Fix

10 Mar 03:32

Choose a tag to compare

ChronoGPS v2.5.3

変更内容

システムトレイメニューの多言語対応
トレイアイコンを右クリックした際のメニュー(表示/終了)が、言語設定に関わらず常に英語/日本語の固定表示になっていた問題を修正しました。選択中の言語に応じてメニューラベルが切り替わるようになりました。全16言語に対応しています。

韓国語翻訳の修正(DS4EOI Lee 提供)
보레이트전송 속도(ボーレート → 伝送速度)、およびFT8オフセットラベルの誤植を修正しました。


Changes

System Tray Menu Localization
The tray icon context menu (Show / Quit) was previously hardcoded in English/Japanese regardless of the selected language. Menu labels now update correctly when the language is changed. All 16 languages are supported.

Korean Translation Fix (contributed by DS4EOI Lee)
Corrected 보레이트전송 속도 (Baud Rate → Transfer Speed), and fixed a typo in the FT8 offset label.

ChronoGPS v2.5.2 - Virtual COM Port & Manual Entry Support

07 Mar 18:14

Choose a tag to compare

ChronoGPS v2.5.2

変更内容

COMポートの手入力に対応
仮想COMポートドライバ("Ports (COM & LPT)" 配下に登録されないタイプ)を使用している環境では、COMポートが自動リストに表示されない場合がありました。COMポート欄を直接入力可能にすることで、このような環境でも任意のポートを指定して接続できるようになりました。

COMポート入力値の自動正規化
入力されたポート名の前後スペースを除去し、小文字を大文字に変換します(例: com3COM3)。


Changes

Manual COM Port Entry Now Supported
On systems using certain virtual COM port drivers (registered outside the standard "Ports (COM & LPT)" category), COM ports may not appear in the automatic list. The COM port field now accepts direct text input, allowing users to specify any port manually.

COM Port Input Normalization
Port names entered manually are automatically trimmed and uppercased (e.g. com3COM3).

ChronoGPS v2.5.1 - NTP Stability & Ghost Timer Fix

01 Mar 11:27

Choose a tag to compare

ChronoGPS v2.5.1

変更内容

NTP自動同期が言語切替後に勝手に復活するバグを修正
言語切替(タブ再構築)のたびに _load_settings_to_ui() が呼ばれ、
NTP自動同期がOFFのまま設定保存していても、内部タイマーが再起動されてしまう問題を修正しました。
設定の「UI反映」と「自動起動」を明確に分離し、自動起動は __init__ 末尾での1回のみに限定しています。

言語切替時にUnlockバナーが一瞬復活するバグを修正
管理者モードで起動中に言語を切り替えると、
言語切替ダイアログが表示されている間だけ「Unlockバナー」が一瞬チラ見えする問題を修正しました。
messagebox 表示前にバナー表示状態を再評価することで、チラつきを解消しています。

NTPタイマーの残弾無害化(幽霊タイマー対策)
OFFにした直後に既に予約済みだったタイマーが発火し、
NTPが1〜数回余分に走ってしまう問題を対策しました。

  • コールバック発火時にタイマーIDを即消費済みにするよう変更
  • OFF状態または終了処理中の場合は即リターンするガードを追加
  • 起動直後の予約afterもIDを保持し、OFF操作時にキャンセル可能に

手動NTPボタンとNTP自動同期を明確に区別
「NTP自動同期 OFF」の状態で「NTP同期」ボタンを押しても
結果が捨てられてしまう回帰バグを修正しました。
ワーカースレッドに is_auto フラグを導入し、
自動同期由来の結果のみOFF時にスキップ、手動同期は常に処理されます。

NTPワーカースレッドの重複起動防止を強化
ネットワーク遅延時や手動ボタンとタイマーが重なった場合に
スレッドが二重起動するレースコンディションを修正しました。
フラグをスレッド起動前(UIスレッド側)で立てることで、競合の余地をなくしています。

設定値の真偽判定を堅牢化
設定ファイル(JSON)をユーザーが手動編集して "true""false"(文字列)と書いた場合でも
正しくbool値として解釈する _to_bool() ヘルパーを導入しました。

unlock_already_elevated ログメッセージをローカライズ
管理者権限で起動中にUnlockボタンを押した際のログ文言を
全16言語対応のロケールキーに変更しました。


Changes

Fixed: NTP Auto-Sync Reviving After Language Change
Each language switch triggered a tab rebuild and _load_settings_to_ui(),
which restarted the NTP auto-sync timer regardless of the user's OFF setting.
UI reflection and auto-start are now clearly separated —
auto-start only occurs once at __init__ on application launch.

Fixed: Unlock Banner Flickering During Language Change
When running in administrator mode, switching the language caused
the "Unlock" banner to briefly reappear while the language-change dialog was open.
Banner visibility is now re-evaluated before showing the messagebox, eliminating the flicker.

Ghost Timer Neutralization
Fixed an issue where already-scheduled NTP timers continued to fire after being turned OFF,
causing 1–3 extra NTP queries.

  • Timer ID is now consumed immediately when the callback fires
  • Early return added when auto-sync is OFF or app is closing
  • Startup after() ID is retained so it can be cancelled if the user turns OFF within 1 second

Fixed: Manual NTP Button Blocked When Auto-Sync is OFF
A regression caused the "NTP Sync" button result to be silently discarded
when NTP auto-sync was turned OFF.
An is_auto flag is now passed through the worker thread:
only auto-originated results are discarded when OFF; manual sync always processes normally.

Improved Race Condition Resistance for NTP Worker Thread
Fixed a race condition where the worker thread could launch twice
if a timer callback and a manual button press coincided during network latency.
The running flag is now set in the UI thread before the thread is started,
eliminating the window for concurrent launches.

Robust Boolean Parsing for Config Values
Introduced _to_bool() helper to correctly interpret config values
even if a user manually edits the JSON and writes "true" or "false" as strings.

Localized unlock_already_elevated Log Message
The log message shown when clicking Unlock while already running as administrator
is now drawn from the locale key, supporting all 16 languages.

ChronoGPS v2.5 - Monitor-Only Startup & Elevation Handoff

28 Feb 02:27

Choose a tag to compare

ChronoGPS v2.5

変更内容

起動UXの刷新:モニタ専用起動をデフォルトに
v2.5 から、起動時のUACダイアログは廃止されました。
ChronoGPS は常に「モニタ専用モード」で起動します。
時刻同期が必要なときだけ、画面上部のバナー「時刻同期を有効にする(管理者として再起動)」をクリックして昇格できます。
UACをキャンセルしても、モニタモードのまま継続されます(プロセスは終了しません)。

ゾンビプロセス防止(Mutexによる多重起動抑止)
同じモードのChronoGPSが既に起動している場合、2回目の起動は警告ダイアログを表示して即終了します。
また、monitor / sync の異なるモードが同時に起動することも防止されます。
昇格(handoff)時のみ、短時間の並走が許可されます。

昇格ハンドオフの確実化
「Unlock Sync Features」ボタンを押すと、管理者として新プロセス(syncモード)を起動し、
新プロセスの起動が確認されてから旧プロセスが自動終了します(タイムアウト:10秒)。
確認できない場合(UACキャンセル含む)は旧プロセスが継続します。

ロケール追加(v2.5新規キー)
バナー文言・二重起動ダイアログ・タスクトレイ確認メッセージを全16言語に追加しました。
メニューバー(「言語」「ヘルプ」)も全16言語で表示されるよう修正しました。

起動ログの強化
起動時に mode / elevated_arg / handoff / mutex_name / other_mode_running / should_exit / exit_reason を必ずログに記録します。
トラブル発生時の切り分けが格段に速くなります。


Changes

Revamped Launch UX: Monitor-Only Mode as Default
Starting with v2.5, the UAC dialog at launch has been removed.
ChronoGPS always starts in Monitor-Only mode by default.
When time sync is needed, simply click the banner at the top of the window:
"Unlock Sync Features (Restart as Administrator)"
If the UAC dialog is cancelled, Monitor-Only mode continues — the process is not terminated.

Zombie Process Prevention via Windows Mutex
If ChronoGPS is already running in the same mode, a second launch shows a warning dialog and exits immediately.
Simultaneous launch of monitor and sync modes is also prevented.
A short-lived overlap is permitted only during the elevation handoff.

Reliable Elevation Handoff
Clicking "Unlock Sync Features" launches a new elevated process (sync mode).
The old process only exits after the new process is confirmed via Mutex detection (timeout: 10 seconds).
If confirmation fails (including UAC cancel), the old process continues running.

Locale Additions (v2.5 new keys)
Added banner text, duplicate-launch dialog messages, and tray hint messages for all 16 languages.
Menu bar labels ("Language" / "Help") are now correctly localized in all 16 languages.

Enhanced Startup Logging
On every launch, ChronoGPS now logs mode / elevated_arg / handoff / mutex_name / other_mode_running / should_exit / exit_reason.
This makes it significantly easier to diagnose startup issues.


Special thanks to Vince (VA3VF) for UX feedback that directly shaped the v2.5 design.

ChronoGPS v2.4.6 - Stability and Global Reach Update

25 Feb 00:56

Choose a tag to compare

ChronoGPS v2.4.6

変更内容

起動時のOS言語自動判定
初回起動時(または言語未設定時)に、WindowsのシステムロケールからChronoGPSの対応言語を自動的に検出して起動します。日本語環境では日本語、英語・フランス語・ドイツ語などの環境ではそれぞれの言語で起動します。ChronoGPSの16言語に対応していない環境の場合は、英語にフォールバックします。一度言語を手動で選択した後は、その設定が優先されます。

NTP自動同期の起動時復元バグを修正
NTP自動同期をONにして終了した場合、次回起動時にチェックボックスの状態は復元されていたものの、自動同期のタイマーが実際には開始されていないバグを修正しました。一度チェックをOFF→ONし直すことでしか動作しなかった問題が解消されます。

GPS定期同期の起動時復元バグを修正
GPS同期モードを「定期同期(Interval)」に設定して終了した場合も、同様にモード表示は復元されるものの、内部のタイマー処理が開始されていなかった問題を修正しました。再起動後も設定が正しく引き継がれ、即座に定期同期が再開されます。


Changes

Automatic OS Language Detection on Startup
ChronoGPS now automatically detects the Windows system locale on first launch (or when no language preference has been saved) and starts in the matching language. Supports all 16 available languages; falls back to English for unsupported locales. Once a language is manually selected, that preference takes priority.

Fixed: NTP Auto Sync Not Resuming After Restart
Fixed a bug where the NTP Auto Sync timer was not actually started on launch, even though the checkbox appeared checked from the previous session. Users had to toggle the checkbox off and on again to activate it. This is now resolved — auto sync resumes automatically on startup.
Special thanks to Vince (VA3VF) for identifying and thoroughly documenting this issue!

Fixed: GPS Interval Sync Not Resuming After Restart
Fixed the same class of bug on the GPS side. When GPS sync mode was set to "Interval" and the app was restarted, the mode appeared restored in the UI but the internal sync timer was not running. GPS interval sync now correctly resumes on startup without any manual intervention.

ChronoGPS v2.4.5 - Responsive UI Update

23 Feb 03:29

Choose a tag to compare

ChronoGPS v2.4.5

変更内容

レスポンシブなスクロールUIの実装 すべての設定タブに ScrollableFrame を導入しました。これにより、14インチ程度の小型ノートPCや低解像度のディスプレイ環境でも、すべての設定項目やボタンに確実にアクセスし、操作することが可能になりました。

Windows環境でのホイール操作の最適化 Windows 11/10におけるマウスホイールの挙動を調整・最適化しました。デスクトップからノートPCのタッチパッドまで、どの環境においても直感的でスムーズなスクロール操作が可能です。

ウィンドウ最小サイズの制限追加 ウィンドウの最小サイズを 820x650 ピクセルに制限しました。これにより、極端にウィンドウを小さくした際のレイアウト崩れや操作パーツの消失を防止し、UIの堅牢性を高めています。

内部コードのリファクタリングとクリーンアップ GUIクラスの構造を整理し、冗長なコードを削減しました。また、プロジェクトルート内の不要なバックアップファイルや一時ファイルを整理し、リポジトリの健全性を向上させました。


Changes

Responsive Scrollable UI Implementation Introduced a ScrollableFrame across all tabs. This ensures 100% accessibility to all controls and settings even on compact laptop screens (e.g., 14-inch displays) or lower resolution environments.
Special thanks to Vince (VA3VF) for providing detailed feedback and testing on compact display environments!

Optimized Scrolling Experience on Windows Refined and optimized mouse wheel handling for Windows 11 and 10. This provides a consistent and smooth scrolling experience across various devices, from desktop mice to laptop touchpads.

Minimum Window Size Constraint Added a minimum window size constraint (820x650). This prevents UI layout collapse and ensures that essential control elements remain visible and clickable at all times.

Code Refactoring and Repository Cleanup Improved internal GUI class architecture and removed redundant code. Legacy backup files and temporary configuration files were also cleaned up to improve project maintainability.

ChronoGPS v2.4.4

22 Feb 07:47

Choose a tag to compare

ChronoGPS v2.4.4

変更内容

弱同期ロジックの再設計(安全性・保守性の向上)
定期同期(弱同期)の判定ロジックを純粋関数として分離しました。
判定・状態管理・OS時刻反映を明確に分離することで、
テスト可能性と将来の保守性が大きく向上しています。

弱同期判定のテスト完全対応
弱同期の判断ロジックを pytest で完全に検証可能な形に変更しました。
OS時刻を変更しない純粋ロジックとして切り出すことで、
安全かつ再現性の高いテストが可能になりました。

構文エラー検出漏れの根本対策
リファクタリング過程で潜在していた構文エラー要因を解消しました。
これにより、PyInstaller ビルド時に exe が起動不能となる問題を防止しています。

トレイ終了時の COM ポート解放の安定化
トレイから終了した際のスレッド終了処理を整理し、
GPS の COM ポートが確実に解放されるようになりました。
連続起動・終了・再起動でもポート再オープンが可能です。

ビルド手順の明確化と再現性向上
venv 環境でのクリーンビルドを正式なビルド手順として整理しました。
不要ファイルの混入を防ぎ、再現性の高い exe ビルドが可能になっています。


Changes

Redesigned Weak Sync Logic (Safety and Maintainability)
The periodic (weak) sync decision logic has been refactored into pure functions.
Decision logic, state management, and OS time updates are now clearly separated,
significantly improving testability and long-term maintainability.

Full Test Coverage for Weak Sync Decisions
Weak sync decision logic is now fully testable using pytest.
By isolating pure logic without modifying system time, testing is safe,
deterministic, and reproducible.

Eliminated Hidden Syntax Error Risks
Potential syntax error issues introduced during refactoring were resolved.
This prevents cases where PyInstaller-built executables could fail to launch.

Reliable COM Port Release on Tray Exit
Shutdown handling from the system tray has been improved so that
the GPS COM port is always released correctly.
Repeated start/exit/restart cycles no longer leave the port locked.

Improved Build Reproducibility
The official build process now uses a clean venv-based workflow.
This prevents unintended file inclusion and ensures reproducible binaries.

ChronoGPS v2.4.3

19 Feb 05:50

Choose a tag to compare

ChronoGPS v2.4.3

変更内容

定期同期モードの表示改善
定期同期モードのラベルに「監視用」を追加しました(16言語対応)。
定期同期はFT8/FT4の日常運用ではなく、ドリフト監視・異常検知を
目的とした上級者向け機能であることを明示しています。

定期同期の精度向上
GPS受信のたびに毎秒サンプルを蓄積するように変更しました。
これにより、5分ごとの判断が直近30秒の中央値に基づくようになり、
統計的に安定した補正判断が可能になりました。

二重サンプル追加の修正
期限到達時にサンプルが二重追加される問題を修正しました。
中央値・連続確認ロジックの精度が向上しています。

サンプル窓サイズの拡大
内部バッファを5サンプルから30サンプルに拡大しました。
瞬間的なジッタの影響を受けにくくなりました。

作者情報の統一
16言語全てで作者情報を統一しました。


Changes

Improved Periodic Sync Mode Label
Added "(Monitoring)" to the Periodic Sync mode label in all 16 languages.
This clarifies that Periodic Sync is intended for drift monitoring and
diagnostics, not for everyday FT8/FT4 operation.

Improved Periodic Sync Accuracy
GPS samples are now accumulated every second instead of only at sync intervals.
The sync decision at each deadline is now based on the median of the last
30 seconds of samples, resulting in more statistically reliable corrections.

Fixed Double Sample Append
Fixed an issue where a sample was appended twice at sync deadline,
which could skew the median and confirm logic.

Expanded Sample Window
Internal sample buffer expanded from 5 to 30 samples,
reducing sensitivity to momentary jitter.

Unified Author Credits
Author credits are now consistent across all 16 languages.

ChronoGPS v2.4.2

18 Feb 12:16

Choose a tag to compare

ChronoGPS v2.4.2

新機能

  • インドネシア語対応を追加(16言語目)
  • 単一exe化:ChronoGPS.exe のみで動作(icon.ico 不要)

バグ修正

  • GPS定期同期モードで時刻誤差が累積する問題を修正
    • 誤差が1秒未満の場合は同期をスキップする閾値制御を実装
    • GPS時刻のジッタ(瞬間的な揺れ)がOS時刻に反映されないよう改善

技術的改善

  • アイコンファイルをexeに埋め込み、配布・インストールを簡素化
  • リソースパス取得処理を追加(PyInstallerバンドル対応)

Thanks

  • JE1AEX 井手武雄様:定期同期の不具合報告

New Features

  • Indonesian language support added (16th language)
  • Single executable: ChronoGPS.exe now works standalone (no icon.ico required)

Bug Fixes

  • Fixed time error accumulation in GPS periodic sync mode
    • Implemented threshold control: sync skipped when error < 1 second
    • GPS time jitter no longer affects OS clock stability

Technical Improvements

  • Icon files embedded in exe for simplified distribution
  • Added resource path handling for PyInstaller bundles

Thanks

  • JE1AEX Takeo Ide: Bug report on periodic sync issue

ChronoGPS v2.4.1

18 Feb 04:41
978f895

Choose a tag to compare

ChronoGPS v2.4.1

新機能

  • インドネシア語(Indonesian)対応:言語設定にインドネシア語を追加し、全16ヶ国語のマルチリンガル環境を構築

技術的改善

  • GUIポーリング処理の堅牢化:アプリケーション終了時に発生していた TclError を AIアシスタント(Gemini)との共同作業により特定・修正。リソース解放時の例外処理を徹底し、動作の安定性を向上
  • コードのクリーンアップ:デバッグ用の不要なコンソール出力を除去し、実行時のオーバーヘッドを削減

備考

  • 以前のバージョンからアップデートする場合、設定ファイル(config.json)はそのまま引き継がれます
  • 時刻同期には引き続き管理者権限が必要です

New Features

  • Indonesian Language Support: Added Indonesian to the language settings, now supporting a total of 16 languages worldwide

Technical Improvements

  • Robust GUI Polling: Fixed the TclError exception occurring upon application exit (collaboration with AI Assistant Gemini). Improved system stability by ensuring safe resource deallocation and background process termination
  • Code Optimization: Cleaned up internal debug console outputs for leaner performance

Notes

  • Your existing settings in config.json will be preserved when updating from previous versions
  • Administrator privileges are still required for time synchronization