/** 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; }