dvb_util: add dvb_enable_ciplus [1/1]
PD#SWPL-65755
Problem:
set demux source error when enable CI+
Solution:
add dvb_enable_ciplus
Verify:
T5D
Signed-off-by: Gong Ke <ke.gong@amlogic.com>
Change-Id: I734d603cd613f12c33f207af43922a56e78834d3
diff --git a/src/dvb_utils.c b/src/dvb_utils.c
index acc524c..9dbe99b 100644
--- a/src/dvb_utils.c
+++ b/src/dvb_utils.c
@@ -14,6 +14,50 @@
#include <dmx.h>
+static int ciplus_enable = 0;
+
+/**
+ * Enable/disable CIplus mode.
+ * \param enable Enable/disable.
+ * \retval 0 On success.
+ * \retval -1 On error.
+ */
+int dvb_enable_ciplus(int enable)
+{
+ int out;
+ char buf[32];
+
+ ciplus_enable = enable;
+
+ if (dvr_check_dmx_isNew())
+ return 0;
+
+ if (enable)
+ {
+ int i;
+
+ out = 0;
+
+ for (i = 0; i < 3; i ++)
+ {
+ DVB_DemuxSource_t src;
+
+ dvb_get_demux_source(i, &src);
+ if (src != DVB_DEMUX_SOURCE_DMA0)
+ out |= 1 << i;
+ }
+ }
+ else
+ {
+ out = 8;
+ }
+
+ snprintf(buf, sizeof(buf), "%d", out);
+ dvr_file_echo("/sys/class/dmx/ciplus_output_ctrl", buf);
+
+ return 0;
+}
+
/**
* Set the demux's input source.
* \param dmx_idx Demux device's index.
@@ -97,6 +141,29 @@
{
char *val;
+ if (ciplus_enable)
+ {
+ char buf[32];
+ int i, out;
+
+ out = 0;
+
+ for (i = 0; i < 3; i ++)
+ {
+ DVB_DemuxSource_t dmx_src;
+
+ if (i == dmx_idx)
+ dmx_src = src;
+ else
+ dvb_get_demux_source(i, &dmx_src);
+ if (dmx_src != DVB_DEMUX_SOURCE_DMA0)
+ out |= 1 << i;
+ }
+
+ snprintf(buf, sizeof(buf), "%d", out);
+ dvr_file_echo("/sys/class/dmx/ciplus_output_ctrl", buf);
+ }
+
switch (src)
{
case DVB_DEMUX_SOURCE_TS0: