transponder::transponder(const transponder_id_t t_id, const FrontendParameters p_feparams) { transponder_id = t_id; transport_stream_id = GET_TRANSPORT_STREAM_ID_FROM_TRANSPONDER_ID(t_id); original_network_id = GET_ORIGINAL_NETWORK_ID_FROM_TRANSPONDER_ID(t_id); feparams = p_feparams; updated = false; satellitePosition = GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(transponder_id); if (satellitePosition & 0xF000) satellitePosition = -(satellitePosition & 0xFFF); else satellitePosition = satellitePosition & 0xFFF; }
void SaveServices(bool tocopy) { transponder_id_t tpid = 0; FILE * fd = 0; bool updated = 0; tallchans_iterator ccI; tallchans_iterator dI; transponder_list_t::iterator tI; char tpstr[256]; bool tpdone = 0; bool satdone = 0; int processed = 0; sat_iterator_t spos_it; updated = 0; dprintf(DEBUG_INFO, "total channels: %d\n", allchans.size()); fd = fopen(SERVICES_TMP, "w"); if(!fd) { perror(SERVICES_TMP); return; } // headers fprintf(fd, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zapit api=\"3\">\n"); // loop througth satpos for (spos_it = satellitePositions.begin(); spos_it != satellitePositions.end(); spos_it++) { satdone = 0; // loop througth TPs for(tI = transponders.begin(); tI != transponders.end(); tI++) { t_satellite_position satpos = GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tI->first) & 0xFFF; tpdone = 0; if(GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tI->first) & 0xF000) satpos = -satpos; if(satpos != spos_it->first) { dprintf(DEBUG_DEBUG, "Sat position %d not found !!\n", satpos); continue; } switch(spos_it->second.type) { case DVB_S: sprintf(tpstr, "\t\t<TS id=\"%04x\" on=\"%04x\" frq=\"%u\" inv=\"%hu\" sr=\"%u\" fec=\"%hu\" pol=\"%hu\">\n", tI->second.transport_stream_id, tI->second.original_network_id, tI->second.feparams.frequency, tI->second.feparams.inversion, tI->second.feparams.u.qpsk.symbol_rate, tI->second.feparams.u.qpsk.fec_inner, tI->second.polarization); break; case DVB_C: sprintf(tpstr, "\t\t<TS id=\"%04x\" on=\"%04x\" frq=\"%u\" inv=\"%hu\" sr=\"%u\" fec=\"%hu\" mod=\"%hu\">\n", tI->second.transport_stream_id, tI->second.original_network_id, tI->second.feparams.frequency, tI->second.feparams.inversion, tI->second.feparams.u.qam.symbol_rate, tI->second.feparams.u.qam.fec_inner, tI->second.feparams.u.qam.modulation); break; case DVB_T: sprintf(tpstr, "\t\t<TS id=\"%04x\" on=\"%04x\" frq=\"%u\" inv=\"%hu\" band=\"%hu\" HP=\"%hu\" LP=\"%hu\" const=\"%hu\" trans=\"%hu\" guard=\"%hu\" hierarchy=\"%hu\">\n", tI->second.transport_stream_id, tI->second.original_network_id, tI->second.feparams.frequency, tI->second.feparams.inversion, tI->second.feparams.u.ofdm.bandwidth, tI->second.feparams.u.ofdm.code_rate_HP, tI->second.feparams.u.ofdm.code_rate_LP, tI->second.feparams.u.ofdm.constellation,tI->second.feparams.u.ofdm.transmission_mode, tI->second.feparams.u.ofdm.guard_interval, tI->second.feparams.u.ofdm.hierarchy_information); break; default: break; } tpid = tI->first; // loop througth channels for (ccI = allchans.begin(); ccI != allchans.end(); ccI++) { if(ccI->second.getTransponderId() == tpid) { if(!satdone) { switch(spos_it->second.type) { case DVB_S: { fprintf(fd, "\t<sat name=\"%s\" position=\"%hd\" diseqc=\"%hd\" uncommited=\"%hd\">\n",spos_it->second.name.c_str(), spos_it->first, spos_it->second.diseqc, spos_it->second.uncommited); } break; case DVB_C: { fprintf(fd, "\t<cable name=\"%s\">\n", spos_it->second.name.c_str()); } break; case DVB_T: { fprintf(fd, "\t<terrestrial name=\"%s\">\n", spos_it->second.name.c_str()); } break; default: break; } satdone = 1; } if(!tpdone) { fprintf(fd, "%s", tpstr); tpdone = 1; } if(ccI->second.getPidsFlag()) { fprintf(fd, "\t\t\t<S i=\"%04x\" n=\"%s\" v=\"%x\" a=\"%x\" p=\"%x\" pmt=\"%x\" tx=\"%x\" t=\"%x\" vt=\"%d\" s=\"%d\"/>\n", ccI->second.getServiceId(), convert_UTF8_To_UTF8_XML(ccI->second.getName().c_str()).c_str(), ccI->second.getVideoPid(), ccI->second.getPreAudioPid(), ccI->second.getPcrPid(), ccI->second.getPmtPid(), ccI->second.getTeletextPid(), ccI->second.getServiceType(true), ccI->second.videoType, ccI->second.scrambled); } else { fprintf(fd, "\t\t\t<S i=\"%04x\" n=\"%s\" t=\"%x\" s=\"%d\"/>\n", ccI->second.getServiceId(), convert_UTF8_To_UTF8_XML(ccI->second.getName().c_str()).c_str(), ccI->second.getServiceType(true), ccI->second.scrambled); } processed++; } } if(tpdone) fprintf(fd, "\t\t</TS>\n"); } if(satdone) { switch(spos_it->second.type) { case DVB_S: fprintf(fd, "\t</sat>\n"); break; case DVB_C: fprintf(fd, "\t</cable>\n"); break; case DVB_T: fprintf(fd, "\t</terrestrial>\n"); break; default: break; } } } fprintf(fd, "</zapit>\n"); fclose(fd); // create zapit ordner if missed struct stat statInfo; int res = stat(CONFIGDIR "/zapit", &statInfo); if (res == -1) { if (errno == ENOENT) { res = safe_mkdir((char *)CONFIGDIR "/zapit"); if (res != 0) perror("[getservices] mkdir"); } else { perror("[getservices] stat"); } } if(tocopy) { zapit_cp((char *) SERVICES_TMP, (char *) SERVICES_XML); unlink(SERVICES_TMP); } dprintf(DEBUG_INFO, "processed channels: %d\n", processed); }
bool CServiceManager::SaveCurrentServices(transponder_id_t tpid) { channel_map_iterator_t ccI; channel_map_iterator_t dI; transponder_list_t::iterator tI; char satstr[256]; char buffer[256]; FILE * fd = 0; FILE * fd1 = 0; bool updated = 0; bool tpdone = 0; bool satfound = 0; tI = transponders.find(tpid); if(tI == transponders.end()) { printf("[sdt monitor] tp not found ?!\n"); return false; } t_satellite_position satellitePosition = GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tpid) & 0xFFF; if(GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tpid) & 0xF000) satellitePosition = -satellitePosition; fd = fopen(CURRENTSERVICES_TMP, "w"); if(!fd) { printf("[sdt monitor] " CURRENTSERVICES_TMP ": cant open!\n"); return false; } sat_iterator_t spos_it = satellitePositions.find(satellitePosition); if(spos_it == satellitePositions.end()){ fclose(fd); return false; } switch (CFrontend::getInstance()->getInfo()->type) { case FE_QPSK: /* satellite */ sprintf(satstr, "\t<%s name=\"%s\" position=\"%hd\">\n", "sat", spos_it->second.name.c_str(), satellitePosition); break; case FE_QAM: /* cable */ sprintf(satstr, "\t<%s name=\"%s\"\n", "cable", spos_it->second.name.c_str()); break; case FE_OFDM: default: break; } fd1 = fopen(CURRENTSERVICES_XML, "r"); if(!fd1) { fprintf(fd, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zapit>\n"); } else { fgets(buffer, 255, fd1); while(!feof(fd1) && !strstr(buffer, satfound ? "</sat>" : "</zapit>")) { if(!satfound && !strcmp(buffer, satstr)) satfound = 1; fputs(buffer, fd); fgets(buffer, 255, fd1); } } for (channel_map_iterator_t cI = curchans.begin(); cI != curchans.end(); cI++) { ccI = allchans.find(cI->second.getChannelID()); if(ccI == allchans.end()) { WriteCurrentService(fd, satfound, tpdone, updated, satstr, tI->second, cI->second, "add"); } else { if(strcmp(cI->second.getName().c_str(), ccI->second.getName().c_str()) || cI->second.scrambled != ccI->second.scrambled) { WriteCurrentService(fd, satfound, tpdone, updated, satstr, tI->second, cI->second, "replace"); } } } for (ccI = allchans.begin(); ccI != allchans.end(); ccI++) { if(ccI->second.getTransponderId() == tpid) { dI = curchans.find(ccI->second.getChannelID()); if(dI == curchans.end()) WriteCurrentService(fd, satfound, tpdone, updated, satstr, tI->second, ccI->second, "remove"); } } if(tpdone) { fprintf(fd, "\t\t</TS>\n"); fprintf(fd, "\t</sat>\n"); } else if(satfound) fprintf(fd, "\t</sat>\n"); if(fd1) { fgets(buffer, 255, fd1); while(!feof(fd1)) { fputs(buffer, fd); fgets(buffer, 255, fd1); } if(!satfound) fprintf(fd, "</zapit>\n"); fclose(fd1); } else fprintf(fd, "</zapit>\n"); fclose(fd); rename(CURRENTSERVICES_TMP, CURRENTSERVICES_XML); return updated; }
int CTPSelectHandler::exec(CMenuTarget* parent, const std::string &actionkey) { transponder_list_t::iterator tI; sat_iterator_t sit; t_satellite_position position = 0; std::map<int, transponder> tmplist; std::map<int, transponder>::iterator tmpI; int i; char cnt[5]; int select = -1; static int old_selected = 0; static t_satellite_position old_position = 0; if (parent) parent->hide(); //loop throught satpos for(sit = satellitePositions.begin(); sit != satellitePositions.end(); sit++) { if(!strcmp(sit->second.name.c_str(), CNeutrinoApp::getInstance()->getScanSettings().satNameNoDiseqc)) { position = sit->first; break; } } if(old_position != position) { old_selected = 0; old_position = position; } printf("CTPSelectHandler::exec: fe(%d) %s position(%d)\n", feindex, CNeutrinoApp::getInstance()->getScanSettings().satNameNoDiseqc, position); CMenuWidget * menu = new CMenuWidget(LOCALE_SCANTS_SELECT_TP, NEUTRINO_ICON_SETTINGS); CMenuSelectorTarget * selector = new CMenuSelectorTarget(&select); // intros //menu->addItem(GenericMenuSeparator); i = 0; for(tI = select_transponders.begin(); tI != select_transponders.end(); tI++) { t_satellite_position satpos = GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tI->first) & 0xFFF; if(GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tI->first) & 0xF000) satpos = -satpos; if(satpos != position) continue; char buf[128]; sprintf(cnt, "%d", i); char * f, *s, *m; switch(CFrontend::getInstance(feindex)->getInfo()->type) { case FE_QPSK: { CFrontend::getInstance(feindex)->getDelSys(tI->second.feparams.u.qpsk.fec_inner, dvbs_get_modulation(tI->second.feparams.u.qpsk.fec_inner), f, s, m); snprintf(buf, sizeof(buf), "%d %c %d %s %s %s ", tI->second.feparams.frequency/1000, tI->second.polarization ? 'V' : 'H', tI->second.feparams.u.qpsk.symbol_rate/1000, f, s, m); } break; case FE_QAM: { CFrontend::getInstance(feindex)->getDelSys(tI->second.feparams.u.qam.fec_inner, tI->second.feparams.u.qam.modulation, f, s, m); snprintf(buf, sizeof(buf), "%d %d %s %s %s ", tI->second.feparams.frequency/1000, tI->second.feparams.u.qam.symbol_rate/1000, f, s, m); } break; case FE_OFDM: { CFrontend::getInstance(feindex)->getDelSys(tI->second.feparams.u.ofdm.code_rate_HP, tI->second.feparams.u.ofdm.constellation, f, s, m); snprintf(buf, sizeof(buf), "%d %s %s %s ", tI->second.feparams.frequency/1000, f, s, m); } break; case FE_ATSC: break; } menu->addItem(new CMenuForwarderNonLocalized(buf, true, NULL, selector, cnt), old_selected == i); tmplist.insert(std::pair <int, transponder>(i, tI->second)); i++; } int retval = menu->exec(NULL, ""); delete menu; delete selector; if(select >= 0) { old_selected = select; tmpI = tmplist.find(select); //printf("CTPSelectHandler::exec: selected TP: freq %d pol %d SR %d\n", tmpI->second.feparams.frequency, tmpI->second.polarization, tmpI->second.feparams.u.qpsk.symbol_rate); sprintf(get_set.TP_freq, "%d", tmpI->second.feparams.frequency); switch(CFrontend::getInstance(feindex)->getInfo()->type) { case FE_QPSK: printf("CTPSelectHandler::exec: fe(%d) selected TP: freq %d pol %d SR %d fec %d\n", feindex, tmpI->second.feparams.frequency, tmpI->second.polarization, tmpI->second.feparams.u.qpsk.symbol_rate, tmpI->second.feparams.u.qpsk.fec_inner); sprintf(get_set.TP_rate, "%d", tmpI->second.feparams.u.qpsk.symbol_rate); get_set.TP_fec = tmpI->second.feparams.u.qpsk.fec_inner; get_set.TP_pol = tmpI->second.polarization; break; case FE_QAM: printf("CTPSelectHandler::exec: fe(%d) selected TP: freq %d SR %d fec %d mod %d\n", feindex, tmpI->second.feparams.frequency, tmpI->second.feparams.u.qpsk.symbol_rate, tmpI->second.feparams.u.qam.fec_inner, tmpI->second.feparams.u.qam.modulation); sprintf(get_set.TP_rate, "%d", tmpI->second.feparams.u.qam.symbol_rate); get_set.TP_fec = tmpI->second.feparams.u.qam.fec_inner; get_set.TP_mod = tmpI->second.feparams.u.qam.modulation; break; case FE_OFDM: { printf("CTPSelectHandler::exec: fe(%d) selected TP: freq %d band %d HP %d LP %d const %d trans %d guard %d hierarchy %d\n", feindex, tmpI->second.feparams.frequency, tmpI->second.feparams.u.ofdm.bandwidth, tmpI->second.feparams.u.ofdm.code_rate_HP, tmpI->second.feparams.u.ofdm.code_rate_LP, tmpI->second.feparams.u.ofdm.constellation, tmpI->second.feparams.u.ofdm.transmission_mode, tmpI->second.feparams.u.ofdm.guard_interval, tmpI->second.feparams.u.ofdm.hierarchy_information); get_set.TP_band = tmpI->second.feparams.u.ofdm.bandwidth; get_set.TP_HP = tmpI->second.feparams.u.ofdm.code_rate_HP; get_set.TP_LP = tmpI->second.feparams.u.ofdm.code_rate_LP; get_set.TP_const = tmpI->second.feparams.u.ofdm.constellation; get_set.TP_trans = tmpI->second.feparams.u.ofdm.transmission_mode; get_set.TP_guard = tmpI->second.feparams.u.ofdm.guard_interval; get_set.TP_hierarchy = tmpI->second.feparams.u.ofdm.hierarchy_information; } break; case FE_ATSC: break; } } if(retval == menu_return::RETURN_EXIT_ALL) return menu_return::RETURN_EXIT_ALL; return menu_return::RETURN_REPAINT; }
void CServiceManager::SaveServices(bool tocopy) { transponder_id_t tpid = 0; FILE * fd = 0; bool updated = 0; channel_map_iterator_t ccI; channel_map_iterator_t dI; transponder_list_t::iterator tI; bool tpdone = 0; bool satdone = 0; int processed = 0; sat_iterator_t spos_it; updated = 0; #ifdef SAVE_DEBUG set<t_channel_id> chans_processed; DBG("\nChannel size: %d\n", sizeof(CZapitChannel)); #endif printf("total channels: %d\n", allchans.size()); fd = fopen(SERVICES_TMP, "w"); if(!fd) { perror(SERVICES_TMP); return; } fprintf(fd, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zapit api=\"3\">\n"); for (spos_it = satellitePositions.begin(); spos_it != satellitePositions.end(); spos_it++) { satdone = 0; #ifdef SAVE_DEBUG printf("Process sat: %s\n", spos_it->second.name.c_str()); printf("processed channels: %d\n", chans_processed.size()); printf("tp count: %d\n", transponders.size()); #endif for(tI = transponders.begin(); tI != transponders.end(); tI++) { t_satellite_position satpos = GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tI->first) & 0xFFF; tpdone = 0; if(GET_SATELLITEPOSITION_FROM_TRANSPONDER_ID(tI->first) & 0xF000) satpos = -satpos; if(satpos != spos_it->first) { #ifdef SAVE_DEBUG printf("Sat position %d not found !!\n", satpos); #endif continue; } tpid = tI->first; for (ccI = allchans.begin(); ccI != allchans.end(); ccI++) { if(ccI->second.getTransponderId() == tpid) { if(!satdone) { WriteSatHeader(fd, spos_it->second); satdone = 1; } if(!tpdone) { WriteTransponderHeader(fd, tI->second); tpdone = 1; } ccI->second.dumpServiceXml(fd); processed++; #ifdef SAVE_DEBUG chans_processed.insert(ccI->second.getChannelID()); #endif } } if(tpdone) fprintf(fd, "\t\t</TS>\n"); } if(satdone) { switch (CFrontend::getInstance()->getInfo()->type) { case FE_QPSK: fprintf(fd, "\t</sat>\n"); break; case FE_QAM: fprintf(fd, "\t</cable>\n"); break; default: break; } } } fprintf(fd, "</zapit>\n"); fclose(fd); if(tocopy) { CopyFile((char *) SERVICES_TMP, (char *) SERVICES_XML); unlink(SERVICES_TMP); } #ifdef SAVE_DEBUG printf("processed channels: %d\n", chans_processed.size()); int i = 0; for (channel_map_iterator_t it = allchans.begin(); it != allchans.end(); it++) if (chans_processed.find(it->first) == chans_processed.end()) printf("unused channel %d sat %d freq %d sid %04X: %s\n", ++i, it->second.getSatellitePosition(), it->second.getFreqId(), it->second.getServiceId(), it->second.getName().c_str()); chans_processed.clear(); #endif printf("processed channels: %d\n", processed); }