[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.
