⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_if101.c

📁 cmmb if101 linux driver sample
💻 C
字号:
#include<stdio.h>#include<stdlib.h>#include <sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include <signal.h> #include <unistd.h>  #include <string.h>#include <linux/ioctl.h>#include <linux/keyboard.h>#include <linux/kd.h>#include <linux/vt.h>#include <termios.h>#include <sys/un.h>#include <sys/socket.h>#include "IF101_Operation.h"#include "IF101_IO.h"#include <asm/arch/pxa-regs.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include "IF101_Communication.h"#define BUFFER_SIZE   300*1024extern INNO_RETURN_CODE INNO_I2C_Read(unsigned char addr, unsigned char *data);int fd_if101;int main(int argc, char **argv){	int ret;	char *buffer;		int freq = -1; 	int second = 10;	char *file_name = NULL;	int i;	int channel;	int fd_file;	int ts_info[4] = {11,4,0,0};	int pm = 1 ;	PM_MODE pm_mode = PM_MODE_RESUME;		SYS_STATUS  sys_status;	DEMOD_CONFIG setting[2];	DEMOD_CONFIG checking[2];	int valid_freq = 0;//	GAFR3_U &= 0x1400;	buffer = (char *)malloc(BUFFER_SIZE);	int g_status = 0;		fd_if101=open("/tmp/if101",O_RDWR);	if(fd_if101<0){		printf("open /dev/if101 error.\n");		return 0;	}else	{		printf("detected if101 successfully");	}		printf("argc == %d", argc);	for( i = 0; i < argc ; i++){		if (strcmp(argv[i], "-f") == 0) {			freq = atoi(argv[++i]);			printf("freq == %d\n", freq);		}		if (strcmp(argv[i], "-s") == 0) {			second = atoi(argv[++i]);			printf("second == %d\n", second);		}		if (strcmp(argv[i], "-ts") == 0) {			ts_info[0]  = atoi(argv[++i]);			ts_info[1]  = atoi(argv[++i]);			ts_info[2]  = atoi(argv[++i]);			ts_info[3]  = atoi(argv[++i]);			printf("ts_info[0] = %d\n", ts_info[0]);			printf("ts_info[1] = %d\n", ts_info[1]);			printf("ts_info[2] = %d\n", ts_info[2]);			printf("ts_info[3] = %d\n", ts_info[3]);		}		if (strcmp(argv[i], "-o") == 0) {			file_name = argv[++i];		}		if (strcmp(argv[i], "-pm") == 0) {			pm = atoi(argv[++i]);		}		if (strcmp(argv[i], "-status") == 0) {						g_status = atoi(argv[++i]); 			printf("g_status == %d\n", g_status);		}			}	fd_file = open(file_name, O_WRONLY | O_CREAT);	if(fd_file < 0){		printf("open file %s error\n", file_name);		return 0;	}		unsigned char version[2] = {0,0};	ret = ioctl(fd_if101, IOCTL_GET_FW_VERSION, version);	if(ret != INNO_NO_ERROR){		printf("IOCTL_GET_FW_VERSION fail. ret = %d\n", ret);		return 0;	}	printf("FW version = %d.%d\n", version[0], version[1]);/*	if(pm == 1)		pm_mode = PM_MODE_RESUME;		else 			pm_mode = PM_MODE_PAUSE;		ret = ioctl(fd_if101, IOCTL_SET_PM, &pm_mode);	if(ret != INNO_NO_ERROR){		printf("IOCTL_SET_PM fail\n");		return 0;	}	printf("Set pm to %d\n", pm);*/	if(freq > 0){		unsigned char data = 0;		ret = ioctl(fd_if101, IOCTL_SET_FREQUENCY, &freq);		//INNO_I2C_Read(0xbd, &data);		//INNO_I2C_Read(0xbd, &data);		//printf("---data == %d ---", data);					if(ret != INNO_NO_ERROR){			printf("IOCTL_SET_FREQUENCY fail\n");			return 0;		}		printf("Set Tuner frequency to %d\n", freq);		sleep(2); // The delay is MUST		if(ts_info[0] == 0 && ts_info[1] == 1){			ret = ioctl(fd_if101, IOCTL_SET_RECEIVE_TS0, NULL); 			//ret = INNO_NO_ERROR;			if(ret != INNO_NO_ERROR){				printf("IOCTL_SET_RECEIVE_TS0 fail\n");				return 0;			}			printf("Set to receive TS0\n");		}		else{			ret = ioctl(fd_if101, IOCTL_SET_RECEIVE_PROGRAM, ts_info); 			//ret = INNO_NO_ERROR;			if(ret != INNO_NO_ERROR){				printf("IOCTL_SET_RECEIVE_TS0 fail\n");				return 0;			}			printf("Set to receive program. ts_info = %d, %d, %d, %d \n", ts_info[0], ts_info[1], ts_info[2], ts_info[3]);		}		ret = ioctl(fd_if101, IOCTL_GET_DEMOD_CONFIG, checking);		//ret = INNO_NO_ERROR;		if(ret != INNO_NO_ERROR){			printf("Get Demod Config Fail. ret=%d\n", ret);		}		for(i = 0; i< 2; i++){			printf("checking[%d].ts_start = %d\n", i,checking[i].ts_start);			printf("checking[%d].ts_count = %d\n", i,checking[i].ts_count);			printf("checking[%d].modulate_type = %d\n",i, checking[i].modulate_type);			printf("checking[%d].rs_mode = %d\n", i,checking[i].rs_mode);			printf("checking[%d].outer_mode = %d\n", i, checking[i].outer_mode);			printf("checking[%d].ldpc_mode = %d\n", i,checking[i].ldpc_mode);		}	}	else if(freq == 0){		unsigned char freq_dot[2] = {18, 25};		ret = ioctl(fd_if101, IOCTL_SCAN_FREQUENCY, freq_dot); 		if(ret != INNO_NO_ERROR){			printf("IOCTL_SCAN_FREQUENCY fail\n");			return 0;		}		printf("Scan frequency from %d to %d\n", freq_dot[0], freq_dot[1]);		sleep(2); // The delay is MUST		do{			ret = ioctl(fd_if101, IOCTL_GET_SYS_STATUS, &sys_status); 			if(ret != INNO_NO_ERROR){				printf("IOCTL_GET_SYS_STATUS fail\n");				return ret;			}			printf("******** sys status **************\n");			printf("Lock = %d\n",sys_status.lock); 				printf("CP Type = 0x%X\n",sys_status.cp_type); 				printf("Scan process = 0x%X\n",sys_status.scan_process); 				printf("Scan Result = 0x%X\n",sys_status.scan_result); 				printf("Current Frequenc = %d\n",sys_status.current_frequency); 				printf("Signal Strength = -%ddB\n",sys_status.signal_strength); 				printf("LDPC error percentage = %d%%\n",sys_status.ldpc_err_percent); 				printf("**********************************\n");			usleep(300000);		}while(sys_status.scan_process == 1);			if(sys_status.scan_result == 1){			printf("Find a valid frequency %d\n", sys_status.current_frequency);			ret = ioctl(fd_if101, IOCTL_SET_RECEIVE_TS0, NULL); 			if(ret != INNO_NO_ERROR){				printf("IOCTL_SET_RECEIVE_TS0 fail\n");				return 0;			}			printf("Set to receive TS0\n");	/*			ret = ioctl(fd_if101, IOCTL_SET_RECEIVE_PROGRAM, ts_info); 			if(ret != INNO_NO_ERROR){				printf("IOCTL_SET_RECEIVE_TS0 fail\n");				return 0;			}			printf("Set to receive program. ts_info = %d, %d, %d, %d \n", ts_info[0], ts_info[1], ts_info[2], ts_info[3]);	*/		}		else{			printf("Scan Fail\n");			return 0;		}			}	#if 0 	// just to test IOCTL_SET_DEMOD_CONFIG 	setting[0].ts_start = 11;	setting[0].ts_count = 4;	setting[0].modulate_type = DEMAP_QPSK; 	setting[0].rs_mode = RS_240_224; 	setting[0].outer_mode = OUTER_MODE_1; 	setting[0].ldpc_mode = LDPC_1_DIV_2; 	setting[1].ts_start = 0;	setting[1].ts_count = 0;	setting[1].modulate_type = 0; 	setting[1].rs_mode = 0; 	setting[1].outer_mode = 0; 	setting[1].ldpc_mode = 0; 	ret = ioctl(fd_if101, IOCTL_SET_DEMOD_CONFIG, setting);	if(ret != INNO_NO_ERROR){		printf("Set Demod Config Fail. ret=%d\n", ret);	}	printf("Set demod config\n");#endif	i = second;	while(1){//		printf("g_status ==== %d", g_status);		if(g_status == 1){			//ret = ioctl(fd_if101, IOCTL_GET_SYS_STATUS, &sys_status); 			ret = INNO_NO_ERROR;			if(ret != INNO_NO_ERROR){				printf("IOCTL_GET_SYS_STATUS fail\n");				return ret;			}			printf("******** sys status **************\n");			printf("Lock = %d\n",sys_status.lock); 				printf("CP Type = 0x%X\n",sys_status.cp_type); 				printf("Scan Result = 0x%X\n",sys_status.scan_result); 				printf("Current Frequenc = %d\n",sys_status.current_frequency); 				printf("Signal Strength = -%ddB\n",sys_status.signal_strength); 				printf("LDPC error percentage = %d%%\n",sys_status.ldpc_err_percent); 				printf("**********************************\n");		}		ret = read(fd_if101,buffer,BUFFER_SIZE); 	//		printf("read size = 0x%X\n", ret);		if(ret > 0){			ret = write(fd_file, buffer, ret);			if(--i == 0)				break;			else				printf("********receive seconds:%d**********\n\n",second - i);		}	}	free(buffer);		close(fd_if101);	close(fd_file);	//fclose(fp);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -