xref: /utopia/UTPA2-700.0.x/projects/tmplib/include/drvIR.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi /// @file   drvIR.h
98*53ee8cc1Swenshuai.xi /// @brief  IR Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi /*! \defgroup G_IR IR interface
103*53ee8cc1Swenshuai.xi     \ingroup  G_PERIPHERAL
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi     \brief
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi     Commonly, remote controls are Consumer IR devices which send digitally-coded pulses of infrared radiation to control functions such as
108*53ee8cc1Swenshuai.xi     power, volume, tuning, temperature set point, fan speed, or other features. Remote controls for these devices are usually small wireless
109*53ee8cc1Swenshuai.xi     handheld objects with an array of buttons for adjusting various settings such as television channel, track number, and volume.
110*53ee8cc1Swenshuai.xi     For many devices, the remote control contains all the function controls while the controlled device itself has only a handful of essential primary controls.
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi     <b>Features</b>
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi     - Consumer electronics infrared protocols
115*53ee8cc1Swenshuai.xi     - Infrared, line of sight and operating angle
116*53ee8cc1Swenshuai.xi     - Remote control systems
117*53ee8cc1Swenshuai.xi     - The opto components, and circuits
118*53ee8cc1Swenshuai.xi 
119*53ee8cc1Swenshuai.xi     <b> IR Block Diagram: </b> \n
120*53ee8cc1Swenshuai.xi     \image html drvIR_pic1.png
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi     <b> Operation Code Flow: </b> \n
123*53ee8cc1Swenshuai.xi     -# Prepare IR setting for each operation
124*53ee8cc1Swenshuai.xi     -# Set and start IR in command handle
125*53ee8cc1Swenshuai.xi     -# Trigger IR
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi     \defgroup G_IR_INIT Initialization Task relative
128*53ee8cc1Swenshuai.xi     \ingroup  G_IR
129*53ee8cc1Swenshuai.xi     \defgroup G_IR_COMMON Common Task relative
130*53ee8cc1Swenshuai.xi     \ingroup  G_IR
131*53ee8cc1Swenshuai.xi     \defgroup G_IR_CONTROL Control relative
132*53ee8cc1Swenshuai.xi     \ingroup  G_IR
133*53ee8cc1Swenshuai.xi */
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi #ifndef _DRV_IR_H_
136*53ee8cc1Swenshuai.xi #define _DRV_IR_H_
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi #ifdef __cplusplus
140*53ee8cc1Swenshuai.xi extern "C"
141*53ee8cc1Swenshuai.xi {
142*53ee8cc1Swenshuai.xi #endif
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi #include "MsTypes.h"
145*53ee8cc1Swenshuai.xi #include "MsDevice.h"
146*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
147*53ee8cc1Swenshuai.xi //  Driver Capability
148*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
152*53ee8cc1Swenshuai.xi //  Macro and Define
153*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
154*53ee8cc1Swenshuai.xi /// define IR library version
155*53ee8cc1Swenshuai.xi #define MSIF_IR_LIB_CODE               {'I','R','_','_'}
156*53ee8cc1Swenshuai.xi #define MSIF_IR_LIBVER                 {'0','5'}
157*53ee8cc1Swenshuai.xi #define MSIF_IR_BUILDNUM               {'0','0' }
158*53ee8cc1Swenshuai.xi #define MSIF_IR_CHANGELIST             {'0','0','4','4','3','0','8','6'}
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi #define IR_DRV_VERSION                  /* Character String for DRV/API version */  \
161*53ee8cc1Swenshuai.xi     MSIF_TAG,                           /* 'MSIF' */  \
162*53ee8cc1Swenshuai.xi     MSIF_CLASS,                         /* '00' */  \
163*53ee8cc1Swenshuai.xi     MSIF_CUS,                           /* 0x0000 */  \
164*53ee8cc1Swenshuai.xi     MSIF_MOD,                           /* 0x0000 */  \
165*53ee8cc1Swenshuai.xi     MSIF_CHIP,                                       \
166*53ee8cc1Swenshuai.xi     MSIF_CPU,                                        \
167*53ee8cc1Swenshuai.xi     MSIF_IR_LIB_CODE,                   /* IP__ */  \
168*53ee8cc1Swenshuai.xi     MSIF_IR_LIBVER,                     /* 0.0 ~ Z.Z */  \
169*53ee8cc1Swenshuai.xi     MSIF_IR_BUILDNUM,                   /* 00 ~ 99 */  \
170*53ee8cc1Swenshuai.xi     MSIF_IR_CHANGELIST,                 /* CL# */  \
171*53ee8cc1Swenshuai.xi     MSIF_OS
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi /// IR driver
174*53ee8cc1Swenshuai.xi #define IR_VERSION_STRING_MAX       33
175*53ee8cc1Swenshuai.xi #define IR_DUMMY_KEY                0xFF
176*53ee8cc1Swenshuai.xi #define IR_DUMMY_STATUS             0x00
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi //IR Decode mode list
179*53ee8cc1Swenshuai.xi #define IR_DEC_RC_RC5               0
180*53ee8cc1Swenshuai.xi #define IR_DEC_RC_RC5X              1
181*53ee8cc1Swenshuai.xi #define IR_DEC_RC_RC6               2
182*53ee8cc1Swenshuai.xi #define IR_DEC_FULL                 3
183*53ee8cc1Swenshuai.xi #define IR_DEC_RAW                  4
184*53ee8cc1Swenshuai.xi #define IR_DEC_SW                   5
185*53ee8cc1Swenshuai.xi #define IR_DEC_FMT                  6
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
188*53ee8cc1Swenshuai.xi //  Type and Structure
189*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
190*53ee8cc1Swenshuai.xi /// define IR driver info
191*53ee8cc1Swenshuai.xi typedef struct __attribute__((aligned (4096)))
192*53ee8cc1Swenshuai.xi {
193*53ee8cc1Swenshuai.xi     MS_U8 u8IsDecodeEn : 1;     /// check decode enable (Full/Raw)
194*53ee8cc1Swenshuai.xi     MS_U8 u8IsIntMsked : 1;     /// check int mask (Full/Raw)
195*53ee8cc1Swenshuai.xi     MS_U8 u8IsPolarInv : 1;     /// check signal polarity inverted (Full/Raw)
196*53ee8cc1Swenshuai.xi     MS_U8 u8IsFifoFullEn : 1;   /// Fifo full check enable (Full/Raw)
197*53ee8cc1Swenshuai.xi     MS_U8 u8IsFifoFull : 1;     /// Check Fifo full (Full/Raw)
198*53ee8cc1Swenshuai.xi     MS_U8 u8IsKeyMsbFst : 1;    /// Check Key MSB first (Full/Raw)
199*53ee8cc1Swenshuai.xi     MS_U8 u8IsBitInvEn : 1;     /// Check decode logic bit inverse (Full/Raw)
200*53ee8cc1Swenshuai.xi     MS_U8 u8IsGlhrmEn : 1;      /// glitch removal enable
201*53ee8cc1Swenshuai.xi     MS_U8 u8DecodeMode : 4;     /// decode mode.  0: RC5, 1: RC5X, 2: RC6, 3: Full, 4: Raw, 5: SW, 6:FMT
202*53ee8cc1Swenshuai.xi     MS_U8 u8CCodeBytes : 2;     /// customer code bytes: 1 or 2 bytes (Full only)
203*53ee8cc1Swenshuai.xi     MS_U8 u8Reserved : 2;       /// RFU
204*53ee8cc1Swenshuai.xi     MS_U8 u8CodeBits;           /// Code bits: 0x00~0x7F
205*53ee8cc1Swenshuai.xi     MS_U8 u8FifoDepth;          /// Fifo depth (Full/Raw)
206*53ee8cc1Swenshuai.xi     //for RC
207*53ee8cc1Swenshuai.xi     MS_U8 u8IsRCDecodeEn : 1;   /// check RC decode enable (RC)
208*53ee8cc1Swenshuai.xi     MS_U8 u8IsRCPolarInv : 1;   /// check RC signal polarity inverted (RC)
209*53ee8cc1Swenshuai.xi     MS_U8 u8RCReserved : 6;     /// RFU (RC)
210*53ee8cc1Swenshuai.xi }IR_DrvInfo;
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi /// define IR key code time & bounds
213*53ee8cc1Swenshuai.xi typedef struct
214*53ee8cc1Swenshuai.xi {
215*53ee8cc1Swenshuai.xi     MS_S16 s16Time;   ///key code time
216*53ee8cc1Swenshuai.xi     MS_S8 s8UpBnd;    ///upper bound
217*53ee8cc1Swenshuai.xi     MS_S8 s8LoBnd;    ///low bound
218*53ee8cc1Swenshuai.xi } IR_TimeCfg;
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi /// define IR time parameters
221*53ee8cc1Swenshuai.xi typedef struct __attribute__((aligned (4096)))
222*53ee8cc1Swenshuai.xi {
223*53ee8cc1Swenshuai.xi     IR_TimeCfg tHdr;       /// header code time
224*53ee8cc1Swenshuai.xi     IR_TimeCfg tOff;       /// off code time
225*53ee8cc1Swenshuai.xi     IR_TimeCfg tOffRpt;    /// off code repeat time
226*53ee8cc1Swenshuai.xi     IR_TimeCfg tLg01Hg;    /// logical 0/1 high time
227*53ee8cc1Swenshuai.xi     IR_TimeCfg tLg0;       /// logical 0 time
228*53ee8cc1Swenshuai.xi     IR_TimeCfg tLg1;       /// logical 1 time
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi } IR_TimeBnd;
231*53ee8cc1Swenshuai.xi 
232*53ee8cc1Swenshuai.xi /// define IR configuration parameters
233*53ee8cc1Swenshuai.xi typedef struct __attribute__((aligned (4096)))
234*53ee8cc1Swenshuai.xi {
235*53ee8cc1Swenshuai.xi     //MS_U8 u8ModeSel;          /// IR mode selection
236*53ee8cc1Swenshuai.xi     MS_U8 u8Ctrl0;          /// IR enable control 0
237*53ee8cc1Swenshuai.xi     MS_U8 u8Ctrl1;          /// IR enable control 1
238*53ee8cc1Swenshuai.xi     MS_U8 u8Clk_mhz;        /// IR required clock
239*53ee8cc1Swenshuai.xi     MS_U8 u8HdrCode0;       /// IR Header code 0
240*53ee8cc1Swenshuai.xi     MS_U8 u8HdrCode1;       /// IR Header code 1
241*53ee8cc1Swenshuai.xi     MS_U8 u8CCodeBytes;     /// Customer codes: 1 or 2 bytes
242*53ee8cc1Swenshuai.xi     MS_U8 u8CodeBits;       /// Code bits: 0x00~0x7F
243*53ee8cc1Swenshuai.xi     MS_U8 u8HdrCode20;      /// 2nd IR Header code 0
244*53ee8cc1Swenshuai.xi     MS_U8 u8HdrCode21;      /// 2nd IR Header code 1
245*53ee8cc1Swenshuai.xi 
246*53ee8cc1Swenshuai.xi } IR_RegCfg;
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi /// emurate IR fucntion return result
249*53ee8cc1Swenshuai.xi typedef enum
250*53ee8cc1Swenshuai.xi {
251*53ee8cc1Swenshuai.xi     /// IR result for failure
252*53ee8cc1Swenshuai.xi     E_IR_FAIL =0,
253*53ee8cc1Swenshuai.xi     /// IR result for OK
254*53ee8cc1Swenshuai.xi     E_IR_OK = 1,
255*53ee8cc1Swenshuai.xi 
256*53ee8cc1Swenshuai.xi } IR_Result;
257*53ee8cc1Swenshuai.xi 
258*53ee8cc1Swenshuai.xi /// emurate IR status
259*53ee8cc1Swenshuai.xi typedef enum
260*53ee8cc1Swenshuai.xi {
261*53ee8cc1Swenshuai.xi     /// IR Driver Status: Initialization OK
262*53ee8cc1Swenshuai.xi     E_IR_INIT_OK = (1<<0),
263*53ee8cc1Swenshuai.xi     /// IR Driver Status: Callback installed
264*53ee8cc1Swenshuai.xi     E_IR_INST_CLBK = (1<<1),
265*53ee8cc1Swenshuai.xi     /// IR Driver Status: FIFO empty
266*53ee8cc1Swenshuai.xi     E_IR_FIFO_EMPTY = (1<<2),
267*53ee8cc1Swenshuai.xi     /// IR Driver Status: FIFO full
268*53ee8cc1Swenshuai.xi     E_IR_FIFO_FULL = (1<<3),
269*53ee8cc1Swenshuai.xi     /// IR Driver Status: Get key code
270*53ee8cc1Swenshuai.xi     E_IR_KEY_CODE = (1<<4),
271*53ee8cc1Swenshuai.xi     /// IR Driver Status: Key timeout
272*53ee8cc1Swenshuai.xi     E_IR_KEY_TIMEOUT = (1<<5),
273*53ee8cc1Swenshuai.xi     /// IR Driver Status: Key decoded error
274*53ee8cc1Swenshuai.xi     E_IR_KEY_DECERR = (1<<6),
275*53ee8cc1Swenshuai.xi     /// IR Driver Status: IR is enabled
276*53ee8cc1Swenshuai.xi     E_IR_ENABLE = (1<<7),
277*53ee8cc1Swenshuai.xi     /// IR Driver Status: Maximum status
278*53ee8cc1Swenshuai.xi     E_IR_MAX_STATUS = 255
279*53ee8cc1Swenshuai.xi } IR_Status;
280*53ee8cc1Swenshuai.xi 
281*53ee8cc1Swenshuai.xi //-------------------------------
282*53ee8cc1Swenshuai.xi // Mailbox Class : IR
283*53ee8cc1Swenshuai.xi //-------------------------------
284*53ee8cc1Swenshuai.xi /// emurate IR mailbox commands from cpu to mcu51
285*53ee8cc1Swenshuai.xi typedef enum
286*53ee8cc1Swenshuai.xi {
287*53ee8cc1Swenshuai.xi     /// mbx command for initialization
288*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_INIT=0x00,
289*53ee8cc1Swenshuai.xi     /// mbx command for configuration
290*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_CONFIG,
291*53ee8cc1Swenshuai.xi     /// mbx command for key code
292*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_KEYCODE,
293*53ee8cc1Swenshuai.xi     /// mbx command for set callback
294*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_SETCLBK,
295*53ee8cc1Swenshuai.xi     /// mbx command for library version
296*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_LIBVER,
297*53ee8cc1Swenshuai.xi     /// mbx command for status
298*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_STATUS,
299*53ee8cc1Swenshuai.xi     /// mbx command for enable
300*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_ENABLE,
301*53ee8cc1Swenshuai.xi     /// mbx command for driver info
302*53ee8cc1Swenshuai.xi     E_IR_CPUTo51_CMD_INFO,
303*53ee8cc1Swenshuai.xi } IR_CPUTo51CmdIdx;
304*53ee8cc1Swenshuai.xi 
305*53ee8cc1Swenshuai.xi /// emurate IR mailbox commands ack from mcu51 to cpu
306*53ee8cc1Swenshuai.xi typedef enum
307*53ee8cc1Swenshuai.xi {
308*53ee8cc1Swenshuai.xi     //(1) Acknowledge from MCU51
309*53ee8cc1Swenshuai.xi     /// ack mbx command for initialization
310*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_INIT=0x00,
311*53ee8cc1Swenshuai.xi     /// ack mbx command for configuration
312*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_CONFIG,
313*53ee8cc1Swenshuai.xi     /// ack mbx command for key code
314*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_KEYCODE,
315*53ee8cc1Swenshuai.xi     /// ack mbx command for set callback
316*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_SETCLBK,
317*53ee8cc1Swenshuai.xi     /// ack mbx command for library version
318*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_LIBVER,
319*53ee8cc1Swenshuai.xi     ///ack mbx command for status
320*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_STATUS,
321*53ee8cc1Swenshuai.xi     ///ack mbx command for enable
322*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_ENABLE,
323*53ee8cc1Swenshuai.xi     ///ack mbx command for driver info
324*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_ACK_INFO,
325*53ee8cc1Swenshuai.xi 
326*53ee8cc1Swenshuai.xi     //(2) Notification from MCU51
327*53ee8cc1Swenshuai.xi     ///notification mbx command for key code
328*53ee8cc1Swenshuai.xi     E_IR_51ToCPU_CMD_KEYCODE,
329*53ee8cc1Swenshuai.xi 
330*53ee8cc1Swenshuai.xi } IR_51ToCPUCmdIdx;
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi /// emurate ack flags
333*53ee8cc1Swenshuai.xi typedef enum
334*53ee8cc1Swenshuai.xi {
335*53ee8cc1Swenshuai.xi     /// ack flag for null
336*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_NULL         = 0,
337*53ee8cc1Swenshuai.xi     /// ack flag for wait initialization
338*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_INIT    = (1<<0),
339*53ee8cc1Swenshuai.xi     /// ack flag for wait configuration
340*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_CONFIG  = (1<<1),
341*53ee8cc1Swenshuai.xi     /// ack flag for wait key code
342*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_KEYCODE = (1<<2),
343*53ee8cc1Swenshuai.xi     /// ack flag for wait set callback
344*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_SETCLBK = (1<<3),
345*53ee8cc1Swenshuai.xi     /// ack flag for wait library version
346*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_LIBVER  = (1<<4),
347*53ee8cc1Swenshuai.xi     /// ack flag for wait status
348*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_STATUS  = (1<<5),
349*53ee8cc1Swenshuai.xi     /// ack flag for wait enable
350*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_ENABLE  = (1<<6),
351*53ee8cc1Swenshuai.xi     /// ack flag for wait driver info
352*53ee8cc1Swenshuai.xi     E_IR_ACKFLG_WAIT_INFO    = (1<<7),
353*53ee8cc1Swenshuai.xi } IR_AckFlags;
354*53ee8cc1Swenshuai.xi 
355*53ee8cc1Swenshuai.xi /// Callback function which is called in IR ISR.
356*53ee8cc1Swenshuai.xi typedef void ( *IR_Callback ) (MS_U8 u8Key, MS_U8 u8RepeatFlag);
357*53ee8cc1Swenshuai.xi 
358*53ee8cc1Swenshuai.xi ///Define IR debug level
359*53ee8cc1Swenshuai.xi typedef enum _IR_DbgLvl
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi     E_IR_DBGLVL_NONE = 0,      /// no debug message
362*53ee8cc1Swenshuai.xi     E_IR_DBGLVL_WARNING,       /// show warning only
363*53ee8cc1Swenshuai.xi     E_IR_DBGLVL_ERROR,         /// show error only
364*53ee8cc1Swenshuai.xi     E_IR_DBGLVL_INFO,          /// show error & informaiton
365*53ee8cc1Swenshuai.xi     E_IR_DBGLVL_ALL,           /// show error, information & funciton name
366*53ee8cc1Swenshuai.xi }IR_DbgLvl;
367*53ee8cc1Swenshuai.xi 
368*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
369*53ee8cc1Swenshuai.xi //  Function and Variable
370*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
373*53ee8cc1Swenshuai.xi /// IR Iinitialized function before using IR to receive keys.
374*53ee8cc1Swenshuai.xi /// @ingroup G_IR_INIT
375*53ee8cc1Swenshuai.xi /// @param pIRRegCfg \b IN: pointer to IR configuration structure
376*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
377*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
378*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
379*53ee8cc1Swenshuai.xi IR_Result MDrv_IR_Init(IR_RegCfg *pIRRegCfg);
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
382*53ee8cc1Swenshuai.xi /// IR configuration function for time bound
383*53ee8cc1Swenshuai.xi /// @ingroup G_IR_COMMON
384*53ee8cc1Swenshuai.xi /// @param pIRTimeBnd \b IN: pointer to IR time bound structure
385*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
386*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
387*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
388*53ee8cc1Swenshuai.xi IR_Result MDrv_IR_Config(IR_TimeBnd *pIRTimeBnd);
389*53ee8cc1Swenshuai.xi 
390*53ee8cc1Swenshuai.xi 
391*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
392*53ee8cc1Swenshuai.xi /// IR get key code function.
393*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
394*53ee8cc1Swenshuai.xi /// @param pu8Key \b OUT: Get IR key code
395*53ee8cc1Swenshuai.xi /// @param pu8Repeat \b OUT: Get IR key repeat status
396*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
397*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
398*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
399*53ee8cc1Swenshuai.xi // IR_Result MDrv_IR_GetKeyCode(MS_U8 *pu8Key, MS_U8 *pu8Repeat);
400*53ee8cc1Swenshuai.xi 
401*53ee8cc1Swenshuai.xi 
402*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
403*53ee8cc1Swenshuai.xi /// Set IR callback function when receive IR key. Support only one callback. If call it twice,
404*53ee8cc1Swenshuai.xi /// the first callback does not be called.
405*53ee8cc1Swenshuai.xi /// Note: The callback runs at interrupt mode.
406*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
407*53ee8cc1Swenshuai.xi /// @param pCallback \b IN: Set the callback function when generate IR interrupt.
408*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
409*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
410*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
411*53ee8cc1Swenshuai.xi IR_Result MDrv_IR_SetCallback(IR_Callback pCallback);
412*53ee8cc1Swenshuai.xi 
413*53ee8cc1Swenshuai.xi 
414*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
415*53ee8cc1Swenshuai.xi /// Get IR callback function which receive IR key.
416*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
417*53ee8cc1Swenshuai.xi /// @return the callback function when generate IR interrupt
418*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
419*53ee8cc1Swenshuai.xi // IR_Callback MDrv_IR_GetCallback(void);
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi 
422*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
423*53ee8cc1Swenshuai.xi /// Get IR library version function.
424*53ee8cc1Swenshuai.xi /// @ingroup G_IR_COMMON
425*53ee8cc1Swenshuai.xi /// @param ppVersion \b OUT: pointer to library structure
426*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
427*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
428*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
429*53ee8cc1Swenshuai.xi // IR_Result MDrv_IR_GetLibVer(const MSIF_Version **ppVersion);
430*53ee8cc1Swenshuai.xi 
431*53ee8cc1Swenshuai.xi 
432*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
433*53ee8cc1Swenshuai.xi /// Get IR status function.
434*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
435*53ee8cc1Swenshuai.xi /// @param pu8IRStatus \b OUT: pointer to status structure
436*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
437*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
438*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
439*53ee8cc1Swenshuai.xi // IR_Result MDrv_IR_GetStatus(MS_U8 *pu8IRStatus);
440*53ee8cc1Swenshuai.xi 
441*53ee8cc1Swenshuai.xi 
442*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
443*53ee8cc1Swenshuai.xi /// Set IR enable function.
444*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
445*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE: enable IR, FALSE: disable IR
446*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
447*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
448*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
449*53ee8cc1Swenshuai.xi IR_Result MDrv_IR_Enable(MS_BOOL bEnable);
450*53ee8cc1Swenshuai.xi 
451*53ee8cc1Swenshuai.xi 
452*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
453*53ee8cc1Swenshuai.xi /// Get IR driver information function.
454*53ee8cc1Swenshuai.xi /// @ingroup G_IR_COMMON
455*53ee8cc1Swenshuai.xi /// @return @ref IR_DrvInfo structure
456*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
457*53ee8cc1Swenshuai.xi // const IR_DrvInfo* MDrv_IR_GetInfo(void);
458*53ee8cc1Swenshuai.xi 
459*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
460*53ee8cc1Swenshuai.xi /// Set IR debug function.
461*53ee8cc1Swenshuai.xi /// @ingroup G_IR_COMMON
462*53ee8cc1Swenshuai.xi /// @param eLevel \b IN: E_IR_DBGLVL_NONE/E_IR_DBGLVL_WARNING/E_IR_DBGLVL_ERROR/E_IR_DBGLVL_INFO/E_IR_DBGLVL_ALL
463*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
464*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
465*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
466*53ee8cc1Swenshuai.xi // IR_Result MDrv_IR_SetDbgLevel(IR_DbgLvl eLevel);
467*53ee8cc1Swenshuai.xi 
468*53ee8cc1Swenshuai.xi #define IR_VERSION            0x00000001
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi //#ifdef MSOS_TYPE_LINUX
471*53ee8cc1Swenshuai.xi #if 1
472*53ee8cc1Swenshuai.xi #define IR_MAX_BUF_DPH  2
473*53ee8cc1Swenshuai.xi #define IR_MAX_BUF_LEN  256
474*53ee8cc1Swenshuai.xi typedef enum
475*53ee8cc1Swenshuai.xi {
476*53ee8cc1Swenshuai.xi     E_IR_DECMODE_HWFULL = 0,
477*53ee8cc1Swenshuai.xi     E_IR_DECMODE_HWRAW,
478*53ee8cc1Swenshuai.xi     E_IR_DECMODE_HWRC5,
479*53ee8cc1Swenshuai.xi     E_IR_DECMODE_HWRC5X,
480*53ee8cc1Swenshuai.xi     E_IR_DECMODE_HWRC6,
481*53ee8cc1Swenshuai.xi     E_IR_DECMODE_SW,
482*53ee8cc1Swenshuai.xi     E_IR_DECMODE_SHOT,
483*53ee8cc1Swenshuai.xi     E_IR_DECMODE_NONE
484*53ee8cc1Swenshuai.xi } IR_DecodeMode;
485*53ee8cc1Swenshuai.xi 
486*53ee8cc1Swenshuai.xi ///IR data sequence format select for NEC-like (PPM modulation) formats.
487*53ee8cc1Swenshuai.xi ///Note:
488*53ee8cc1Swenshuai.xi ///S = System Code.
489*53ee8cc1Swenshuai.xi ///C = Customer Code Bits, (ex: C8= customer code 8bits).
490*53ee8cc1Swenshuai.xi ///D = Data (Key) Code Bits, (ex: D8= data code 8bits).
491*53ee8cc1Swenshuai.xi ///P = Format with Parity Check (ex: 3th byte and 4th byte of NEC format).
492*53ee8cc1Swenshuai.xi typedef enum
493*53ee8cc1Swenshuai.xi {
494*53ee8cc1Swenshuai.xi     E_IR_XFM_NOTDEF = 0,      ///Format not define
495*53ee8cc1Swenshuai.xi     E_IR_XFM_C16D8D8P=1,      ///ex: NEC, Toshiba format
496*53ee8cc1Swenshuai.xi     E_IR_XFM_C8D8=2,          ///ex: Mitsubushi, Konka format
497*53ee8cc1Swenshuai.xi     E_IR_XFM_C4D8C4D8P=3,     ///ex: RCA format
498*53ee8cc1Swenshuai.xi     E_IR_XFM_C26D8D8P=4,      ///ex: C26D8D8P
499*53ee8cc1Swenshuai.xi     E_IR_XFM_C32D8D8P=5,      ///ex: C32D8D8P
500*53ee8cc1Swenshuai.xi     E_IR_XFM_C5D6C5D6P=6,     ///ex: C5D6C5D6P
501*53ee8cc1Swenshuai.xi     E_IR_XFM_C6D6C6D6P=7,     ///ex: C6D6C6D6P
502*53ee8cc1Swenshuai.xi     E_IR_XFM_D7C6=8,          ///ex: Sony-D7C6
503*53ee8cc1Swenshuai.xi     E_IR_XFM_D7C8=9,          ///ex: Sony-D7C8
504*53ee8cc1Swenshuai.xi     E_IR_XFM_D8C6=10,         ///ex: Sony-D8C6
505*53ee8cc1Swenshuai.xi     E_IR_XFM_D5_only=11,      ///ex: MV500
506*53ee8cc1Swenshuai.xi     E_IR_XFM_S1C4D6=12,       ///ex: IRT1250
507*53ee8cc1Swenshuai.xi     E_IR_XFM_C5D6D4=13,       ///ex: LR3715M
508*53ee8cc1Swenshuai.xi     E_IR_XFM_R1T1C3D6=14,     ///ex: M3004 LAB1-Carrier
509*53ee8cc1Swenshuai.xi     E_IR_XFM_RESERVED=15,     ///Reserved
510*53ee8cc1Swenshuai.xi 
511*53ee8cc1Swenshuai.xi } IR_ExtFormat;
512*53ee8cc1Swenshuai.xi 
513*53ee8cc1Swenshuai.xi typedef enum
514*53ee8cc1Swenshuai.xi {
515*53ee8cc1Swenshuai.xi     EN_IR_SHOT_P = 0x01,   /// 2'b01: only pshot edge detect for counter
516*53ee8cc1Swenshuai.xi     EN_IR_SHOT_N = 0x02,   /// 2'b10: only nshot edge detect for counter
517*53ee8cc1Swenshuai.xi     EN_IR_SHOT_PN = 0x03,  /// 2'b11/2'b00: both pshot/nshot edge detect for counter
518*53ee8cc1Swenshuai.xi     EN_IR_SHOT_INVLD,      /// Invalid for value greater than 2'b11
519*53ee8cc1Swenshuai.xi 
520*53ee8cc1Swenshuai.xi } IR_ShotSel;
521*53ee8cc1Swenshuai.xi 
522*53ee8cc1Swenshuai.xi /// define IR key code time & bounds
523*53ee8cc1Swenshuai.xi typedef struct
524*53ee8cc1Swenshuai.xi {
525*53ee8cc1Swenshuai.xi     MS_S16 s16Time;   ///key code time
526*53ee8cc1Swenshuai.xi     MS_S8 s8UpBnd;    ///upper bound
527*53ee8cc1Swenshuai.xi     MS_S8 s8LoBnd;    ///low bound
528*53ee8cc1Swenshuai.xi } IR_TimeBndParam;
529*53ee8cc1Swenshuai.xi 
530*53ee8cc1Swenshuai.xi /// define IR key code time tail
531*53ee8cc1Swenshuai.xi typedef struct
532*53ee8cc1Swenshuai.xi {
533*53ee8cc1Swenshuai.xi     MS_U32 gu32KeyMin;     /// Min Tail Time for key
534*53ee8cc1Swenshuai.xi     MS_U32 gu32KeyMax;     /// Max Tail Time for key
535*53ee8cc1Swenshuai.xi     MS_U32 gu32RptMin;     /// Min Tail Time for Rpt
536*53ee8cc1Swenshuai.xi     MS_U32 gu32RptMax;     /// Max Tail Time for Rpt
537*53ee8cc1Swenshuai.xi } IR_TimeTailParam;
538*53ee8cc1Swenshuai.xi 
539*53ee8cc1Swenshuai.xi /// define IR time parameters
540*53ee8cc1Swenshuai.xi typedef struct
541*53ee8cc1Swenshuai.xi {
542*53ee8cc1Swenshuai.xi     IR_TimeBndParam tHdr;       /// header code time
543*53ee8cc1Swenshuai.xi     IR_TimeBndParam tOff;       /// off code time
544*53ee8cc1Swenshuai.xi     IR_TimeBndParam tOffRpt;    /// off code repeat time
545*53ee8cc1Swenshuai.xi     IR_TimeBndParam tLg01Hg;    /// logical 0/1 high time
546*53ee8cc1Swenshuai.xi     IR_TimeBndParam tLg0;       /// logical 0 time
547*53ee8cc1Swenshuai.xi     IR_TimeBndParam tLg1;       /// logical 1 time
548*53ee8cc1Swenshuai.xi     IR_TimeBndParam tSepr;      /// Separate time
549*53ee8cc1Swenshuai.xi     MS_U32 u32TimeoutCyc;       /// Timeout cycle count
550*53ee8cc1Swenshuai.xi     MS_U16 u16RCBitTime;        /// RC Bit Time
551*53ee8cc1Swenshuai.xi     IR_TimeTailParam tTail;     /// Tail Time for sw shot mode
552*53ee8cc1Swenshuai.xi } IR_TimeCfgParam;
553*53ee8cc1Swenshuai.xi 
554*53ee8cc1Swenshuai.xi /// define IR configuration parameters
555*53ee8cc1Swenshuai.xi typedef struct
556*53ee8cc1Swenshuai.xi {
557*53ee8cc1Swenshuai.xi     MS_U8 u8DecMode;        /// IR mode selection
558*53ee8cc1Swenshuai.xi     MS_U8 u8ExtFormat;      /// IR extention format
559*53ee8cc1Swenshuai.xi     MS_U8 u8Ctrl0;          /// IR enable control 0
560*53ee8cc1Swenshuai.xi     MS_U8 u8Ctrl1;          /// IR enable control 1
561*53ee8cc1Swenshuai.xi     MS_U8 u8Clk_mhz;        /// IR required clock
562*53ee8cc1Swenshuai.xi     MS_U8 u8HdrCode0;       /// IR Header code 0
563*53ee8cc1Swenshuai.xi     MS_U8 u8HdrCode1;       /// IR Header code 1
564*53ee8cc1Swenshuai.xi     MS_U8 u8CCodeBytes;     /// Customer codes: 1 or 2 bytes
565*53ee8cc1Swenshuai.xi     MS_U8 u8CodeBits;       /// Code bits: 1~128 bits
566*53ee8cc1Swenshuai.xi     MS_U8 u8KeySelect;      /// IR select Nth key N(1~16)
567*53ee8cc1Swenshuai.xi     MS_U16 u16GlhrmNum;     /// Glitch Remove Number
568*53ee8cc1Swenshuai.xi     IR_ShotSel enShotSel;   /// Shot selection for SW decoder
569*53ee8cc1Swenshuai.xi     MS_BOOL bInvertPolar;   /// Invert the polarity for input IR signal
570*53ee8cc1Swenshuai.xi 
571*53ee8cc1Swenshuai.xi } IR_InitCfgParam;
572*53ee8cc1Swenshuai.xi 
573*53ee8cc1Swenshuai.xi /// define Ping-Pong Buffer structure for IR SW shot count
574*53ee8cc1Swenshuai.xi typedef struct
575*53ee8cc1Swenshuai.xi {
576*53ee8cc1Swenshuai.xi     MS_U32 u32Buffer[IR_MAX_BUF_DPH][IR_MAX_BUF_LEN];  ///Ping-Pong Buffer
577*53ee8cc1Swenshuai.xi     MS_U32 u32Length;                     ///Data Length for Read Index buffer
578*53ee8cc1Swenshuai.xi     MS_U8 u8RdIdx;                        ///Read Index
579*53ee8cc1Swenshuai.xi     MS_U8 u8WtIdx;                        ///Write Index
580*53ee8cc1Swenshuai.xi } IR_PulseShotInfo;
581*53ee8cc1Swenshuai.xi 
582*53ee8cc1Swenshuai.xi /// define HeaderInfo for sw mode change headercode in apps
583*53ee8cc1Swenshuai.xi typedef struct
584*53ee8cc1Swenshuai.xi {
585*53ee8cc1Swenshuai.xi     MS_U8 u8IRHeaderCode0;                        //IRHeaderCode0
586*53ee8cc1Swenshuai.xi     MS_U8 u8IRHeaderCode1;                        //IRHeaderCode1
587*53ee8cc1Swenshuai.xi     MS_U8 u8IR2HeaderCode0;                        //IR2HeaderCode0
588*53ee8cc1Swenshuai.xi     MS_U8 u8IR2HeaderCode1;                        //IR2HeaderCode1
589*53ee8cc1Swenshuai.xi }MS_MultiIR_HeaderInfo;
590*53ee8cc1Swenshuai.xi 
591*53ee8cc1Swenshuai.xi #define IR_IOC_MAGIC                'u'
592*53ee8cc1Swenshuai.xi #define MDRV_IR_INIT                _IO(IR_IOC_MAGIC, 0)
593*53ee8cc1Swenshuai.xi #define MDRV_IR_SET_DELAYTIME       _IOW(IR_IOC_MAGIC, 1, int)
594*53ee8cc1Swenshuai.xi #define MDRV_IR_GET_KEY             _IOW(IR_IOC_MAGIC, 2, int)
595*53ee8cc1Swenshuai.xi #define MDRV_IR_GET_LASTKEYTIME     _IOW(IR_IOC_MAGIC, 3, int)
596*53ee8cc1Swenshuai.xi #define MDRV_IR_PARSE_KEY           _IOW(IR_IOC_MAGIC, 4, int)
597*53ee8cc1Swenshuai.xi #define MDRV_IR_TEST                _IOW(IR_IOC_MAGIC, 5, int)
598*53ee8cc1Swenshuai.xi #define MDRV_IR_ENABLE_IR           _IOW(IR_IOC_MAGIC, 6, int)
599*53ee8cc1Swenshuai.xi #define MDRV_IR_IS_FANTASY_PROTOCOL_SUPPORTED _IOR(IR_IOC_MAGIC, 7, int)
600*53ee8cc1Swenshuai.xi #define MDRV_IR_ENABLE_FANTASY_DATA_TRANSFER _IOW(IR_IOC_MAGIC, 8, int)
601*53ee8cc1Swenshuai.xi #define MDRV_IR_SET_MASTER_PID       _IOW(IR_IOC_MAGIC, 9, int)
602*53ee8cc1Swenshuai.xi #define MDRV_IR_GET_MASTER_PID       _IOW(IR_IOC_MAGIC, 10, int)
603*53ee8cc1Swenshuai.xi #define MDRV_IR_INITCFG              _IOW(IR_IOC_MAGIC, 11, IR_InitCfgParam)
604*53ee8cc1Swenshuai.xi #define MDRV_IR_TIMECFG              _IOW(IR_IOC_MAGIC, 12, IR_TimeCfgParam)
605*53ee8cc1Swenshuai.xi #define MDRV_IR_GET_SWSHOT_BUF       _IOW(IR_IOC_MAGIC, 13, IR_PulseShotInfo)
606*53ee8cc1Swenshuai.xi #define MDRV_IR_SEND_KEY             _IOW(IR_IOC_MAGIC, 14, int)
607*53ee8cc1Swenshuai.xi #define MDRV_IR_SET_HEADER           _IOW(IR_IOC_MAGIC, 15, MS_MultiIR_HeaderInfo)
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi #define IR_IOC_MAXNR                 15
610*53ee8cc1Swenshuai.xi 
611*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
612*53ee8cc1Swenshuai.xi /// Set IR enable function.
613*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
614*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE: enable IR, FALSE: disable IR
615*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
616*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
617*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
618*53ee8cc1Swenshuai.xi void MDrv_IR_OpenDevice(void);
619*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
620*53ee8cc1Swenshuai.xi /// Set IR enable function.
621*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
622*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE: enable IR, FALSE: disable IR
623*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
624*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
625*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
626*53ee8cc1Swenshuai.xi void MDrv_IR_InitCfg(IR_InitCfgParam* pInitCfg);
627*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
628*53ee8cc1Swenshuai.xi /// Set IR enable function.
629*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
630*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE: enable IR, FALSE: disable IR
631*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
632*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
633*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
634*53ee8cc1Swenshuai.xi void MDrv_IR_TimeCfg(IR_TimeCfgParam* pTimeCfg);
635*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
636*53ee8cc1Swenshuai.xi /// Set IR enable function.
637*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
638*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE: enable IR, FALSE: disable IR
639*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
640*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
641*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
642*53ee8cc1Swenshuai.xi // void MDrv_IR_GetPulseShot(IR_PulseShotInfo* pPulseShotInfo);
643*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
644*53ee8cc1Swenshuai.xi /// Set IR enable function.
645*53ee8cc1Swenshuai.xi /// @ingroup G_IR_CONTROL
646*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: TRUE: enable IR, FALSE: disable IR
647*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
648*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
649*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
650*53ee8cc1Swenshuai.xi // void MDrv_IR_SetMultiHeaderCode(MS_MultiIR_HeaderInfo* pMultiHeaderCode);
651*53ee8cc1Swenshuai.xi 
652*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
653*53ee8cc1Swenshuai.xi // Utopia2.0 will call this function to register IR module
654*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
655*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
656*53ee8cc1Swenshuai.xi /// Set IR debug function.
657*53ee8cc1Swenshuai.xi /// @ingroup G_IR_ToBeRemove
658*53ee8cc1Swenshuai.xi /// @param eLevel \b IN: E_IR_DBGLVL_NONE/E_IR_DBGLVL_WARNING/E_IR_DBGLVL_ERROR/E_IR_DBGLVL_INFO/E_IR_DBGLVL_ALL
659*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
660*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
661*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
662*53ee8cc1Swenshuai.xi // void IRRegisterToUtopia(FUtopiaOpen ModuleType);
663*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
664*53ee8cc1Swenshuai.xi /// Set IR debug function.
665*53ee8cc1Swenshuai.xi /// @ingroup G_IR_ToBeRemove
666*53ee8cc1Swenshuai.xi /// @param eLevel \b IN: E_IR_DBGLVL_NONE/E_IR_DBGLVL_WARNING/E_IR_DBGLVL_ERROR/E_IR_DBGLVL_INFO/E_IR_DBGLVL_ALL
667*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
668*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
669*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
670*53ee8cc1Swenshuai.xi MS_U32 IROpen(void** pInstance, MS_U32 u32ModuleVersion, void* pAttribute);
671*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
672*53ee8cc1Swenshuai.xi /// Set IR debug function.
673*53ee8cc1Swenshuai.xi /// @ingroup G_IR_ToBeRemove
674*53ee8cc1Swenshuai.xi /// @param eLevel \b IN: E_IR_DBGLVL_NONE/E_IR_DBGLVL_WARNING/E_IR_DBGLVL_ERROR/E_IR_DBGLVL_INFO/E_IR_DBGLVL_ALL
675*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
676*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
677*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
678*53ee8cc1Swenshuai.xi MS_U32 IRClose(void* pInstance);
679*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
680*53ee8cc1Swenshuai.xi /// Set IR debug function.
681*53ee8cc1Swenshuai.xi /// @ingroup G_IR_ToBeRemove
682*53ee8cc1Swenshuai.xi /// @param eLevel \b IN: E_IR_DBGLVL_NONE/E_IR_DBGLVL_WARNING/E_IR_DBGLVL_ERROR/E_IR_DBGLVL_INFO/E_IR_DBGLVL_ALL
683*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
684*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
685*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
686*53ee8cc1Swenshuai.xi // MS_U32 IRIoctl(void* pInstance, MS_U32 u32Cmd, void *pArgs);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
689*53ee8cc1Swenshuai.xi /// Set IR debug function.
690*53ee8cc1Swenshuai.xi /// @ingroup G_IR_ToBeRemove
691*53ee8cc1Swenshuai.xi /// @param eLevel \b IN: E_IR_DBGLVL_NONE/E_IR_DBGLVL_WARNING/E_IR_DBGLVL_ERROR/E_IR_DBGLVL_INFO/E_IR_DBGLVL_ALL
692*53ee8cc1Swenshuai.xi /// @return E_IR_OK: Success
693*53ee8cc1Swenshuai.xi /// @return E_IR_FAIL or other values: Failure
694*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
695*53ee8cc1Swenshuai.xi // MS_U32 MDrv_IR_SetPowerState(EN_POWER_MODE u16PowerState);
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi 
698*53ee8cc1Swenshuai.xi //IR_Private
699*53ee8cc1Swenshuai.xi typedef struct _IR_RESOURCE_PRIVATE
700*53ee8cc1Swenshuai.xi {
701*53ee8cc1Swenshuai.xi     MS_U32 Dummy;
702*53ee8cc1Swenshuai.xi }IR_RESOURCE_PRIVATE;
703*53ee8cc1Swenshuai.xi 
704*53ee8cc1Swenshuai.xi typedef struct _IR_INSTANT_PRIVATE
705*53ee8cc1Swenshuai.xi {
706*53ee8cc1Swenshuai.xi 
707*53ee8cc1Swenshuai.xi }IR_INSTANT_PRIVATE;
708*53ee8cc1Swenshuai.xi 
709*53ee8cc1Swenshuai.xi 
710*53ee8cc1Swenshuai.xi #endif
711*53ee8cc1Swenshuai.xi 
712*53ee8cc1Swenshuai.xi #ifdef __cplusplus
713*53ee8cc1Swenshuai.xi }
714*53ee8cc1Swenshuai.xi #endif
715*53ee8cc1Swenshuai.xi 
716*53ee8cc1Swenshuai.xi 
717*53ee8cc1Swenshuai.xi #endif // _DRV_IR_H_
718*53ee8cc1Swenshuai.xi 
719