dvb: Remove the idlescan feature
This commit is contained in:
parent
44dd4042a9
commit
607010c3df
8 changed files with 55 additions and 101 deletions
|
@ -177,23 +177,17 @@ typedef struct dvb_table_feed {
|
||||||
*/
|
*/
|
||||||
#define TDA_MUX_HASH_WIDTH 101
|
#define TDA_MUX_HASH_WIDTH 101
|
||||||
|
|
||||||
#define TDA_SCANQ_BAD 0 ///< Bad muxes (monitor quality)
|
|
||||||
#define TDA_SCANQ_OK 1 ///< OK muxes
|
|
||||||
#define TDA_SCANQ_NUM 2
|
|
||||||
|
|
||||||
typedef struct th_dvb_adapter {
|
typedef struct th_dvb_adapter {
|
||||||
|
|
||||||
TAILQ_ENTRY(th_dvb_adapter) tda_global_link;
|
TAILQ_ENTRY(th_dvb_adapter) tda_global_link;
|
||||||
|
|
||||||
struct th_dvb_mux_instance_list tda_muxes;
|
struct th_dvb_mux_instance_list tda_muxes;
|
||||||
|
|
||||||
struct th_dvb_mux_instance_queue tda_scan_queues[TDA_SCANQ_NUM];
|
|
||||||
int tda_scan_selector;
|
|
||||||
|
|
||||||
struct th_dvb_mux_instance_queue tda_initial_scan_queue;
|
struct th_dvb_mux_instance_queue tda_initial_scan_queue;
|
||||||
int tda_initial_num_mux;
|
int tda_initial_num_mux;
|
||||||
|
|
||||||
th_dvb_mux_instance_t *tda_mux_current;
|
th_dvb_mux_instance_t *tda_mux_current;
|
||||||
|
char *tda_tune_reason; // Reason for last tune
|
||||||
|
|
||||||
th_dvb_mux_instance_t *tda_mux_epg;
|
th_dvb_mux_instance_t *tda_mux_epg;
|
||||||
|
|
||||||
|
@ -202,7 +196,6 @@ typedef struct th_dvb_adapter {
|
||||||
const char *tda_rootpath;
|
const char *tda_rootpath;
|
||||||
char *tda_identifier;
|
char *tda_identifier;
|
||||||
uint32_t tda_autodiscovery;
|
uint32_t tda_autodiscovery;
|
||||||
uint32_t tda_idlescan;
|
|
||||||
uint32_t tda_idleclose;
|
uint32_t tda_idleclose;
|
||||||
uint32_t tda_skip_initialscan;
|
uint32_t tda_skip_initialscan;
|
||||||
uint32_t tda_skip_checksubscr;
|
uint32_t tda_skip_checksubscr;
|
||||||
|
@ -344,8 +337,6 @@ void dvb_adapter_set_auto_discovery(th_dvb_adapter_t *tda, int on);
|
||||||
|
|
||||||
void dvb_adapter_set_skip_initialscan(th_dvb_adapter_t *tda, int on);
|
void dvb_adapter_set_skip_initialscan(th_dvb_adapter_t *tda, int on);
|
||||||
|
|
||||||
void dvb_adapter_set_idlescan(th_dvb_adapter_t *tda, int on);
|
|
||||||
|
|
||||||
void dvb_adapter_set_skip_checksubscr(th_dvb_adapter_t *tda, int on);
|
void dvb_adapter_set_skip_checksubscr(th_dvb_adapter_t *tda, int on);
|
||||||
|
|
||||||
void dvb_adapter_set_qmon(th_dvb_adapter_t *tda, int on);
|
void dvb_adapter_set_qmon(th_dvb_adapter_t *tda, int on);
|
||||||
|
@ -450,8 +441,6 @@ const char *dvb_mux_add_by_params(th_dvb_adapter_t *tda,
|
||||||
int dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src,
|
int dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src,
|
||||||
dvb_satconf_t *satconf);
|
dvb_satconf_t *satconf);
|
||||||
|
|
||||||
void dvb_mux_add_to_scan_queue (th_dvb_mux_instance_t *tdmi);
|
|
||||||
|
|
||||||
th_dvb_mux_instance_t *dvb_mux_find
|
th_dvb_mux_instance_t *dvb_mux_find
|
||||||
(th_dvb_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,
|
(th_dvb_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,
|
||||||
int enabled );
|
int enabled );
|
||||||
|
|
|
@ -56,12 +56,9 @@ static void *dvb_adapter_input_dvr(void *aux);
|
||||||
static th_dvb_adapter_t *
|
static th_dvb_adapter_t *
|
||||||
tda_alloc(void)
|
tda_alloc(void)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
th_dvb_adapter_t *tda = calloc(1, sizeof(th_dvb_adapter_t));
|
th_dvb_adapter_t *tda = calloc(1, sizeof(th_dvb_adapter_t));
|
||||||
pthread_mutex_init(&tda->tda_delivery_mutex, NULL);
|
pthread_mutex_init(&tda->tda_delivery_mutex, NULL);
|
||||||
|
|
||||||
for (i = 0; i < TDA_SCANQ_NUM; i++ )
|
|
||||||
TAILQ_INIT(&tda->tda_scan_queues[i]);
|
|
||||||
TAILQ_INIT(&tda->tda_initial_scan_queue);
|
TAILQ_INIT(&tda->tda_initial_scan_queue);
|
||||||
TAILQ_INIT(&tda->tda_satconfs);
|
TAILQ_INIT(&tda->tda_satconfs);
|
||||||
streaming_pad_init(&tda->tda_streaming_pad);
|
streaming_pad_init(&tda->tda_streaming_pad);
|
||||||
|
@ -82,7 +79,6 @@ tda_save(th_dvb_adapter_t *tda)
|
||||||
htsmsg_add_str(m, "type", dvb_adaptertype_to_str(tda->tda_type));
|
htsmsg_add_str(m, "type", dvb_adaptertype_to_str(tda->tda_type));
|
||||||
htsmsg_add_str(m, "displayname", tda->tda_displayname);
|
htsmsg_add_str(m, "displayname", tda->tda_displayname);
|
||||||
htsmsg_add_u32(m, "autodiscovery", tda->tda_autodiscovery);
|
htsmsg_add_u32(m, "autodiscovery", tda->tda_autodiscovery);
|
||||||
htsmsg_add_u32(m, "idlescan", tda->tda_idlescan);
|
|
||||||
htsmsg_add_u32(m, "idleclose", tda->tda_idleclose);
|
htsmsg_add_u32(m, "idleclose", tda->tda_idleclose);
|
||||||
htsmsg_add_u32(m, "skip_checksubscr", tda->tda_skip_checksubscr);
|
htsmsg_add_u32(m, "skip_checksubscr", tda->tda_skip_checksubscr);
|
||||||
htsmsg_add_u32(m, "sidtochan", tda->tda_sidtochan);
|
htsmsg_add_u32(m, "sidtochan", tda->tda_sidtochan);
|
||||||
|
@ -161,24 +157,6 @@ dvb_adapter_set_skip_initialscan(th_dvb_adapter_t *tda, int on)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
dvb_adapter_set_idlescan(th_dvb_adapter_t *tda, int on)
|
|
||||||
{
|
|
||||||
if(tda->tda_idlescan == on)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lock_assert(&global_lock);
|
|
||||||
|
|
||||||
tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" idle mux scanning set to: %s",
|
|
||||||
tda->tda_displayname, on ? "On" : "Off");
|
|
||||||
|
|
||||||
tda->tda_idlescan = on;
|
|
||||||
tda_save(tda);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -481,7 +459,7 @@ tda_add(int adapter_num)
|
||||||
free(tda);
|
free(tda);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (tda->tda_idlescan || !tda->tda_idleclose)
|
if (!tda->tda_idleclose)
|
||||||
tda->tda_fe_fd = fe;
|
tda->tda_fe_fd = fe;
|
||||||
else
|
else
|
||||||
close(fe);
|
close(fe);
|
||||||
|
@ -499,7 +477,6 @@ tda_add(int adapter_num)
|
||||||
tda->tda_identifier = strdup(buf);
|
tda->tda_identifier = strdup(buf);
|
||||||
|
|
||||||
tda->tda_autodiscovery = tda->tda_type != FE_QPSK;
|
tda->tda_autodiscovery = tda->tda_type != FE_QPSK;
|
||||||
tda->tda_idlescan = 1;
|
|
||||||
|
|
||||||
tda->tda_sat = tda->tda_type == FE_QPSK;
|
tda->tda_sat = tda->tda_type == FE_QPSK;
|
||||||
|
|
||||||
|
@ -549,7 +526,6 @@ tda_add_from_file(const char *filename)
|
||||||
tda->tda_identifier = strdup(buf);
|
tda->tda_identifier = strdup(buf);
|
||||||
|
|
||||||
tda->tda_autodiscovery = 0;
|
tda->tda_autodiscovery = 0;
|
||||||
tda->tda_idlescan = 0;
|
|
||||||
|
|
||||||
tda->tda_sat = 0;
|
tda->tda_sat = 0;
|
||||||
|
|
||||||
|
@ -608,11 +584,12 @@ dvb_adapter_start ( th_dvb_adapter_t *tda )
|
||||||
void
|
void
|
||||||
dvb_adapter_stop ( th_dvb_adapter_t *tda )
|
dvb_adapter_stop ( th_dvb_adapter_t *tda )
|
||||||
{
|
{
|
||||||
|
assert(tda->tda_mux_current == NULL);
|
||||||
|
|
||||||
/* Poweroff */
|
/* Poweroff */
|
||||||
dvb_adapter_poweroff(tda);
|
dvb_adapter_poweroff(tda);
|
||||||
|
|
||||||
/* Don't stop/close */
|
if(tda->tda_idleclose) {
|
||||||
if (!tda->tda_idleclose) return;
|
|
||||||
|
|
||||||
/* Close front end */
|
/* Close front end */
|
||||||
if (tda->tda_fe_fd != -1) {
|
if (tda->tda_fe_fd != -1) {
|
||||||
|
@ -633,6 +610,8 @@ dvb_adapter_stop ( th_dvb_adapter_t *tda )
|
||||||
tvhlog(LOG_DEBUG, "dvb", "%s stopped thread", tda->tda_rootpath);
|
tvhlog(LOG_DEBUG, "dvb", "%s stopped thread", tda->tda_rootpath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dvb_adapter_notify(tda);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -686,7 +665,6 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
|
||||||
tda->tda_displayname = strdup(name);
|
tda->tda_displayname = strdup(name);
|
||||||
|
|
||||||
htsmsg_get_u32(c, "autodiscovery", &tda->tda_autodiscovery);
|
htsmsg_get_u32(c, "autodiscovery", &tda->tda_autodiscovery);
|
||||||
htsmsg_get_u32(c, "idlescan", &tda->tda_idlescan);
|
|
||||||
htsmsg_get_u32(c, "idleclose", &tda->tda_idleclose);
|
htsmsg_get_u32(c, "idleclose", &tda->tda_idleclose);
|
||||||
htsmsg_get_u32(c, "skip_checksubscr", &tda->tda_skip_checksubscr);
|
htsmsg_get_u32(c, "skip_checksubscr", &tda->tda_skip_checksubscr);
|
||||||
htsmsg_get_u32(c, "sidtochan", &tda->tda_sidtochan);
|
htsmsg_get_u32(c, "sidtochan", &tda->tda_sidtochan);
|
||||||
|
@ -725,7 +703,6 @@ dvb_adapter_mux_scanner(void *aux)
|
||||||
{
|
{
|
||||||
th_dvb_adapter_t *tda = aux;
|
th_dvb_adapter_t *tda = aux;
|
||||||
th_dvb_mux_instance_t *tdmi;
|
th_dvb_mux_instance_t *tdmi;
|
||||||
int i;
|
|
||||||
|
|
||||||
if(tda->tda_rootpath == NULL)
|
if(tda->tda_rootpath == NULL)
|
||||||
return; // No hardware
|
return; // No hardware
|
||||||
|
@ -770,20 +747,6 @@ dvb_adapter_mux_scanner(void *aux)
|
||||||
dvb_fe_tune(tda->tda_mux_epg, "EPG scan");
|
dvb_fe_tune(tda->tda_mux_epg, "EPG scan");
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Normal */
|
|
||||||
} else if (tda->tda_idlescan) {
|
|
||||||
|
|
||||||
/* Alternate queue */
|
|
||||||
for(i = 0; i < TDA_SCANQ_NUM; i++) {
|
|
||||||
tda->tda_scan_selector++;
|
|
||||||
if (tda->tda_scan_selector == TDA_SCANQ_NUM)
|
|
||||||
tda->tda_scan_selector = 0;
|
|
||||||
tdmi = TAILQ_FIRST(&tda->tda_scan_queues[tda->tda_scan_selector]);
|
|
||||||
if (tdmi) {
|
|
||||||
dvb_fe_tune(tdmi, "Autoscan");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure we stop current mux and power off (if required) */
|
/* Ensure we stop current mux and power off (if required) */
|
||||||
|
@ -833,6 +796,7 @@ dvb_adapter_destroy(th_dvb_adapter_t *tda)
|
||||||
|
|
||||||
free(tda->tda_identifier);
|
free(tda->tda_identifier);
|
||||||
free(tda->tda_displayname);
|
free(tda->tda_displayname);
|
||||||
|
free(tda->tda_tune_reason);
|
||||||
|
|
||||||
free(tda);
|
free(tda);
|
||||||
|
|
||||||
|
@ -1052,6 +1016,22 @@ dvb_adapter_build_msg(th_dvb_adapter_t *tda)
|
||||||
htsmsg_add_u32(m, "ber", tdmi->tdmi_ber);
|
htsmsg_add_u32(m, "ber", tdmi->tdmi_ber);
|
||||||
htsmsg_add_u32(m, "unc", tdmi->tdmi_unc);
|
htsmsg_add_u32(m, "unc", tdmi->tdmi_unc);
|
||||||
htsmsg_add_u32(m, "uncavg", tdmi->tdmi_unc_avg);
|
htsmsg_add_u32(m, "uncavg", tdmi->tdmi_unc_avg);
|
||||||
|
|
||||||
|
htsmsg_add_str(m, "reason", tda->tda_tune_reason);
|
||||||
|
} else {
|
||||||
|
htsmsg_add_str(m, "currentMux", "");
|
||||||
|
|
||||||
|
htsmsg_add_u32(m, "signal", 0);
|
||||||
|
htsmsg_add_u32(m, "snr", 0);
|
||||||
|
htsmsg_add_u32(m, "ber", 0);
|
||||||
|
htsmsg_add_u32(m, "unc", 0);
|
||||||
|
htsmsg_add_u32(m, "uncavg", 0);
|
||||||
|
|
||||||
|
if(tda->tda_fe_fd == -1) {
|
||||||
|
htsmsg_add_str(m, "reason", "Closed");
|
||||||
|
} else {
|
||||||
|
htsmsg_add_str(m, "reason", "Idle");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tda->tda_rootpath == NULL)
|
if(tda->tda_rootpath == NULL)
|
||||||
|
|
|
@ -277,10 +277,6 @@ dvb_fe_stop(th_dvb_mux_instance_t *tdmi, int retune)
|
||||||
|
|
||||||
assert(tdmi->tdmi_scan_queue == NULL);
|
assert(tdmi->tdmi_scan_queue == NULL);
|
||||||
|
|
||||||
if(tdmi->tdmi_enabled) {
|
|
||||||
dvb_mux_add_to_scan_queue(tdmi);
|
|
||||||
}
|
|
||||||
|
|
||||||
epggrab_mux_stop(tdmi, 0);
|
epggrab_mux_stop(tdmi, 0);
|
||||||
|
|
||||||
time(&tdmi->tdmi_lost_adapter);
|
time(&tdmi->tdmi_lost_adapter);
|
||||||
|
@ -411,8 +407,13 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
|
||||||
|
|
||||||
lock_assert(&global_lock);
|
lock_assert(&global_lock);
|
||||||
|
|
||||||
if(tda->tda_mux_current == tdmi)
|
free(tda->tda_tune_reason);
|
||||||
|
tda->tda_tune_reason = strdup(reason);
|
||||||
|
|
||||||
|
if(tda->tda_mux_current == tdmi) {
|
||||||
|
dvb_adapter_notify(tda);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if(tdmi->tdmi_scan_queue != NULL) {
|
if(tdmi->tdmi_scan_queue != NULL) {
|
||||||
TAILQ_REMOVE(tdmi->tdmi_scan_queue, tdmi, tdmi_scan_link);
|
TAILQ_REMOVE(tdmi->tdmi_scan_queue, tdmi, tdmi_scan_link);
|
||||||
|
|
|
@ -299,8 +299,6 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
||||||
tda->tda_initial_num_mux++;
|
tda->tda_initial_num_mux++;
|
||||||
tdmi->tdmi_table_initial = 1;
|
tdmi->tdmi_table_initial = 1;
|
||||||
mux_link_initial(tda, tdmi);
|
mux_link_initial(tda, tdmi);
|
||||||
} else {
|
|
||||||
dvb_mux_add_to_scan_queue(tdmi);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1255,16 +1253,6 @@ dvb_mux_copy(th_dvb_adapter_t *dst, th_dvb_mux_instance_t *tdmi_src,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dvb_mux_add_to_scan_queue ( th_dvb_mux_instance_t *tdmi )
|
|
||||||
{
|
|
||||||
int ti;
|
|
||||||
th_dvb_adapter_t *tda = tdmi->tdmi_adapter;
|
|
||||||
ti = tdmi->tdmi_quality == 100 ? TDA_SCANQ_OK
|
|
||||||
: TDA_SCANQ_BAD;
|
|
||||||
tdmi->tdmi_scan_queue = &tda->tda_scan_queues[ti];
|
|
||||||
TAILQ_INSERT_TAIL(tdmi->tdmi_scan_queue, tdmi, tdmi_scan_link);
|
|
||||||
}
|
|
||||||
|
|
||||||
th_dvb_mux_instance_t *dvb_mux_find
|
th_dvb_mux_instance_t *dvb_mux_find
|
||||||
( th_dvb_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,
|
( th_dvb_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,
|
||||||
int enabled )
|
int enabled )
|
||||||
|
|
|
@ -149,7 +149,6 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
|
||||||
htsmsg_add_str(r, "name", tda->tda_displayname);
|
htsmsg_add_str(r, "name", tda->tda_displayname);
|
||||||
htsmsg_add_u32(r, "automux", tda->tda_autodiscovery);
|
htsmsg_add_u32(r, "automux", tda->tda_autodiscovery);
|
||||||
htsmsg_add_u32(r, "skip_initialscan", tda->tda_skip_initialscan);
|
htsmsg_add_u32(r, "skip_initialscan", tda->tda_skip_initialscan);
|
||||||
htsmsg_add_u32(r, "idlescan", tda->tda_idlescan);
|
|
||||||
htsmsg_add_u32(r, "idleclose", tda->tda_idleclose);
|
htsmsg_add_u32(r, "idleclose", tda->tda_idleclose);
|
||||||
htsmsg_add_u32(r, "skip_checksubscr", tda->tda_skip_checksubscr);
|
htsmsg_add_u32(r, "skip_checksubscr", tda->tda_skip_checksubscr);
|
||||||
htsmsg_add_u32(r, "qmon", tda->tda_qmon);
|
htsmsg_add_u32(r, "qmon", tda->tda_qmon);
|
||||||
|
@ -179,9 +178,6 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque)
|
||||||
s = http_arg_get(&hc->hc_req_args, "skip_initialscan");
|
s = http_arg_get(&hc->hc_req_args, "skip_initialscan");
|
||||||
dvb_adapter_set_skip_initialscan(tda, !!s);
|
dvb_adapter_set_skip_initialscan(tda, !!s);
|
||||||
|
|
||||||
s = http_arg_get(&hc->hc_req_args, "idlescan");
|
|
||||||
dvb_adapter_set_idlescan(tda, !!s);
|
|
||||||
|
|
||||||
s = http_arg_get(&hc->hc_req_args, "idleclose");
|
s = http_arg_get(&hc->hc_req_args, "idleclose");
|
||||||
dvb_adapter_set_idleclose(tda, !!s);
|
dvb_adapter_set_idleclose(tda, !!s);
|
||||||
|
|
||||||
|
|
|
@ -1086,7 +1086,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
|
||||||
|
|
||||||
var confreader = new Ext.data.JsonReader({
|
var confreader = new Ext.data.JsonReader({
|
||||||
root : 'dvbadapters'
|
root : 'dvbadapters'
|
||||||
}, [ 'name', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion',
|
}, [ 'name', 'automux', 'skip_initialscan', 'diseqcversion',
|
||||||
'diseqcrepeats', 'qmon', 'skip_checksubscr',
|
'diseqcrepeats', 'qmon', 'skip_checksubscr',
|
||||||
'poweroff', 'sidtochan', 'nitoid', 'extrapriority',
|
'poweroff', 'sidtochan', 'nitoid', 'extrapriority',
|
||||||
,'disable_pmt_monitor', 'full_mux_rx', 'idleclose' ]);
|
,'disable_pmt_monitor', 'full_mux_rx', 'idleclose' ]);
|
||||||
|
@ -1115,10 +1115,6 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
|
||||||
fieldLabel : 'Skip initial scan',
|
fieldLabel : 'Skip initial scan',
|
||||||
name : 'skip_initialscan'
|
name : 'skip_initialscan'
|
||||||
}),
|
}),
|
||||||
new Ext.form.Checkbox({
|
|
||||||
fieldLabel : 'Idle scanning',
|
|
||||||
name : 'idlescan'
|
|
||||||
}),
|
|
||||||
new Ext.form.Checkbox({
|
new Ext.form.Checkbox({
|
||||||
fieldLabel : 'Close device handle when idle',
|
fieldLabel : 'Close device handle when idle',
|
||||||
name : 'idleclose'
|
name : 'idleclose'
|
||||||
|
@ -1235,7 +1231,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
|
||||||
+ '<h3>Symbolrate range:</h3>'
|
+ '<h3>Symbolrate range:</h3>'
|
||||||
+ '{symrateMin} Baud - {symrateMax} Baud</tpl>'
|
+ '{symrateMin} Baud - {symrateMax} Baud</tpl>'
|
||||||
+ '<h2 style="font-size: 150%">Status</h2>'
|
+ '<h2 style="font-size: 150%">Status</h2>'
|
||||||
+ '<h3>Currently tuned to:</h3>{currentMux} '
|
+ '<h3>Currently tuned to:</h3>{currentMux} ({reason})'
|
||||||
+ '<h3>Services:</h3>{services}' + '<h3>Muxes:</h3>{muxes}'
|
+ '<h3>Services:</h3>{services}' + '<h3>Muxes:</h3>{muxes}'
|
||||||
+ '<h3>Muxes awaiting initial scan:</h3>{initialMuxes}'
|
+ '<h3>Muxes awaiting initial scan:</h3>{initialMuxes}'
|
||||||
+ '<h3>Signal Strength:</h3>{signal}%'
|
+ '<h3>Signal Strength:</h3>{signal}%'
|
||||||
|
|
|
@ -160,6 +160,10 @@ tvheadend.status_adapters = function() {
|
||||||
width : 100,
|
width : 100,
|
||||||
header : "Currently tuned to",
|
header : "Currently tuned to",
|
||||||
dataIndex : 'currentMux'
|
dataIndex : 'currentMux'
|
||||||
|
},{
|
||||||
|
width : 50,
|
||||||
|
header : "Used for",
|
||||||
|
dataIndex : 'reason'
|
||||||
},{
|
},{
|
||||||
width : 50,
|
width : 50,
|
||||||
header : "Bit error rate",
|
header : "Bit error rate",
|
||||||
|
|
|
@ -7,7 +7,7 @@ tvheadend.tvAdapterStore = new Ext.data.JsonStore({
|
||||||
fields : [ 'identifier', 'type', 'name', 'path', 'devicename',
|
fields : [ 'identifier', 'type', 'name', 'path', 'devicename',
|
||||||
'hostconnection', 'currentMux', 'services', 'muxes', 'initialMuxes',
|
'hostconnection', 'currentMux', 'services', 'muxes', 'initialMuxes',
|
||||||
'satConf', 'deliverySystem', 'freqMin', 'freqMax', 'freqStep',
|
'satConf', 'deliverySystem', 'freqMin', 'freqMax', 'freqStep',
|
||||||
'symrateMin', 'symrateMax', 'signal', 'snr', 'ber', 'unc', 'uncavg'],
|
'symrateMin', 'symrateMax', 'signal', 'snr', 'ber', 'unc', 'uncavg', 'reason'],
|
||||||
autoLoad : true,
|
autoLoad : true,
|
||||||
url : 'tv/adapter'
|
url : 'tv/adapter'
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue