• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 - Mauro Carvalho Chehab
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License as published by
6  * the Free Software Foundation version 2.1 of the License.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16  * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
17  *
18  */
19 
20 #include <libdvbv5/desc_registration_id.h>
21 #include <libdvbv5/dvb-fe.h>
22 
23 #if __GNUC__ >= 9
24 #pragma GCC diagnostic ignored "-Waddress-of-packed-member"
25 #endif
26 
dvb_desc_registration_init(struct dvb_v5_fe_parms * parms,const uint8_t * buf,struct dvb_desc * desc)27 int dvb_desc_registration_init(struct dvb_v5_fe_parms *parms,
28 			       const uint8_t *buf, struct dvb_desc *desc)
29 {
30 	struct dvb_desc_registration *d = (struct dvb_desc_registration *) desc;
31 	size_t size = sizeof(d->format_identifier);
32 
33 	if (desc->length < size) {
34 		dvb_logerr("dvb_desc_registration_init short read %d/%zd bytes", desc->length, size);
35 		return -1;
36 	}
37 
38 	memcpy(&d->format_identifier, buf, size);
39 
40 	if (desc->length <= size)
41 		return 0;
42 
43 	d->additional_identification_info = malloc(desc->length - size);
44 	memcpy(desc->data, buf + size, desc->length - size);
45 
46 	return 0;
47 }
48 
dvb_desc_registration_print(struct dvb_v5_fe_parms * parms,const struct dvb_desc * desc)49 void dvb_desc_registration_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
50 {
51 	const struct dvb_desc_registration *d = (const struct dvb_desc_registration *) desc;
52 	int i = 0;
53 
54 	dvb_loginfo("|           format_identifier     : %c%c%c%c",
55 		    d->format_identifier[0], d->format_identifier[1],
56 		    d->format_identifier[2], d->format_identifier[3]);
57 
58 	if (!d->additional_identification_info)
59 		return;
60 
61 	for (i = 0; i < d->length - 4; i++) {
62 		dvb_loginfo("|           aditional_id_info[%d] : %02x",
63 			    i, d->additional_identification_info[i]);
64 	}
65 }
66 
dvb_desc_registration_free(struct dvb_desc * desc)67 void dvb_desc_registration_free(struct dvb_desc *desc)
68 {
69 	const struct dvb_desc_registration *d = (const void *) desc;
70 
71 	free(d->additional_identification_info);
72 }
73