unsigned char DMBDrv_SetCh(unsigned long ulFrequency, unsigned char ucSubChannel, unsigned char ucSvType) { if(!gInitFlag) return TDMB_FAIL; bfirst = 1; TSBuffpos = 0; MSCBuffpos = 0; mp2len = 0; gCurSvcType = ucSvType; gCurSubChId = ucSubChannel; BBM_VIDEO_DESELECT(NULL, 0, 0, 0); BBM_AUDIO_DESELECT(NULL, 0, 3); BBM_DATA_DESELECT(NULL, 0, 2); BBM_WORD_WRITE(NULL, BBM_BUF_INT, 0x00ff); if(BBM_TUNER_SET_FREQ(NULL, ulFrequency) != BBM_OK) { return TDMB_FAIL; } if(ucSvType == 0x18) { BBM_VIDEO_SELECT(NULL, ucSubChannel, 0, 0); } else if(ucSvType == 0x00) { BBM_AUDIO_SELECT(NULL, ucSubChannel, 3); } else { BBM_DATA_SELECT(NULL, ucSubChannel, 2); } #ifdef FEATURE_FC8050_DEBUG if(ucSvType == 0x18) gDmbMode=FC8050_DMB; else if(ucSvType == 0x00) gDmbMode=FC8050_DAB; else gDmbMode=FC8050_DATA; #endif return TDMB_SUCCESS; }
// Modified by somesoo 20100730 for removing green block effect int8 tunerbb_drv_fc8050_multi_set_channel(int32 freq_num, uint8 subch_cnt, uint8 subch_id[ ], uint8 op_mode[ ]) { int8 res = BBM_OK; int32 freq = 0; uint8 dmb_cnt=0; int i; fc8050_service_type svcType = FC8050_SERVICE_MAX; unsigned short mask; // Added by somesoo 20100730 for removing green block effect fc8050_isr_control(0); for(i=0;i<subch_cnt;i++) { serviceType[i] = op_mode[i]; if(FC8050_ENSQUERY != op_mode[i]) tunerbb_drv_fc8050_stop(); else svcType = FC8050_ENSQUERY; } tunerbb_drv_fc8050_control_fic(0); /* Change freq_num(channel num) to frequency */ freq = tunerbb_drv_convert_chnum_to_freq(freq_num); if(freq == 0) { return FC8050_RESULT_ERROR; } res = BBM_TUNER_SET_FREQ(0, freq); if(res) { return FC8050_RESULT_ERROR; } if(svcType == FC8050_ENSQUERY) { if(BBM_SCAN_STATUS(0)) { return FC8050_RESULT_ERROR; } } BBM_WORD_READ(NULL, BBM_BUF_ENABLE, &mask); mask &= 0x100; for(i=0;i<subch_cnt;i++) { switch(serviceType[i]) { case FC8050_DAB: mask |= (1<<DAB_SVC_ID); BBM_AUDIO_SELECT(0, subch_id[i],DAB_SVC_ID); #ifdef STREAM_TS_UPLOAD fc8050_demux_select_channel(subch_id[i], DAB_SVC_ID); #else g_chinfo[subch_id[i]]=DAB_SVC_ID; #endif break; case FC8050_DMB: case FC8050_VISUAL: mask |= (1<<(DMB_SVC_ID+dmb_cnt)); //LGE_BROADCAST_I if(dmb_cnt<2) { BBM_VIDEO_SELECT(0, subch_id[i], DMB_SVC_ID+dmb_cnt, dmb_cnt); #ifdef STREAM_TS_UPLOAD fc8050_demux_select_video(subch_id[i], DMB_SVC_ID+dmb_cnt); #else g_chinfo[subch_id[i]]=dmb_cnt; #endif dmb_cnt++; } else res=BBM_NOK; break; case FC8050_DATA: mask |= (1<<DAT_SVC_ID); BBM_DATA_SELECT(0, subch_id[i], DAT_SVC_ID); #ifdef STREAM_TS_UPLOAD fc8050_demux_select_channel(subch_id[i], DAT_SVC_ID); #else g_chinfo[subch_id[i]]=DAT_SVC_ID; #endif break; case FC8050_ENSQUERY: tunerbb_drv_fc8050_control_fic(1); res = BBM_OK; break; default: res = BBM_NOK; break; } } BBM_WORD_WRITE(NULL, BBM_BUF_ENABLE, mask); tot_subch_cnt = subch_cnt; // Added by somesoo 20100730 for removing green block effect if(svcType != FC8050_ENSQUERY) fc8050_isr_control(1); if(res) return FC8050_RESULT_ERROR; else return FC8050_RESULT_SUCCESS; }