/** @file DHL_UIO.h @brief User I/O module API header Copyright 2006~2010 Digital STREAM Technology, Inc. All Rights Reserved */ #ifndef __DHL_UIO_API_H__ #define __DHL_UIO_API_H__ #include "DHL_OSAL.h" #ifdef __cplusplus extern "C" { #endif #if COMMENT ____Overview____(){} #endif /** @file DHL_UIO.h module overview - ´ÙÀ½°ú °°Àº »ç¿ëÀÚ ÀÔÃâ·Â ±â´ÉÀ» Á¦°øÇÑ´Ù. - IR ¸®¸ðÄÁ ÀÔ·Â - Àü¸é º£Á© µîÀÇ ¹öư ÀÔ·Â - LED, 7-¼¼±×¸ÕÆ®, VFD µîÀÇ Ãâ·Â - º°µµÀÇ MICOMÀÌ µû·Î Á¦°øµÇ´Â °æ¿ì¿Í, SoC¿¡¼­ Á÷Á¢ ó¸®ÇÏ´Â °æ¿ì¿¡ µû¶ó ³»ºÎ µ¿ÀÛÀº ¸¹ÀÌ ´Þ¶óÁö°ÚÁö¸¸ API ÀÎÅÍÆäÀ̽º ±¸¼º¿¡¼­´Â ±¸ºÐÇÏÁö ¾Ê´Â´Ù. - ¸ðµç ÀÔ·Â µ¥ÀÌÅÍ´Â ´ÜÀÏ ·çƾ¿¡¼­ 󸮵ȴÙ. (tDHL_UIO_InputCb) - UIO API ¼³°è¿¡ ´ëÇÑ »ó¼¼ÇÑ ³»¿ëÀº "DHL UIO API Design" ¹®¼­¸¦ Âü°íÇÑ´Ù. - dependencies - Ç÷§Æû ±¸¼º¿¡ µû¶ó ´Þ¶óÁú ¼ö ÀÖ°ÚÁö¸¸ DHL_UART ¸ðµâ°ú, DHL_SYS ÀÇ GPIO ºÎºÐÀ» »ç¿ëÇÑ´Ù. - ÇÏÁö¸¸ ÀÌ ¸ðµâµéÀÇ public API¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï°í ³»ºÎ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¿¬°áµÇ¹Ç·Î ÀÌ UIO API »óÀ¸·Î dependency´Â º¸ÀÌÁö ¾Ê´Â´Ù. */ #if COMMENT ____Config____(){} #endif /* Çì´õ ÆÄÀÏ¿¡ Æ÷ÇԵǾî¾ß ÇÒ global configÀº ¾ÆÁ÷±îÁö´Â ¾øÀ½. ¸¸¾à ÀÖ´Ù¸é º°µµÀÇ ¼³Á¤ ÆÄÀÏ¿¡ Ãß°¡Çϵµ·Ï ÇÏÀÚ. #include "DHL_Config.h" */ #if COMMENT ____Types____(){} #endif /** @brief UIO ¸ðµâ¿¡¼­ ó¸®ÇÏ´Â ¸ðµç µ¥ÀÌÅÍ Å¸ÀÔ. ÀÔ·Â Àü¿ë, Ãâ·Â Àü¿ëÀ¸·Î ³ª´©¾îÁ® ÀÖÀ½. */ typedef enum { eDHL_UIO_INPUT_NONE = -1, /*------- input */ eDHL_UIO_INPUT_MIN = 0, eDHL_UIO_INPUT_IR = eDHL_UIO_INPUT_MIN, eDHL_UIO_INPUT_KEYPAD, eDHL_UIO_INPUT_GPIO, eDHL_UIO_INPUT_MICOM, eDHL_UIO_INPUT_MAX, /*------- output */ eDHL_UIO_OUTPUT_MIN = 8, eDHL_UIO_OUTPUT_LED = eDHL_UIO_OUTPUT_MIN, eDHL_UIO_OUTPUT_7SEG, eDHL_UIO_OUTPUT_VFD, eDHL_UIO_OUTPUT_MAX, } tDHL_UIO_Type; #ifdef __DEFINE_UIO_STRINGS__ const char *DHL_UIO_TypeName(tDHL_UIO_Type s) { return ( (s)==eDHL_UIO_INPUT_IR ? "ir" : \ (s)==eDHL_UIO_INPUT_KEYPAD ? "kpd" : \ (s)==eDHL_UIO_INPUT_GPIO ? "gpb" : \ (s)==eDHL_UIO_INPUT_MICOM ? "mic" : \ (s)==eDHL_UIO_OUTPUT_LED ? "led" : \ (s)==eDHL_UIO_OUTPUT_7SEG ? "seg" : \ (s)==eDHL_UIO_OUTPUT_VFD ? "vfd" : \ "??" ); } #else const char *DHL_UIO_TypeName(tDHL_UIO_Type source); #endif /** @brief UIO Ű ÀÔ·Â Note! IR ÀԷ¿¡ ´ëÇØ¼­´Â raw data to UIO Code º¯È¯À» client ¿¡¼­ ó¸®ÇÑ´Ù. DHL ·¹º§¿¡¼­´Â ±×³É Àüü µ¥ÀÌÅ͸¦ µÇµ¹·Á ÁØ´Ù. */ typedef enum { eDHL_KEY_NONE, eDHL_KEY_POWER, eDHL_KEY_UP, eDHL_KEY_DOWN, eDHL_KEY_LEFT, eDHL_KEY_RIGHT, eDHL_KEY_SELECT, eDHL_KEY_BACK, eDHL_KEY_MENU, eDHL_KEY_EXIT, eDHL_KEY_SOURCE, eDHL_KEY_INFO, eDHL_KEY_GUIDE, eDHL_KEY_HELP, eDHL_KEY_FUNCTION, eDHL_KEY_DISPLAY, eDHL_KEY_SCREEN, eDHL_KEY_RESOLUTION, eDHL_KEY_VIDEO, eDHL_KEY_ASPECT, eDHL_KEY_AUDIO, eDHL_KEY_SOUND, eDHL_KEY_CAPTION, eDHL_KEY_SIGNAL, eDHL_KEY_VOL_UP, eDHL_KEY_VOL_DOWN, eDHL_KEY_CH_UP, eDHL_KEY_CH_DOWN, eDHL_KEY_0, eDHL_KEY_1, eDHL_KEY_2, eDHL_KEY_3, eDHL_KEY_4, eDHL_KEY_5, eDHL_KEY_6, eDHL_KEY_7, eDHL_KEY_8, eDHL_KEY_9, eDHL_KEY_RESET, } tDHL_UIO_Key; /** @brief UIO ÀÔ·ÂÀÇ °¢Á¾ ¼¼ºÎ µ¿ÀÛÀ» ¼³Á¤ÇÒ ¶§ »ç¿ëµÇ´Â ¼³Á¤ ŸÀÔ. DHL_UIO_Config() API ¿¡¼­ »ç¿ëµÈ´Ù. DHL_UIO_Config() API¿¡¼­ ¶Ç´Ù¸¥ ÀÎÀÚÀÎ void *param °ú °°ÀÌ »ç¿ëµÈ´Ù. ¾Æ·¡ °¢ type º°·Î ¾î¶² Ãß°¡ ÆÄ¶ó¹ÌÅͰ¡ ÇÊ¿äÇÑÁö ¸í½Ã µÇ¾î¾ß ÇÑ´Ù. */ typedef enum { /** ----------------------------------- ÆÄ¶ó¹ÌÅÍ: BOOL bEnablePassThrough; uio 󸮱⸦ bypass ½Ãų °ÍÀÎÁö ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù. TRUE À̸é feeding µÈ µ¥ÀÌÅÍ´Â ±×´ë·Î client¿¡°Ô bypass µÈ´Ù. bypass¸¦ Çϸé DHL ³»ºÎÀÇ GPIO ¹öư ¹Ýº¹ ±â´É µîÀº Á¦°øµÇÁö ¾Ê´Â´Ù. client ¿¡¼­ ¸ðµç ¼¼ºÎ 󸮸¦ ¼öÇàÇϰíÀÚ ÇÒ ¶§ »ç¿ëÇÑ´Ù. */ eDHL_UIO_Cfg_PassThrough, /** ----------------------------------- ÆÄ¶ó¹ÌÅÍ: BOOL bUseReleaseEvent; not yet.. */ eDHL_UIO_Cfg_UseReleaseEvent, /** ----------------------------------- ÆÄ¶ó¹ÌÅÍ: tDHL_UIO_InputDataFilter *filter IR ÀÔ·Â µ¥ÀÌÅÍ¿¡ ´ëÇØ¼­ pre-filteringÀ» ¼öÇàÇÑ´Ù. ÁַΠƯÁ¤ vendor code¸¦ °É·¯ ³»±â À§Çؼ­ ¼³Á¤ÇÑ´Ù. À̰ÍÀ» ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é ¸ðµç ÀÔ·ÂÀÌ uio filter¸¦ Åë°úÇÏ¿© client¿¡ Àü´ÞµÈ´Ù. client ¿¡¼­ vendor code filteringÀ» ÇØµµ µÇÁö¸¸, uio ó¸® ·çƾ ÀÌÀü¿¡ ÇÏ´Â °ÍÀÌ ´õ È¿À²ÀûÀÌ´Ù. */ eDHL_UIO_Cfg_InputDataFilter, /** ----------------------------------- ÆÄ¶ó¹ÌÅÍ: tDHL_UIO_DebounceTiming *timing GPIO ¹öư ÀԷ°ú, KeyPad ¹öư ÀԷ¿¡ ´ëÇØ¼­ debounce timingÀ» ¼³Á¤ÇÑ´Ù. ¾ÆÁ÷ ¿Ï¼ºµÇÁö ¾Ê¾ÒÀ½. ÀÏ´Ü driver/hal ³»ºÎÀÇ µðÆúÆ® ¼³Á¤ ´ë·Î µ¿ÀÛÇÑ´Ù. customer¿¡ µû¶ó ´Ù¸¥ debounce ¼³Á¤ÀÌ ÇÊ¿äÇÏ´Ù¸é ±× ¶§ ±¸ÇöÇÏÀÚ. */ eDHL_UIO_Cfg_Debounce, /** ----------------------------------- ÆÄ¶ó¹ÌÅÍ: tDHL_UIO_RepeatSetting *repeat IR, GPIO ¹öư, KeyPad ¹öư µî¿¡ ´ëÇØ¼­ ¹Ýº¹ ±â´ÉÀ» ¼³Á¤ÇÑ´Ù. all zero¸¦ ¼³Á¤ÇÏ¿© ¹Ýº¹ ±â´É ÀÚü¸¦ disable ÇÒ ¼öµµ ÀÖ´Ù. µðÆúÆ® °ªÀº »ó¼¼ ŸÀ̹ÖÀº ¼Ò½º ÄÚµå ³»¿¡ fixµÇ¾î ÀÖ´Ù. ÀÌ ¼³Á¤Àº ¾î¶² Á¾·ùÀÇ Å°°¡ ÀԷµǾú´ÂÁö¿¡ »ó°ü ¾øÀÌ ÀÏ·üÀûÀ¸·Î Àû¿ëµÇ´Â global ¼³Á¤ÀÌ´Ù. °¢ Ű º°·Î repeat Àû¿ë ¿©ºÎ¸¦ ´Ù¸£°Ô ÇÑ´Ù´ø°¡, repeat timingÀ» ´Ù¸£°Ô Àû¿ëÇÏ°í ½Í´Ù¸é ¾Æ·¡ eDHL_UIO_Cfg_CheckRepeatCb À» »ç¿ëÇØ¾ß ÇÑ´Ù. */ eDHL_UIO_Cfg_RepeatSetting, /** ----------------------------------- ÆÄ¶ó¹ÌÅÍ: tDHL_UIO_CheckRepeatCb callback repeat ¿©ºÎ¸¦ ÀԷµǴ °¢ Ű º°·Î ´Ù¸£°Ô Àû¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì »ç¿ëÇÑ´Ù. ¿©±â¼­ callbackÀ» µî·ÏÇØ ³õÀ¸¸é, ¸ðµç Ű ÀÔ·ÂÀÌ ÀÖÀ» ¶§ ¸¶´Ù ÁöÁ¤ÇÑ callbackÀÌ È£ÃâµÇ¸ç, ±× ¶§ ¸¶´Ù ÀԷ Ű¿¡ µû¸¥ °¢°¢ repeat ¼³Á¤À» ÇØ ÁÖ¸é µÈ´Ù. ÁÖÀÇ: ÆÄ¶ó¹ÌÅÍ callbackÀº ÇÔ¼ö Æ÷ÀÎÅÍÀÌ´Ù. ÆÄ¶ó¹ÌÅÍ¿¡ NULLÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ±×·² °æ¿ì µ¥ÀÌÅÍ º° ¹Ýº¹ ¼³Á¤Àº ÇÏÁö ¾Ê°í global ¼³Á¤ (À§ eDHL_UIO_Cfg_RepeatSetting À¸·Î ¼³Á¤ÇÑ °ª)¿¡ µû¸¥´Ù. */ eDHL_UIO_Cfg_CheckRepeatCb, } tDHL_UIO_ConfigType; /** @brief UIO input data filter ±¸Á¶Ã¼. IR ÀÔ·Â µ¥ÀÌÅÍÀÇ pre-filteringÀ» Çϱâ À§ÇÑ ÇÊÅÍ Á¤º¸ÀÌ´Ù. ÁÖ·Î IR code Áß¿¡¼­ vendor code °É·¯³»±â À§ÇÑ ¿ëµµ·Î »ç¿ëµÈ´Ù. Áï IR ÀÔ·Â µ¥ÀÌÅÍ Áß¿¡¼­ ƯÁ¤ vendor code ¸¸ ó¸®ÇϰíÀÚ ÇÒ ¶§, ƯÁ¤ Á¤º¸¸¸ passÇϵµ·Ï ÀÌ ÇÊÅ͸¦ ÀÛ¼ºÇÑ ÈÄ, DHL_Config(eDHL_UIO_Cfg_InputDataFilter, filter) ¿Í °°ÀÌ È£ÃâÇÏ¸é µÈ´Ù. ¹ü¿ë filter ±¸Á¶¸¦ äÅÃÇÑ ÀÌÀ¯´Â Áö¿øÇÏ°Ô µÉ IR ¹æ½ÄÀÌ ¿©·¯°¡Áö°¡ µÉ ¼ö Àֱ⠶§¹®. Âü°í·Î NEC IR ¹æ½ÄÀÇ °æ¿ì IR data´Â 4¹ÙÀÌÆ®ÀÌ´Ù. */ #define DHL_UIO_MAX_INPUT_FILTER 10 typedef struct { int numFilter; struct { UINT32 mask; UINT32 data; } filters[DHL_UIO_MAX_INPUT_FILTER]; /* filter pass ¾Ë°í¸®Áò 'numFilter' °¹¼ö¿¡ ÇØ´çµÇ´Â ¸ðµç filter üũ. ÀÔ·Â µ¥ÀÌÅ͸¦ 'mask'·Î masking ÇÏ¿© 'data'¿Í ºñ±³. ¾î´À Çϳª¶óµµ match°¡ µÇ¸é pass. Çϳªµµ match°¡ ¾ÈµÇ¸é throw out. */ } tDHL_UIO_InputDataFilter; /** @brief °¢Á¾ ¹Ýº¹ ¼³Á¤ ½Ã »ç¿ëÇϴ ŸÀÔ. tDHL_UIO_CheckRepeatCb ŸÀÔÀÇ ÀÎÀÚ·Î »ç¿ëµÈ´Ù. ¹Ýº¹ ¿¹: msIntervalFirst = 600 msIntervalNext = 200 ¸ðµÎ millisecond ´ÜÀ§ÀÌ´Ù. */ typedef struct { UINT32 msIntervalFirst; ///< ÃÖÃÊ Áö¿¬ ½Ã°£ UINT32 msIntervalNext; ///< µÎ¹øÂ° ºÎÅÍÀÇ Áö¿¬ ½Ã°£ } tDHL_UIO_RepeatSetting; /** @brief µ¥ÀÌÅÍ º° Ű ¹Ýº¹ ¼³Á¤ ¿©ºÎ ¹× ¼³Á¤ ŸÀ̹ÖÀ» queryÇÏ´Â Äݹé. source, data: [IN] DHL ¿¡¼­ ¼³Á¤Çؼ­ ÄݹéÀ» È£ÃâÇÔ. settings: [OUT] client°¡ callback ³»¿¡¼­ °ªÀ» ¼³Á¤ÇÑ ÈÄ ¸®ÅÏ. settings ³»ÀÇ °ªÀÌ ¸ðµÎ 0ÀÎ °æ¿ì, ÇØ´ç data¿¡ ´ëÇØ¼­ ¹Ýº¹ ±â´ÉÀ» »ç¿ëÇÏÁö ¾ÊÀ½À» ÀǹÌÇÑ´Ù. */ typedef void (*tDHL_UIO_CheckRepeatCb)(tDHL_UIO_Type source, UINT32 data, tDHL_UIO_RepeatSetting *settings); /** @brief UIO callback ¿¡¼­ »ç¿ë µÉ flag ŸÀÔ. ¾Æ·¡ \#define flag µéÀÇ Á¶ÇÕÀÌ´Ù. */ typedef UINT32 tDHL_UIO_Flag; #define DHL_UIO_FLAG_Released 0x01 // ¹öư ·ù ¿¡¼­¸¸ »ç¿ë. set À̸é release µÇ¾úÀ½À» ÀǹÌ. //#define DHL_UIO_FLAG_Pressed 0x02 // ¹öư·ùÀÇ °æ¿ì, set À̸é pressed, non-set À̸é released. #define DHL_UIO_FLAG_IsRepeat 0x80 // set À̸é HW repeat »óÅÂÀÓ. ÀÌ flag´Â PressedÀÇ Àǹ̸¦ ³»Æ÷Çϰí ÀÖÀ½. /** @brief ó¸® µÇ°í ³­ ÈÄÀÇ ÃÖÁ¾ µ¥ÀÌÅͰ¡ Àü´Þ µÇ´Â Äݹé. DHL_UIO_RegisterCallback API¸¦ ÀÌ¿ëÇÏ¿© µî·ÏµÈ´Ù. */ typedef void (*tDHL_UIO_InputCb)(tDHL_UIO_Type source, UINT32 data, tDHL_UIO_Flag flag); /** @brief Generic Purpose UIO output control. */ typedef enum { /**----------------------------- Low-level control */ eDHL_UIO_CT_LowLevelMin = 0x100, /** LED °¢°¢À» on/off control. ÇÑ ¹ø¿¡ ÇϳªÀÇ led ¸¸ control °¡´ÉÇÏ´Ù. id : ´Â led °¢°¢À» ±¸ºÐÇÏ´Â index. 0 ºÎÅÍ ½ÃÀÛÇÏ´Â enum °ª. param: 0 ¶Ç´Â 1 */ eDHL_UIO_CT_LED = 0x100, eDHL_UIO_CT_7SEG, eDHL_UIO_CT_VFD, /**----------------------------- High-level control */ eDHL_UIO_CT_HighLevelMin = 0x1000, /** °£´ÜÇÑ (1~2 bits wide) »óÅ ǥ½Ã±â LED°¡ µÉ ¼öµµ ÀÖ°í, 7SegmentÀÇ Æ¯Á¤ bit led, ¶Ç´Â VFD ³»ÀÇ Æ¯Á¤ ¿µ¿ª on/off °¡ µÉ ¼ö ÀÖÀ½. ¾î¶°ÇÑ Output type ÀÎÁö´Â ±¸ºÐÇÏÁö ¾Ê´Â´Ù. MICOMÀ» ÅëÇÏ¿© Á¦¾îµÇ´Â °æ¿ì¿¡´Â ³»ºÎ¿¡¼­ UART command¸¦ º¸³»¾ß µÉ ¼öµµ ÀÖÀ½. id : tDHL_UIO_IndicatorType param: °¢ indicator type º°·Î Á¤ÀÇµÈ µ¥ÀÌÅÍ. */ eDHL_UIO_CT_Indicator, } tDHL_UIO_ControlType; /** @brief eDHL_UIO_CT_Indicator ÀÇ ºÎ°¡ µ¥ÀÌÅÍ Å¸ÀÔ. */ typedef enum { eDHL_UIO_IT_Power, // power state (0:off, 1:stby, 2:full) eDHL_UIO_IT_Status0, // generic purpose status eDHL_UIO_IT_Status1, eDHL_UIO_IT_Status2, eDHL_UIO_IT_Status3, eDHL_UIO_IT_IR, // ir input detect eDHL_UIO_IT_Network, // network connection alive } tDHL_UIO_IndicatorType; #if COMMENT ____Defines____(){} #endif #define DHL_UIO_IsInput(t) ((t)>=eDHL_UIO_INPUT_MIN && (t)=eDHL_UIO_OUTPUT_MIN && (t) ¹®Á¦ ÀÖÀ½.. Segment via micom: boot, play.., goodbye control(micom_msg, msg_id) vfd via micom */ /** @brief UIO ÀԷ¿¡ °øÅëÀûÀ¸·Î »ç¿ëµÇ´Â callback µî·Ï. ÀÔ·Â µ¥ÀÌÅÍ Á¾·ù¿¡ »ó°ü ¾øÀÌ ¸ðµç ÀÔ·Â µ¥ÀÌÅÍ´Â ÀÌ callbackÀ» ÅëÇØ Àü´ÞµÈ´Ù. DHL_UIO_Config ¼³Á¤¿¡ µû¶ó ³»ºÎ¿¡¼­ °¡°ø 󸮰¡ µÉ ¼öµµ ÀÖ´Ù. @param[in] cb µî·Ï ÇÒ Äݹé ÇÔ¼ö. */ void DHL_UIO_RegisterCallback(tDHL_UIO_InputCb cb); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __DHL_UIO_API_H__ */