blob: 96add39c606df89c24284baacf2b94d7dec515f5 [file] [log] [blame]
Gong Ked869dd72020-07-20 09:00:25 +08001#include <stddef.h>
2#include <stdlib.h>
3#include <string.h>
4#include <errno.h>
5#include <sys/types.h>
6#include <sys/stat.h>
7#include <unistd.h>
8#include <assert.h>
9
10#include "dvr_types.h"
11#include "dvb_utils.h"
12#include "dvr_utils.h"
13
14/**
15 * Set the demux's input source.
16 * \param dmx_idx Demux device's index.
17 * \param src The demux's input source.
18 * \retval 0 On success.
19 * \retval -1 On error.
20 */
21int dvb_set_demux_source (int dmx_idx, DVB_DemuxSource_t src)
22{
23 char node[32];
24 struct stat st;
25 int r;
26
27 snprintf(node, sizeof(node), "/sys/class/stb/demux%d_source", dmx_idx);
28
29 r = stat(node, &st);
30 if (r == -1) {
31 DVR_DEBUG(1, "cannot find \"%s\"", node);
32 } else {
33 char *val;
34
35 switch (src) {
36 case DVB_DEMUX_SOURCE_TS0:
37 val = "ts0";
38 break;
39 case DVB_DEMUX_SOURCE_TS1:
40 val = "ts1";
41 break;
42 case DVB_DEMUX_SOURCE_TS2:
43 val = "ts2";
44 break;
45 case DVB_DEMUX_SOURCE_DMA0:
46 val = "hiu";
47 break;
48 default:
49 assert(0);
50 }
51
52 r = dvr_file_echo(node, val);
53 }
54
55 return r;
56}
57
Chuanzhi Wang41bc0672020-07-29 15:58:56 +080058/**
59 * Get the demux's input source.
60 * \param dmx_idx Demux device's index.
61 * \param point src that demux's input source.
62 * \retval 0 On success.
63 * \retval -1 On error.
64 */
65int dvb_get_demux_source (int dmx_idx, DVB_DemuxSource_t *src)
66{
67 char node[32] = {0};
68 char buf[32] = {0};
69 struct stat st;
70 int r, source_no;
71
72 snprintf(node, sizeof(node), "/sys/class/stb/demux%d_source", dmx_idx);
73 r = stat(node, &st);
74 if (r == -1) {
75 DVR_DEBUG(1, "cannot find \"%s\"", node);
76 } else {
77 r = dvr_file_read(node, buf, sizeof(buf));
78 if (r != -1) {
79 if (strncmp(buf, "ts", 2) == 0 && strlen(buf) == 3) {
80 sscanf(buf, "ts%d", &source_no);
81 switch (source_no)
82 {
83 case 0:
84 *src = DVB_DEMUX_SOURCE_TS0;
85 break;
86 case 1:
87 *src = DVB_DEMUX_SOURCE_TS1;
88 break;
89 case 2:
90 *src = DVB_DEMUX_SOURCE_TS2;
91 break;
92 default:
93 DVR_DEBUG(1, "do not support demux source:%s", buf);
94 r = -1;
95 break;
96 }
97 }else if (strncmp(buf, "hiu", 3) == 0) {
98 *src = DVB_DEMUX_SOURCE_DMA0;
99 }else {
100 r = -1;
101 }
102 DVR_DEBUG(1, "dvb_get_demux_source \"%s\" :%s", node, buf);
103 }
104 }
105
106 return r;
107}