]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Add new tda_enabled flag and close frontend after getting information so other fronte...
authorBtbN <btbn@btbn.de>
Sun, 6 Jan 2013 21:28:00 +0000 (22:28 +0100)
committerBtbN <btbn@btbn.de>
Sun, 6 Jan 2013 22:38:56 +0000 (23:38 +0100)
src/dvb/dvb.h
src/dvb/dvb_adapter.c

index 80d8c6663a79106d160f3b52dca02986eedc885e..5f6cfbb70d65cc11efc88c96e1478d8abac863c3 100644 (file)
@@ -200,6 +200,8 @@ typedef struct th_dvb_adapter {
 
   int tda_table_epollfd;
 
+  uint32_t tda_enabled;
+
   const char *tda_rootpath;
   char *tda_identifier;
   uint32_t tda_autodiscovery;
@@ -342,6 +344,8 @@ void dvb_adapter_stop (th_dvb_adapter_t *tda);
 
 void dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s);
 
+void dvb_adapter_set_enabled(th_dvb_adapter_t *tda, uint32_t enabled);
+
 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);
index 7e85382a4935af2cc5e141484a729e988bef4534..3d727f124f5443c92b3aa95c000a22a8a2cda5d6 100644 (file)
@@ -80,6 +80,7 @@ tda_save(th_dvb_adapter_t *tda)
 
   lock_assert(&global_lock);
 
+  htsmsg_add_u32(m, "enabled", tda->tda_enabled);
   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);
@@ -124,6 +125,25 @@ dvb_adapter_set_displayname(th_dvb_adapter_t *tda, const char *s)
 }
 
 
+/**
+ *
+ */
+void
+dvb_adapter_set_enabled(th_dvb_adapter_t *tda, uint32_t enabled)
+{
+  if(tda->tda_enabled == enabled)
+    return;
+
+  lock_assert(&global_lock);
+
+  tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" enabled set to \"%s\"",
+         tda->tda_displayname, enabled ? "Enabled" : "Disabled");
+
+  tda->tda_enabled = enabled;
+  tda_save(tda);
+}
+
+
 /**
  *
  */
@@ -473,6 +493,7 @@ tda_add(int adapter_num, int frontend_num, int demux_num)
   tda->tda_fe_fd       = -1;
   tda->tda_dvr_pipe.rd = -1;
   tda->tda_full_mux_rx = -1;
+  tda->tda_enabled     =  0;
 
   tda->tda_fe_info = malloc(sizeof(struct dvb_frontend_info));
 
@@ -482,7 +503,9 @@ tda_add(int adapter_num, int frontend_num, int demux_num)
     free(tda);
     return;
   }
-  tda->tda_fe_fd = fe;
+
+  close(fe);
+  fe = -1;
 
   tda->tda_type = tda->tda_fe_info->type;
 
@@ -540,6 +563,8 @@ tda_add_from_file(const char *filename)
   tda->tda_fe_fd       = -1;
   tda->tda_dvr_pipe.rd = -1;
 
+  tda->tda_enabled = 1;
+
   tda->tda_type = -1;
 
   snprintf(buf, sizeof(buf), "%s", filename);
@@ -588,6 +613,11 @@ static void tda_init_input (th_dvb_adapter_t *tda)
 void
 dvb_adapter_start ( th_dvb_adapter_t *tda )
 {
+  if(tda->tda_enabled == 0) {
+    tvhlog(LOG_INFO, "dvb", "Adapter \"%s\" cannot be started - it's disabled", tda->tda_displayname);
+    return;
+  }
+
   /* Open front end */
   if (tda->tda_fe_fd == -1) {
     tda->tda_fe_fd = tvh_open(tda->tda_fe_path, O_RDWR | O_NONBLOCK, 0);
@@ -642,7 +672,7 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
   htsmsg_t *l, *c;
   htsmsg_field_t *f;
   const char *name, *s;
-  int i, type;
+  int i, j, type;
   uint32_t u32;
   th_dvb_adapter_t *tda;
 
@@ -651,7 +681,8 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
   /* Initialise hardware */
   for(i = 0; i < 32; i++) 
     if ((1 << i) & adapter_mask) 
-      tda_add(i, 0, 0);
+      for(j = 0; j < 32; j++)
+        tda_add(i, j, 0);
 
   /* Initialise rawts test file */
   if(rawfile)
@@ -675,6 +706,7 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
         tda = tda_alloc();
         tda->tda_identifier = strdup(f->hmf_name);
         tda->tda_type = type;
+        tda->tda_enabled = 0;
         TAILQ_INSERT_TAIL(&dvb_adapters, tda, tda_global_link);
       } else {
         if(type != tda->tda_type)
@@ -684,6 +716,7 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile)
       free(tda->tda_displayname);
       tda->tda_displayname = strdup(name);
 
+      htsmsg_get_u32(c, "enabled", &tda->tda_enabled);
       htsmsg_get_u32(c, "autodiscovery", &tda->tda_autodiscovery);
       htsmsg_get_u32(c, "idlescan", &tda->tda_idlescan);
       htsmsg_get_u32(c, "idleclose", &tda->tda_idleclose);