コード例 #1
0
ファイル: test.c プロジェクト: fafalafafa/gprokernel
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, &gtISDBTFreqTable[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;	
}
コード例 #2
0
Application::~Application() {

  exit_threads();
  quit_eval();
}
コード例 #3
0
ファイル: test.c プロジェクト: fafalafafa/gprokernel
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;
}