source: svn/trunk/newcon3bcm2_21bu/BSEAV/lib/scte65/nit/si_nit_cds.c

Last change on this file was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 4.6 KB
Line 
1/***************************************************************
2**
3** Broadcom Corp. Confidential
4** Copyright 2003-2008 Broadcom Corp. All Rights Reserved.
5**
6** THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED
7** SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM.
8** YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT
9** SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
10**
11** File:                si_nit_cds.c
12** Description: function that parses the CDS subtable of the NIT
13**              table section.
14**
15** Created: 03/08/2001
16**
17** REVISION:
18**
19** $Log: $
20**
21**
22****************************************************************/
23
24#include "si.h"
25#include "si_os.h"
26#include "si_dbg.h"
27#include "si_util.h"
28#include "si_nit_cds.h"
29
30/* the carrier frequency table as defined by one or more CDS subtable in NIT */
31/* later in SVCT, the CDS__reference should be the index for this table to find */
32/* a particular carrier frequency for a Virtual channel. */
33/* the frequency is described in KHz unit. */
34unsigned long NIT_CDS_Freq_KHZ_Table[NIT_CDS_MAX_NUM_OF_CARRIRE_INDEX];
35unsigned long Total_NIT_CDS_carriers = 0;
36static SI_CDS_Callback_t *s_CDS_Callback = NULL;
37
38
39void SI_NIT_CDS_Init (SI_CDS_Callback_t *cb)
40{
41        SI_memset(NIT_CDS_Freq_KHZ_Table, 0, sizeof(NIT_CDS_Freq_KHZ_Table));
42        Total_NIT_CDS_carriers = 0;
43        s_CDS_Callback = cb;
44}
45
46/*********************************************************************/
47/* Function : SI_NIT_CDS_parse                                                                           */
48/* Description : Function to parse the CDS subtable and populate the */
49/*               carrier freq table.                                                             */
50/* Input : cds_record, point to the current ith CDS subtable         */
51/*            defined in NIT table section. There may be up to       */
52/*            number_of_record CDS subtables defined in NIT table    */
53/*            section. See table 5.1 of DVS234.                                          */
54/*         idx, point to the carrier index where the carriers        */
55/*                        defined in this CDS will be located.                                   */
56/* Output : The number of carriers defined in this CDS. It can be    */
57/*                      used to increment the first_index in the NIT table  to   */
58/*                      be passed as idx of this function.                                               */
59/*********************************************************************/
60unsigned char SI_NIT_CDS_parse (unsigned char * cds_record, unsigned char idx)
61{
62        unsigned long num_of_carriers;
63        unsigned long frequency_spacing;
64        unsigned long first_carrier_frequency;
65        unsigned long unit, unitnum;
66        long    i;
67
68        SI_DBG_PRINT(E_SI_DBG_MSG,("NIT CDS Table received.\n"));
69       
70        num_of_carriers = SI_Construct_Data(cds_record, 
71                                                NIT_CDS_NUMBER_OF_CARRIERS_BYTE_INDX,
72                                                NIT_CDS_NUMBER_OF_CARRIERS_BYTE_NUM,
73                                                NIT_CDS_NUMBER_OF_CARRIERS_SHIFT,
74                                                NIT_CDS_NUMBER_OF_CARRIERS_MASK);
75
76        unit = SI_Construct_Data(cds_record, 
77                        NIT_CDS_SPACING_UNIT_BYTE_INDX,
78                        NIT_CDS_SPACING_UNIT_BYTE_NUM,
79                        NIT_CDS_SPACING_UNIT_BYTE_SHIFT,
80                        NIT_CDS_SPACING_UNIT_BYTE_MASK);
81        unitnum = (unit?NIT_CDS_SPACING_UNIT1:NIT_CDS_SPACING_UNIT0);
82        frequency_spacing = SI_Construct_Data(cds_record, 
83                        NIT_CDS_FREQUENCY_SPACING_BYTE_INDX,
84                        NIT_CDS_FREQUENCY_SPACING_BYTE_NUM,
85                        NIT_CDS_FREQUENCY_SPACING_BYTE_SHIFT,
86                        NIT_CDS_FREQUENCY_SPACING_BYTE_MASK);
87        SI_DBG_PRINT(E_SI_DBG_MSG,("freq space %x, unit %d kHz, real space %d\n", frequency_spacing, unitnum, frequency_spacing*unitnum));             
88        frequency_spacing *= unitnum;
89       
90        unit = SI_Construct_Data(cds_record, 
91                        NIT_CDS_FREQUENCY_UNIT_BYTE_INDX,
92                        NIT_CDS_FREQUENCY_UNIT_BYTE_NUM,
93                        NIT_CDS_FREQUENCY_UNIT_BYTE_SHIFT,
94                        NIT_CDS_FREQUENCY_UNIT_BYTE_MASK);
95        unitnum = (unit?NIT_CDS_FREQUENCY_UNIT1:NIT_CDS_FREQUENCY_UNIT0);
96
97        first_carrier_frequency = SI_Construct_Data(cds_record, 
98                        NIT_CDS_FIRST_CARRIER_FREQUENCY_BYTE_INDX,
99                        NIT_CDS_FIRST_CARRIER_FREQUENCY_BYTE_NUM,
100                        NIT_CDS_FIRST_CARRIER_FREQUENCY_BYTE_SHIFT,
101                        NIT_CDS_FIRST_CARRIER_FREQUENCY_BYTE_MASK);
102        SI_DBG_PRINT(E_SI_DBG_MSG,("1st freq %x, unit %d kHz, real freq %d\n", first_carrier_frequency, unitnum, first_carrier_frequency*unitnum));             
103        first_carrier_frequency *= unitnum;
104
105        SI_DBG_PRINT(E_SI_DBG_MSG,("NIT CDS num of carriers %x, spacing %d kHz, first freq %d kHz.\n", num_of_carriers, frequency_spacing, first_carrier_frequency));
106        SI_DBG_PRINT(E_SI_DBG_MSG,("NIT CDS Actual Freqs defined (from index %x):\n", idx));
107        for (i=0; i<num_of_carriers; i++)
108        {
109                NIT_CDS_Freq_KHZ_Table[idx+i] = first_carrier_frequency + i*frequency_spacing;
110                SI_DBG_PRINT(E_SI_DBG_MSG,("%d kHz, ", NIT_CDS_Freq_KHZ_Table[idx+i]));
111                if (s_CDS_Callback && s_CDS_Callback->cb)
112                        s_CDS_Callback->cb(NIT_CDS_Freq_KHZ_Table[idx+i], idx+i, s_CDS_Callback->data);
113        }
114        SI_DBG_PRINT(E_SI_DBG_MSG,("\n"));
115
116        Total_NIT_CDS_carriers = num_of_carriers;
117        return (unsigned char)num_of_carriers;
118}
119
Note: See TracBrowser for help on using the repository browser.