static void mask_sat_callback(u16 sender_id, u8 len, u8 msg[], void* context) { (void)sender_id; (void)len; (void) context; enum { MASK_ACQUISITION = 1, MASK_TRACKING = 2, }; msg_mask_satellite_t *m = (msg_mask_satellite_t *)msg; gnss_signal_t sid = sid_from_sbp(m->sid); if (sid_supported(sid)) { u16 global_index = sid_to_global_index(sid); acq_status_t *acq = &acq_status[global_index]; acq->masked = (m->mask & MASK_ACQUISITION) ? true : false; track_mask[global_index] = (m->mask & MASK_TRACKING) ? true : false; log_info_sid(sid, "Mask = 0x%02x", m->mask); } else { log_warn("Mask not set for invalid SID"); } }
static void decoder_gps_l1ca_process(const decoder_channel_info_t *channel_info, decoder_data_t *decoder_data) { gps_l1ca_decoder_data_t *data = decoder_data; /* Process incoming nav bits */ s8 soft_bit; while (tracking_channel_nav_bit_get(channel_info->tracking_channel, &soft_bit)) { /* Update TOW */ bool bit_val = soft_bit >= 0; s32 TOW_ms = nav_msg_update(&data->nav_msg, bit_val); s8 bit_polarity = data->nav_msg.bit_polarity; if ((TOW_ms >= 0) && (bit_polarity != BIT_POLARITY_UNKNOWN)) { if (!tracking_channel_time_sync(channel_info->tracking_channel, TOW_ms, bit_polarity)) { log_warn_sid(channel_info->sid, "TOW set failed"); } } } /* Check if there is a new nav msg subframe to process. */ if (!subframe_ready(&data->nav_msg)) return; /* Decode ephemeris to temporary struct */ ephemeris_t e = {.sid = channel_info->sid}; s8 ret = process_subframe(&data->nav_msg, &e);; if (ret <= 0) return; /* Decoded a new ephemeris. */ ephemeris_new(&e); ephemeris_t *eph = ephemeris_get(channel_info->sid); if (!eph->valid) { log_info_sid(channel_info->sid, "ephemeris is invalid"); } }