summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--Android.mk23
-rw-r--r--TvPlay.cpp (renamed from tvapi/android/tv/TvPlay.cpp)2
-rw-r--r--TvPlay.h (renamed from tvapi/android/tv/TvPlay.h)2
-rw-r--r--tv_callback.h2
-rw-r--r--tv_input.cpp4
-rw-r--r--tvapi/Android.mk1
-rw-r--r--tvapi/android/Android.mk1
-rw-r--r--tvapi/android/include/ITv.h49
-rw-r--r--tvapi/android/include/ITvClient.h28
-rw-r--r--tvapi/android/include/ITvService.h33
-rw-r--r--tvapi/android/include/TvClient.h78
-rw-r--r--tvapi/android/include/tvcmd.h618
-rw-r--r--tvapi/android/jni/Android.mk69
-rw-r--r--tvapi/android/jni/cfbc_jni.cpp167
-rw-r--r--tvapi/android/jni/cfbc_test.cpp43
-rw-r--r--tvapi/android/jni/com_droidlogic_app_tv_TvControlManager.cpp469
-rw-r--r--tvapi/android/libtvbinder/Android.mk24
-rw-r--r--tvapi/android/libtvbinder/ITv.cpp148
-rw-r--r--tvapi/android/libtvbinder/ITvClient.cpp58
-rw-r--r--tvapi/android/libtvbinder/ITvService.cpp50
-rw-r--r--tvapi/android/libtvbinder/TvClient.cpp186
-rw-r--r--tvapi/android/tv/Android.mk23
-rw-r--r--tvapi/android/tvserver/Android.mk83
-rw-r--r--tvapi/android/tvserver/TvService.cpp4500
-rw-r--r--tvapi/android/tvserver/TvService.h90
-rw-r--r--tvapi/android/tvserver/main.cpp23
-rw-r--r--tvapi/android/tvserver/tv_callback.h17
-rw-r--r--tvapi/build/include/.gitignore0
-rw-r--r--tvapi/docs/TVMiddleware初期.wps252
-rw-r--r--tvapi/docs/tv.uml6093
-rw-r--r--tvapi/libtv/Android.mk222
-rw-r--r--tvapi/libtv/audio/CAudioCustomerCtrl.cpp126
-rw-r--r--tvapi/libtv/audio/CAudioCustomerCtrl.h31
-rw-r--r--tvapi/libtv/audio/CTvAudio.cpp28
-rw-r--r--tvapi/libtv/audio/CTvAudio.h76
-rw-r--r--tvapi/libtv/audio/audio_alsa.cpp853
-rw-r--r--tvapi/libtv/audio/audio_alsa.h127
-rw-r--r--tvapi/libtv/audio/audio_effect.cpp131
-rw-r--r--tvapi/libtv/audio/audio_effect.h27
-rw-r--r--tvapi/libtv/include/amstream.h263
-rw-r--r--tvapi/libtv/include/amvecm.h68
-rw-r--r--tvapi/libtv/include/cm.h155
-rw-r--r--tvapi/libtv/include/hdmirx_cec.h331
-rw-r--r--tvapi/libtv/include/ve.h242
-rw-r--r--tvapi/libtv/tv/AutoBackLight.cpp207
-rw-r--r--tvapi/libtv/tv/AutoBackLight.h46
-rw-r--r--tvapi/libtv/tv/CAutoPQparam.cpp142
-rw-r--r--tvapi/libtv/tv/CAutoPQparam.h36
-rw-r--r--tvapi/libtv/tv/CAv.cpp476
-rw-r--r--tvapi/libtv/tv/CAv.h153
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.cpp1931
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.h401
-rw-r--r--tvapi/libtv/tv/CFrontEnd.cpp667
-rw-r--r--tvapi/libtv/tv/CFrontEnd.h166
-rw-r--r--tvapi/libtv/tv/CTv.cpp7254
-rw-r--r--tvapi/libtv/tv/CTv.h817
-rw-r--r--tvapi/libtv/tv/CTvBooking.cpp159
-rw-r--r--tvapi/libtv/tv/CTvBooking.h81
-rw-r--r--tvapi/libtv/tv/CTvDmx.cpp24
-rw-r--r--tvapi/libtv/tv/CTvDmx.h17
-rw-r--r--tvapi/libtv/tv/CTvEpg.cpp214
-rw-r--r--tvapi/libtv/tv/CTvEpg.h158
-rw-r--r--tvapi/libtv/tv/CTvEv.cpp11
-rw-r--r--tvapi/libtv/tv/CTvEv.h150
-rw-r--r--tvapi/libtv/tv/CTvLog.cpp20
-rw-r--r--tvapi/libtv/tv/CTvLog.h28
-rw-r--r--tvapi/libtv/tv/CTvRecord.cpp273
-rw-r--r--tvapi/libtv/tv/CTvRecord.h46
-rw-r--r--tvapi/libtv/tv/CTvSatellite.h21
-rw-r--r--tvapi/libtv/tv/CTvScanner.cpp1640
-rw-r--r--tvapi/libtv/tv/CTvScanner.h264
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.cpp796
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.h176
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.cpp654
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.h250
-rw-r--r--tvapi/libtv/tv/CTvTime.cpp64
-rw-r--r--tvapi/libtv/tv/CTvTime.h56
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.cpp163
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.h49
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.cpp553
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.h144
-rw-r--r--tvapi/libtv/tv/ScreenCatch.cpp379
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.cpp353
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.h72
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.conf30
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.cpp53
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.h93
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.cpp324
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.h287
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.cpp256
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.h94
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.cpp639
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.h97
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.cpp237
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.h85
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.cpp44
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.h30
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.cpp905
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.h536
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.cpp174
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.h42
-rw-r--r--tvapi/libtv/tvin/CHDMIRxCEC.cpp651
-rw-r--r--tvapi/libtv/tvin/CHDMIRxCEC.h94
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.cpp263
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.h73
-rw-r--r--tvapi/libtv/tvin/CTvin.cpp3278
-rw-r--r--tvapi/libtv/tvin/CTvin.h1248
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.cpp26
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.h50
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp52
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.h76
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.cpp78
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.h26
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.cpp129
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.h37
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.cpp2448
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.h277
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingCfg.h411
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp187
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.h22
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.cpp1328
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.h125
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.cpp723
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.h70
-rw-r--r--tvapi/libtv/tvutils/CCondition.h90
-rw-r--r--tvapi/libtv/tvutils/CFile.cpp195
-rw-r--r--tvapi/libtv/tvutils/CFile.h47
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.cpp16
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.h9
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.cpp122
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.h53
-rw-r--r--tvapi/libtv/tvutils/CMutex.h115
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.cpp121
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.h49
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.cpp358
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.h54
-rw-r--r--tvapi/libtv/tvutils/CSqlite.cpp151
-rw-r--r--tvapi/libtv/tvutils/CSqlite.h184
-rw-r--r--tvapi/libtv/tvutils/CThread.cpp165
-rw-r--r--tvapi/libtv/tvutils/CThread.h61
-rw-r--r--tvapi/libtv/tvutils/CTvInput.cpp170
-rw-r--r--tvapi/libtv/tvutils/CTvInput.h42
-rw-r--r--tvapi/libtv/tvutils/serial_base.cpp466
-rw-r--r--tvapi/libtv/tvutils/serial_base.h17
-rw-r--r--tvapi/libtv/tvutils/serial_operate.cpp225
-rw-r--r--tvapi/libtv/tvutils/serial_operate.h33
-rw-r--r--tvapi/libtv/tvutils/tvutils.cpp2025
-rw-r--r--tvapi/libtv/tvutils/tvutils.h103
-rw-r--r--tvapi/libtv/tvutils/zepoll.cpp88
-rw-r--r--tvapi/libtv/tvutils/zepoll.h48
-rw-r--r--tvapi/libtv/version/version.cpp94
-rw-r--r--tvapi/libtv/version/version.h11
-rw-r--r--tvapi/libtv/vpp/CPQdb.cpp1974
-rw-r--r--tvapi/libtv/vpp/CPQdb.h180
-rw-r--r--tvapi/libtv/vpp/CVpp.cpp3779
-rw-r--r--tvapi/libtv/vpp/CVpp.h453
-rw-r--r--tvapi/libtv/vpp/pqdata.cpp143
-rw-r--r--tvapi/libtv/vpp/pqdata.h30
-rw-r--r--tvapi/tvtests/Android.mk49
-rw-r--r--tvapi/tvtests/android_tvtest.cpp32
-rw-r--r--tvapi/tvtests/comm_test.cpp33
-rw-r--r--tvapi/tvtests/ssm_test.cpp210
-rw-r--r--tvapi/tvtests/tvconfig_test.cpp427
163 files changed, 13 insertions, 62934 deletions
diff --git a/tvapi/libtv/tv/CTvScanner.cpp b/tvapi/libtv/tv/CTvScanner.cpp
deleted file mode 100644
index e029b6d..0000000
--- a/tvapi/libtv/tv/CTvScanner.cpp
+++ b/dev/null
@@ -1,1640 +0,0 @@
-//
-//
-// amlogic 2013
-//
-// @ Project : tv
-// @ File Name :
-// @ Date : 2013-11
-// @ Author :
-//
-#define LOG_TAG "CTvScanner"
-
-#include "CTvScanner.h"
-#include "CTvProgram.h"
-#include "CTvRegion.h"
-#include "CFrontEnd.h"
-
-CTvScanner *CTvScanner::m_s_Scanner = NULL;
-//int CTvScanner::getStartPara()
-//{
-//
-//}
-CTvScanner::CTvScanner()
-{
- mbScanStart = false;
- mpObserver = NULL;
- mSource = 0xff;
- mMinFreq = 1;
- mMaxFreq = 100;
- mCurScanStartFreq = 1;
- mCurScanEndFreq = 100;
-}
-
-CTvScanner::~CTvScanner()
-{
- AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
-}
-
-
-AM_Bool_t CTvScanner::atv_cvbs_lock_check(v4l2_std_id *colorStd)
-{
- tvafe_cvbs_video_t cvbs_lock_status;
- int ret, i = 0;
-
- *colorStd = 0;
- while (i < 20) {
- ret = CTvin::getInstance()->AFE_GetCVBSLockStatus(&cvbs_lock_status);
-
- if (cvbs_lock_status == TVAFE_CVBS_VIDEO_HV_LOCKED)
- //||cvbs_lock_status == TVAFE_CVBS_VIDEO_V_LOCKED
- //||cvbs_lock_status == TVAFE_CVBS_VIDEO_H_LOCKED)
- {
- usleep(2000 * 1000);
- tvin_info_t info;
- CTvin::getInstance()->VDIN_GetSignalInfo(&info);
- *colorStd = CTvin::CvbsFtmToV4l2ColorStd(info.fmt);
- LOGD("atv_cvbs_lock_check locked and cvbs fmt = %d std = 0x%p", info.fmt, colorStd);
- return true;
- }
- usleep(50 * 1000);
- i++;
- }
- return false;
-}
-
-AM_Bool_t CTvScanner::s_atv_cvbs_lock_check(void *data)
-{
- if (data == NULL) return false;
- AM_SCAN_ATV_LOCK_PARA_t *pAtvPara = (AM_SCAN_ATV_LOCK_PARA_t *)data;
- CTvScanner *pScan = (CTvScanner *)(pAtvPara->pData);
- v4l2_std_id std;
- AM_Bool_t isLock = pScan->atv_cvbs_lock_check(&std);
- pAtvPara->pOutColorSTD = std;
- return isLock;
-}
-
-int CTvScanner::ATVManualScan(int min_freq, int max_freq, int std, int store_Type, int channel_num)
-{
- stopScan();
- if (min_freq <= 0 || max_freq <= 0 || min_freq == max_freq) {
- LOGD("atv manual scan freq error start = %d end = %d", min_freq, max_freq);
- return -1;
- }
- int direction = (max_freq >= min_freq) ? 1 : 0;
-
- if (!mbScanStart) { //not start or stop
- //
- mCurScanStartFreq = min_freq;
- mCurScanEndFreq = max_freq;
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- AM_SCAN_Handle_t handle = 0, i;
- LOGD("startScanThread");
- // Create the scan
- memset(&para, 0, sizeof(para));
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_ATV_DTV;//
- para.atv_para.mode = AM_SCAN_ATVMODE_MANUAL;
- para.atv_para.storeMode = store_Type;
- para.dtv_para.mode = AM_SCAN_DTVMODE_NONE;
-
- para.atv_para.am_scan_atv_cvbs_lock = s_atv_cvbs_lock_check;
-
- para.atv_para.fe_cnt = 3;
- para.atv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(3, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)));
- if (para.atv_para.fe_paras != NULL) {
- memset(para.atv_para.fe_paras, 0, 3 * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
- para.atv_para.fe_paras[0].m_type = FE_ANALOG;
- para.atv_para.fe_paras[0].analog.para.frequency = min_freq;
- para.atv_para.fe_paras[1].m_type = FE_ANALOG;
- para.atv_para.fe_paras[1].analog.para.frequency = max_freq;
- para.atv_para.fe_paras[2].m_type = FE_ANALOG;
- para.atv_para.fe_paras[2].analog.para.frequency = min_freq;
- }
- para.atv_para.direction = direction;
- para.atv_para.default_std = std;
-
- para.atv_para.channel_id = -1;
- para.atv_para.cvbs_unlocked_step = 1000000;
- para.atv_para.cvbs_locked_step = 3000000;
- para.atv_para.afc_range = 2000000;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = am_scan_atv_store;
- para.atv_para.channel_num = channel_num;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- LOGD("atv manual scan mode = %d", para.dtv_para.mode);
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = NULL;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = NULL;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == NULL) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
-
- return 0;
-
-}
-
-void CTvScanner::am_scan_atv_store(AM_SCAN_Result_t *result)
-{
- AM_SCAN_TS_t *ts;
- int i, ret, db_sat_id = -1;
- //AM_SCAN_RecTab_t srv_tab;
- for (ts = result->tses; ts != NULL; ts = ts->p_next) {
- //
- m_s_Scanner->mCurEv.clear();
- m_s_Scanner->mCurEv.mType = ScannerEvent::EVENT_ATV_PROG_DATA;
- m_s_Scanner->mCurEv.mVideoStd = CFrontEnd::stdAndColorToVideoEnum(ts->analog.std);
- m_s_Scanner->mCurEv.mAudioStd = CFrontEnd::stdAndColorToAudioEnum(ts->analog.std);
- m_s_Scanner->mCurEv.mIsAutoStd = ((ts->analog.std & V4L2_COLOR_STD_AUTO) == V4L2_COLOR_STD_AUTO) ? 1 : 0;
- m_s_Scanner->mCurEv.mFrequency = ts->analog.freq;
- //
- m_s_Scanner->sendEvent(m_s_Scanner->mCurEv);
- LOGD("ATV: > freq:%d", m_s_Scanner->mCurEv.mFrequency);
- }
-}
-
-void CTvScanner::setGlobalScanerObject(CTvScanner *s)
-{
- m_s_Scanner = s;
-}
-
-int CTvScanner::autoAtvScan(int min_freq, int max_freq, int std, int search_type)
-{
- stopScan();
- if (min_freq <= 0 || max_freq <= 0 || min_freq > max_freq)
- return -1;
- if (!mbScanStart) { //not start or stop
- mCurScanStartFreq = min_freq;
- mCurScanEndFreq = max_freq;
-
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- AM_SCAN_Handle_t handle = 0, i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_ATV_DTV;//
- para.atv_para.mode = AM_SCAN_ATVMODE_AUTO;
- if (search_type == 1)
- para.atv_para.storeMode = 1;
- else
- para.atv_para.storeMode = 0;
- para.dtv_para.mode = AM_SCAN_DTVMODE_NONE;
-
- para.atv_para.am_scan_atv_cvbs_lock = s_atv_cvbs_lock_check;
-
- para.atv_para.fe_cnt = 3;
- para.atv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(3, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)));
- if (para.atv_para.fe_paras != NULL) {
- memset(para.atv_para.fe_paras, 0, 3 * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
- para.atv_para.fe_paras[0].m_type = FE_ANALOG;
- para.atv_para.fe_paras[0].analog.para.frequency = min_freq;
- para.atv_para.fe_paras[1].m_type = FE_ANALOG;
- para.atv_para.fe_paras[1].analog.para.frequency = max_freq;
- para.atv_para.fe_paras[2].m_type = FE_ANALOG;
- para.atv_para.fe_paras[2].analog.para.frequency = 0;
- }
-
- para.atv_para.direction = 0;
- para.atv_para.default_std = std;
-
- para.atv_para.channel_id = -1;
- para.atv_para.afc_unlocked_step = 3000000;
- para.atv_para.cvbs_unlocked_step = 1500000;
- para.atv_para.cvbs_locked_step = 6000000;
- para.atv_para.afc_range = 2000000;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = am_scan_atv_store;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- LOGD(" mode = %d", para.dtv_para.mode);
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = NULL;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- //注册搜索事件
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信号质量通知事件
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = NULL;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == NULL) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
-
- return 0;
-}
-
-/*
-int CTvScanner::manualAtscScan(int channelID, int attennaType, int std)
-{
- stopScan();
- if (!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- AM_SCAN_Handle_t handle = 0;
- int i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- //strcpy(para.default_text_lang,"eng");//config
- //strcpy(para.text_langs, "local eng zho chi chs first");//config
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_ADTV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
-
- para.atv_para.default_std = std;
-
- para.dtv_para.mode = AM_SCAN_DTVMODE_MANUAL;//DTV_MODE_ALLBAND
- //para.dtv_para.mode |= (*env)->GetIntField(env, para, doptions);//忽略
- para.dtv_para.source = FE_ATSC;//fe_type
- para.dtv_para.dmx_dev_id = 0;//default 0
- para.dtv_para.resort_all = AM_TRUE;
- para.dtv_para.clear_source = AM_FALSE;
- para.dtv_para.mix_tv_radio = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
- //para.dtv_para.attenna = attennaType;
-
- para.dtv_para.standard = AM_SCAN_DTV_STD_ATSC;
-
- mSource = para.dtv_para.source;
-
- Vector<sp<CTvChannel> > vcp;
-
- //CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- getAtscChannelPara(attennaType, vcp);
- LOGD("ANDESEN test attenna type is %d", attennaType);
-
- int size = vcp.size();
- LOGD("channel list size = %d", size);
- //showboz
- if (size == 0) {
- CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
- getAtscChannelPara(attennaType, vcp);
- size = vcp.size();
- }
-
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(1, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- //memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
-
- for (i = 0; i < size; i++) {
- if (channelID == vcp[i]->getLogicalChannelNum()) {
- para.dtv_para.fe_paras[0].m_type = 3;//MODE_ATSC
- para.dtv_para.fe_paras[0].atsc.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[0].atsc.para.u.vsb.modulation = (fe_modulation_t)(vcp[i]->getModulation());
- LOGD("andesen test atsc manual type=%d,num=%d,freq=%d,modu=%d",
- para.dtv_para.fe_paras[0].m_type, para.dtv_para.fe_paras[0].m_logicalChannelNum,
- para.dtv_para.fe_paras[0].atsc.para.frequency, para.dtv_para.fe_paras[0].atsc.para.u.vsb.modulation);
- }
- }
- //allband
- para.dtv_para.fe_cnt = 1;
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- //注册搜索事件
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信号质量通知事件
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
-}
-*/
-
-#define dvb_fend_para(_p) ((struct dvb_frontend_parameters*)(&_p))
-#define IS_DVBT2_TS(_para) (_para.m_type == FE_OFDM && _para.terrestrial.para.u.ofdm.ofdm_mode == OFDM_DVBT2)
-#define IS_ISDBT_TS(_para) (_para.m_type == FE_ISDBT)
-
-dvbpsi_pat_t *CTvScanner::get_valid_pats(AM_SCAN_TS_t *ts)
-{
- dvbpsi_pat_t *valid_pat = NULL;
- if (!IS_DVBT2_TS(ts->digital.fend_para)) {
- valid_pat = ts->digital.pats;
- } else if (IS_ISDBT_TS(ts->digital.fend_para)) {
- /* process for isdbt one-seg inserted PAT, which ts_id is 0xffff */
- valid_pat = ts->digital.pats;
- while (valid_pat != NULL && valid_pat->i_ts_id == 0xffff) {
- valid_pat = valid_pat->p_next;
- }
-
- if (valid_pat == NULL && ts->digital.pats != NULL) {
- valid_pat = ts->digital.pats;
-
- if (ts->digital.sdts != NULL)
- valid_pat->i_ts_id = ts->digital.sdts->i_ts_id;
- }
- } else {
- int plp;
-
- for (plp = 0; plp < ts->digital.dvbt2_data_plp_num; plp++) {
- if (ts->digital.dvbt2_data_plps[plp].pats != NULL) {
- valid_pat = ts->digital.dvbt2_data_plps[plp].pats;
- break;
- }
- }
- }
-
- return valid_pat;
-}
-
-void CTvScanner::scan_process_ts_info(AM_SCAN_Result_t *result __unused, AM_SCAN_TS_t *ts, ScannerEvent *evt)
-{
- dvbpsi_nit_t *nit;
- dvbpsi_descriptor_t *descr;
-
- evt->mONetId = -1;
- evt->mTsId = -1;
-
- if (ts->digital.sdts)
- evt->mONetId = ts->digital.sdts->i_network_id;
- else if (IS_DVBT2_TS(ts->digital.fend_para) && ts->digital.dvbt2_data_plp_num > 0 && ts->digital.dvbt2_data_plps[0].sdts)
- evt->mONetId = ts->digital.dvbt2_data_plps[0].sdts->i_network_id;
- evt->mTsId = get_valid_pats(ts)->i_ts_id;
-
- evt->mFrequency = (int)dvb_fend_para(ts->digital.fend_para)->frequency;
- evt->mMode = ts->digital.fend_para.m_type;
- if (IS_DVBT2_TS(ts->digital.fend_para))
- evt->mOfdm_mode = (int)dvb_fend_para(ts->digital.fend_para)->u.ofdm.ofdm_mode;
- else if ((ts->digital.fend_para.m_type == FE_DTMB) || (ts->digital.fend_para.m_type == FE_OFDM))
- evt->mBandwidth = (int)dvb_fend_para(ts->digital.fend_para)->u.ofdm.bandwidth;
- else if (ts->digital.fend_para.m_type == FE_QAM) {
- evt->mSymbolRate = (int)dvb_fend_para(ts->digital.fend_para)->u.qam.symbol_rate;
- evt->mModulation = (int)dvb_fend_para(ts->digital.fend_para)->u.qam.modulation;
- }
-}
-void CTvScanner::scan_init_service_info(SCAN_ServiceInfo_t *srv_info)
-{
- memset(srv_info, 0, sizeof(SCAN_ServiceInfo_t));
- srv_info->vid = 0x1fff;
- srv_info->vfmt = -1;
- srv_info->free_ca = 1;
- srv_info->srv_id = 0xffff;
- srv_info->srv_dbid = -1;
- srv_info->satpara_dbid = -1;
- srv_info->pmt_pid = 0x1fff;
- srv_info->plp_id = -1;
- srv_info->sdt_version = 0xff;
-}
-int CTvScanner::get_pmt_pid(dvbpsi_pat_t *pats, int program_number)
-{
- dvbpsi_pat_t *pat;
- dvbpsi_pat_program_t *prog;
-
- AM_SI_LIST_BEGIN(pats, pat)
- AM_SI_LIST_BEGIN(pat->p_first_program, prog)
- if (prog->i_number == program_number)
- return prog->i_pid;
- AM_SI_LIST_END()
- AM_SI_LIST_END()
-
- return 0x1fff;
-}
-
-void CTvScanner::scan_extract_ca_scrambled_flag(dvbpsi_descriptor_t *p_first_descriptor, int *flag)
-{
- dvbpsi_descriptor_t *descr;
-
- AM_SI_LIST_BEGIN(p_first_descriptor, descr)
- if (descr->i_tag == AM_SI_DESCR_CA && ! *flag) {
- LOGD( "Found CA descr, set scrambled flag to 1");
- *flag = 1;
- break;
- }
- AM_SI_LIST_END()
-}
-
-void CTvScanner::scan_extract_srv_info_from_sdt(AM_SCAN_Result_t *result, dvbpsi_sdt_t *sdts, SCAN_ServiceInfo_t *srv_info)
-{
- dvbpsi_sdt_service_t *srv;
- dvbpsi_sdt_t *sdt;
- dvbpsi_descriptor_t *descr;
- const uint8_t split = 0x80;
- const int name_size = (int)sizeof(srv_info->name);
- int curr_name_len = 0, tmp_len;
- char name[AM_DB_MAX_SRV_NAME_LEN + 1];
-
- UNUSED(result);
-
-#define COPY_NAME(_s, _slen)\
- AM_MACRO_BEGIN\
- int copy_len = ((curr_name_len+_slen)>=name_size) ? (name_size-curr_name_len) : _slen;\
- if (copy_len > 0) {\
- memcpy(srv_info->name+curr_name_len, _s, copy_len);\
- curr_name_len += copy_len;\
- }\
- AM_MACRO_END
-
-
- AM_SI_LIST_BEGIN(sdts, sdt)
- AM_SI_LIST_BEGIN(sdt->p_first_service, srv)
- /*从SDT表中查找该service并获取信息*/
- if (srv->i_service_id == srv_info->srv_id) {
- LOGD("SDT for service %d found!", srv_info->srv_id);
- srv_info->eit_sche = (uint8_t)srv->b_eit_schedule;
- srv_info->eit_pf = (uint8_t)srv->b_eit_present;
- srv_info->rs = srv->i_running_status;
- srv_info->free_ca = (uint8_t)srv->b_free_ca;
- srv_info->sdt_version = sdt->i_version;
-
- AM_SI_LIST_BEGIN(srv->p_first_descriptor, descr)
- if (descr->p_decoded && descr->i_tag == AM_SI_DESCR_SERVICE) {
- dvbpsi_service_dr_t *psd = (dvbpsi_service_dr_t *)descr->p_decoded;
- if (psd->i_service_name_length > 0) {
- name[0] = 0;
- AM_SI_ConvertDVBTextCode((char *)psd->i_service_name, psd->i_service_name_length, \
- name, AM_DB_MAX_SRV_NAME_LEN);
- name[AM_DB_MAX_SRV_NAME_LEN] = 0;
- LOGD("found name [%s]", name);
-
- /*3bytes language code, using xxx to simulate*/
- COPY_NAME("xxx", 3);
- /*following by name text*/
- tmp_len = strlen(name);
- COPY_NAME(name, tmp_len);
- }
- /*业务类型*/
- srv_info->srv_type = psd->i_service_type;
- /*service type 0x16 and 0x19 is user defined, as digital television service*/
- /*service type 0xc0 is type of partial reception service in ISDBT*/
- if ((srv_info->srv_type == 0x16) || (srv_info->srv_type == 0x19) || (srv_info->srv_type == 0xc0)) {
- srv_info->srv_type = 0x1;
- }
- break;
- }
- AM_SI_LIST_END()
-
- /* store multilingual service name */
- AM_SI_LIST_BEGIN(srv->p_first_descriptor, descr)
- if (descr->p_decoded && descr->i_tag == AM_SI_DESCR_MULTI_SERVICE_NAME) {
- int i;
- dvbpsi_multi_service_name_dr_t *pmsnd = (dvbpsi_multi_service_name_dr_t *)descr->p_decoded;
-
- for (i = 0; i < pmsnd->i_name_count; i++) {
- name[0] = 0;
- AM_SI_ConvertDVBTextCode((char *)pmsnd->p_service_name[i].i_service_name,
- pmsnd->p_service_name[i].i_service_name_length,
- name, AM_DB_MAX_SRV_NAME_LEN);
- name[AM_DB_MAX_SRV_NAME_LEN] = 0;
- LOGD("found name [%s]", name);
-
- if (curr_name_len > 0) {
- /*extra split mark*/
- COPY_NAME(&split, 1);
- }
- /*3bytes language code*/
- COPY_NAME(pmsnd->p_service_name[i].i_iso_639_code, 3);
- /*following by name text*/
- tmp_len = strlen(name);
- COPY_NAME(name, tmp_len);
- }
- }
- AM_SI_LIST_END()
-
- /* set the ending null byte */
- if (curr_name_len >= name_size)
- srv_info->name[name_size - 1] = 0;
- else
- srv_info->name[curr_name_len] = 0;
-
- break;
- }
- AM_SI_LIST_END()
- AM_SI_LIST_END()
-}
-
-void CTvScanner::scan_update_service_info(AM_SCAN_Result_t *result, SCAN_ServiceInfo_t *srv_info)
-{
-#define str(i) (char*)(strings + i)
-
- static char strings[14][256];
-
- if (srv_info->src != FE_ANALOG) {
- int standard = result->start_para->dtv_para.standard;
- int mode = result->start_para->dtv_para.mode;
-
- /* Transform service types for different dtv standards */
- if (standard != AM_SCAN_DTV_STD_ATSC) {
- if (srv_info->srv_type == 0x1)
- srv_info->srv_type = AM_SCAN_SRV_DTV;
- else if (srv_info->srv_type == 0x2)
- srv_info->srv_type = AM_SCAN_SRV_DRADIO;
- } else {
- if (srv_info->srv_type == 0x2)
- srv_info->srv_type = AM_SCAN_SRV_DTV;
- else if (srv_info->srv_type == 0x3)
- srv_info->srv_type = AM_SCAN_SRV_DRADIO;
- }
-
- /* if video valid, set this program to tv type,
- * if audio valid, but video not found, set it to radio type,
- * if both invalid, but service_type found in SDT/VCT, set to unknown service,
- * this mechanism is OPTIONAL
- */
- if (srv_info->vid < 0x1fff) {
- srv_info->srv_type = AM_SCAN_SRV_DTV;
- } else if (srv_info->aud_info.audio_count > 0) {
- srv_info->srv_type = AM_SCAN_SRV_DRADIO;
- } else if (srv_info->srv_type == AM_SCAN_SRV_DTV ||
- srv_info->srv_type == AM_SCAN_SRV_DRADIO) {
- srv_info->srv_type = AM_SCAN_SRV_UNKNOWN;
- }
- /* Skip program for FTA mode */
- if (srv_info->scrambled_flag && (mode & AM_SCAN_DTVMODE_FTA)) {
- LOGD( "Skip program '%s' for FTA mode", srv_info->name);
- return;
- }
-
- /* Skip program for service_type mode */
- if (srv_info->srv_type == AM_SCAN_SRV_DTV && (mode & AM_SCAN_DTVMODE_NOTV)) {
- LOGD( "Skip program '%s' for NO-TV mode", srv_info->name);
- return;
- }
- if (srv_info->srv_type == AM_SCAN_SRV_DRADIO && (mode & AM_SCAN_DTVMODE_NORADIO)) {
- LOGD( "Skip program '%s' for NO-RADIO mode", srv_info->name);
- return;
- }
-
- /* Set default name to tv/radio program if no name specified */
- if (!strcmp(srv_info->name, "") &&
- (srv_info->srv_type == AM_SCAN_SRV_DTV ||
- srv_info->srv_type == AM_SCAN_SRV_DRADIO)) {
- strcpy(srv_info->name, "xxxNo Name");
- }
- }
-}
-
-void CTvScanner::scan_store_dvb_ts_evt_service(SCAN_ServiceInfo_t *srv)
-{
- LOGD("scan_store_dvb_ts_evt_service freq:%d, sid:%d", m_s_Scanner->mCurEv.mFrequency, srv->srv_id);
- m_s_Scanner->mCurEv.clear();
- m_s_Scanner->mCurEv.mServiceId = srv->srv_id;
- strncpy(m_s_Scanner->mCurEv.mProgramName, srv->name, 1024);
- m_s_Scanner->mCurEv.mprogramType = srv->srv_type;
- m_s_Scanner->mCurEv.mVid = srv->vid;
- m_s_Scanner->mCurEv.mVfmt = srv->vfmt;
- m_s_Scanner->mCurEv.mAcnt = srv->aud_info.audio_count;
- for (int i = 0; i < srv->aud_info.audio_count; i++) {
- m_s_Scanner->mCurEv.mAid[i] = srv->aud_info.audios[i].pid;
- m_s_Scanner->mCurEv.mAfmt[i] = srv->aud_info.audios[i].fmt;
- strncpy(m_s_Scanner->mCurEv.mAlang[i], srv->aud_info.audios[i].lang, 10);
- m_s_Scanner->mCurEv.mAtype[i] = srv->aud_info.audios[i].audio_type;
- }
- m_s_Scanner->mCurEv.mPcr = srv->pcr_pid;
- m_s_Scanner->mCurEv.mScnt = srv->sub_info.subtitle_count;
- for (int i = 0; i < srv->sub_info.subtitle_count; i++) {
- m_s_Scanner->mCurEv.mStype[i] = TYPE_DVB_SUBTITLE;
- m_s_Scanner->mCurEv.mSid[i] = srv->sub_info.subtitles[i].pid;
- m_s_Scanner->mCurEv.mSstype[i] = srv->sub_info.subtitles[i].type;
- m_s_Scanner->mCurEv.mSid1[i] = srv->sub_info.subtitles[i].comp_page_id;
- m_s_Scanner->mCurEv.mSid2[i] = srv->sub_info.subtitles[i].anci_page_id;
- strncpy(m_s_Scanner->mCurEv.mSlang[i], srv->sub_info.subtitles[i].lang, 10);
- }
- int scnt = m_s_Scanner->mCurEv.mScnt;
- for (int i = 0; i < srv->ttx_info.teletext_count; i++) {
- if (srv->ttx_info.teletexts[i].type == 0x2 ||
- srv->ttx_info.teletexts[i].type == 0x5) {
- if (scnt >= (int)(sizeof(m_s_Scanner->mCurEv.mStype) / sizeof(int)))
- break;
- m_s_Scanner->mCurEv.mStype[scnt] = TYPE_DTV_TELETEXT;
- m_s_Scanner->mCurEv.mSid[scnt] = srv->ttx_info.teletexts[i].pid;
- m_s_Scanner->mCurEv.mSstype[scnt] = srv->ttx_info.teletexts[i].type;
- m_s_Scanner->mCurEv.mSid1[scnt] = srv->ttx_info.teletexts[i].magazine_no;
- m_s_Scanner->mCurEv.mSid2[scnt] = srv->ttx_info.teletexts[i].page_no;
- strncpy(m_s_Scanner->mCurEv.mSlang[scnt], srv->ttx_info.teletexts[i].lang, 10);
- scnt++;
- }
- }
- m_s_Scanner->mCurEv.mScnt = scnt;
-
- m_s_Scanner->mCurEv.mMSG[0] = '\0';
-
- m_s_Scanner->mCurEv.mType = ScannerEvent::EVENT_DTV_PROG_DATA;
- m_s_Scanner->sendEvent(m_s_Scanner->mCurEv);
-}
-
-void CTvScanner::scan_store_dvb_ts(AM_SCAN_Result_t *result, AM_SCAN_TS_t *ts)
-{
- dvbpsi_pmt_t *pmt;
- dvbpsi_pmt_es_t *es;
- dvbpsi_descriptor_t *descr;
- int src = result->start_para->dtv_para.source;
- int mode = result->start_para->dtv_para.mode;
- int net_dbid = -1, dbid = -1, orig_net_id = -1, satpara_dbid = -1;
- char selbuf[256];
- char insbuf[400];
- AM_Bool_t store = AM_TRUE;
- dvbpsi_pat_t *valid_pat = NULL;
- uint8_t plp_id;
- SCAN_ServiceInfo_t srv_info;
-
- valid_pat = get_valid_pats(ts);
- if (valid_pat == NULL) {
- LOGD("No PAT found in ts, will not store to dbase");
- return;
- }
-
- LOGD("@@ TS: src %d @@", src);
-
- scan_process_ts_info(result, ts, &m_s_Scanner->mCurEv);
-
- if (ts->digital.pmts || (IS_DVBT2_TS(ts->digital.fend_para) && ts->digital.dvbt2_data_plp_num > 0)) {
- int loop_count, lc;
- dvbpsi_sdt_t *sdt_list;
- dvbpsi_pmt_t *pmt_list;
- dvbpsi_pat_t *pat_list;
-
- /* For DVB-T2, search for each PLP, else search in current TS*/
- loop_count = IS_DVBT2_TS(ts->digital.fend_para) ? ts->digital.dvbt2_data_plp_num : 1;
- LOGD("plp num %d", loop_count);
-
- for (lc = 0; lc < loop_count; lc++) {
- pat_list = IS_DVBT2_TS(ts->digital.fend_para) ? ts->digital.dvbt2_data_plps[lc].pats : ts->digital.pats;
- pmt_list = IS_DVBT2_TS(ts->digital.fend_para) ? ts->digital.dvbt2_data_plps[lc].pmts : ts->digital.pmts;
- sdt_list = IS_DVBT2_TS(ts->digital.fend_para) ? ts->digital.dvbt2_data_plps[lc].sdts : ts->digital.sdts;
- plp_id = IS_DVBT2_TS(ts->digital.fend_para) ? ts->digital.dvbt2_data_plps[lc].id : -1;
- LOGD("plp_id %d", plp_id);
-
- AM_SI_LIST_BEGIN(pmt_list, pmt) {
- scan_init_service_info(&srv_info);
- srv_info.satpara_dbid = satpara_dbid;
- srv_info.srv_id = pmt->i_program_number;
- srv_info.src = src;
- srv_info.pmt_pid = get_pmt_pid(pat_list, pmt->i_program_number);
- srv_info.pcr_pid = pmt->i_pcr_pid;
- srv_info.plp_id = plp_id;
-
- /* looking for CA descr */
- if (! srv_info.scrambled_flag) {
- scan_extract_ca_scrambled_flag(pmt->p_first_descriptor, &srv_info.scrambled_flag);
- }
-
- AM_SI_LIST_BEGIN(pmt->p_first_es, es) {
- AM_SI_ExtractAVFromES(es, &srv_info.vid, &srv_info.vfmt, &srv_info.aud_info);
-
- if (store) {
- AM_SI_ExtractDVBSubtitleFromES(es, &srv_info.sub_info);
- AM_SI_ExtractDVBTeletextFromES(es, &srv_info.ttx_info);
- }
-
- if (! srv_info.scrambled_flag)
- scan_extract_ca_scrambled_flag(es->p_first_descriptor, &srv_info.scrambled_flag);
- }
- AM_SI_LIST_END()
-
- scan_extract_srv_info_from_sdt(result, sdt_list, &srv_info);
-
- /*Store this service*/
- scan_update_service_info(result, &srv_info);
-
- scan_store_dvb_ts_evt_service(&srv_info);
-
- }
- AM_SI_LIST_END()
-
- /* All programs in PMTs added, now trying the programs in SDT but NOT in PMT */
- dvbpsi_sdt_service_t *srv;
- dvbpsi_sdt_t *sdt;
-
- AM_SI_LIST_BEGIN(ts->digital.sdts, sdt) {
- AM_SI_LIST_BEGIN(sdt->p_first_service, srv) {
- AM_Bool_t found_in_pmt = AM_FALSE;
-
- /* Is already added in PMT? */
- AM_SI_LIST_BEGIN(ts->digital.pmts, pmt)
- if (srv->i_service_id == pmt->i_program_number) {
- found_in_pmt = AM_TRUE;
- break;
- }
- AM_SI_LIST_END()
-
- if (found_in_pmt)
- continue;
-
- scan_init_service_info(&srv_info);
- srv_info.satpara_dbid = satpara_dbid;
- srv_info.srv_id = srv->i_service_id;
- srv_info.src = src;
-
- scan_extract_srv_info_from_sdt(result, sdt_list, &srv_info);
-
- scan_update_service_info(result, &srv_info);
-
- /*as no pmt for this srv, set type to data for invisible*/
- srv_info.srv_type = 0;
-
- scan_store_dvb_ts_evt_service(&srv_info);
-
- }
- AM_SI_LIST_END()
- }
- AM_SI_LIST_END()
-
- }
- }
-}
-
-void CTvScanner::dtv_scan_store(AM_SCAN_Result_t *result)
-{
- AM_SCAN_TS_t *ts;
-
- LOGD("Storing tses ...");
-
- AM_SI_LIST_BEGIN(result->tses, ts) {
- scan_store_dvb_ts(result, ts);
- }
- AM_SI_LIST_END()
-}
-
-int CTvScanner::manualDtmbScan(int beginFreq, int endFreq, int modulation)
-{
- stopScan();
-
- if (!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- AM_SCAN_Handle_t handle = 0;
- int i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.dtv_para.mode = AM_SCAN_DTVMODE_MANUAL;
- para.dtv_para.source = FE_DTMB;//fe_type
- para.dtv_para.dmx_dev_id = 0;//default 0
-
- Vector<sp<CTvChannel> > vcp;
- CTvRegion::getChannelListByNameAndFreqRange((char *)"CHINA,Default DTMB ALL", beginFreq, endFreq, vcp);
- int size = vcp.size();
-
- //@author:hao.fu
- if (size == 0) {
- return -1;
- }
-
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- for (i = 0; i < size; i++) {
- para.dtv_para.fe_paras[i].m_type = 5;//MODE_DTMB
- para.dtv_para.fe_paras[i].dtmb.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[i].dtmb.para.inversion = INVERSION_OFF;
- para.dtv_para.fe_paras[i].dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)(vcp[i]->getBandwidth());
- if (modulation == -1)
- para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)(vcp[i]->getModulation());
- else
- para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)modulation;
- }
-
- para.dtv_para.fe_cnt = size;
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = dtv_scan_store;
-
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = NULL;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = NULL;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == NULL) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
-}
-
-
-/*int CTvScanner::autoTvScan()
-{
- stopScan();
-
- if(!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- int handle = 0,i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- //strcpy(para.default_text_lang,"eng");//config
- //strcpy(para.text_langs, "eng zho chi");//config
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.dtv_para.mode = AM_SCAN_DTVMODE_ALLBAND;//DTV_MODE_ALLBAND
- //para.dtv_para.mode |= (*env)->GetIntField(env, para, doptions);//忽略
- para.dtv_para.source = 1;//QAM
- para.dtv_para.dmx_dev_id = 0;//default 0
- Vector<sp<CTvChannel> > vcp;
- //CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- CTvRegion::getChannelListByName("China,DVB-C allband", vcp);
-
- int size = vcp.size();
- LOGD("channel list size = %d", size);
- if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t*>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- //memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
-
- for (i = 0; i < size; i++) {
- para.dtv_para.fe_paras[i].m_type = FE_QAM;
- para.dtv_para.fe_paras[i].cable.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[i].cable.para.inversion = INVERSION_OFF;
- para.dtv_para.fe_paras[i].cable.para.u.qam.symbol_rate = vcp[i]->getSymbolRate();
- para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)(vcp[i]->getModulation());
- }
- //allband
- para.dtv_para.fe_cnt = size;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode&0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- LOGD("SCAN CREATE handle = %d", handle);
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void*)this);
- //注册搜索事件
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信号质量通知事件
- //AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- // AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
-}*/
-//only test for dtv allbland auto
-/*int CTvScanner::startScan()
-{
- stopScan();
-
- if(!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- int handle = 0,i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- //strcpy(para.default_text_lang,"eng");//config
- //strcpy(para.text_langs, "eng zho chi");//config
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.dtv_para.mode = 3;//DTV_MODE_ALLBAND
- //para.dtv_para.mode |= (*env)->GetIntField(env, para, doptions);//忽略
- para.dtv_para.source = 1;//QAM
- para.dtv_para.dmx_dev_id = 0;//default 0
- Vector<sp<CTvChannel> > vcp;
- //CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- CTvRegion::getChannelListByName("China,DVB-C allband", vcp);
-
- int size = vcp.size();
- LOGD("channel list size = %d", size);
- if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t*>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- //memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
-
- for (i = 0; i < size; i++) {
- para.dtv_para.fe_paras[i].m_type = FE_QAM;
- para.dtv_para.fe_paras[i].cable.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[i].cable.para.inversion = INVERSION_OFF;
- para.dtv_para.fe_paras[i].cable.para.u.qam.symbol_rate = vcp[i]->getSymbolRate();
- para.dtv_para.fe_paras[i].cable.para.u.qam.modulation = (fe_modulation_t)(vcp[i]->getModulation());
- }
- //allband
- para.dtv_para.fe_cnt = size;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode&0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void*)this);
- //注册搜索事件
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信号质量通知事件
- //AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- // AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
-}*/
-
-
-//only test for dtv allbland auto
-int CTvScanner::autoDtmbScan()
-{
- stopScan();
-
- if (!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- AM_SCAN_Handle_t handle = 0;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- //strcpy(para.default_text_lang,"eng");//config
- //strcpy(para.text_langs, "local eng zho chi chs first");//config
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_DTV_ATV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
- para.dtv_para.mode = AM_SCAN_DTVMODE_ALLBAND;//DTV_MODE_ALLBAND
- //para.dtv_para.mode |= (*env)->GetIntField(env, para, doptions);//忽略
- para.dtv_para.source = FE_DTMB;//fe_type
- para.dtv_para.dmx_dev_id = 0;//default 0
- Vector<sp<CTvChannel> > vcp;
- //CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- CTvRegion::getChannelListByName((char *)"CHINA,Default DTMB ALL", vcp);
-
- int size = vcp.size();
- LOGD("channel list size = %d", size);
- //showboz
- if (size == 0) {
- CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
- CTvRegion::getChannelListByName((char *)"CHINA,Default DTMB ALL", vcp);
- size = vcp.size();
- }
-
- if (!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t *>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- //memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
-
- for (int i = 0; i < size; i++) {
- para.dtv_para.fe_paras[i].m_type = 5;//MODE_DTMB
- para.dtv_para.fe_paras[i].dtmb.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[i].dtmb.para.inversion = INVERSION_OFF;
- para.dtv_para.fe_paras[i].dtmb.para.u.ofdm.bandwidth = (fe_bandwidth_t)(vcp[i]->getBandwidth());
- }
- //allband
- para.dtv_para.fe_cnt = size;
-
- para.dtv_para.resort_all = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = dtv_scan_store;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode & 0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = NULL;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void *)this);
- //注册搜索事件
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信号质量通知事件
- AM_EVT_Subscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe((long)handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = NULL;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == NULL) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
-}
-
-/*int CTvScanner::autoAtscScan(int attennaType,int std)
-{
- stopScan();
-
- if(!mbScanStart) { //not start or stop
- AM_SCAN_CreatePara_t para;
- AM_DMX_OpenPara_t dmx_para;
- int handle = 0,i;
- // Create the scan
- memset(&para, 0, sizeof(para));
-
- //strcpy(para.default_text_lang,"eng");//config
- //strcpy(para.text_langs, "local eng zho chi chs first");//config
- para.fend_dev_id = 0;//default
- para.mode = AM_SCAN_MODE_ADTV;//DTV
- para.atv_para.mode = AM_SCAN_ATVMODE_NONE;
-
-
- para.atv_para.default_std= std;
-
-
- para.dtv_para.mode = AM_SCAN_DTVMODE_ALLBAND;//DTV_MODE_ALLBAND
- //para.dtv_para.mode |= (*env)->GetIntField(env, para, doptions);//忽略
- para.dtv_para.source = FE_ATSC;//fe_type
- para.dtv_para.dmx_dev_id = 0;//default 0
- para.dtv_para.resort_all = AM_TRUE;
- para.dtv_para.clear_source = AM_TRUE;
- para.dtv_para.mix_tv_radio = AM_FALSE;
- para.dtv_para.sort_method = AM_SCAN_SORT_BY_FREQ_SRV_ID;
- para.store_cb = NULL;
- //para.dtv_para.attenna = attennaType;//see dvb atsc-cnc
-
- para.dtv_para.standard = AM_SCAN_DTV_STD_ATSC;
-
- mSource = para.dtv_para.source;
-
- Vector<sp<CTvChannel> > vcp;
- //CTvDatabase::getChannelParaList("/data/tv_default.xml", vcp);//channel list from xml or db
- getAtscChannelPara(attennaType,vcp);
- LOGD("ANDESEN test attenna type is %d",attennaType);
-
- int size = vcp.size();
- LOGD("channel list size = %d", size);
- //showboz
- if(size == 0) {
- CTvDatabase::GetTvDb()->importXmlToDB("/etc/tv_default.xml");
- getAtscChannelPara(attennaType,vcp);
- size = vcp.size();
- }
-
- if(!(para.dtv_para.fe_paras = static_cast<AM_FENDCTRL_DVBFrontendParameters_t*>(calloc(size, sizeof(AM_FENDCTRL_DVBFrontendParameters_t)))))
- return -1;
-
- //memset(pfp, 0, size * sizeof(AM_FENDCTRL_DVBFrontendParameters_t));
-
- for (i = 0; i < size; i++) {
- para.dtv_para.fe_paras[i].m_type = 3;//MODE_ATSC
- para.dtv_para.fe_paras[i].m_logicalChannelNum = vcp[i]->getLogicalChannelNum();
- para.dtv_para.fe_paras[i].atsc.para.frequency = vcp[i]->getFrequency();
- para.dtv_para.fe_paras[i].atsc.para.u.vsb.modulation = (fe_modulation_t)(vcp[i]->getModulation());
- }
- //allband
- para.dtv_para.fe_cnt = size;
-
- memset(&dmx_para, 0, sizeof(dmx_para));
- AM_DMX_Open(para.dtv_para.dmx_dev_id, &dmx_para);
-
- if ((para.dtv_para.mode&0x07) != AM_SCAN_DTVMODE_NONE) {
- AM_FEND_SetMode(para.fend_dev_id, para.dtv_para.source);
- tv_scan_reconnect_dmx_to_fend(para.dtv_para.dmx_dev_id, para.fend_dev_id);
- }
-
- // prog->dmx_id = para.dtv_para.dmx_dev_id;
- // prog->fend_id = para.fend_dev_id;
- // prog->mode = para.dtv_para.mode;
- // Start Scan
- if (AM_SCAN_Create(&para, &handle) != AM_SUCCESS) {
- LOGD("SCAN CREATE fail");
- handle = 0;
- } else {
- mScanHandle = handle;
- AM_SCAN_SetUserData(handle, (void*)this);
- //注册搜索事件
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- //注册信号质量通知事件
- AM_EVT_Subscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- if (AM_SCAN_Start(handle) != AM_SUCCESS) {
- AM_SCAN_Destroy(handle, AM_FALSE);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe(handle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- handle = 0;
- }
- }
- if (para.atv_para.fe_paras != NULL)
- free(para.atv_para.fe_paras);
- if (para.dtv_para.fe_paras != NULL)
- free(para.dtv_para.fe_paras);
-
- if (handle == 0) {
- return -1;
- }
- mbScanStart = true;//start call ok
- } else {
- LOGD("scanning and not stop");
- }
- return 0;
-}*/
-
-
-int CTvScanner::stopScan()
-{
- LOGD("StopScan");
- //requestExit();
- if (mbScanStart) { //if start ok and not stop
- int ret = AM_SCAN_Destroy(mScanHandle, AM_TRUE);
- AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_PROGRESS, tv_scan_evt_callback, NULL);
- AM_EVT_Unsubscribe((long)mScanHandle, AM_SCAN_EVT_SIGNAL, tv_scan_evt_callback, NULL);
- AM_SEC_Cache_Reset(0);
- //stop loop
- LOGD("StopScan , ret=%d", ret);
- mbScanStart = false;//stop ok
- } else {
- LOGD("not start scan or scan stoped");
- }
- return 0;
-}
-
-void CTvScanner::tv_scan_evt_callback(long dev_no, int event_type, void *param, void *data __unused)
-{
- CTvScanner *pT = NULL;
- long long tmpFreq = 0;
-
- LOGD("evt evt:%d", event_type);
- AM_SCAN_GetUserData((AM_SCAN_Handle_t)dev_no, (void **)&pT);
- if (pT == NULL) {
- return;
- }
- pT->mCurEv.clear();
- memset(pT->mCurEv.mProgramName, '\0', sizeof(pT->mCurEv.mProgramName));
- memset(pT->mCurEv.mMSG, '\0', sizeof(pT->mCurEv.mMSG));
- if (event_type == AM_SCAN_EVT_PROGRESS) {
- AM_SCAN_Progress_t *evt = (AM_SCAN_Progress_t *)param;
- LOGD("progress evt:%d", evt->evt);
- switch (evt->evt) {
- case AM_SCAN_PROGRESS_SCAN_BEGIN:
- pT->mCurEv.mPercent = 0;
- break;
- case AM_SCAN_PROGRESS_NIT_BEGIN:
-
- break;
- case AM_SCAN_PROGRESS_NIT_END:
-
- break;
- case AM_SCAN_PROGRESS_TS_BEGIN: {
- AM_SCAN_TSProgress_t *tp = (AM_SCAN_TSProgress_t *)evt->data;
- if (tp == NULL)
- break;
- pT->mCurEv.mChannelNumber = tp->index;
- pT->mCurEv.mMode = tp->fend_para.m_type;
- pT->mCurEv.mFrequency = ((struct dvb_frontend_parameters *)(&tp->fend_para))->frequency;
- pT->mCurEv.mSymbolRate = tp->fend_para.cable.para.u.qam.symbol_rate;
- pT->mCurEv.mModulation = tp->fend_para.cable.para.u.qam.modulation;
- pT->mCurEv.mBandwidth = tp->fend_para.terrestrial.para.u.ofdm.bandwidth;
- pT->mCurEv.mOfdm_mode = tp->fend_para.terrestrial.para.u.ofdm.ofdm_mode;
- pT->mCurEv.mAudio = tp->fend_para.analog.para.u.analog.audmode;
- pT->mCurEv.mStandard = tp->fend_para.analog.para.u.analog.std;
- pT->mCurEv.mSat_polarisation = tp->fend_para.sat.polarisation;
- if (pT->mCurEv.mMode == FE_ANALOG) {
- if (pT->mSource == FE_ATSC) {
- pT->mCurEv.mPercent = (tp->index * 100) / tp->total;
- } else {
- pT->mCurEv.mPercent = 0;
- }
- } else {
- pT->mCurEv.mPercent = (tp->index * 100) / tp->total;
- }
-
- if (pT->mCurEv.mTotalChannelCount == 0)
- pT->mCurEv.mTotalChannelCount = tp->total;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
-
- pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mStrength = 0;
- pT->mCurEv.mSnr = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->sendEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_TS_END: {
- /*pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- pT->sendEvent(pT->mCurEv);*/
- }
- break;
-
- case AM_SCAN_PROGRESS_PAT_DONE: /*{
- if(pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- pT->sendEvent(pT->mCurEv);
- }
- }*/
- break;
- case AM_SCAN_PROGRESS_SDT_DONE: /*{
- dvbpsi_sdt_t *sdts = (dvbpsi_sdt_t *)evt->data;
- dvbpsi_sdt_t *sdt;
-
- if (pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mPercent += 25;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->sendEvent(pT->mCurEv);
- }
- }*/
- break;
- case AM_SCAN_PROGRESS_CAT_DONE: /*{
- dvbpsi_cat_t *cat = (dvbpsi_cat_t *)evt->data;
- if (pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mPercent += 25;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->sendEvent(pT->mCurEv);
- }
- }*/
- break;
- case AM_SCAN_PROGRESS_PMT_DONE: /*{
- dvbpsi_pmt_t *pmt = (dvbpsi_pmt_t *)evt->data;
- if (pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mPercent += 25;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- pT->sendEvent(pT->mCurEv);
- }
- }*/
- break;
- case AM_SCAN_PROGRESS_MGT_DONE: {
- mgt_section_info_t *mgt = (mgt_section_info_t *)evt->data;
-
- if (pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mPercent += 10;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->sendEvent(pT->mCurEv);
- }
- }
- break;
- case AM_SCAN_PROGRESS_VCT_DONE: {
- /*ATSC TVCT*/
- if (pT->mCurEv.mTotalChannelCount == 1) {
- pT->mCurEv.mPercent += 30;
- if (pT->mCurEv.mPercent >= 100)
- pT->mCurEv.mPercent = 99;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->sendEvent(pT->mCurEv);
- }
- }
- break;
- case AM_SCAN_PROGRESS_NEW_PROGRAM: {
- /* Notify the new searched programs */
- AM_SCAN_ProgramProgress_t *pp = (AM_SCAN_ProgramProgress_t *)evt->data;
- if (pp != NULL) {
- pT->mCurEv.mprogramType = pp->service_type;
- snprintf(pT->mCurEv.mProgramName, sizeof(pT->mCurEv.mProgramName), "%s", pp->name);
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
-
- pT->sendEvent(pT->mCurEv);
- }
- }
- break;
- case AM_SCAN_PROGRESS_BLIND_SCAN: {
- AM_SCAN_DTVBlindScanProgress_t *bs_prog = (AM_SCAN_DTVBlindScanProgress_t *)evt->data;
-
- if (bs_prog) {
- pT->mCurEv.mPercent = bs_prog->progress;
-
- snprintf(pT->mCurEv.mMSG, sizeof(pT->mCurEv.mMSG), "%s/%s %dMHz",
- bs_prog->polar == AM_FEND_POLARISATION_H ? "H" : "V",
- bs_prog->lo == AM_FEND_LOCALOSCILLATORFREQ_L ? "L-LOF" : "H-LOF",
- bs_prog->freq / 1000);
-
- pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_PROGRESS;
-
- pT->sendEvent(pT->mCurEv);
-
- if (bs_prog->new_tp_cnt > 0) {
- int i = 0;
- for (i = 0; i < bs_prog->new_tp_cnt; i++) {
- LOGD("====New tp: %dkS/s %d====", bs_prog->new_tps[i].frequency,
- bs_prog->new_tps[i].u.qpsk.symbol_rate);
-
- pT->mCurEv.mFrequency = bs_prog->new_tps[i].frequency;
- pT->mCurEv.mSymbolRate = bs_prog->new_tps[i].u.qpsk.symbol_rate;
- pT->mCurEv.mSat_polarisation = bs_prog->polar;
-
- pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_NEWCHANNEL;
-
- pT->sendEvent(pT->mCurEv);
- }
- }
- if (bs_prog->progress >= 100) {
-
- pT->mCurEv.mType = ScannerEvent::EVENT_BLINDSCAN_END;
-
- pT->sendEvent(pT->mCurEv);
-
- pT->mCurEv.mPercent = 0;
- }
- }
- }
- break;
- case AM_SCAN_PROGRESS_STORE_BEGIN: {
- pT->mCurEv.mType = ScannerEvent::EVENT_STORE_BEGIN;
- pT->mCurEv.mLockedStatus = 0;
- pT->sendEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_STORE_END: {
- pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_STORE_END;
- pT->sendEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_SCAN_END: {
- pT->mCurEv.mPercent = 100;
- pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_END;
- pT->sendEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_SCAN_EXIT: {
- pT->mCurEv.mLockedStatus = 0;
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_EXIT;
- pT->sendEvent(pT->mCurEv);
- }
- break;
- case AM_SCAN_PROGRESS_ATV_TUNING: {
- pT->mCurEv.mFrequency = (int)evt->data;
- pT->mCurEv.mLockedStatus = 0;
- tmpFreq = (pT->mCurEv.mFrequency - pT->mCurScanStartFreq) / 1000000;
- pT->mCurEv.mPercent = tmpFreq * 100UL / ((pT->mCurScanEndFreq - pT->mCurScanStartFreq) / 1000000);
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- pT->sendEvent(pT->mCurEv);
- }
- break;
-
- default:
- break;
- }
- } else if (event_type == AM_SCAN_EVT_SIGNAL) {
- AM_SCAN_DTVSignalInfo_t *evt = (AM_SCAN_DTVSignalInfo_t *)param;
- //pT->mCurEv.mprogramType = 0xff;
- pT->mCurEv.mFrequency = (int)evt->frequency;
- pT->mCurEv.mLockedStatus = (evt->locked ? 1 : 0);
-
- if (pT->mCurEv.mMode == FE_ANALOG && evt->locked)//trick here for atv new prog
- pT->mCurEv.mLockedStatus |= 0x10;
-
- pT->mCurEv.mType = ScannerEvent::EVENT_SCAN_PROGRESS;
- if (pT->mCurEv.mMode != FE_ANALOG && evt->locked) {
- pT->mCurEv.mStrength = evt->strength;
- pT->mCurEv.mSnr = evt->snr;
- } else {
- pT->mCurEv.mStrength = 0;
- pT->mCurEv.mSnr = 0;
- }
-
- //if (pT->mCurEv.mMode == FE_ANALOG)
- pT->sendEvent(pT->mCurEv);
-
- pT->mCurEv.mLockedStatus &= ~0x10;
- }
-}
-
-void CTvScanner::tv_scan_reconnect_dmx_to_fend(int dmx_no, int fend_no)
-{
- AM_DMX_Source_t src;
-
- if (AM_FEND_GetTSSource(fend_no, &src) == AM_SUCCESS) {
- LOGD("Set demux%d source to %d", dmx_no, src);
- AM_DMX_SetSource(dmx_no, src);
- } else {
- LOGD("Cannot get frontend ts source!!");
- }
-}
-
-int CTvScanner::getAtscChannelPara(int attennaType, Vector<sp<CTvChannel> > &vcp)
-{
- switch (attennaType) { //region name should be remove to config file and read here
- case 1:
- CTvRegion::getChannelListByName((char *)"U.S.,ATSC Air", vcp);
- break;
- case 2:
- CTvRegion::getChannelListByName((char *)"U.S.,ATSC Cable Standard", vcp);
- break;
- case 3:
- CTvRegion::getChannelListByName((char *)"U.S.,ATSC Cable IRC", vcp);
- break;
- case 4:
- CTvRegion::getChannelListByName((char *)"U.S.,ATSC Cable HRC", vcp);
- break;
- default:
- return -1;
- }
-
- return 0;
-}
-
-void CTvScanner::sendEvent(ScannerEvent &evt)
-{
- if (mpObserver) {
- if (evt.mType != ScannerEvent::EVENT_DTV_PROG_DATA) {
- evt.mAcnt = 0;//avoid invalid count confused the array.
- evt.mScnt = 0;
- }
- mpObserver->onEvent(evt);
- }
-}
-