From: leslie Date: Wed, 17 Feb 2010 20:34:51 +0000 (+0100) Subject: sasc: parse nit cable descriptor X-Git-Tag: upstream/620~90 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=e9170afa459495d6d4d6fc39b5108f216b85a52b;p=sasc-ng.git sasc: parse nit cable descriptor --- diff --git a/contrib/sasc-ng/dvblb_plugins/plugin_cam.c b/contrib/sasc-ng/dvblb_plugins/plugin_cam.c index ad2d757..db590fd 100644 --- a/contrib/sasc-ng/dvblb_plugins/plugin_cam.c +++ b/contrib/sasc-ng/dvblb_plugins/plugin_cam.c @@ -308,10 +308,14 @@ void process_cam(struct msg *msg, unsigned int priority) ch = new cChannel(); ch->SetId(0, 1, sidmsg->sid, 0); - //set source type to Satellite. Use orbit and E/W data - int source = 0x8000 | (BCD2INT(sidmsg->nit.orbit) & 0x7ff) | ((int)sidmsg->nit.is_east << 11); - static char Polarizations[] = { 'h', 'v', 'l', 'r' }; - ch->SetSatTransponderData(source, BCD2INT(sidmsg->nit.frequency)/100, Polarizations[sidmsg->nit.polarization], BCD2INT(sidmsg->nit.symbolrate), 0); + if(sidmsg->nit.type==0x43) { //set source type to Satellite. Use orbit and E/W data + int source = 0x8000 | (BCD2INT(sidmsg->nit.orbit) & 0x7ff) | ((int)sidmsg->nit.is_east << 11); + static char Polarizations[] = { 'h', 'v', 'l', 'r' }; + ch->SetSatTransponderData(source, BCD2INT(sidmsg->nit.frequency)/100, Polarizations[sidmsg->nit.polarization], BCD2INT(sidmsg->nit.symbolrate)/10, 0); + } + else if(sidmsg->nit.type==0x44) { //set source type to Cable + ch->SetCableTransponderData(0x4000, BCD2INT(sidmsg->nit.frequency)/10, 0, BCD2INT(sidmsg->nit.symbolrate)/10, 0); + } dcnt = (MAXDPIDS >= sidmsg->epid_count) ? sidmsg->epid_count : MAXDPIDS; memcpy(dpid, sidmsg->epid, sizeof(int)*dcnt); diff --git a/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c b/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c index 93e7176..1228959 100644 --- a/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c +++ b/contrib/sasc-ng/dvbloopback/src/plugin_getsid.c @@ -289,6 +289,7 @@ static int read_nit(unsigned char *buf, struct nit_data *nit, unsigned int size) tag = buf[pos+6]; tag_len = buf[pos+7]; if(tag == 0x43 && tag_len >= 11) { //satellite descriptor + nit->type = tag; nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11]; nit->orbit = (buf[pos+12] << 8) | buf[pos+13]; nit->is_east = buf[pos+14] >> 7; @@ -298,6 +299,14 @@ static int read_nit(unsigned char *buf, struct nit_data *nit, unsigned int size) nit->fec = buf[pos+18]; printf("Orbit: %08x%c\n", nit->orbit, nit->is_east ? 'E' : 'W'); return 1; + } else if(tag == 0x44 && tag_len >= 11) { //cable descriptor + nit->type = tag; + nit->frequency = (buf[pos+8] << 24) | (buf[pos+9]<<16) | (buf[pos+10]<<8) | buf[pos+11]; + nit->modulation = buf[pos+14]; + nit->symbolrate = (buf[pos+15]<<16) | (buf[pos+16]<<8) | buf[pos+17]; + nit->fec = buf[pos+18]; + printf("Cable: %08x\n", nit->frequency); + return 1; } pos += tag_len+2; td_len -= tag_len+2; diff --git a/contrib/sasc-ng/dvbloopback/src/plugin_getsid.h b/contrib/sasc-ng/dvbloopback/src/plugin_getsid.h index 1b1d6d8..34fde46 100644 --- a/contrib/sasc-ng/dvbloopback/src/plugin_getsid.h +++ b/contrib/sasc-ng/dvbloopback/src/plugin_getsid.h @@ -14,6 +14,7 @@ struct nit_data { unsigned char modulation; unsigned int symbolrate; unsigned char fec; + unsigned char type; }; struct sid_msg { diff --git a/contrib/sasc-ng/sc/misc.cpp b/contrib/sasc-ng/sc/misc.cpp index d82412f..e3137d6 100644 --- a/contrib/sasc-ng/sc/misc.cpp +++ b/contrib/sasc-ng/sc/misc.cpp @@ -39,6 +39,15 @@ bool cChannel::SetSatTransponderData(int Source, int Frequency, char Polarizatio coderateH = CoderateH; return true; } +bool cChannel::SetCableTransponderData(int Source, int Frequency, int Modulation, int Srate, int CoderateH) +{ + source = Source; + frequency = Frequency; + modulation = Modulation; + srate = Srate; + coderateH = CoderateH; + return true; +} void cChannel::SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, char DLangs[][MAXLANGCODE2], int Tpid) { vpid = Vpid;