Changeset 40787
- Timestamp:
- 08/22/17 16:57:29 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
titan/titan/scan.h
r36820 r40787 313 313 314 314 return tpnode; 315 } 316 317 //struct transponder* terrsystemdesc2(unsigned char* buf, uint64_t transportid, unsigned short onid, int orbitalpos) 318 int 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; 315 446 } 316 447 … … 383 514 switch(buf[pos2]) 384 515 { 385 case 0x41: 516 case 0x41: //service_list_descriptor 386 517 //servicelistdesc(buf + pos2, transponderid, onid); 387 518 break; 388 case 0x43: 519 case 0x43: //satellite_delivery_system_descriptor 389 520 if(satsystemdesc(buf + pos2, transponderid, onid, orbitalpos) != NULL) 390 521 { … … 394 525 } 395 526 break; 396 case 0x44: 527 case 0x44: //cable_delivery_system_descriptor 397 528 if(cablesystemdesc(buf + pos2, transponderid, onid, orbitalpos) != NULL) 398 529 { … … 402 533 } 403 534 break; 404 case 0x5A: 535 case 0x5A: //terrestrial_delivery_system_descriptor 405 536 if(terrsystemdesc(buf + pos2, transponderid, onid, orbitalpos) != NULL) 406 537 { … … 410 541 } 411 542 break; 412 case 0x62: 543 case 0x62: //frequency_list_descriptor 413 544 //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 } 414 561 break; 415 562 }
Note: See TracChangeset
for help on using the changeset viewer.