Implemented the CableDeliverySystemDescriptor in libdtv

This commit is contained in:
Klaus Schmidinger
2003-05-10 09:25:14 +02:00
parent dc8fd12f91
commit 91b5114838
5 changed files with 69 additions and 5 deletions

View File

@@ -1054,6 +1054,28 @@ struct SatelliteDeliverySystemDescriptor {
((struct SatelliteDeliverySystemDescriptor *)descr)->FEC = fec; \
} while (0)
/* CableDeliverySystemDescriptor */
struct CableDeliverySystemDescriptor {
struct NODE Node;
unsigned short Tag;
long Frequency;
long SymbolRate;
char FEC;
char Modulation;
};
#define CreateCableDeliverySystemDescriptor(descr, freq, sr, fec, mod) \
do \
{ \
xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \
((struct CableDeliverySystemDescriptor *)descr)->Tag = DESCR_CABLE_DEL_SYS; \
((struct CableDeliverySystemDescriptor *)descr)->Frequency = freq; \
((struct CableDeliverySystemDescriptor *)descr)->SymbolRate = sr; \
((struct CableDeliverySystemDescriptor *)descr)->FEC = fec; \
((struct CableDeliverySystemDescriptor *)descr)->Modulation = mod; \
} while (0)
/* ServiceListDescriptor */
struct ServiceListDescriptor {

View File

@@ -540,6 +540,19 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
}
break;
case DESCR_CABLE_DEL_SYS:
{
struct CableDeliverySystemDescriptor *cds =
(struct CableDeliverySystemDescriptor *)Descriptor;
printf ("%sDescriptor: Cable Delivery System\n", Prepend);
printf ("%s Frequency: %ld\n", Prepend, cds->Frequency);
printf ("%s SymbolRate: %ld\n", Prepend, cds->SymbolRate);
printf ("%s FEC: %d\n", Prepend, cds->FEC);
printf ("%s Modulation: %d\n", Prepend, cds->Modulation);
}
break;
case DESCR_SERVICE_LIST:
{
struct ServiceListEntry *Entry;
@@ -572,7 +585,6 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
break;
case DESCR_STUFFING:
case DESCR_CABLE_DEL_SYS:
case DESCR_VBI_DATA:
case DESCR_VBI_TELETEXT:
case DESCR_MOSAIC:
@@ -598,7 +610,7 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
case DESCR_CELL_FREQ_LINK:
case DESCR_ANNOUNCEMENT_SUPPORT:
default:
printf ("%sDescriptor: (noch nicht unterst<73>tzt)\n", Prepend);
printf ("%sDescriptor: %02x (noch nicht unterst<73>tzt)\n", Prepend, DescriptorTag (Descriptor));
break;
}
}

View File

@@ -1064,6 +1064,36 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
}
break;
case DESCR_CABLE_DEL_SYS:
// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer));
{
descr_cable_delivery_system_t *cds;
cds = (descr_cable_delivery_system_t *) Ptr;
if (CheckBcdChar (cds->frequency1) && CheckBcdChar (cds->frequency2) &&
CheckBcdChar (cds->frequency3) && CheckBcdChar (cds->frequency4) &&
CheckBcdChar (cds->symbol_rate1) && CheckBcdChar (cds->symbol_rate1) &&
CheckBcdChar (cds->symbol_rate3) && (cds->fec_inner != 0))
{
CreateCableDeliverySystemDescriptor (Descriptor,
BcdCharToInt (cds->frequency1) * 100 * 1000 * 1000 +
BcdCharToInt (cds->frequency2) * 1000 * 1000 +
BcdCharToInt (cds->frequency3) * 10 * 1000 +
BcdCharToInt (cds->frequency4) * 100,
BcdCharToInt (cds->symbol_rate1) * 10 * 1000 +
BcdCharToInt (cds->symbol_rate2) * 100 +
BcdCharToInt (cds->symbol_rate3),
cds->fec_inner,
cds->modulation
);
}
/* else
{
fprintf (stderr, "Illegal cds descriptor\n");
siDumpDescriptor (Buffer);
} */
}
break;
case DESCR_SERVICE_LIST:
// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer));
CreateServiceListDescriptor (Descriptor);
@@ -1119,7 +1149,6 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
case DESCR_SMOOTHING_BUFFER:
case DESCR_STD:
case DESCR_IBP:
case DESCR_CABLE_DEL_SYS:
case DESCR_VBI_DATA:
case DESCR_VBI_TELETEXT:
case DESCR_MOSAIC:
@@ -1181,7 +1210,6 @@ char *siGetDescriptorTextHandler (u_char *Buffer, int Length, int type)
if ((*Buffer >= ' ' && *Buffer <= '~') || (*Buffer == '\n') ||
(*Buffer >= 0xa0 && *Buffer <= 0xff)) *tmp++ = *Buffer;
if (*Buffer == 0x8A) *tmp++ = '\n';
if (*Buffer == 0x86 || *Buffer == 0x87) *tmp++ = ' ';
if ((*Buffer == 0x86 || *Buffer == 0x87) && !(GDT_NAME_DESCRIPTOR & type)) *tmp++ = ' ';
Buffer++;
}