This file is indexed.

/usr/include/spandsp/private/v17rx.h is in libspandsp-dev 0.0.6-2+b2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
/*
 * SpanDSP - a series of DSP components for telephony
 *
 * private/v17rx.h - ITU V.17 modem receive part
 *
 * Written by Steve Underwood <steveu@coppice.org>
 *
 * Copyright (C) 2003 Steve Underwood
 *
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 2.1,
 * as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#if !defined(_SPANDSP_PRIVATE_V17RX_H_)
#define _SPANDSP_PRIVATE_V17RX_H_

/* Target length for the equalizer is about 63 taps, to deal with the worst stuff
   in V.56bis. */
/*! The length of the equalizer buffer */
//#define V17_EQUALIZER_LEN           33
#define V17_EQUALIZER_LEN           17
/*! Samples before the target position in the equalizer buffer */
//#define V17_EQUALIZER_PRE_LEN       16
#define V17_EQUALIZER_PRE_LEN       8

/*! The number of taps in the pulse shaping/bandpass filter */
#define V17_RX_FILTER_STEPS         27

/* We can store more trellis depth that we look back over, so that we can push out a group
   of symbols in one go, giving greater processing efficiency, at the expense of a bit more
   latency through the modem. */
/* Right now we don't take advantage of this optimisation. */
/*! The depth of the trellis buffer */
#define V17_TRELLIS_STORAGE_DEPTH   16
/*! How far we look back into history for trellis decisions */
#define V17_TRELLIS_LOOKBACK_DEPTH  16

/*!
    V.17 modem receive side descriptor. This defines the working state for a
    single instance of a V.17 modem receiver.
*/
struct v17_rx_state_s
{
    /*! \brief The bit rate of the modem. Valid values are 7200 9600, 12000 and 14400. */
    int bit_rate;
    /*! \brief The callback function used to put each bit received. */
    put_bit_func_t put_bit;
    /*! \brief A user specified opaque pointer passed to the put_but routine. */
    void *put_bit_user_data;

    /*! \brief The callback function used to report modem status changes. */
    modem_status_func_t status_handler;
    /*! \brief A user specified opaque pointer passed to the status function. */
    void *status_user_data;

    /*! \brief A callback function which may be enabled to report every symbol's
               constellation position. */
    qam_report_handler_t qam_report;
    /*! \brief A user specified opaque pointer passed to the qam_report callback
               routine. */
    void *qam_user_data;

#if 1 //defined(RESCALER_TEST)
    /* Experimental data for AGC tolerance */
    int16_t power_window[40];
    int power_window_ptr;
    int64_t window_power;
    int64_t window_power_save;
#endif
#if defined(SPANDSP_USE_FIXED_POINTx)
    /*! \brief The scaling factor accessed by the AGC algorithm. */
    float agc_scaling;
    /*! \brief The previous value of agc_scaling, needed to reuse old training. */
    float agc_scaling_save;

    /*! \brief The current delta factor for updating the equalizer coefficients. */
    float eq_delta;
    /*! \brief The adaptive equalizer coefficients. */
    complexi16_t eq_coeff[V17_EQUALIZER_LEN];
    /*! \brief A saved set of adaptive equalizer coefficients for use after restarts. */
    complexi16_t eq_coeff_save[V17_EQUALIZER_LEN];
    /*! \brief The equalizer signal buffer. */
    complexi16_t eq_buf[V17_EQUALIZER_LEN];

    /*! Low band edge filter for symbol sync. */
    int32_t symbol_sync_low[2];
    /*! High band edge filter for symbol sync. */
    int32_t symbol_sync_high[2];
    /*! DC filter for symbol sync. */
    int32_t symbol_sync_dc_filter[2];
    /*! Baud phase for symbol sync. */
    int32_t baud_phase;

    /*! \brief A measure of how much mismatch there is between the real constellation,
        and the decoded symbol positions. */
    float training_error;

    /*! \brief The proportional part of the carrier tracking filter. */
    float carrier_track_p;
    /*! \brief The integral part of the carrier tracking filter. */
    float carrier_track_i;
    /*! \brief The root raised cosine (RRC) pulse shaping filter buffer. */
    int16_t rrc_filter[V17_RX_FILTER_STEPS];

    /*! \brief A pointer to the current constellation. */
    const complexi16_t *constellation;
#else
    /*! \brief The scaling factor accessed by the AGC algorithm. */
    float agc_scaling;
    /*! \brief The previous value of agc_scaling, needed to reuse old training. */
    float agc_scaling_save;

    /*! \brief The current delta factor for updating the equalizer coefficients. */
    float eq_delta;
    /*! \brief The adaptive equalizer coefficients. */
    complexf_t eq_coeff[V17_EQUALIZER_LEN];
    /*! \brief A saved set of adaptive equalizer coefficients for use after restarts. */
    complexf_t eq_coeff_save[V17_EQUALIZER_LEN];
    /*! \brief The equalizer signal buffer. */
    complexf_t eq_buf[V17_EQUALIZER_LEN];

    /*! Low band edge filter for symbol sync. */
    float symbol_sync_low[2];
    /*! High band edge filter for symbol sync. */
    float symbol_sync_high[2];
    /*! DC filter for symbol sync. */
    float symbol_sync_dc_filter[2];
    /*! Baud phase for symbol sync. */
    float baud_phase;

    /*! \brief A measure of how much mismatch there is between the real constellation,
        and the decoded symbol positions. */
    float training_error;

    /*! \brief The proportional part of the carrier tracking filter. */
    float carrier_track_p;
    /*! \brief The integral part of the carrier tracking filter. */
    float carrier_track_i;
    /*! \brief The root raised cosine (RRC) pulse shaping filter buffer. */
    float rrc_filter[V17_RX_FILTER_STEPS];

    /*! \brief A pointer to the current constellation. */
    const complexf_t *constellation;
#endif
    /*! \brief Current offset into the RRC pulse shaping filter buffer. */
    int rrc_filter_step;

    /*! \brief The current state of the differential decoder */
    int diff;
    /*! \brief The register for the data scrambler. */
    uint32_t scramble_reg;
    /*! \brief Scrambler tap */
    //int scrambler_tap;

    /*! \brief TRUE if the short training sequence is to be used. */
    int short_train;
    /*! \brief The section of the training data we are currently in. */
    int training_stage;
    /*! \brief A count of how far through the current training step we are. */
    int training_count;
    /*! \brief The value of the last signal sample, using the a simple HPF for signal power estimation. */
    int16_t last_sample;
    /*! \brief >0 if a signal above the minimum is present. It may or may not be a V.17 signal. */
    int signal_present;
    /*! \brief Whether or not a carrier drop was detected and the signal delivery is pending. */
    int carrier_drop_pending;
    /*! \brief A count of the current consecutive samples below the carrier off threshold. */
    int low_samples;
    /*! \brief A highest magnitude sample seen. */
    int16_t high_sample;

    /*! \brief The current phase of the carrier (i.e. the DDS parameter). */
    uint32_t carrier_phase;
    /*! \brief The update rate for the phase of the carrier (i.e. the DDS increment). */
    int32_t carrier_phase_rate;
    /*! \brief The carrier update rate saved for reuse when using short training. */
    int32_t carrier_phase_rate_save;

    /*! \brief A power meter, to measure the HPF'ed signal power in the channel. */    
    power_meter_t power;
    /*! \brief The power meter level at which carrier on is declared. */
    int32_t carrier_on_power;
    /*! \brief The power meter level at which carrier off is declared. */
    int32_t carrier_off_power;

    /*! \brief Current read offset into the equalizer buffer. */
    int eq_step;
    /*! \brief Current write offset into the equalizer buffer. */
    int eq_put_step;
    /*! \brief Symbol count to the next equalizer update. */
    int eq_skip;

    /*! \brief The current half of the baud. */
    int baud_half;

    /*! \brief The total symbol timing correction since the carrier came up.
               This is only for performance analysis purposes. */
    int total_baud_timing_correction;

    /*! \brief Starting phase angles for the coarse carrier aquisition step. */
    int32_t start_angles[2];
    /*! \brief History list of phase angles for the coarse carrier aquisition step. */
    int32_t angles[16];
    /*! \brief A pointer to the current space map. There is a space map for
               each trellis state. */
    int space_map;
    /*! \brief The number of bits in each symbol at the current bit rate. */
    int bits_per_symbol;

    /*! \brief Current pointer to the trellis buffers */
    int trellis_ptr;
    /*! \brief The trellis. */
    int full_path_to_past_state_locations[V17_TRELLIS_STORAGE_DEPTH][8];
    /*! \brief The trellis. */
    int past_state_locations[V17_TRELLIS_STORAGE_DEPTH][8];
#if defined(SPANDSP_USE_FIXED_POINTx)
    /*! \brief Euclidean distances (actually the squares of the distances)
               from the last states of the trellis. */
    uint32_t distances[8];
#else
    /*! \brief Euclidean distances (actually the squares of the distances)
               from the last states of the trellis. */
    float distances[8];
#endif
    /*! \brief Error and flow logging control */
    logging_state_t logging;
};

#endif
/*- End of file ------------------------------------------------------------*/