Repository navigation
Conversation
Verified against real NA500 hardware (fw 0.4.9, serial 0007) and Net Station 6.0.0.60960. NA400 behavior is unchanged: model-specific logic is gated on the amplifier type reported by cmd_GetAmpDetails. Protocol fixes (benefit all models): - Send each command in a single TCP write. The NA500's AmpServer parses every TCP segment as a complete message, so commands split across segments (which multiple stream insertions could produce) desynced its request/response handling. Also resync by skipping stale non-response lines, and bound the response wait at 10 s so a hung AmpServer can no longer freeze the client forever. - GUI links on a background thread with progress via queued signals; the UI stays responsive through the NA500's ~10 s cold power-on wait and shows a clean error if the server is unresponsive. NA500-specific handling: - Identify NA500 from amp_type; scaling factor 0.044703 uV/bit (0.75 V / 2^24), confirmed by the GES 500 datasheet, Net Station 6's NA500ScaleFactor(), and a square-wave calibration measurement. - Wait for ntn_AmpPowerOn before configuring: the NA500 silently drops commands issued during power-up. - Keep one persistent listening data connection per session and never send cmd_StopListeningToAmp: the NA500's AmpServer stops serving new listeners after any listener drop (until amp restart) and wedges the session outright on StopListening. - Poll the data port for passive recovery: the NA500 emits no ntn_AmpStarted notification. - Rate tables: decimated 250-2000 Hz, native 250-16000 Hz, no duplicate packets at low rates (all verified streaming). Rate detection and rate-change snapping extended to 16 kHz; detection bounded by measured duration and robust to stale buffered samples. - Zero anti-alias filter delay compensation, matching Net Station 6 (its calculateShift() applies no shift for the NA500). GUI: - Sample-rate dropdown now offers the NA400+NA500 union (adds 250 Hz low-latency, 2000 Hz decimated/low-latency split, 16000 Hz) with "NA500 only" labels; selections are validated against the identified model at link time (supportsSampleRate) and refused with a clear error before any command touches the amp. - LSL stream names derive from the address's last octet (.51/.52 keep their historic names). Mock server emulates NA500 rate validation and details response. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds support for the Net Amps 500 amplifier (GES 500), verified against real hardware (firmware 0.4.9) and cross-checked against Net Station 6.0.0.60960 behavior. NA400 support is unchanged — all model-specific behavior is gated on the amplifier type reported by
cmd_GetAmpDetails, and both models were regression-tested against the mock server.Protocol robustness (all models)
NA500 specifics
NA500ScaleFactor(), and measurement of the amp's own ±1900 µV square-wave calibration signal end-to-end through the LSL stream.ntn_AmpPowerOn.cmd_StopListeningToAmpwedges the client session entirely. The client now keeps one listening data connection for the whole session and never sends StopListening to an NA500.ntn_AmpStarted, so passive recovery polls the data port instead of waiting for a notification.calculateShift()applies no anti-alias shift for the NA500).GUI
supportsSampleRate()) and refuses unsupported combinations with a clear error before any state-changing command — the CLI gets the same guard..51/.52keep their historic names; e.g. an amp at.62becomesEGINetAmp_62).Known NA500 limitations (documented in README)
🤖 Generated with Claude Code