[2026-11-07] SatBox_Ver0.1.1d-beta: Share PC/Web radio and TS-2000 baud persistence
Affected: Settings.cpp/h / SerialConfig.cpp / WebPage.cpp / SettingsBackup.cpp / SettingsBackupFormat.cpp / software/SatBox_Settings.py / software/dist/SatBox_Settings.exe / tests/test_pc_radio_settings.py / tests/test_ts2000_stage1.py / tests/test_ts2000_stage1_storage_web.py / tests/tests_settings_backup/fixtures/test.cpp / Documents/TS2000_Implementation_Notes_JP.md and EN.md
New: tests/test_radio_shared_save.py
Changes: Web and PC save TS rates 4800/9600/19200/38400/57600 bps (default 9600) to device satbox-radio/config. Enable the Web TS baud selector and PC LOAD/SAVE synchronization/readback. Preserve IDs 0/1/2/3, existing profiles and shared ICOM interface. NVS v4 (36 bytes) reads v1/v2/v3. Extend serial protocol to v4/RADIOSAVE4; older updates preserve the TS profile. New PC rejects TS saves to older firmware before device writes.
All-settings backup: Support 36-byte radio data and retain 20/32-byte imports; reject invalid TS baud before restoration.
Verification: 12 PC cases; actual PC serialization -> SerialConfig -> Web save handler -> NVS -> PC readback; all five rates, old-setting migration, invalid/storage-failure handling and legacy-update retention passed. Actual Web order/five-rate submission and v4 backup restoration/rollback/power-loss recovery passed. PC PyInstaller EXE build succeeded.
Intermediate build: core 3.3.8, esp32:esp32:esp32s3:PartitionScheme=huge_app. Compiler startup failed with xtensa-esp32s3-elf-g++.exe Illegal System DLL Relocation. No new application .bin generated; no board flashing or hardware communication.
Scope: TS CAT, USB framing, RTS/CTS and TS JTDX/Proxy remain unimplemented. This change covers selection and device persistence only. Shared Doppler/OFFSET/tracking/SQ/existing Proxy unchanged. Do not proceed to CAT implementation before the intermediate build passes.
Copies: Back up originals separately in each version, mirror new/changed relative paths and compare contents.

[2026-11-07] SatBox_Ver0.1.1d-beta: Place m and .local beside their input boxes
Affected: software/SatBox_Settings.py / software/dist/SatBox_Settings.exe
Changes: Group entries with suffix labels in one Frame with 5px spacing, independent of other column widths. Preserve regular fields, password masking and entries references.
Verification: Actual Tk layout/reference/masking checks and PyInstaller build passed. Copied and compared both versions; separate original backups retained.

[2026-11-07] SatBox_Ver0.1.1d-beta: Position bps next to the baud selector
Affected: software/SatBox_Settings.py / software/dist/SatBox_Settings.exe
Changes: Group the baud selector and unit in one Frame, with 5px spacing to its right, independent of the wider fields.
Verification: Tk layout checked; PyInstaller build passed. Copied and compared both versions; original files backed up separately.

[2026-11-07] SatBox_Ver0.1.1d-beta: Enable PC TS-2000 baud selection
Affected: software/SatBox_Settings.py / software/dist/SatBox_Settings.exe / tests/test_ts2000_stage1.py / Documents/TS2000_Implementation_Notes_JP.md and EN.md
Changes: Offer 4800/9600/19200/38400/57600 bps for TS, default 9600. Retain choices in the PC INI across model switches/reloads. Explicitly state that device baud synchronization and CAT remain unimplemented until stage 2. No Web/firmware changes.
Verification: All five INI roundtrips, switch retention, ICOM preservation, busy-state protection, 12 PC cases and actual SerialConfig roundtrip passed. PyInstaller EXE build succeeded. Separate original backups and matching copies in both trees.

[2026-11-07] SatBox_Ver0.1.1d-beta: Use the standard radio-model Combobox
Affected: software/SatBox_Settings.py / software/dist/SatBox_Settings.exe
Changes: Restore a readonly ttk.Combobox matching the other three radio controls, including its native border and dropdown arrow. No checkmarked menu. Unsupported selections such as SA818S restore the prior model without changing profiles, INI or device settings.
Verification: Actual Tk TCombobox/default style, four model selections, unsupported/busy selection guards tested. PyInstaller EXE rebuild passed; copied and compared both versions. Firmware unchanged.

[2026-11-07] SatBox_Ver0.1.1d-beta: Show an explicit radio-selector border
Affected: software/SatBox_Settings.py / software/dist/SatBox_Settings.exe
Changes: Replace the theme-dependent ttk.Menubutton with a tk.Menubutton using an explicit white field, 1px border and dropdown indicator. Keep ordinary command entries without checkmarks, disabled SA818S and stable IDs.
Verification: Actual Tk border/background/indicator and four selection callbacks tested; SA818S remains disabled. PyInstaller EXE build passed. Copied and compared both versions. Firmware unchanged.

[2026-11-07] SatBox_Ver0.1.1d-beta: Fix overlapping radio-model menu text
Affected: software/SatBox_Settings.py / software/dist/SatBox_Settings.exe
Changes: Replace the checkmarked OptionMenu with a Menubutton/Menu using ordinary command entries, preventing the Windows checkmark from overlapping model names. Preserve display order, persistent IDs and selection callbacks. SA818S remains disabled.
Verification: Actual Tk menu test confirms command-only entries, four selection callbacks and disabled SA818S. Rebuild PC EXE. Firmware is unchanged; stage 2 TS CAT remains unimplemented.

[2026-11-07] SatBox_Ver0.1.1d-beta: TS-2000 / TS-2000X stage 1 (selection and persistence)
Affected: Settings.cpp/h / SerialConfig.cpp / WebPage.cpp / RigControl.cpp / SettingsBackupFormat.cpp / software/SatBox_Settings.py / software/dist/SatBox_Settings.exe / tests/test_pc_radio_settings.py
New: tests/test_ts2000_stage1.py / tests/test_ts2000_stage1_storage_web.py / tests/ts2000_stage1_fixtures/Arduino.h and Preferences.h / Documents/TS2000_Implementation_Notes_JP.md and EN.md
Changes: Display IC-820H, IC-9700, FT-847, TS-2000, SA818S (disabled). Preserve IDs 0/1/2 and add TS-2000 as ID3; TS-2000X uses the same selection. NVS v3 reads v1/v2; PC protocol v3 carries model 3. Incompatible old PC/firmware is rejected before saving. Preserve existing profiles and shared ICOM interface. Extend backup validation for v3.
Stage 1 scope: TS selection/storage only. Show planned USB Host RS-232C/9600 bps; baud editing is not implemented. Exit before initializing any old driver for TS; no TS CAT is sent. Doppler calculations, CSV, OFFSET, tracking, Proxy and SQ behavior are unchanged.
Verification: 12 PC regression cases; roundtrip through actual SerialConfig parser; real NVS functions covering legacy IDs/migration/restart restore; real Web script order, stable IDs and profile retention. PC PyInstaller EXE build succeeded.
Intermediate compilation: Run with ESP32 core 3.3.8 and esp32:esp32:esp32s3:PartitionScheme=huge_app. Both baseline and stage 1 fail at xtensa-esp32s3-elf-g++.exe startup with Illegal System DLL Relocation. No firmware .bin produced. No board flashing or hardware communication tested.
Next: Per specification section 1.1, do not start stage 2 CAT implementation until intermediate firmware compilation succeeds. Mirror changed files by relative path and compare contents. Retain existing changelog locations under Documents.

[2026-11-06] Add first-startup Doppler defaults and explain REV CSV field 3
Affected: DopplerDefaults.cpp/h / Doppler.cpp / WebPage.cpp / Doppler_Setup_JP.md / Doppler_Setup_EN.md / README.md / README_JP.md / tests/tests_doppler_defaults
Changes: Embed the author's 43 active rows and three commented rows. Only when /doppler.csv is absent, write a temporary file, verify the complete size and publish it. Preserve existing CSV (including empty files), OFFSET and TLE; never format the FS in this initializer. Web loading retries initialization if absent and returns an error on failure.
Explanation: For REV with USB/LSB on both sides, field 3 is C=uplink MHz+actual downlink MHz. FO-29: 145.950+435.850=581.800; RX=581.800-145.950=435.850 MHz. Add English/Japanese Web help and documentation.
Verification: C++ host tests cover first/repeated startup, existing/empty preservation, failures/retry, all 43 rows/three comments, FO-29/NOR/DNONLY calculations and bilingual Web handlers. Full build stopped at compiler startup with the known Illegal System DLL Relocation error; no updated .bin was generated. No board flashing or hardware communication was performed.

[2026-11-05] Add IC-9700 CI-V control over COM (RS-232C/CT-17)
Affected: IC9700.cpp/h / RigControl.cpp/h / Pin.h / CatProxy.cpp / Doppler.cpp/h / DopplerOffsets.cpp / Settings.cpp/h / WebPage.cpp / tests_ic9700 / tests_offset_radio
Changes: Support the IC-9700 satellite-mode mapping of radio MAIN=RX and SUB=TX. Implement asynchronous CI-V verification of satellite mode, selected side, frequency and mode. Retry connection after 3 seconds on communication failure. Use UART1 on GPIO15/16, 8N1. USB FT232B remains unsupported. Separate IC-9700 OFFSET storage and expand capacity to 96 entries. Existing FTDI and FT847 implementations are unchanged.
Verification: Host tests passed for CI-V handling, actual RigControl integration, OFFSET separation across three radio models, settings persistence and FT847/Proxy regression. Full ESP32 compilation remains incomplete due to a Windows DLL relocation error. IC-9700 hardware operation is unverified.
Details: IC9700_CI-V_実装メモ.md
Full backup: C:\Users\kueno\OneDrive\Desktop\Ham\3_Arduino\ESP32_SatBox\SatBox_Ver0.1.1c\backup\full_before_IC9700_20261105_133327.zip

[2026-11-05] Move language selection to the main page and Setup menu
Affected: WebPage.cpp
Changes: Show Language (English/Japanese) to the right of the Map button on the main page and above Network in the Setup menu. Save changes to the existing language setting and return to the same page. Remove the language field and update handler from the station-information page.

[2026-11-05] Update per-radio baud-rate options
IC-9700: 4800/9600/19200/38400/57600/115200 bps. IC-820H: 300/1200/4800/9600 bps. FT-847: 4800/9600/57600 bps. Align the UI options with validation during save and reload.

[2026-11-05] Add interface selection and IC-9700 to Radio Setup
Affected: WebPage.cpp / Settings.h / Settings.cpp / SerialConfig.cpp / RigControl.cpp
Changes: Allow COM (RS-232C/CT-17) or USB (FT232B) for ICOM radios. Restrict FT-847 to COM and disable its CI-V address field. Add IC-9700 selection with separate baud-rate/CI-V-address profiles. Preserve and load older NVS settings. Preserve the new profiles when saving from an older PC tool.
Scope: UI and persistence only at this stage. CT-17 communication and IC-9700 CI-V control are not yet implemented. Unsupported selections are prevented from accidentally using the IC-820H driver.
Verification: Passed UI JavaScript tests for switching, input retention and submitted values, plus C++ persistence tests for migration, reload and rejection of invalid values. No complete ESP32 build or hardware verification was performed.

[2026-11-05] Integrate the standalone FT-847 Proxy into the main SatBox firmware
Affected: CatProxy.* / CatProxyConfig.h / CatProxyTuning.h / ProxyProtocol.* / RigControl.* / FT847.* / Doppler.* / SatBox_Ver0.1.1c.ino
Changes: Integrate the TCP4532 Hamlib NET rigctl-compatible service with existing Wi-Fi and CAT. Retain external USB PTT. Add shared CAT access arbitration, nominal-frequency reporting and temporary tuning with Doppler ON, linked tuning for inverting satellites, preservation of existing OFFSET values, and tuning carryover into manual receive operation. Radio reads use 100 ms intervals, a 500 ms response timeout and one read retry before reconnection.
Verification: Host integration tests, existing OFFSET persistence tests and FT-847 power/reconnection tests passed. ESP32 compilation remains incomplete because of the toolchain's Illegal System DLL Relocation error. Hardware testing of the integrated version has not been performed.
Details: CAT_Proxy_移植手順.md

[2026-11-03] Add Japanese radio connection/setup messages
Affected: WebPage.cpp
Changes: Use the existing LANGUAGE tokens to switch between Japanese and English messages for radio disconnected, setup failed, setup in progress, timeout and VFO read failure. SatBox operation and reconnection continue while the radio is disconnected.

[2026-11-02] Automatically recover from FT-847 power OFF and delayed startup
Affected: FT847.cpp / FT847.h / SatBox_Ver0.1.1c.ino / WebPage.cpp
Changes: Replace blocking CAT/SAT startup waits with a loop-driven state machine. On read failure, invalidate radio readiness and cached frequencies, then retry CAT ON/SAT ON and RX/TX verification after 3 seconds. Do not block the rest of SatBox processing.
Changes: Reapply the full satellite preset after reconnection. Retry Doppler HTTP 409 responses without incorrectly parsing them as JSON, and suppress repeated clicks. Accept Doppler OFF even during radio setup. Show communication-error text and standardize the setup wait limit at 10 seconds.
Verification: tests_ft847_power/test_driver.py checked startup with power OFF, delayed power ON, communication loss, recovery, UART failure, command intervals and millis rollover. web-test.cjs checked 409 retries, repeated-click suppression, OFF operations and HTTP errors.
Limitations: The installed ESP32 toolchain failed at compiler startup with Illegal System DLL Relocation. No hardware flashing or power-cycle testing was performed.

[2026-09-29] Restore touch-panel behavior to its state before this investigation
Affected: Display.cpp / RotaryEncoder.cpp
User request: Restore the previous version for testing with another satellite.
Changes: Revert the touch-input countermeasures, disabling of LCD Manual operation, Locked indication and LCD-MANUAL-LOCK-1 logging added during this investigation. Restore the saved pre-change files.
Backup: backup\Display.cpp.20260929_153719.before_touch_restore
Backup: backup\RotaryEncoder.cpp.20260929_153719.before_touch_restore
Verification: SHA256 of both files matched the restoration sources. Compilation and hardware operation are unverified.
Application: Recompile and upload to the ESP32.

[2026-09-29 16:03:34] Add LCD SAVE success feedback
Affected: Display.cpp
Changes: Show green for 800 ms only when receiveControlSaveOffset() succeeds after LCD SAVE, then return to gray. Do not illuminate on failure or when Manual is OFF. Add redraw checks when the indication turns on/off.
Backup: backup\Display.cpp.20260929_160334.before_save_feedback
Verification: Reviewed the diff and confirmed matching SHA256 at the destination. Compilation and hardware verification were not performed.

[2026-09-29 17:20:56] Fix 17 records being reinserted at log-server startup and JH1HGI duplicates
Affected: SatBox_Log_Server.py / C:\JI1FGX\SatBox\SatBox_Log_Server.exe / C:\Logs\Sat_logbook.db
Cause: Duplicate keys differed because ADIF used HHMM time while the database applied zfill(6). The value 0930 became 0009 on the database side, causing 17 historical records to be reinserted at every startup.
Fix: Use common duplicate-key generation for the DB and ADIF. Convert four-digit HHMM to HHMM00 in the search API to fix incorrect time display. Show the actual database path in initialization logs.
Cleanup: Of 18 records for JH1HGI / 20260217 / 0930 / RS-44 that were identical except for ID, retain ID227 and delete the other 17. Preserve QSOs dated 20260929. No other QSOs were deleted.
Backup: backup\SatBox_Log_Server.py.20260929_171955.before_qso_fix / backup\SatBox_Log_Server.exe.20260929_171955.before_qso_fix / backup\Sat_logbook.db.20260929_171955.before_jh1hgi_dedup
Verification: Reproduced the old version reinserting 17 records using a copy of the real DB. Repeated imports with the fixed version inserted zero records. Tests passed for mixed time formats and insertion of new QSOs. Database integrity was OK. EXE build succeeded; the running EXE was replaced and restarted. Health check was normal, and the actual API returned one matching record with time 093000.

[2026-09-29 17:25:53] Add PASS-TOUCH-1 diagnostic logging
Affected: Display.cpp
Background: LCD-originated Manual ON/OFF recurred with RS-44. Investigate its relationship to AOS → LOS → waiting for the next AOS of the same satellite.
Changes: Add PASS TRACE when the selected satellite's pass state or AOS/LOS times change; log raw coordinates, register values, previous read state and read interval for LCD Manual input; add a startup version-identification log.
Existing behavior: Touch-acceptance conditions and button actions are unchanged. Retain the 800 ms SAVE success indication.
Backup: backup\Display.cpp.20260929_172553.before_pass_touch_trace
Verification: The diff contains diagnostic additions only. Destination SHA256 matched. Hardware compilation and reproduction testing were not performed. This is diagnostic instrumentation, not a root-cause fix.

[2026-09-29 17:50:31] Unify LCD OFFSET display with the Web version
Affected: Display.cpp / WebPage.cpp / Doppler.cpp / Doppler.h
Cause: The LCD always displayed the internal tracking OFFSET, unlike the Web display, which uses the saved calibration OFFSET.
Changes: Move the existing Web getDisplayedRxOffset implementation into dopplerGetDisplayedRxOffset and call it from both Web and LCD. Show the current value during manual tuning; otherwise show the per-satellite saved value, falling back to the current value if none is registered. Display behavior while waiting for AOS and after Resume now matches the Web version.
Control frequencies and tracking logic are unchanged. Retain PASS-TOUCH-1 diagnostics and SAVE success feedback.
Backup: backup\各対象ファイル.20260929_175030.before_offset_display
Verification: Confirmed the function body was unchanged by the move and checked call sites, diagnostics and SAVE feedback retention. Destination hashes matched. Hardware build and operation testing were not performed.

2026-11-07 TS-2000 CAT (0.1.1d-beta)
Added experimental TS-2000/TS-2000X UART1 RS-232C CAT (GPIO15/16, saved TS-2000 baud, default 9600 bps), shared TCP4532 Proxy with external PTT, isolated OFFSET and bulk backup/restore, simulated-response tests and bilingual tester instructions. Not hardware tested.

2026-11-07 TS-2000 115200 bps
Added 115200 bps (8N1) for TS-2000/TS-2000X across Web, PC settings, simulator, persistence and bulk restore validation. Default remains 9600 bps.

2026-11-07 PC TS-2000 save fix
Fixed TS-2000 save being rejected by the PC tool before firmware capability negotiation: local validation no longer assumes protocol 2. Read/load behavior and firmware are unchanged.
