| 1 | /**************************************************************************** |
|---|
| 2 | * NAME: App_Fnc_AutoScan.c |
|---|
| 3 | *---------------------------------------------------------------------------- |
|---|
| 4 | * Copyright (c) DIGITAL STREAM Technology Inc. |
|---|
| 5 | *---------------------------------------------------------------------------- |
|---|
| 6 | * CREATED_BY: Chan Hun Jeon |
|---|
| 7 | * CREATION_DATE: 2009/09/08 |
|---|
| 8 | * $Author: chjeon $ |
|---|
| 9 | * $Revision: 1.1 $ |
|---|
| 10 | * $Date: 2009/07/08 15:08:26 $ |
|---|
| 11 | *---------------------------------------------------------------------------- |
|---|
| 12 | * PURPOSE: |
|---|
| 13 | * - implement autoscan API |
|---|
| 14 | *****************************************************************************/ |
|---|
| 15 | |
|---|
| 16 | /*_____ I N C L U D E __________________________________________*/ |
|---|
| 17 | |
|---|
| 18 | #include "App_Main.h" |
|---|
| 19 | #include "App_Fnc_Common.h" |
|---|
| 20 | |
|---|
| 21 | #include "App_Fnc_Audio.h" |
|---|
| 22 | #include "App_Fnc_Video.h" |
|---|
| 23 | #include "App_Fnc_ChTune.h" |
|---|
| 24 | #include "App_Fnc_EPG.h" |
|---|
| 25 | |
|---|
| 26 | #include "DMG_Menu.h" |
|---|
| 27 | #include "App_Res_Resources.h" |
|---|
| 28 | |
|---|
| 29 | |
|---|
| 30 | /*_____ D E F I N I T I O N ____________________________________*/ |
|---|
| 31 | |
|---|
| 32 | #if COMMENT |
|---|
| 33 | _____DbgPrint_____(){} |
|---|
| 34 | #endif |
|---|
| 35 | |
|---|
| 36 | DHL_MODULE("@f_scn", 0); |
|---|
| 37 | |
|---|
| 38 | |
|---|
| 39 | |
|---|
| 40 | |
|---|
| 41 | |
|---|
| 42 | #if COMMENT |
|---|
| 43 | ____Config____(){} |
|---|
| 44 | #endif |
|---|
| 45 | |
|---|
| 46 | #define TIMER_DELAYED_UID_TUNE 3199 |
|---|
| 47 | |
|---|
| 48 | #define CS_DETECT_THRESHOLD 5 |
|---|
| 49 | // Cable System Score Threshold for Detection |
|---|
| 50 | // ÀÛ¾÷Áß, Standard °£¿¡ ÀÌ Á¡¼ö ÀÌ»ó Â÷À̳ª¸é °Ë»ö Á¾·á. |
|---|
| 51 | // |
|---|
| 52 | |
|---|
| 53 | #define N_AIR_DEMOD 1 |
|---|
| 54 | |
|---|
| 55 | #define MAX_CABLE_DEMOD 3 |
|---|
| 56 | |
|---|
| 57 | #define NEO_REGISTER_DEBUG_SYMBOL 0 |
|---|
| 58 | |
|---|
| 59 | |
|---|
| 60 | // ¾Æ·¡ ¿É¼ÇµéÀº DHL FE API¿¡¼ auto ¸ðµå Æ©´×À» Áö¿øÇÒ °æ¿ì ÇØ´ç ±â´ÉÀ» »ç¿ëÇÒ °ÍÀÎÁö ¼³Á¤ÇÑ´Ù. |
|---|
| 61 | // ÀÌ ±â´ÉµéÀº FE platform¿¡ µû¶ó¼ Áö¿øÇÒ ¼öµµ, Áö¿øÇÏÁö ¾ÊÀ» ¼öµµ Àִµ¥, |
|---|
| 62 | // ¼³·É ¿©±â¼ prefer ON ÇÏ´õ¶óµµ platform¿¡¼ Áö¿øÇÏÁö ¾ÊÀ¸¸é ¾Æ¹«·± Àǹ̰¡ ¾ø´Ù. |
|---|
| 63 | // |
|---|
| 64 | #define PREFER_DEMOD_CABLE_AUTO 1 |
|---|
| 65 | #define PREFER_DEMOD_QAM_AUTO 1 |
|---|
| 66 | |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | |
|---|
| 70 | |
|---|
| 71 | #if COMMENT |
|---|
| 72 | ____Types____(){} |
|---|
| 73 | #endif |
|---|
| 74 | |
|---|
| 75 | typedef struct |
|---|
| 76 | { |
|---|
| 77 | char *name; // demodulation name for debug |
|---|
| 78 | |
|---|
| 79 | tDHL_Demod mod; // µå¶óÀ̹ö¿¡¼ »ç¿ëÇÏ´Â Demod »ó¼ö °ª |
|---|
| 80 | |
|---|
| 81 | int timeout_in_ms; // |
|---|
| 82 | |
|---|
| 83 | } DemodDescriptor; |
|---|
| 84 | |
|---|
| 85 | |
|---|
| 86 | #define MAX_SUPPORTED_DEMOD 5 |
|---|
| 87 | |
|---|
| 88 | |
|---|
| 89 | // Cable systemÀ» detect Çϱâ À§ÇØ ÇÊ¿äÇÑ ÀÚ·áµé. |
|---|
| 90 | // ÀÌ °ªµéÀº °¢ ScanTune ÇÒ ¶§¸¶´Ù ±× °á°ú¿¡ µû¶ó ÀûÀýÈ÷ °»½ÅµÈ´Ù. |
|---|
| 91 | // |
|---|
| 92 | typedef struct |
|---|
| 93 | { |
|---|
| 94 | int score_std, score_hrc, score_irc; |
|---|
| 95 | |
|---|
| 96 | int last_successful_mod; |
|---|
| 97 | |
|---|
| 98 | DemodDescriptor demod[MAX_SUPPORTED_DEMOD]; |
|---|
| 99 | int n_demod; |
|---|
| 100 | } AppScanContext; |
|---|
| 101 | |
|---|
| 102 | |
|---|
| 103 | |
|---|
| 104 | |
|---|
| 105 | |
|---|
| 106 | #if COMMENT |
|---|
| 107 | ____Variables____(){} |
|---|
| 108 | #endif |
|---|
| 109 | |
|---|
| 110 | static AppScanContext g_AppScanContext; |
|---|
| 111 | |
|---|
| 112 | int g_Timeout_AutoscanLock; |
|---|
| 113 | // cafrii 060714 add |
|---|
| 114 | // timeout override only for autoscan.. |
|---|
| 115 | // if 0, default timeout will be used. |
|---|
| 116 | |
|---|
| 117 | |
|---|
| 118 | static BOOL b_stt_gathering; |
|---|
| 119 | static BOOL b_stt_set; |
|---|
| 120 | |
|---|
| 121 | /*_____ F U N C T I O N ________________________________________*/ |
|---|
| 122 | |
|---|
| 123 | #if COMMENT |
|---|
| 124 | ____Function____(){} |
|---|
| 125 | #endif |
|---|
| 126 | |
|---|
| 127 | void App_Autoscan_RecoverLastChannel(void); |
|---|
| 128 | |
|---|
| 129 | /* |
|---|
| 130 | FE¿¡¼ VSB¸¸ Áö¿øÇÏ´ÂÁö, QamAuto¸¦ Áö¿øÇÏ´ÂÁö µîÀº platform¿¡ µû¶ó ´Þ¶óÁø´Ù. |
|---|
| 131 | |
|---|
| 132 | °ú°Å¿¡´Â °¢ platform¿¡ ¸Â°Ô °íÁ¤µÈ Å×À̺íÀ» »ç¿ëÇߴµ¥, |
|---|
| 133 | ÀÌÁ¦´Â DHLÀÇ capability query±â´ÉÀ» ÀÌ¿ëÇÏ¿© µ¿ÀûÀ¸·Î »ý¼ºÇϵµ·Ï ÇÑ´Ù. |
|---|
| 134 | |
|---|
| 135 | ´ÜÀÏ tuner¸¸À» °¡Á¤ÇÑ´Ù. |
|---|
| 136 | */ |
|---|
| 137 | |
|---|
| 138 | |
|---|
| 139 | #define APPEND_DEMOD_TABLE(tbl, vname, vmode, timeout) do { \ |
|---|
| 140 | DemodDescriptor *p = tbl; \ |
|---|
| 141 | p->name = (vname); \ |
|---|
| 142 | p->mod = (vmode); \ |
|---|
| 143 | p->timeout_in_ms = (timeout); \ |
|---|
| 144 | } while(0) |
|---|
| 145 | |
|---|
| 146 | |
|---|
| 147 | static void AppScan_GenerateDemodTable(AppScanContext *ctx, BOOL bCable) |
|---|
| 148 | { |
|---|
| 149 | DHL_RESULT dhr; |
|---|
| 150 | UINT32 cap; |
|---|
| 151 | int i; |
|---|
| 152 | |
|---|
| 153 | DemodDescriptor ddt[MAX_SUPPORTED_DEMOD]; |
|---|
| 154 | int n_dd = 0; |
|---|
| 155 | |
|---|
| 156 | dprint(2, "generating demod table for %s mode..\n", bCable ? "cable" : "air"); |
|---|
| 157 | |
|---|
| 158 | |
|---|
| 159 | dhr = DHL_FE_GetDeviceInfo(DEFAULT_TUNER_ID, eDHL_FE_DEV_CAPABILITY_1, &cap); |
|---|
| 160 | if (dhr != DHL_OK) { |
|---|
| 161 | dprint(0, "!! dev cap query err %d\n", dhr); |
|---|
| 162 | DHL_ASSERT(FALSE, ""); |
|---|
| 163 | } |
|---|
| 164 | |
|---|
| 165 | dprint(2, " fe_cap info from dhl: 0x%x\n", cap); |
|---|
| 166 | |
|---|
| 167 | //------- terrestral vsb and ntsc |
|---|
| 168 | if (!bCable) |
|---|
| 169 | { |
|---|
| 170 | //------- vsb |
|---|
| 171 | if (cap & eDHL_TUCAP_VSB) { |
|---|
| 172 | APPEND_DEMOD_TABLE(&ddt[n_dd], "8VSB", eDHL_DEMOD_8VSB, DEMOD_TIMEOUT_AIR_VSB); |
|---|
| 173 | n_dd++; |
|---|
| 174 | } |
|---|
| 175 | //------- ntsc |
|---|
| 176 | if (cap & eDHL_TUCAP_ANALOG) { |
|---|
| 177 | APPEND_DEMOD_TABLE(&ddt[n_dd], "NTSC", eDHL_DEMOD_NTSC, DEMOD_TIMEOUT_AIR_NTSC); |
|---|
| 178 | n_dd++; |
|---|
| 179 | } |
|---|
| 180 | goto gen_end; |
|---|
| 181 | } |
|---|
| 182 | |
|---|
| 183 | |
|---|
| 184 | if(App_GetEnableCableQam()) {//when support cable qam |
|---|
| 185 | |
|---|
| 186 | //------- cable auto |
|---|
| 187 | #if PREFER_DEMOD_CABLE_AUTO |
|---|
| 188 | // tDHL_TuerCapBits ºñÆ® üũ. |
|---|
| 189 | // °¡Àå ¹üÀ§°¡ Å« °ÍºÎÅÍ.. |
|---|
| 190 | if (cap & eDHL_TUCAP_CABLEAUTO) { |
|---|
| 191 | APPEND_DEMOD_TABLE(&ddt[n_dd], "CableAuto", eDHL_DEMOD_AUTODETECT, DEMOD_TIMEOUT_CABLE_AUTO); |
|---|
| 192 | n_dd++; |
|---|
| 193 | goto gen_end; |
|---|
| 194 | } |
|---|
| 195 | #endif |
|---|
| 196 | |
|---|
| 197 | // ÄÉÀÌºí¿¡¼´Â ¾Æ¹«·¡µµ QAM ±â´ÉÀÌ VSB ±â´Éº¸´Ù ´õ Áß¿äÇϹǷÎ, |
|---|
| 198 | // Cable demod¸¦ ¾Õ¿¡ À§Ä¡½ÃŲ´Ù. »ç½Ç Å« ¼º´É Â÷ÀÌ´Â ¾ø´Ù. |
|---|
| 199 | |
|---|
| 200 | //------- cable qam |
|---|
| 201 | #if PREFER_DEMOD_QAM_AUTO |
|---|
| 202 | if (cap & eDHL_TUCAP_QAMAUTO) { |
|---|
| 203 | APPEND_DEMOD_TABLE(&ddt[n_dd], "QamAuto", eDHL_DEMOD_QAM_AUTO, DEMOD_TIMEOUT_QAM_AUTO); |
|---|
| 204 | n_dd++; |
|---|
| 205 | } |
|---|
| 206 | else |
|---|
| 207 | #endif |
|---|
| 208 | if (cap & eDHL_TUCAP_QAM) { |
|---|
| 209 | // ¸¹Àº ¼öÀÇ cable ȯ°æ¿¡¼ 256 qam ÀÌ ¿ì¼± »ç¿ëµÇ°í ÀÖÀ¸¹Ç·Î ¾Õ¿¡ µÒ. |
|---|
| 210 | // autoscan ÇÒ ¶§¿¡´Â ¸¶Áö¸· ¼º°øÇÑ demod¸¦ ±â¾ïÇϹǷΠ¼ø¼°¡ º° »ó°ü ¾øÀ¸³ª, |
|---|
| 211 | // manual scan ÇÏ´Â °æ¿ì¿¡ ½Ã°£À» Á» ´õ ´ÜÃà ÇÒ ¼ö ÀÖ´Ù. |
|---|
| 212 | APPEND_DEMOD_TABLE(&ddt[n_dd], "Qam256", eDHL_DEMOD_256QAM, DEMOD_TIMEOUT_256QAM); |
|---|
| 213 | n_dd++; |
|---|
| 214 | APPEND_DEMOD_TABLE(&ddt[n_dd], "Qam64", eDHL_DEMOD_64QAM, DEMOD_TIMEOUT_64QAM); |
|---|
| 215 | n_dd++; |
|---|
| 216 | } |
|---|
| 217 | } |
|---|
| 218 | |
|---|
| 219 | //------- vsb |
|---|
| 220 | if (cap & eDHL_TUCAP_VSB) { |
|---|
| 221 | APPEND_DEMOD_TABLE(&ddt[n_dd], "8VSB", eDHL_DEMOD_8VSB, DEMOD_TIMEOUT_CABLE_VSB); |
|---|
| 222 | n_dd++; |
|---|
| 223 | } |
|---|
| 224 | |
|---|
| 225 | //------- ntsc |
|---|
| 226 | // ntsc ´Â º°µµÀÇ pass·Î ºÐ¸®ÇÒ ¼öµµ ÀÖ°í, ¾Æ´Ï¸é digital °ú ÅëÇÕÇÏ¿© ¼öÇàÇÒ ¼öµµ ÀÖ´Ù. |
|---|
| 227 | if (cap & eDHL_TUCAP_ANALOG) { |
|---|
| 228 | APPEND_DEMOD_TABLE(&ddt[n_dd], "NTSC", eDHL_DEMOD_NTSC, DEMOD_TIMEOUT_CABLE_NTSC); |
|---|
| 229 | n_dd++; |
|---|
| 230 | } |
|---|
| 231 | |
|---|
| 232 | gen_end: |
|---|
| 233 | dprint(2, "total %d demods in tables..\n", n_dd); |
|---|
| 234 | for (i=0; i<n_dd; i++) { |
|---|
| 235 | dprint(2, " (%d) '%s', %d ms timeout\n", i, ddt[i].name, ddt[i].timeout_in_ms); |
|---|
| 236 | } |
|---|
| 237 | |
|---|
| 238 | // vsb, ntsc ±â´ÉÀ» Áö¿øÇÏÁö ¾Ê´Â platform¿¡¼ air ¸ðµå°¡ ¼³Á¤µÈ °æ¿ì ¿©±â¼ °æ°í¼º assert. |
|---|
| 239 | // ±×·² °æ¿ì ½Ã³ª¸®¿À ÀÚü¸¦ °ËÅäÇϱ⠹ٶ÷.. |
|---|
| 240 | DHL_ASSERT(n_dd != 0, "!! no possible demod?\n"); |
|---|
| 241 | |
|---|
| 242 | memcpy(ctx->demod, ddt, sizeof(ddt[0])*n_dd); |
|---|
| 243 | ctx->n_demod = n_dd; |
|---|
| 244 | } |
|---|
| 245 | |
|---|
| 246 | |
|---|
| 247 | static BOOL AppScan_GetDigitalLockStatus() |
|---|
| 248 | { |
|---|
| 249 | DHL_RESULT dhlResult; |
|---|
| 250 | UINT32 lock; |
|---|
| 251 | dhlResult = DHL_FE_GetSignalStatus(DEFAULT_TUNER_ID, eDHL_SIGNAL_LOCK, &lock); |
|---|
| 252 | |
|---|
| 253 | if (dhlResult==DHL_OK && lock) |
|---|
| 254 | return TRUE; |
|---|
| 255 | else |
|---|
| 256 | return FALSE; |
|---|
| 257 | } |
|---|
| 258 | |
|---|
| 259 | |
|---|
| 260 | static BOOL AppScan_GetAnalogLockStatus() |
|---|
| 261 | { |
|---|
| 262 | DHL_RESULT dhlResult; |
|---|
| 263 | UINT32 lock; |
|---|
| 264 | dhlResult = DHL_FE_GetSignalStatus(DEFAULT_TUNER_ID, eDHL_SIGNAL_NTSC_LOCK, &lock); |
|---|
| 265 | |
|---|
| 266 | |
|---|
| 267 | if (dhlResult==DHL_OK && lock) |
|---|
| 268 | return TRUE; |
|---|
| 269 | else |
|---|
| 270 | return FALSE; |
|---|
| 271 | } |
|---|
| 272 | |
|---|
| 273 | |
|---|
| 274 | // lockÀÌ µÈ »óÅ¿¡¼¸¸ ÀÌ ÇÔ¼ö°¡ Á¦´ë·Î µ¿ÀÛÇÑ´Ù°í ÇÔ. |
|---|
| 275 | // |
|---|
| 276 | tDHL_Demod AppScan_GetModulationMode() |
|---|
| 277 | { |
|---|
| 278 | DHL_RESULT dhlResult; |
|---|
| 279 | tDHL_Demod mode; |
|---|
| 280 | |
|---|
| 281 | dhlResult = DHL_FE_GetModFormat(DEFAULT_TUNER_ID, &mode); |
|---|
| 282 | |
|---|
| 283 | if(dhlResult) return eDHL_DEMOD_INVALID; |
|---|
| 284 | |
|---|
| 285 | return mode; |
|---|
| 286 | } |
|---|
| 287 | |
|---|
| 288 | |
|---|
| 289 | // ÇØ´ç Á֯ļö·Î Æ©´×ÇÏ¿© signalÀÌ ÀÖ´ÂÁö °Ë»çÇÑ´Ù. |
|---|
| 290 | // |
|---|
| 291 | // °¨ÁöµÈ modulation mode °ªÀ» ¸®ÅÏ. |
|---|
| 292 | // |
|---|
| 293 | STATUS AppScan_CheckSignalLock(UINT32 freqInKHz, |
|---|
| 294 | ChannelScanCancelCheckFn fnCheck, |
|---|
| 295 | DemodDescriptor *pDemodDesc, int nDemod, int *piModIdxStart, |
|---|
| 296 | tDHL_Demod *pModType) |
|---|
| 297 | { |
|---|
| 298 | int i, mod_idx = 0, timeout, err; |
|---|
| 299 | UINT32 msStart; |
|---|
| 300 | BOOL bCheckNtscAlso; |
|---|
| 301 | tDHL_Demod mod; |
|---|
| 302 | DHL_RESULT dhr; |
|---|
| 303 | |
|---|
| 304 | if (nDemod <= 0) { |
|---|
| 305 | dprint(0, "!! %s: n_demod %d invalid\n", __func__, nDemod); |
|---|
| 306 | return statusInvalidArgument; |
|---|
| 307 | } |
|---|
| 308 | |
|---|
| 309 | if (pModType) |
|---|
| 310 | *pModType = (tDHL_Demod)-1; |
|---|
| 311 | |
|---|
| 312 | // |
|---|
| 313 | // ÇØ´ç Á֯ļö·Î ¼¼°¡Áö demodulation mode·Î ¸ðµÎ try¸¦ ÇØº»´Ù. |
|---|
| 314 | // |
|---|
| 315 | // °Ë»ö ½Ã°£À» ÁÙÀ̱â À§ÇØ ¸¶Áö¸·À¸·Î lock µÈ demod ¹æ½ÄÀ» ±â¾ïÇϰí ÀÖ´Ù°¡ |
|---|
| 316 | // ±× ¹æ½ÄÀ¸·Î ¸ÕÀú try¸¦ ÇÑ´Ù. |
|---|
| 317 | // ÀÎÁ¢ ä³ÎÀÇ °æ¿ì °°Àº modulation ¹æ½ÄÀ» »ç¿ëÇÒ È®·üÀÌ ³ô±â ¶§¹®. |
|---|
| 318 | // |
|---|
| 319 | if (*piModIdxStart >= 0) |
|---|
| 320 | mod_idx = *piModIdxStart % nDemod; // Ȥ½Ã idx°ªÀÌ À߸øµÇ¾úÀ» ¼öµµ ÀÖÀ¸¹Ç·Î.. |
|---|
| 321 | // |
|---|
| 322 | // check¸¦ ½ÃÀÛÇÒ modulation index. |
|---|
| 323 | |
|---|
| 324 | for (i=0; i<nDemod; i++) |
|---|
| 325 | { |
|---|
| 326 | // wait time until signal lock with timeout |
|---|
| 327 | // |
|---|
| 328 | timeout = pDemodDesc[mod_idx].timeout_in_ms; |
|---|
| 329 | if (g_Timeout_AutoscanLock) |
|---|
| 330 | timeout = g_Timeout_AutoscanLock; |
|---|
| 331 | |
|---|
| 332 | dprint(0, "\t freq %u KHz, '%s' modulation, timeout %d ms\n", |
|---|
| 333 | freqInKHz, pDemodDesc[mod_idx].name, timeout); |
|---|
| 334 | |
|---|
| 335 | // tuner ¼³Á¤ÇÏ´Â ½Ã°£±îÁö Æ÷ÇÔÇØ¼ ¾ó¸¶ °É¸®´ÂÁö ÃøÁ¤Çغ¸ÀÚ. |
|---|
| 336 | msStart = DHL_OS_GetMsCount(); |
|---|
| 337 | |
|---|
| 338 | //DMW_HAL_TunerSetFrequency(freqInKHz, pDemodDesc[mod_idx].mod, fnCheck); |
|---|
| 339 | dhr = DHL_FE_Start(DEFAULT_TUNER_ID, freqInKHz, |
|---|
| 340 | pDemodDesc[mod_idx].mod, NULL); |
|---|
| 341 | |
|---|
| 342 | if(dhr) { |
|---|
| 343 | dprint(0, "\t DHL_FE_Start returns error(err code : %d)\n", dhr); |
|---|
| 344 | continue; |
|---|
| 345 | } |
|---|
| 346 | |
|---|
| 347 | // Oren Demodulator´Â VSB Æ©´×À» ½ÃµµÇÏ¸é µ¿½Ã¿¡ NTSC À¯¹«¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù. |
|---|
| 348 | // Á¦Ç°ÀÌ NTSC¸¦ Áö¿øÇÏÁö ¾Ê´õ¶óµµ ÀÌ ±â´ÉÀ» »ç¿ëÇϸé scan ¼Óµµ¸¦ ³ôÀÏ ¼ö ÀÖ´Ù. |
|---|
| 349 | // |
|---|
| 350 | if (pDemodDesc[mod_idx].mod == eDHL_DEMOD_8VSB) |
|---|
| 351 | bCheckNtscAlso = TRUE; |
|---|
| 352 | else |
|---|
| 353 | bCheckNtscAlso = FALSE; |
|---|
| 354 | |
|---|
| 355 | // Á» ´õ ÀÇ¹Ì ÀÖ´Â ½Ã°£ ÃøÁ¤À» À§ÇØ ¾ÕÀ¸·Î À̵¿. |
|---|
| 356 | //msStart = DHL_OS_GetMsCount(); |
|---|
| 357 | |
|---|
| 358 | dprint(0, "\t waiting lock...\n"); |
|---|
| 359 | |
|---|
| 360 | // cafrii 081023 |
|---|
| 361 | // ¸ÕÀú lock üũ¸¦ ÇÑ ´ÙÀ½¿¡ timeout check¸¦ Çϵµ·Ï ÇÑ´Ù. |
|---|
| 362 | // ÀÌ¹Ì lockÀÌ ´Ù µÇ¾ú´Âµ¥ timeoutÀ» ÀÌÀ¯·Î fail ½Ãų ÀÌÀ¯´Â ¾ø´Ù. |
|---|
| 363 | // |
|---|
| 364 | while (1) |
|---|
| 365 | { |
|---|
| 366 | |
|---|
| 367 | if (AppScan_GetDigitalLockStatus()) |
|---|
| 368 | { |
|---|
| 369 | mod = AppScan_GetModulationMode(); |
|---|
| 370 | |
|---|
| 371 | // cafrii 060628, add more check.. |
|---|
| 372 | if (mod != eDHL_DEMOD_8VSB && |
|---|
| 373 | mod != eDHL_DEMOD_64QAM && |
|---|
| 374 | mod != eDHL_DEMOD_256QAM) |
|---|
| 375 | mod = eDHL_DEMOD_8VSB; // adjust! |
|---|
| 376 | |
|---|
| 377 | *piModIdxStart = mod_idx; |
|---|
| 378 | goto label_done; |
|---|
| 379 | } |
|---|
| 380 | |
|---|
| 381 | if (bCheckNtscAlso && AppScan_GetAnalogLockStatus()) |
|---|
| 382 | { |
|---|
| 383 | mod = eDHL_DEMOD_NTSC; |
|---|
| 384 | *piModIdxStart = mod_idx; |
|---|
| 385 | goto label_done; |
|---|
| 386 | } |
|---|
| 387 | |
|---|
| 388 | if (fnCheck && fnCheck()) |
|---|
| 389 | return statusCancelled; |
|---|
| 390 | |
|---|
| 391 | if (DHL_OS_GetMsCount() - msStart > timeout) |
|---|
| 392 | break; |
|---|
| 393 | |
|---|
| 394 | DHL_OS_Delay(50); // ±â´Ù·È´Ù°¡ ´Ù½Ã ½Ãµµ.. |
|---|
| 395 | |
|---|
| 396 | } |
|---|
| 397 | |
|---|
| 398 | mod_idx = (mod_idx + 1) % nDemod; // ´ÙÀ½ modulation ¹æ½ÄÀ¸·Î retry.. |
|---|
| 399 | } |
|---|
| 400 | |
|---|
| 401 | return statusNotFound; |
|---|
| 402 | |
|---|
| 403 | label_done: |
|---|
| 404 | |
|---|
| 405 | if (pModType) |
|---|
| 406 | *pModType = mod; |
|---|
| 407 | |
|---|
| 408 | dprint(0, "\t signal locked with demod[%d] %d, '%s', %d ms\n", |
|---|
| 409 | mod_idx, mod, ServiceTypeString(mod), |
|---|
| 410 | DHL_OS_GetMsCount()-msStart); |
|---|
| 411 | |
|---|
| 412 | return statusOK; |
|---|
| 413 | } |
|---|
| 414 | |
|---|
| 415 | |
|---|
| 416 | #if 0 |
|---|
| 417 | static DemodDescriptor s_AirDemodDesc[N_AIR_DEMOD] = |
|---|
| 418 | { |
|---|
| 419 | {"8VSB", eDHL_DEMOD_8VSB, 1400,} |
|---|
| 420 | // cafrii 060711, 500->800 |
|---|
| 421 | // PR DS031 ½ÅÈ£¸¦ Á¾Á¾ ¸øÀâ´Â °æ¿ì ¹ß»ýÀ» ÃÖ¼ÒÈÇϱâ À§ÇÑ Á¶Ä¡. |
|---|
| 422 | // cafrii 070713, 800->1100 |
|---|
| 423 | // ÀϺΠ½ºÆ®¸²¿¡¼´Â ä³ÎÀ» ¸ø Àâ´Â ¹®Á¦ ¹ß»ýÇÑ´Ù°í ÇØ¼ Áõ°¡. |
|---|
| 424 | // cafrii 081023, 1100->1400 |
|---|
| 425 | // CB3¿¡¼ broadcom chipÀº vsb lock ½Ã°£ÀÌ ´õ °É¸°´Ù. |
|---|
| 426 | // 1400ms´Â ref sw¿¡¼ »ç¿ëÇÏ´Â °ªÀÌ´Ù. |
|---|
| 427 | }; |
|---|
| 428 | #endif |
|---|
| 429 | |
|---|
| 430 | |
|---|
| 431 | void AppScan_SetTunerAir(ScanTunerSetCbParam *csdp) |
|---|
| 432 | { |
|---|
| 433 | UINT32 freq; |
|---|
| 434 | tDHL_Demod mode; |
|---|
| 435 | STATUS status; |
|---|
| 436 | int mod_idx = 0; // ¾îÂ¥ÇÇ 0¹ø VSB Çϳª¹Û¿¡ ¾ø°í 0¹øºÎÅÍ °Ë»ö ½ÃÀÛ. |
|---|
| 437 | |
|---|
| 438 | AppScanContext *ctx = &g_AppScanContext; |
|---|
| 439 | |
|---|
| 440 | if (csdp == NULL) { |
|---|
| 441 | dprint(0, "!! critical context param NULL\n"); |
|---|
| 442 | csdp->return_value = statusInvalidArgument; |
|---|
| 443 | return; |
|---|
| 444 | } |
|---|
| 445 | |
|---|
| 446 | // quick scanÀÇ °æ¿ì scan start callback µîÀÌ ºÒ¸®Áö ¾Ê´Â´Ù. |
|---|
| 447 | // µû¶ó¼ demod tableÀ» ¹Ù·Î Áö±Ý »ý¼ºÇÑ´Ù. |
|---|
| 448 | if (csdp->one_channel_scan) |
|---|
| 449 | AppScan_GenerateDemodTable(ctx, FALSE); |
|---|
| 450 | |
|---|
| 451 | freq = FindCenterFrequency(csdp->channel, 0, eDHL_FREQ_AIR); |
|---|
| 452 | |
|---|
| 453 | status = AppScan_CheckSignalLock(freq/1000, csdp->chkfn, |
|---|
| 454 | ctx->demod, ctx->n_demod, &mod_idx, &mode); |
|---|
| 455 | // mode´Â tuning ÈÄ¿¡ ½ÇÁ¦·Î ¾ò¾îÁø modulation. |
|---|
| 456 | |
|---|
| 457 | if (status == statusCancelled) { |
|---|
| 458 | csdp->return_value = statusCancelled; |
|---|
| 459 | return; |
|---|
| 460 | } |
|---|
| 461 | |
|---|
| 462 | if (status == statusNotFound) { |
|---|
| 463 | csdp->locked = FALSE; |
|---|
| 464 | csdp->return_value = statusOK; |
|---|
| 465 | return; |
|---|
| 466 | } |
|---|
| 467 | |
|---|
| 468 | if (mode == eDHL_DEMOD_NTSC) { |
|---|
| 469 | csdp->locked = FALSE; |
|---|
| 470 | csdp->return_value = statusOK; |
|---|
| 471 | return; |
|---|
| 472 | } |
|---|
| 473 | |
|---|
| 474 | //if locked, and strength is zero, wait. |
|---|
| 475 | { |
|---|
| 476 | #define STRENGTH_WAIT_SEC 3 |
|---|
| 477 | UINT32 ms_start=DHL_OS_GetMsCount(); |
|---|
| 478 | |
|---|
| 479 | while(DHL_OS_GetMsCount()-ms_start<STRENGTH_WAIT_SEC*1000) |
|---|
| 480 | { |
|---|
| 481 | if(DMW_HAL_GetSignalStrength()>0) break; |
|---|
| 482 | DHL_OS_Delay(10); |
|---|
| 483 | } |
|---|
| 484 | } |
|---|
| 485 | |
|---|
| 486 | csdp->locked = TRUE; |
|---|
| 487 | csdp->mode = DMW_HAL_TunerDemod2Modulation(mode); |
|---|
| 488 | csdp->strength = DMW_HAL_GetSignalStrength(); |
|---|
| 489 | csdp->freq_offset = 0; |
|---|
| 490 | csdp->return_value = statusOK; |
|---|
| 491 | } |
|---|
| 492 | |
|---|
| 493 | |
|---|
| 494 | //---------------------------------------------------------------- |
|---|
| 495 | // Cable |
|---|
| 496 | // |
|---|
| 497 | |
|---|
| 498 | |
|---|
| 499 | |
|---|
| 500 | |
|---|
| 501 | void AppScan_SetTunerCable(ScanTunerSetCbParam *csdp) |
|---|
| 502 | { |
|---|
| 503 | UINT32 freq_STD, freq_HRC, freq_IRC; // °¢ system ¿¡¼ÀÇ center frequency |
|---|
| 504 | BOOL bSTD_IRC_Dominant = FALSE, bHRC_Dominant = FALSE; |
|---|
| 505 | // ÁøÇà Áß¿¡ ÇÑ ±×·ìÀÌ Dominant ÇØÁö¸é ÇØ´ç flag°¡ TRUE°¡ µÈ´Ù. |
|---|
| 506 | // ±× ÀÌÈÄ¿¡´Â dominant ÇÑ ¸ðµå·Î¸¸ Æ©´×À» ½ÃµµÇÑ´Ù. |
|---|
| 507 | |
|---|
| 508 | BOOL bChannel_5_6; |
|---|
| 509 | tDHL_Demod mode; |
|---|
| 510 | STATUS status; |
|---|
| 511 | |
|---|
| 512 | AppScanContext *ctx = &g_AppScanContext; |
|---|
| 513 | |
|---|
| 514 | // cafrii 060828 add |
|---|
| 515 | // ¾Æ·¡´Â ¿¹Àü¿¡´Â macro ¶Ç´Â global º¯¼ö¿´´Âµ¥, |
|---|
| 516 | // local º¯¼ö·Î º¯°æÇÔ. |
|---|
| 517 | int N_CABLE_DEMOD; |
|---|
| 518 | DemodDescriptor *CableDemodDesc; |
|---|
| 519 | |
|---|
| 520 | if (csdp == NULL) { |
|---|
| 521 | dprint(0, "!! critical context param NULL\n"); |
|---|
| 522 | csdp->return_value = statusInvalidArgument; |
|---|
| 523 | return; |
|---|
| 524 | } |
|---|
| 525 | |
|---|
| 526 | // quick scanÀÇ °æ¿ì scan start callback µîÀÌ ºÒ¸®Áö ¾Ê´Â´Ù. |
|---|
| 527 | // µû¶ó¼ demod tableÀ» ¹Ù·Î Áö±Ý »ý¼ºÇÑ´Ù. |
|---|
| 528 | if (csdp->one_channel_scan) |
|---|
| 529 | AppScan_GenerateDemodTable(ctx, TRUE); |
|---|
| 530 | |
|---|
| 531 | csdp->locked = FALSE; |
|---|
| 532 | csdp->freq_offset = 0; |
|---|
| 533 | |
|---|
| 534 | if (ctx->score_std >= ctx->score_hrc + CS_DETECT_THRESHOLD) |
|---|
| 535 | bSTD_IRC_Dominant = TRUE; |
|---|
| 536 | else if (ctx->score_hrc >= ctx->score_std + CS_DETECT_THRESHOLD) |
|---|
| 537 | bHRC_Dominant = TRUE; |
|---|
| 538 | |
|---|
| 539 | freq_STD = FindCenterFrequency(csdp->channel, 0, eDHL_FREQ_STD); |
|---|
| 540 | freq_HRC = FindCenterFrequency(csdp->channel, 0, eDHL_FREQ_HRC); |
|---|
| 541 | freq_IRC = FindCenterFrequency(csdp->channel, 0, eDHL_FREQ_IRC); |
|---|
| 542 | |
|---|
| 543 | // ÇÊ¿äÇÑ ÃʱâÈ ¼öÇà.. |
|---|
| 544 | |
|---|
| 545 | if (csdp->channel == 5 || csdp->channel == 6) |
|---|
| 546 | bChannel_5_6 = TRUE; |
|---|
| 547 | else |
|---|
| 548 | bChannel_5_6 = FALSE; |
|---|
| 549 | |
|---|
| 550 | #if 1 |
|---|
| 551 | N_CABLE_DEMOD = ctx->n_demod; |
|---|
| 552 | CableDemodDesc = ctx->demod; |
|---|
| 553 | #else |
|---|
| 554 | if (1) { |
|---|
| 555 | // lockÀÌ µÈ »óÅ¿¡¼ °¡Á®¿Í¾ß ¾ÈÀüÇÔ.. ¾ðÁ¦ º¯°æµÉ Áö ¸ð¸£¹Ç·Î. |
|---|
| 556 | UINT32 mask; |
|---|
| 557 | mask = OS_LockTask(); |
|---|
| 558 | N_CABLE_DEMOD = N_CABLE_DEMOD_EX; |
|---|
| 559 | CableDemodDesc = s_CableDemodDesc_EX; |
|---|
| 560 | OS_UnlockTask(mask); |
|---|
| 561 | } |
|---|
| 562 | #endif |
|---|
| 563 | |
|---|
| 564 | //------------------------ |
|---|
| 565 | // STD |
|---|
| 566 | |
|---|
| 567 | if (!bHRC_Dominant) |
|---|
| 568 | { |
|---|
| 569 | dprint(0, "\t$$ try Cable %s..\n", bChannel_5_6 ? "STD" : "STD/IRC"); |
|---|
| 570 | |
|---|
| 571 | status = AppScan_CheckSignalLock(freq_STD/1000, csdp->chkfn, |
|---|
| 572 | CableDemodDesc, N_CABLE_DEMOD, |
|---|
| 573 | &(ctx->last_successful_mod), &mode); |
|---|
| 574 | |
|---|
| 575 | if (status == statusCancelled) goto label_cancelled; |
|---|
| 576 | |
|---|
| 577 | if (mode == eDHL_DEMOD_NTSC) { |
|---|
| 578 | ctx->score_std++; // Cable system ¼±Åÿ¡´Â µµ¿òÀÌ µÇµµ·Ï.. |
|---|
| 579 | csdp->locked = FALSE; |
|---|
| 580 | goto label_end; |
|---|
| 581 | } |
|---|
| 582 | |
|---|
| 583 | if (status == statusOK) { |
|---|
| 584 | ctx->score_std++; |
|---|
| 585 | csdp->freq_offset = 0; // freq_STD - freq_STD; |
|---|
| 586 | csdp->locked = TRUE; |
|---|
| 587 | csdp->mode = DMW_HAL_TunerDemod2Modulation(mode); |
|---|
| 588 | goto label_end; |
|---|
| 589 | } |
|---|
| 590 | |
|---|
| 591 | //------------------------ |
|---|
| 592 | // IRC |
|---|
| 593 | |
|---|
| 594 | // 5¹ø 6¹ø ä³ÎÀ» Á¦¿ÜÇÑ ´Ù¸¥ ä³Î¿¡¼´Â STD¿Í IRC´Â ±¸ºÐÀÌ µÇÁö ¾Ê´Â´Ù. |
|---|
| 595 | // 5, 6¹ø ¿¡¼¸¸ µû·Î IRC¸¦ üũÇÑ´Ù. |
|---|
| 596 | // |
|---|
| 597 | if (bChannel_5_6) |
|---|
| 598 | { |
|---|
| 599 | dprint(0, "\t$$ try Cable IRC..\n"); |
|---|
| 600 | status = AppScan_CheckSignalLock(freq_IRC/1000, csdp->chkfn, |
|---|
| 601 | CableDemodDesc, N_CABLE_DEMOD, |
|---|
| 602 | &(ctx->last_successful_mod), &mode); |
|---|
| 603 | |
|---|
| 604 | if (status == statusCancelled) goto label_cancelled; |
|---|
| 605 | |
|---|
| 606 | if (mode == eDHL_DEMOD_NTSC) { |
|---|
| 607 | ctx->score_irc++; |
|---|
| 608 | csdp->locked = FALSE; |
|---|
| 609 | goto label_end; |
|---|
| 610 | } |
|---|
| 611 | |
|---|
| 612 | if (status == statusOK) { |
|---|
| 613 | ctx->score_irc++; |
|---|
| 614 | csdp->freq_offset = freq_IRC - freq_STD; |
|---|
| 615 | csdp->locked = TRUE; |
|---|
| 616 | csdp->mode = DMW_HAL_TunerDemod2Modulation(mode); |
|---|
| 617 | goto label_end; |
|---|
| 618 | } |
|---|
| 619 | } |
|---|
| 620 | } |
|---|
| 621 | |
|---|
| 622 | //------------------------ |
|---|
| 623 | // HRC |
|---|
| 624 | |
|---|
| 625 | if (!bSTD_IRC_Dominant) |
|---|
| 626 | { |
|---|
| 627 | dprint(0, "\t$$ try Cable HRC..\n"); |
|---|
| 628 | status = AppScan_CheckSignalLock(freq_HRC/1000, csdp->chkfn, |
|---|
| 629 | CableDemodDesc, N_CABLE_DEMOD, |
|---|
| 630 | &(ctx->last_successful_mod), &mode); |
|---|
| 631 | |
|---|
| 632 | if (status == statusCancelled) goto label_cancelled; |
|---|
| 633 | |
|---|
| 634 | if (mode == eDHL_DEMOD_NTSC) { |
|---|
| 635 | ctx->score_hrc++; |
|---|
| 636 | csdp->locked = FALSE; |
|---|
| 637 | goto label_end; |
|---|
| 638 | } |
|---|
| 639 | |
|---|
| 640 | if (status == statusOK) { |
|---|
| 641 | ctx->score_hrc++; |
|---|
| 642 | csdp->freq_offset = freq_HRC - freq_STD; |
|---|
| 643 | csdp->locked = TRUE; |
|---|
| 644 | csdp->mode = DMW_HAL_TunerDemod2Modulation(mode); |
|---|
| 645 | goto label_end; |
|---|
| 646 | } |
|---|
| 647 | } |
|---|
| 648 | |
|---|
| 649 | |
|---|
| 650 | label_end: |
|---|
| 651 | |
|---|
| 652 | dprint(0, "\t$$ lock %d, current score: STD %d, HRC %d, IRC %d\n", |
|---|
| 653 | csdp->locked, ctx->score_std, ctx->score_hrc, ctx->score_irc); |
|---|
| 654 | |
|---|
| 655 | // ¾î´À Çϳª°¡ ¿ì¼¼ÇØ Áö´Â ÃÖÃÊÀÇ ¼ø°£¿¡ ¸Þ½ÃÁö¸¦ Ç¥½Ã. |
|---|
| 656 | // ÀÌÁ¦ºÎÅʹ ƯÁ¤ system¸¸ °Ë»öÀ» ¼öÇàÇÒ °ÍÀÌ´Ù. |
|---|
| 657 | // |
|---|
| 658 | if (ctx->score_std == ctx->score_hrc + CS_DETECT_THRESHOLD) |
|---|
| 659 | dprint(0, "\t#### STD/IRC is now dominant ####\n"); |
|---|
| 660 | |
|---|
| 661 | else if (ctx->score_hrc == ctx->score_std + CS_DETECT_THRESHOLD) |
|---|
| 662 | dprint(0, "\t#### HRC is now dominant ####\n"); |
|---|
| 663 | |
|---|
| 664 | if (csdp->locked) { |
|---|
| 665 | //if locked, and strength is zero, wait. |
|---|
| 666 | #define STRENGTH_WAIT_SEC 3 |
|---|
| 667 | UINT32 ms_start=DHL_OS_GetMsCount(); |
|---|
| 668 | |
|---|
| 669 | while(DHL_OS_GetMsCount()-ms_start<STRENGTH_WAIT_SEC*1000) |
|---|
| 670 | { |
|---|
| 671 | if(DMW_HAL_GetSignalStrength()>0) break; |
|---|
| 672 | DHL_OS_Delay(10); |
|---|
| 673 | } |
|---|
| 674 | |
|---|
| 675 | csdp->strength = DMW_HAL_GetSignalStrength(); |
|---|
| 676 | } |
|---|
| 677 | |
|---|
| 678 | csdp->return_value = statusOK; |
|---|
| 679 | return; |
|---|
| 680 | |
|---|
| 681 | label_cancelled: |
|---|
| 682 | csdp->return_value = statusCancelled; |
|---|
| 683 | return; |
|---|
| 684 | } |
|---|
| 685 | |
|---|
| 686 | |
|---|
| 687 | void AppScan_ScanStart(ScanStartedCbParam *param) |
|---|
| 688 | { |
|---|
| 689 | AppScanContext *ctx = &g_AppScanContext; |
|---|
| 690 | |
|---|
| 691 | dprint(2, "\t[SCB] scan start\n"); |
|---|
| 692 | |
|---|
| 693 | memset(ctx, 0, sizeof(AppScanContext)); |
|---|
| 694 | |
|---|
| 695 | if ((param->flag & CBTF_ChannelTypeMask) == CBTF_Air) { |
|---|
| 696 | // nothing to do.. |
|---|
| 697 | } |
|---|
| 698 | else { |
|---|
| 699 | dprint(0, "\t[SCB] set to STD..\n"); |
|---|
| 700 | DMW_HAL_SetChannelStandard(eDHL_FREQ_STD); |
|---|
| 701 | } |
|---|
| 702 | |
|---|
| 703 | // scan óÀ½ ½ÃÀÛÇÒ ¶§, FE ¿¡¼ Áö¿øÇÏ´Â ±â´ÉÀ» ¹ÙÅÁÀ¸·Î demod tableÀ» ÀÛ¼ºÇÑ´Ù. |
|---|
| 704 | // |
|---|
| 705 | AppScan_GenerateDemodTable(ctx, param->flag & CBTF_Cable ? 1 : 0); |
|---|
| 706 | } |
|---|
| 707 | |
|---|
| 708 | |
|---|
| 709 | void AppScan_ScanEnd(ScanCompleteCbParam *param) |
|---|
| 710 | { |
|---|
| 711 | AppScanContext *ctx = &g_AppScanContext; |
|---|
| 712 | |
|---|
| 713 | dprint(0, "\t[SCB] autoscan end\n"); |
|---|
| 714 | |
|---|
| 715 | if ((param->flag & CBTF_ChannelTypeMask) == CBTF_Air) |
|---|
| 716 | return; |
|---|
| 717 | |
|---|
| 718 | dprint(0, "\t std %d, irc %d, hrc %d\n", |
|---|
| 719 | ctx->score_std, ctx->score_irc, ctx->score_hrc); |
|---|
| 720 | |
|---|
| 721 | if (ctx->score_hrc > (ctx->score_std + ctx->score_irc)) |
|---|
| 722 | { |
|---|
| 723 | dprint(0, "\t --> CableSystem is HRC\n"); |
|---|
| 724 | } |
|---|
| 725 | else if (ctx->score_irc > 0) |
|---|
| 726 | { |
|---|
| 727 | // irc´Â 5,6¹ø¿¡¼¸¸ countµÇ´Âµ¥, irc°¡ Çϳª ÀÌ»ó Á¸ÀçÇϸé ÀÌ systemÀº irc·Î ºÁµµ µÈ´Ù. |
|---|
| 728 | // |
|---|
| 729 | dprint(0, "\t --> CableSystem is IRC\n"); |
|---|
| 730 | } |
|---|
| 731 | else |
|---|
| 732 | { |
|---|
| 733 | dprint(0, "\t --> CableSystem is STD\n"); |
|---|
| 734 | } |
|---|
| 735 | } |
|---|
| 736 | |
|---|
| 737 | |
|---|
| 738 | // Scan event procÀÇ ¸ðµç callbackµéÀÇ naming ±ÔÄ¢À» ÅëÀÏ ½Ã۱â À§ÇØ |
|---|
| 739 | // API¿Í ºÐ¸®ÇÑ´Ù. |
|---|
| 740 | // |
|---|
| 741 | //old: void App_Autoscan_TunerSet(ScanTunerSetCbParam *param) |
|---|
| 742 | void AppScan_TunerSet(ScanTunerSetCbParam *param) |
|---|
| 743 | { |
|---|
| 744 | dprint(0, "\t[SCB] tuner set rf %d\n", param->channel); |
|---|
| 745 | |
|---|
| 746 | if ((param->flag & CBTF_ChannelTypeMask) == CBTF_Air) |
|---|
| 747 | AppScan_SetTunerAir(param); |
|---|
| 748 | else |
|---|
| 749 | AppScan_SetTunerCable(param); |
|---|
| 750 | |
|---|
| 751 | // ¿©±â¼´Â Á÷Á¢ DHLÀ» ºÎ¸£¹Ç·Î DMW HAL ¿¡¼ÀÇ ÃÖÁ¾ RF Æ©´× »óÅ Á¤º¸¿Í sync°¡ ¾È¸Â°Ô µÊ. |
|---|
| 752 | DMW_HAL_ResetLastRF(); |
|---|
| 753 | } |
|---|
| 754 | |
|---|
| 755 | |
|---|
| 756 | void AppScan_UpdateResolutionInfo(UCM_DB_T *m) |
|---|
| 757 | { |
|---|
| 758 | //sequence Á¤º¸¸¦ ¾ò¾î¾ß ÇÔ |
|---|
| 759 | do { |
|---|
| 760 | #define MAX_SEQ_WAIT 5000 // ÃÖ´ë 5Ãʸ¦ ±â´Ù¸² |
|---|
| 761 | |
|---|
| 762 | tDHL_VideoSeqHdr seq; |
|---|
| 763 | tDHL_DispFormat disp=eDHL_DISP_720x480i; |
|---|
| 764 | UINT32 ms_start; |
|---|
| 765 | |
|---|
| 766 | if(m->Video_pid==0) break; |
|---|
| 767 | |
|---|
| 768 | DHL_AV_VideoHide(0, TRUE); |
|---|
| 769 | DMC_RegisterVideoCallback(FALSE); |
|---|
| 770 | DHL_AV_VideoStart(0, m->Video_pid, m->Pcr_pid, m->Video_type); |
|---|
| 771 | |
|---|
| 772 | for(ms_start=DHL_OS_GetMsCount(); |
|---|
| 773 | DHL_AV_VideoSeqInfo(0, &seq)!=DHL_OK && DHL_OS_GetMsCount()-ms_start < MAX_SEQ_WAIT; |
|---|
| 774 | DHL_OS_Delay(100)); |
|---|
| 775 | |
|---|
| 776 | if(DHL_OS_GetMsCount()-ms_start >=MAX_SEQ_WAIT) { //timeout |
|---|
| 777 | ; |
|---|
| 778 | } |
|---|
| 779 | else { |
|---|
| 780 | if(seq.vertical_size>=1080) disp=eDHL_DISP_1920x1080i; |
|---|
| 781 | else if(seq.vertical_size>=720) disp=eDHL_DISP_1280x720p; |
|---|
| 782 | else disp=eDHL_DISP_720x480i; |
|---|
| 783 | } |
|---|
| 784 | |
|---|
| 785 | DHL_AV_VideoStop(0); |
|---|
| 786 | DMC_RegisterVideoCallback(TRUE); |
|---|
| 787 | |
|---|
| 788 | m->video_format=disp; |
|---|
| 789 | } while(0); |
|---|
| 790 | } |
|---|
| 791 | |
|---|
| 792 | |
|---|
| 793 | #if COMMENT |
|---|
| 794 | ____API____(){} |
|---|
| 795 | #endif |
|---|
| 796 | |
|---|
| 797 | BOOL s_bAutoScanOnGoing; |
|---|
| 798 | // autoscan ÀÌ ½ÃÀ۵Ǹé TRUE. ¿ÏÀü Á¾·áµÇ¸é FALSE. |
|---|
| 799 | // callback¿¡¼ ÀÌ º¯¼ö¸¦ °ü¸®ÇÑ´Ù. |
|---|
| 800 | static int s_scan_progress_percent; |
|---|
| 801 | |
|---|
| 802 | // cafrii 070712 |
|---|
| 803 | // Draw_AutoScan_Bar µîÀÇ ÇÔ¼ö ¼±¾ðµé ¸ðµÎ OSD_API ·Î À̵¿. |
|---|
| 804 | // |
|---|
| 805 | |
|---|
| 806 | |
|---|
| 807 | static BOOL p_stt_check() |
|---|
| 808 | { |
|---|
| 809 | return FALSE; //»ç¿ëÀÚÀÇ Å° Á¶ÀÛÀÌ ´À·ÁÁú ¼ö ÀÖÀ»±î? |
|---|
| 810 | } |
|---|
| 811 | |
|---|
| 812 | |
|---|
| 813 | // AppAutoScanEventProc |
|---|
| 814 | // |
|---|
| 815 | // Autoscan callbackÀ¸·Î µî·ÏµÇ´Â ÇÔ¼ö. |
|---|
| 816 | // scan °úÁ¤¿¡¼ °¢Á¾ À¯¿ëÇÑ Á¤º¸°¡ ÀÌ callbackÀ» ÅëÇØ Àü´ÞµÈ´Ù. |
|---|
| 817 | // |
|---|
| 818 | STATUS _AppAutoScanEventProc(ChannelScanEventType evt, UINT32 evparam) |
|---|
| 819 | { |
|---|
| 820 | static int sNumNewChannelInThisRf = 0; // ÇöÀç rf¿¡¼ °Ë»öµÈ subchannel °¹¼ö. |
|---|
| 821 | |
|---|
| 822 | if (s_bAutoScanOnGoing == FALSE && evt != evtScanStarted) |
|---|
| 823 | { |
|---|
| 824 | // ÀÌ¹Ì Á¾·áµÈ »óÅ¿¡¼ ¿Â À̺¥Æ®? À߸øµÈ °æ¿ìÀÓ. |
|---|
| 825 | dprint(0, "!! AutoscanEvent comes in Stopped State.. ignored\n"); |
|---|
| 826 | return statusError; |
|---|
| 827 | } |
|---|
| 828 | |
|---|
| 829 | if (evt == evtScanStarted) |
|---|
| 830 | { |
|---|
| 831 | ScanStartedCbParam *param = (ScanStartedCbParam *)evparam; |
|---|
| 832 | |
|---|
| 833 | dprint(0, "\t$$ ScanTask : TaskStarted \n"); |
|---|
| 834 | |
|---|
| 835 | s_bAutoScanOnGoing = TRUE; // ÀÌÁ¦ autoscan ½ÃÀÛ µÈ °ÍÀ¸·Î ÆÇ´Ü.. |
|---|
| 836 | sNumNewChannelInThisRf = 0; |
|---|
| 837 | |
|---|
| 838 | AppScan_ScanStart(param); |
|---|
| 839 | } |
|---|
| 840 | else if (evt == evtScanTunerSet) |
|---|
| 841 | { |
|---|
| 842 | ScanTunerSetCbParam *param = (ScanTunerSetCbParam *)evparam; |
|---|
| 843 | |
|---|
| 844 | AppScan_TunerSet(param); |
|---|
| 845 | } |
|---|
| 846 | else if (evt == evtOnProgress) |
|---|
| 847 | { |
|---|
| 848 | ScanProgressCbParam *param = (ScanProgressCbParam *)evparam; |
|---|
| 849 | // ÁøÇà »óȲ Á¤µµ |
|---|
| 850 | int percentage = (param->channel_idx+1) * 100 / param->total_channel; |
|---|
| 851 | |
|---|
| 852 | if (param->after_scan == 0) { |
|---|
| 853 | dprint(0, "\t$$ rf %d, %d percent progress..\n", param->current_rf, percentage); |
|---|
| 854 | } |
|---|
| 855 | else { |
|---|
| 856 | if (sNumNewChannelInThisRf == 0) |
|---|
| 857 | dprint(0, "\t$$ no channel info in rf %d\n", param->current_rf); |
|---|
| 858 | |
|---|
| 859 | // App_Proc_Scan¿¡ ÇöÀç ÁøÇà ÁßÀÎ RF & percentage ¼öÄ¡¸¦ Àü´Þ |
|---|
| 860 | DMG_SetUserDefined(UD_ID_SCAN_PROGRESS, DMG_MAKEWORD(param->current_rf, percentage), 0); |
|---|
| 861 | |
|---|
| 862 | sNumNewChannelInThisRf = 0; |
|---|
| 863 | |
|---|
| 864 | |
|---|
| 865 | } |
|---|
| 866 | |
|---|
| 867 | s_scan_progress_percent=percentage; |
|---|
| 868 | } |
|---|
| 869 | else if (evt == evtNewChannel) |
|---|
| 870 | { |
|---|
| 871 | // »õ·Î¿î ä³ÎÀÌ °Ë»öµÇ¾ú´Ù. ÀÌ Ã¤³ÎÀº Minor ´ÜÀ§ÀÌ´Ù. |
|---|
| 872 | // |
|---|
| 873 | ScanNewChannelCbParam *p_param = (ScanNewChannelCbParam *)evparam; |
|---|
| 874 | UCM_DB_T *ucm = (UCM_DB_T *)(p_param->ucm); |
|---|
| 875 | // cafrii 081104 bugfix. we should use p_param->ucm. |
|---|
| 876 | // we assume ucm is non-NULL and valid. |
|---|
| 877 | |
|---|
| 878 | if (ucm) |
|---|
| 879 | { |
|---|
| 880 | AppScan_UpdateResolutionInfo(ucm); |
|---|
| 881 | |
|---|
| 882 | dprint(0, "\t$$ New channel RF %d, %d-%d, (res:%x) %s %s\n", |
|---|
| 883 | ucm->RF, |
|---|
| 884 | ucm->Major, |
|---|
| 885 | ucm->Minor, |
|---|
| 886 | ucm->video_format, |
|---|
| 887 | ServiceTypeString(ucm->Service_type), ucm->scrambled ? "scrambled" : ""); |
|---|
| 888 | |
|---|
| 889 | sNumNewChannelInThisRf++; |
|---|
| 890 | |
|---|
| 891 | DMG_SetUserDefined(UD_ID_SCAN_UPDATE_CH, DMG_MAKEWORD(sNumNewChannelInThisRf, ucm->RF), |
|---|
| 892 | DMG_MAKEWORD(ucm->Major, ucm->Minor)); |
|---|
| 893 | |
|---|
| 894 | if(b_stt_gathering) { |
|---|
| 895 | if(!b_stt_set) { |
|---|
| 896 | STATUS status; |
|---|
| 897 | tDHL_TSD *tsd = DHL_DMX_GetTsd(); |
|---|
| 898 | sttSectionPtr_t stt=NULL; |
|---|
| 899 | status = Dmc_GetSttSection(tsd, &stt, 1200, NULL); |
|---|
| 900 | |
|---|
| 901 | if(status==statusOK && stt) { |
|---|
| 902 | if(App_SetTimebySTTAtSetupWizard()==0) |
|---|
| 903 | b_stt_set=TRUE; |
|---|
| 904 | } |
|---|
| 905 | } |
|---|
| 906 | } |
|---|
| 907 | } |
|---|
| 908 | |
|---|
| 909 | /* 2010.03.25 foxhunt |
|---|
| 910 | * Shell or MenuÀÇ autoscanÀ» ÅëÇØ new channelÀ» ¹ß°ßÇßÀ» ¶§, guide¸¦ ¾ø¾ÖÁØ´Ù. */ |
|---|
| 911 | DMG_SetUserDefined(UD_ID_NO_CH_GUIDE, 0, 0); |
|---|
| 912 | } |
|---|
| 913 | else if (evt == evtScanComplete) // Á¤»ó Á¾·á ¶Ç´Â Cancel Á¾·á. |
|---|
| 914 | { |
|---|
| 915 | ScanCompleteCbParam *param = (ScanCompleteCbParam *)evparam; |
|---|
| 916 | AudioDecodeStopParam adsp; |
|---|
| 917 | |
|---|
| 918 | AppScan_ScanEnd(param); |
|---|
| 919 | |
|---|
| 920 | // autoscan Áß¿¡ audio selection µÈ °á°úµéÀÌ ½ÇÁ¦ Æ©´×¿¡ ¿µÇâÀ» |
|---|
| 921 | // ¹ÌÄ¡Áö ¾Êµµ·Ï Çϱâ À§ÇØ. |
|---|
| 922 | memset(&adsp, 0, sizeof(adsp)); |
|---|
| 923 | App_AudioNotifyStop(&adsp); |
|---|
| 924 | |
|---|
| 925 | dprint(0, "\t$$ ScanTask : Task Completed!!! \n\n"); |
|---|
| 926 | |
|---|
| 927 | sNumNewChannelInThisRf = 0; |
|---|
| 928 | |
|---|
| 929 | App_NVM_SaveUcm(); |
|---|
| 930 | App_NVM_PrintUcm(0); // cafrii 060724, print ucm before invalidate pids.. |
|---|
| 931 | |
|---|
| 932 | // cafrii 060630 add |
|---|
| 933 | // autoscan ÈÄ Ã¤³Î º¹±¸ Æ©´×.. |
|---|
| 934 | // gui ¸Þ´º¿¡¼ È£ÃâÇÒ °æ¿ì¿¡´Â menu task¿¡¼ ¸¶¹«¸® ÇÒ ¼ö ÀÖÁö¸¸, |
|---|
| 935 | // shell¿¡¼ ½ÇÇàÇÒ °æ¿ì¿¡´Â ÀÌ task¿¡¼ ¸¶¹«¸® Äڵ带 ºÒ·¯Áà¾ß ÇÑ´Ù. |
|---|
| 936 | // |
|---|
| 937 | // --> cafrii 100315, shell ½ÇÇàÀº ¾îÂ¥ÇÇ test ¿ëµµÀ̹ǷÎ, ä³Î º¹±¸ ÄÚµå´Â ¼öÇàÇÏÁö ¸»ÀÚ. |
|---|
| 938 | |
|---|
| 939 | DMG_SetUserDefined(UD_ID_SCAN_PROGRESS, 0, 1); |
|---|
| 940 | |
|---|
| 941 | s_bAutoScanOnGoing = FALSE; |
|---|
| 942 | |
|---|
| 943 | /* 2010.03.25 foxhunt |
|---|
| 944 | * autoscanÀÇ Á¤»óÁ¾·á or StopÀ» ÅëÇØ ³ª¿ÔÀ» °æ¿ì ucmÀ» üũÇÏ¿© guideÀÇ Á¸¼Ó¿©ºÎ °áÁ¤ */ |
|---|
| 945 | DMG_SetUserDefined(UD_ID_NO_CH_GUIDE, 0, 0); |
|---|
| 946 | |
|---|
| 947 | } |
|---|
| 948 | |
|---|
| 949 | return statusOK; |
|---|
| 950 | } |
|---|
| 951 | |
|---|
| 952 | |
|---|
| 953 | // |
|---|
| 954 | // Autoscan ÀÌ ÁøÇà ÁßÀÎÁö üũÇÏ´Â ÇÔ¼ö. |
|---|
| 955 | // |
|---|
| 956 | BOOL App_Autoscan_CheckAutoscanOnGoing(void) |
|---|
| 957 | { |
|---|
| 958 | return s_bAutoScanOnGoing; |
|---|
| 959 | } |
|---|
| 960 | |
|---|
| 961 | |
|---|
| 962 | void App_Autoscan_ChBackupBeforeScan(void) |
|---|
| 963 | { |
|---|
| 964 | DST_CURCHANNEL ChannelInfo; |
|---|
| 965 | App_Ucm_GetCurChInfo(&ChannelInfo); |
|---|
| 966 | |
|---|
| 967 | if (g_App_LastTuneResult == statusOK) |
|---|
| 968 | { |
|---|
| 969 | // ÇöÀç ½ÃûÁßÀΠä³ÎÀÇ rf, pn °ªÀº ÀÌ¹Ì Æ©´× ´Ü°è¿¡¼ ±â·ÏµÇ¾î ÀÖÀ» °ÍÀÓ. |
|---|
| 970 | //dprint(0, "before autoscan: last rf %d, pn %d\n", |
|---|
| 971 | // ChannelInfo.nRF, ChannelInfo.nProgramNumber); |
|---|
| 972 | // À§ debug Äڵ带 ³ÖÀ¸¸é Á×´Â ¹®Á¦ ÀÖÀ½. ¾ÆÁ÷ ¿øÀÎÀ» ¸ð¸§ |
|---|
| 973 | } |
|---|
| 974 | else |
|---|
| 975 | { |
|---|
| 976 | dprint(0, "before autoscan: current ch invalid (%d)\n", g_App_LastTuneResult); |
|---|
| 977 | |
|---|
| 978 | // ¹«È¿È.. ´ÙÀ½ º¹±¸ ¶§¿¡ ÇöÀç ä³Î »ç¿ëÇÏÁö ¸øÇϵµ·Ï.. |
|---|
| 979 | App_SaveLastChannelInfo(0, 0, 0); |
|---|
| 980 | } |
|---|
| 981 | } |
|---|
| 982 | |
|---|
| 983 | |
|---|
| 984 | /************************************************************************* |
|---|
| 985 | Function : AppScan_GetValidChannelUID |
|---|
| 986 | |
|---|
| 987 | Author : Chan Hun Jeon |
|---|
| 988 | |
|---|
| 989 | Date : 2007.05.22 |
|---|
| 990 | |
|---|
| 991 | Description : |
|---|
| 992 | -non-hidden, non-scrambled, non-skipped µÈ ä³Î Uid ¸®ÅÏ |
|---|
| 993 | -°Ë»öµÈ ä³ÎÀÌ ¾ø´Â °æ¿ì -1 ¸®ÅÏ |
|---|
| 994 | **************************************************************************/ |
|---|
| 995 | int AppScan_GetValidChannelUID(void) |
|---|
| 996 | { |
|---|
| 997 | UINT16 i; |
|---|
| 998 | //UINT16 Uid = -1; // bugbug!! À̰ÍÀº 0xFFFF·Î ÀúÀåµÊ. |
|---|
| 999 | int Uid = -1; |
|---|
| 1000 | |
|---|
| 1001 | DMW_MSC_LockUcm(); |
|---|
| 1002 | |
|---|
| 1003 | // non-hidden, non-scrambled, non-skipped µÈ ä³ÎÀ» ã´Â´Ù. |
|---|
| 1004 | for (i=0 ; g_UCM && i<g_UCM_number ; i++) |
|---|
| 1005 | { |
|---|
| 1006 | if (g_UCM[i].hidden == 0 && |
|---|
| 1007 | g_UCM[i].scrambled == 0 && |
|---|
| 1008 | g_UCM[i].Skipped == 0 ) |
|---|
| 1009 | { |
|---|
| 1010 | Uid = g_UCM[i].Uid; |
|---|
| 1011 | break; |
|---|
| 1012 | } |
|---|
| 1013 | } |
|---|
| 1014 | |
|---|
| 1015 | DMW_MSC_UnlockUcm(); |
|---|
| 1016 | |
|---|
| 1017 | return Uid; |
|---|
| 1018 | |
|---|
| 1019 | } |
|---|
| 1020 | |
|---|
| 1021 | |
|---|
| 1022 | // _AppScan_RecoverChannelHandler |
|---|
| 1023 | // |
|---|
| 1024 | // AutoscanÀÌ Á¾·áµÇ°í Æ©´×À» ÇÏ´Â timer handler |
|---|
| 1025 | // Æ©´×À» ÇÒ rf, uid¸¦ paramÀ¸·Î ³Ñ°ÜÁØ´Ù. |
|---|
| 1026 | // |
|---|
| 1027 | static void _AppScan_RecoverChannelHandler(UINT32 nIDTimer) |
|---|
| 1028 | { |
|---|
| 1029 | int uid; |
|---|
| 1030 | |
|---|
| 1031 | if (nIDTimer != TIMER_ID_TUNE_AFTER_SCAN) |
|---|
| 1032 | return; |
|---|
| 1033 | |
|---|
| 1034 | uid = AppScan_GetValidChannelUID(); |
|---|
| 1035 | |
|---|
| 1036 | if(uid != -1) |
|---|
| 1037 | { |
|---|
| 1038 | // Updated by Chan Hun Jeon 2007.05.22 |
|---|
| 1039 | // UCM¿¡ À¯È¿ÇÑ Ã¤³Î(non-hidden, non-scrambled, non-skiped) ÀÖ´Â °æ¿ì |
|---|
| 1040 | // ÀÓÀÇÀÇ À¯È¿ ä³ÎÀ» Æ©´× |
|---|
| 1041 | App_TuneChannelByUid(uid); |
|---|
| 1042 | } |
|---|
| 1043 | else |
|---|
| 1044 | { |
|---|
| 1045 | // À¯È¿ÇÑ Ã¤³ÎÀÌ ¾ø´Ù¸é ¸¶Áö¸· Æ©´× ä³Î·Î º¹¿ø |
|---|
| 1046 | App_ChTuneRecoverLastChannel(); |
|---|
| 1047 | } |
|---|
| 1048 | } |
|---|
| 1049 | |
|---|
| 1050 | |
|---|
| 1051 | // App_Autoscan_RecoverLastChannel |
|---|
| 1052 | // |
|---|
| 1053 | // autoscan ³¡³ª°í ³ª¼ Æ©´×À» ÇÑ´Ù. |
|---|
| 1054 | // setup wizard ÀÏ ¼öµµ ÀÖÀ½. ÀÌ °æ¿ì´Â APP_CUR_CH Á¤º¸°¡ ¾øÀ» °ÍÀÓ. |
|---|
| 1055 | // ÀÌ ÇÔ¼ö°¡ ºÒ¸®´Â task°¡ ¾î¶² °ÍÀÎÁö À¯³äÇØ¾ß ÇÔ. |
|---|
| 1056 | // |
|---|
| 1057 | void App_Autoscan_RecoverLastChannel(void) |
|---|
| 1058 | { |
|---|
| 1059 | int status; |
|---|
| 1060 | |
|---|
| 1061 | // cafrii 060701 add case called in non-DMC task |
|---|
| 1062 | // |
|---|
| 1063 | if (Dmc_IsDmcTask()) |
|---|
| 1064 | { |
|---|
| 1065 | // dmc task¿¡¼ dmc task·Î command¸¦ º¸³¾ ¼ö ¾øÀ¸¹Ç·Î deferred call ¼öÇà.. |
|---|
| 1066 | // |
|---|
| 1067 | DMW_SYS_KillTimer(TIMER_ID_TUNE_AFTER_SCAN); |
|---|
| 1068 | status = DMW_SYS_SetTimer(TIMER_ID_TUNE_AFTER_SCAN, 0, |
|---|
| 1069 | (DMW_TIMER_PROC)_AppScan_RecoverChannelHandler, 0, TRUE); |
|---|
| 1070 | |
|---|
| 1071 | if (status) |
|---|
| 1072 | dprint(0, "!! cannot auto tune after scan\n"); |
|---|
| 1073 | } |
|---|
| 1074 | else |
|---|
| 1075 | { |
|---|
| 1076 | _AppScan_RecoverChannelHandler(TIMER_ID_TUNE_AFTER_SCAN); |
|---|
| 1077 | } |
|---|
| 1078 | } |
|---|
| 1079 | |
|---|
| 1080 | |
|---|
| 1081 | // |
|---|
| 1082 | // ÅëÀÏµÈ Auto scan ½ÃÀÛ ÇÔ¼ö. |
|---|
| 1083 | // Á÷Á¢ task id Á¤º¸¸¦ Àоî¼, ¸Þ´º¿¡¼ ½ÇÇàµÈ °ÍÀÎÁö ¾Æ´Ï¸é |
|---|
| 1084 | // shell¿¡¼ ½ÇÇàµÈ °ÍÀÎÁö ÆÇ´ÜÇÑ´Ù. |
|---|
| 1085 | // MENU_OSD_TOKENÀ» Ȱ¿ëÇØµµ ¹«¹æÇÒ µí.. |
|---|
| 1086 | // |
|---|
| 1087 | void App_AutoScan_StartScan(int nStart, int nEnd, BOOL bAddOnMode) |
|---|
| 1088 | { |
|---|
| 1089 | STATUS status; |
|---|
| 1090 | int nScanFlags; |
|---|
| 1091 | |
|---|
| 1092 | DHL_AV_VideoHide(0, TRUE); //mute off when ch tuning automatically |
|---|
| 1093 | |
|---|
| 1094 | // autoscan °æ¿ì¿¡´Â Ưº°È÷ ä³Î º¹±¸ ÀÛ¾÷¿¡ ¾à°£ÀÇ º¯µ¿ÀÌ ÀÖ´Ù. |
|---|
| 1095 | // ÇöÀç Á¤»ó ½Ãû »óÅÂÀÏ °æ¿ì autoscan ÈÄ¿¡ Çö ä³ÎÀ» À¯ÁöÇϰí, |
|---|
| 1096 | // ÇöÀç »óŰ¡ Á¤»óÀÌ ¾Æ´Ï¶ó¸é autoscan ÈÄ¿¡ ÀÓÀÇ À¯È¿ ä³ÎÀ» Æ©´×ÇÑ´Ù. |
|---|
| 1097 | |
|---|
| 1098 | App_Autoscan_ChBackupBeforeScan(); // cafrii 060814 |
|---|
| 1099 | |
|---|
| 1100 | // note |
|---|
| 1101 | // setup wizard°¡ ½ÇÇàµÇ´Â °æ¿ì¶ó¸é ÇöÀç ä³Î Á¤º¸´Â invalidÇÒ °ÍÀÓ. |
|---|
| 1102 | |
|---|
| 1103 | App_ChTuneStopTV(); |
|---|
| 1104 | |
|---|
| 1105 | // cafrii 070713 bugfix. |
|---|
| 1106 | // autoscan ÈÄ¿¡´Â prev ch µ¿ÀÛ ¾ÈÇØ¾ß ÇÔ. |
|---|
| 1107 | // ÇöÀç´Â Stop TV ³»ºÎ¿¡ prev ch backup ÇÏ´Â Äڵ尡 ÀÖ¾î¼ ¹®Á¦°¡ µÊ. |
|---|
| 1108 | App_ResetPrevChannelInfo(); |
|---|
| 1109 | |
|---|
| 1110 | // ¾îÂ¥ÇÇ channel banner osd´Â priority¿¡ ÀÇÇØ Áö¿öÁ³Áö¸¸ |
|---|
| 1111 | // ºÒÇÊ¿äÇÑ timer°¡ ³²¾ÆÀÖÀ»Áö ¸ð¸£¹Ç·Î cancel ½ÃŲ´Ù. |
|---|
| 1112 | // ¾ø¾îµµ Ưº°È÷ ¹®Á¦µÇ´Â ÄÚµå´Â ¾Æ´Ô. |
|---|
| 1113 | |
|---|
| 1114 | // TODO: After porting banner |
|---|
| 1115 | //App_CancelChBanner(); // cafrii 060919 add |
|---|
| 1116 | |
|---|
| 1117 | App_EpgDeleteAll(); // ±âÁ¸ÀÇ epg dbµµ ¸ðµÎ Áö¿ì´Â°Ô ¾ÈÀüÇÔ. |
|---|
| 1118 | |
|---|
| 1119 | |
|---|
| 1120 | if (!bAddOnMode)//rescan mode |
|---|
| 1121 | { |
|---|
| 1122 | DMW_CDB_ClearAll(); |
|---|
| 1123 | |
|---|
| 1124 | App_NVM_EraseUcm(); |
|---|
| 1125 | } |
|---|
| 1126 | |
|---|
| 1127 | if (nStart == 0 && nEnd == 0) { // rf number not specified |
|---|
| 1128 | if (g_CurChannelType == ChannelType_Air) { |
|---|
| 1129 | nStart = 2; |
|---|
| 1130 | nEnd = 69; |
|---|
| 1131 | } |
|---|
| 1132 | else { |
|---|
| 1133 | nStart = 1; |
|---|
| 1134 | nEnd = 135; |
|---|
| 1135 | } |
|---|
| 1136 | } |
|---|
| 1137 | |
|---|
| 1138 | if (g_CurChannelType == ChannelType_Air) |
|---|
| 1139 | #if SUPPORT_NEWBY |
|---|
| 1140 | nScanFlags = CBTF_Air | CBTF_8VSB | CBTF_IgnoreNtscInVct | |
|---|
| 1141 | CBTF_ForcePSI; |
|---|
| 1142 | #else |
|---|
| 1143 | nScanFlags = CBTF_Air | CBTF_8VSB | CBTF_IgnoreNtscInVct | |
|---|
| 1144 | CBTF_ForcePSI | |
|---|
| 1145 | CBTF_DontSelectMaxChannel; |
|---|
| 1146 | #endif |
|---|
| 1147 | else { |
|---|
| 1148 | if(App_GetEnableCableQam()) { |
|---|
| 1149 | nScanFlags = CBTF_Cable | CBTF_8VSB | |
|---|
| 1150 | CBTF_IgnoreNtscInVct | |
|---|
| 1151 | CBTF_ForcePSI; |
|---|
| 1152 | } |
|---|
| 1153 | else { |
|---|
| 1154 | nScanFlags = CBTF_Cable | CBTF_8VSB | CBTF_QAM | |
|---|
| 1155 | CBTF_IgnoreNtscInVct | |
|---|
| 1156 | CBTF_ForcePSI | |
|---|
| 1157 | CBTF_DontSelectMaxChannel; |
|---|
| 1158 | } |
|---|
| 1159 | } |
|---|
| 1160 | |
|---|
| 1161 | nScanFlags |= SET_SCAN_POLICY; |
|---|
| 1162 | |
|---|
| 1163 | status = DMW_ASC_StartScan(nScanFlags, _AppAutoScanEventProc, nStart, nEnd); |
|---|
| 1164 | |
|---|
| 1165 | if(status) { |
|---|
| 1166 | dprint(0, "error : DMW_ASC_StartScan(err code : %d\n", status); |
|---|
| 1167 | } |
|---|
| 1168 | |
|---|
| 1169 | while(1) |
|---|
| 1170 | { |
|---|
| 1171 | if (s_bAutoScanOnGoing) //AutoScan ÀÌ ½ÃÀ۵ɶ§±îÁö waitÇÑ´Ù. |
|---|
| 1172 | break; |
|---|
| 1173 | DHL_OS_Delay(100); |
|---|
| 1174 | } |
|---|
| 1175 | |
|---|
| 1176 | return; |
|---|
| 1177 | } |
|---|
| 1178 | |
|---|
| 1179 | |
|---|
| 1180 | /* |
|---|
| 1181 | ½ÅÈ£°¡ ÀâÇô ÀÖ´Â rfµé¸¸ ´Ù½Ã scanÇÑ´Ù. |
|---|
| 1182 | */ |
|---|
| 1183 | void App_AutoScan_RestartScan(BOOL bAddOnMode) |
|---|
| 1184 | { |
|---|
| 1185 | #if 0 //not supported |
|---|
| 1186 | STATUS status; |
|---|
| 1187 | int nScanFlags; |
|---|
| 1188 | int i, idx, start, end; |
|---|
| 1189 | UINT8 rfMap[135]; |
|---|
| 1190 | |
|---|
| 1191 | // autoscan °æ¿ì¿¡´Â Ưº°È÷ ä³Î º¹±¸ ÀÛ¾÷¿¡ ¾à°£ÀÇ º¯µ¿ÀÌ ÀÖ´Ù. |
|---|
| 1192 | // ÇöÀç Á¤»ó ½Ãû »óÅÂÀÏ °æ¿ì autoscan ÈÄ¿¡ Çö ä³ÎÀ» À¯ÁöÇϰí, |
|---|
| 1193 | // ÇöÀç »óŰ¡ Á¤»óÀÌ ¾Æ´Ï¶ó¸é autoscan ÈÄ¿¡ ÀÓÀÇ À¯È¿ ä³ÎÀ» Æ©´×ÇÑ´Ù. |
|---|
| 1194 | |
|---|
| 1195 | App_Autoscan_ChBackupBeforeScan(); // cafrii 060814 |
|---|
| 1196 | |
|---|
| 1197 | // note |
|---|
| 1198 | // setup wizard°¡ ½ÇÇàµÇ´Â °æ¿ì¶ó¸é ÇöÀç ä³Î Á¤º¸´Â invalidÇÒ °ÍÀÓ. |
|---|
| 1199 | |
|---|
| 1200 | App_ChTuneStopTV(); |
|---|
| 1201 | |
|---|
| 1202 | // cafrii 070713 bugfix. |
|---|
| 1203 | // autoscan ÈÄ¿¡´Â prev ch µ¿ÀÛ ¾ÈÇØ¾ß ÇÔ. |
|---|
| 1204 | // ÇöÀç´Â Stop TV ³»ºÎ¿¡ prev ch backup ÇÏ´Â Äڵ尡 ÀÖ¾î¼ ¹®Á¦°¡ µÊ. |
|---|
| 1205 | App_ResetPrevChannelInfo(); |
|---|
| 1206 | |
|---|
| 1207 | // ¾îÂ¥ÇÇ channel banner osd´Â priority¿¡ ÀÇÇØ Áö¿öÁ³Áö¸¸ |
|---|
| 1208 | // ºÒÇÊ¿äÇÑ timer°¡ ³²¾ÆÀÖÀ»Áö ¸ð¸£¹Ç·Î cancel ½ÃŲ´Ù. |
|---|
| 1209 | // ¾ø¾îµµ Ưº°È÷ ¹®Á¦µÇ´Â ÄÚµå´Â ¾Æ´Ô. |
|---|
| 1210 | |
|---|
| 1211 | // TODO: After porting banner |
|---|
| 1212 | //App_CancelChBanner(); // cafrii 060919 add |
|---|
| 1213 | |
|---|
| 1214 | App_EpgDeleteAll(); // ±âÁ¸ÀÇ epg dbµµ ¸ðµÎ Áö¿ì´Â°Ô ¾ÈÀüÇÔ. |
|---|
| 1215 | |
|---|
| 1216 | |
|---|
| 1217 | if (!bAddOnMode)//rescan mode |
|---|
| 1218 | { |
|---|
| 1219 | DMW_CDB_ClearAll(); |
|---|
| 1220 | |
|---|
| 1221 | App_NVM_EraseUcm(); |
|---|
| 1222 | } |
|---|
| 1223 | |
|---|
| 1224 | if(g_CurChannelType == ChannelType_Air) { |
|---|
| 1225 | start=2, end=69; |
|---|
| 1226 | } |
|---|
| 1227 | else { |
|---|
| 1228 | start=1, end=135; |
|---|
| 1229 | } |
|---|
| 1230 | |
|---|
| 1231 | for(i=start, idx=0; i<=end; i++) { |
|---|
| 1232 | if(App_Ucm_FindChannelByRF(i, 1, NULL)!=-1) { |
|---|
| 1233 | rfMap[idx++]=i; |
|---|
| 1234 | } |
|---|
| 1235 | } |
|---|
| 1236 | |
|---|
| 1237 | if (g_CurChannelType == ChannelType_Air) |
|---|
| 1238 | #if SUPPORT_NEWBY |
|---|
| 1239 | nScanFlags = CBTF_Air | CBTF_8VSB | CBTF_IgnoreNtscInVct | |
|---|
| 1240 | CBTF_ForcePSI; |
|---|
| 1241 | #else |
|---|
| 1242 | nScanFlags = CBTF_Air | CBTF_8VSB | CBTF_IgnoreNtscInVct | |
|---|
| 1243 | CBTF_ForcePSI | |
|---|
| 1244 | CBTF_DontSelectMaxChannel; |
|---|
| 1245 | #endif |
|---|
| 1246 | else |
|---|
| 1247 | #if SUPPORT_NEWBY |
|---|
| 1248 | nScanFlags = CBTF_Cable | CBTF_8VSB | |
|---|
| 1249 | CBTF_IgnoreNtscInVct | |
|---|
| 1250 | CBTF_ForcePSI; |
|---|
| 1251 | #else |
|---|
| 1252 | nScanFlags = CBTF_Cable | CBTF_8VSB | CBTF_QAM | |
|---|
| 1253 | CBTF_IgnoreNtscInVct | |
|---|
| 1254 | CBTF_ForcePSI | |
|---|
| 1255 | CBTF_DontSelectMaxChannel; |
|---|
| 1256 | #endif |
|---|
| 1257 | |
|---|
| 1258 | nScanFlags |= SET_SCAN_POLICY; |
|---|
| 1259 | |
|---|
| 1260 | status = DMW_ASC_StartScanEx(nScanFlags, _AppAutoScanEventProc, rfMap, idx); |
|---|
| 1261 | |
|---|
| 1262 | if(status) { |
|---|
| 1263 | dprint(0, "error : DMW_ASC_StartScan(err code : %d\n", status); |
|---|
| 1264 | } |
|---|
| 1265 | |
|---|
| 1266 | while(1) |
|---|
| 1267 | { |
|---|
| 1268 | if (s_bAutoScanOnGoing) //AutoScan ÀÌ ½ÃÀ۵ɶ§±îÁö waitÇÑ´Ù. |
|---|
| 1269 | break; |
|---|
| 1270 | DHL_OS_Delay(100); |
|---|
| 1271 | } |
|---|
| 1272 | |
|---|
| 1273 | return; |
|---|
| 1274 | |
|---|
| 1275 | #endif |
|---|
| 1276 | } |
|---|
| 1277 | |
|---|
| 1278 | |
|---|
| 1279 | |
|---|
| 1280 | |
|---|
| 1281 | |
|---|
| 1282 | void App_AutoScan_TunerSet(ScanTunerSetCbParam *param) |
|---|
| 1283 | { |
|---|
| 1284 | AppScan_TunerSet(param); |
|---|
| 1285 | } |
|---|
| 1286 | |
|---|
| 1287 | |
|---|
| 1288 | int App_Autoscan_GetProgressPercent() |
|---|
| 1289 | { |
|---|
| 1290 | if(!s_bAutoScanOnGoing) return 0; |
|---|
| 1291 | |
|---|
| 1292 | return s_scan_progress_percent; |
|---|
| 1293 | } |
|---|
| 1294 | |
|---|
| 1295 | void App_Autoscan_SetSTTCheck(BOOL bset) |
|---|
| 1296 | { |
|---|
| 1297 | //scan Áß¿¡ STT ¼ö½ÅÀ» üũÇÔ. |
|---|
| 1298 | //°¡Àå ¸ÕÀú °Ë»öµÇ´Â STT¸¦ »ç¿ëÇÔ. |
|---|
| 1299 | b_stt_gathering=bset; |
|---|
| 1300 | b_stt_set=FALSE; |
|---|
| 1301 | } |
|---|
| 1302 | |
|---|
| 1303 | BOOL App_Autoscan_IsSttChecked() |
|---|
| 1304 | { |
|---|
| 1305 | printf("-----stt...(%d)\n", b_stt_set); |
|---|
| 1306 | return b_stt_set; |
|---|
| 1307 | } |
|---|
| 1308 | |
|---|
| 1309 | |
|---|
| 1310 | #if COMMENT |
|---|
| 1311 | ____Symbol____(){} |
|---|
| 1312 | #endif |
|---|
| 1313 | |
|---|
| 1314 | #if NEO_REGISTER_DEBUG_SYMBOL |
|---|
| 1315 | |
|---|
| 1316 | static DHL_SymbolTable _AutoscanSymbolx[] = |
|---|
| 1317 | { |
|---|
| 1318 | //DHL_FNC_SYM_ENTRY2("siglock_3pass", siglock_3pass), |
|---|
| 1319 | DHL_FNC_SYM_ENTRY2("autoscan", App_AutoScan_StartScan), |
|---|
| 1320 | |
|---|
| 1321 | DHL_VAR_SYM_ENTRY(g_Timeout_AutoscanLock), |
|---|
| 1322 | }; |
|---|
| 1323 | |
|---|
| 1324 | static void RegisterSymbols(void) |
|---|
| 1325 | { |
|---|
| 1326 | DHL_DBG_RegisterSymbols(_AutoscanSymbolx, DHL_NUMSYMBOLS(_AutoscanSymbolx)); |
|---|
| 1327 | } |
|---|
| 1328 | |
|---|
| 1329 | #else |
|---|
| 1330 | static void RegisterSymbols(void) { } |
|---|
| 1331 | |
|---|
| 1332 | #endif /* NEO_REGISTER_DEBUG_SYMBOL */ |
|---|
| 1333 | |
|---|
| 1334 | |
|---|
| 1335 | |
|---|
| 1336 | |
|---|
| 1337 | |
|---|
| 1338 | #if COMMENT |
|---|
| 1339 | ____Init____(){} |
|---|
| 1340 | #endif |
|---|
| 1341 | |
|---|
| 1342 | // cafrii 060714 add |
|---|
| 1343 | void App_AutoScanInit(void) |
|---|
| 1344 | { |
|---|
| 1345 | RegisterSymbols(); |
|---|
| 1346 | } |
|---|
| 1347 | |
|---|
| 1348 | |
|---|
| 1349 | |
|---|
| 1350 | |
|---|
| 1351 | |
|---|
| 1352 | /* end of file */ |
|---|