#define CAPMT_CWMODE_OE22SW 2 // CA_SET_DESCR_MODE follows CA_SET_DESCR
#define CAPMT_CWMODE_OE20 3 // DES signalled through PID index
+// pmt modes
+#define CAPMT_PMTMODE_AUTO 0
+#define CAPMT_PMTMODE_INDEX 1 // mix enigma2 / PC boxtype messages
+#define CAPMT_PMTMODE_UNIVERSAL 2 // use fixed PC boxtype messages
+
// limits
#define MAX_CA 16
#define MAX_INDEX 128
int capmt_port;
int capmt_oscam;
int capmt_cwmode;
+ int capmt_pmtmode;
+ int capmt_oscam_rev;
/* capmt sockets */
int sids[MAX_SOCKETS];
uint16_t protover = sbuf_peek_u16(sb, offset);
int offset2 = offset + 2;
char *info = capmt_peek_str(sb, &offset2);
+ char *rev = info ? strstr(info, "build r") : NULL;
tvhinfo(LS_CAPMT, "%s: Connected to server '%s' (protocol version %d)", capmt_name(capmt), info, protover);
+ if (rev)
+ capmt->capmt_oscam_rev = strtol(rev + 7, NULL, 10);
free(info);
} else {
cmd_size -= 4;
offset = 4;
+ break;
}
} else if (cmd_size == 0)
break;
uint16_t onid = t->s_dvb_mux->mm_onid;
const int adapter_num = ct->ct_adapter;
const int wrapper = capmt_oscam_so_wrapper(capmt);
- const int pc_desc = !wrapper && adapter_num >= 8;
- int i;
+ int i, pc_desc = 0;
+
+ /* choose the PMT composing mode */
+ if (!wrapper) {
+ switch (capmt->capmt_pmtmode) {
+ case CAPMT_PMTMODE_INDEX:
+ pc_desc = 0;
+ break;
+ case CAPMT_PMTMODE_UNIVERSAL:
+ pc_desc = 1;
+ break;
+ default:
+ pc_desc = adapter_num >= 8 || capmt->capmt_oscam_rev >= 11396;
+ break;
+ }
+ }
/* buffer for capmt */
int pos = 0, pos2;
return strtab2htsmsg(tab, 1, lang);
}
+static htsmsg_t *
+caclient_capmt_class_pmtmode_list ( void *o, const char *lang )
+{
+ static const struct strtab tab[] = {
+ { N_("Auto"), CAPMT_PMTMODE_AUTO },
+ { N_("Byte index tag order"), CAPMT_PMTMODE_INDEX },
+ { N_("Universal tag order"), CAPMT_PMTMODE_UNIVERSAL },
+ };
+ return strtab2htsmsg(tab, 1, lang);
+}
+
CLASS_DOC(caclient)
const idclass_t caclient_capmt_class =
.def.i = CAPMT_CWMODE_AUTO,
.opts = PO_DOC_NLIST,
},
+ {
+ .type = PT_INT,
+ .id = "pmtmode",
+ .name = N_("PMT Mode"),
+ .desc = N_("PMT mode."),
+ .off = offsetof(capmt_t, capmt_pmtmode),
+ .list = caclient_capmt_class_pmtmode_list,
+ .def.i = CAPMT_PMTMODE_AUTO,
+ .opts = PO_DOC_NLIST,
+ },
{ }
}
};