/******************************************************************* * DMW_ChannelAPI.h * * Channel Middleware main header file * * Copyright 2004 Digital STREAM Technology, Inc. * All Rights Reserved * * $Id: DMW_ChannelAPI.h, v?? 2004 cafrii Exp $ * ********************************************************************/ #ifndef __DMW_ChannelAPI_H__ #define __DMW_ChannelAPI_H__ #ifdef __cplusplus extern "C" { #endif #include "DMW_Channel.h" #include "DMW_Status.h" // °¢Á¾ status »ó¼ö °ª. //*************************************************************** // // Channel Specific Data DB // // 041126 add // °¢ CSD entry¸¦ ±¸ºÐÇÏ´Â tag enum { CSD_TAG_END = 0x00, // csd listÀÇ ¸Ç ¸¶Áö¸·À» ÀǹÌÇÏ´Â terminator. // csd¸¦ list ÇüÅ·Π»ç¿ëÇÒ °æ¿ì ¸Ç ¸¶Áö¸· end¸¦ ÀǹÌÇϵµ·Ï »ç¿ë ÇÒ ¼ö ÀÖ´Ù. CSD_TAG_SHORT_NAME = 0x10, // Channel Short Name, from VCT // format: 16-bit Unicode, Null (0x0000) terminated // ptr: Unicode string of short name, should be null-terminated. CSD_TAG_EXTENDED_NAME = 0x11, // Channel Extended Name, (A.K.A. long channel name) from VCT descriptor // format: MSS // ptr: byte string of extended name CSD_TAG_EXTENDED_TEXT = 0x12, // Channel description, from Channel-Ett // format: MSS // ptr: byte string of extended text CSD_TAG_SI_SOURCE_NAME = 0x13, // Source name, from NTT-SNS (source name subtable) // format: MTS // ptr: byte string of source name // cafrii 041221 add CSD_TAG_XDS_CALL_LETTER = 0x14, // XDS call letter (Station ID) // format: ASCII (4 or 6 character) // ptr: byte string of call letter CSD_TAG_XDS_NETWORK_NAME = 0x15, // XDS Network Name // format: ASCII (max 32 bytes) with null termination (total max 33 bytes) // ptr: byte string of network name CSD_TAG_EXTENDED_NAME_UC = 0x16, // Channel Extended Name from VCT descriptor // MSS Àüü¸¦ ´Ù ÁöÁ¤ÇÏ´Â ´ë½Å english ¸¸À» µû·Î ÃßÃâÇÏ¿© ÀúÀåÇϰíÀÚ ÇÒ °æ¿ì »ç¿ëÇÑ´Ù. // format: Unicode-16, null-terminated // ptr: UC16 string pointer of extended name CSD_TAG_USER_CHANNEL_NAME = 0x80, // User Channel Name, from user input via GUI // format: Ascii // ptr: byte string of user channel name }; typedef struct ChannelSpecificData_t { UINT8 tag; // meaning what kinds of data it is.. CSD_TAG_XXX // 'ptr'ÀÌ ¾î¶² ³»¿ëÀÇ µ¥ÀÌÅÍÀÎÁö¸¦ ³ªÅ¸³½´Ù. UINT16 byte_len; // byte length of data pointed by 'ptr' // 'ptr' bufferÀÇ Å©±âÀÌ´Ù. null terminate µÈ °æ¿ì´Â null byteµµ Æ÷ÇÔÇÑ´Ù. UINT8 *ptr; // pointer of CSD data.. // OS_Malloc ¿¡ ÀÇÇØ¼­ ÇÒ´çµÈ ¸Þ¸ð¸®. // } ChannelSpecificData; // cafrii 060630 add #define DMW_PID_NOT_EXIST 0 // elementary stream not exist.. #define DMW_PID_NO_INFO 1 // we do not have information. /* special pid: ´ÙÀ½°ú °°Àº °æ¿ì, Ưº°ÇÑ Àǹ̸¦ ºÎ¿©ÇϰíÀÚ ÇÒ ¶§ »ç¿ë. - DBÀÇ pid field¿¡ ÀúÀåÇÒ ¶§ * ÇØ´ç streamÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì´Â DMW_PID_NOT_EXIST¸¦ ÁöÁ¤ÇÑ´Ù. * PID Á¤º¸°¡ À¯È¿ÇÏÁö ¾ÊÀº °æ¿ì´Â DMW_PID_NO_INFO¸¦ ÁöÁ¤ÇÑ´Ù. - DB¿¡ ÀúÀåµÈ ³»¿ëÀÌ Àǹ̰¡ ¾ø¾îÁø °æ¿ì (audio language¸¦ º¯°æÇÑ´Ù´ø°¡ µî) - NvRam loadÇÑ ÈÄ.. - ½Ã°£ÀÌ ¸¹ÀÌ °æ°úÇØ¼­ ÀúÀåÇÑ pid Á¤º¸¸¦ ¹ÏÀ» ¼ö ¾ø´Â °æ¿ì µî.. * Çϳª¶óµµ DMW_PID_NO_INFO pid°¡ ÁöÁ¤µÇ¸é Rf TuneÀ» ÇÒ ¶§ pid¸¦ ÀÌ¿ëÇÑ fast tuningÀº ºÒ°¡´ÉÇÏ´Ù. */ /******************************************************************************* Channel Map Definition Terminology Definition -MCM(Master Channel Map) -UCM(User Channel Map) DB Generation Temp. MCM -> UCM *******************************************************************************/ /******************************************************************************* UCM_DB_T ±âº»ÀûÀΠä³Î Á¤º¸ÀÌ´Ù. ¸ðµç ä³Î °ü·Ã APIµéÀÇ ±âº»ÀÌ µÈ´Ù. Auto ScanÇÒ °æ¿ì temp M.C.M¿¡ ÀÇÇØ Áߺ¹¼º Á¦°ÅµÇ°í, Major/Minor sortingÇØ¼­ »ý¼ºµÈ´Ù. Channel Add¸¦ ÇÒ °æ¿ì minor channel Ãß°¡: append --> insert·Î º¯°æ. major channel Ãß°¡: append --> insert·Î º¯°æ. Ç×»ó sort »óŸ¦ À¯Áö. RF channel Ãß°¡: update Âü°í: DCMÀ̶ó°í À̸§À» º¯°æÇÏ´Â °ÇÀº ÇöÀç ¾ÆÁ÷ Àû¿ëÀÌ ¾ÈµÇ¾î ÀÖÀ½. *******************************************************************************/ // Some restriction: // ordered by Major/Minor/Rf/Vf // only 1 channel info should be "active" among same Mj/Mn/Rf/Vf group // /* ShortName°ú LongNameÀº ¸ðµÎ 16-bit unicode stringÀÌ´Ù. ÀÌ µÎ stringÀº (°¡´ÉÇϸé) null Á¾·á µÇ¾î¾ß ÇÑ´Ù. ÃÖ´ë ±æÀ̰¡ 7ÀÚ, 30ÀÚ µîÀ¸·Î Á¦ÇÑÀÌ µÇ¾î ÀÖÀ¸¹Ç·Î, string ±æÀ̰¡ ÃÖ´ë ±æÀÌÀÎ °æ¿ì null Á¾·á°¡ ¾ÈµÉ ¼ö ÀÖÀ½¿¡µµ À¯ÀÇÇØ¾ß ÇÑ´Ù. --> ´ÙÀ½ MW design ½Ã¿¡´Â null Á¾·á ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ¿© array¸¦ ÇÒ´çÇϰí stringÀº ¹Ýµå½Ã null Á¾·áÇϵµ·Ï ÇÏ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÔ. */ typedef struct UserChMap_DB { UINT16 Major; // Major channel number UINT16 Minor; // Minor channel number UINT8 RF; // RF channel number UINT8 VctFlag; // True if this info come from VCT. UINT16 Prog_number; // prog_number UINT8 Service_type; // 0: NTSC, 1: ATSC-VSB, 2: ATSC-64QAM, 3: ATSC-256QAM UINT8 Skipped; // 0: retained (active), 1: skipped UINT16 SurfIndex; // surf channel index in Surf Channel Map // 0: not included in Surf list // >=1: included in Surf list and Surf channel index UINT16 ShortName[7]; // channel short_name (from VCT) INT32 freqOffset; // signed value, unit: Hz UINT16 source_id; // source_id UINT16 Uid; // UCM element UID. (uniquely distinguishable ID). void *pEpgDB; // pointer to EPG DB // temporary values. ÀÌÇÏ °ªµéÀº NvRam¿¡ ÀúÀåµÇÁö ¾ÊÀ¸¹Ç·Î Èֹ߼ºÀÌ´Ù. // UINT16 Pcr_pid; // pcr pid UINT16 Video_pid; // video pid UINT16 Audio_pid; // preference audio pid tDHL_VideoCodingType Video_type; tDHL_AudioCodingType Audio_type; //neverdai add 101018 tDHL_DispFormat video_format; UINT16 pmt_pid; // cafrii 070201 add. if 0, this pid info is invalid. UINT8 signal_strength; // strength of signal whose tsid is 'TSID' UINT16 TSID; // TSID of the channel which contains this PSIP info. UINT16 channel_tsid; // channel TSID of this descriptive target channel BOOL hidden; // this channel is hidden in VCT. // cafrii 031205 add BOOL blocked; // if TRUE, this channel is blocked. (application use) // cafrii 041129 add BOOL scrambled; // if TRUE, one of streams is scrambled // cafrii 060724 add BOOL fresh; // ±âÁ¸¿¡ Á¸ÀçÇß´ø ä³ÎÀÎÁö, »õ·Ó°Ô Ãß°¡µÈ ä³ÎÀÎÁö // ¾Ë°í ÀÖÀ¸¸é µµ¿òÀÌ µÇ´Â °æ¿ì°¡ À־ // À̸¦ ±¸ºÐÇϱâ À§ÇØ Ãß°¡ÇÔ. // NvRam¿¡´Â ÀúÀåµÇÁö ¾Ê´Â temporary value // cafrii 101208 add BOOL disabled; // ÀÌ flag°¡ trueÀ̸é ÀÌ Ã¤³ÎÀº ¾ÈÀüÇÑ ½ÃÁ¡¿¡ ä³ÎÀÌ »èÁ¦µÇ¾î¾ß ÇÔÀ» ÀǹÌ. // ¹Ù·Î »èÁ¦ÇÏÁö ¾Ê´Â ÀÌÀ¯´Â ÀÌ Ã¤³ÎÀÌ ÇöÀç ½Ãû ä³ÎÀÏ ¼öµµ Àֱ⠶§¹®. //------------------------- // Channel specific data structure // // cafrii 041125 add for extended channel from VCT.. it is temporary data for MCM only //extendedChannelNameDescriptorPtr_t xcnd; int num_csd; // number of csd data int max_csd; // array size of 'csd' ChannelSpecificData *csd; //------------------------- UINT16 LongName[30]; // extended channel name (from VCT) // max 30 wide characters (UC16) // null terminated or length limited (by 30) } UCM_DB_T; // User Channel Map DB // NvRam¿¡´Â ÀÌ ¸ðµç Á¤º¸°¡ ÀúÀåµÇ´Â °ÍÀÌ ¾Æ´Ï´Ù. // //------------------------------------------ // cafrii 031205, add UCM CORE functions.. // typedef struct UCM_CORE_ENTRY_t { // IDs to distinguish each channels.. UINT16 major; UINT16 minor; UINT8 rf; // channel parameters to be persistent between Autoscan.. BOOLEAN skip; BOOLEAN block; UINT16 surf; } UCM_CORE_ENTRY; typedef struct { int num; // number of ucm core entries UCM_CORE_ENTRY *entry; } UCM_CORE; UCM_CORE *DMW_CDB_BackupUcmCore(void); // Make ucm core from UCM DB. // if NULL returned, memory resource is not sufficient to allocate memory.. // Caller should call FreeUcmCore after use. STATUS DMW_CDB_UpdateUcmCore(UCM_CORE *core); // update UCM core so that channel parameters can be unchanged.. void DMW_CDB_FreeUcmCore(UCM_CORE *core); // free ucm core //------------------------------------------ extern char *ShortNameString(UINT16 *src, char *dst); // unicode¹®ÀÚ¸¦ ascii char·Î.. (¿µ¹®¸¸..) extern const int g_sizeUcmExtension; // user°¡ ¿øÇÏ´Â ¸¸Å­ UCMÀº È®ÀåµÉ ¼ö ÀÖ´Ù. // ChannelLibÀ» ÃʱâÈ­ ÇÒ ¶§ ÁöÁ¤°¡´ÉÇÏ´Ù. // #define UcmItemMemorySize() (sizeof(UCM_DB_T) + g_sizeUcmExtension) // ½ÇÁ¦·Î UCM Çϳª°¡ ¸Þ¸ð¸®¿¡¼­ Â÷ÁöÇϰí ÀÖ´Â ¹ÙÀÌÆ® Å©±â. #define UcmExt(p) ((p)+sizeof(UCM_DB_T)) // // UCM Extension ºÎºÐÀ» Á¢±ÙÇϱâ À§ÇÑ ¸ÅÅ©·Î. // ÀÌ Æ÷ÀÎÅ͸¦ ´Ù½Ã applicationº°·Î ÁغñµÈ (UCM_EXT *)·Î ij½ºÆÃ ÇØ¼­ »ç¿ëÇÏ¸é µÈ´Ù. // ¿¹) // typedef struct UCM_EX_t { // UINT32 var1; // UINT8 var2[3]; // } UCM_EX; // // #define XUCM(p) ((UCM_EX *)UcmExt(p)) // to reach ucm extension use this. // // DMW_CDB_InitializeChannelLib(ChannelType_Air, sizeof(UCM_EX)); // // XUCM(&g_UCM[i])->var1 = 10; // // //*************************************************************** // // 4.4 API // //*************************************************************** // // 4.4.1-1 Tuning °ü·Ã ±âº»»çÇ×. // // // STATUS DMW_CDB_InitializeChannelLib(ChannelType type, int sizeExtionsion); // // ä³Î ŸÀÔÀ» ¹Ù²Û´Ù. // - ÇöÀç ucmÀÌ »õ ä³Î ŸÀÔ°ú ¸ÂÁö ¾ÊÀ» °æ¿ì ucmÀ» Æó±âÇÑ´Ù. // - ucm sema4°¡ ¾øÀ¸¸é »õ·Î ¸¸µç´Ù. // ucmÀ» NvRam¿¡¼­ ÀÚµ¿À¸·Î loadÇÏÁö´Â ¾Ê´Â´Ù. ±×°ÍÀº applicationÀÇ ¸òÀÌ´Ù. STATUS DMW_CDB_TerminateChannelLib(void); // ä³Î ¶óÀ̺귯¸®¸¦ ´Ý´Â´Ù. // °¢Á¾ ŽºÅ©, ¼¼¸¶Æ÷¾î¸¦ ÇØÁ¦ÇÑ´Ù. // //------------------------------ // UCM DB pointer extern UCM_DB_T *g_UCM; // DB pointer extern INT32 g_UCM_number; // number of DB element stored in RAM, not NvRam!!! extern INT32 g_UCM_max; // max number of DB (unit: element) // // UCM DB´Â 1Â÷¿ø ¹è¿­ ±¸Á¶¸¦ °®´Â´Ù. // UCM DB¸¦ À§ÇÑ ¸Þ¸ð¸®ÀÇ ÇÒ´ç/ÀçÇÒ´çÀº M/W¿¡¼­ ´ã´çÇÑ´Ù. // // Application¿¡¼­´Â DB ³»¿ë ¼öÁ¤À» ÇÏ¸é ¾ÈµÈ´Ù. ¿ÀÁ÷ API¸¦ ÀÌ¿ëÇÏ¿©¾ß ÇÑ´Ù. // application¿¡¼­ ¿øÇÑ´Ù¸é DB¸¦ Á÷Á¢ Àо ÂüÁ¶Çϴ°ÍÀº °¡´ÉÇÏÁö¸¸, // ±×·²°æ¿ì sema4·Î º¸È£µÈ »óÅ¿¡¼­ Àоî¾ß ÇÑ´Ù. Lock/Unlock()ÇÔ¼ö ÀÌ¿ë. // // Application¿¡¼­´Â Read-Only·Î °£ÁÖÇÑ´Ù. M/W¿¡ ÀÇÇØ¼­¸¸ ¼öÁ¤µÈ´Ù. // // UCM DB´Â ¿øÄ¢ÀûÀ¸·Î AutoScan¿¡ ÀÇÇØ MCMÀ¸·ÎºÎÅÍ »ý¼ºµÇ¹Ç·Î ±× ¼ø°£ Å©±â°¡ °áÁ¤µÇÁö¸¸, // Update °ü·Ã API¿¡ ÀÇÇØ Ãß°¡ È®ÀåµÉ ¼ö ÀÖ´Ù. DWM_TUN_xxx().. // // Âü°í: // Application¿¡¼­ DBÀÇ ³»¿ëÀ» Á÷Á¢ ¼öÁ¤ÇÏ´Â ¹æ¹ýÀº ¾ÆÁ÷ ¾øÀ¸³ª, // ÇâÈÄ 'Skipped' flag¿Í °°ÀÌ application Á¤Ã¥¿¡ ¸¹ÀÌ ÀÇÁ¸ÀûÀÎ ÀϺΠÇʵ带 ¼öÁ¤ÇÏ´Â ÇÔ¼ö°¡ // Á¦°øµÇ±â Àü±îÁö ¼öÁ¤À» ÀӽùæÆíÀ¸·Î Çã¿ëÇϰí ÀÖ´Ù. ÀÌ °æ¿ì ¹Ýµå½Ã LockÀ¸·Î º¸È£Çϱ⠹ٶ÷. // extern BOOL g_bReserveUcmIndex0; // ÀÌ °ªÀº index 0À» Ưº°ÇÑ ¿ëµµ·Î »ç¿ëÇÏ±æ ¿øÇÏ´Â platformÀ» À§ÇÑ flagÀÌ´Ù. // TRUEÀ̸é UCM index 0 (g_UCM[0])Àº Ư¼ö ¿ëµµ·Î reserveµÈ´Ù. void DMW_MSC_LockUcm(void); void DMW_MSC_UnlockUcm(void); STATUS DMW_MSC_LockUcmWait(UINT32 tick); // cafrii 060804 add // Ucm mutex¸¦ lockÇϱâ À§Çؼ­ ¹«ÇÑÁ¤ ±â´Ù¸®Áö ¾Ê°í ÁöÁ¤µÈ ½Ã°£¸¸ ±â´Ù¸°´Ù. // dead lockÀ» ¹æÁöÇϱâ À§Çؼ­ °£´ÜÇÏ°Ô Ã¼Å©¸¦ ÇÒ ¶§ À¯¿ë. // °¢Á¾ ä³Î ¼­ÇÎ ÇÔ¼öµé.. // ±âÁ¸ ä³Î Æ©´× Á¤Ã¥¿¡¼­ Á¦°øµÇ´ø ÇÔ¼öÀÌÀÓ. STATUS DMW_MSC_FindUcmByRF(int rf, int *returnIndex); // cafrii 050528 add #if 0 // cafrii 051031 delete, do not use any more STATUS DMW_MSC_FindUpperUcm(int curMajor, int curMinor, int *returnIndex, int *returnRF); STATUS DMW_MSC_FindLowerUcm(int curMajor, int curMinor, int *returnIndex, int *returnRF); STATUS DMW_MSC_FindUpperMajor(int curMajor, int flag, int *returnIndex, int *returnRF); STATUS DMW_MSC_FindLowerMajor(int curMajor, int flag, int *returnIndex, int *returnRF); #endif // 0 // UCM ¿À·ù¸¦ üũÇÏ´Â µð¹ö±× ÇÔ¼ö. Å×½ºÆ® ¿ëµµÀÓ. // BOOL DMW_MSC_IsUcmValid(void); STATUS DMW_MSC_EnableChannel(int uid, BOOL bEnable); // Skipped flag ¼³Á¤ÇÏ´Â ÇÔ¼ö. void DMW_MSC_SortUcm(void); // UCMÀ» ´Ù½Ã Á¤·ÄÇÏ´Â ÇÔ¼ö. void DMW_CDB_PrintUcm(int detailLevel); // ¸Þ¸ð¸®¿¡ ÀÖ´Â UCMÀ» ¸®½ºÆ®ÇÑ´Ù. void DMW_CDB_PrintOneUcm(int i, int detailLevel); //------------------------------------------ // »õ·Î¿î Tuning Policy¿¡ ÀÇÇÑ Ã¤³Î ¼­ÇÎ ÇÔ¼ö. // // // »õ Tuning Policy ¿ä±¸»çÇ×À» Àû¿ëÇÑ ÄÚµå. // UCM ä³Î Á¤º¸ÀÇ Uid (Unique ID) // // »õ Tuning Policy¿¡´Â Uid¶ó´Â »õ id°ªÀ» »ç¿ëÇÑ´Ù. // ´õÀÌ»ó Major/Minor/RF µ¥ÀÌÅÍ ½ÖÀÌ unique ÇÔÀ» º¸ÀåÇÒ ¼ö ¾ø°í, // UCMÀÇ index °ªÀº UCM lockÀ» ÇÒ °æ¿ì¿¡¸¸ Àǹ̰¡ ÀÖÀ¸¹Ç·Î »õ·Î¿î ID°¡ ÇÊ¿äÇÏ°Ô µÈ °Í. // // Uid´Â 16bit unsigned °ªÀ¸·Î¼­ ä³Î Á¤º¸°¡ ¸Þ¸ð¸®¿¡ Á¸ÀçÇÏ´Â µ¿¾ÈÀº ±× Á¤º¸¸¦ À¯ÀÏÇÏ°Ô // ±¸º°ÇÒ ¼ö ÀÖµµ·Ï ºÎ¿©µÈ °ªÀÌ´Ù. // NvRam¿¡´Â ÀúÀåµÇÁö ¾Ê´Â Èֹ߼º °ªÀÌ´Ù. NvRam¿¡¼­ loadµÉ °æ¿ì¿¡´Â »õ·Ó°Ô ID°¡ ÇÒ´çµÈ´Ù. // // ÇöÀç ±¸Çö Á¤º¸: // ÇöÀç ±¸ÇöÀº 1ºÎÅÍ ½ÃÀÛÇÏ´Â ÀÏ·Ã ¹øÈ£À̸ç, Áß°£¿¡ UCM µ¥ÀÌÅÍ ÀϺθ¦ »èÁ¦ÇÒ °æ¿ì ºó ¹øÈ£°¡ // Á¸ÀçÇϱ⵵ ÇÑ´Ù. // UINT16ÀÇ ÃÖ´ë°ªÀÎ 65535¸¦ ³Ñ¾î°¡¸é wrap-aroundµÇÁö¸¸ '0'ÀÇ °ªÀº »ç¿ëÇÏÁö ¾Ê°í ÀÖ´Ù. // int DMW_MSC_Uid2Index(int uid); int DMW_MSC_Index2Uid(int index); // // index <--> Uid°£ÀÇ º¯È¯¿¡ »ç¿ëÇÑ´Ù. µÎ µ¥ÀÌÅÍ´Â UCM¾È¿¡¼­ 1:1·Î ¸ÅĪÀÌ µÇ¾î ÀÖ´Ù. // ÇØ´ç ä³ÎÀÌ ¾øÀ¸¸é -1À» ¸®ÅÏÇÑ´Ù. // // ÁÖÀÇ1: // UidÀÇ Å¸ÀÔÀº ¿ø·¡ UINT16À̳ª, -1°ú °°Àº ¿¡·¯¸¦ ¾Ë·ÁÁÖ±â À§ÇØ ¸®Åϰª 'int'°¡ »ç¿ëµÇ¾ú´Ù. // // ÁÖÀÇ2: // index¸¦ ÇÔ¼öÀÎÀÚ³ª ¸®ÅϰªÀ¸·Î »ç¿ëÇÏ´Â ¸ðµç ÇÔ¼ö´Â caller¿¡¼­ UcmÀ» lockÀ» °É¾î º¸È£ÇØ ÁÙ Çʿ䰡 ÀÖ´Ù. // ÀÌ µÎ ÇÔ¼öµµ ¿¹¿Ü°¡ ¾Æ´Ô. int DMW_MSC_GetMaxMinorNumber(int major); // // ÇØ´ç 'major' °ªÀ» ¸ÞÀÌÀú ¹øÈ£·Î °®´Â ä³Î Á¤º¸µé Áß¿¡¼­ ÃÖ´ë minor°ªÀ» ã´Â´Ù. // ÀÌ´Â PSI·ÎºÎÅÍ ÃßÃâµÈ ä³Î Á¤º¸¿¡ Major-Minor ½ºÅ¸ÀÏÀÇ Ã¤³Î ¹øÈ£ ¸í¸íÀ» Çϱâ À§ÇØ // application¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. // // ¿¹¸¦ µé¾î ÇöÀç major 9¸¦ °®´Â ä³Î Á¤º¸µé Áß, minor °ªÀÇ ÃÖ´ë°ªÀÌ 3À̶ó°í Çϸé // applicaiton¿¡¼­´Â PMT¿¡¼­ ¾Ë¾Æ³½ ä³Î Á¤º¸ µÎ°³¸¦ 9-4, 9-5·Î ¸í¸íÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. // // PSI ä³Î Á¤º¸ÀÇ ¸í¸í¹ýÀº applicationÀÇ ÀÚÀ¯À̹ǷΠÀ§ÀÇ ¿¹´Â °­Á¦»çÇ×ÀÌ ¾Æ´Ï´Ù. // //-------------------------------- // ä³Î up/down ÇÔ¼öµé. // // format of CSF_Xxx // // 5 4 3 2 1 0 // +-------------+--+--+--+--+-----+ // | Res |IS|PF| MF | // +-------------+--+--+--+--+-----+ // // MF: modulation filter // 00 : all // 01 : ATSC only // 10 : NTSC only // // PF: PSI filter // 0 : do not include channel info from PSI table // 1 : all info including PSI // // IS: Ignore Surf Order // 1 : ignore surf index value. // #define CSF_Default 0 #define CSF_Mask_MF 3 #define CSF_ATSC_Only 1 // search only ATSC channel. #define CSF_NTSC_Only 2 // search only NTSC channel. #define CSF_Include_PSI 4 // include PSI channel as well as PSIP channel. #define CSF_IgnoreSurfOrder 8 // do not count on surf index number. just use zero/non-zero info. // used in SurfUp/Down() API only. #define CSF_Include_Skipped 0x10 // include skipped (disabled) channel also. #define CSF_Include_Hidden 0x20 // cafrii 050602 add #define CSF_DontWrapAround 0x40 // do not wrap around if not found.. // cafrii 050602 add #define CSF_Include_Disabled 0x80 // include disabled channel. by default, they are skipped. int DMW_MSC_FindChannelMajorMinor(int major, int minor, int flag, int szBuf, int *uidBuf); int DMW_MSC_FindChannelMajor(int major, int flag, int szBuf, int *uidBuf); // // ÇØ´ç major[¶Ç´Â minor]¿¡ ´ëÀÀÇÏ´Â(°°Àº °ªÀ» °®´Â) ä³Î Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. // ÇÔ¼öÀÇ ¸®ÅϰªÀº ÀÏÄ¡Çϴ ä³Î Á¤º¸ÀÇ °¹¼ö. // bIncludePsi´Â PSI·ÎºÎÅÍ ¾òÀº ä³Î Á¤º¸µµ °°ÀÌ // ÀÏÄ¡ÇÏ´Â ¸ðµç ä³Î Á¤º¸¸¦ ¹ÞÀ»·Á¸é ÀÎÀÚ·Î uid ÀúÀå ¹öÆÛ¸¦ ³Ñ°ÜÁÖ¸é µÈ´Ù. // ¹öÆÛ Å©±â´Â 'szBuf'À̸ç, ÀÌ ÀÌ»ó µ¥ÀÌÅͰ¡ ¸¹À» °æ¿ì truncateµÈ´Ù. // ¸®ÅÏ °ª > szBuf À̸é truncate µÈ °æ¿ìÀ̹ǷΠ´Ù½Ã È£ÃâÇØ¼­ Á¤È®ÇÑ Á¤º¸¸¦ ¾Ë¾Æ³»¾ß ÇÒ °ÍÀÌ´Ù. int DMW_MSC_FindMajorUp(int uidCurrentOrMajor, int flag, int szBuf, int *uidBuf); int DMW_MSC_FindMajorDown(int uidCurrentOrMajor, int flag, int szBuf, int *uidBuf); int DMW_MSC_FindMinorUp(int uidCurrentOrMajorMinor, int flag, int szBuf, int *uidBuf); int DMW_MSC_FindMinorDown(int uidCurrentOrMajorMinor, int flag, int szBuf, int *uidBuf); // // uidStart¸¦ ±âÁØÀ¸·Î upper/lower channel Á¤º¸¸¦ ã´Â´Ù. // (uidStart ÀÚü´Â Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ±×³É ½ÃÀÛÁ¡ÀÏ »ÓÀÓ) // // ¸®ÅϵǴ °á°ú ¿ª½Ã uid (¶Ç´Â uidÀÇ ¹öÆÛ)ÀÌ´Ù. // MajorÀÇ °æ¿ì Çϳª°¡ ¾Æ´Ï¹Ç·Î º¹¼ö°³ÀÇ uid°¡ °Ë»öµÈ´Ù. // ¸®ÅϰªÀ¸·Î °Ë»öµÈ uidÀÇ °¹¼ö¸¦ ³Ñ°ÜÁØ´Ù. int DMW_MSC_FindRfUp(UINT16 rfCurrent, int flag, int szBuf, int *uidBuf); int DMW_MSC_FindRfDown(UINT16 rfCurrent, int flag, int szBuf, int *uidBuf); // // rfCurrent¸¦ ±âÁØÀ¸·Î upper/lower RF "ä³Îµé"À» ã´Â´Ù. // rfCurrentº¸´Ù Å©°Å³ª ÀÛÀº ä³ÎÀ» ã´Â´Ù. // ¸®ÅϵǴ °á°ú ¿ª½Ã uid (¶Ç´Â uidÀÇ ¹öÆÛ)ÀÌ´Ù. // ¸®ÅϰªÀ¸·Î °Ë»öµÈ uidÀÇ °¹¼ö¸¦ ³Ñ°ÜÁØ´Ù. //----------------------------- // surf ä³Î °ü·Ã.. 3/21 Ãß°¡ // // surf ä³ÎÀ̶õ UCMÀÇ SurfIndex°¡ non-zero °ªÀ» °¡Áö´Â ä³Î·Î¼­ // ÀÌ Ã¤³ÎµéÀº surf channel list¿¡ µî·ÏÀÌ µÇ¾î Àִ ä³ÎÀÌ´Ù. // surf-up, surf-down ¸í·ÉÀ¸·Î surf ä³Î ¼­ÇÎÀ» ÇÒ ¼ö ÀÖ´Ù. // // surf ä³ÎÀÇ µî·Ï ¹× ÇØÁ¦´Â // DMW_CDB_SetSurfChannel()/DMW_CDB_ReleaseSurfChannel() ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. // int DMW_MSC_FindUidFromSurfIndex(int surfIndex); // return uid. // // ¿øÇÏ´Â surf_index¸¦ °¡Áø active ä³ÎÀ» ã¾Æ¼­ ±× Uid¸¦ µÇµ¹·ÁÁØ´Ù. // int DMW_MSC_Surf2Index(int surf); // surf --> index. require caller's UCM lock. UINT16 DMW_MSC_FindSurfIndexFromUid(int uid); // don't require caller's umc lock. UINT16 DMW_MSC_FindMaxSurfIndex(int *returnUcmIndex); // return value: surfIndex UINT16 DMW_MSC_FindMinSurfIndex(int *returnUcmIndex); // return value: surfIndex // // ¸¹Àº °æ¿ì¿¡ À־ min surf index´Â ¾Æ¸¶µµ 1ÀÏ °ÍÀÌ´Ù. // surf ä³ÎÀÌ Çϳªµµ ¹ß°ßµÇÁö ¾ÊÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù. int DMW_MSC_FindSurfUp(int uidCurrent, int flag); // return uid. int DMW_MSC_FindSurfDown(int uidCurrent, int flag); // return uid. // // uidCurrent ´ÙÀ½ºÎÅÍ Ã£±â ½ÃÀÛÇÏ¿© °¡Àå °¡±î¿î upper/lower surf ä³ÎÀ» ã´Â´Ù. // flag´Â CSF_IgnoreSurfOrder ¸¸ »ç¿ë °¡´ÉÇÏ´Ù. // ÇöÀç uidCurrent°¡ invalidÀ̰ųª, uidCurrentÀÇ Ã¤³ÎÀÌ surf list¿¡ Àִ ä³ÎÀÌ // ¾Æ´Ï¶ó¸é µ¿ÀÛÀº ¾Æ·¡ °æ¿ì¿¡ µû¶ó ³ª´²Áø´Ù. // - CSF_IgnoreSurfOrder set ÀÎ °æ¿ì: // find lowest index channel which is in surf list. (¾Æ¸¶µµ surfIndex == 1) // - µðÆúÆ® ¼¼ÆÃÀÎ °æ¿ì: // uidCurrentÀÇ Ã¤³Î·ÎºÎÅÍ °¡Àå ±Ùó¿¡ ÀÖ´Â (minor ±âÁØÀ¸·Î nearest) // ä³ÎÀ» µÇµ¹·ÁÁØ´Ù. // ¸ðµç °æ¿ì¿¡ inactive channelÀº °Ë»öÇÏÁö ¾Ê´Â´Ù. //*************************************************************** // // 4.4.1-2 Tuning °ü·Ã APIs // // typedef DMC_FN_TUNE_COMPLETED ChannelTuneCallback; // // ¸ðµç Tuning ÀÛ¾÷Àº ±Ã±ØÀûÀ¸·Î Dmc_Task¿¡¼­ ÀÌ·ç¾îÁø´Ù. // º°µµÀÇ Àü´ã ŽºÅ©·Î ±¸¼ºÇÔÀ¸·Î½á ¸®¼Ò½º »ç¿ëÀÇ Ãæµ¹À» ¹æÁöÇÒ ¼ö ÀÖ´Ù. (tuner¼³Á¤ µî) // STATUS DMW_TUN_TuneChannelByUid(UINT16 uid, BOOL bSkipPrescanPids, BOOL bWaitForCompletion, ChannelTuneCallback fn, UINT32 userparam); // // UID¸¦ ¹Þ¾Æ¼­ Æ©´×À» ÇÑ´Ù. // ¸ðµç ´Ù¸¥ ÇüÅÂÀÇ ¿ä±¸ (RF, Major-Minor, Up/Down µî..)´Â UidÀÇ ÇüÅ·Πº¯°æµÇ¾î // ÀÌ ÇÔ¼öÀÇ ÀÎÀÚ¸¦ ÅëÇØ Àü´ÞµÈ´Ù. // ÇÊ¿äÇÑ °æ¿ì M/WÀÇ ´Ù¸¥ helper ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. // // bWaitForCompletionÀÌ TRUEÀÏ °æ¿ì TuningÀÌ ¿ÏÀüÈ÷ ³¡³¯¶§±îÁö blockµÈ´Ù. // FALSEÀ̸é Dmc_Task·Î command messge¸¦ Àü´Þ¸¸ ÇÏ°í ¹Ù·Î ¸®ÅϵȴÙ. // STATUS DMW_TUN_TuneChannelByUidAndFlag(UINT16 uid, UINT32 flag, BOOL bWaitCompletion, ChannelTuneCallback fn, UINT32 userparam); // // cafrii 041202 add // more specific UidTune API // ä³Î Æ©´×ÀÇ Smartness¿¡ °üÇÏ¿©: // // UCM¿¡´Â pre-scanned pids, Major-Minor, RF µîÀÇ ¸¹Àº Á¤º¸µéÀÌ Àִµ¥ // Æ©´×À» ÇÏ´Â ÀýÂ÷´Â ¾Æ·¡¿Í °°´Ù. // // 1. pre-scan pid Á¤º¸ÀÇ video_pid ¶Ç´Â audio_pid°¡ non-zeroÀ̸é ÀÌ °ªÀ» ÀÌ¿ëÇÏ¿© ½Ãû. // // 2. 1)ÀÇ ¹æ¹ýÀÌ ½ÇÆÐÇÒ °æ¿ì¿¡´Â pre-scan pid°¡ À߸ø ¼öÁýµÇ¾ú°Å³ª out-of-dateÀÎ °æ¿ìÀÌ´Ù. // À̶§´Â ±× ä³Î Á¤º¸ÀÇ ÇüÅ¿¡ µû¶ó ´ëÀÀÀÌ ´Þ¶óÁø´Ù. // // 2-A. VCT·ÎºÎÅÍ ¾ò¾îÁø ä³Î Á¤º¸¶ó¸é, VCT¸¦ ºÐ¼®ÇÏ¿© Major-Minor ¹øÈ£·Î ½ÃûÀ» ÇÑ´Ù. // 2-B. PSI·ÎºÎÅÍ ¾ò¾îÁø ä³Î Á¤º¸¶ó¸é, PMTÀÇ Program number·Î ½ÃûÀ» ÇÑ´Ù. // // ä³Î Á¤º¸ ³»¿ë¿¡ µû¶ó À§ÀÇ µÎ ¹æ¹ýÁß ÇѰ¡Áö ¹æ¹ý¸¸ÀÌ ½ÃµµµÈ´Ù. // ½ÇÆÐ ÇÒ °æ¿ì ´õ ÀÌ»óÀÇ Ã³¸®´Â ÇÏÁö ¾Ê´Â´Ù. // // Dmc_Task¿¡¼­ ¹ß»ýÇÑ ¿¡·¯ °ªÀ» Application¿¡¼­ ¾Ë·Á°í ÇÒ °æ¿ì¿¡´Â µÎ°¡Áö ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. // // 1) APIÀÇ ¸®Åϰª. // blocking call¿¡¼­¸¸ °¡´ÉÇϸç, DMW_TUN_Xxx() ÇÔ¼öÀÇ ¸®Åϰª(STATUS)À» ÀÌ¿ëÇÏ¿© Á¦ÇÑÀûÀÎ // Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù. // 2) Application callback // ¹Ì¸® µî·ÏÇÑ callback ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¿©·¯°¡Áö Á¤º¸¸¦ ¾Ë·ÁÁÙ ¼ö ÀÖ´Ù. (todo..) // 3) Polled watch // ¸¶Áö¸·À¸·Î callÇÑ ÇÔ¼ö°¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾ú´ÂÁö application¿¡¼­ ÁÖ±âÀûÀ¸·Î üũÇÑ´Ù. (todo..) // //*************************************************************** // // 4.4.2 Auto channel search API // // typedef BOOL (*ChannelScanCancelCheckFn)(); // cafrii 061219 add typedef enum { // ÀϹÝÀûÀÎ °æ¿ì¿¡´Â analog/digital ÃÑÇÕÇØ¼­ Çѹø¿¡ ÁøÇàµÈ´Ù. ScanOnePassStage, // Analog Separate scan flag¸¦ ÁöÁ¤ÇÏ¸é ¾Æ·¡ µÎ°¡Áö Stage·Î ÁøÇàµÈ´Ù. ScanAnalogStage, ScanDigitalStage, } ScanStage; #define ScanStageString(s) ( \ (s)==ScanAnalogStage ? "Analog" : \ (s)==ScanDigitalStage ? "Digital" : "All" ) // structure // typedef struct { int flag; // CBTF_XXX ScanStage stage; } ScanStartedCbParam; typedef struct { BOOL bStoppedByUser; BOOL bUpdate; // param1: bStoppedByUser, TRUEÀ̸é StopScan() ¸í·É¿¡ ÀÇÇØ Áß´ÜµÈ °æ¿ìÀÓ. // param2: bUpdate, // TRUEÀ̸é StopScan(bUpdate==TRUE, ..)·Î È£ÃâµÇ¾úÀ½. // bStoppedByUser°¡ TRUEÀ϶§¸¸ Àǹ̰¡ ÀÖÀ½. int flag; // CBTF_XXX ScanStage stage; } ScanCompleteCbParam; typedef struct { // input parameter; // int channel; // current RF channel number to check //ModulationType demod; // modulation UINT32 flag; // scan flag: CBTF_XXX ChannelScanCancelCheckFn chkfn; // cancel check function // application code should repeatedly check cancel calling this function. // if this function returns TRUE (meaning autoscan is cancelled), // then application should exit scan immediately // with 'return_value' to 'statusCancelled' BOOL one_channel_scan; // true if this scan is quick scan (one channel scan) // output parameter; // BOOL locked; // TRUE if signal locked. ModulationType mode; // detected modulation type. valid if 'locked' is TRUE int strength; // signal strength int freq_offset; // frequency offset detected in Hz unit STATUS return_value; } ScanTunerSetCbParam; typedef struct { int current_rf; BOOL after_scan; // TRUE if this 'rf' is completed. int channel_idx; // ¸î¹øÂ° channelÀΰ¡? int total_channel; ScanStage stage; // // ÁøÇà »óȲ Á¤µµ // (channel_idx+1) * 100 / total_channel } ScanProgressCbParam; // Note! // ÀÌ event´Â 'rf' ½ÃÀÛÇϱâ Á÷Àü¿¡ Çѹø (after_scan = 0), // Á¾·áÇÏ°í ³ª¼­ Çѹø (after_scan = 1), ÀÌ·¸°Ô µÎ¹ø ºÒ¸°´Ù. typedef struct { UCM_DB_T *ucm; BOOL (*fn_lookup_mj_mn)(int major, int minor); BOOL (*fn_lookup_rf_pn)(int rf, int program_number); // ... } ScanNewChannelCbParam; typedef struct { STATUS status; int rf; UINT32 flag; //UINT32 userparam; // cafrii 060804 no more used int nUid; int *uidBuf; // ÀÌ buffer´Â event callback Á÷ÈÄ¿¡ freeµÉ °ÍÀ̹ǷΠÁÖÀÇ. } OneChannelScanCompleteParam; // // Callback ÇÔ¼öÀÇ ÀÎÀÚ·Î Àü´ÞµÉ À̺¥Æ® ŸÀÔ°ú µ¿¹ÝµÇ´Â parameter Á¤ÀÇ. // typedef enum { evtScanStarted, // ä³Î °Ë»ö ÀÛ¾÷ÀÌ ½ÃÀ۵ǾúÀ½. // param1: ScanStartedCbParam * // param2: NULL evtScanComplete, // ä³Î °Ë»öÀÌ ¸ðµÎ ³¡³µÀ½. // UCM »ý¼º ÀÛ¾÷µµ ¸ðµÎ ¿Ï·á µÇ¾ú±â ¶§¹®¿¡ ÀÌÈÄ application¿¡¼­ // UCM µ¥ÀÌÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. // param1: ScanCompleteCbParam * evtScanTunerSet, // param1: ScanTunerSetCbParam * evtNewChannel, // »õ·Î¿î ä³ÎÀÌ ¹ß°ßµÇ¾úÀ½. // param1: ScanNewChannelCbParam * evtOnProgress, // ä³Î °Ë»ö ÁøÃ´ »óȲ. »óÅ ÁøÇà ±×·¡ÇÁ¸¦ Ç¥½ÃÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. // param1: ScanProgressCbParam * //evtError, // ¿¡·¯°¡ ¹ß»ýÇÏ¿´À½. // param1: ¿¡·¯ Á¤º¸.. ¿¡·¯ Á¾·ù¸¦ ¼³¸íÇÏ´Â ½ºÆ®¸µ. // ex) "out of memory for MCM. some channel info will be dropped" //evtOneChannelComplete, // cafrii 060804 delete // scan one channel ÇÔ¼ö¸¦ »ç¿ëÇÒ ¶§¿¡¸¸ Àü´ÞµÇ´Â À̺¥Æ®. // param: OneChannelScanCompleteParam* } ChannelScanEventType; typedef STATUS (*ChannelScanCallback) (ChannelScanEventType evt, UINT32 param); // Äݹé ÇÔ¼öÀÇ prototype. typedef struct SparseChannelMap_t { int num_seg; struct // describe channel from 'rf_start' to 'rf_start' + 'rf_num' - 1 { int ch_start; int ch_num; } seg[10]; } ChannelScanSparseMap; //----------------------------------------------------------------------- // Channel Broadcast Type Flag definition. // this flag is used as an argument of StartScan function. #define CBTF_ChannelTypeMask 0x0001 #define CBTF_Air 0x0000 #define CBTF_Cable 0x0001 // Only one of above two flag option should be selected. // use of (CBTF_Air | CBTF_QAM) is illegal. // NOTE! // UpdateMode (DMW_CDB_UpdateDB) ¿¡¼­´Â ÀÌ Ç÷¡±×´Â »ç¿ëµÇÁö ¾Ê´Â´Ù. // #define CBTF_NTSC 0x0002 // NTSC #define CBTF_8VSB 0x0004 // ATSC 8VSB #define CBTF_QAM 0x0008 // ATSC QAM (64, 256 cannot be distinguished.) // °Ë»öÇÒ Modulation Mode¸¦ ÁöÁ¤ÇÑ´Ù. // Ç÷§Æû¿¡ µû¶ó Áö¿øµÇÁö ¾Ê´Â ¸ðµå°¡ ÀÖ°ÚÀ¸³ª MW API¿¡¼­ üũÇÏÁö´Â ¾Ê´Â´Ù. #define CBTF_Ext 0x0010 // extended channel Air: 69 -> 83, Cable: 125 -> 130 // Start ScanÀ» Çϸ鼭 ½ÃÀÛ/³¡ ä³Î ¹øÈ£¸¦ ÁöÁ¤Çϵµ·Ï ÇÑ »õ·Î¿î API¸¦ »ç¿ëÇϸé // ÀÌ flag´Â ÇÊ¿äÇÏÁö ¾Ê´Ù. // ´õ ÀÌ»ó Áö¿øÇÏÁö ¾Ê´Â´Ù. #define CBTF_ForcePSI 0x0020 // force scan using PSI as well as VCT. // VCTÀÇ À¯¹«¿Í »ó°ü¾øÀÌ PSI ä³ÎÀ» °Ë»öÇÏ¿© Á¤º¸¸¦ ¸ðÀº´Ù. #define CBTF_IgnoreNtscInVct 0x0040 // VCT¾ÈÀÇ analog ä³Î Á¤º¸¸¦ ¹«½ÃÇÑ´Ù. // Digital Only Moduel/STB¿¡¼­´Â ²À ¼¼ÆÃÇØ¼­ callÇØ¾ß ÇÑ´Ù. // ¾Æ´Ï¸é AutoscanÀÌ Á¾·áµÈ ÈÄ¿¡ Analog ä³Î Á¤º¸¸¦ »èÁ¦ÇØ¾ß ÇÑ´Ù. //#define CBTF_IgnoreRemoteChannelInVct 0x0080 // VCT¾ÈÀÇ remote ä³Î Á¤º¸¸¦ ¹«½ÃÇÑ´Ù. // DMW_CDB_UpdateDB ¿¡¼­´Â MW API³»¿¡¼­ ÀÌ Ç÷¡±×¸¦ ÀÚµ¿ÀûÀ¸·Î ¼¼ÆÃÇÑ´Ù. // ÀÌ API´Â ÇöÀç ½Ãû ä³Î¸¸ updateÇÏ´Â °ÍÀ̹ǷΠ´Ù¸¥ RF ä³ÎÀÇ link Á¤º¸´Â // ÂüÁ¶ÇÏ¸é ¾ÈµÇ±â ¶§¹®ÀÌ´Ù. #define CBTF_EnableNewChannelInUpdateMode 0x0100 // UpdateMode (DMW_CDB_UpdateDB)¿¡¼­¸¸ »ç¿ëµÇ´Â Ç÷¡±× // »õ·Î ¹ß°ßµÈ ä³ÎÀº ¸ðµÎ Enable ½ÃŲ´Ù. (skipped FALSE) // ±âÁ¸ Á¤º¸¿¡ overwriteµÇ´Â ä³ÎÀº ±×´ë·Î µÐ´Ù. //#define CBTF_QuerySignalInfo 0x0200 // JVC ¸ðµâó·³ ¸Å ä³Î/modulation ¸¶´Ù signal strength µîÀÇ Á¤º¸¸¦ // ¾Ë°í ½ÍÀ»¶§ ON. // evtSignalInfo À̺¥Æ®°¡ ¹ß»ýµÈ´Ù. // cafrii 060616 // ÀÌ flag´Â ´õÀÌ»ó Áö¿øÇÏÁö ¾Ê°í ÀÖ¾úÀ½. »èÁ¦ÇÔ. #define CBTF_IgnoreTvctInCable 0x0400 // ÄÉÀÌºí ¸ðµå¿¡¼­ TVCT´Â ¿ÏÀüÈ÷ ¹«½ÃÇÑ´Ù. #define CBTF_CheckScrambleByVideoContext 0x0800 // cafrii 041130 change name // Video Context »ý¼º ¿©ºÎ·Î scramble ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù. // // scramble µÈ ä³ÎÀ» ¹Ù·Î ignore ÇÏ´Â °ÍÀÌ ¾Æ´Ï°í ÀÏ´Ü DB¿¡ ³ÖµÇ // scrambed flag¸¦ set ÇÑ´Ù. // ÀÌ·± ä³ÎÀÌ ÇÊ¿ä ¾ø´Â °æ¿ì¶ó¸é autoscan ÀÌ ³¡³­ µÚ¿¡ »èÁ¦ÇÏ¸é µÈ´Ù. #define CBTF_IgnorePidsInfo 0x1000 // PID °ªÀº ¼öÁýÇÏÁö ¾Ê´Â´Ù. Major-Minor Á¤º¸¸¸ ¼öÁýÇϵµ·Ï ÇÑ´Ù. // // cafrii 060710, not used any more // pid´Â »ç¿ëÇÏÁö ¾Ê´õ¶óµµ, scramble check´Â ÇÏÁö ¾Ê´õ¶óµµ // VCT recover ±â¹ýÀÌ Ç×»ó »ç¿ëµÇ¹Ç·Î // À̸¦ À§Çؼ­ ¹Ýµå½Ã pid Á¤º¸´Â ÇÊ¿äÇÏ´Ù. //#define CBTF_AnalogCableSystemDetect 0x2000 // // Analog °Ë»öÀ» ¼öÇàÇϸ鼭 CableSystem À» ÀÚµ¿À¸·Î °áÁ¤ÇÑ´Ù. (STD/IRC/HRC) // ä³Î °Ë»öÀÌ ¼öÇàµÇ´Â µ¿¾ÈÀº ÀáÁ¤ÀûÀ¸·Î STD ¸ðµå·Î ¼³Á¤ÀÌ µÇ¾î °Ë»öÀ» Çϰí, // ä³Î °Ë»öÀÌ ´Ù Á¾·áµÇ¸é °Ë»öµÈ °á°ú¸¦ ¹ÙÅÁÀ¸·Î CableSystemÀ» °áÁ¤ÇÏ°Ô µÈ´Ù. // À̶§ HRC³ª IRC·Î °áÁ¤ÀÌ µÇ¸é ¸ðµç ä³Î ¸ÊµéÀÇ frequency offsetµµ ¸ðµÎ ÀÚµ¿À¸·Î Á¶ÀýµÈ´Ù. // // À¯ÀÇ »çÇ× // // * Cable ¸ðµå¿¡¼­¸¸ »ç¿ë °¡´ÉÇÏ´Ù. (CBTF_Cable only) // * ¾Æ³¯·Î±× (NTSC) ¸¸ ´Üµ¶À¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. (CBTF_NTSC | CBTF_8VSB ÀÌ·± ½ÄÀ¸·Î »ç¿ë ºÒ°¡) // * ¹Ýµå½Ã ChannelDB¸¦ ¸ðµÎ clear ÇÑ »óÅ¿¡¼­ AutoscanÀ» ½ÃÀÛÇØ¾ß ÇÑ´Ù. // ±âÁ¸ÀÇ DB data°¡ ³²¾ÆÀÖÀº »óÅ¿¡¼­ ½ÃÀÛÇÒ °æ¿ì Á¦´ë·Î µ¿ÀÛÇÔÀ» º¸ÀåÇÏÁö ¾Ê´Â´Ù. // // cafrii 050718 delete, not used any more //#define CBTF_DigitalCableSystemDetect 0x4000 // cafrii 050603 add // // Digital °Ë»öÀ» ¼öÇàÇϸ鼭 CableSystemÀ» °áÁ¤ÇÑ´Ù. // ä³Î °Ë»öÀÌ ¼öÇàµÇ´Â µ¿¾ÈÀº ÀáÁ¤ÀûÀ¸·Î STD ¸ðµå·Î ¼³Á¤ÀÌ µÇ¾î °Ë»öÀ» Çϰí, // ä³Î °Ë»öÀÌ ´Ù Á¾·áµÇ¸é °Ë»öµÈ °á°ú¸¦ ¹ÙÅÁÀ¸·Î CableSystemÀ» °áÁ¤ÇÏ°Ô µÈ´Ù. // À̶§ HRC³ª IRC·Î °áÁ¤ÀÌ µÇ¸é ¸ðµç ä³Î ¸ÊµéÀÇ frequency offsetµµ ¸ðµÎ ÀÚµ¿À¸·Î Á¶ÀýµÈ´Ù. // // À¯ÀÇ »çÇ× // // * Cable ¸ðµå¿¡¼­¸¸ »ç¿ë °¡´ÉÇÏ´Ù. (CBTF_Cable only) // * Digital¸¸ ´Üµ¶À¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù. (CBTF_NTSC | CBTF_QAM ÀÌ·± ½ÄÀ¸·Î »ç¿ë ºÒ°¡) // * ¹Ýµå½Ã ChannelDB¸¦ ¸ðµÎ clear ÇÑ »óÅ¿¡¼­ AutoscanÀ» ½ÃÀÛÇØ¾ß ÇÑ´Ù. // ±âÁ¸ÀÇ DB data°¡ ³²¾ÆÀÖÀº »óÅ¿¡¼­ ½ÃÀÛÇÒ °æ¿ì Á¦´ë·Î µ¿ÀÛÇÔÀ» º¸ÀåÇÏÁö ¾Ê´Â´Ù. // // ÀÌ Ç÷¡±×¸¦ »ç¿ëÇϸé CBTF_8VSB ¿Í CBTF_QAMÀÌ ±âº»À¸·Î ¼³Á¤µÈ °Í ó·³ µ¿ÀÛÇÑ´Ù. // // cafrii 050721 add #define CBTF_DontSelectMaxChannel 0x8000 // // Set µÇ¸é Autoscan ¿Ï·á ÈÄ MCMÀ» UCMÀ¸·Î º¯È¯ÇÒ ¶§ // ´ëÇ¥ ä³Î ¼±ÅÃÀ» ÇÏÁö ¾Ê´Â´Ù. // // cafrii 050802 add //#define CBTF_IgnoreVctWithoutPid 0x10000 // // SLDÀÇ PID Á¤º¸°¡ ¿Ïº®ÇÏÁö ¾ÊÀº VCT Å×À̺íÀº ¹«½ÃÇÑ´Ù. // #define CBTF_PsiOnlyMode 0x10000 // cafrii 050902 // ÀÌ flag°¡ Set µÇ¸é autoscan ÇÒ ¶§¿¡ PSIP Á¤º¸¸¦ ÀüÇô »ç¿ëÇÏÁö ¾Ê°í // ¿À·ÎÁö PSI Å×ÀÌºí¸¸À» »ç¿ëÇÑ´Ù. // Major, Minor ¹øÈ£´Â RF.program_number °ªÀ» »ç¿ëÇÏ°Ô µÈ´Ù. // cafrii 060626 add #define CBTF_SkipTunerSet 0x20000 // // ÀÌ flag°¡ set µÇ¸é tuner¼³Á¤Àº ÀüÇô ÇÏÁö ¾Ê°í // ÇöÀç tuner ¼³Á¤µÈ »óÅ¿¡¼­ Table ¼ö½Å °Ë»ö¸¸ ¼öÇàÇÑ´Ù. // µû¶ó¼­ ÀÌ flag´Â tuner°¡ ÀÌ¹Ì ¼³Á¤µÈ ÈÄ // one channel scan ¸ðµå·Î¸¸ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. // // cafrii 061219 add #define CBTF_AnalogSeparateScan 0x40000 // // ÀÌ flag°¡ setµÇ¸é analog scanÀ» ¸ÕÀú ÁøÇàÇÑ ÈÄ // ³ªÁß¿¡ digital scanÀ» µû·Î ¼öÇà ÇÑ´Ù. // CBTF_NTSC °¡ »ç¿ëµÇ¾î¾ß Àǹ̰¡ ÀÖ´Ù. // #define CBTF_IncludeSpecialHidden 0x80000 // KBS Çâ K-ViewÀÇ ¿ä±¸»çÇ×À» ¸¸Á·½ÃŲ´Ù. // Hidden ä³Î Áß, ƯÁ¤ pid¸¦ °¡Áö´Â ä³ÎÀº hiddenÀ» Ǭ´Ù. #define CBTF_IgnoreScrambledChannel 0x100000 // scramble °É¸° ä³ÎµéÀº ¾Æ¿¹ ä³Î DB¿¡ Áý¾î³ÖÁö ¾Ê´Â´Ù. //----------------------------------------------------------------------- STATUS DMW_ASC_InitScan(void); // // ä³Î °Ë»ö ¸ðµâÀ» ÃʱâÈ­ ÇÑ´Ù. // STATUS DMW_ASC_StartScan(int flag, ChannelScanCallback fn, int chStart, int chEnd); STATUS DMW_ASC_StartScanEx(int flag, ChannelScanCallback fn, UINT8 *rfMap, int numRf); STATUS DMW_ASC_StartSparseScan(int flag, ChannelScanCallback fn, ChannelScanSparseMap *map); // // ÀÚµ¿ ä³Î °Ë»öÀ» ½ÃÀÛÇÑ´Ù. // 1) flag : °Ë»öÇϰíÀÚ Çϴ ȯ°æ µî °¢Á¾ ¼³Á¤... // 2) blind == TRUEÀ̸é È­¸éÀ» º¸¸é¼­ scanÇÑ´Ù. // ÀÌ ¸ðµå´Â µðÁöÅРä³ÎÀÇ °æ¿ì ¼Óµµ ¹®Á¦¶§¹®¿¡ °ÅÀÇ Çö½ÇÀûÀÌÁö ¸øÇÔ. // ¾Æ³¯·Î±× ä³ÎÀÇ °æ¿ì´Â °¡´ÉÇÒ °Í °°À½. // blind == FALSEÀ̸é scan ÀÛ¾÷ Áß¿¡´Â È­¸éÀÌ blank·Î ¾Æ¹«°Íµµ º¸ÀÌÁö ¾Ê´Â´Ù. // 3) fn: Äݹé ÇÔ¼ö Æ÷ÀÎÅÍ. NULLÀÌ ¾Æ´Ï¾î¾ß ÇÔ. // ÀÌ ÇÔ¼öµéÀº ¸ðµÎ non-blocking ÇÔ¼öÀÌ´Ù. ÇÊ¿äÇÑ ÀÛ¾÷¸¸ ¼öÇàÇÏ°í ¹Ù·Î ¸®ÅÏÇÑ´Ù. // ½ÇÁ¦ scanning ÀÛ¾÷Àº ´Ù¸¥ ŽºÅ©¿¡¼­ ÀÌ·ç¾îÁø´Ù. // ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§ÇÑ ¿©·¯°¡Áö Á¦¾à»çÇ×ÀÌ ÀÖ´Ù. // (¾Æ·¡ Application »ç¿ë ¿¹ ¼³¸í ÂüÁ¶) // °Ë»öµÈ ä³Î Á¤º¸´Â À̺¥Æ®¸¦ ÅëÇØ¼­ applicationÀ¸·Î Àü´ÞµÈ´Ù. // (¾Æ·¡ À̺¥Æ®Àü´Þ±¸Á¶ ¼³¸í ÂüÁ¶) STATUS DMW_ASC_StopScan(BOOL bUpdate); // stop auto scan // // °Ë»ö ÀÛ¾÷ µµÁß¿¡ ä³Î °Ë»ö ÀÛ¾÷À» Á¾·áÇÑ´Ù. // // bUpdate°¡ TRUEÀ̸é ÀÌ ½ÃÁ¡±îÁö °Ë»öµÈ ä³Î Á¤º¸¸¦ ÀÌ¿ëÇÏ¿© UCMÀÌ updateµÈ´Ù. // Áö±Ý±îÁö °Ë»ö °á°ú¸¦ ¿ÏÀüÈ÷ cancelÇÏ·Á¸é FALSE ÁöÁ¤. // ChannelScanComplete À̺¥Æ®°¡ Àü´Þ µÇ°í ³­ ÀÌÈÄ¿¡ ºÒ¸° StopScan()ÀÇ bUpdate´Â // ¹«½ÃµÈ´Ù. (ÀÌ¹Ì update°¡ µÈ ÀÌ ÈÄ¿¡ À̺¥Æ®°¡ Àü´ÞµÇ¹Ç·Î..) // STATUS DMW_ASC_ScanChannel(int rf, int flag, BOOL bWaitComplete, ChannelScanCallback eventcb, DMC_FN_COMPLETED pfnComplete, UINT32 userParam, BOOL bCancelPrevCmds); STATUS DMW_ASC_UpdateChannel(int rf, int flag, BOOL bWaitComplete, DMC_FN_COMPLETED pfnComplete, UINT32 userParam, BOOL bCancelPrevCmds); int DMW_ASC_ProgramNumberToMinor(UINT16 program_number); //------------------------ /* Âü°í) À̺¥Æ® Àü´Þ ±¸Á¶ Channel search µµÁß¿¡, °ü·ÃµÈ event message°¡ applicationÀ¸·Î Àü´ÞµÈ´Ù. Callback ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. callback ÇÔ¼ö Æ÷ÀÎÅÍ´Â start scan ÇÒ¶§ Àμö·Î Àü´ÞÇÑ´Ù. ApplicationÀº ÀÌ callback ÇÔ¼ö ³»¿¡¼­ ÇÊ¿äÇÑ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¿¹) eventNewChannel À̺¥Æ®°¡ ¿À¸é GUI¿¡ Àû´çÇÑ ¸Þ½ÃÁö Ç¥½Ã ¶Ç´Â Host¿¡ ¾Ë·ÁÁÜ. »ç¿ë¿¹) 1) ±âÁ¸ ä³Î Á¤º¸¸¦ ¸ðÁ¶¸® »èÁ¦Çϰí óÀ½ºÎÅÍ °Ë»öÇÏ´Â °æ¿ì. ¸ÕÀú DMW_CDB_ClearAll()À» È£ÃâÇÏ¿© UCMÀ» ÃʱâÈ­ÇÑ´Ù. 2) ±âÁ¸ ä³Î Á¤º¸¸¦ À¯ÁöÇÑ »óÅ¿¡¼­ º¯°æ»çÇ×À» °Ë»öÇÏ´Â °æ¿ì ±×³É auto scanÀ» ½ÃÀÛÇÑ´Ù. */ //*************************************************************** // // 5.3.1 Update Channel DB // // // // ÀÌ ¼½¼ÇÀÇ API ÇÔ¼ö´Â ¿ÀÁ÷ UCM¿¡ ´ëÇØ¼­¸¸ µ¿ÀÛÇÑ´Ù. (¸Þ¸ð¸®»ó¿¡ Á¸ÀçÇÏ´Â ÀνºÅϽº) // // NvRam »óÀÇ µ¥ÀÌÅÍ¿¡´Â Àû¿ëÇÏÁö "¾Ê´Â´Ù". // ----- // NvRamÀÇ µ¥ÀÌÅÍ´Â Application¿¡¼­ ¸í½ÃÀûÀΠȣÃâÀÌ ÀÖ´Â °æ¿ì¿¡¸¸ º¯°æµÈ´Ù. (see 5.3.2) // STATUS DMW_CDB_ClearAll(void); // initialize channel DB // UCMÀ» ´Ù Áö¿î´Ù. // NvRamÀº Áö¿ìÁö ¾Ê´Â´Ù. // NvRamÀÇ channel dB¸¦ Áö¿ì°í ½ÍÀ¸¸é ÀÌ ÇÔ¼ö È£Ãâ ÈÄ DMW_CDB_WriteUCM()À» È£ÃâÇÑ´Ù. // ±×·¯³ª UCM°ú NvRamÀÇ µ¿±âÈ­ Á¤Ã¥Àº °¢ product¸¶´Ù ´Ù¸£¹Ç·Î ¾Ë¾Æ¼­ ÇÑ´Ù. // ¿¹: Àü¿ø off ÇÒ¶§¸¸ µ¿±âÈ­, ¶Ç´Â ¸Å 1½Ã°£¸¶´Ù µ¿±âÈ­ µîµî.. STATUS DMW_CDB_UpdateChannel(xvctPtr_t vct, MPEG_PAT *pat, MPEG_PMT **pmtlist, int rf, int scan_flag, int *pnUid, int **puidBuf); // ÁÖ¾îÁø Å×À̺í Á¤º¸¸¦ ÀÌ¿ëÇÏ¿© ä³Î ¸ÊÀ» ±¸¼ºÇϰí UCM¿¡ Ãß°¡ÇÑ´Ù. // »õ·Ó°Ô Ãß°¡µÈ ä³ÎÀÇ uid buffer¸¦ ¸®ÅÏÇϹǷÎ, // caller´Â ÈÄ¼Ó Ã³¸® ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù. // // puidbuf´Â DHL_OS_Free¸¦ ÀÌ¿ëÇÏ¿© free µÇ¾î¾ß ÇÑ´Ù. int DMW_CDB_MakeNewUcm(int major, int minor, int rf, int vf, int st); // ÁÖ¾îÁø ÀÎÀÚ¸¦ ۰ªÀ¸·Î °®´Â »õ·Î¿î Ucm entry¸¦ »ý¼ºÇÑ´Ù. // ¸®ÅϰªÀº »õ·Î »ý¼ºµÈ Ucm entryÀÇ indexÀÌ´Ù. ÀÌ °ªÀ» »ç¿ëÇÏ·Á¸é ÀÌ ÇÔ¼ö call Àü¿¡ // UcmLockÀ» ÇØ¾ß ÇÑ´Ù. void *DMW_CDB_RegisterUcmDeleteHook(STATUS (*fn)(int idx)); // Channel Delete¸¦ ¼öÇàÇÒ ¶§ È£ÃâµÇ´Â hook functionÀ» µî·ÏÇÑ´Ù. // Ucm entry°¡ »èÁ¦µÉ¶§ ²À ¼öÇàÇØ¾ß ÇÏ´Â clean-up ·çƾÀÌ ÀÖÀ» °æ¿ì µî·ÏÇÏ¸é µÈ´Ù. // EPG DB ¿Í °°ÀÌ Ucm entry¿¡ system resource°¡ linkµÈ °æ¿ì °°ÀÌ »èÁ¦µÇµµ·Ï Çϱâ À§ÇØ »ç¿ëµÊ. // ¸®ÅϰªÀº previous hook functionÀ̹ǷΠÀ̸¦ ±â¾ïÇß´Ù°¡ // hook chain ³¡±îÁö Á¦´ë·Î callµÉ ¼ö ÀÖµµ·Ï °ü¸®ÇØ¾ß ÇÑ´Ù. STATUS DMW_CDB_DeleteUcmChannel(int index); // UCM index¸¦ ÁöÁ¤ÇÏ¿© ÇØ´ç ucm entry¸¦ »èÁ¦ÇÑ´Ù. // callerÃø¿¡¼­ Ucm lockÀ» ÇØ¾ß ÇÑ´Ù. STATUS DMW_CDB_DeleteChanInfoUid(UINT16 uid); // ÇØ´ç uid °ªÀ» °¡Áö´Â ä³Î Á¤º¸¸¦ »èÁ¦ÇÑ´Ù. STATUS DMW_CDB_DeleteRFChanInfo(int RF_number); // ÇØ´ç RF °ªÀ» °¡Áö´Â ¸ðµç ä³ÎÀ» »èÁ¦ÇÑ´Ù. // Ãâó°¡ VCT/PSI ±¸ºÐÇÏÁö ¾Ê°í ´Ù »èÁ¦ÇÑ´Ù. STATUS DMW_CDB_DeleteMajorChanInfo(int major_number); STATUS DMW_CDB_DeleteMajorMinorChanInfo(int major, int minor); // ÇØ´ç ä³ÎÀ» »èÁ¦ÇÑ´Ù. // »èÁ¦µÇ´Â ´ë»óÀº VctFlag==1ÀΠä³Î¿¡¸¸ ÇØ´çÇÑ´Ù. // ±âŸ ´Ù¸¥ Çʵå´Â °ü°è¾ø´Ù. (inactive channelµµ »èÁ¦) STATUS DMW_CDB_DeleteAllAnalogChannel(void); // UCM¿¡¼­ analog ä³Î Á¤º¸¸¦ ¸ðµÎ »èÁ¦ÇÑ´Ù. // digital only stb¿¡¼­ À¯¿ëÇÑ ÇÔ¼ö. void DMW_CDB_DeleteDisabledChannel(void); // disabled flag set µÈ ä³Î¸¸ ¸ðµÎ »èÁ¦. STATUS DMW_CDB_SetFavChannel(int index); // set a channel as active channel STATUS DMW_CDB_ReleaseFavChannel(int index); // set a channel as inactive channel // // UCM¿¡ ÀÖ´Â channel list Áß¿¡¼­ ÀϺθ¦ ¼±ÅÃÇÏ¿© Favorite channel list¸¦ ¸¸µç´Ù. // channel Up/Down Ű·Î ä³Î º¯°æÀ» ÇÒ ¼ö Àִ ä³Î ¸®½ºÆ®ÀÌ´Ù. // UCMÀÇ skip field¸¦ ÀÌ¿ëÇÏ¿© ±¸ºÐÇÑ´Ù. skipÀÌ FALSEÀ̸é FavList¿¡ Æ÷ÇÔµÈ °ÍÀÌ´Ù. // STATUS DMW_CDB_SetSurfChannel(int index, int prev_index); // insert a channel in Surf channel link STATUS DMW_CDB_ReleaseSurfChannel(int index); // delete a channel in Surf channel link // // Surf channel list (SCM)¸¦ ¸¸µç´Ù. // ÇÔ¼ö ÀÎÀÚ·Î »ç¿ëµÇ´Â index °ªµéÀº ¸ðµÎ UCM indexÀ̹ǷΠcallerÀÇ lockÀÌ ÇÊ¿äÇÑ ÇÔ¼öµéÀÌ´Ù. // // void DMW_CDB_InvalidateAllPidInfo(void); // cafrii 060630 add // prescan pid¸¦ ÀÌ¿ëÇÑ tuningÀ» ÇÏÁö ¸øÇϵµ·Ï // DB¿¡ ÀÖ´Â ¸ðµç pid Á¤º¸¸¦ invalidate½ÃŲ´Ù. void DMW_CDB_RegisterChannelUcmSymbols(void); //*************************************************************** // // Channel Specific Data Access API // // const char *CsdTagString(int tag); void DMW_CDB_PrintCsd(ChannelSpecificData *csd, int num_csd, int indent, int detailLevel); void DMW_CDB_DeleteUcmCsd(int idx); // ÇØ´ç indexÀÇ UCM entry¿¡ ¿¬°áµÈ csd record¸¦ »èÁ¦ÇÑ´Ù. void DMW_CDB_DeleteAllUcmCsd(void); // ¸ðµç csd ¸¦ »èÁ¦ÇÑ´Ù. STATUS DMW_CDB_DeleteCsd(ChannelSpecificData *csd, int num_csd); int DMW_CDB_DeleteCsdEntry(ChannelSpecificData *csd, int num_csd, int tag); ChannelSpecificData * DMW_CDB_DuplicateCsd(ChannelSpecificData *csd, int num_csd, int max_csd); STATUS DMW_CDB_UpdateCsd(ChannelSpecificData **pdst, int *pdst_num, int *pdst_max, ChannelSpecificData *src, int src_num); STATUS DMW_CDB_UpdateCsdEntry(ChannelSpecificData **pdst, int *pdst_num, int *pdst_max, int tag, int len, UINT8 *ptr); // ÇѰ³ÀÇ CSD entry¸¦ update ÇÏ´Â ÇÔ¼ö STATUS DMW_CDB_UpdateUcmCsdEntry(int rf, int source_id, int tag, int length, UINT8 *ptr); // DMW_CDB_UpdateCsdEntry ÀÇ ´Ù¸¥ parameter ¹öÀü //*************************************************************** // // 5.3.2 Read/Write Channel DB in NvRam // // // NvRamÀº Å©°Ô EEPROM (device_0)°ú Flash memory (device_1)·Î ³ª´©¾îÁ® ÀÖ´Ù. // Á¦Ç°¿¡ µû¶ó¼­ Flash memoryÀÇ NvRam ¿ëµµ ºÎºÐÀÌ Á¸ÀçÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. (eeprom only) // //------------------------------------- // Level 1 API. // HAL function ¹Ù·Î À§ÀÇ API. // NvRam Structure // // device 0 (0x0 ~ ) // +----------------------------+ // | | »ç¿ë°¡´ÉÇÑ ¿µ¿ª. // | ... | // | | // +----------------------------+ <-- DMW_CDB_GetNvRamAvailableSize(0) // // device 1 (0x80000000 ~ ) // +----------------------------+ // | ... | »ç¿ë°¡´ÉÇÑ ¿µ¿ª. // | | // +----------------------------+ <-- DMW_CDB_GetNvRamAvailableSize(1) // device 0: EEPROM // device 1: Flash // // Device 0: 0x0 ~ 0x7FFFFFFF // Device 1: 0x80000000 ~ 0xFFFFFFFF. Flash ¿µ¿ª (device_1)Àº addressÀÇ MSB°¡ 1. // STATUS DMW_CDB_InitNvRam(void); STATUS DMW_CDB_LowLevelFormatNvRam(void); // °øÀå ÃâÇÏÈÄ 1ȸ ½ÇÇàÇØÁֱ⸸ ÇÏ¸é µÈ´Ù. // ÇÁ·Î±×·¥ÀÌ ¾÷µ¥ÀÌÆ® µÉ °æ¿ì Çѹø ´õ Æ÷¸ËÇØÁà¾ß ¾ÈÀüÇÏ´Ù. // STATUS DMW_CDB_CheckNvRam(void); // NvRamÀÌ Á¦´ë·Î Æ÷¸ËÀÌ µÇ¾úÀ¸¸ç »ç¿ë °¡´ÉÇÑÁö üũÇÑ´Ù. UINT32 DMW_CDB_GetNvRamAvailableSize(int device); // °¢ ÀåÄ¡º° NvRamÀÇ »ç¿ë°¡´ÉÇÑ ¿µ¿ªÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ¸®ÅÏÇÑ´Ù. // STATUS DMW_CDB_ReadNvRam(UINT32 address, UINT32 size, UINT8 *buf); STATUS DMW_CDB_WriteNvRam(UINT32 address, UINT32 size, UINT8 *buf); // application¿¡¼­ È£Ãâ °¡´ÉÇÑ NvRam access API. //------------------------------------- // Level 3 API. // // Manages Ucm storing format and Raw DB. // // ¾Æ·¡ API´Â ¸ðµÎ NvRam¿¡ ÀúÀåµÈ UCMÁ¤º¸¸¦ ´ë»óÀ¸·Î ÇÑ´Ù. //extern const UINT8 gUcmStoringVersion; // see DMW_ChannelDB.c for ucm storing version. UINT32 DMW_CDB_GetUcmItemStoringSize(void); // UCM storing format ±¸Á¶¿¡¼­ ÇÑ UCM itemÀÌ NvRam¿¡ ÀúÀåµÉ ¶§ Â÷ÁöÇÏ´Â Å©±â. // sizeof(UCM_DB_T)¿Í´Â ´Ù¸¦ ¼ö ÀÖ´Ù. // application¿¡¼­ NvRam¿¡ µé¾î°¥ DB Å©±â °è»êÀ» ÇÒ ¶§¿¡´Â // ÀÌ ÇÔ¼öÀÇ ¸®ÅϰªÀ» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù. // // UCMÀº ¸Þ¸ð¸®¿¡ ÀÖ´Â »óÅ ±×´ë·Î writeÇÏÁö ¾Ê´Â´Ù´Â Á¡¿¡ À¯ÀÇÇÑ´Ù. //------------------------------------- // Level 4 API // // UCM Header ±¸Á¶¸¦ Áö¿øÇÏ´Â »õ·Î¿î UCM I/O API // STATUS DMW_CDB_InitUCM2(UINT32 *paddr, int n_db, BOOL bSyncNow); STATUS DMW_CDB_WriteUCM2(UINT32 address, int max_db_size, const char *description); // cafrii 041129 change STATUS DMW_CDB_ReadUCM2(UINT32 address); STATUS DMW_CDB_WriteRawDB2(UINT32 address, UINT8 *buf, int newsize); STATUS DMW_CDB_ReadRawDB2(UINT32 address, UINT8 *buf, int newsize); // Utility API // STATUS DMW_CDB_SyncNvRam(UINT32 address); UINT32 DMW_CDB_CalcCRC32(UINT32 crc_start, const UINT8 *data, UINT32 len); BOOL DMW_CDB_IsNvRamSyncWorking(void); // cafrii 060802 add void DMW_CDB_WaitForNvRamSyncDone(void); void DMW_CDB_InvalidateNvRamCache(void); // Debugging API // void DMW_CDB_RegisterChannelNvRamSymbols(void); //------------------------------------- // // CSD DB Access API // // // int DMW_CDB_FlattenCsd(ChannelSpecificData *csd, int num_csd, UINT8 *buf, int buf_limit); // WriteCSD¿¡¼­ ³»ºÎÀûÀ¸·Î »ç¿ëÇÏ´Â ÇÔ¼ö STATUS DMW_CDB_InitCSD(UINT32 *pAddrList, int n_csd_db); STATUS DMW_CDB_WriteCSD(UINT32 db_start_address, int max_size); STATUS DMW_CDB_ReadCSD(UINT32 db_start_address, int max_size); // // ÁöÁ¤ÇÑ NvRam ¿µ¿ª (½ÃÀÛ ÁÖ¼Ò, ÃÖ´ë Å©±â) ¿¡ Àüü CSD ¸¦ ±â·ÏÇϰí ÀоîµéÀδÙ. // /* UCM DB Å©±â °è»ê µµ¿ò¸»: 16K : UCM entry ¾à 500°³ ºÐ·® (overhead°¡ ÀÖÀ¸¹Ç·Î Á¤È®ÇÑ ¼ýÀÚ´Â ¾à°£ ´Þ¶óÁú ¼ö ÀÖÀ½) 32K : UCM entry ¾à 1000°³ ºÐ·® CSD DB Å©±â °è»ê µµ¿ò¸»: 16K : ÇÑ UCM entry ´ç ÃÖ´ë CSD Å©±â¸¦ 100 À¸·Î Çϸé, 163°³ ä³ÎÀÇ CSD¸¦ ÀúÀå °¡´É Analog ä³ÎÀÇ °æ¿ì¿¡´Â CSD ´Â User Channel Name ¹Û¿¡ ¾øÀ½. ¸¸¾à User Channel Name ÀÌ ¾ø°í µðÁöÅРä³Î Áß ¾à Àý¹Ý Á¤µµ¸¸ CSD¸¦ °¡Áø´Ù°í °¡Á¤ÇÏ¸é µðÁöÅРä³Î ¾à 320°³, (¾Æ³¯·Î±× ä³Î °¹¼ö´Â µðÁöÅРä³Î °¹¼ö¿Í ºñ½ÁÇϹǷΠ¿ª½Ã 320°³) ÃÑ 640°³ ºÐ·®ÀÇ UCM entry ¿¡ ÇØ´çµÇ´Â Å©±â¶ó°í º¼¼ö ÀÖÀ½. POD UCM DBÀÇ °æ¿ì¿¡´Â Extended Channel Text °¡ ¾ø´Ù. */ // µ¶ÀÚÀûÀÎ Çü½ÄÀ¸·Î DB¸¦ °ü¸®Çϱâ À§ÇØ »ç¿ëÇÏ´Â ÇÔ¼ö. STATUS DMW_CDB_ReadRawDB(int dir_index, UINT8 *buf, int bufsize); STATUS DMW_CDB_WriteRawDB(int dir_index, UINT8 *buf, int newsize); /* $$$$ ¼³°è¹®¼­·ÎºÎÅÍÀÇ º¯°æ»çÇ×: from 030117 1. ¸ðµç APIÀÇ ¸¶Áö¸· ÀÎÀÚ·Î BOOL air °¡ Ãß°¡µÊ. air == TRUEÀ̸é Áö»óÆÄ, FALSE À̸é ÄÉÀ̺íÀÇ °æ¿ìÀÌ´Ù. 2. ReadXX ÇÔ¼öÀÇ ÀÎÀÚ¸¦ ¸ðµÎ pointer ÇüÀ¸·Î º¯°æÇÏ¿© °á°ú¸¦ ¸®ÅÏÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù. (ReadShortNameÇÔ¼öÀÇ ÀÎÀÚ´Â Á¦¿ÜÇÔ.) ¹öÆÛ Æ÷ÀÎÅÍ´Â NULLÀÌ ¾Æ´Ï¾î¾ß ÇÑ´Ù. (NULL üũÇÏÁö ¾ÊÀ½) 3. »õ API Ãß°¡. DMW_CDB_GetNvRamAvailableSize(device) DMW_CDB_GetUcmItemStoringSize DMW_CDB_Read/WriteRawDB 4. Level1/2/3 API ºÐ¸®. Level 1 API Ãß°¡. UCM storing formatÀÌ UCM structure¿Í ´Ù¸§À» ¸íÈ®È÷ ÇÔ. */ /* Âü°í) ÀÌ °³°³ÀÇ ÇÔ¼öµéÀº »ç½Ç Ưº°È÷ »ç¿ëÇÒ °æ¿ì´Â ¾ø´Ù. ReadUCM(), WriteUCM()À» ´ëºÎºÐ »ç¿ëÇÏ¿© Àüü DB¸¦ load/save Çϵµ·Ï ÇÑ´Ù. ±×·¯³ª ´ÙÀ½°ú °°Àº ½Ã³ª¸®¿À°¡ ÀÖÀ» ¼ö ÀÖ´Ù. Áß°£¿¡ ä³Î Á¤º¸°¡ º¯°æµÇ¾ú´Ù¸é ¸Þ¸ð¸®¿¡ ÀÖ´Â UCM DB¸¦ ¼öÁ¤Çϰí NvRam¿¡ update¸¦ ÇØ¾ß Çϴµ¥, ÀÌ ¶§ Àüü ³»¿ëÀ» writeÇÏ·Á¸é ½Ã°£ÀÌ °É¸± °æ¿ì°¡ ÀÖÀ¸¹Ç·Î ÇÊµå ´ÜÀ§·Î updateÇÏ´Â°Ô ÇÊ¿äÇÏ´Ù. NvRamÀÇ ½Çü(EEPROM ¶Ç´Â Flash)¿¡ °üÇÑ Æ¯¼ºÀº application¿¡¼­ ¾Ë¾Æ¼­ ÁÖÀÇÇÏ¿© ÄÚµùÇØ¾ß ÇÑ´Ù. */ #ifdef __cplusplus } #endif #endif /******************************************************************** $Log: DMW_ChannelAPI.h,v $ 2.04 2004/03/15 CBTF_AnalogCableSystemDetect Ãß°¡ 2.03 2004/12/21 cafrii XDS °ü·Ã tag Ãß°¡ 2.02 2004/12/07 cafrii Cable System Detect °è¿­ evnet msg Ãß°¡ 2.01 2004/12/02 cafrii DMW_TUN_TuneChannelByUidAndFlag Ãß°¡ 2.00 2004/11/29 cafrii WriteUCM2 ¿¡ max_db_size ÀÎÀÚ Ãß°¡ CSD µ¥ÀÌÅÍÀÇ NvRam I/O API Ãß°¡ UCM¿¡ scrambled flag Ãß°¡ CBTF_CheckScrambleByVideoContext Ç÷¡±× À̸§ º¯°æ (È¥¶õ¹æÁö) 041126 »ç¿ëÇÏÁö ¾Ê´Â °ªµé ¸ðµÎ »èÁ¦. CSD °ü·Ã data structure, API Ãß°¡ 041122 MMode_XX °ªµé »èÁ¦.. 040830 ChannelType/FreqStd, Freq.c °ü·Ã ÄÚµå Channel.h·Î À̵¿ 040611 FindMultiStandardRF Ãß°¡ 040607 #include DMW_EEPROM.h »èÁ¦ÇÔ (ÇÊ¿äÇÑ ¸ðµâ¿¡¼­¸¸ ¼±ÅÃÀûÀ¸·Î include ÇØ¾ßÇÔ) Revision 1.10 ?? pEpgDB added New channel tuning policy applied. Revision 1.03 2003/3/4 cafrii DMW_MSC_FindUpper[Lower]Major() Ãß°¡. DMW_ASC_StopScan()¿¡¼­ killTask ±â´É ¹«½ÃÇÔ. Revision 1.02 2003/02/17 cafrii FineTune type changed. some API added. Revision 1.01 2003/01/28 cafrii NvRam strategy, some prototype is changed. Revision 1.0 2003/01/13 cafrii Initial coding from ground, based on M/W API document ********************************************************************/