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

📄 user_if.c

📁 三星公司的有线数字高频头资料及源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/* This is a program of QAM NIM for Samsung tuner
IF you have any questions or comments, feel free send
a mail to :  papilon@samsung.co.kr
Thanx a lot!
*/
/* include files */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
#include <dos.h>
#include "qam3118.h"
#include "host_api.h"
#define TRUE    1
#define FALSE   0
/* misc compiler constants */
#define STATUS_XPOS       50
#define STATUS_YPOS       8
#define REVERSE_VIDEO     textcolor(BLUE);  textbackground(WHITE)
#define NORMAL_VIDEO      textcolor(WHITE); textbackground(BLUE)

#define SW_TITLE          "  BCM93180 QAMLink Controller"
#define VERSION           "2.04"
#define TOGGLE_RST      0x01    /* Printer Port Bit 0 Output */
//#define NTSC  	0  // 1: NTSC 0 : PAL

/* global variables */
qamstatus_t qam_status;

int         glb_slave_addr   = SLAVE_ADDR; //
int         glb_port_data    = 0x0378;
int         glb_port_status  = 0x0379;
int         glb_port_control = 0x037A;
int         glb_stosc1=0,glb_stosc2=0;
int         access;
float	Symbol_Rate = 6.925;// China spec.
float	Down_Xtal = 38.000;
int T_AGC = 110; //default starting number
int Level;
int Select_QAM = 3;//default 64QAM
int gap = 0;
int NTSC = 0;  // 0: PAL,  1: NTSC
int sori = 0;
int Normal = 0;//0: Inverse spectrum 1:normal spectrum
/* error states */
static char *errno_status[] = {
  "NO ERROR     ",
  "I2C_NOACK    ",   /* Acknowledge not seen on I2C transfer */
  "I2C_BAD_PROTO",   /* Protocol violation on I2C bus        */
  "SCR_ERROR    ",   /* error in executing script file       */
  "             ",
};
/* function prototypes */
int qam_lookup(char *keyword);
char *file_choose(char *type, char *extension, char *prompt);
int my_get_char(void);
int set_op_mode(void);
enum ShellCmdType parse(char *bufp, int *nargs, char **arg);
int eval_acq_script(char *fname, int npasses, int wait_time);
int show_menu(char *menu[]);
void show_status(int refresh);
int compute_pll_div(float fval, int *pll1_div, int *pll2_div);
void dump_bcm3118(void);
void Init_FEC();
void Init_Config();
void Acquire_Baud_Timing();
void Constellation_4_Refinement();
void Constellation_16_Refinement();
void Constellation_64_Refinement();
void Constellation_32_Refinement();
void Constellation_128_Refinement();
void Constellation_256_Refinement();
int run_command_file(FILE *fp);
void Set_QAM();
void Set_Symbol();
void Set_Freq();
void Dis_Show();
void QAM_Init();
void Adapt_AGC_2();
void My_Acquisition(void);
void Check_Spectrum_Inverse();
void Check_Lock();

/* keyword for shell commands */
enum ShellCmdType {
  SHELL_NOOP=0   ,
  SHELL_QAM_READ ,
  SHELL_QAM_WRITE,
  SHELL_HELP     ,
  SHELL_EXIT     ,
  SHELL_PROMPT   ,
  SHELL_QAM_INIT ,
  SHELL_PING     ,
  SHELL_SET      ,
  SHELL_TUNE     ,
  SHELL_UNKNOWN
};


static struct {
  enum ShellCmdType  keyval;
  char              *keyword;
} ShellKeyword[] = {
  SHELL_QAM_READ , "qam_read"   ,
  SHELL_QAM_WRITE, "qam_write"  ,
  SHELL_HELP     , "help"       ,
  SHELL_EXIT     , "exit"       ,
  SHELL_PROMPT   , "prompt"     ,
  SHELL_QAM_INIT , "qam_init"   ,
  SHELL_PING     , "ping"       ,
  SHELL_SET      , "set"        ,
  SHELL_TUNE     , "tune"       ,
  SHELL_UNKNOWN  , (char *) 0
};

/* menu prompts */
static char *main_menu[] = {
  "Reacquire QAM Channel    ",  /* F1  */
  "Execute Command File     ",  /* F2  */
  "Select Acq Script        ",  /* F3  */
  "Set Symbol Rate          ",  /* F4  */
  "Tune to Frequency        ",  /* F5  */
  "Monitor BCM3118 State    ",  /* F6  */
  "Monitor Equalizer        ",  /* F7  */
  "Monitor Constellation    ",  /* F8  */
  "On-Line Help             ",  /* F9  */
  "Exit                     ",  /* F10 */
  (char *) 0
};

/* C6M Channel-to-Frequency Mapping */
/* ADD : allow for user defined frequency mappings */
#define MAX_CHANNEL 94

static float paldk_freq_map[] = {
  55.2625 ,
  61.2625 ,
  67.2625 ,
  73.2625 ,
  83.2625 ,
  79.2625 ,
  85.2625 ,
  91.2625 ,
  97.2625 ,
  103.2625 ,
  109.2625 ,
  115.2625 ,
  121.2625 ,
  127.2625 ,
  133.2625 ,
  139.2625 ,
  145.2625 ,
  151.2625 ,
  157.2625 ,
  163.2625 ,
  169.2625 ,
  175.2625 ,
  181.2625 ,
  187.2625 ,
  193.2625 ,
  199.2625 ,
  205.2625 ,
  211.2625 ,
  217.2625 ,
  223.2625 ,
  229.2625 ,
  235.2625 ,
  241.2625 ,
  247.2625 ,
  253.2625 ,
  259.2625 ,
  265.2625 ,
  271.2625 ,
  277.2625 ,
  283.2625 ,
  289.2625 ,
  295.2625 ,
  301.2625 ,
  307.2625 ,
  313.2625 ,
  319.2625 ,
  325.2625 ,
  331.2625 ,
  337.2625 ,
  343.2625 ,
  349.2625 ,
  355.2625 ,
  361.2625 ,
  367.2625 ,
  373.2625 ,
  379.2625 ,
  385.2625 ,
  391.2625 ,
  397.2625 ,
  403.2625 ,
  409.2625 ,
  415.2625 ,
  421.2625 ,
  427.2625 ,
  433.2625 ,
  439.2625 ,
  445.2625 ,
  451.2625 ,
  457.2625 ,
  463.2625 ,
  469.2625 ,
  475.2625 ,
  481.2625 ,
  487.2625 ,
  493.2625 ,
  499.2625 ,
  505.2625 ,
  511.2625 ,
  517.2625 ,
  523.2625 ,
  529.2625 ,
  535.2625 ,
  541.2625 ,
  547.2625 ,
  553.2625 ,
  559.2625 ,
  565.2625 ,
  571.2625 ,
  577.2625 ,
  583.2625 ,
  589.2625 ,
  595.2625 
};
static float c6m_freq_map[] = {
  55.2625 ,
  61.2625 ,
  67.2625 ,
  73.2625 ,
  83.2625 ,
  79.2625 ,
  85.2625 ,
  91.2625 ,
  97.2625 ,
  103.2625 ,
  109.2625 ,
  115.2625 ,
  121.2625 ,
  127.2625 ,
  133.2625 ,
  139.2625 ,
  145.2625 ,
  151.2625 ,
  157.2625 ,
  163.2625 ,
  169.2625 ,
  175.2625 ,
  181.2625 ,
  187.2625 ,
  193.2625 ,
  199.2625 ,
  205.2625 ,
  211.2625 ,
  217.2625 ,
  223.2625 ,
  229.2625 ,
  235.2625 ,
  241.2625 ,
  247.2625 ,
  253.2625 ,
  259.2625 ,
  265.2625 ,
  271.2625 ,
  277.2625 ,
  283.2625 ,
  289.2625 ,
  295.2625 ,
  301.2625 ,
  307.2625 ,
  313.2625 ,
  319.2625 ,
  325.2625 ,
  331.2625 ,
  337.2625 ,
  343.2625 ,
  349.2625 ,
  355.2625 ,
  361.2625 ,
  367.2625 ,
  373.2625 ,
  379.2625 ,
  385.2625 ,
  391.2625 ,
  397.2625 ,
  403.2625 ,
  409.2625 ,
  415.2625 ,
  421.2625 ,
  427.2625 ,
  433.2625 ,
  439.2625 ,
  445.2625 ,
  451.2625 ,
  457.2625 ,
  463.2625 ,
  469.2625 ,
  475.2625 ,
  481.2625 ,
  487.2625 ,
  493.2625 ,
  499.2625 ,
  505.2625 ,
  511.2625 ,
  517.2625 ,
  523.2625 ,
  529.2625 ,
  535.2625 ,
  541.2625 ,
  547.2625 ,
  553.2625 ,
  559.2625 ,
  565.2625 ,
  571.2625 ,
  577.2625 ,
  583.2625 ,
  589.2625 ,
  595.2625 
};

/* keywords for activating action from shell */
static struct {
  int   keyval;
  char  *keyword;
  int   r_w;       /* Bit2=1 for MB, Bit1=1 for write reg, Bit0=1 for read reg */
} qam_keyword[] = {
	/* Single Byte Registers */
	SB_IRQCTL , "irqctl",  3,
	SB_RSTCTL , "rstctl",  3,
	SB_FRZCTL , "frzctl",  3,
	SB_QAMCTL , "qamctl",  3,
	SB_LMSCTL , "lmsctl",  3,
	SB_RTCCTL , "rtcctl",  3,
	SB_BYPCTL , "bypctl",  3,
	SB_FMTCTL , "fmtctl",  3,
	SB_FFECTL , "ffectl",  3,
	SB_DSSCTL , "dssctl",  3,
	SB_STOSCM , "stoscm",  2,
	SB_RSTCTR , "rstctr",  3,
	SB_FRZCTL2, "frzctl2", 3,
	SB_RSVD2  , "rsvd2" ,  3,
	SB_MASCTL , "masctl",  3,
	SB_TUNCTL , "tunctl",  3,
	SB_EQLCTL , "eqlctl",  3,
	SB_RSCR0  , "rscr0",   1,
	SB_RSCR1  , "rscr1",   1,
	SB_RSCR2  , "rscr2",   1,
	SB_SYNCR2 , "syncr2",  3,
	SB_LRESWR , "lreswr",  3,
  SB_LRESST , "lresst",  3,
  SB_LRESPO , "lrespo",  3,
  SB_LRESPA , "lrespa",  3,
  SB_SYNCR3 , "syncr3",  3,
  SB_HRMEVA , "hrmeva",  3,
  SB_SYNCR4 , "syncr4",  3,
  SB_SYNTST , "syntst",  3,
  SB_HRMCOU , "hrmcou",  3,
  SB_HRMDIS , "hrmdis",  3,
  SB_HRMPRBS, "hrmprbs", 3,
  SB_HRMPAT , "hrmpat",  3,
  SB_HRMSEE , "hrmsee",  3,
  SB_SYNCR5 , "syncr5",  3,
  SB_SYNCR6 , "syncr6",  3,
  SB_BINVSYN, "binvsyn", 3,
  SB_INVSYT , "invsyt",  3,
  SB_LSSYCT , "lssyct",  3,
  SB_SYNSTA , "synsta",  1,
  SB_TUNSET , "tunset",  3,
  SB_CLKSET , "clkset",  3,
  SB_TUNSEL0, "tunsel0", 2,
  SB_TUNSEL1, "tunsel1", 2,

  /* multi-byte op codes */
  MB_STF0   , "stf0",    6,
  MB_STF1   , "stf1",    6,
  MB_STF2   , "stf2",    6,
  MB_STF3   , "stf3",    6,
  MB_STF4   , "stf4",    6,
  MB_STF5   , "stf5",    6,
  MB_STF6   , "stf6",    6,
  MB_STF7   , "stf7",    6,
  MB_STD0   , "std0",    6,
  MB_STD1   , "std1",    6,
  MB_STD2   , "std2",    6,
  MB_STD3   , "std3",    6,
  MB_STD4   , "std4",    6,
  MB_STD5   , "std5",    6,
  MB_STD6   , "std6",    6,
  MB_STD7   , "std7",    6,
  MB_STD8   , "std8",    6,
  MB_STD9   , "std9",    6,
  MB_STD10  , "std10",   6,
  MB_STD11  , "std11",   6,
  MB_STSNRT , "stsnrt",  6,
  MB_STSNRE , "stsnre",  6,
  MB_STSNRC , "stsnrc",  6,
  MB_STATHR , "stathr",  6,
  MB_STABW  , "stabw",   6,
  MB_STAI   , "stai",    6,
  
  MB_STIF   , "stif",    6, 
  MB_STBBI  , "stbbi",   6,
  MB_STBBQ  , "stbbq",   6,
  
  MB_STBRLC , "stbrlc",  6,
  MB_STBRIC , "stbric",  6,
  MB_STBRI  , "stbri",   6,
  MB_STBFOS , "stbfos",  6,
  MB_STBEN  , "stben",   6,
  MB_STBRDL , "stbrdl",  6,
  MB_STDRLC , "stdrlc",  6,
  MB_STDRIC , "stdric",  6,
  MB_STDRI  , "stdri",   6,
  MB_STDRSP , "stdrsp",  6,
  MB_STDRPA , "stdrpa",  6,
  MB_STDRRB , "stdrrb",  6,
  MB_STDRFD , "stdrfd",  6,
  MB_STGDSI , "stgdsi",  6,
  MB_STOSC1 , "stosc1",  6,
  MB_STOSC2 , "stosc2",  6,
  MB_STLPST , "stlpst",  6,
  MB_LDF0   , "ldf0",    5,
  MB_LDF1   , "ldf1",    5,
  MB_LDF2   , "ldf2",    5,
  MB_LDF3   , "ldf3",    5,
  MB_LDF4   , "ldf4",    5,
  MB_LDF5   , "ldf5",    5,
  MB_LDF6   , "ldf6",    5,
  MB_LDF7   , "ldf7",    5,
  MB_LDD0   , "ldd0",    5,
  MB_LDD1   , "ldd1",    5,
  MB_LDD2   , "ldd2",    5,
  MB_LDD3   , "ldd3",    5,
  MB_LDD4   , "ldd4",    5,
  MB_LDD5   , "ldd5",    5,
  MB_LDD6   , "ldd6",    5,
  MB_LDD7   , "ldd7",    5,

  MB_LDD8   , "ldd8",    5,
  MB_LDD9   , "ldd9",    5,
  MB_LDD10  , "ldd10",   5,
  MB_LDD11  , "ldd11",   5,

  MB_LDSFT  , "ldsft",   5,
  MB_LDSNRE , "ldsnre",  5,
  MB_LDALI  , "ldali",   5,
  MB_LDAI   , "ldai",    5,

  MB_LDIF   , "ldif",    5,
  MB_LDBBI  , "ldbbi",   5,
  MB_LDBBQ  , "ldbbq",   5, 
  
  MB_LDADS  , "ldads",   5,
  MB_LDBRFO , "ldbrfo",  5,
  MB_LDBRI  , "ldbri",   5,
  MB_LDBNCO , "ldbnco",  5,
  MB_LDBRDS , "ldbrds",  5,
  MB_LDDRFO , "lddrfo",  5,
  MB_LDDRI  , "lddri",   5,
  MB_LDDRPA , "lddrpa",  5,
  MB_LDGDS  , "ldgds",   5,
  MB_LDID   , "ldid",    5,

  0         , (char *) 0
};

void Tuner_AGC(int value)
{
	char eight_1,eight_2;
	int ival,qval;
	//scanf("%d",&value);
	if( value <20)
	{
	value = 20;
	T_AGC = 20;
	}
	eight_2 = (char)(value - 128);//2's compliment
	ival = ((eight_2 & 0xff)<<8 );
	qam_write(MB_W,MB_STGDSI,ival,0x0000);

}

int qam_lookup(char *keyword)
{
  int i;

  /* convert keyword to lowercase */
  for (i=0; keyword[i] != '\0'; i++) keyword[i] = tolower(keyword[i]);

  /* lookup keyword and return the keyval */
  for (i=0; qam_keyword[i].keyword != (char *) 0; i++) {
	 	if (strcmp(qam_keyword[i].keyword,keyword) == 0) {
			access = qam_keyword[i].r_w;
			return qam_keyword[i].keyval;
	 	}
  }
  return QAM_UNKNOWN;
}

char *file_choose(char *type, char *extension, char *prompt)
{
  char   buf[132];
  char   files[64][10],source_path[80],*cp;
  static char name[32];
  int    i,j,c,n=0,sel=0,x,y,lastx,lasty;
  int    nrows,ncols,cur_row,cur_col,dirstat;
  FILE   *fp;
  struct find_t source_files;

  /* obtain list of available script files */
  sprintf(source_path,"%s\\*%s",type,extension);
  dirstat = _dos_findfirst(source_path,_A_NORMAL,&source_files);
  while (!dirstat) {
	for (cp=source_files.name; *cp != '.' && *cp != '\0'; cp++) ;
    if (*cp == '.') *cp = '\0';
    strncpy(files[n++],source_files.name,10);

⌨️ 快捷键说明

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