#include "diseqc.h"
#include "notify.h"
#include "dvr/dvr.h"
+#include "service.h"
+#include "streaming.h"
#include "epggrab.h"
int status, v, update = 0, vv, i, fec, q;
th_dvb_mux_instance_t *tdmi = tda->tda_mux_current;
char buf[50];
+ signal_status_t sigstat;
+ streaming_message_t sm;
+ struct service *t;
gtimer_arm(&tda->tda_fe_monitor_timer, dvb_fe_monitor, tda, 1);
dvb_mux_save(tdmi);
}
+
+ /* Streaming message */
+ sigstat.status_text = dvb_mux_status(tdmi);
+ sigstat.snr = tdmi->tdmi_snr;
+ sigstat.signal = tdmi->tdmi_signal;
+ sigstat.ber = tdmi->tdmi_ber;
+ sigstat.unc = tdmi->tdmi_uncorrected_blocks;
+ sm.sm_type = SMT_SIGNAL_STATUS;
+ sm.sm_data = &sigstat;
+ LIST_FOREACH(t, &tda->tda_transports, s_active_link)
+ if(t->s_dvb_mux_instance == tda->tda_mux_current && t->s_status == SERVICE_RUNNING ) {
+ pthread_mutex_lock(&t->s_stream_mutex);
+ streaming_pad_deliver(&t->s_streaming_pad, &sm);
+ pthread_mutex_unlock(&t->s_stream_mutex);
+ }
+
}
}
break;
+ case SMT_SIGNAL_STATUS:
+ break;
+
case SMT_EXIT:
run = 0;
break;
}
}
+/**
+ *
+ */
+static void
+htsp_subscription_signal_status(htsp_subscription_t *hs, signal_status_t *sig)
+{
+ htsmsg_t *m = htsmsg_create_map();
+ htsmsg_add_str(m, "method", "signalStatus");
+ htsmsg_add_u32(m, "subscriptionId", hs->hs_sid);
+ htsmsg_add_str(m, "feStatus", sig->status_text);
+ if(sig->snr != -2)
+ htsmsg_add_u32(m, "feSNR", sig->snr);
+ if(sig->signal != -2)
+ htsmsg_add_u32(m, "feSignal", sig->signal);
+ if(sig->ber != -2)
+ htsmsg_add_u32(m, "feBER", sig->ber);
+ if(sig->unc != -2)
+ htsmsg_add_u32(m, "feUNC", sig->unc);
+ htsp_send_message(hs->hs_htsp, m, &hs->hs_htsp->htsp_hmq_qstatus);
+}
+
/**
*
*/
htsp_subscription_service_status(hs, sm->sm_code);
break;
+ case SMT_SIGNAL_STATUS:
+ htsp_subscription_signal_status(hs, sm->sm_data);
+ break;
+
case SMT_NOSTART:
htsp_subscription_status(hs, streaming_code2txt(sm->sm_code));
break;
case SMT_EXIT:
case SMT_SERVICE_STATUS:
+ case SMT_SIGNAL_STATUS:
case SMT_NOSTART:
case SMT_MPEGTS:
streaming_target_deliver2(gh->gh_output, sm);
// FALLTHRU
case SMT_EXIT:
case SMT_SERVICE_STATUS:
+ case SMT_SIGNAL_STATUS:
case SMT_NOSTART:
case SMT_MPEGTS:
streaming_target_deliver2(gh->gh_output, sm);
case SMT_EXIT:
case SMT_SERVICE_STATUS:
+ case SMT_SIGNAL_STATUS:
case SMT_NOSTART:
case SMT_MPEGTS:
break;
atomic_add(&ss->ss_refcount, 1);
break;
+ case SMT_SIGNAL_STATUS:
+ dst->sm_data = malloc(sizeof(signal_status_t));
+ memcpy(dst->sm_data, src->sm_data, sizeof(signal_status_t));
+ break;
+
case SMT_STOP:
case SMT_SERVICE_STATUS:
case SMT_NOSTART:
case SMT_NOSTART:
break;
+ case SMT_SIGNAL_STATUS:
case SMT_MPEGTS:
free(sm->sm_data);
break;
*/
SMT_SERVICE_STATUS,
+ /**
+ * Signal status
+ *
+ * Notification about frontend signal status
+ */
+ SMT_SIGNAL_STATUS,
+
/**
* Streaming stop.
*
}
break;
+ case SMT_SIGNAL_STATUS:
+ break;
+
case SMT_NOSTART:
tvhlog(LOG_DEBUG, "webui", "Couldn't start stream for %s", hc->hc_url_orig);
run = 0;