From 91b51148385826769300454ad972a1623cfccb9e Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 10 May 2003 09:25:14 +0200 Subject: Implemented the CableDeliverySystemDescriptor in libdtv --- libdtv/libsi/include/libsi.h | 22 ++++++++++++++++++++++ libdtv/libsi/si_debug_services.c | 16 ++++++++++++++-- libdtv/libsi/si_parser.c | 32 ++++++++++++++++++++++++++++++-- 3 files changed, 66 insertions(+), 4 deletions(-) (limited to 'libdtv/libsi') diff --git a/libdtv/libsi/include/libsi.h b/libdtv/libsi/include/libsi.h index cd07fc6d..a5e587b2 100644 --- a/libdtv/libsi/include/libsi.h +++ b/libdtv/libsi/include/libsi.h @@ -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 { diff --git a/libdtv/libsi/si_debug_services.c b/libdtv/libsi/si_debug_services.c index ac8de34c..9138d803 100644 --- a/libdtv/libsi/si_debug_services.c +++ b/libdtv/libsi/si_debug_services.c @@ -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ützt)\n", Prepend); + printf ("%sDescriptor: %02x (noch nicht unterstützt)\n", Prepend, DescriptorTag (Descriptor)); break; } } diff --git a/libdtv/libsi/si_parser.c b/libdtv/libsi/si_parser.c index e8cf8b21..1ca311be 100644 --- a/libdtv/libsi/si_parser.c +++ b/libdtv/libsi/si_parser.c @@ -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++; } -- cgit v1.2.3