1 /*
2  * Copyright (c) 2011-2012 - Mauro Carvalho Chehab
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation version 2.1 of the License.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16  * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
17  *
18  * Per-delivery system properties, according with the specs:
19  * 	http://linuxtv.org/downloads/v4l-dvb-apis/FE_GET_SET_PROPERTY.html
20  */
21 #include <stddef.h>
22 
23 #include <libdvbv5/dvb-v5-std.h>
24 #include "dvb-v5.h"
25 
26 const unsigned int sys_dvbt_props[] = {
27 	DTV_FREQUENCY,
28 	DTV_MODULATION,
29 	DTV_BANDWIDTH_HZ,
30 	DTV_INVERSION,
31 	DTV_CODE_RATE_HP,
32 	DTV_CODE_RATE_LP,
33 	DTV_GUARD_INTERVAL,
34 	DTV_TRANSMISSION_MODE,
35 	DTV_HIERARCHY,
36 	0
37 };
38 
39 const unsigned int sys_dvbt2_props[] = {
40 	DTV_FREQUENCY,
41 	DTV_MODULATION,
42 	DTV_BANDWIDTH_HZ,
43 	DTV_INVERSION,
44 	DTV_CODE_RATE_HP,
45 	DTV_CODE_RATE_LP,
46 	DTV_GUARD_INTERVAL,
47 	DTV_TRANSMISSION_MODE,
48 	DTV_HIERARCHY,
49 	DTV_STREAM_ID,
50 	0
51 };
52 
53 const unsigned int sys_isdbt_props[] = {
54 	DTV_FREQUENCY,
55 	DTV_BANDWIDTH_HZ,
56 	DTV_INVERSION,
57 	DTV_GUARD_INTERVAL,
58 	DTV_TRANSMISSION_MODE,
59 	DTV_ISDBT_LAYER_ENABLED,
60 	DTV_ISDBT_PARTIAL_RECEPTION,
61 	DTV_ISDBT_SOUND_BROADCASTING,
62 	DTV_ISDBT_SB_SUBCHANNEL_ID,
63 	DTV_ISDBT_SB_SEGMENT_IDX,
64 	DTV_ISDBT_SB_SEGMENT_COUNT,
65 	DTV_ISDBT_LAYERA_FEC,
66 	DTV_ISDBT_LAYERA_MODULATION,
67 	DTV_ISDBT_LAYERA_SEGMENT_COUNT,
68 	DTV_ISDBT_LAYERA_TIME_INTERLEAVING,
69 	DTV_ISDBT_LAYERB_FEC,
70 	DTV_ISDBT_LAYERB_MODULATION,
71 	DTV_ISDBT_LAYERB_SEGMENT_COUNT,
72 	DTV_ISDBT_LAYERB_TIME_INTERLEAVING,
73 	DTV_ISDBT_LAYERC_FEC,
74 	DTV_ISDBT_LAYERC_MODULATION,
75 	DTV_ISDBT_LAYERC_SEGMENT_COUNT,
76 	DTV_ISDBT_LAYERC_TIME_INTERLEAVING,
77 	DTV_COUNTRY_CODE,
78 	0
79 };
80 
81 const unsigned int sys_atsc_props[] = {
82 	DTV_FREQUENCY,
83 	DTV_MODULATION,
84 	0
85 };
86 
87 const unsigned int sys_atscmh_props[] = {
88 	DTV_FREQUENCY,
89 	DTV_MODULATION,
90 	DTV_ATSCMH_FIC_VER,
91 	DTV_ATSCMH_PARADE_ID,
92 	DTV_ATSCMH_NOG,
93 	DTV_ATSCMH_TNOG,
94 	DTV_ATSCMH_SGN,
95 	DTV_ATSCMH_PRC,
96 	DTV_ATSCMH_RS_FRAME_MODE,
97 	DTV_ATSCMH_RS_FRAME_ENSEMBLE,
98 	DTV_ATSCMH_RS_CODE_MODE_PRI,
99 	DTV_ATSCMH_RS_CODE_MODE_SEC,
100 	DTV_ATSCMH_SCCC_BLOCK_MODE,
101 	DTV_ATSCMH_SCCC_CODE_MODE_A,
102 	DTV_ATSCMH_SCCC_CODE_MODE_B,
103 	DTV_ATSCMH_SCCC_CODE_MODE_C,
104 	DTV_ATSCMH_SCCC_CODE_MODE_D,
105 	0
106 };
107 
108 const unsigned int sys_dvbc_annex_ac_props[] = {
109 	DTV_FREQUENCY,
110 	DTV_MODULATION,
111 	DTV_INVERSION,
112 	DTV_SYMBOL_RATE,
113 	DTV_INNER_FEC,
114 	0
115 };
116 
117 const unsigned int sys_dvbc_annex_b_props[] = {
118 	DTV_FREQUENCY,
119 	DTV_MODULATION,
120 	0
121 };
122 
123 const unsigned int sys_dvbs_props[] = {
124 	DTV_FREQUENCY,
125 	DTV_INVERSION,
126 	DTV_SYMBOL_RATE,
127 	DTV_INNER_FEC,
128 	DTV_POLARIZATION,
129 	0
130 };
131 
132 const unsigned int sys_dvbs2_props[] = {
133 	DTV_FREQUENCY,
134 	DTV_INVERSION,
135 	DTV_SYMBOL_RATE,
136 	DTV_INNER_FEC,
137 	DTV_MODULATION,
138 	DTV_PILOT,
139 	DTV_ROLLOFF,
140 	DTV_POLARIZATION,
141 	DTV_STREAM_ID,
142 	0
143 };
144 
145 const unsigned int sys_turbo_props[] = {
146 	DTV_FREQUENCY,
147 	DTV_INVERSION,
148 	DTV_SYMBOL_RATE,
149 	DTV_INNER_FEC,
150 	DTV_MODULATION,
151 	DTV_POLARIZATION,
152 	0
153 };
154 
155 const unsigned int sys_isdbs_props[] = {
156 	DTV_FREQUENCY,
157 	DTV_STREAM_ID,
158 	0
159 };
160 
161 const unsigned int sys_dtmb_props[] = {
162 	DTV_FREQUENCY,
163 	DTV_MODULATION,
164 	DTV_BANDWIDTH_HZ,
165 	DTV_INVERSION,
166 	DTV_INNER_FEC,
167 	DTV_GUARD_INTERVAL,
168 	DTV_TRANSMISSION_MODE,
169 	DTV_INTERLEAVING,
170 	0
171 };
172 
173 const unsigned int *dvb_v5_delivery_system[] = {
174 	[SYS_ATSC] =          sys_atsc_props,
175 	[SYS_ATSCMH] =        sys_atscmh_props,
176 	[SYS_DVBC_ANNEX_A] =  sys_dvbc_annex_ac_props,
177 	[SYS_DVBC_ANNEX_C] =  sys_dvbc_annex_ac_props,
178 	[SYS_DVBC_ANNEX_B] =  sys_dvbc_annex_b_props,
179 	[SYS_DVBS] =          sys_dvbs_props,
180 	[SYS_DVBS2] =         sys_dvbs2_props,
181 	[SYS_DVBT] =          sys_dvbt_props,
182 	[SYS_DVBT2] =         sys_dvbt2_props,
183 	[SYS_ISDBS] =         sys_isdbs_props,
184 	[SYS_ISDBT] =         sys_isdbt_props,
185 	[SYS_TURBO] =         sys_turbo_props,
186 	[SYS_DTMB] =          sys_dtmb_props,
187 	[SYS_ATSCMH] =        NULL,
188 	[SYS_CMMB] =          NULL,
189 	[SYS_DAB] =           NULL,
190 	[SYS_DSS] =           NULL,
191 	[SYS_DVBH] =          NULL,
192 	[SYS_ISDBC] =         NULL,
193 	[SYS_UNDEFINED] =     NULL,
194 };
195 
196 const void *dvb_v5_attr_names[] = {
197 	[0 ...DTV_MAX_COMMAND ] = NULL,
198 	[DTV_CODE_RATE_HP]		= fe_code_rate_name,
199 	[DTV_CODE_RATE_LP]		= fe_code_rate_name,
200 	[DTV_INNER_FEC]			= fe_code_rate_name,
201 	[DTV_ISDBT_LAYERA_FEC]		= fe_code_rate_name,
202 	[DTV_ISDBT_LAYERB_FEC]		= fe_code_rate_name,
203 	[DTV_ISDBT_LAYERC_FEC]		= fe_code_rate_name,
204 	[DTV_MODULATION]		= fe_modulation_name,
205 	[DTV_ISDBT_LAYERA_MODULATION]	= fe_modulation_name,
206 	[DTV_ISDBT_LAYERB_MODULATION]	= fe_modulation_name,
207 	[DTV_ISDBT_LAYERC_MODULATION]	= fe_modulation_name,
208 	[DTV_TRANSMISSION_MODE]		= fe_transmission_mode_name,
209 	[DTV_GUARD_INTERVAL]		= fe_guard_interval_name,
210 	[DTV_HIERARCHY]			= fe_hierarchy_name,
211 	[DTV_VOLTAGE]			= fe_voltage_name,
212 	[DTV_TONE]			= fe_tone_name,
213 	[DTV_INVERSION]			= fe_inversion_name,
214 	[DTV_PILOT]			= fe_pilot_name,
215 	[DTV_ROLLOFF]			= fe_rolloff_name,
216 	[DTV_DELIVERY_SYSTEM]		= delivery_system_name,
217 };
218 
219 const char *dvb_sat_pol_name[6] = {
220 	[POLARIZATION_OFF] = "OFF",
221 	[POLARIZATION_H] = "HORIZONTAL",
222 	[POLARIZATION_V] = "VERTICAL",
223 	[POLARIZATION_L] = "LEFT",
224 	[POLARIZATION_R] = "RIGHT",
225 	[5] = NULL,
226 };
227 
228 const char *dvb_user_name[DTV_USER_NAME_SIZE + 1] = {
229 	[DTV_POLARIZATION - DTV_USER_COMMAND_START] =   "POLARIZATION",
230 	[DTV_VIDEO_PID - DTV_USER_COMMAND_START] =	"VIDEO PID",
231 	[DTV_AUDIO_PID - DTV_USER_COMMAND_START] =	"AUDIO PID",
232 	[DTV_SERVICE_ID - DTV_USER_COMMAND_START] =	"SERVICE ID",
233 	[DTV_CH_NAME - DTV_USER_COMMAND_START] =	"CHANNEL",
234 	[DTV_VCHANNEL - DTV_USER_COMMAND_START] =	"VCHANNEL",
235 	[DTV_SAT_NUMBER - DTV_USER_COMMAND_START] =	"SAT NUMBER",
236 	[DTV_DISEQC_WAIT - DTV_USER_COMMAND_START] =	"DISEQC WAIT",
237 	[DTV_DISEQC_LNB - DTV_USER_COMMAND_START] =	"DISEQC LNB",
238 	[DTV_FREQ_BPF - DTV_USER_COMMAND_START] =	"FREQ BPF",
239 	[DTV_PLS_CODE - DTV_USER_COMMAND_START] =	"PLS CODE",
240 	[DTV_PLS_MODE - DTV_USER_COMMAND_START] =	"PLS MODE",
241 	[DTV_COUNTRY_CODE - DTV_USER_COMMAND_START] =	"COUNTRY",
242 	[DTV_USER_NAME_SIZE] = NULL,
243 };
244 
245 const char *dvb_stat_name[DTV_STAT_NAME_SIZE + 1] = {
246 	[DTV_STATUS - DTV_STAT_COMMAND_START] = 	"STATUS",
247 	[DTV_BER - DTV_STAT_COMMAND_START] =		"POST BER",
248 	[DTV_PER - DTV_STAT_COMMAND_START] =		"PER",
249 	[DTV_QUALITY - DTV_STAT_COMMAND_START] =	"QUALITY",
250 	[DTV_PRE_BER - DTV_STAT_COMMAND_START] =	"PRE BER",
251 	[DTV_STAT_NAME_SIZE] = NULL,
252 };
253 
254 const void *dvb_user_attr_names[DTV_USER_NAME_SIZE + 1] = {
255 	[0 ... DTV_USER_NAME_SIZE] = NULL,
256 	[DTV_POLARIZATION - DTV_USER_COMMAND_START]           = dvb_sat_pol_name,
257 };
258 
259