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]);
+ }
}