Changeset 9890
- Timestamp:
- 10/02/14 12:33:16 (9 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/README.dvbapi_protocol
r9869 r9890 126 126 uint8_t demux index 127 127 uint8_t filter number 128 dmx_sct_filter_params 60-byte dmx_sct_filter_params structure with filter data (pid, timeout and flags fields are in network byte order) 128 *** The following data are the fields from the dmx_sct_filter_params structure (added separately to avoid padding problems) 129 uint16_t pid 130 uchar[16] filter data (filter.filter) 131 uchar[16] filter mask (filter.mask) 132 uchar[16] filter mode (filter.mode) 133 uint32_t timeout 134 uint32_t flags 129 135 130 136 The client should then filter the data and pass it back to the OSCam using the following frame: -
trunk/module-dvbapi.c
r9889 r9890 460 460 if (data) // filter data when starting 461 461 { 462 memcpy(&packet[size], data, sct_filter_size); //dmx_sct_filter_params struct463 464 462 if (client_proto_version >= 1) 465 463 { 466 struct dmx_sct_filter_params *fp = (struct dmx_sct_filter_params *) &packet[size]; 467 fp->pid = htons(fp->pid); 468 fp->timeout = htonl(fp->timeout); 469 fp->flags = htonl(fp->flags); 470 } 471 472 size += sct_filter_size; 473 } 474 else // pid when stopping 475 { 476 if (client_proto_version >= 1) 477 { 478 int16_t pid = htons(demux[demux_index].demux_fd[filter_number].pid); 464 struct dmx_sct_filter_params *fp = (struct dmx_sct_filter_params *) data; 465 466 // adding all dmx_sct_filter_params structure fields 467 // one by one to avoid padding problems 468 uint16_t pid = htons(fp->pid); 479 469 memcpy(&packet[size], &pid, 2); 480 470 size += 2; 471 472 memcpy(&packet[size], fp->filter.filter, 16); 473 size += 16; 474 memcpy(&packet[size], fp->filter.mask, 16); 475 size += 16; 476 memcpy(&packet[size], fp->filter.mode, 16); 477 size += 16; 478 479 uint32_t timeout = htonl(fp->timeout); 480 memcpy(&packet[size], &timeout, 4); 481 size += 4; 482 483 uint32_t flags = htonl(fp->flags); 484 memcpy(&packet[size], &flags, 4); 485 size += 4; 481 486 } 482 487 else 483 488 { 484 int16_t pid = demux[demux_index].demux_fd[filter_number].pid; 489 memcpy(&packet[size], data, sct_filter_size); //dmx_sct_filter_params struct 490 size += sct_filter_size; 491 } 492 } 493 else // pid when stopping 494 { 495 if (client_proto_version >= 1) 496 { 497 uint16_t pid = htons(demux[demux_index].demux_fd[filter_number].pid); 498 memcpy(&packet[size], &pid, 2); 499 size += 2; 500 } 501 else 502 { 503 uint16_t pid = demux[demux_index].demux_fd[filter_number].pid; 485 504 packet[size++] = pid >> 8; 486 505 packet[size++] = pid & 0xff;
Note:
See TracChangeset
for help on using the changeset viewer.