/* Funtion: Set chip wake up Input: Sleep_Enable -- 1: Sleep 0: Working Output: SUCCESS or FAILURE */ GX_STATE GX_Set_Sleep(struct gx1001_state *state, int Sleep_Enable) { if(NEWONE==GX_Get_Version(state)) { int temp1=0,temp2=0; int UCtmp1 = FAILURE,UCtmp2 = FAILURE; temp1=GX_Read_one_Byte(state, GX_MAN_PARA); /*0x10 - bit2*/ temp2=GX_Read_one_Byte(state, 0x14);/*0x14 - - bit4-bit5*/ if ((temp1!= FAILURE)&&(temp2!= FAILURE)) { temp1 &=0xfb; temp2 &=0xcf; temp1 |= 0x04&(Sleep_Enable<<2); temp2 |= 0x10&(Sleep_Enable<<4); temp2 |= 0x20&(Sleep_Enable<<5); UCtmp1 = GX_Write_one_Byte(state, GX_MAN_PARA,temp1); UCtmp2 = GX_Write_one_Byte(state, 0x14,temp2); if ((SUCCESS == UCtmp1)&&(SUCCESS == UCtmp2)) { if (0==Sleep_Enable ) { UCtmp1 =GX_HotReset_CHIP(state); } } } return UCtmp1&&UCtmp2; } return 1; }
/* Function: get the version of chip Input:None Output: NEWONE--- new version OLDONE--- old version */ GX_STATE GX_Get_Version(struct gx1001_state *state) { int temp1=0,temp2=0; temp1 = GX_Read_one_Byte(state, GX_CHIP_IDD); temp2 = GX_Read_one_Byte(state, GX_CHIP_VERSION); if((temp1==0x01)&&(temp2==0x02)) { return NEWONE; } else { return OLDONE; } }
/* Function: get the signal intensity expressed in percentage Output: The signal Strength value ( Range is [0,100] ) */ unsigned char GX_Get_Signal_Strength(void) { int iAGC1_word=300,iAGC2_word=300,Amp_Value; int read_i=0, agc1_temp=0,agc2_temp=0; //the following parameters are specific for certain tuner int C0=130; int C1=61, A1=-7; int C2=108, A2=-27; int C3=14, A3=9; int C4=119, A4=-6; //----------------------------------------------- int i=0; while (i<40) { agc1_temp =GX_Read_one_Byte(GX_AGC1_CTRL); agc2_temp =GX_Read_one_Byte(GX_AGC2_CTRL); if ((agc1_temp>0)&&(agc2_temp>0)) { if ((abs(agc1_temp - iAGC1_word)<5)&&(abs(agc2_temp - iAGC2_word)<5)) { break; } iAGC1_word = agc1_temp; iAGC2_word = agc2_temp; } GX_Delay_N_ms(10); i++; } if (i>=40) { iAGC1_word =GX_Read_one_Byte(GX_AGC1_CTRL); iAGC2_word =GX_Read_one_Byte(GX_AGC2_CTRL); } if (iAGC1_word > 0xdf) iAGC1_word = 0xdf; Amp_Value = C0 - ((iAGC1_word-C1)*(A1-A2))/(C2-C1) - ((iAGC2_word-C3)*(A3-A4))/(C4-C3); return GX_Change2percent(Amp_Value,0,100); }
/* Function: Set Digital AGC Input: -------- 0:disable 1:enable Output: SUCCESS or FAILURE */ GX_STATE GX_Set_Digital_AGC(struct gx1001_state *state, int mode) { int temp; temp = GX_Read_one_Byte(state, GX_DIGITAL_AGC_ON); if(0==mode) temp&=0x7f; else temp|=0x80; if(GX_Write_one_Byte(state, GX_DIGITAL_AGC_ON,temp)) return SUCCESS; else return FAILURE; }
/* Function: Set Tim Scan Input: -------- 0:disable 1:enable Output: SUCCESS or FAILURE */ GX_STATE GX_Set_Tim_Scan(struct gx1001_state *state, int mode) { int temp; temp = GX_Read_one_Byte(state, GX_TIM_SCAN_ENA); if(0==mode) temp&=0x7f; else temp|=0x80; if(GX_Write_one_Byte(state, GX_TIM_SCAN_ENA,temp)) return SUCCESS; else return FAILURE; }
/* Function: Set IF ThresHold Auto Adjust Input:--------0:disable 1:enable Output: SUCCESS or FAILURE */ GX_STATE GX_SET_AUTO_IF_THRES(struct gx1001_state *state, int mode) { int temp; temp=GX_Read_one_Byte(state, GX_AUTO_THRESH); if(0==mode) temp&=0x7f; else temp|=0x80; if(GX_Write_one_Byte(state, GX_AUTO_THRESH,temp)) return SUCCESS; else return FAILURE; }
/* Function: Set SF Mode Input: ----0:disable SF 1:enable SF Output: SUCCESS or FAILURE */ GX_STATE GX_Set_SF(struct gx1001_state *state, int mode) { int temp; temp=GX_Read_one_Byte(state, GX_SF_CANCEL_CTRL); if(0==mode) temp&=0xef; else temp|=0x10; if(GX_Write_one_Byte(state, GX_SF_CANCEL_CTRL,temp)) return SUCCESS; else return FAILURE; }
/* Function: Set TS output mode Input: 0 - Serial 1 - Parallel Output: SUCCESS or FAILURE */ GX_STATE GX_Set_OutputMode(struct gx1001_state *state, int mode) { int temp=0; int UCtmp = FAILURE; temp=GX_Read_one_Byte(state, GX_OUT_FORMAT); /*0x90 - bit6*/ if (temp != FAILURE) { temp &= 0xbf; if (mode) temp+=0x60;//clock_posedge must set to 0,do not use 0x40 jeffchang UCtmp = GX_Write_one_Byte(state, GX_OUT_FORMAT,temp); } return UCtmp; }
/* Function: Write one byte to chip Input: RegAdddress -- The register address WriteValue -- The write value Output: SUCCESS or FAILURE */ GX_STATE GX_Write_one_Byte(struct gx1001_state *state, int RegAddress,int WriteValue) { int UCtmp=FAILURE; unsigned char data[2]; data[0] = (unsigned char)RegAddress; data[1] = (unsigned char)WriteValue; //UCtmp = GX_I2cReadWrite( WRITE, ChipAddress,data[0],&data[1], 1 ); UCtmp = gx1001_writeregister(state, data[0], &data[1], 1); if (SUCCESS == UCtmp)//ok { if ((WriteValue&0xff) == (GX_Read_one_Byte(state, RegAddress)&0xff)) return SUCCESS; } return FAILURE; }
/* Function: Select QAM size (4 - 256), only for DVB. Input: size -- 0-2 = reserved; 3 = 16QAM; 4 = 32QAM; 5 = 64QAM; 6 = 128QAM; 7 = 256QAM. utput: SUCCESS or FAILURE */ GX_STATE GX_Select_DVB_QAM_Size(struct gx1001_state *state, int size) { int temp=0; int UCtmp = FAILURE; if ((size>7)||(size<=2)) size = 5; size<<=5; temp=GX_Read_one_Byte(state, GX_MODE_AGC); if (temp != FAILURE) { temp &= 0x1f; temp += size; UCtmp = GX_Write_one_Byte(state, GX_MODE_AGC,temp); /*0x20 - bit7:5 */ } return UCtmp; }
/* Function: Set AGC parameter Output: SUCCESS or FAILURE */ GX_STATE GX_Set_AGC_Parameter(struct gx1001_state *state) { int temp=0; GX_Write_one_Byte(state, GX_AGC_STD,28); temp=GX_Read_one_Byte(state, GX_MODE_AGC); if(temp!=FAILURE) { //temp&=0xe6 modify be live for double agc temp&=0xe6; temp=temp+0x10; GX_Write_one_Byte(state, GX_MODE_AGC,temp); return SUCCESS; } else { return FAILURE; } }
GX_STATE GX_Get_AllReg(struct gx1001_state *state) { AM_TRACE("GX_CHIP_ID 0x00 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_CHIP_ID )); AM_TRACE("GX_MAN_PARA 0x10 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_MAN_PARA )); AM_TRACE("GX_INT_PO1_SEL 0x11 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_INT_PO1_SEL )); AM_TRACE("GX_SYSOK_PO2_SEL 0x12 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_SYSOK_PO2_SEL )); AM_TRACE("GX_STATE_IND 0x13 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_STATE_IND )); AM_TRACE("GX_TST_SEL 0x14 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_TST_SEL )); AM_TRACE("GX_I2C_RST 0x15 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_I2C_RST )); AM_TRACE("GX_MAN_RST 0x16 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_MAN_RST )); AM_TRACE("GX_BIST 0x18 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_BIST )); AM_TRACE("GX_MODE_AGC 0x20 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_MODE_AGC )); AM_TRACE("GX_AGC_PARA 0x21 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_AGC_PARA )); AM_TRACE("GX_AGC2_THRES 0x22 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_AGC2_THRES )); AM_TRACE("GX_AGC12_RATIO 0x23 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_AGC12_RATIO )); AM_TRACE("GX_AGC_STD 0x24 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_AGC_STD )); AM_TRACE("GX_SCAN_TIME 0x25 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_SCAN_TIME )); AM_TRACE("GX_DCO_CENTER_H 0x26 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_DCO_CENTER_H )); AM_TRACE("GX_DCO_CENTER_L 0x27 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_DCO_CENTER_L )); AM_TRACE("GX_BBC_TST_SEL 0x28 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_BBC_TST_SEL )); AM_TRACE("GX_AGC_ERR_MEAN 0x2B Value = 0X%02x\n",GX_Read_one_Byte(state, GX_AGC_ERR_MEAN )); AM_TRACE("GX_FREQ_OFFSET_H 0x2C Value = 0X%02x\n",GX_Read_one_Byte(state, GX_FREQ_OFFSET_H )); AM_TRACE("GX_FREQ_OFFSET_L 0x2D Value = 0X%02x\n",GX_Read_one_Byte(state, GX_FREQ_OFFSET_L )); AM_TRACE("GX_AGC1_CTRL 0x2E Value = 0X%02x\n",GX_Read_one_Byte(state, GX_AGC1_CTRL )); AM_TRACE("GX_AGC2_CTRL 0x2F Value = 0X%02x\n",GX_Read_one_Byte(state, GX_AGC2_CTRL )); AM_TRACE("GX_FSAMPLE_H 0x40 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_FSAMPLE_H )); AM_TRACE("GX_FSAMPLE_M 0x41 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_FSAMPLE_M )); AM_TRACE("GX_FSAMPLE_L 0x42 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_FSAMPLE_L )); AM_TRACE("GX_SYMB_RATE_H 0x43 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_SYMB_RATE_H )); AM_TRACE("GX_SYMB_RATE_M 0x44 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_SYMB_RATE_M )); AM_TRACE("GX_SYMB_RATE_L 0x45 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_SYMB_RATE_L )); AM_TRACE("GX_TIM_LOOP_CTRL_L 0x46 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_TIM_LOOP_CTRL_L )); AM_TRACE("GX_TIM_LOOP_CTRL_H 0x47 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_TIM_LOOP_CTRL_H )); AM_TRACE("GX_TIM_LOOP_BW 0x48 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_TIM_LOOP_BW )); AM_TRACE("GX_EQU_CTRL 0x50 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_EQU_CTRL )); AM_TRACE("GX_SUM_ERR_POW_L 0x51 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_SUM_ERR_POW_L )); AM_TRACE("GX_SUM_ERR_POW_H 0x52 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_SUM_ERR_POW_H )); AM_TRACE("GX_EQU_BYPASS 0x53 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_EQU_BYPASS )); AM_TRACE("GX_EQU_TST_SEL 0x54 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_EQU_TST_SEL )); AM_TRACE("GX_EQU_COEF_L 0x55 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_EQU_COEF_L )); AM_TRACE("GX_EQU_COEF_M 0x56 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_EQU_COEF_M )); AM_TRACE("GX_EQU_COEF_H 0x57 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_EQU_COEF_H )); AM_TRACE("GX_EQU_IND 0x58 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_EQU_IND )); AM_TRACE("GX_RSD_CONFIG 0x80 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_RSD_CONFIG )); AM_TRACE("GX_ERR_SUM_1 0x81 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_ERR_SUM_1 )); AM_TRACE("GX_ERR_SUM_2 0x82 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_ERR_SUM_2 )); AM_TRACE("GX_ERR_SUM_3 0x83 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_ERR_SUM_3 )); AM_TRACE("GX_ERR_SUM_4 0x84 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_ERR_SUM_4 )); AM_TRACE("GX_RSD_DEFAULT 0x85 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_RSD_DEFAULT )); AM_TRACE("GX_OUT_FORMAT 0x90 Value = 0X%02x\n",GX_Read_one_Byte(state, GX_OUT_FORMAT )); return 1; }