/** Returns the current simulated tracking loops state simulated. * This contains only noise, no interesting simulation information. * * \param channel The simulated tracking channel. */ tracking_state_msg_t simulation_current_tracking_state(u8 channel) { if (channel >= simulation_current_num_sats()) { channel = simulation_current_num_sats() - 1; } return sim_state.tracking_channel[channel]; }
/** Send tracking state SBP message. * Send information on each tracking channel to host. */ void tracking_send_state() { tracking_channel_state_t states[nap_track_n_channels]; if (simulation_enabled_for(SIMULATION_MODE_TRACKING)) { u8 num_sats = simulation_current_num_sats(); for (u8 i=0; i < num_sats; i++) { states[i] = simulation_current_tracking_state(i); } if (num_sats < nap_track_n_channels) { for (u8 i = num_sats; i < nap_track_n_channels; i++) { states[i].state = 0; states[i].sid.code = 0; states[i].sid.sat = 0; states[i].cn0 = -1; } } } else { for (u8 i=0; i<nap_track_n_channels; i++) { tracker_channel_t *tracker_channel = tracker_channel_get(i); const tracker_common_data_t *common_data = &tracker_channel->common_data; bool running; gnss_signal_t sid; float cn0; tracker_channel_lock(tracker_channel); { running = (tracker_channel_state_get(tracker_channel) == STATE_ENABLED); sid = tracker_channel->info.sid; cn0 = common_data->cn0; } tracker_channel_unlock(tracker_channel); if (!running) { states[i].state = 0; states[i].sid.code = 0; states[i].sid.sat = 0; states[i].cn0 = -1; } else { states[i].state = 1; states[i].sid = sid_to_sbp(sid); states[i].cn0 = cn0; } } } sbp_send_msg(SBP_MSG_TRACKING_STATE, sizeof(states), (u8*)states); }