sectionsd aktualisiert Kanalliste

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

http://s11.yousendit.com/d.aspx?id=16NR ... BRYHQM3ZK4

Tja, dann muss ich eben auf dieses Feature verzichten. Also ist das Reload auskommentiert. Bitte testen: im /tmp wird currentservices.xml erstellt und beim Shutdown mit services.xml gemerged. Diesmal sind mehr debug-Ausgaben drin.

Würde mich freuen, wenn diese Version es schon ins CVS schaffen könnte.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Nur Geduld, schau es mir jetzt an ...
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Ich bin geduldig. :)

Ist mehr eine Maßnahme der distributiven Datensicherung.

Noch vergessen:

Code: Alles auswählen

--- /usr/local/src/tuxbox-cvs/apps/tuxbox/neutrino/configure.ac	2005-08-31 22:27:49.000000000 +0200
+++ /home/sebastian/tuxbox-cvs/apps/tuxbox/neutrino/configure.ac	2005-11-10 23:04:56.000000000 +0100
@@ -44,6 +44,12 @@
          [  --enable-restore-prev-mode          enable return from graphics mode],
          [AC_DEFINE(RETURN_FROM_GRAPHICS_MODE,1,[enable return from graphics mode])])
 
+AC_ARG_ENABLE(use-libxml2,
+   [  --enable-use-libxml2    use libxml2 instead of libxmltree],
+      [AC_DEFINE(USE_LIBXML,1,[use libxml2 instead of libxmltree])
+               TUXBOX_APPS_LIB_PKGCONFIG(XML,libxml-2.0)],
+                       [TUXBOX_APPS_LIB_PKGCONFIG(XML,tuxbox-xmltree)])
+
 AC_OUTPUT([
 Makefile
 lib/Makefile
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

Code: Alles auswählen

RCS file: /cvs/tuxbox/apps/dvb/zapit/include/zapit/settings.h,v
retrieving revision 1.14
diff -u -r1.14 settings.h
--- settings.h  19 Jun 2005 14:28:22 -0000      1.14
+++ settings.h  14 Nov 2005 20:29:15 -0000
@@ -38,6 +38,8 @@
 #define SERVICES_XML    ZAPITCONFIGDIR "/services.xml"
 #define MYSERVICES_XML  ZAPITCONFIGDIR "/myservices.xml"
 #define ANTISERVICES_XML ZAPITCONFIGDIR "/antiservices.xml"
+#define CURRENTSERVICES_XML   "/tmp/currentservices.xml"
+#define CURRENTSERVICES_TMP   "/tmp/currentservices.tmp"
 #define SERVICES_TMP    "/tmp/services.tmp"
 #define BOUQUETS_XML    ZAPITCONFIGDIR "/bouquets.xml"
 #define BOUQUETS_TMP    "/tmp/bouquets.tmp"
Fehlt IMHO auch noch (oder ich habe etwas übersehen).

Edit:

Code: Alles auswählen

rcinput.cpp:868: error: `EVT_SERVICES_UPD' is not a member of `NeutrinoMessages'
EVT_SERVICES_UPD ist auch noch nicht in der neutrinoMessages.h definiert

Gruß
mogway
Zuletzt geändert von mogway am Montag 14. November 2005, 21:54, insgesamt 3-mal geändert.
Metallica
Einsteiger
Einsteiger
Beiträge: 191
Registriert: Dienstag 30. Dezember 2003, 01:49

Beitrag von Metallica »

Ein Workaround für Channel-Reload.
in zapit.cpp
case CZapitMessages::CMD_REINIT_CHANNELS:
{
int c = ((currentMode & RADIO_MODE) ? bouquetManager->radioChannelsBegin() : bouquetManager->tvChannelsBegin()).getLowestChannelNumberWithChannelID(channel->getChannelID());

CZapitMessages::responseCmd response;
prepare_channels(frontend->getInfo()->type, diseqcType);
response.cmd = CZapitMessages::CMD_READY;
CBasicServer::send_data(connfd, &response, sizeof(response));
eventServer->sendEvent(CZapitClient::EVT_BOUQUETS_CHANGED, CEventServer::INITID_ZAPIT);

if (c >= 0)
zapTo(c);

break;
}
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

@mogway

Wo habe ich bloß meinen Kopf? Ich habe echt schon eine Liste gemacht, mit den gepatchten Dateien. Neutrinomessages steht nicht drauf... :(

Code: Alles auswählen

--- /usr/local/src/tuxbox-cvs/apps/tuxbox/neutrino/src/neutrinoMessages.h	2005-03-28 16:14:21.000000000 +0200
+++ /home/sebastian/tuxbox-cvs/apps/tuxbox/neutrino/src/neutrinoMessages.h	2005-11-12 14:40:07.000000000 +0100
@@ -133,7 +133,10 @@
 		EVT_ZAP_GOTPIDS                          = CRCInput::RC_WithData + 21, /* data: (t_channel_id *) */
 
 		/* neutrino */
-		EVT_RECORDING_ENDED                      = CRCInput::RC_WithData + 22
+		EVT_RECORDING_ENDED                      = CRCInput::RC_WithData + 22,
+		
+		/* sectionsd */
+		EVT_SERVICES_UPD                         = CRCInput::RC_WithData + 23  /* data: (t_tranponder_id *) */
 	};
 	enum
 	{
@Metallica

Prima, gleich mal testen ob es auch für mein Reload läuft.
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Ach und die currentservices.xml liegen besser im /tmp

Code: Alles auswählen

--- /usr/local/src/tuxbox-cvs/apps/dvb/zapit/include/zapit/settings.h	2005-06-19 16:28:22.000000000 +0200
+++ /home/sebastian/tuxbox-cvs/apps/dvb/zapit/include/zapit/settings.h	2005-11-09 14:07:53.000000000 +0100
@@ -26,32 +26,34 @@
 
 
 #ifdef HAVE_CONFIG_H
-#include                "config.h"
+#include                	"config.h"
 #else
-#define CONFIGDIR       "/var/tuxbox/config"
+#define CONFIGDIR       	"/var/tuxbox/config"
 #endif
 
-#define ZAPITCONFIGDIR  CONFIGDIR "/zapit"
+#define ZAPITCONFIGDIR  	CONFIGDIR "/zapit"
 
-#define CONFIGFILE      ZAPITCONFIGDIR "/zapit.conf"
-#define MOTORCONFIGFILE ZAPITCONFIGDIR "/motor.conf"
-#define SERVICES_XML    ZAPITCONFIGDIR "/services.xml"
-#define MYSERVICES_XML  ZAPITCONFIGDIR "/myservices.xml"
-#define ANTISERVICES_XML ZAPITCONFIGDIR "/antiservices.xml"
-#define SERVICES_TMP    "/tmp/services.tmp"
-#define BOUQUETS_XML    ZAPITCONFIGDIR "/bouquets.xml"
-#define BOUQUETS_TMP    "/tmp/bouquets.tmp"
-
-#define CABLES_XML      DATADIR "/cables.xml"
-#define SATELLITES_XML  DATADIR "/satellites.xml"
-#define TERRESTRIAL_XML DATADIR "/terrestrial.xml"
-
-#define AUDIO_DEVICE    "/dev/dvb/adapter0/audio0"
-#define DEMUX_DEVICE    "/dev/dvb/adapter0/demux0"
-#define FRONTEND_DEVICE "/dev/dvb/adapter0/frontend0"
-#define VIDEO_DEVICE    "/dev/dvb/adapter0/video0"
+#define CONFIGFILE		ZAPITCONFIGDIR "/zapit.conf"
+#define MOTORCONFIGFILE		ZAPITCONFIGDIR "/motor.conf"
+#define SERVICES_XML		ZAPITCONFIGDIR "/services.xml"
+#define MYSERVICES_XML		ZAPITCONFIGDIR "/myservices.xml"
+#define ANTISERVICES_XML	ZAPITCONFIGDIR "/antiservices.xml"
+#define SERVICES_TMP    	"/tmp/services.tmp"
+#define BOUQUETS_XML    	ZAPITCONFIGDIR "/bouquets.xml"
+#define BOUQUETS_TMP    	"/tmp/bouquets.tmp"
+#define CURRENTSERVICES_XML	"/tmp/currentservices.xml"
+#define CURRENTSERVICES_TMP	"/tmp/currentservices.tmp"
+
+#define CABLES_XML      	DATADIR "/cables.xml"
+#define SATELLITES_XML  	DATADIR "/satellites.xml"
+#define TERRESTRIAL_XML 	DATADIR "/terrestrial.xml"
+
+#define AUDIO_DEVICE    	"/dev/dvb/adapter0/audio0"
+#define DEMUX_DEVICE    	"/dev/dvb/adapter0/demux0"
+#define FRONTEND_DEVICE 	"/dev/dvb/adapter0/frontend0"
+#define VIDEO_DEVICE    	"/dev/dvb/adapter0/video0"
 
-#define CAMD_UDS_NAME  "/tmp/camd.socket"
+#define CAMD_UDS_NAME  		"/tmp/camd.socket"
 
 
 #endif /* __zapit__settings_h__ */
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Ein Workaround für Channel-Reload.
Mist zu langsam...
hier ist mein Fix.

Code: Alles auswählen

--- apps/tuxbox/neutrino-051109/src/neutrino.cpp	2005-10-09 21:02:10.000000000 +0200
+++ apps/tuxbox/neutrino/src/neutrino.cpp	2005-11-14 23:12:41.000000000 +0100
@@ -3736,6 +3736,9 @@
 		if((old_id == 0) || (!(channelList->adjustToChannelID(old_id))))
 			channelList->zapTo(0);
 
+		// Houdini: after channels have been reloaded, g_Zapit's actual channel is the initial channel from zapit.conf
+		// so zap to old channel (what is when in record mode?)
+		g_Zapit->zapTo_serviceID_NOWAIT(old_id);
 		return messages_return::handled;
 	}
 	else if (msg == NeutrinoMessages::RECORD_START) 
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

Irgendwie scheinen sich bei der Aktion remove die Einträge in der servicex.xml zu vermehren.

Code: Alles auswählen

<channel action="remove" service_id="314e" name="T-Systems Kanal 2" service_type="01"/>

Code: Alles auswählen

<channel service_id="314e" name="T-Systems Kanal 2" service_type="01"/>
<channel service_id="3143" name="Wartezimmer TV" service_type="0c"/>
<channel service_id="314e" name="T-Systems Kanal 2" service_type="01"/>
Beim neu laden der Kanalliste scheint zapit die doppelten service_id's nicht zu mögen und schmiert ab. Log hab ich grad nicht, sorry ;)

Das Phänomen habe ich bei folgenden Astra Sendern beobachten können:

Code: Alles auswählen

<transponder id="0459" onid="0001" frequency="12633250" inversion="2" symbol_rate="22000000" fec_inner="5" polarization="0">
   <channel service_id="3143" name="Wartezimmer TV" service_type="0c"/>
   <channel service_id="314e" name="T-Systems Kanal 2" service_type="01"/>
</transponder>
Gruß
mogway
Zuletzt geändert von mogway am Dienstag 15. November 2005, 12:18, insgesamt 1-mal geändert.
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Thanks a lot.

I see what is die problem. :wink:
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

wenn Nirvana jetzt nochmal alles zusammenpackt wäre das prima :)
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

kann es sein, das die bouquets.cpp auch was verändern muss ?
(cd .libs && rm -f libzapsi.la && ln -s ../libzapsi.la libzapsi.la)
make[4]: Leaving directory `/home/image/tuxbox-cvs/apps/dvb/zapit/src/zapsi'
make[4]: Entering directory `/home/image/tuxbox-cvs/apps/dvb/zapit/src'
if powerpc-tuxbox-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I. -I.. -I../include -I/home/image/dbox2/cdkroot/include/tuxbox -I/home/image/dbox2/cdkroot/include/tuxbox/connection -I/home/image/dbox2/cdkroot/include/tuxbox/xmltree -DSKIP_CA_STATUS -I/home/image/tuxbox-cvs/driver/include -I/home/image/tuxbox-cvs/driver/dvb/include -I/home/image/dbox2/cdkroot/include/tuxbox -Werror -Wall -mcpu=823 -mmultiple -mstring -meabi -pipe -Os -fno-rtti -fno-exceptions -MT bouquets.o -MD -MP -MF ".deps/bouquets.Tpo" -c -o bouquets.o bouquets.cpp; \
then mv -f ".deps/bouquets.Tpo" ".deps/bouquets.Po"; else rm -f ".deps/bouquets.Tpo"; exit 1; fi
../include/zapit/getservices.h: In member function `void
CBouquetManager::saveBouquets(CZapitClient::bouquetMode, const char*)':
../include/zapit/getservices.h:46: error: too few arguments to function `int
LoadServices(fe_type, diseqc_t, bool)'
bouquets.cpp:288: error: at this point in file
make[4]: *** [bouquets.o] Fehler 1
Metallica
Einsteiger
Einsteiger
Beiträge: 191
Registriert: Dienstag 30. Dezember 2003, 01:49

Beitrag von Metallica »

jo ,
LoadServices(frontend->getInfo()->type, frontend->getDiseqcType(),false);
oder true , kA ;)
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

:) also Metallica. wenn dus es nicht weißt.

Code: Alles auswählen

LoadServices(frontend->getInfo()->type, frontend->getDiseqcType(),false);
damit hat er die zapit weitergebaut.
neutrino werd ich gleich bauen. wenn ihr nix schlechtes lest, hats gefunzt
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

Metallica hat geschrieben:jo ,
LoadServices(frontend->getInfo()->type, frontend->getDiseqcType(),false);
oder true , kA ;)
Ich habe die false Variante genommen. ;)

Gruß
mogway
Gruss
mogway
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

http://s62.yousendit.com/d.aspx?id=07FG ... CBONXQLBUP

Aber ich bin ungeduldig, ja? ;)

- alle(?) patches
- mogway's bug gefixed
- Houdini's fix integriert (Ich habe keinen Plan, welcher Fix da besser ist...)
- in zapit den Aufruf des automatischen Kanallisten Reload wieder einkommentiert

Mit der letzten Sache bin ich noch nicht ganz glücklich. Da sollten auch nur die Unterschiede behandelt werden, statt eines kompletten Reloads. Aber über die Bouquets rede ich wie gesagt später.
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

Nirvana hat geschrieben:- mogway's bug gefixed
- in zapit den Aufruf des automatischen Kanallisten Reload wieder einkommentiert
Magst du für mich bitte nur die Änderungen posten/mailen.

Danke!

Gruß
mogway
Gruss
mogway
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

oder maile die kompletten dateien, oder nen diff auf die dateien von vorher. damit man sieht was neu ist. ich blick auch net mehr durch :gruebel:
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Ja,

Code: Alles auswählen

--- /LaufwerkS/Sourcen/C/backup3/tuxbox-cvs/apps/dvb/zapit/src/zapit.cpp	2005-11-14 16:52:52.000000000 +0100
+++ /home/sebastian/tuxbox-cvs/apps/dvb/zapit/src/zapit.cpp	2005-11-15 14:25:20.000000000 +0100
@@ -299,6 +299,23 @@
 	}
 }
 
+xmlNodePtr getNextNode(xmlNodePtr node, t_service_id sid)
+{	
+	xmlNodePtr NextNode = NULL;
+	while (xmlGetNextOccurence(node, "channel") != NULL) {
+		if (xmlGetNumericAttribute(node, "service_id", 16) > sid) {
+		 	if (NextNode == NULL)
+		 		NextNode = node;
+			else {
+				if (xmlGetNumericAttribute(node, "service_id", 16) < xmlGetNumericAttribute(NextNode, "service_id", 16))
+					NextNode = node;
+			}
+		}
+		node = node->xmlNextNode;
+	}
+	return NextNode;
+}
+
 void merge_transponder(FILE * tmp, xmlNodePtr transponder, xmlNodePtr current_transponder, const bool is_sat)
 {
 	std::string name;
@@ -309,8 +326,8 @@
 	
 	write_transponder_node(tmp, transponder, is_sat);
 	
-	xmlNodePtr node = transponder->xmlChildrenNode;
-	xmlNodePtr current_node = current_transponder->xmlChildrenNode;
+	xmlNodePtr node = getNextNode(transponder->xmlChildrenNode, 0);
+	xmlNodePtr current_node = getNextNode(current_transponder->xmlChildrenNode, 0);
 	
 	//as long one of the pointers has got services
 	while ( (xmlGetNextOccurence(node, "channel") != NULL) || (xmlGetNextOccurence(current_node, "channel") != NULL) ) {
@@ -327,7 +344,7 @@
 					remove = true;
 				else {
 					take_from_current = true;
-					node = node->xmlNextNode;
+					node = getNextNode(transponder->xmlChildrenNode, xmlGetNumericAttribute(node, "service_id", 16));
 				}
 			}
 			//Add service
@@ -351,7 +368,7 @@
 					xmlGetNumericAttribute(current_node, "service_id", 16),
 					UTF8_to_UTF8XML(name.c_str()).c_str(),
 					xmlGetNumericAttribute(current_node, "service_type", 16));
-				current_node = current_node->xmlNextNode;		
+				current_node = getNextNode(current_transponder->xmlChildrenNode, xmlGetNumericAttribute(current_node, "service_id", 16));
 			} else {
 				name = xmlGetAttribute(node, "name");
 				fprintf(tmp,
@@ -359,12 +376,12 @@
 					xmlGetNumericAttribute(node, "service_id", 16),
 					UTF8_to_UTF8XML(name.c_str()).c_str(),
 					xmlGetNumericAttribute(node, "service_type", 16));
-				node = node->xmlNextNode;
+				node = getNextNode(transponder->xmlChildrenNode, xmlGetNumericAttribute(node, "service_id", 16));
 			}
 		}
 		else {
-			current_node = current_node->xmlNextNode;
-			node = node->xmlNextNode;
+			current_node = getNextNode(current_transponder->xmlChildrenNode, xmlGetNumericAttribute(current_node, "service_id", 16));
+			node = getNextNode(transponder->xmlChildrenNode, xmlGetNumericAttribute(node, "service_id", 16));
 		}
 	}
 }
@@ -1078,13 +1095,11 @@
 	case CZapitMessages::CMD_RELOAD_CURRENTSERVICES:
 	{
 		CZapitMessages::responseCmd response;
-		/*
 		transponders.clear();
 		bouquetManager->clearAll();
 		allchans.clear();  // <- this invalidates all bouquets, too!
 		LoadServices(frontend->getInfo()->type, diseqcType, false); //true for only loading currentservices...
 		bouquetManager->loadBouquets();
-		*/
 		response.cmd = CZapitMessages::CMD_READY;
 		CBasicServer::send_data(connfd, &response, sizeof(response));
 		eventServer->sendEvent(CZapitClient::EVT_BOUQUETS_CHANGED, CEventServer::INITID_ZAPIT);
Aber da ist noch was. Ich hatte das Reload nach jedem kompletten SDT mit Änderungen veranlasst. Das geht auch, aber ist ineffizient (zu viele Meldungen). Deshalb wartet der sectionsd nun bis der sdt-thread wieder schlafen geht und sagt erst dann, dass neue Services da sind.
Und weil ich schon mit NIT angefangen habe musst du für diese Änderung auch wieder das komplette sectionsd-Verzeichnis machen. Dazu neutrinomessges.h und rcinput.cpp.
Mit anderen Worten. Alles neu. Sorry.

Wartet mal, ich mach mal vom sectionsd Verzeichnis ein diff. Vielleicht nützt das was.
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Ich hoffe mal, das sind jetzt alle Änderungen gegenüber der letzten Version.

http://s26.yousendit.com/d.aspx?id=2HH1 ... HDR9V7OI7V
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

Code: Alles auswählen

sectionsd.cpp: In function `void* nitThread(void*)':
sectionsd.cpp:3515: error: `nit' undeclared (first use this function)
sectionsd.cpp:3515: error: (Each undeclared identifier is reported only once for each function it appears in.)
Edit:
Habs erst einmal auskommentiert.

Gruß
mogway
Gruss
mogway
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Der tut sowieso noch nix.
mogway
Semiprofi
Semiprofi
Beiträge: 1287
Registriert: Montag 30. Dezember 2002, 08:02

Beitrag von mogway »

Nirvana hat geschrieben:Der tut sowieso noch nix.
Darum ja. ;)

Der Rest scheint auf dem ersten Blick zu gehen.

Gruß
mogway
Gruss
mogway
PauleFoul
Wissender
Wissender
Beiträge: 1839
Registriert: Sonntag 17. August 2003, 01:39

Beitrag von PauleFoul »

funktioniert soweit alles...

Ich denke die nächsten Schritte sollten sein:

1. Ab ins CVS um Entwicklungskollisionen zu vermeiden.
2. Funktion abschaltbar machen (will / braucht nicht jeder)


Gruß
____Paule
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

2. Funktion abschaltbar machen (will / braucht nicht jeder)

Ist abschaltbar: scanType=4 in scan.conf (ungetestet...)