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 19 #include <stdio.h> 20 #include <stdlib.h> 21 #include <string.h> 22 23 #include <libdvbv5/dvb-file.h> 24 #include <libdvbv5/dvb-v5-std.h> 25 26 #define PTABLE(a) .table = a, .size=ARRAY_SIZE(a) 27 28 /* 29 * Standard channel.conf format for DVB-T, DVB-C, DVB-S, DVB-S2 and ATSC 30 */ 31 static const char *channel_parse_modulation[] = { 32 [APSK_16] = "16APSK", 33 [APSK_32] = "32APSK", 34 [DQPSK] = "DQPSK", 35 [PSK_8] = "8PSK", 36 [QAM_16] = "QAM16", 37 [QAM_32] = "QAM32", 38 [QAM_64] = "QAM64", 39 [QAM_128] = "QAM128", 40 [QAM_256] = "QAM256", 41 [QAM_AUTO] = "AUTO", 42 [QPSK] = "QPSK", 43 [VSB_8] = "8VSB", 44 [VSB_16] = "16VSB", 45 }; 46 47 static const char *channel_parse_bandwidth[] = { 48 [BANDWIDTH_1_712_MHZ] = "1.712MHz", 49 [BANDWIDTH_5_MHZ] = "5MHz", 50 [BANDWIDTH_6_MHZ] = "6MHz", 51 [BANDWIDTH_7_MHZ] = "7MHz", 52 [BANDWIDTH_8_MHZ] = "8MHz", 53 [BANDWIDTH_10_MHZ] = "10MHz", 54 [BANDWIDTH_AUTO] = "AUTO", 55 }; 56 57 static const char *channel_parse_trans_mode[] = { 58 [TRANSMISSION_MODE_1K] = "1k", 59 [TRANSMISSION_MODE_2K] = "2k", 60 [TRANSMISSION_MODE_4K] = "4k", 61 [TRANSMISSION_MODE_8K] = "8k", 62 [TRANSMISSION_MODE_16K] = "16k", 63 [TRANSMISSION_MODE_32K] = "32k", 64 [TRANSMISSION_MODE_AUTO] = "AUTO", 65 }; 66 67 static const char *channel_parse_code_rate[12] = { 68 [FEC_1_2] = "1/2", 69 [FEC_2_3] = "2/3", 70 [FEC_3_4] = "3/4", 71 [FEC_3_5] = "3/5", 72 [FEC_4_5] = "4/5", 73 [FEC_5_6] = "5/6", 74 [FEC_6_7] = "6/7", 75 [FEC_7_8] = "7/8", 76 [FEC_8_9] = "8/9", 77 [FEC_9_10] = "9/10", 78 [FEC_AUTO] = "AUTO", 79 [FEC_NONE] = "NONE", 80 }; 81 82 static const char *channel_parse_guard_interval[] = { 83 [GUARD_INTERVAL_1_4] = "1/4", 84 [GUARD_INTERVAL_1_8] = "1/8", 85 [GUARD_INTERVAL_1_16] = "1/16", 86 [GUARD_INTERVAL_1_32] = "1/32", 87 [GUARD_INTERVAL_1_128] = "1/128", 88 [GUARD_INTERVAL_19_128] = "19/128", 89 [GUARD_INTERVAL_19_256] = "19/256", 90 [GUARD_INTERVAL_AUTO] = "AUTO", 91 }; 92 93 static const char *channel_parse_hierarchy[] = { 94 [HIERARCHY_1] = "1", 95 [HIERARCHY_2] = "2", 96 [HIERARCHY_4] = "4", 97 [HIERARCHY_AUTO] = "AUTO", 98 [HIERARCHY_NONE] = "NONE", 99 }; 100 101 static const char *channel_parse_polarization[] = { 102 [POLARIZATION_OFF] = "-", 103 [POLARIZATION_H] = "H", 104 [POLARIZATION_V] = "V", 105 [POLARIZATION_L] = "L", 106 [POLARIZATION_R] = "R", 107 }; 108 109 static const char *channel_parse_rolloff[] = { 110 [ROLLOFF_20] = "20", 111 [ROLLOFF_25] = "25", 112 [ROLLOFF_35] = "35", 113 [ROLLOFF_AUTO] = "AUTO", 114 }; 115 116 static const struct dvb_parse_table sys_atsc_table[] = { 117 { DTV_FREQUENCY, NULL, 0 }, 118 { DTV_MODULATION, PTABLE(channel_parse_modulation) }, 119 }; 120 121 static const struct dvb_parse_table sys_dvbc_table[] = { 122 { DTV_FREQUENCY, NULL, 0 }, 123 { DTV_SYMBOL_RATE, NULL, 0 }, 124 { DTV_INNER_FEC, PTABLE(channel_parse_code_rate) }, 125 { DTV_MODULATION, PTABLE(channel_parse_modulation) }, 126 }; 127 128 /* Note: On DVB-S, frequency is divided by 1000 */ 129 static const struct dvb_parse_table sys_dvbs_table[] = { 130 { DTV_FREQUENCY, NULL, 0 }, 131 { DTV_POLARIZATION, PTABLE(channel_parse_polarization) }, 132 { DTV_SYMBOL_RATE, NULL, 0 }, 133 { DTV_INNER_FEC, PTABLE(channel_parse_code_rate) }, 134 }; 135 136 static const struct dvb_parse_table sys_dvbs2_table[] = { 137 { DTV_FREQUENCY, NULL, 0 }, 138 { DTV_POLARIZATION, PTABLE(channel_parse_polarization) }, 139 { DTV_SYMBOL_RATE, NULL, 0 }, 140 { DTV_INNER_FEC, PTABLE(channel_parse_code_rate) }, 141 { DTV_ROLLOFF, PTABLE(channel_parse_rolloff) }, 142 { DTV_MODULATION, PTABLE(channel_parse_modulation) }, 143 { DTV_STREAM_ID, NULL, 0, 0, 1, 0 }, 144 { DTV_PLS_CODE, NULL, 0, 0, 1, -1 }, 145 { DTV_PLS_MODE, NULL, 0, 0, 1, -1 }, 146 }; 147 148 static const struct dvb_parse_table sys_dvbt_table[] = { 149 { DTV_FREQUENCY, NULL, 0 }, 150 { DTV_BANDWIDTH_HZ, PTABLE(channel_parse_bandwidth) }, 151 { DTV_CODE_RATE_HP, PTABLE(channel_parse_code_rate) }, 152 { DTV_CODE_RATE_LP, PTABLE(channel_parse_code_rate) }, 153 { DTV_MODULATION, PTABLE(channel_parse_modulation) }, 154 { DTV_TRANSMISSION_MODE, PTABLE(channel_parse_trans_mode) }, 155 { DTV_GUARD_INTERVAL, PTABLE(channel_parse_guard_interval) }, 156 { DTV_HIERARCHY, PTABLE(channel_parse_hierarchy) }, 157 }; 158 159 static const struct dvb_parse_table sys_dvbt2_table[] = { 160 { DTV_FREQUENCY, NULL, 0 }, 161 { DTV_BANDWIDTH_HZ, PTABLE(channel_parse_bandwidth) }, 162 { DTV_CODE_RATE_HP, PTABLE(channel_parse_code_rate) }, 163 { DTV_CODE_RATE_LP, PTABLE(channel_parse_code_rate) }, 164 { DTV_MODULATION, PTABLE(channel_parse_modulation) }, 165 { DTV_TRANSMISSION_MODE, PTABLE(channel_parse_trans_mode) }, 166 { DTV_GUARD_INTERVAL, PTABLE(channel_parse_guard_interval) }, 167 { DTV_HIERARCHY, PTABLE(channel_parse_hierarchy) }, 168 { DTV_STREAM_ID, NULL, 0, 0, 1, -1 }, 169 }; 170 171 const struct dvb_parse_file channel_file_format = { 172 .has_delsys_id = 1, 173 .delimiter = " \n\t", 174 .formats = { 175 { 176 .id = "A", 177 .delsys = SYS_ATSC, 178 PTABLE(sys_atsc_table), 179 }, { 180 .id = "C", 181 .delsys = SYS_DVBC_ANNEX_A, 182 PTABLE(sys_dvbc_table), 183 }, { 184 .id = "S", 185 .delsys = SYS_DVBS, 186 PTABLE(sys_dvbs_table), 187 }, { 188 .id = "S2", 189 .delsys = SYS_DVBS2, 190 PTABLE(sys_dvbs2_table), 191 }, { 192 .id = "T", 193 .delsys = SYS_DVBT, 194 PTABLE(sys_dvbt_table), 195 }, { 196 .id = "T2", 197 .delsys = SYS_DVBT2, 198 PTABLE(sys_dvbt2_table), 199 }, { 200 NULL, 0, NULL, 0, 201 } 202 } 203 }; 204