/*************************************************************************** * Copyright (c) 2011, Broadcom Corporation * All Rights Reserved * Confidential Property of Broadcom Corporation * * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE * AGREEMENT BETWEEN THE USER AND BROADCOM. YOU HAVE NO RIGHT TO USE OR * EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. * * $brcm_Workfile: $ * $brcm_Revision: $ * $brcm_Date: $ * * Module Description: * * Revision History: * * $brcm_Log: $ * ****************************************************************************/ #include "bstd.h" #include "bkni.h" #include "ts_priv.h" #include "ts_psi.h" #include "ministd.h" #include "dvb_parser.h" #include "si.h" #include "si_util.h" BDBG_MODULE(dvb_rst); #define RST_ENTRY_LEN 9 void dvb_rst_init(void) { } int dvb_rst_parse(const uint8_t *rst_buf, size_t *psize) { uint8_t tid, running_status; uint16_t parsed, section_len, network_id; uint16_t service_id, event_id, stream_id; struct bit_state_t bs; eit_entry_t *p_eit_entry; BDBG_ASSERT(rst_buf && psize); BDBG_MSG(("%s: enter", __FUNCTION__)); bs.data = (unsigned char *)rst_buf; bs.bindex = 0; tid = get_bits(8, &bs); if (tid != DVB_TID_RST) { BDBG_WRN(("%s: invalid table id (0x%x)", __FUNCTION__, tid)); return 0; } get_bits(4, &bs); /* skip section_syntax_indicator, reserved field */ section_len = get_bits(12, &bs); parsed = 0; while (parsed < section_len) { stream_id = get_bits(16, &bs); network_id = get_bits(16, &bs); service_id = get_bits(16, &bs); event_id = get_bits(16, &bs); get_bits(5, &bs); running_status = get_bits(3, &bs); /* update running status */ p_eit_entry = dvb_eit_get_entry(stream_id, service_id); if (p_eit_entry) { /* find the event */ if (p_eit_entry->eit_present.event_id == event_id) { p_eit_entry->eit_present.running_status = running_status; } else if (p_eit_entry->eit_following.event_id == event_id) { p_eit_entry->eit_following.running_status = running_status; } } else { BDBG_WRN(("EIT entry is not registered yet")); } parsed += RST_ENTRY_LEN; } return 1; }