static int scanfile_load_dvbt ( dvb_mux_conf_t *mux, const char *line ) { char bw[20], fec[20], fec2[20], qam[20], mode[20], guard[20], hier[20]; int r; if (*line == '2') { unsigned int plp_id; r = sscanf(line+1, "%u %10s %10s %10s %10s %10s %10s %10s %u", &mux->dmc_fe_freq, bw, fec, fec2, qam, mode, guard, hier, &plp_id); if(r != 9) return 1; mux->dmc_fe_delsys = DVB_SYS_DVBT2; } else { r = sscanf(line, "%u %10s %10s %10s %10s %10s %10s %10s", &mux->dmc_fe_freq, bw, fec, fec2, qam, mode, guard, hier); if(r != 8) return 1; mux->dmc_fe_delsys = DVB_SYS_DVBT; } mux->dmc_fe_type = DVB_TYPE_T; if ((mux->u.dmc_fe_ofdm.bandwidth = dvb_str2bw(bw)) == -1) return 1; if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.code_rate_HP = dvb_str2fec(fec)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.code_rate_LP = dvb_str2fec(fec2)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.transmission_mode = dvb_str2mode(mode)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.guard_interval = dvb_str2guard(guard)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.hierarchy_information = dvb_str2hier(hier)) == -1) return 1; return 0; }
static int scanfile_load_dvbs ( dvb_mux_conf_t *mux, const char *line ) { char pol[20], fec[20], qam[20], rolloff[20]; int r, v2 = 0; if (*line == '2') { v2 = 2; line++; } r = sscanf(line, "%u %s %u %s %s %s", &mux->dmc_fe_freq, pol, &mux->u.dmc_fe_qpsk.symbol_rate, fec, rolloff, qam); if (r < (4+v2)) return 1; mux->dmc_fe_type = DVB_TYPE_S; if ((mux->u.dmc_fe_qpsk.polarisation = dvb_str2pol(pol)) == -1) return 1; if ((mux->u.dmc_fe_qpsk.fec_inner = dvb_str2fec(fec)) == -1) return 1; if (v2) { mux->dmc_fe_delsys = DVB_SYS_DVBS2; if ((mux->dmc_fe_rolloff = dvb_str2rolloff(rolloff)) == -1) return 1; if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1; } else { mux->dmc_fe_delsys = DVB_SYS_DVBS; mux->dmc_fe_rolloff = DVB_ROLLOFF_35; mux->dmc_fe_modulation = DVB_MOD_QPSK; } if (v2) return 1; return 0; }
static int scanfile_load_dvbs ( dvb_mux_conf_t *mux, const char *line ) { char pol[20], fec[20], qam[20], rolloff[20]; int r, v2 = 0; dvb_frontend_parameters_t *p = &mux->dmc_fe_params; if (*line == '2') { v2 = 2; line++; } r = sscanf(line, "%u %s %u %s %s %s", &p->frequency, pol, &p->u.qpsk.symbol_rate, fec, rolloff, qam); if (r < (4+v2)) return 1; if ((mux->dmc_fe_polarisation = dvb_str2pol(pol)) == -1) return 1; if ((p->u.qpsk.fec_inner = dvb_str2fec(fec)) == -1) return 1; if (v2) { mux->dmc_fe_delsys = SYS_DVBS2; if ((mux->dmc_fe_rolloff = dvb_str2rolloff(rolloff)) == -1) return 1; if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1; } else { mux->dmc_fe_delsys = SYS_DVBS; mux->dmc_fe_rolloff = ROLLOFF_35; mux->dmc_fe_modulation = QPSK; } return 0; }
static int scanfile_load_dvbs ( dvb_mux_conf_t *mux, const char *line ) { char pol[20], fec[20], qam[20], rolloff[20]; int r, v2 = 0; if (*line == '2') { v2 = 2; line++; } dvb_mux_conf_init(mux, v2 ? DVB_SYS_DVBS2 : DVB_SYS_DVBS); r = sscanf(line, "%u %s %u %s %s %s %d %d %d", &mux->dmc_fe_freq, pol, &mux->u.dmc_fe_qpsk.symbol_rate, fec, rolloff, qam, &mux->dmc_fe_stream_id, &mux->dmc_fe_pls_code, (int*)&mux->dmc_fe_pls_mode); if (r < (4+v2)) return 1; if ((mux->u.dmc_fe_qpsk.polarisation = dvb_str2pol(pol)) == -1) return 1; if ((mux->u.dmc_fe_qpsk.fec_inner = dvb_str2fec(fec)) == -1) return 1; if (v2) { if ((mux->dmc_fe_rolloff = dvb_str2rolloff(rolloff)) == -1) return 1; if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1; if (r < (4+v2+1)) mux->dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER; if (r < (4+v2+2)) mux->dmc_fe_pls_code = 1; if (r < (4+v2+3)) mux->dmc_fe_pls_mode = 0; } else { mux->dmc_fe_rolloff = DVB_ROLLOFF_35; mux->dmc_fe_modulation = DVB_MOD_QPSK; } return 0; }
static int scanfile_load_dvbt ( dvb_mux_conf_t *mux, const char *line ) { char bw[20], fec[20], fec2[20], qam[20], mode[20], guard[20], hier[20]; int r; uint32_t i; dvb_frontend_parameters_t *p = &mux->dmc_fe_params; if (*line == '2') { r = sscanf(line+1, "%u %u %u %10s %10s %10s %10s %10s %10s %10s", &i, &i, &p->frequency, bw, fec, fec2, qam, mode, guard, hier); if(r != 10) return 1; mux->dmc_fe_delsys = SYS_DVBT2; } else { r = sscanf(line, "%u %10s %10s %10s %10s %10s %10s %10s", &p->frequency, bw, fec, fec2, qam, mode, guard, hier); if(r != 8) return 1; mux->dmc_fe_delsys = SYS_DVBT; } if ((p->u.ofdm.bandwidth = dvb_str2bw(bw)) == -1) return 1; if ((p->u.ofdm.constellation = dvb_str2qam(qam)) == -1) return 1; if ((p->u.ofdm.code_rate_HP = dvb_str2fec(fec)) == -1) return 1; if ((p->u.ofdm.code_rate_LP = dvb_str2fec(fec2)) == -1) return 1; if ((p->u.ofdm.transmission_mode = dvb_str2mode(mode)) == -1) return 1; if ((p->u.ofdm.guard_interval = dvb_str2guard(guard)) == -1) return 1; if ((p->u.ofdm.hierarchy_information = dvb_str2hier(hier)) == -1) return 1; return 0; }
static int scanfile_load_atsc ( dvb_mux_conf_t *mux, const char *line ) { char qam[20]; int r; r = sscanf(line, "%u %s", &mux->dmc_fe_freq, qam); if (r != 2) return 1; dvb_mux_conf_init(mux, DVB_SYS_ATSC); if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1; return 0; }
static int scanfile_load_atsc ( dvb_mux_conf_t *mux, const char *line ) { char qam[20]; int r; dvb_frontend_parameters_t *p = &mux->dmc_fe_params; r = sscanf(line, "%u %s", &p->frequency, qam); if (r != 2) return 1; mux->dmc_fe_delsys = SYS_ATSC; if ((p->u.vsb.modulation = dvb_str2qam(qam)) == -1) return 1; return 0; }
static int scanfile_load_dvbc ( dvb_mux_conf_t *mux, const char *line ) { char fec[20], qam[20]; int r; r = sscanf(line, "%u %u %s %s", &mux->dmc_fe_freq, &mux->u.dmc_fe_qam.symbol_rate, fec, qam); if(r != 4) return 1; dvb_mux_conf_init(mux, DVB_SYS_DVBC_ANNEX_A); if ((mux->u.dmc_fe_qam.fec_inner = dvb_str2fec(fec)) == -1) return 1; if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1; return 0; }
static int scanfile_load_dvbc ( dvb_mux_conf_t *mux, const char *line ) { char fec[20], qam[20]; int r; dvb_frontend_parameters_t *p = &mux->dmc_fe_params; r = sscanf(line, "%u %u %s %s", &p->frequency, &p->u.qam.symbol_rate, fec, qam); if(r != 4) return 1; mux->dmc_fe_delsys = SYS_DVBC_ANNEX_AC; if ((p->u.qam.fec_inner = dvb_str2fec(fec)) == -1) return 1; if ((p->u.qam.modulation = dvb_str2qam(qam)) == -1) return 1; return 0; }
static int scanfile_load_dvbt ( dvb_mux_conf_t *mux, const char *line ) { char bw[20], fec[20], fec2[20], qam[20], mode[20], guard[20], hier[20]; int r; if (*line == '2') { unsigned int system_id; dvb_mux_conf_init(mux, DVB_SYS_DVBT2); r = sscanf(line+1, "%u %s", &mux->dmc_fe_stream_id, bw); if (r == 2 && mux->dmc_fe_stream_id < 1000 && strstr(bw, "MHz") == 0) { r = sscanf(line+1, "%u %u %u %10s %10s %10s %10s %10s %10s %10s", &mux->dmc_fe_stream_id, &system_id, &mux->dmc_fe_freq, bw, fec, fec2, qam, mode, guard, hier); if(r != 10) return 1; } else { r = sscanf(line+1, "%u %10s %10s %10s %10s %10s %10s %10s %u", &mux->dmc_fe_freq, bw, fec, fec2, qam, mode, guard, hier, &mux->dmc_fe_stream_id); if(r == 8) mux->dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER; else if(r != 9) return 1; } } else { dvb_mux_conf_init(mux, DVB_SYS_DVBT); r = sscanf(line, "%u %10s %10s %10s %10s %10s %10s %10s", &mux->dmc_fe_freq, bw, fec, fec2, qam, mode, guard, hier); if(r != 8) return 1; } if ((mux->u.dmc_fe_ofdm.bandwidth = dvb_str2bw(bw)) == -1) return 1; if ((mux->dmc_fe_modulation = dvb_str2qam(qam)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.code_rate_HP = dvb_str2fec(fec)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.code_rate_LP = dvb_str2fec(fec2)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.transmission_mode = dvb_str2mode(mode)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.guard_interval = dvb_str2guard(guard)) == -1) return 1; if ((mux->u.dmc_fe_ofdm.hierarchy_information = dvb_str2hier(hier)) == -1) return 1; return 0; }
static int scanfile_load_dvbv5 ( scanfile_network_t *net, char *line, fb_file *fp ) { int res = 1, r = 1; char buf[256]; char *s, *t; const char *x; dvb_mux_conf_t *mux; htsmsg_t *l; /* validity check for [text] */ s = str_trim(line); if (s == '\0' || s[strlen(s) - 1] != ']') return 1; l = htsmsg_create_map(); /* Process file */ while (!fb_eof(fp)) { /* Get line */ buf[sizeof(buf)-1] = '\0'; if (!fb_gets(fp, buf, sizeof(buf) - 1)) break; s = str_trim(buf); if (*s == '#' || *s == '\0') continue; if (*s == '[') { res = 0; break; } if ((t = strchr(s, '=')) == NULL) continue; *t = '\0'; s = str_trim(s); t = str_trim(t + 1); htsmsg_add_str(l, s, t); } mux = malloc(sizeof(dvb_mux_conf_t)); mux->dmc_fe_delsys = -1; x = htsmsg_get_str(l, "DELIVERY_SYSTEM"); if (x && (mux->dmc_fe_delsys = dvb_str2delsys(x)) == -1) { if (!strcmp(s, "DVBC")) mux->dmc_fe_delsys = DVB_SYS_DVBC_ANNEX_A; } if (!x || (int)mux->dmc_fe_delsys < 0) mux_fail(r, "wrong system '%s'", x); dvb_mux_conf_init(mux, mux->dmc_fe_delsys); if (mux->dmc_fe_delsys == DVB_SYS_DVBT || mux->dmc_fe_delsys == DVB_SYS_DVBT2) { mux->u.dmc_fe_ofdm.bandwidth = DVB_BANDWIDTH_AUTO; mux->u.dmc_fe_ofdm.code_rate_HP = DVB_FEC_AUTO; mux->u.dmc_fe_ofdm.code_rate_LP = DVB_FEC_NONE; mux->dmc_fe_modulation = DVB_MOD_QAM_64; mux->u.dmc_fe_ofdm.transmission_mode = DVB_TRANSMISSION_MODE_8K; mux->u.dmc_fe_ofdm.hierarchy_information = DVB_HIERARCHY_NONE; if ((x = htsmsg_get_str(l, "BANDWIDTH_HZ"))) { if (isdigit(x[0])) { /* convert to kHz */ int64_t ll = strtoll(x, NULL, 0); ll /= 1000; snprintf(buf, sizeof(buf), "%llu", (long long unsigned)ll); x = buf; } if ((mux->u.dmc_fe_ofdm.bandwidth = dvb_str2bw(x)) == -1) mux_fail(r, "wrong bandwidth '%s'", x); } if ((x = htsmsg_get_str(l, "CODE_RATE_HP"))) if ((mux->u.dmc_fe_ofdm.code_rate_HP = dvb_str2fec(x)) == -1) mux_fail(r, "wrong code rate HP '%s'", x); if ((x = htsmsg_get_str(l, "CODE_RATE_LP"))) if ((mux->u.dmc_fe_ofdm.code_rate_LP = dvb_str2fec(x)) == -1) mux_fail(r, "wrong code rate LP '%s'", x); if ((x = htsmsg_get_str(l, "MODULATION"))) if ((mux->dmc_fe_modulation = dvb_str2qam(x)) == -1) mux_fail(r, "wrong modulation '%s'", x); if ((x = htsmsg_get_str(l, "TRANSMISSION_MODE"))) if ((mux->u.dmc_fe_ofdm.transmission_mode = dvb_str2mode(x)) == -1) mux_fail(r, "wrong transmission mode '%s'", x); if ((x = htsmsg_get_str(l, "GUARD_INTERVAL"))) if ((mux->u.dmc_fe_ofdm.guard_interval = dvb_str2guard(x)) == -1) mux_fail(r, "wrong guard interval '%s'", x); if ((x = htsmsg_get_str(l, "HIERARCHY"))) if ((mux->u.dmc_fe_ofdm.hierarchy_information = dvb_str2hier(x)) == -1) mux_fail(r, "wrong hierarchy '%s'", x); if ((x = htsmsg_get_str(l, "INVERSION"))) if ((mux->dmc_fe_inversion = dvb_str2inver(x)) == -1) mux_fail(r, "wrong inversion '%s'", x); if (htsmsg_get_s32(l, "STREAM_ID", &mux->dmc_fe_stream_id)) mux->dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER; } else if (mux->dmc_fe_delsys == DVB_SYS_DVBS || mux->dmc_fe_delsys == DVB_SYS_DVBS2) { mux->dmc_fe_modulation = mux->dmc_fe_delsys == DVB_SYS_DVBS2 ? DVB_MOD_PSK_8 : DVB_MOD_QPSK; mux->u.dmc_fe_qpsk.fec_inner = DVB_FEC_AUTO; mux->dmc_fe_rolloff = DVB_ROLLOFF_35; if ((x = htsmsg_get_str(l, "MODULATION"))) if ((mux->dmc_fe_modulation = dvb_str2qam(x)) == -1) mux_fail(r, "wrong modulation '%s'", x); if ((x = htsmsg_get_str(l, "INNER_FEC"))) if ((mux->u.dmc_fe_qpsk.fec_inner = dvb_str2fec(x)) == -1) mux_fail(r, "wrong inner FEC '%s'", x); if ((x = htsmsg_get_str(l, "INVERSION"))) if ((mux->dmc_fe_inversion = dvb_str2inver(x)) == -1) mux_fail(r, "wrong inversion '%s'", x); if ((x = htsmsg_get_str(l, "ROLLOFF"))) if ((mux->dmc_fe_rolloff = dvb_str2rolloff(x)) == -1) mux_fail(r, "wrong rolloff '%s'", x); if ((x = htsmsg_get_str(l, "PILOT"))) if ((mux->dmc_fe_pilot = dvb_str2rolloff(x)) == -1) mux_fail(r, "wrong pilot '%s'", x); if (htsmsg_get_s32(l, "STREAM_ID", &r)) { mux->dmc_fe_stream_id = DVB_NO_STREAM_ID_FILTER; mux->dmc_fe_pls_mode = 0; mux->dmc_fe_pls_code = 1; } else { mux->dmc_fe_stream_id = r&0xff; mux->dmc_fe_pls_mode = (r>>26)&0x3; mux->dmc_fe_pls_code = (r>>8)&0x3FFFF; } if ((x = htsmsg_get_str(l, "POLARIZATION"))) { char pol[2]; pol[0] = x[0]; pol[1] = '\0'; if ((mux->u.dmc_fe_qpsk.polarisation = dvb_str2pol(pol)) == -1) mux_fail(r, "wrong polarisation '%s'", x); } else { mux_fail0(r, "dvb-s: undefined polarisation"); } if (htsmsg_get_u32(l, "SYMBOL_RATE", &mux->u.dmc_fe_qpsk.symbol_rate)) mux_fail0(r, "dvb-s: undefined symbol rate"); } else if (mux->dmc_fe_delsys == DVB_SYS_DVBC_ANNEX_A ||