?? test_if101.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 + -