Changeset 40787


Ignore:
Timestamp:
08/22/17 16:57:29 (6 years ago)
Author:
gost
Message:

[titan] add scan dvb-t2 step1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/scan.h

    r36820 r40787  
    313313
    314314        return tpnode;
     315}
     316
     317//struct transponder* terrsystemdesc2(unsigned char* buf, uint64_t transportid, unsigned short onid, int orbitalpos)
     318int terrsystemdesc2(unsigned char* buf, uint64_t transportid, unsigned short onid, int orbitalpos)
     319{
     320        int modulation = 0, hp = 0, lp = 0;
     321        int bandwidth = 0, hierarchy = 0, guardinterval = 0;
     322        int transmission = 0;
     323        int plp_id = 0;
     324        int i = 0;
     325        unsigned int frequency = 0;
     326        uint64_t id = 0;
     327        struct transponder *tpnode = NULL;
     328        int addtrans = 0;
     329       
     330        if(buf == NULL) return -1;
     331               
     332        int dlen = buf[1];
     333        if (dlen < 5)
     334        {
     335                debug(500, "exit DVB-T2 desc... length < 5");
     336                return -1;     
     337        }
     338       
     339
     340        bandwidth = ((buf[6] >> 2) & 0x0f);
     341        switch (bandwidth)
     342        {
     343                case 0: bandwidth = 8000000; break;
     344                case 1: bandwidth = 7000000; break;
     345                case 2: bandwidth = 6000000; break;
     346                case 3: bandwidth = 5000000; break;
     347                case 4: bandwidth = 1712000; break;
     348                case 5: bandwidth = 10000000; break;
     349                default: bandwidth = 0; break;
     350        }
     351        guardinterval = ((buf[7] >> 5) & 0x3);
     352        switch (guardinterval)
     353        {
     354                case 0: guardinterval = GUARD_INTERVAL_1_32; break;
     355                case 1: guardinterval = GUARD_INTERVAL_1_16; break;
     356                case 2: guardinterval = GUARD_INTERVAL_1_8; break;
     357                case 3: guardinterval = GUARD_INTERVAL_1_4; break;
     358                case 4: guardinterval = GUARD_INTERVAL_1_128; break;
     359                case 5: guardinterval = GUARD_INTERVAL_19_128; break;
     360                case 6: guardinterval = GUARD_INTERVAL_19_256; break;
     361                case 7: guardinterval = GUARD_INTERVAL_AUTO; break;
     362        }
     363        transmission = (buf[7] >> 2 & 0x3);
     364        switch (transmission)
     365        {
     366                case 0: transmission_mode = TRANSMISSION_MODE_2K; break;
     367                case 1: transmission_mode = TRANSMISSION_MODE_8K; break;
     368                case 2: transmission_mode = TRANSMISSION_MODE_4K; break;
     369                case 3: transmission_mode = TRANSMISSION_MODE_1K; break;
     370                case 4: transmission_mode = TRANSMISSION_MODE_16K; break;
     371                case 5: transmission_mode = TRANSMISSION_MODE_32K; break;
     372                default: transmission_mode = TRANSMISSION_MODE_AUTO; break;
     373        }
     374        plp_id = buf[3];
     375        hp = lp = FEC_AUTO;
     376        hierarchy = HIERARCHY_AUTO;
     377        modulation = QAM_AUTO;
     378        inversion = INVERSION_UNKNOWN;
     379        //inversion = INVERSION_AUTO;
     380        system = SYSTEM_DVB_T2;
     381
     382        char* loop1 = buf + 8;     //call_id
     383        char* loop2 = buf + 11;    //centre_frequency if Flag == 1
     384        char* loop3 = buf + 10;    //centre_frequency if Flag == 0
     385        unsigned int cfre = 0;
     386        int i = 0;
     387        int i2 = 0;
     388        int step1 = 0;
     389        int step2 = 0;
     390        int sillen = 0;
     391        int fllen = 0;
     392       
     393        int flag = (buf[7] & 0x1);
     394
     395        id = ((onid << 16) | transportid) & 0xffffffff;
     396        id = id | ((uint64_t)2 << 32);
     397
     398        if (flag == 0)
     399        {
     400                for(i = 0; i < dlen-6; i=i+step1)
     401                {
     402                        step1 = 6;
     403               
     404                        cfre = ((loop3[i] << 24) & 0xff000000);
     405                        cfre = cfre | ((loop3[i+1] << 16) & 0xff0000);
     406                        cfre = cfre | ((loop3[i+2] << 8) & 0xff00);
     407                        cfre = cfre | (loop3[i+3] & 0xff);
     408                        frequency = cfre * 10;
     409                        debug(500, "nitscan DVB-T2 - Flag=%d -> id=%llu freq=%d bandwidth=%d hp=%d lp=%d modulation=%d guard=%d trans=%d hierarchy=%d tpnode=%p", flag, id, frequency, bandwidth, hp, lp, modulation, guardinterval, transmission, hierarchy, tpnode);
     410                        tpnode = createtransponder(id, FE_OFDM, orbitalpos, frequency, inversion, bandwidth, lp, hp, modulation, guardinterval, transmission, hierarchy);
     411                        if(tpnode != NULL)
     412                                addtrans++;
     413                        else
     414                                err("not add nitscan DVB-T2 - Flag=%d -> id=%llu frequency:%s", flag, id, frequency);
     415                        sillen = loop3[i+4];
     416                        step1 = step1 + sillen;
     417                }
     418        }
     419        else
     420        {
     421                for(i = 0; i < dlen-6; i=i+step1)
     422                {       
     423                        fllen = loop1[i+2];
     424                        step1 = 3;
     425                        step1 = step1 + fllen
     426                        for(i2 = 0; i2 < fllen; i2=i2+4)
     427                        {
     428                                cfre = ((loop2[i2] << 24) & 0xff000000);
     429                                cfre = cfre | ((loop2[i2+1] << 16) & 0xff0000);
     430                                cfre = cfre | ((loop2[i2+2] << 8) & 0xff00);
     431                                cfre = cfre | (loop2[i2+3] & 0xff);
     432                                frequency = cfre * 10;
     433                                debug(500, "nitscan DVB-T2 - Flag=%d -> id=%llu freq=%d bandwidth=%d hp=%d lp=%d modulation=%d guard=%d trans=%d hierarchy=%d tpnode=%p", flag, id, frequency, bandwidth, hp, lp, modulation, guardinterval, transmission, hierarchy, tpnode);
     434                                tpnode = createtransponder(id, FE_OFDM, orbitalpos, frequency, inversion, bandwidth, lp, hp, modulation, guardinterval, transmission, hierarchy);
     435                                if(tpnode != NULL)
     436                                        addtrans++;
     437                                else
     438                                        err("not add nitscan DVB-T2 - Flag=%d -> id=%llu frequency:%s", flag, id, frequency);
     439                        }
     440                        sillen = loop2[i2];
     441                        step1 = step1 + sillen;
     442                }
     443        }
     444        //return tpnode;
     445        return addtrans;
    315446}
    316447
     
    383514                        switch(buf[pos2])
    384515                        {
    385                                 case 0x41:
     516                                case 0x41: //service_list_descriptor
    386517                                        //servicelistdesc(buf + pos2, transponderid, onid);
    387518                                        break;
    388                                 case 0x43:
     519                                case 0x43: //satellite_delivery_system_descriptor
    389520                                        if(satsystemdesc(buf + pos2, transponderid, onid, orbitalpos) != NULL)
    390521                                        {
     
    394525                                        }
    395526                                        break;
    396                                 case 0x44:
     527                                case 0x44: //cable_delivery_system_descriptor
    397528                                        if(cablesystemdesc(buf + pos2, transponderid, onid, orbitalpos) != NULL)
    398529                                        {
     
    402533                                        }
    403534                                        break;
    404                                 case 0x5A:
     535                                case 0x5A: //terrestrial_delivery_system_descriptor
    405536                                        if(terrsystemdesc(buf + pos2, transponderid, onid, orbitalpos) != NULL)
    406537                                        {
     
    410541                                        }
    411542                                        break;
    412                                 case 0x62:
     543                                case 0x62: //frequency_list_descriptor
    413544                                        //frequencylistdesc(buf + pos2);
     545                                        break;
     546                                case 0x7F: //extension_descriptor
     547                                        {
     548                                                switch(buf[pos2+2])
     549                                                case 0x04: //T2_delivery_system_descriptor
     550                                                        ret = terrsystemdesc2(buf + pos2, transponderid, onid, orbitalpos);
     551                                                        //if(terrsystemdesc2(buf + pos2, transponderid, onid, orbitalpos) > 0)
     552                                                        if(ret > 0)
     553                                                        {
     554                                                                scaninfo.tpnew = scaninfo.tpnew + ret;
     555                                                                if(scaninfo.scantype != 0)
     556                                                                        scaninfo.tpmax = scaninfo.tpmax + ret;
     557                                                        }
     558                                                        ret = 0;
     559                                                        break;
     560                                        }
    414561                                        break;
    415562                        }
Note: See TracChangeset for help on using the changeset viewer.