void mmi_bbm_read(int argc, char *argv[]) { u16 addr; u16 length; u8 data; int i; if(argc == 2) { addr = htoi(argv[1]); BBM_READ(hDevice, addr, &data); print_log("[0x%04X] : 0x%02X\n", addr, data); } else if(argc == 3) { addr = htoi(argv[1]); length = htoi(argv[2]); for(i=0; i<length; i++) { if((i % 8) == 0) print_log("\n[0x%04X] : ", addr+i); BBM_READ(hDevice, addr+i, &data); print_log("%02X ", data & 0xFF); } print_log("\n"); } else { print_log("usage : %s [start addr] [length] ; byte read command\n", (int)argv[0]); } }
void mmi_bbm_verify(int argc, char *argv[]) { u8 dest_addr; u8 dest_data, temp_data; int i; int retry; switch(argc) { case 2: dest_data = 0xAA; dest_addr = htoi(argv[1]); print_log("%s [0x%X] [0x%X] [0x%X]\n", argv[0], dest_addr, dest_data, 1); BBM_WRITE(hDevice, dest_addr, dest_data); //Sleep(10); BBM_READ(hDevice, dest_addr, &temp_data); if(dest_data != temp_data) { print_log("Mismatch Data ; addr[0x%X] write [0x%X] : read [0x%X]\n", dest_addr, dest_data, temp_data); } break; case 3: dest_data = 0xff; dest_addr = htoi(argv[1]); retry = htoi(argv[2]); print_log("%s [0x%X] [0x%X]\n", argv[0], dest_addr, retry); for(i=0; i<retry; i++) { BBM_WRITE(hDevice, dest_addr, dest_data); //Sleep(10); BBM_READ(hDevice, dest_addr, &temp_data); if(dest_data != temp_data) { print_log("\n 0x%xth Mismatch Data ; addr[0x%X] write [0x%X] : read [0x%X]\n", i, dest_addr, dest_data, temp_data); } dest_data--; print_log("."); } break; default: print_log("Usage : %s [address] [retry]\n", argv[0]); break; } }
//static fci_u16 tunerbb_drv_fc8050_rserror_count(void) static fci_u16 tunerbb_drv_fc8050_rserror_count(fci_u16 *nframe)//for dummy channel. { //fci_u32 rt_esum; fci_u16 rt_nframe, rt_rserror; fci_u8 rs_ctrl=0; #ifdef MON_BURST_MODE uint8 burst[12]; rs_ctrl = 0x21; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); BBM_BULK_READ(0, BBM_RS_RT_BER_PER, &burst[0], 4); //BBM_LONG_READ(0, BBM_RS_RT_BER_PER, burst[0]); rt_nframe = (uint16)(*(uint16*)burst); rt_rserror = (uint16)(*((uint16*)burst+1)); rs_ctrl = 0x1; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); #else BBM_READ(0, BBM_RS_CONTROL, &rs_ctrl); rs_ctrl |= 0x20; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); BBM_WORD_READ(0, BBM_RS_RT_BER_PER, &rt_nframe); //실시간으로 count 되는 frame 수 //BBM_LONG_READ(0, BBM_RS_RT_ERR_SUM, &rt_esum); BBM_WORD_READ(0, BBM_RS_RT_FAIL_CNT, &rt_rserror); rs_ctrl &= ~0x20; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); #endif *nframe=rt_nframe; //실시간으로 count 되는 frame 수 return rt_rserror; }
static int viterbi_rt_ber_read(unsigned int* ber) { u32 vframe, esum; u8 vt_ctrl=0; int res = BBM_OK; BBM_READ(NULL, BBM_VT_CONTROL, &vt_ctrl); vt_ctrl |= 0x10; BBM_WRITE(NULL, BBM_VT_CONTROL, vt_ctrl); BBM_LONG_READ(NULL,BBM_VT_RT_BER_PERIOD, &vframe); BBM_LONG_READ(NULL,BBM_VT_RT_ERROR_SUM, &esum); vt_ctrl &= ~0x10; BBM_WRITE(NULL,BBM_VT_CONTROL, vt_ctrl); if(vframe == 0) { *ber = 0; return BBM_NOK; } // *ber = ((float)esum / (float)vframe) * 10000.0f; *ber = (esum * 10000 / vframe); return res; }
static int8 tunerbb_drv_fc8050_get_sync_status(void) { uint8 sync_status; BBM_READ(0, BBM_SYNC_STATUS, &sync_status); return sync_status; }
void fc8050_isr_interruptclear(void) { u8 extIntStatus = 0; BBM_READ(NULL, BBM_COM_INT_STATUS, &extIntStatus); BBM_WRITE(NULL, BBM_COM_INT_STATUS, extIntStatus); BBM_WRITE(NULL, BBM_COM_INT_STATUS, 0x00); }
void ptcheck_thread(void *param) { data_dump_param *data = (data_dump_param*)param; int hDevice = data->dev; int num = data->num; u8 buf[MSC_BUF_SIZE]; int check_cnt_size=0; int size; FILE *f; char *f_name[128]; ptcheck_thread_start = 1; print_log("pattern check start \n"); sprintf((void*)f_name,DUMP_PATH"pattern_ts.dat"); f = fopen((void*)f_name, "wb"); #ifdef FEATURE_TS_CHECK create_tspacket_anal(); #endif mtv_ts_start(hDevice); while(1) { size = mtv_data_read(hDevice, buf, MSC_BUF_SIZE); #ifdef FEATURE_TS_CHECK if(!(size%188)) { put_ts_packet(0, &buf[0], size); check_cnt_size+=size; fwrite(&buf[0], 1, size, f); } #ifdef FEATURE_OVERRUN_CHECK { u8 over; BBM_READ(hDevice, 0x8001, &over); if(over) { BBM_WRITE(hDevice, 0x8001, over); print_log("TS OVERRUN : %d\n", over); } } #endif if(check_cnt_size>188*100) { print_pkt_log(); check_cnt_size=0; } #endif if(!ptcheck_thread_start) break; } mtv_ts_stop(hDevice); fclose(f); print_log("\nEnd pattern check\n"); }
void tdmb_fc8050_spi_write_read_test(void) { uint16 i; uint32 wdata = 0; uint32 ldata = 0; uint32 data = 0; uint32 temp = 0; #define TEST_CNT 5 tdmb_fc8050_power_on(); for(i=0;i<TEST_CNT;i++) { BBM_WRITE(NULL, 0x05, i & 0xff); BBM_READ(NULL, 0x05, (fci_u8*)&data); printk("FC8000 byte test (0x%x,0x%x)\n", i & 0xff, data); if((i & 0xff) != data) printk("FC8000 byte test (0x%x,0x%x)\n", i & 0xff, data); } for(i=0;i<TEST_CNT;i++) { BBM_WORD_WRITE(NULL, 0x0210, i & 0xffff); BBM_WORD_READ(NULL, 0x0210, (fci_u16*)&wdata); printk("FC8000 word test (0x%x,0x%x)\n", i & 0xffff, wdata); if((i & 0xffff) != wdata) printk("FC8000 word test (0x%x,0x%x)\n", i & 0xffff, wdata); } for(i=0;i<TEST_CNT;i++) { BBM_LONG_WRITE(NULL, 0x0210, i & 0xffffffff); BBM_LONG_READ(NULL, 0x0210, (fci_u32*)&ldata); printk("FC8000 long test (0x%x,0x%x)\n", i & 0xffffffff, ldata); if((i & 0xffffffff) != ldata) printk("FC8000 long test (0x%x,0x%x)\n", i & 0xffffffff, ldata); } data = 0; for(i=0;i<TEST_CNT;i++) { temp = i&0xff; BBM_TUNER_WRITE(NULL, 0x12, 0x01, (fci_u8*)&temp, 0x01); BBM_TUNER_READ(NULL, 0x12, 0x01, (fci_u8*)&data, 0x01); printk("FC8000 tuner test (0x%x,0x%x)\n", i & 0xff, data); if((i & 0xff) != data) printk("FC8000 tuner test (0x%x,0x%x)\n", i & 0xff, data); } temp = 0x51; BBM_TUNER_WRITE(NULL, 0x12, 0x01, (fci_u8*)&temp, 0x01 ); tdmb_fc8050_power_off(); }
static uint32 tunerbb_drv_fc8050_get_viterbi_ber(void) //msc_ber { uint8 vt_ctrl; uint32 bper, tbe; uint32 ber; BBM_READ(0, BBM_VT_CONTROL, &vt_ctrl); vt_ctrl |= 0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); BBM_LONG_READ(0, BBM_VT_RT_BER_PERIOD, &bper); BBM_LONG_READ(0, BBM_VT_RT_ERROR_SUM, &tbe); vt_ctrl &= ~0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); if(bper == 0) { // LGE_INTG_090217 ber = MAX_MSC_BER; } else if(tbe == 0) { ber = 0; } else { //ber = ((tbe / bper) * 100000); //ber = (tbe * 100000) / bper; if(tbe > 42949) { ber = ((tbe * 1000)/bper)*100; } else { ber = (tbe*100000)/bper; } } ber = (ber >= MAX_MSC_BER) ? MAX_MSC_BER : ber; /* ber must bigger than 0 because FactoryTest issue */ if(ber == 0) { ber = 1; } return ber; }
static fci_u16 tunerbb_drv_fc8050_rserror_count(void) { fci_u32 rt_esum; fci_u16 rt_nframe, rt_rserror; fci_u8 rs_ctrl=0; BBM_READ(0, BBM_RS_CONTROL, &rs_ctrl); rs_ctrl |= 0x20; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); BBM_WORD_READ(0, BBM_RS_RT_BER_PER, &rt_nframe); BBM_LONG_READ(0, BBM_RS_RT_ERR_SUM, &rt_esum); BBM_WORD_READ(0, BBM_RS_RT_FAIL_CNT, &rt_rserror); rs_ctrl &= ~0x20; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); return rt_rserror; }
/*======================================================= Function : tunerbb_drv_fc8050_init Description : Initializing the FC8050 Chip after power on Parameter : VOID Return Value : SUCCESS : 1 FAIL : 0 or negative interger (If there is error code) when model who edit history ------------------------------------------------------- 2010/05/17 MOBIT prajuna EBI2 configuration 2010/05/31 MOBIT prajuna Removed test code 2010/06/09 MOBIT prajuna TDMB porting(KB3 Rev. A patch) 2010/07/15 MOBIT prajuna TDMB tuning for QSC 2010/07/16 MOBIT somesoo TDMB tuning for QSC with FCI 최규원 과장 2010/07/17 MOBIT somesoo TDMB porting(VG) 2010/08/19 MOBIT prajuna Code review 2010/09/10 MOBIT prajuna TDMB porting(Aloe) ======================================================== */ int8 tunerbb_drv_fc8050_init(void) { uint8 res; /*test*/ /* uint16 i; uint32 wdata = 0; uint32 ldata = 0; uint32 data = 0; uint32 temp = 0; */ /* Common Code */ #if defined(STREAM_SLAVE_PARALLEL_UPLOAD) /* EBI2 Specific Code */ BBM_HOSTIF_SELECT(NULL, BBM_PPI); #elif defined(STREAM_TS_UPLOAD) /* TSIF Specific Code */ BBM_HOSTIF_SELECT(NULL, BBM_I2C); #elif defined(STREAM_SPI_UPLOAD) /* SPI Specific. Code */ BBM_HOSTIF_SELECT(NULL, BBM_SPI); #else #error code not present #endif BBM_FIC_CALLBACK_REGISTER((fci_u32)NULL, tunerbb_drv_fc8050_fic_cb); BBM_MSC_CALLBACK_REGISTER((fci_u32)NULL, tunerbb_drv_fc8050_msc_cb); res = BBM_INIT(NULL); if(res) return FC8050_RESULT_ERROR; else { #if !defined(STREAM_TS_UPLOAD) memset((void*)&g_chinfo, 0xff, sizeof(g_chinfo)); memset((void*)&msc_buffer, 0x00, sizeof(DATA_BUFFER)); memset((void*)&fic_buffer, 0x00, sizeof(DATA_BUFFER)); #endif } res = BBM_TUNER_SELECT(0, FC8050_TUNER, BAND3_TYPE); // res = BBM_PROBE(0); // printk("tunerbb_drv_fc8050_init probe RES = %d\n", res); #if 0 //fc8050 <-> Host(MSM) 간의 Interface TEST를 위한 code /* test */ for(i=0;i<5000;i++) { // dog_kick(); BBM_WRITE(NULL, 0x05, i & 0xff); BBM_READ(NULL, 0x05, &data); if((i & 0xff) != data) printk("FC8000 byte test (0x%x,0x%x)\n", i & 0xff, data); } for(i=0;i<5000;i++) { BBM_WORD_WRITE(NULL, 0x0210, i & 0xffff); BBM_WORD_READ(NULL, 0x0210, &wdata); if((i & 0xffff) != wdata) printk("FC8000 word test (0x%x,0x%x)\n", i & 0xffff, wdata); } for(i=0;i<5000;i++) { BBM_LONG_WRITE(NULL, 0x0210, i & 0xffffffff); BBM_LONG_READ(NULL, 0x0210, &ldata); if((i & 0xffffffff) != ldata) printk("FC8000 long test (0x%x,0x%x)\n", i & 0xffffffff, ldata); } data = 0; for(i=0;i<5000;i++) { temp = i&0xff; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01); BBM_TUNER_READ(NULL, 0x12, 0x01, &data, 0x01); if((i & 0xff) != data) printk("FC8000 tuner test (0x%x,0x%x)\n", i & 0xff, data); } temp = 0x51; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01 ); /* test */ #endif if(res) return FC8050_RESULT_ERROR; else return FC8050_RESULT_SUCCESS; }
static uint32 tunerbb_drv_fc8050_get_viterbi_ber(void) //msc_ber { uint8 vt_ctrl; uint32 bper, tbe; uint32 ber; #ifdef MON_BURST_MODE uint8 burst[12]; #ifdef FEATURE_FIC_BER if(serviceType[0]==FC8050_ENSQUERY) vt_ctrl = 0x11; else vt_ctrl = 0x13; #else vt_ctrl = 0x13; #endif BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); BBM_BULK_READ(0, BBM_VT_RT_BER_PERIOD, &burst[0], 8); bper = (uint32)(*(uint32*)burst); tbe = (uint32)(*((uint32*)burst+1)); #ifdef FEATURE_FIC_BER if(serviceType[0]==FC8050_ENSQUERY) vt_ctrl = 0x1; else vt_ctrl = 0x3; #else vt_ctrl = 0x3; #endif BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); #else BBM_READ(0, BBM_VT_CONTROL, &vt_ctrl); vt_ctrl |= 0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); BBM_LONG_READ(0, BBM_VT_RT_BER_PERIOD, &bper); BBM_LONG_READ(0, BBM_VT_RT_ERROR_SUM, &tbe); vt_ctrl &= ~0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); #endif if(bper == 0) { // LGE_INTG_090217 ber = MAX_MSC_BER; } else if(tbe == 0) { ber = 0; } else { //ber = ((tbe / bper) * 100000); //ber = (tbe * 100000) / bper; if(tbe > 42949) { ber = ((tbe * 1000)/bper)*100; } else { ber = (tbe*100000)/bper; } } ber = (ber >= MAX_MSC_BER) ? MAX_MSC_BER : ber; /* ber must bigger than 0 because FactoryTest issue */ if(ber == 0) { ber = 1; } return ber; }
unsigned char DMBDrv_init(void) { u8 data; u16 wdata; u32 ldata; int i; u8 temp = 0x1e; #ifdef CONFIG_TDMB_SPI if(BBM_HOSTIF_SELECT(NULL, BBM_SPI)) return TDMB_FAIL; #elif defined(CONFIG_TDMB_EBI) if(BBM_HOSTIF_SELECT(NULL, BBM_PPI)) return TDMB_FAIL; #endif if(BBM_PROBE(NULL) != BBM_OK) // check for factory chip interface test { return TDMB_FAIL; } BBM_FIC_CALLBACK_REGISTER(NULL, TDMBDrv_FIC_CALLBACK); BBM_MSC_CALLBACK_REGISTER(NULL, TDMBDrv_MSC_CALLBACK); BBM_INIT(NULL); BBM_TUNER_SELECT(NULL, FC8050_TUNER, BAND3_TYPE); #if 0 BBM_WRITE(NULL, 0x05, 0xa7); BBM_READ(NULL, 0x05, &data); BBM_READ(NULL, 0x12, &data); BBM_WORD_READ(NULL, 0x12, &wdata); BBM_WORD_WRITE(NULL, 0x310, 0x0b); BBM_WORD_READ(NULL, 0x310, &wdata); BBM_WRITE(NULL, 0x312, 0xc0); BBM_READ(NULL, 0x312, &data); BBM_TUNER_READ(NULL, 0x01, 0x01, &data, 0x01); #endif #if 0 for(i=0;i<1000;i++) { // dog_kick(); BBM_WRITE(NULL, 0x05, i & 0xff); BBM_READ(NULL, 0x05, &data); if((i & 0xff) != data) DPRINTK("FC8000 byte test (0x%x,0x%x)\r\n", i & 0xff, data); } for(i=0;i<1000;i++) { BBM_WORD_WRITE(NULL, 0x0210, i & 0xffff); BBM_WORD_READ(NULL, 0x0210, &wdata); if((i & 0xffff) != wdata) DPRINTK("FC8000 word test (0x%x,0x%x)\r\n", i & 0xffff, wdata); } for(i=0;i<1000;i++) { BBM_LONG_WRITE(NULL, 0x0210, i & 0xffffffff); BBM_LONG_READ(NULL, 0x0210, &ldata); if((i & 0xffffffff) != ldata) DPRINTK("FC8000 long test (0x%x,0x%x)\r\n", i & 0xffffffff, ldata); } for(i=0;i<1000;i++) { temp = i&0xff; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01); BBM_TUNER_READ(NULL, 0x12, 0x01, &data, 0x01); if((i & 0xff) != data) DPRINTK("FC8000 tuner test (0x%x,0x%x)\r\n", i & 0xff, data); } temp = 0x51; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01 ); #endif gBer = 3000; gInitFlag = 1; return TDMB_SUCCESS; }
/*==================================================================== FUNCTION fc8150_bb_get_tuner_info DESCRIPTION DEPENDENCIES RETURN VALUE SIDE EFFECTS ======================================================================*/ void fc8150_bb_get_tuner_info(tIsdbtTunerInfo* tuner_info) { u8 mode; u8 buf_lock; s32 i32RSSI; u32 ui32BER; u32 ui32PER; s32 CN; static u32 prelvl = 0; u32 ui32Antlvl; u16 AGC; u8 GI; u8 TM; struct dm_st { u8 start; s8 rssi; u8 wscn; u8 reserved; u16 main_rxd_rsps; u16 main_err_rsps; u32 main_err_bits; u32 dmp_rxd_bits; u32 dmp_err_bits; u16 inter_rxd_rsps; u16 inter_err_rsps; u32 inter_err_bits; u8 lna_code; u8 rfvga; u8 k; u8 csf_gain; u8 pga_gain; u8 extlna; u8 high_current_mode_gain; u8 extlna_gain; } dm; BBM_READ(NULL, 0x5053, &buf_lock); ISDBT_MSG_FC8150_BB("[%s] Lock = %d\n", __func__, buf_lock); if (!buf_lock) ui32Antlvl = prelvl = 0; tuner_info->rssi = buf_lock; BBM_WRITE(NULL, BBM_REQ_BER, 0x0e); BBM_BULK_READ(NULL, BBM_DM_DATA, (u8*) &dm + 1, sizeof(dm) - 1); ISDBT_MSG_FC8150_BB("[%s] main_rxd_rsps: %d, dmp_rxd_bits: %d, inter_rxd_rsps: %d\n", __func__, dm.main_rxd_rsps, dm.dmp_rxd_bits, dm.inter_rxd_rsps); if (dm.inter_rxd_rsps) ui32PER = ((u32)dm.inter_err_rsps * 10000 / (u32)dm.inter_rxd_rsps); else ui32PER = 10000; if (dm.dmp_rxd_bits) ui32BER = ((u32)dm.dmp_err_bits * 10000 / (u32)dm.dmp_rxd_bits); else ui32BER = 10000; i32RSSI = dm.rssi; CN = dm.wscn; BBM_READ(NULL, 0x302a, &mode); GI = (mode & 0x70) >> 4; // 1 : 1/32, 2 : 1/16, 3 : 1/8, 4 : 1/4 TM = mode & 0x03; // 1 : mode1, 2 : mode2, 3 : mode3 BBM_WORD_READ(0, 0x100e, &AGC); switch (prelvl) { case 0: if (ui32BER < 650) ui32Antlvl = prelvl = 1; else ui32Antlvl = prelvl; break; case 1: if ((ui32BER > 700) || ((ui32BER > 500) && (CN <= 3))) ui32Antlvl = prelvl = 0; else if ((ui32BER < 300) && (CN > 6)) ui32Antlvl = prelvl = 2; else ui32Antlvl = prelvl; break; case 2: if ((ui32BER > 500) || ((ui32BER > 300) && (CN <= 5))) ui32Antlvl = prelvl = 1; else if ((ui32BER < 100) && (CN >= 9)) ui32Antlvl = prelvl = 3; else ui32Antlvl = prelvl; break; case 3: if ((ui32BER > 200) || ((ui32BER > 100) && (CN <= 9))) ui32Antlvl = prelvl = 2; else if ((ui32BER < 50) && (CN >= 12)) ui32Antlvl = prelvl = 4; else ui32Antlvl = prelvl; break; case 4: if ((ui32BER > 100) || (CN <= 14)) ui32Antlvl = prelvl = 3; else ui32Antlvl = prelvl; break; default : ui32Antlvl = prelvl = 0; break; } ISDBT_MSG_FC8150_BB("[%s] (PER)%d (BER)%d (RSSI)%d (CN)%d (AGC)%d (Ant)%d\n", __func__, ui32PER, ui32BER, i32RSSI, CN, AGC, ui32Antlvl); }
void data_dump_thread(void *param) { data_dump_param *data = (data_dump_param*)param; int hDevice = data->dev; int num = data->num; u8 buf[MSC_BUF_SIZE]; int i; int ret; int check_cnt_size=0; int monitor_size=0; int dump_size=0; u32 berA, perA, berB, perB, berC, perC, cnr, ui32Quality, ui32Antlvl; s32 i32RSSI; u8 slock=0; //while(1) { FILE *f; char *f_name[128]; sprintf((void*)f_name,DUMP_PATH"data_dump_%04d.dat", index++); dump_size=0; f = fopen((void*)f_name, "wb"); #ifdef FEATURE_TS_CHECK create_tspacket_anal(); #endif print_log("Start data dump %s , pkt : %d\n", f_name, data->num); mtv_ts_start(hDevice); for(i=0;i<num;i++) { int k; int size; size = mtv_data_read(hDevice, buf, MSC_BUF_SIZE); #ifdef FEATURE_TS_CHECK if(!(size%188)) { put_ts_packet(0, &buf[0], size); dump_size+=size; monitor_size+=size; check_cnt_size+=size; #ifdef FEATURE_OVERRUN_CHECK { u8 over; BBM_READ(hDevice, 0x8001, &over); if(over) { BBM_WRITE(hDevice, 0x8001, over); print_log("TS OVERRUN : %d\n", over); } } #endif if(check_cnt_size>188*320*40) { print_pkt_log(); check_cnt_size=0; } } #endif if(monitor_size>188*320*40) { monitor_size=0; mtv_signal_quality_info(hDevice, &slock, &cnr, &berA, &perA, &berB, &perB, &berC, &perC, &i32RSSI, &ui32Quality, &ui32Antlvl); print_log("Lock : 0x%x CN : %3d, RSSI : %3d, QT : %d, Ant : %d\n",slock, cnr, i32RSSI, ui32Quality, ui32Antlvl); print_log("BerA : %6d, PerA : %6d, BerB : %6d, PerB : %6d, BerC : %6d, PerC : %6d, \n", berA, perA, berB, perB, berC, perC); } if((dump_size<100*1024*1024)&&(size>0)) fwrite(&buf[0], 1, size, f); } mtv_ts_stop(hDevice); fclose(f); print_log("\nEnd msc dump\n"); index %= 10; } }