add datetime mgr
authorRonny Strutz <ronny.strutz@multimedia-labs.de>
Fri, 12 Aug 2005 20:15:04 +0000 (20:15 +0000)
committerRonny Strutz <ronny.strutz@multimedia-labs.de>
Fri, 12 Aug 2005 20:15:04 +0000 (20:15 +0000)
lib/dvb_ci/Makefile.am
lib/dvb_ci/dvbci_datetimemgr.cpp [new file with mode: 0644]
lib/dvb_ci/dvbci_datetimemgr.h [new file with mode: 0644]
lib/dvb_ci/dvbci_session.cpp

index 9b70269ebe5538de2323c168240d2bb4c521e6ef..f26002814035ba45a1dfbf396db3fc7ed34a31d5 100644 (file)
@@ -4,5 +4,6 @@ INCLUDES = \
 noinst_LIBRARIES = libenigma_dvb_ci.a
 
 libenigma_dvb_ci_a_SOURCES = dvbci.cpp dvbci_session.cpp dvbci_resmgr.cpp \
-                                                                                                                dvbci_appmgr.cpp dvbci_camgr.cpp
+                                                                                                                dvbci_appmgr.cpp dvbci_camgr.cpp \
+                                                                                                                dvbci_datetimemgr.cpp
 
diff --git a/lib/dvb_ci/dvbci_datetimemgr.cpp b/lib/dvb_ci/dvbci_datetimemgr.cpp
new file mode 100644 (file)
index 0000000..5d2c61d
--- /dev/null
@@ -0,0 +1,46 @@
+/* DVB CI DateTime Manager */
+
+#include <lib/dvb_ci/dvbci_datetimemgr.h>
+
+int eDVBCIDateTimeSession::receivedAPDU(const unsigned char *tag,const void *data, int len)
+{
+       printf("SESSION(%d)/DATETIME %02x %02x %02x: ", session_nb, tag[0],tag[1], tag[2]);
+       for (int i=0; i<len; i++)
+               printf("%02x ", ((const unsigned char*)data)[i]);
+       printf("\n");
+
+       if ((tag[0]==0x9f) && (tag[1]==0x84))
+       {
+               switch (tag[2])
+               {
+               case 0x40:
+                       state=stateSendDateTime;
+                       return 1;
+                       break;
+               default:
+                       printf("unknown APDU tag 9F 84 %02x\n", tag[2]);
+                       break;
+               }
+       }
+       return 0;
+}
+
+int eDVBCIDateTimeSession::doAction()
+{
+       switch (state)
+       {
+       case stateStarted:
+               return 0;
+       case stateSendDateTime:
+       {
+               unsigned char tag[3]={0x9f, 0x84, 0x41}; // date_time_response
+               unsigned char msg[7]={0, 0, 0, 0, 0, 0, 0};
+               sendAPDU(tag, msg, 7);
+               return 0;
+       }
+       case stateFinal:
+               printf("stateFinal und action! kann doch garnicht sein ;)\n");
+       default:
+               return 0;
+       }
+}
diff --git a/lib/dvb_ci/dvbci_datetimemgr.h b/lib/dvb_ci/dvbci_datetimemgr.h
new file mode 100644 (file)
index 0000000..7134ad4
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef __dvbci_dvbci_datetimemgr_h
+#define __dvbci_dvbci_datetimemgr_h
+
+#include <lib/dvb_ci/dvbci_session.h>
+
+class eDVBCIDateTimeSession: public eDVBCISession
+{
+       enum {
+               stateFinal=statePrivate, stateSendDateTime
+       };
+       int receivedAPDU(const unsigned char *tag, const void *data, int len);
+       int doAction();
+public:
+};
+
+#endif
index ab997e5d827a857580e098e3e15f869b837ac24f..a9c26d16c6d980f6848cdc3961c2f65f7a74b571 100644 (file)
@@ -4,6 +4,7 @@
 #include <lib/dvb_ci/dvbci_resmgr.h>
 #include <lib/dvb_ci/dvbci_appmgr.h>
 #include <lib/dvb_ci/dvbci_camgr.h>
+#include <lib/dvb_ci/dvbci_datetimemgr.h>
 
 int eDVBCISession::buildLengthField(unsigned char *pkt, int len)
 {
@@ -138,7 +139,7 @@ eDVBCISession *eDVBCISession::createSession(eDVBCISlot *slot, const unsigned cha
                printf("CA MANAGER\n");
                break;
        case 0x00240041:
-//             session=new eDVBCIDateTimeSession;
+               session=new eDVBCIDateTimeSession;
                printf("DATE-TIME\n");
                break;
        case 0x00400041: