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_SCANQ_BAD 0 ///< Bad muxes (monitor quality)
|
||||
#define TDA_SCANQ_OK 1 ///< OK muxes
|
||||
#define TDA_SCANQ_NUM 2
|
||||
|
||||
typedef struct th_dvb_adapter {
|
||||
|
||||
TAILQ_ENTRY(th_dvb_adapter) tda_global_link;
|
||||
|
||||
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;
|
||||
int tda_initial_num_mux;
|
||||
|
||||
th_dvb_mux_instance_t *tda_mux_current;
|
||||
char *tda_tune_reason; // Reason for last tune
|
||||
|
||||
th_dvb_mux_instance_t *tda_mux_epg;
|
||||
|
||||
|
@ -202,7 +196,6 @@ typedef struct th_dvb_adapter {
|
|||
const char *tda_rootpath;
|
||||
char *tda_identifier;
|
||||
uint32_t tda_autodiscovery;
|
||||
uint32_t tda_idlescan;
|
||||
uint32_t tda_idleclose;
|
||||
uint32_t tda_skip_initialscan;
|
||||
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_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_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,
|
||||
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_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,
|
||||
int enabled );
|
||||
|
|
|
@ -56,12 +56,9 @@ static void *dvb_adapter_input_dvr(void *aux);
|
|||
static th_dvb_adapter_t *
|
||||
tda_alloc(void)
|
||||
{
|
||||
int i;
|
||||
th_dvb_adapter_t *tda = calloc(1, sizeof(th_dvb_adapter_t));
|
||||
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_satconfs);
|
||||
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, "displayname", tda->tda_displayname);
|
||||
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, "skip_checksubscr", tda->tda_skip_checksubscr);
|
||||
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);
|
||||
return;
|
||||
}
|
||||
if (tda->tda_idlescan || !tda->tda_idleclose)
|
||||
if (!tda->tda_idleclose)
|
||||
tda->tda_fe_fd = fe;
|
||||
else
|
||||
close(fe);
|
||||
|
@ -499,7 +477,6 @@ tda_add(int adapter_num)
|
|||
tda->tda_identifier = strdup(buf);
|
||||
|
||||
tda->tda_autodiscovery = tda->tda_type != FE_QPSK;
|
||||
tda->tda_idlescan = 1;
|
||||
|
||||
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_autodiscovery = 0;
|
||||
tda->tda_idlescan = 0;
|
||||
|
||||
tda->tda_sat = 0;
|
||||
|
||||
|
@ -608,30 +584,33 @@ dvb_adapter_start ( th_dvb_adapter_t *tda )
|
|||
void
|
||||
dvb_adapter_stop ( th_dvb_adapter_t *tda )
|
||||
{
|
||||
assert(tda->tda_mux_current == NULL);
|
||||
|
||||
/* Poweroff */
|
||||
dvb_adapter_poweroff(tda);
|
||||
|
||||
/* Don't stop/close */
|
||||
if (!tda->tda_idleclose) return;
|
||||
if(tda->tda_idleclose) {
|
||||
|
||||
/* Close front end */
|
||||
if (tda->tda_fe_fd != -1) {
|
||||
tvhlog(LOG_DEBUG, "dvb", "%s closing frontend", tda->tda_rootpath);
|
||||
close(tda->tda_fe_fd);
|
||||
tda->tda_fe_fd = -1;
|
||||
}
|
||||
/* Close front end */
|
||||
if (tda->tda_fe_fd != -1) {
|
||||
tvhlog(LOG_DEBUG, "dvb", "%s closing frontend", tda->tda_rootpath);
|
||||
close(tda->tda_fe_fd);
|
||||
tda->tda_fe_fd = -1;
|
||||
}
|
||||
|
||||
/* Stop DVR thread */
|
||||
if (tda->tda_dvr_pipe[0] != -1) {
|
||||
tvhlog(LOG_DEBUG, "dvb", "%s stopping thread", tda->tda_rootpath);
|
||||
int err = write(tda->tda_dvr_pipe[1], "", 1);
|
||||
assert(err != -1);
|
||||
pthread_join(tda->tda_dvr_thread, NULL);
|
||||
close(tda->tda_dvr_pipe[0]);
|
||||
close(tda->tda_dvr_pipe[1]);
|
||||
tda->tda_dvr_pipe[0] = -1;
|
||||
tvhlog(LOG_DEBUG, "dvb", "%s stopped thread", tda->tda_rootpath);
|
||||
/* Stop DVR thread */
|
||||
if (tda->tda_dvr_pipe[0] != -1) {
|
||||
tvhlog(LOG_DEBUG, "dvb", "%s stopping thread", tda->tda_rootpath);
|
||||
int err = write(tda->tda_dvr_pipe[1], "", 1);
|
||||
assert(err != -1);
|
||||
pthread_join(tda->tda_dvr_thread, NULL);
|
||||
close(tda->tda_dvr_pipe[0]);
|
||||
close(tda->tda_dvr_pipe[1]);
|
||||
tda->tda_dvr_pipe[0] = -1;
|
||||
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);
|
||||
|
||||
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, "skip_checksubscr", &tda->tda_skip_checksubscr);
|
||||
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_mux_instance_t *tdmi;
|
||||
int i;
|
||||
|
||||
if(tda->tda_rootpath == NULL)
|
||||
return; // No hardware
|
||||
|
@ -770,20 +747,6 @@ dvb_adapter_mux_scanner(void *aux)
|
|||
dvb_fe_tune(tda->tda_mux_epg, "EPG scan");
|
||||
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) */
|
||||
|
@ -833,6 +796,7 @@ dvb_adapter_destroy(th_dvb_adapter_t *tda)
|
|||
|
||||
free(tda->tda_identifier);
|
||||
free(tda->tda_displayname);
|
||||
free(tda->tda_tune_reason);
|
||||
|
||||
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, "unc", tdmi->tdmi_unc);
|
||||
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)
|
||||
|
|
|
@ -277,12 +277,8 @@ dvb_fe_stop(th_dvb_mux_instance_t *tdmi, int retune)
|
|||
|
||||
assert(tdmi->tdmi_scan_queue == NULL);
|
||||
|
||||
if(tdmi->tdmi_enabled) {
|
||||
dvb_mux_add_to_scan_queue(tdmi);
|
||||
}
|
||||
|
||||
epggrab_mux_stop(tdmi, 0);
|
||||
|
||||
|
||||
time(&tdmi->tdmi_lost_adapter);
|
||||
|
||||
if (!retune) {
|
||||
|
@ -411,9 +407,14 @@ dvb_fe_tune(th_dvb_mux_instance_t *tdmi, const char *reason)
|
|||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
if(tdmi->tdmi_scan_queue != NULL) {
|
||||
TAILQ_REMOVE(tdmi->tdmi_scan_queue, tdmi, tdmi_scan_link);
|
||||
tdmi->tdmi_scan_queue = NULL;
|
||||
|
|
|
@ -299,8 +299,6 @@ dvb_mux_create(th_dvb_adapter_t *tda, const struct dvb_mux_conf *dmc,
|
|||
tda->tda_initial_num_mux++;
|
||||
tdmi->tdmi_table_initial = 1;
|
||||
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;
|
||||
}
|
||||
|
||||
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_adapter_t *tda, const char *netname, uint16_t onid, uint16_t tsid,
|
||||
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_u32(r, "automux", tda->tda_autodiscovery);
|
||||
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, "skip_checksubscr", tda->tda_skip_checksubscr);
|
||||
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");
|
||||
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");
|
||||
dvb_adapter_set_idleclose(tda, !!s);
|
||||
|
||||
|
|
|
@ -1086,7 +1086,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
|
|||
|
||||
var confreader = new Ext.data.JsonReader({
|
||||
root : 'dvbadapters'
|
||||
}, [ 'name', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion',
|
||||
}, [ 'name', 'automux', 'skip_initialscan', 'diseqcversion',
|
||||
'diseqcrepeats', 'qmon', 'skip_checksubscr',
|
||||
'poweroff', 'sidtochan', 'nitoid', 'extrapriority',
|
||||
,'disable_pmt_monitor', 'full_mux_rx', 'idleclose' ]);
|
||||
|
@ -1115,10 +1115,6 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
|
|||
fieldLabel : 'Skip initial scan',
|
||||
name : 'skip_initialscan'
|
||||
}),
|
||||
new Ext.form.Checkbox({
|
||||
fieldLabel : 'Idle scanning',
|
||||
name : 'idlescan'
|
||||
}),
|
||||
new Ext.form.Checkbox({
|
||||
fieldLabel : 'Close device handle when idle',
|
||||
name : 'idleclose'
|
||||
|
@ -1235,7 +1231,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) {
|
|||
+ '<h3>Symbolrate range:</h3>'
|
||||
+ '{symrateMin} Baud - {symrateMax} Baud</tpl>'
|
||||
+ '<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>Muxes awaiting initial scan:</h3>{initialMuxes}'
|
||||
+ '<h3>Signal Strength:</h3>{signal}%'
|
||||
|
|
|
@ -160,6 +160,10 @@ tvheadend.status_adapters = function() {
|
|||
width : 100,
|
||||
header : "Currently tuned to",
|
||||
dataIndex : 'currentMux'
|
||||
},{
|
||||
width : 50,
|
||||
header : "Used for",
|
||||
dataIndex : 'reason'
|
||||
},{
|
||||
width : 50,
|
||||
header : "Bit error rate",
|
||||
|
|
|
@ -7,7 +7,7 @@ tvheadend.tvAdapterStore = new Ext.data.JsonStore({
|
|||
fields : [ 'identifier', 'type', 'name', 'path', 'devicename',
|
||||
'hostconnection', 'currentMux', 'services', 'muxes', 'initialMuxes',
|
||||
'satConf', 'deliverySystem', 'freqMin', 'freqMax', 'freqStep',
|
||||
'symrateMin', 'symrateMax', 'signal', 'snr', 'ber', 'unc', 'uncavg'],
|
||||
'symrateMin', 'symrateMax', 'signal', 'snr', 'ber', 'unc', 'uncavg', 'reason'],
|
||||
autoLoad : true,
|
||||
url : 'tv/adapter'
|
||||
});
|
||||
|
|
Loading…
Add table
Reference in a new issue