Merge 03b20992b6
into e9f2f5788c
This commit is contained in:
commit
aba235d864
|
@ -1,4 +1,4 @@
|
|||
all: cit citin flashprog modt ddtest setmod ddflash setmod2 pls setmod3
|
||||
all: cit citin flashprog modt ddtest setmod ddflash setmod2 pls setmod3 modcod
|
||||
|
||||
cit: cit.c
|
||||
$(CC) -o cit cit.c -lpthread
|
||||
|
@ -15,6 +15,9 @@ setmod2: setmod2.c
|
|||
setmod3: setmod3.c
|
||||
$(CC) -o setmod3 setmod3.c -I../include/
|
||||
|
||||
modcod: modcod.c
|
||||
$(CC) -o modcod modcod.c -I../include/
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
|
|
|
@ -0,0 +1,257 @@
|
|||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <pthread.h>
|
||||
#include <stdbool.h>
|
||||
#include <linux/dvb/mod.h>
|
||||
|
||||
|
||||
bool supportedsx8(const enum fe_modulation mod, const enum fe_code_rate fec)
|
||||
{
|
||||
switch(mod)
|
||||
{
|
||||
case QPSK:
|
||||
if(fec == FEC_1_2 || fec == FEC_3_5 || fec == FEC_2_3 || fec == FEC_3_4 || fec == FEC_4_5 || fec == FEC_5_6 || fec == FEC_8_9 || fec == FEC_9_10 /**/ || fec == FEC_1_4 || fec == FEC_1_3 || fec == FEC_2_5 || fec == FEC_11_45 || fec == FEC_4_15 || fec == FEC_14_45 || fec == FEC_7_15 || fec == FEC_8_15 || fec == FEC_32_45 )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
case PSK_8:
|
||||
if(fec == FEC_3_5 || fec == FEC_2_3 || fec == FEC_3_4 || fec == FEC_5_6 || fec == FEC_8_9 || fec == FEC_9_10 /**/ || fec == FEC_7_15 || fec == FEC_8_15 || fec == FEC_26_45 || fec == FEC_32_45)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
case APSK_16:
|
||||
if(fec == FEC_2_3 || fec == FEC_3_4 || fec == FEC_4_5 || fec == FEC_5_6 || fec == FEC_8_9 || fec == FEC_9_10 /**/ || fec == FEC_7_15 || fec == FEC_8_15 || fec == FEC_26_45 || fec == FEC_3_5 || fec == FEC_32_45)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
case APSK_32:
|
||||
if(fec == FEC_3_4 || fec == FEC_4_5 || fec == FEC_5_6 || fec == FEC_8_9 || fec == FEC_9_10 /**/ || fec == FEC_2_3 || fec == FEC_32_45)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
case APSK_64:
|
||||
if(fec == FEC_32_45_L || fec == FEC_11_15 || fec == FEC_7_9 || fec == FEC_4_5 || fec == FEC_5_6)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
case APSK_128:
|
||||
if(fec == FEC_3_4 || fec == FEC_7_9 || fec == FEC_29_45_L || fec == FEC_2_3_L)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
case APSK_256:
|
||||
if(fec == FEC_31_45_L || fec == FEC_32_45 || fec == FEC_11_15_L || fec == FEC_3_4)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
default:
|
||||
return false;
|
||||
};
|
||||
return false;
|
||||
}
|
||||
|
||||
char* modulation2text(const enum fe_modulation mod)
|
||||
{
|
||||
switch(mod)
|
||||
{
|
||||
case QPSK:
|
||||
return "QPSK";
|
||||
case QAM_16:
|
||||
return "16QAM";
|
||||
case QAM_32:
|
||||
return "32QAM";
|
||||
case QAM_64:
|
||||
return "64QAM";
|
||||
case QAM_128:
|
||||
return "128QAM";
|
||||
case QAM_256:
|
||||
return "256QAM";
|
||||
case QAM_AUTO:
|
||||
return "QAM_AUTO";
|
||||
case VSB_8:
|
||||
return "8VSB";
|
||||
case VSB_16:
|
||||
return "16VSB";
|
||||
case PSK_8:
|
||||
return "8PSK";
|
||||
case APSK_16:
|
||||
return "16APSK";
|
||||
case APSK_32:
|
||||
return "32APSK";
|
||||
case DQPSK:
|
||||
return "DQPSK";
|
||||
case QAM_4_NR:
|
||||
return "QAM_4_NR";
|
||||
case APSK_64:
|
||||
return "64APSK";
|
||||
case APSK_128:
|
||||
return "128APSK";
|
||||
case APSK_256:
|
||||
return "256APSK";
|
||||
case APSK_8:
|
||||
return "8APSK";
|
||||
default:
|
||||
return "MODULATION_NONE";
|
||||
};
|
||||
}
|
||||
|
||||
char* fec2text(const enum fe_code_rate fec)
|
||||
{
|
||||
switch(fec)
|
||||
{
|
||||
case FEC_1_2:
|
||||
return "1/2";
|
||||
case FEC_2_3:
|
||||
return "2/3";
|
||||
case FEC_3_4:
|
||||
return "3/4";
|
||||
case FEC_4_5:
|
||||
return "4/5";
|
||||
case FEC_5_6:
|
||||
return "5/6";
|
||||
case FEC_6_7:
|
||||
return "6/7";
|
||||
case FEC_7_8:
|
||||
return "7/8";
|
||||
case FEC_8_9:
|
||||
return "8/9";
|
||||
case FEC_AUTO:
|
||||
return "FEC_AUTO";
|
||||
case FEC_3_5:
|
||||
return "3/5";
|
||||
case FEC_9_10:
|
||||
return "9/10";
|
||||
case FEC_2_5:
|
||||
return "2/5";
|
||||
case FEC_1_4:
|
||||
return "1/4";
|
||||
case FEC_1_3:
|
||||
return "1/3";
|
||||
case FEC_13_45:
|
||||
return "13/45";
|
||||
case FEC_9_20:
|
||||
return "9/20";
|
||||
case FEC_11_20:
|
||||
return "11/20";
|
||||
case FEC_5_9_L:
|
||||
return "5/9-L";
|
||||
case FEC_26_45_L:
|
||||
return "26/45-L";
|
||||
case FEC_23_36:
|
||||
return "23/36";
|
||||
case FEC_25_36:
|
||||
return "25/36";
|
||||
case FEC_13_18:
|
||||
return "13/18";
|
||||
case FEC_1_2_L:
|
||||
return "1/2-L";
|
||||
case FEC_8_15_L:
|
||||
return "8/15-L";
|
||||
case FEC_26_45:
|
||||
return "26/45";
|
||||
case FEC_3_5_L:
|
||||
return "3/5-L";
|
||||
case FEC_28_45:
|
||||
return "28/45";
|
||||
case FEC_2_3_L:
|
||||
return "2/3-L";
|
||||
case FEC_7_9:
|
||||
return "7/9";
|
||||
case FEC_32_45_L:
|
||||
return "32/45-L";
|
||||
case FEC_77_90:
|
||||
return "77/90";
|
||||
case FEC_32_45:
|
||||
return "32/45";
|
||||
case FEC_11_15:
|
||||
return "11/15";
|
||||
case FEC_29_45_L:
|
||||
return "29/45-L";
|
||||
case FEC_31_45_L:
|
||||
return "31/45-L";
|
||||
case FEC_11_15_L:
|
||||
return "11/15-L";
|
||||
case FEC_11_45:
|
||||
return "11/45";
|
||||
case FEC_4_15:
|
||||
return "4/15";
|
||||
case FEC_14_45:
|
||||
return "14/45";
|
||||
case FEC_7_15:
|
||||
return "7/15";
|
||||
case FEC_8_15:
|
||||
return "8/15";
|
||||
default:
|
||||
return "FEC_NONE";
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
const enum fe_modulation modcod2modS2X[0x3D] = {
|
||||
MODULATION_NONE, MODULATION_NONE, //2
|
||||
QPSK, QPSK, QPSK, //3
|
||||
APSK_8, APSK_8,APSK_8,APSK_8,APSK_8, //5
|
||||
APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,//13
|
||||
APSK_32,MODULATION_NONE,APSK_32,APSK_32,APSK_32,//5
|
||||
APSK_64, APSK_64, MODULATION_NONE, APSK_64,MODULATION_NONE, APSK_64,MODULATION_NONE ,APSK_64,//8
|
||||
APSK_128, APSK_128,
|
||||
APSK_256, APSK_256,APSK_256,APSK_256,APSK_256,APSK_256,
|
||||
QPSK, QPSK,QPSK,QPSK,QPSK,QPSK,
|
||||
PSK_8,PSK_8,PSK_8,PSK_8,
|
||||
APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,
|
||||
APSK_32,APSK_32,
|
||||
};
|
||||
|
||||
const enum fe_code_rate modcod2fecS2X[0x3D] = {
|
||||
FEC_NONE, FEC_NONE, //2
|
||||
FEC_13_45, FEC_9_20, FEC_11_20, //3
|
||||
FEC_5_9_L, FEC_26_45_L, FEC_23_36, FEC_25_36, FEC_13_18, //5
|
||||
FEC_1_2_L, FEC_8_15_L, FEC_5_9_L, FEC_26_45, FEC_3_5, FEC_3_5_L, FEC_28_45, FEC_23_36,FEC_2_3_L, FEC_25_36, FEC_13_18,FEC_7_9, FEC_77_90, //13
|
||||
FEC_2_3_L, FEC_NONE, FEC_32_45, FEC_11_15, FEC_7_9,
|
||||
FEC_32_45_L, FEC_11_15,FEC_NONE ,FEC_7_9, FEC_NONE, FEC_4_5, FEC_NONE, FEC_5_6, //8
|
||||
FEC_3_4,FEC_7_9, FEC_29_45_L,FEC_2_3_L,FEC_31_45_L,FEC_32_45,FEC_11_15_L,
|
||||
FEC_3_4,FEC_11_45,FEC_4_15,FEC_14_45,FEC_7_15,FEC_8_15,
|
||||
FEC_32_45,FEC_7_15,FEC_8_15,FEC_26_45,FEC_32_45,FEC_7_15,
|
||||
FEC_8_15,FEC_26_45,FEC_3_5,FEC_32_45,FEC_2_3,FEC_32_45,
|
||||
};
|
||||
|
||||
|
||||
|
||||
uint8_t modcod;
|
||||
|
||||
modcod = 248;
|
||||
if(modcod2modS2X[((modcod & 0x7F) >> 1)] == APSK_32)
|
||||
printf("modcod2modS2X OK APSK_32=%s \r\n", modulation2text(modcod2modS2X[((modcod & 0x7F) >> 1)] ) );
|
||||
if(modcod2fecS2X[((modcod & 0x7F) >> 1)] == FEC_32_45)
|
||||
printf("modcod2modS2X OK FEC_32_45=%s\r\n", fec2text(modcod2fecS2X[((modcod & 0x7F) >> 1)]));
|
||||
printf("supported=%d\r\n\r\n", (uint16_t)supportedsx8(modcod2modS2X[((modcod & 0x7F) >> 1)], modcod2fecS2X[((modcod & 0x7F) >> 1)]));
|
||||
|
||||
modcod = 132;
|
||||
if(modcod2modS2X[((modcod & 0x7F) >> 1)] == QPSK)
|
||||
printf("modcod2modS2X OK QPSK=%s \r\n", modulation2text(modcod2modS2X[((modcod & 0x7F) >> 1)] ) );
|
||||
if(modcod2fecS2X[((modcod & 0x7F) >> 1)] == FEC_13_45)
|
||||
printf("modcod2modS2X OK FEC_13_45=%s\r\n", fec2text(modcod2fecS2X[((modcod & 0x7F) >> 1)]));
|
||||
printf("supported=%d\r\n\r\n", (uint16_t)supportedsx8(modcod2modS2X[((modcod & 0x7F) >> 1)], modcod2fecS2X[((modcod & 0x7F) >> 1)]));
|
||||
|
||||
modcod = 184;
|
||||
if(modcod2modS2X[((modcod & 0x7F) >> 1)] == APSK_64)
|
||||
printf("modcod2modS2X OK 64APSK=%s \r\n", modulation2text(modcod2modS2X[((modcod & 0x7F) >> 1)] ) );
|
||||
if(modcod2fecS2X[((modcod & 0x7F) >> 1)] == FEC_32_45_L)
|
||||
printf("modcod2modS2X OK FEC_32_45_L=%s\r\n", fec2text(modcod2fecS2X[((modcod & 0x7F) >> 1)]));
|
||||
printf("supported=%d\r\n\r\n", (uint16_t)supportedsx8(modcod2modS2X[((modcod & 0x7F) >> 1)], modcod2fecS2X[((modcod & 0x7F) >> 1)]));
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -249,6 +249,35 @@ void ddb_mci_proc_info(struct mci *mci, struct dtv_frontend_properties *p)
|
|||
ROLLOFF_35, ROLLOFF_25, ROLLOFF_20, ROLLOFF_10,
|
||||
ROLLOFF_5, ROLLOFF_15, ROLLOFF_35, ROLLOFF_35
|
||||
};
|
||||
|
||||
const enum fe_modulation modcod2modS2X[0x3D] = {
|
||||
MODULATION_NONE, MODULATION_NONE, //2
|
||||
QPSK, QPSK, QPSK, //3
|
||||
APSK_8, APSK_8,APSK_8,APSK_8,APSK_8, //5
|
||||
APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,//13
|
||||
APSK_32,MODULATION_NONE,APSK_32,APSK_32,APSK_32,//5
|
||||
APSK_64, APSK_64, MODULATION_NONE, APSK_64,MODULATION_NONE, APSK_64,MODULATION_NONE ,APSK_64,//8
|
||||
APSK_128, APSK_128,
|
||||
APSK_256, APSK_256,APSK_256,APSK_256,APSK_256,APSK_256,
|
||||
QPSK, QPSK,QPSK,QPSK,QPSK,QPSK,
|
||||
PSK_8,PSK_8,PSK_8,PSK_8,
|
||||
APSK_16,APSK_16,APSK_16,APSK_16,APSK_16,
|
||||
APSK_32,APSK_32,
|
||||
};
|
||||
|
||||
const enum fe_code_rate modcod2fecS2X[0x3D] = {
|
||||
FEC_NONE, FEC_NONE, //2
|
||||
FEC_13_45, FEC_9_20, FEC_11_20, //3
|
||||
FEC_5_9_L, FEC_26_45_L, FEC_23_36, FEC_25_36, FEC_13_18, //5
|
||||
FEC_1_2_L, FEC_8_15_L, FEC_5_9_L, FEC_26_45, FEC_3_5, FEC_3_5_L, FEC_28_45, FEC_23_36,FEC_2_3_L, FEC_25_36, FEC_13_18,FEC_7_9, FEC_77_90, //13
|
||||
FEC_2_3_L, FEC_NONE, FEC_32_45, FEC_11_15, FEC_7_9,
|
||||
FEC_32_45_L, FEC_11_15,FEC_NONE ,FEC_7_9, FEC_NONE, FEC_4_5, FEC_NONE, FEC_5_6, //8
|
||||
FEC_3_4,FEC_7_9, FEC_29_45_L,FEC_2_3_L,FEC_31_45_L,FEC_32_45,FEC_11_15_L,
|
||||
FEC_3_4,FEC_11_45,FEC_4_15,FEC_14_45,FEC_7_15,FEC_8_15,
|
||||
FEC_32_45,FEC_7_15,FEC_8_15,FEC_26_45,FEC_32_45,FEC_7_15,
|
||||
FEC_8_15,FEC_26_45,FEC_3_5,FEC_32_45,FEC_2_3,FEC_32_45,
|
||||
};
|
||||
|
||||
|
||||
p->frequency =
|
||||
mci->signal_info.dvbs2_signal_info.frequency;
|
||||
|
@ -266,15 +295,24 @@ void ddb_mci_proc_info(struct mci *mci, struct dtv_frontend_properties *p)
|
|||
(mci->signal_info.dvbs2_signal_info.standard == 2) ?
|
||||
SYS_DVBS2 : SYS_DVBS;
|
||||
if (mci->signal_info.dvbs2_signal_info.standard == 2) {
|
||||
u32 modcod = (0x7c & pls_code) >> 2;
|
||||
|
||||
p->delivery_system = SYS_DVBS2;
|
||||
p->rolloff =
|
||||
ro_lut[mci->signal_info.
|
||||
dvbs2_signal_info.roll_off & 7];
|
||||
p->pilot = (pls_code & 1) ? PILOT_ON : PILOT_OFF;
|
||||
p->fec_inner = modcod2fec[modcod];
|
||||
p->modulation = modcod2mod[modcod];
|
||||
if(pls_code & 0x80) //DVB-S2X
|
||||
{
|
||||
uint8_t modcodS2X = (pls_code & 0x7F) >> 1;
|
||||
p->fec_inner = modcod2fecS2X[modcodS2X];
|
||||
p->modulation = modcod2modS2X[modcodS2X];
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 modcod = (0x7c & pls_code) >> 2;
|
||||
p->fec_inner = modcod2fec[modcod];
|
||||
p->modulation = modcod2mod[modcod];
|
||||
}
|
||||
p->transmission_mode = pls_code;
|
||||
} else {
|
||||
p->delivery_system = SYS_DVBS;
|
||||
|
|
|
@ -314,6 +314,33 @@ enum fe_code_rate {
|
|||
FEC_2_5,
|
||||
FEC_1_4,
|
||||
FEC_1_3,
|
||||
FEC_13_45,
|
||||
FEC_9_20,
|
||||
FEC_11_20,
|
||||
FEC_5_9_L,
|
||||
FEC_26_45_L,
|
||||
FEC_23_36,
|
||||
FEC_25_36,
|
||||
FEC_13_18,
|
||||
FEC_1_2_L,
|
||||
FEC_8_15_L,
|
||||
FEC_26_45,
|
||||
FEC_3_5_L,
|
||||
FEC_28_45,
|
||||
FEC_2_3_L,
|
||||
FEC_7_9,
|
||||
FEC_32_45_L,
|
||||
FEC_77_90,
|
||||
FEC_32_45,
|
||||
FEC_11_15,
|
||||
FEC_29_45_L,
|
||||
FEC_31_45_L,
|
||||
FEC_11_15_L,
|
||||
FEC_11_45,
|
||||
FEC_4_15,
|
||||
FEC_14_45,
|
||||
FEC_7_15,
|
||||
FEC_8_15,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -354,6 +381,8 @@ enum fe_modulation {
|
|||
APSK_64,
|
||||
APSK_128,
|
||||
APSK_256,
|
||||
APSK_8,
|
||||
MODULATION_NONE,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue