id: apollo_pcm_demux label: Apollo PCM Demux category: '[Apollo USB]' flags: [python] parameters: - id: output_format label: Output Format dtype: string default: 'raw' options: ['raw', 'scaled', 'engineering'] option_labels: ['Raw (8-bit)', 'Scaled (voltage)', 'Engineering'] - id: words_per_frame label: Words Per Frame dtype: int default: '128' options: ['128', '200'] option_labels: ['High Rate (128)', 'Low Rate (200)'] inputs: - label: frames domain: message outputs: - label: telemetry domain: message - label: agc_data domain: message - label: raw_frame domain: message templates: imports: from apollo import pcm_demux make: >- apollo.pcm_demux.pcm_demux( output_format=${output_format}, words_per_frame=${words_per_frame}) documentation: |- Apollo PCM Frame Demultiplexer Receives complete PCM frames from the frame synchronizer and demultiplexes them into individual telemetry words and AGC data. Output ports: telemetry: Individual word PDUs with position and value metadata. agc_data: AGC channel data (ch 34/35/57) for downlink decoder. raw_frame: Complete frame passthrough. A/D scaling (section 5.3): code 1 = 0V, code 254 = 4.98V, step = 19.7 mV/LSB Low-level inputs have x125 gain (0-40 mV range). Parameters: output_format: "raw" (8-bit codes), "scaled" (voltage), "engineering" (named) words_per_frame: 128 (high rate) or 200 (low rate) file_format: 1