Fix desc_frequency_list descriptor
authorMauro Carvalho Chehab <m.chehab@samsung.com>
Sun, 17 Nov 2013 22:40:38 +0000 (20:40 -0200)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Wed, 27 Nov 2013 11:24:40 +0000 (09:24 -0200)
This descriptor is commented. Fix it.

Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
lib/include/descriptors/desc_frequency_list.h
lib/libdvbv5/descriptors/desc_frequency_list.c

index 15f06de..e6e7945 100644 (file)
@@ -30,6 +30,9 @@ struct dvb_desc_frequency_list {
        uint8_t length;
        struct dvb_desc *next;
 
+       uint8_t frequencies;
+       uint32_t *frequency;
+
        union {
                uint8_t bitfield;
                struct {
@@ -37,8 +40,6 @@ struct dvb_desc_frequency_list {
                        uint8_t reserved:6;
                };
        };
-       //uint8_t frequencies; // FIXME: make linked list
-       //uint32_t *frequency[];
 } __attribute__((packed));
 
 struct dvb_v5_fe_parms;
index 20107d2..19c6f25 100644 (file)
 
 void dvb_desc_frequency_list_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, struct dvb_desc *desc)
 {
-       struct dvb_desc_frequency_list *flist = (struct dvb_desc_frequency_list *) desc;
-
-       flist->bitfield = buf[0];
-
-       /*flist->frequencies = (flist->length - sizeof(flist->bitfield)) / sizeof(flist->frequency[0]);*/
-       /*int i;*/
-       /*for (i = 1; i <= flist->frequencies; i++) {*/
-               /*flist->frequency[i] = ((uint32_t *) buf)[i];*/
-               /*bswap32(flist->frequency[i]);*/
-               /*switch (flist->freq_type) {*/
-                       /*case 1: [> satellite - to get kHz<]*/
-                       /*case 3: [> terrestrial - to get Hz<]*/
-                               /*flist->frequency[i] *= 10;*/
-                               /*break;*/
-                       /*case 2: [> cable - to get Hz <]*/
-                               /*flist->frequency[i] *= 100;*/
-                               /*break;*/
-                       /*case 0: [> not defined <]*/
-                       /*default:*/
-                               /*break;*/
-               /*}*/
-       /*}*/
-// FIXME: malloc list entires
-//     return sizeof(struct dvb_desc_frequency_list) + (flist->frequencies * sizeof(flist->frequency[0]));
+       struct dvb_desc_frequency_list *d = (struct dvb_desc_frequency_list *) desc;
+       size_t len;
+       int i;
+       char *p = buf;
+
+       len = sizeof(*d) - offsetof(struct dvb_desc_frequency_list, bitfield);
+       memcpy(&d->bitfield, p, len);
+       p += len;
+
+       d->frequencies = (d->length - len) / sizeof(d->frequency[0]);
+
+       d->frequency = calloc(1, sizeof(d->frequency));
+
+       for (i = 0; i < d->frequencies; i++) {
+               d->frequency[i] = ((uint32_t *) buf)[i];
+               bswap32(d->frequency[i]);
+               switch (d->freq_type) {
+                       case 1: /* satellite - to get kHz */
+                       case 3: /* terrestrial - to get Hz */
+                               d->frequency[i] *= 10;
+                               break;
+                       case 2: /* cable - to get Hz */
+                               d->frequency[i] *= 100;
+                               break;
+                       case 0: /* not defined */
+                       default:
+                               break;
+               }
+       }
 }
 
 void dvb_desc_frequency_list_print(struct dvb_v5_fe_parms *parms, const struct dvb_desc *desc)
 {
-       const struct dvb_desc_frequency_list *flist = (const struct dvb_desc_frequency_list *) desc;
-       dvb_log("|       frequency list type: %d", flist->freq_type);
-       /*int i = 0;*/
-       /*for (i = 0; i < flist->frequencies; i++) {*/
-               /*dvb_log("|       frequency : %d", flist->frequency[i]);*/
-       /*}*/
+       const struct dvb_desc_frequency_list *d = (const struct dvb_desc_frequency_list *) desc;
+       dvb_log("|       frequency list type: %d", d->freq_type);
+       int i = 0;
+
+       for (i = 0; i < d->frequencies; i++) {
+               dvb_log("|       frequency : %d", d->frequency[i]);
+       }
 }