static void test_ISDBT(void) { int key, ret; E_RTV_COUNTRY_BAND_TYPE country_band_type; RTV_ISDBT_TMCC_INFO tmcc_info; IOCTL_ISDBT_SIGNAL_INFO dm_info; int num_tbl; int i; int ch; unsigned int lock_mask; char devname[32]; tv_mode = 0; num_tbl = sizeof(gtISDBTFreqTable) / sizeof(TISDBTFREQ); sprintf(devname,"/dev/%s", RAONTV_DEV_NAME); fd_dmb_dev = open(devname, O_RDWR); if(fd_dmb_dev<0) { printf("Can't not open %s\n", devname); return; } #if defined(RTV_IF_MPEG2_SERIAL_TSIF) || defined(RTV_IF_SPI_SLAVE) || defined(RTV_IF_QUALCOMM_TSIF) || defined(RTV_IF_MPEG2_PARALLEL_TSIF) sprintf(devname,"/dev/%s", "s3c-tsi"); fd_tsif_dev = open(devname, O_RDWR); if(fd_tsif_dev<0) { printf("Can't not open %s\n",devname); return -1; } #endif #ifdef _TS_FILE_DUMP_ENABLE if((fd_isdbt_ts=fopen("./isdbt_ts.ts", "wb")) == NULL) { printf("isdbt_ts.ts file open error\n"); } #endif tsif_run_flag = 0; while(1) { printf("===============================================\n"); printf("\t0: 1seg Power ON\n"); printf("\t1: 1seg Power OFF\n"); printf("\t2: 1seg Scan freq\n"); printf("\t3: 1seg Set Channel\n"); printf("\t4: 1seg Get Lockstatus\n"); printf("\t5: 1seg Get TMCC\n"); printf("\t6: 1seg Get Signal Info\n"); printf("\t7: 1seg Start TS\n"); printf("\t8: 1seg Stop TS\n"); printf("\tw: Write Reg\n"); printf("\tr: Read Reg\n"); printf("\tq or Q: Quit\n"); printf("===============================================\n"); fflush(stdin); key = getc(stdin); CLEAR_STDIN; switch( key ) { case '0': printf("[ISDBT DTV Start]\n"); if((ret=run_threads()) != 0) { printf("run_threads() failed: %d\n", ret); } country_band_type = RTV_COUNTRY_BAND_JAPAN; if(ioctl(fd_dmb_dev, IOCTL_ISDBT_POWER_ON, &country_band_type) != 0) { printf("IOCTL_ISDBT_POWER_ON error"); } #if 0 ch = 37; if(ioctl(fd_dmb_dev, IOCTL_ISDBT_SET_FREQ, &ch) < 0) { // scan fail printf("IOCTL_ISDBT_SET_FREQ failed\n"); } sleep(3); printf("After sleep()\n"); ch = 37; if(ioctl(fd_dmb_dev, IOCTL_ISDBT_SET_FREQ, &ch) < 0) { // scan fail printf("IOCTL_ISDBT_SET_FREQ failed\n"); } #endif break; case '1': printf("[ISDBT DTV Stop]\n"); if(ioctl(fd_dmb_dev, IOCTL_ISDBT_POWER_OFF) != 0) { printf("IOCTL_ISDBT_POWER_OFF error"); } break; case '2': for(i=0; i<num_tbl; i++) { printf("[ISDB-T Scan start] (ch: %u), freq: %u\n", gtISDBTFreqTable[i].ch, gtISDBTFreqTable[i].freq); if(ioctl(fd_dmb_dev, IOCTL_ISDBT_SCAN_FREQ, >ISDBTFreqTable[i].ch) < 0) { printf("scan failed on channel[%d]\n",gtISDBTFreqTable[i].ch); } // Add a channel to scaned list. printf("\n"); } break; case '3': printf("Input Channel num(ex.13):"); scanf("%d",&ch); CLEAR_STDIN; printf("[ISDBT Set Freq] (ch: %u)\n", ch); #if defined(RTV_IF_MPEG2_SERIAL_TSIF) || defined(RTV_IF_SPI_SLAVE) || defined(RTV_IF_QUALCOMM_TSIF) || defined(RTV_IF_MPEG2_PARALLEL_TSIF) if(tsif_run_flag != 1) tsif_run(1); /* Run TSI */ #endif if(ioctl(fd_dmb_dev, IOCTL_ISDBT_SET_FREQ, &ch) < 0) { // scan fail printf("IOCTL_ISDBT_SET_FREQ failed\n"); } printf("\n"); break; case '4': printf("[ISDB-T Get Lockstatus]\n"); if(ioctl(fd_dmb_dev, IOCTL_ISDBT_GET_LOCK_STATUS, &lock_mask) < 0) { printf("IOCTL_ISDBT_GET_LOCK_STATUS failed\n"); } printf("isdbt_lock_mask = %d\n", lock_mask); printf("\n"); break; case '5': printf("[ISDB-T Get Tmcc]\n"); if(ioctl(fd_dmb_dev, IOCTL_ISDBT_GET_TMCC, &tmcc_info) < 0) { printf("IOCTL_ISDBT_GET_TMCC failed\n"); } printf("tmcc_info.eCodeRate = %d\n", tmcc_info.eCodeRate); printf("tmcc_info.eGuard = %d\n", tmcc_info.eGuard); printf("tmcc_info.eInterlv = %d\n", tmcc_info.eInterlv); printf("tmcc_info.eModulation = %d\n", tmcc_info.eModulation); printf("tmcc_info.eSeg = %d\n", tmcc_info.eSeg); printf("tmcc_info.eTvMode = %d\n", tmcc_info.eTvMode); printf("tmcc_info.fEWS = %d\n", tmcc_info.fEWS); printf("\n"); break; case '6': printf("[ISDB-T Get Singal Info]\n"); if(ioctl(fd_dmb_dev, IOCTL_ISDBT_GET_SIGNAL_INFO, &dm_info) < 0) { printf("IOCTL_ISDBT_GET_SIGNAL_INFO failed\n"); } printf("ber = %f\n", (float)dm_info.ber/(float)RTV_ISDBT_BER_DIVIDER); printf("cnr = %f\n", (float)dm_info.cnr/(float)RTV_ISDBT_CNR_DIVIDER); printf("rssi = %f\n", (float)dm_info.rssi/(float)RTV_ISDBT_RSSI_DIVIDER); printf("per = %u\n", dm_info.per); printf("\n"); break; case '7': printf("[ISDBT Start TS]\n"); if(ioctl(fd_dmb_dev, IOCTL_ISDBT_START_TS) != 0) { printf("IOCTL_ISDBT_START_TS error"); } break; case '8': printf("[ISDBT Start TS]\n"); if(ioctl(fd_dmb_dev, IOCTL_ISDBT_STOP_TS) != 0) { printf("IOCTL_ISDBT_STOP_TS error"); } break; case 'w': printf("[ISDB-T Register Write\n"); printf("===============================================\n"); printf("\t0: HOST_PAGE\n"); printf("\t1: RF_PAGE\n"); printf("\t2: COMM_PAGE\n"); printf("\t3: DD_PAGE\n"); printf("\t4: MSC0_PAGE\n"); printf("\t5: MSC1_PAGE\n"); printf("\t6: OFDM PAGE\n"); printf("\t7: FEC_PAGE\n"); printf("===============================================\n"); printf("Select Page:"); scanf("%x" , &ioctl_register_access.page); CLEAR_STDIN; printf("Input Address(hex) :, data(hex) : "); scanf("%x" , &ioctl_register_access.Addr); CLEAR_STDIN; scanf("%x" , &ioctl_register_access.data[0]); CLEAR_STDIN; printf("Input Address: 0x%02x, data: 0x%02x \n", ioctl_register_access.Addr, ioctl_register_access.data[0] ); if(ioctl(fd_dmb_dev, IOCTL_REGISTER_WRITE, &ioctl_register_access) < 0) { printf("IOCTL_REGISTER_WRITE failed\n"); } break; case 'r': printf("[ISDB-T Register Read\n"); printf("===============================================\n"); printf("\t0: HOST_PAGE\n"); printf("\t1: RF_PAGE\n"); printf("\t2: COMM_PAGE\n"); printf("\t3: DD_PAGE\n"); printf("\t4: MSC0_PAGE\n"); printf("\t5: MSC1_PAGE\n"); printf("\t6: OFDM PAGE\n"); printf("\t7: FEC_PAGE\n"); printf("===============================================\n"); printf("Select Page:"); scanf("%x" , &ioctl_register_access.page); CLEAR_STDIN; printf("Input Address(hex) : "); scanf("%x", &ioctl_register_access.Addr); CLEAR_STDIN; printf("Input Address: 0x%02x\n ", ioctl_register_access.Addr ); if(ioctl(fd_dmb_dev, IOCTL_REGISTER_READ, &ioctl_register_access) < 0) { printf("IOCTL_REGISTER_READ failed\n"); } printf("Address 0x%02x= 0x%02x\n",ioctl_register_access.Addr, ioctl_register_access.data[0]); printf("\n"); break; case 'q': case 'Q': goto ISDBT_EXIT; default: printf("[%c]\n", key); } } ISDBT_EXIT: if(ioctl(fd_dmb_dev, IOCTL_TDMB_POWER_OFF) < 0) { printf("IOCTL_TDMB_POWER_OFF failed\n"); } #if defined(RTV_IF_MPEG2_SERIAL_TSIF) || defined(RTV_IF_SPI_SLAVE) || defined(RTV_IF_QUALCOMM_TSIF) || defined(RTV_IF_MPEG2_PARALLEL_TSIF) tsif_run(0); /* Stop TSI */ close(fd_tsif_dev); #endif close(fd_dmb_dev); exit_threads(); #ifdef _TS_FILE_DUMP_ENABLE fclose(fd_isdbt_ts); #endif return; }
Application::~Application() { exit_threads(); quit_eval(); }
static void test_TDMB() { int key, ret; int num_tbl; int i; unsigned int lock_mask, sub_ch_id, ch_freq_khz; E_RTV_COUNTRY_BAND_TYPE country_band_type; IOCTL_TDMB_SUB_CH_INFO sub_ch_info; IOCTL_TDMB_SIGNAL_INFO dm_info; // BOOL power_on = FALSE; unsigned char fic_buf[384]; char devname[32]; BOOL is_power_on = FALSE; num_tbl = sizeof(tdmb_korea_tbl) / sizeof(uint32_t); tv_mode = 1; sprintf(devname,"/dev/%s", RAONTV_DEV_NAME); fd_dmb_dev = open(devname, O_RDWR); if(fd_dmb_dev<0) { printf("Can't not open %s\n", devname); return; } #if defined(RTV_IF_MPEG2_SERIAL_TSIF) || defined(RTV_IF_SPI_SLAVE) || defined(RTV_IF_QUALCOMM_TSIF) || defined(RTV_IF_MPEG2_PARALLEL_TSIF) sprintf(devname,"/dev/%s", "s3c-tsi"); fd_tsif_dev = open(devname, O_RDWR); if(fd_tsif_dev<0) { printf("Can't not open %s\n",devname); return -1; } #endif #ifdef _TS_FILE_DUMP_ENABLE if((fd_tdmb_ts=fopen("./tdmb_ts.ts", "wb")) == NULL) { printf("tdmb_ts.ts file open error\n"); } #endif tsif_run_flag = 0; if((ret=run_threads()) != 0) { printf("run_threads() failed: %d\n", ret); } while(1) { printf("===============================================\n"); printf("\t0: TDMB Power ON\n"); printf("\t1: TDMB Power OFF\n"); printf("\t2: TDMB Scan freq\n"); printf("\t3: TDMB Open Sub Channel\n"); printf("\t4: TDMB Close Sub Channel\n"); printf("\t5: TDMB Get Lockstatus\n"); printf("\t6: TDMB Get Signal Info\n"); printf("\t7: TDMB [TEST] Set Freq\n"); printf("\t8: GPIO Write(Set) Test\n"); printf("\t9: GPIO Read(Get) Test\n"); printf("\tw: Write Reg\n"); printf("\tr: Read Reg\n"); printf("\ts: Stop TSIF\n"); printf("\tq or Q: Quit\n"); printf("===============================================\n"); //fflush(stdin); key = getc(stdin); CLEAR_STDIN; switch( key ) { case '0': printf("[T-DMB Power ON]\n"); country_band_type = RTV_COUNTRY_BAND_KOREA; if((ret=ioctl(fd_dmb_dev, IOCTL_TDMB_POWER_ON, &country_band_type)) < 0) { printf("IOCTL_TDMB_POWER_ON failed: %d\n", ret); } is_power_on = TRUE; #if 0 //// sub_ch_info.ch_freq_khz = 208736; sub_ch_info.sub_ch_id = 0; //sub_ch_info.ch_freq_khz = 184736; //sub_ch_info.sub_ch_id = 1; sub_ch_info.service_type = RTV_TDMB_SERVICE_VIDEO; if(ioctl(fd_dmb_dev, IOCTL_TDMB_OPEN_SUBCHANNEL, &sub_ch_info) < 0) { printf("IOCTL_TDMB_OPEN_SUBCHANNEL failed\n"); } printf("\n"); //////////////////////////////////////test/////////////////////////////////////// #if 0 for(i=0;i < 400;i++) { /* ioctl_register_access.Addr = 0x03; ioctl_register_access.data[0] = 0x0f; if(ioctl(fd_dmb_dev, IOCTL_REGISTER_WRITE, &ioctl_register_access) < 0) { printf("IOCTL_REGISTER_WRITE failed\n"); } */ //ioctl_register_access.Addr = 0x00; if(ioctl(fd_dmb_dev, IOCTL_REGISTER_READ, &ioctl_register_access) < 0) { printf("IOCTL_REGISTER_READ failed\n"); } printf("[%d] Address 0x%02x= 0x%02x\n", i, ioctl_register_access.Addr, ioctl_register_access.data[0]); //printf("\n"); usleep(20000); } #endif //////////////////////////////////////test/////////////////////////////////////// #endif break; case '1': printf("[T-DMB Power OFF]\n"); if(ioctl(fd_dmb_dev, IOCTL_TDMB_POWER_OFF) < 0) { printf("IOCTL_TDMB_POWER_OFF failed\n"); } is_power_on = FALSE; break; case '2': printf("TDMB Scan freq\n"); for(i=0; i<num_tbl; i++) { int k; printf("[TDMB Scan start] freq: %u\n", tdmb_korea_tbl[i]); if(ioctl(fd_dmb_dev, IOCTL_TDMB_SCAN_FREQ, &tdmb_korea_tbl[i]) < 0) { printf("scan failed on channel[%d]\n", tdmb_korea_tbl[i]); } else { // Add a channel to scaned list. printf("[TDMB Scan freq] CH DETECTED\n"); for(k=0; k<5; k++) { if((ret=ioctl(fd_dmb_dev, IOCTL_TDMB_READ_FIC, fic_buf)) < 0) { printf("read fic fail: %d\n", ret); } else { printf("\tfic_buf[0]: 0x%02X, fic_buf[1]: 0x%02X, fic_buf[2]: 0x%02X\n", fic_buf[0], fic_buf[1], fic_buf[2]); } } } printf("\n"); } break; case '3': printf("[T-DMB Open Sub Channel]\n"); while(1) { printf("Input Channel freq(ex. 175280):"); scanf("%u", &sub_ch_info.ch_freq_khz); CLEAR_STDIN; for(i=0; i<num_tbl; i++) { if(sub_ch_info.ch_freq_khz == tdmb_korea_tbl[i]) goto call_tdmb_set_ch; } if(i == num_tbl) { printf("Invalid T-DMB freq\n"); } } call_tdmb_set_ch : printf("Input sub channel ID(ex. 0):"); scanf("%u", &sub_ch_info.sub_ch_id); CLEAR_STDIN; printf("Input service type(0: Video, 1:Audio, 2: Data):"); scanf("%u", &sub_ch_info.service_type); CLEAR_STDIN; if((ret=ioctl(fd_dmb_dev, IOCTL_TDMB_OPEN_SUBCHANNEL, &sub_ch_info)) < 0) { printf("IOCTL_TDMB_OPEN_SUBCHANNEL failed: %d\n", ret); } printf("\n"); break; case '4': printf("[TDMB Close Sub Channel]\n"); printf("Input sub channel ID(ex. 0):"); scanf("%u", &sub_ch_id); CLEAR_STDIN; if(ioctl(fd_dmb_dev, IOCTL_TDMB_CLOSE_SUBCHANNEL, &sub_ch_id) < 0) { printf("IOCTL_TDMB_CLOSE_SUBCHANNEL failed\n"); } printf("\n"); break; case '5': printf("[TDMB Get Lockstatus]\n"); if(ioctl(fd_dmb_dev, IOCTL_TDMB_GET_LOCK_STATUS, &lock_mask) < 0) { printf("RTV_IOCTL_TDMB_GET_LOCK_STATUS failed\n"); } printf("lock_mask = %d\n", lock_mask); printf("\n"); break; case '6': printf("[TDMB Get Singal Info]\n"); if(ioctl(fd_dmb_dev, IOCTL_TDMB_GET_SIGNAL_INFO, &dm_info) < 0) { printf("IOCTL_TDMB_GET_SIGNAL_INFO failed\n"); } printf("ber = %f\n", (float)dm_info.ber/RTV_TDMB_BER_DIVIDER); printf("cer = %u\n", dm_info.cer); printf("cnr = %f\n", (float)dm_info.cnr/RTV_TDMB_CNR_DIVIDER); printf("rssi = %f\n", (float)dm_info.rssi/RTV_TDMB_RSSI_DIVIDER); printf("per = %u\n", dm_info.per); printf("\n"); break; case '7': printf("[T-DMB Set Freq]\n"); while(1) { printf("Input Channel freq(ex. 175280):"); scanf("%u", &ch_freq_khz); CLEAR_STDIN; for(i=0; i<num_tbl; i++) { if(ch_freq_khz == tdmb_korea_tbl[i]) goto call_tdmb_set_Freq; } if(i == num_tbl) { printf("Invalid T-DMB freq\n"); } } call_tdmb_set_Freq : if(ioctl(fd_dmb_dev, IOCTL_TEST_TDMB_SET_FREQ, &ch_freq_khz) < 0) { printf("IOCTL_TDMB_SET_FREQ failed\n"); } printf("\n"); break; case '8': printf("[GPIO Write(Set) Test]\n"); printf("Select Pin Number:"); scanf("%u" , &gpio_info.pin); CLEAR_STDIN; retry_gpio_set: printf("Input Pin Level(0 or 1):"); scanf("%u" , &gpio_info.value); CLEAR_STDIN; if((gpio_info.value != 0) && (gpio_info.value != 1)) goto retry_gpio_set; if(ioctl(fd_dmb_dev, IOCTL_TEST_GPIO_SET, &gpio_info) < 0) { printf("IOCTL_TEST_GPIO_SET failed\n"); } break; case '9': printf("[GPIO Write(Set) Test]\n"); printf("Select Pin Number:"); scanf("%u" , &gpio_info.pin); CLEAR_STDIN; if(ioctl(fd_dmb_dev, IOCTL_TEST_GPIO_GET, &gpio_info) < 0) { printf("IOCTL_TEST_GPIO_GET failed\n"); } printf("Pin(%u): %u\n", gpio_info.pin, gpio_info.value); printf("\n"); break; case 'w': printf("[T-DMB] Register Write\n"); printf("===============================================\n"); printf("\t0: HOST_PAGE\n"); printf("\t1: RF_PAGE\n"); printf("\t2: COMM_PAGE\n"); printf("\t3: DD_PAGE\n"); printf("\t4: MSC0_PAGE\n"); printf("\t5: MSC1_PAGE\n"); printf("\t6: OFDM PAGE\n"); printf("\t7: FEC_PAGE\n"); printf("\t8: FIC_PAGE\n"); printf("===============================================\n"); printf("Select Page:"); scanf("%x" , &ioctl_register_access.page); CLEAR_STDIN; printf("Input Address(hex) :, data(hex) : "); scanf("%x" , &ioctl_register_access.Addr); CLEAR_STDIN; scanf("%x" , &ioctl_register_access.data[0]); CLEAR_STDIN; printf("Input Address: 0x%02x, data: 0x%02x \n", ioctl_register_access.Addr, ioctl_register_access.data[0] ); if(ioctl(fd_dmb_dev, IOCTL_REGISTER_WRITE, &ioctl_register_access) < 0) { printf("IOCTL_REGISTER_WRITE failed\n"); } break; case 'r': printf("[T-DMB] Register Read\n"); printf("===============================================\n"); printf("\t0: HOST_PAGE\n"); printf("\t1: RF_PAGE\n"); printf("\t2: COMM_PAGE\n"); printf("\t3: DD_PAGE\n"); printf("\t4: MSC0_PAGE\n"); printf("\t5: MSC1_PAGE\n"); printf("\t6: OFDM PAGE\n"); printf("\t7: FEC_PAGE\n"); printf("\t8: FIC_PAGE\n"); printf("===============================================\n"); printf("Select Page:"); scanf("%x" , &ioctl_register_access.page); CLEAR_STDIN; printf("Input Address(hex) : "); scanf("%x", &ioctl_register_access.Addr); CLEAR_STDIN; printf("Input Address: 0x%02x\n ", ioctl_register_access.Addr ); if(ioctl(fd_dmb_dev, IOCTL_REGISTER_READ, &ioctl_register_access) < 0) { printf("IOCTL_REGISTER_READ failed\n"); } printf("Address 0x%02x= 0x%02x\n",ioctl_register_access.Addr, ioctl_register_access.data[0]); printf("\n"); break; case 's': break; case 'q': case 'Q': goto TDMB_EXIT; default: printf("[%c]\n", key); } } TDMB_EXIT: #if 0 exit_threads(); //raise(SIGKILL); // raise(SIGUSR1); #else if(is_power_on == TRUE) { // printf("(TDMB_EXIT) IOCTL_TDMB_POWER_OFF\n"); if(ioctl(fd_dmb_dev, IOCTL_TDMB_POWER_OFF) < 0) { printf("IOCTL_TDMB_POWER_OFF failed\n"); } } exit_threads(); #if defined(RTV_IF_MPEG2_SERIAL_TSIF) || defined(RTV_IF_SPI_SLAVE) || defined(RTV_IF_QUALCOMM_TSIF) || defined(RTV_IF_MPEG2_PARALLEL_TSIF) close(fd_tsif_dev); #endif // printf("(TDMB_EXIT) close(fd_dmb_dev)\n"); close(fd_dmb_dev); // printf("(TDMB_EXIT) close(fd_dmb_dev) END\n"); #ifdef _TS_FILE_DUMP_ENABLE fclose(fd_tdmb_ts); #endif #endif printf("TDMB_EXIT\n"); return; }