diff --git a/lib/libtriple/Makefile.am b/lib/libtriple/Makefile.am index 5d98bf2db..6c436a258 100644 --- a/lib/libtriple/Makefile.am +++ b/lib/libtriple/Makefile.am @@ -13,6 +13,7 @@ AM_CPPFLAGS = -fno-rtti -fno-exceptions libtriple_a_SOURCES = \ lt_debug.cpp \ dmx_td.cpp \ + ca.cpp \ video_td.cpp \ audio_td.cpp \ init_td.cpp \ diff --git a/lib/libtriple/ca.cpp b/lib/libtriple/ca.cpp new file mode 100644 index 000000000..f8d1bade6 --- /dev/null +++ b/lib/libtriple/ca.cpp @@ -0,0 +1,110 @@ +#include + +#include "ca.h" +#include "lt_debug.h" + +static const char *FILENAME = "ca.cpp"; + +static cCA *inst = NULL; + +/* those are all dummies for now.. */ +cCA::cCA(void) +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); +} + +cCA::~cCA() +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); +} + +cCA *cCA::GetInstance() +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); + if (inst == NULL) + inst = new cCA(); + + return inst; +} + +void cCA::MenuEnter(enum CA_SLOT_TYPE, uint32_t p) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} + +void cCA::MenuAnswer(enum CA_SLOT_TYPE, uint32_t p, uint32_t /*choice*/) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} + +void cCA::InputAnswer(enum CA_SLOT_TYPE, uint32_t p, uint8_t * /*Data*/, int /*Len*/) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} + +void cCA::MenuClose(enum CA_SLOT_TYPE, uint32_t p) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} + +uint32_t cCA::GetNumberCISlots(void) +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); + return 0; +} + +uint32_t cCA::GetNumberSmartCardSlots(void) +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); + return 0; +} + +void cCA::ModuleName(enum CA_SLOT_TYPE, uint32_t p, char * /*Name*/) +{ + /* TODO: waht to do with *Name? */ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} + +bool cCA::ModulePresent(enum CA_SLOT_TYPE, uint32_t p) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); + return false; +} + +void cCA::ModuleReset(enum CA_SLOT_TYPE, uint32_t p) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} + +bool cCA::SendPMT(int, unsigned char *, int, CA_SLOT_TYPE) +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); + return true; +} + +bool cCA::SendMessage(const CA_MESSAGE *) +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); + return true; +} + +bool cCA::Start(void) +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); + return true; +} + +void cCA::Stop(void) +{ + lt_debug("%s:%s\n", FILENAME, __FUNCTION__); +} + +void cCA::Ready(bool p) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} + +void cCA::SetInitMask(enum CA_INIT_MASK p) +{ + lt_debug("%s:%s param:%d\n", FILENAME, __FUNCTION__, (int)p); +} diff --git a/lib/libtriple/ca.h b/lib/libtriple/ca.h new file mode 100644 index 000000000..8a29e5604 --- /dev/null +++ b/lib/libtriple/ca.h @@ -0,0 +1,97 @@ +/* + * dummy functions to implement ca_cs.h interface + */ +#ifndef __CA_LIBTRIPLE_H_ +#define __CA_LIBTRIPLE_H_ + +#include +/* used in cam_menu.cpp */ +typedef uint32_t u32; + +enum CA_INIT_MASK { + CA_INIT_SC = 1, + CA_INIT_CI, + CA_INIT_BOTH +}; + +enum CA_SLOT_TYPE { + CA_SLOT_TYPE_SMARTCARD, + CA_SLOT_TYPE_CI, + CA_SLOT_TYPE_ALL, +}; + +enum CA_MESSAGE_FLAGS { + CA_MESSAGE_EMPTY = (1 << 0), + CA_MESSAGE_HAS_PARAM1_DATA = (1 << 1), // Free after use! + CA_MESSAGE_HAS_PARAM1_INT = (1 << 2), + CA_MESSAGE_HAS_PARAM1_PTR = (1 << 3), + CA_MESSAGE_HAS_PARAM2_INT = (1 << 4), + CA_MESSAGE_HAS_PARAM2_PTR = (1 << 5), + CA_MESSAGE_HAS_PARAM2_DATA = (1 << 6), + CA_MESSAGE_HAS_PARAM3_DATA = (1 << 7), // Free after use! + CA_MESSAGE_HAS_PARAM3_INT = (1 << 8), + CA_MESSAGE_HAS_PARAM3_PTR = (1 << 9), + CA_MESSAGE_HAS_PARAM4_INT = (1 << 10), + CA_MESSAGE_HAS_PARAM4_PTR = (1 << 11), + CA_MESSAGE_HAS_PARAM4_DATA = (1 << 12), + CA_MESSAGE_HAS_PARAM_LONG = (1 << 13), +}; + +enum CA_MESSAGE_MSGID { + CA_MESSAGE_MSG_INSERTED, + CA_MESSAGE_MSG_REMOVED, + CA_MESSAGE_MSG_INIT_OK, + CA_MESSAGE_MSG_INIT_FAILED, + CA_MESSAGE_MSG_MMI_MENU, + CA_MESSAGE_MSG_MMI_MENU_ENTER, + CA_MESSAGE_MSG_MMI_MENU_ANSWER, + CA_MESSAGE_MSG_MMI_LIST, + CA_MESSAGE_MSG_MMI_TEXT, + CA_MESSAGE_MSG_MMI_REQ_INPUT, + CA_MESSAGE_MSG_MMI_CLOSE, + CA_MESSAGE_MSG_INTERNAL, + CA_MESSAGE_MSG_PMT_ARRIVED, + CA_MESSAGE_MSG_CAT_ARRIVED, + CA_MESSAGE_MSG_ECM_ARRIVED, + CA_MESSAGE_MSG_EMM_ARRIVED, + CA_MESSAGE_MSG_CHANNEL_CHANGE, + CA_MESSAGE_MSG_EXIT, +}; + +typedef struct CA_MESSAGE { + uint32_t MsgId; + enum CA_SLOT_TYPE SlotType; + int Slot; + uint32_t Flags; + union { + uint8_t *Data[4]; + uint32_t Param[4]; + void *Ptr[4]; + uint64_t ParamLong; + } Msg; +} CA_MESSAGE; + +class cCA { +private: + cCA(void); +public: + uint32_t GetNumberCISlots(void); + uint32_t GetNumberSmartCardSlots(void); + static cCA *GetInstance(void); + bool SendPMT(int Unit, unsigned char *Data, int Len, CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); + bool SendMessage(const CA_MESSAGE *Msg); + void SetInitMask(enum CA_INIT_MASK InitMask); + bool Start(void); + void Stop(void); + void Ready(bool Set); + void ModuleReset(enum CA_SLOT_TYPE, uint32_t Slot); + bool ModulePresent(enum CA_SLOT_TYPE, uint32_t Slot); + void ModuleName(enum CA_SLOT_TYPE, uint32_t Slot, char *Name); + void MenuEnter(enum CA_SLOT_TYPE, uint32_t Slot); + void MenuAnswer(enum CA_SLOT_TYPE, uint32_t Slot, uint32_t choice); + void InputAnswer(enum CA_SLOT_TYPE, uint32_t Slot, uint8_t * Data, int Len); + void MenuClose(enum CA_SLOT_TYPE, uint32_t Slot); + virtual ~cCA(); +}; + +#endif // __CA_LIBTRIPLE_H_ diff --git a/lib/libtriple/ca_cs.h b/lib/libtriple/ca_cs.h new file mode 100644 index 000000000..dae70d6f1 --- /dev/null +++ b/lib/libtriple/ca_cs.h @@ -0,0 +1 @@ +#include "ca.h" diff --git a/lib/libtriple/mmi.h b/lib/libtriple/mmi.h new file mode 100644 index 000000000..76ff99279 --- /dev/null +++ b/lib/libtriple/mmi.h @@ -0,0 +1,23 @@ +#ifndef __MMI_H_ +#define __MMI_H_ + +#define MAX_MMI_ITEMS 40 +#define MAX_MMI_TEXT_LEN 255 +#define MAX_MMI_CHOICE_TEXT_LEN 255 + +typedef struct { + int choice_nb; + char title[MAX_MMI_TEXT_LEN]; + char subtitle[MAX_MMI_TEXT_LEN]; + char bottom[MAX_MMI_TEXT_LEN]; + char choice_item[MAX_MMI_ITEMS][MAX_MMI_CHOICE_TEXT_LEN]; +} MMI_MENU_LIST_INFO; + +typedef struct { + int blind; + int answerlen; + char enguiryText[MAX_MMI_TEXT_LEN]; +} MMI_ENGUIRY_INFO; + +#endif // __MMI_H_ +