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