1 /* 2 * Copyright (c) 2011-2014 - 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 defined at libdvbv5 scope, following 19 * the same model as defined at the Linux DVB media specs: 20 * http://linuxtv.org/downloads/v4l-dvb-apis/FE_GET_SET_PROPERTY.html 21 */ 22 #ifndef _DVB_V5_STD_H 23 #define _DVB_V5_STD_H 24 25 #include <stddef.h> 26 #include "dvb-frontend.h" 27 28 /** 29 * @file dvb-v5-std.h 30 * @ingroup frontend 31 * @brief Provides libdvbv5 defined properties for the frontend. 32 * @copyright GNU Lesser General Public License version 2.1 (LGPLv2.1) 33 * @author Mauro Carvalho Chehab 34 * 35 * @par Bug Report 36 * Please submit bug reports and patches to linux-media@vger.kernel.org 37 */ 38 39 /* 40 * User DTV codes, for internal usage. There are two sets of 41 * properties. One for DTV properties and another one for statistics 42 */ 43 44 /* 45 * First set: DTV properties that don't belong to Kernelspace 46 * 47 * Those properties contain data that comes from the MPEG-TS 48 * tables, like audio/video/other PIDs, and satellite config 49 */ 50 51 /** 52 * @def DTV_USER_COMMAND_START 53 * @brief Start number for libdvbv5 user commands 54 * @ingroup frontend 55 * @def DTV_POLARIZATION 56 * @brief Satellite polarization (for Satellite delivery systems) 57 * @ingroup frontend 58 * @def DTV_AUDIO_PID 59 * @brief Audio PID 60 * @ingroup frontend 61 * @def DTV_VIDEO_PID 62 * @brief Video PID 63 * @ingroup frontend 64 * @def DTV_SERVICE_ID 65 * @brief MPEG TS service ID 66 * @ingroup frontend 67 * @def DTV_CH_NAME 68 * @brief Digital TV service name 69 * @ingroup frontend 70 * @def DTV_VCHANNEL 71 * @brief Digital TV channel number. May contain symbols 72 * @ingroup frontend 73 * @def DTV_SAT_NUMBER 74 * @brief Number of the satellite (used on multi-dish Satellite systems) 75 * @ingroup frontend 76 * @def DTV_DISEQC_WAIT 77 * @brief Extra time needed to wait for DiSeqC to complete, in ms. 78 * The minimal wait time is 15 ms. The time here will be 79 * added to the minimal time. 80 * @ingroup frontend 81 * @def DTV_DISEQC_LNB 82 * @brief LNBf name 83 * @ingroup frontend 84 * @def DTV_FREQ_BPF 85 * @brief SCR/Unicable band-pass filter frequency in kHz 86 * @ingroup frontend 87 * @def DTV_PLS_CODE 88 * @brief DVB-T2 PLS code. Not used internally. It is needed 89 * only for file conversion. 90 * @ingroup frontend 91 * @def DTV_PLS_MODE 92 * @brief DVB-T2 PLS mode. Not used internally. It is needed 93 * only for file conversion. 94 * @ingroup frontend 95 * @def DTV_COUNTRY_CODE 96 * @brief Country variant of international delivery system standard. 97 in ISO 3166-1 two letter code. 98 * @ingroup frontend 99 * @def DTV_MAX_USER_COMMAND 100 * @brief Last user command 101 * @ingroup frontend 102 * @def DTV_USER_NAME_SIZE 103 * @brief Number of user commands 104 * @ingroup frontend 105 */ 106 107 #define DTV_USER_COMMAND_START 256 108 109 #define DTV_POLARIZATION (DTV_USER_COMMAND_START + 0) 110 #define DTV_VIDEO_PID (DTV_USER_COMMAND_START + 1) 111 #define DTV_AUDIO_PID (DTV_USER_COMMAND_START + 2) 112 #define DTV_SERVICE_ID (DTV_USER_COMMAND_START + 3) 113 #define DTV_CH_NAME (DTV_USER_COMMAND_START + 4) 114 #define DTV_VCHANNEL (DTV_USER_COMMAND_START + 5) 115 #define DTV_SAT_NUMBER (DTV_USER_COMMAND_START + 6) 116 #define DTV_DISEQC_WAIT (DTV_USER_COMMAND_START + 7) 117 #define DTV_DISEQC_LNB (DTV_USER_COMMAND_START + 8) 118 #define DTV_FREQ_BPF (DTV_USER_COMMAND_START + 9) 119 #define DTV_PLS_CODE (DTV_USER_COMMAND_START + 10) 120 #define DTV_PLS_MODE (DTV_USER_COMMAND_START + 11) 121 #define DTV_COUNTRY_CODE (DTV_USER_COMMAND_START + 12) 122 123 #define DTV_MAX_USER_COMMAND DTV_COUNTRY_CODE 124 125 #define DTV_USER_NAME_SIZE (1 + DTV_MAX_USER_COMMAND - DTV_USER_COMMAND_START) 126 127 /** 128 * @enum dvb_sat_polarization 129 * @brief Polarization types for Satellite systems 130 * @ingroup satellite 131 * 132 * @param POLARIZATION_OFF Polarization disabled/unused. 133 * @param POLARIZATION_H Horizontal polarization 134 * @param POLARIZATION_V Vertical polarization 135 * @param POLARIZATION_L Left circular polarization (C-band) 136 * @param POLARIZATION_R Right circular polarization (C-band) 137 */ 138 enum dvb_sat_polarization { 139 POLARIZATION_OFF = 0, 140 POLARIZATION_H = 1, 141 POLARIZATION_V = 2, 142 POLARIZATION_L = 3, 143 POLARIZATION_R = 4, 144 }; 145 146 /* 147 * Second set: DTV statistics 148 * 149 * Those properties contain statistics measurements that aren't 150 * either provided by the Kernel via property cmd/value pair, 151 * like status (with has its own ioctl), or that are derivated 152 * measures from two or more Kernel reported stats. 153 */ 154 155 /** 156 * @def DTV_STAT_COMMAND_START 157 * @brief Start number for libdvbv5 statistics commands 158 * @ingroup frontend 159 * @def DTV_STATUS 160 * @brief Lock status of a DTV frontend. This actually comes from 161 * the Kernel, but it uses a separate ioctl. 162 * @ingroup frontend 163 * @def DTV_BER 164 * @brief Bit Error Rate. This is a parameter that it is 165 * derivated from two counters at the Kernel side 166 * @ingroup frontend 167 * @def DTV_PER 168 * @brief Packet Error Rate. This is a parameter that it is 169 * derivated from two counters at the Kernel side 170 * @ingroup frontend 171 * @def DTV_QUALITY 172 * @brief A quality indicator that represents if a locked 173 * channel provides a good, OK or poor signal. This is 174 * estimated considering the error rates, signal strengh 175 * and/or S/N ratio of the carrier. 176 * @ingroup frontend 177 * @def DTV_PRE_BER 178 * @brief Bit Error Rate before Viterbi. This is the error rate 179 * before applying the Forward Error Correction. This is 180 * a parameter that it is derivated from two counters 181 * at the Kernel side. 182 * @ingroup frontend 183 * @def DTV_MAX_STAT_COMMAND 184 * @brief Last statistics command 185 * @ingroup frontend 186 * @def DTV_STAT_NAME_SIZE 187 * @brief Number of statistics commands 188 * @ingroup frontend 189 * @def DTV_NUM_KERNEL_STATS 190 * @brief Number of statistics commands provided by the Kernel 191 * @ingroup frontend 192 * @def DTV_NUM_STATS_PROPS 193 * @brief Total number of statistics commands 194 * @ingroup frontend 195 */ 196 197 #define DTV_STAT_COMMAND_START 512 198 199 #define DTV_STATUS (DTV_STAT_COMMAND_START + 0) 200 #define DTV_BER (DTV_STAT_COMMAND_START + 1) 201 #define DTV_PER (DTV_STAT_COMMAND_START + 2) 202 #define DTV_QUALITY (DTV_STAT_COMMAND_START + 3) 203 #define DTV_PRE_BER (DTV_STAT_COMMAND_START + 4) 204 205 #define DTV_MAX_STAT_COMMAND DTV_PRE_BER 206 207 #define DTV_STAT_NAME_SIZE (1 + DTV_MAX_STAT_COMMAND - DTV_STAT_COMMAND_START) 208 209 /* There are currently 8 stats provided on Kernelspace */ 210 #define DTV_NUM_KERNEL_STATS 8 211 212 #define DTV_NUM_STATS_PROPS (DTV_NUM_KERNEL_STATS + DTV_STAT_NAME_SIZE) 213 214 /** 215 * @enum dvb_quality 216 * @brief Provides an estimation about the user's experience 217 * while watching to a given MPEG stream 218 * @ingroup frontend 219 * 220 * @param DVB_QUAL_UNKNOWN Quality could not be estimated, as the Kernel driver 221 * doesn't provide enough statistics 222 * 223 * @param DVB_QUAL_POOR The signal reception is poor. Signal loss or packets 224 * can be lost too frequently. 225 * @param DVB_QUAL_OK The signal reception is ok. Eventual artifacts could 226 * be expected, but it should work. 227 * @param DVB_QUAL_GOOD The signal is good, and not many errors are happening. 228 * The user should have a good experience watching the 229 * stream. 230 */ 231 enum dvb_quality { 232 DVB_QUAL_UNKNOWN = 0, 233 DVB_QUAL_POOR, 234 DVB_QUAL_OK, 235 DVB_QUAL_GOOD, 236 }; 237 238 #ifndef _DOXYGEN 239 240 /* 241 * Some tables to translate from value to string 242 * 243 * These tables are raw ways to translate from some DTV values into strings. 244 * Please use the API-provided function dvb_cmd_name() and dvb_dvb_attr_names(), 245 * instead of using the tables directly. 246 */ 247 248 extern const unsigned int sys_dvbt_props[]; 249 extern const unsigned int sys_dvbt2_props[]; 250 extern const unsigned int sys_isdbt_props[]; 251 extern const unsigned int sys_atsc_props[]; 252 extern const unsigned int sys_atscmh_props[]; 253 extern const unsigned int sys_dvbc_annex_ac_props[]; 254 extern const unsigned int sys_dvbc_annex_b_props[]; 255 extern const unsigned int sys_dvbs_props[]; 256 extern const unsigned int sys_dvbs2_props[]; 257 extern const unsigned int sys_turbo_props[]; 258 extern const unsigned int sys_isdbs_props[]; 259 extern const unsigned int *dvb_v5_delivery_system[]; 260 extern const char *dvb_sat_pol_name[6]; 261 extern const char *dvb_user_name[DTV_USER_NAME_SIZE + 1]; 262 extern const char *dvb_stat_name[DTV_STAT_NAME_SIZE + 1]; 263 extern const void *dvb_user_attr_names[]; 264 265 #endif /* DOXYGEN_SHOULD_SKIP_THIS */ 266 267 #endif 268