Exemple #1
0
/** Get correlations from a NAP tracking channel and store them in the
 * tracking channel state struct.
 * \param channel Tracking channel to read correlations for.
 */
void tracking_channel_get_corrs(u8 channel)
{
  tracking_channel_t* chan = &tracking_channel[channel];

  switch(chan->state)
  {
    case TRACKING_RUNNING:
      /* Read early ([0]), prompt ([1]) and late ([2]) correlations. */
      nap_track_corr_rd_blocking(channel, &chan->corr_sample_count, chan->cs);
      break;

    case TRACKING_DISABLED:
    default:
      /* TODO: WTF? */
      break;
  }
}
/** Read data from a NAP track channel's CORR register.
 *
 * \param channel      NAP track channel whose CORR register to read.
 * \param sample_count Number of sample clock cycles in correlation period.
 * \param corrs        Array of E,P,L correlations from correlation period.
 */
void nap_track_read_results(u8 channel,
                            u32* count_snapshot, corr_t corrs[],
                            double *code_phase_early,
                            double *carrier_phase)
{
  struct nap_ch_state *s = &nap_ch_state[channel];
  u32 sample_count;

  nap_track_corr_rd_blocking(channel, &sample_count, corrs);
  
  s->count_snapshot += sample_count;
  s->code_phase += (u64)sample_count * s->code_pinc_prev;
  s->carrier_phase += (s64)sample_count * s->carr_pinc_prev;
  s->carr_pinc_prev = s->carr_pinc;

  *count_snapshot = s->count_snapshot;
  *code_phase_early = (double)s->code_phase /
                          NAP_TRACK_CODE_PHASE_UNITS_PER_CHIP;
  *carrier_phase = (double)s->carrier_phase /
                       NAP_TRACK_CARRIER_PHASE_UNITS_PER_CYCLE;
}