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 //-------------------------------------------------------------------------------------------------
98*53ee8cc1Swenshuai.xi // Include Files
99*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
100*53ee8cc1Swenshuai.xi #define _DRV_CEC_C_
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
103*53ee8cc1Swenshuai.xi #include <linux/string.h>
104*53ee8cc1Swenshuai.xi #else
105*53ee8cc1Swenshuai.xi #include <string.h>
106*53ee8cc1Swenshuai.xi #endif
107*53ee8cc1Swenshuai.xi #include "MsCommon.h"
108*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
109*53ee8cc1Swenshuai.xi #include "MsOS.h"
110*53ee8cc1Swenshuai.xi #include "MsTypes.h"
111*53ee8cc1Swenshuai.xi
112*53ee8cc1Swenshuai.xi #include "cec_hwreg_utility2.h"
113*53ee8cc1Swenshuai.xi #include "cec_Analog_Reg.h"
114*53ee8cc1Swenshuai.xi
115*53ee8cc1Swenshuai.xi #include "apiCEC_private.h"
116*53ee8cc1Swenshuai.xi #include "apiCEC.h"
117*53ee8cc1Swenshuai.xi #include "drvCEC.h"
118*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
119*53ee8cc1Swenshuai.xi #include "mhal_CEC.h"
120*53ee8cc1Swenshuai.xi #include "drvIPAUTH.h"
121*53ee8cc1Swenshuai.xi
122*53ee8cc1Swenshuai.xi #ifndef _DRV_SYS_H_
123*53ee8cc1Swenshuai.xi #include "drvSYS.h"
124*53ee8cc1Swenshuai.xi #endif
125*53ee8cc1Swenshuai.xi
126*53ee8cc1Swenshuai.xi #include "utopia.h"
127*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
128*53ee8cc1Swenshuai.xi
129*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
130*53ee8cc1Swenshuai.xi // Local Defines
131*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
132*53ee8cc1Swenshuai.xi #if(defined(CONFIG_MLOG))
133*53ee8cc1Swenshuai.xi #include "ULog.h"
134*53ee8cc1Swenshuai.xi
135*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_INFO(format, args...) //ULOGI("CEC", format, ##args)
136*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_WARNING(format, args...) ULOGW("CEC", format, ##args)
137*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_DEBUG(format, args...) ULOGD("CEC", format, ##args)
138*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_ERROR(format, args...) ULOGE("CEC", format, ##args)
139*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_FATAL(format, args...) ULOGF("CEC", format, ##args)
140*53ee8cc1Swenshuai.xi
141*53ee8cc1Swenshuai.xi #else
142*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_INFO(format, args...) //printf(format, ##args)
143*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_WARNING(format, args...) printf(format, ##args)
144*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_DEBUG(format, args...) printf(format, ##args)
145*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_ERROR(format, args...) printf(format, ##args)
146*53ee8cc1Swenshuai.xi #define MDRV_CEC_MSG_FATAL(format, args...) printf(format, ##args)
147*53ee8cc1Swenshuai.xi
148*53ee8cc1Swenshuai.xi #endif
149*53ee8cc1Swenshuai.xi
150*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
151*53ee8cc1Swenshuai.xi // Local Structures
152*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
153*53ee8cc1Swenshuai.xi
154*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
155*53ee8cc1Swenshuai.xi // Global Variables
156*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
157*53ee8cc1Swenshuai.xi
158*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
159*53ee8cc1Swenshuai.xi // Local Variables
160*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
161*53ee8cc1Swenshuai.xi
162*53ee8cc1Swenshuai.xi //MS_VIRT CEC_RIU_BASE;
163*53ee8cc1Swenshuai.xi
164*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
165*53ee8cc1Swenshuai.xi // Local Functions
166*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
167*53ee8cc1Swenshuai.xi
168*53ee8cc1Swenshuai.xi //**************************************************************************
169*53ee8cc1Swenshuai.xi // [Function Name]:
170*53ee8cc1Swenshuai.xi // _MDrv_CEC_init_riu_base()
171*53ee8cc1Swenshuai.xi // [Description]
172*53ee8cc1Swenshuai.xi //
173*53ee8cc1Swenshuai.xi // [Arguments]:
174*53ee8cc1Swenshuai.xi //
175*53ee8cc1Swenshuai.xi // [Return]:
176*53ee8cc1Swenshuai.xi //
177*53ee8cc1Swenshuai.xi //**************************************************************************
_MDrv_CEC_init_riu_base(CEC_RESOURCE_PRIVATE * pCECResourcePrivate)178*53ee8cc1Swenshuai.xi void _MDrv_CEC_init_riu_base(CEC_RESOURCE_PRIVATE *pCECResourcePrivate)
179*53ee8cc1Swenshuai.xi {
180*53ee8cc1Swenshuai.xi MS_VIRT _XCRIUBaseAddress = 0, _PMRIUBaseAddress = 0;
181*53ee8cc1Swenshuai.xi MS_PHY u32NonPMBankSize = 0, u32PMBankSize = 0;
182*53ee8cc1Swenshuai.xi
183*53ee8cc1Swenshuai.xi // get MMIO base
184*53ee8cc1Swenshuai.xi if(MDrv_MMIO_GetBASE( &_XCRIUBaseAddress, &u32NonPMBankSize, MS_MODULE_XC ) != TRUE)
185*53ee8cc1Swenshuai.xi {
186*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_FATAL("CEC GetBase failed\n");
187*53ee8cc1Swenshuai.xi }
188*53ee8cc1Swenshuai.xi else if(MDrv_MMIO_GetBASE( &_PMRIUBaseAddress, &u32PMBankSize, MS_MODULE_PM ) != TRUE)
189*53ee8cc1Swenshuai.xi {
190*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_FATAL("CEC GetBase failed\n");
191*53ee8cc1Swenshuai.xi }
192*53ee8cc1Swenshuai.xi else
193*53ee8cc1Swenshuai.xi {
194*53ee8cc1Swenshuai.xi pCECResourcePrivate->ulXCRiuBaseAddress = _XCRIUBaseAddress;
195*53ee8cc1Swenshuai.xi pCECResourcePrivate->ulPMRiuBaseAddress = _PMRIUBaseAddress;
196*53ee8cc1Swenshuai.xi
197*53ee8cc1Swenshuai.xi mhal_CEC_init_riu_base(pCECResourcePrivate->ulXCRiuBaseAddress, pCECResourcePrivate->ulPMRiuBaseAddress);
198*53ee8cc1Swenshuai.xi
199*53ee8cc1Swenshuai.xi pCECResourcePrivate->bRIUAddrReady = TRUE;
200*53ee8cc1Swenshuai.xi }
201*53ee8cc1Swenshuai.xi }
202*53ee8cc1Swenshuai.xi
203*53ee8cc1Swenshuai.xi //**************************************************************************
204*53ee8cc1Swenshuai.xi // [Function Name]:
205*53ee8cc1Swenshuai.xi // MDrv_CecRxChkBuf()
206*53ee8cc1Swenshuai.xi // [Description]
207*53ee8cc1Swenshuai.xi // Driver layer: Use to retrieve CEC message and store into CEC Rx buffer
208*53ee8cc1Swenshuai.xi // [Arguments]:
209*53ee8cc1Swenshuai.xi //
210*53ee8cc1Swenshuai.xi // [Return]:
211*53ee8cc1Swenshuai.xi // TRUE: While get the new CEC message
212*53ee8cc1Swenshuai.xi // FALSE: No new CEC message
213*53ee8cc1Swenshuai.xi //**************************************************************************
_MDrv_CEC_ChkRxBuf(CEC_RESOURCE_PRIVATE * pCECResourcePrivate,MS_BOOL bGetResourceFlag)214*53ee8cc1Swenshuai.xi void _MDrv_CEC_ChkRxBuf(CEC_RESOURCE_PRIVATE *pCECResourcePrivate, MS_BOOL bGetResourceFlag) //don't place print message in this function
215*53ee8cc1Swenshuai.xi {
216*53ee8cc1Swenshuai.xi MS_U8 i;
217*53ee8cc1Swenshuai.xi // MS_BOOL ret = FALSE;
218*53ee8cc1Swenshuai.xi MS_U8 hashinfo[18];
219*53ee8cc1Swenshuai.xi MS_U8 temp1[11];
220*53ee8cc1Swenshuai.xi MS_U8 temp2[11];
221*53ee8cc1Swenshuai.xi MS_U8 k;
222*53ee8cc1Swenshuai.xi
223*53ee8cc1Swenshuai.xi if(mhal_CEC_IsMessageReceived())
224*53ee8cc1Swenshuai.xi {
225*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
226*53ee8cc1Swenshuai.xi {
227*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength = mhal_CEC_ReceivedMessageLen();
228*53ee8cc1Swenshuai.xi
229*53ee8cc1Swenshuai.xi if((pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength>1) && (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength<17)) //1: polling message, 17: over size, not needed to handle
230*53ee8cc1Swenshuai.xi {
231*53ee8cc1Swenshuai.xi for(i = 0 ; i < pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength ; i++)
232*53ee8cc1Swenshuai.xi {
233*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[i] = mhal_CEC_GetMessageByte(i);
234*53ee8cc1Swenshuai.xi }
235*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0] != mhal_CEC_HeaderSwap(pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0]) )
236*53ee8cc1Swenshuai.xi {
237*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecMsgCnt++;
238*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxE=((++pCECResourcePrivate->CecFifoIdxE)>=CEC_FIFO_NUM_COUNT)? 0 : pCECResourcePrivate->CecFifoIdxE;
239*53ee8cc1Swenshuai.xi }
240*53ee8cc1Swenshuai.xi else if( pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0] == 0xFF && pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[1] == E_MSG_STANDBY)//12.04 Albert-PT
241*53ee8cc1Swenshuai.xi {
242*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecMsgCnt++;
243*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxE=((++pCECResourcePrivate->CecFifoIdxE)>=CEC_FIFO_NUM_COUNT)? 0 : pCECResourcePrivate->CecFifoIdxE;
244*53ee8cc1Swenshuai.xi }
245*53ee8cc1Swenshuai.xi else if(pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0] == 0xFF && pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[1] == E_MSG_RC_REQUEST_ACTIVE_SOURCE)//2014.4.23 Cindy
246*53ee8cc1Swenshuai.xi {
247*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecMsgCnt++;
248*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxE=((++pCECResourcePrivate->CecFifoIdxE)>=CEC_FIFO_NUM_COUNT)? 0 : pCECResourcePrivate->CecFifoIdxE;
249*53ee8cc1Swenshuai.xi }
250*53ee8cc1Swenshuai.xi else if (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0] == mhal_CEC_HeaderSwap(pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0]))
251*53ee8cc1Swenshuai.xi {
252*53ee8cc1Swenshuai.xi if((pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[1] == 0xA0) &&
253*53ee8cc1Swenshuai.xi (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[2] == 0x36) &&
254*53ee8cc1Swenshuai.xi (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[3] == 0x97) &&
255*53ee8cc1Swenshuai.xi (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[4] == 0x00) )
256*53ee8cc1Swenshuai.xi {
257*53ee8cc1Swenshuai.xi MDrv_AUTH_GetHashInfo (hashinfo);
258*53ee8cc1Swenshuai.xi temp1[0] = 0x00;
259*53ee8cc1Swenshuai.xi temp1[1] = hashinfo[0];
260*53ee8cc1Swenshuai.xi temp1[2] = hashinfo[1];
261*53ee8cc1Swenshuai.xi temp2[0] = 0x01;
262*53ee8cc1Swenshuai.xi temp2[1] = hashinfo[0];
263*53ee8cc1Swenshuai.xi temp2[2] = hashinfo[1];
264*53ee8cc1Swenshuai.xi for(i = 0; i< 8; i++)
265*53ee8cc1Swenshuai.xi {
266*53ee8cc1Swenshuai.xi temp1[3+i] = hashinfo[2+i];
267*53ee8cc1Swenshuai.xi temp2[3+i] = hashinfo[10+i];
268*53ee8cc1Swenshuai.xi }
269*53ee8cc1Swenshuai.xi
270*53ee8cc1Swenshuai.xi k = mhal_CEC_SendFramex(0, 0xA0, temp1, 0x0B);
271*53ee8cc1Swenshuai.xi k = mhal_CEC_SendFramex(0, 0xA0, temp2, 0x0B);
272*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("mhal_CEC_SendFramex: res = 0x[%x]\n", k);
273*53ee8cc1Swenshuai.xi }
274*53ee8cc1Swenshuai.xi }
275*53ee8cc1Swenshuai.xi }
276*53ee8cc1Swenshuai.xi }
277*53ee8cc1Swenshuai.xi
278*53ee8cc1Swenshuai.xi mhal_CEC_ClearRxStatus();
279*53ee8cc1Swenshuai.xi }
280*53ee8cc1Swenshuai.xi
281*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
282*53ee8cc1Swenshuai.xi if(mhal_CEC_IsMessageReceived2())
283*53ee8cc1Swenshuai.xi {
284*53ee8cc1Swenshuai.xi if(bGetResourceFlag)
285*53ee8cc1Swenshuai.xi {
286*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength = mhal_CEC_ReceivedMessageLen2();
287*53ee8cc1Swenshuai.xi
288*53ee8cc1Swenshuai.xi if((pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength>1) && (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength<17)) //1: polling message, 17: over size, not needed to handle
289*53ee8cc1Swenshuai.xi {
290*53ee8cc1Swenshuai.xi for(i = 0 ; i < pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].ucLength ; i++)
291*53ee8cc1Swenshuai.xi {
292*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[i] = mhal_CEC_GetMessageByte2(i);
293*53ee8cc1Swenshuai.xi }
294*53ee8cc1Swenshuai.xi if( pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0] != mhal_CEC_HeaderSwap(pCECResourcePrivate->CecRxBufgCECInfo.CecFifoIdxE].tRxData[0]) )
295*53ee8cc1Swenshuai.xi {
296*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecMsgCnt++;
297*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxE=((++pCECResourcePrivate->CecFifoIdxE)>=CEC_FIFO_NUM_COUNT)? 0 : pCECResourcePrivate->CecFifoIdxE;
298*53ee8cc1Swenshuai.xi }
299*53ee8cc1Swenshuai.xi else if(pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[0] == 0xFF && pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxE].tRxData[1] == E_MSG_STANDBY)
300*53ee8cc1Swenshuai.xi {
301*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecMsgCnt++;
302*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxE=((++pCECResourcePrivate->CecFifoIdxE)>=CEC_FIFO_NUM_COUNT)? 0 : pCECResourcePrivate->CecFifoIdxE;
303*53ee8cc1Swenshuai.xi }
304*53ee8cc1Swenshuai.xi }
305*53ee8cc1Swenshuai.xi }
306*53ee8cc1Swenshuai.xi
307*53ee8cc1Swenshuai.xi mhal_CEC_ClearRxStatus2();
308*53ee8cc1Swenshuai.xi }
309*53ee8cc1Swenshuai.xi #endif
310*53ee8cc1Swenshuai.xi }
311*53ee8cc1Swenshuai.xi
312*53ee8cc1Swenshuai.xi //**************************************************************************
313*53ee8cc1Swenshuai.xi // [Function Name]:
314*53ee8cc1Swenshuai.xi // _MDrv_CEC_InitVariable()
315*53ee8cc1Swenshuai.xi // [Description]
316*53ee8cc1Swenshuai.xi //
317*53ee8cc1Swenshuai.xi // [Arguments]:
318*53ee8cc1Swenshuai.xi //
319*53ee8cc1Swenshuai.xi // [Return]:
320*53ee8cc1Swenshuai.xi //
321*53ee8cc1Swenshuai.xi //**************************************************************************
322*53ee8cc1Swenshuai.xi void _MDrv_CEC_InitVariable(CEC_RESOURCE_PRIVATE *pCECResourcePrivate)
323*53ee8cc1Swenshuai.xi {
324*53ee8cc1Swenshuai.xi MS_U8 i = 0;
325*53ee8cc1Swenshuai.xi MS_U8 j = 0;
326*53ee8cc1Swenshuai.xi
327*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCECIsSource = MDrv_SYS_GetChipType();
328*53ee8cc1Swenshuai.xi pCECResourcePrivate->bRIUAddrReady = FALSE;
329*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxS = 0;
330*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxE = 0;
331*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecMsgCnt = 0;
332*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecInitFinish = FALSE;
333*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecISRAttach = FALSE;
334*53ee8cc1Swenshuai.xi pCECResourcePrivate->bAttachDrvISR = TRUE;
335*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucRetryCount = RETRY_CNT;
336*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucVendorID[0] = 0x00;
337*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucVendorID[1] = 0x00;
338*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucVendorID[2] = 0x00;
339*53ee8cc1Swenshuai.xi pCECResourcePrivate->usPrePowerState = 0;
340*53ee8cc1Swenshuai.xi
341*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->bCECIsSource) // STB series
342*53ee8cc1Swenshuai.xi {
343*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TUNER1; // Tuner
344*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress[0] = 0x10; //default (1,0,0,0)
345*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress[1] = 0x00;
346*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyDeviceType = E_DEVICE_TYPE_TUNER; //Tuner device
347*53ee8cc1Swenshuai.xi }
348*53ee8cc1Swenshuai.xi else // TV series
349*53ee8cc1Swenshuai.xi {
350*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TV; //TV
351*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress[0] = 0x00; //default (0,0,0,0) for TV
352*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress[1] = 0x00;
353*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyDeviceType = E_DEVICE_TYPE_TV; //TV device
354*53ee8cc1Swenshuai.xi }
355*53ee8cc1Swenshuai.xi
356*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPowerStatus = E_MSG_PWRSTA_STANDBY2ON;
357*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActiveLogicalAddress = E_LA_TV;
358*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActiveDeviceType = E_DEVICE_TYPE_RESERVED;
359*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActivePowerStatus = E_MSG_PWRSTA_STANDBY;
360*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActivePhysicalAddress[0] = 0x00;
361*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActivePhysicalAddress[1] = 0x00;
362*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActiveDeviceCECVersion = CEC_VERSION_13a;
363*53ee8cc1Swenshuai.xi
364*53ee8cc1Swenshuai.xi for(i=0;i<CEC_FIFO_NUM_COUNT;i++)
365*53ee8cc1Swenshuai.xi {
366*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecRxBuf[i].ucLength = 0;
367*53ee8cc1Swenshuai.xi for(j=0;j<16;j++)
368*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecRxBuf[i].tRxData[j] = 0;
369*53ee8cc1Swenshuai.xi }
370*53ee8cc1Swenshuai.xi for(i=0;i<15;i++)
371*53ee8cc1Swenshuai.xi {
372*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecDevicesExisted[i] = FALSE;
373*53ee8cc1Swenshuai.xi }
374*53ee8cc1Swenshuai.xi }
375*53ee8cc1Swenshuai.xi
376*53ee8cc1Swenshuai.xi //**************************************************************************
377*53ee8cc1Swenshuai.xi // [Function Name]:
378*53ee8cc1Swenshuai.xi // _MDrv_CEC_SendFrame()
379*53ee8cc1Swenshuai.xi // [Description]
380*53ee8cc1Swenshuai.xi //
381*53ee8cc1Swenshuai.xi // [Arguments]:
382*53ee8cc1Swenshuai.xi //
383*53ee8cc1Swenshuai.xi // [Return]:
384*53ee8cc1Swenshuai.xi //
385*53ee8cc1Swenshuai.xi //**************************************************************************
386*53ee8cc1Swenshuai.xi static MS_U8 _MDrv_CEC_SendFrame(MS_U8 header, MS_U8 opcode, MS_U8* operand, MS_U8 len)
387*53ee8cc1Swenshuai.xi {
388*53ee8cc1Swenshuai.xi return (mhal_CEC_SendFrame(header, opcode, operand, len));
389*53ee8cc1Swenshuai.xi }
390*53ee8cc1Swenshuai.xi
391*53ee8cc1Swenshuai.xi //******************************************************************************
392*53ee8cc1Swenshuai.xi //
393*53ee8cc1Swenshuai.xi // [Function Name]:
394*53ee8cc1Swenshuai.xi // CecPingApi
395*53ee8cc1Swenshuai.xi // [Arguments]:
396*53ee8cc1Swenshuai.xi // destination address (range:0x01~0x0E)
397*53ee8cc1Swenshuai.xi // [Return]:
398*53ee8cc1Swenshuai.xi // CEC_ERROR_CODE
399*53ee8cc1Swenshuai.xi //*******************************************************************************
400*53ee8cc1Swenshuai.xi CEC_ERROR_CODE _MDrv_CEC_PingApi(MsCEC_DEVICELA addr)
401*53ee8cc1Swenshuai.xi {
402*53ee8cc1Swenshuai.xi MS_U8 res;
403*53ee8cc1Swenshuai.xi CEC_ERROR_CODE error_code = E_CEC_FEATURE_ABORT;
404*53ee8cc1Swenshuai.xi MS_U8* Oprend_ptr = NULL;
405*53ee8cc1Swenshuai.xi
406*53ee8cc1Swenshuai.xi if(addr>=0x0f)
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi error_code = E_CEC_FEATURE_ABORT;
409*53ee8cc1Swenshuai.xi return error_code;
410*53ee8cc1Swenshuai.xi }
411*53ee8cc1Swenshuai.xi
412*53ee8cc1Swenshuai.xi res = _MDrv_CEC_SendFrame( ((addr<<4)&0xF0) |(addr&0x0F), 0x00, Oprend_ptr, 0);
413*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("_MDrv_CEC_SendFrame: res = %u\n", res);
414*53ee8cc1Swenshuai.xi
415*53ee8cc1Swenshuai.xi if(res&E_CEC_TX_SUCCESS)
416*53ee8cc1Swenshuai.xi error_code = E_CEC_TX_SUCCESS;
417*53ee8cc1Swenshuai.xi else if(res&E_CEC_RF)
418*53ee8cc1Swenshuai.xi error_code = E_CEC_RF;
419*53ee8cc1Swenshuai.xi else if(res&E_CEC_LOST_ABT)
420*53ee8cc1Swenshuai.xi error_code = E_CEC_LOST_ABT;
421*53ee8cc1Swenshuai.xi else if(res&E_CEC_SYSTEM_BUSY)
422*53ee8cc1Swenshuai.xi error_code = E_CEC_SYSTEM_BUSY;
423*53ee8cc1Swenshuai.xi
424*53ee8cc1Swenshuai.xi return error_code;
425*53ee8cc1Swenshuai.xi }
426*53ee8cc1Swenshuai.xi
427*53ee8cc1Swenshuai.xi //**************************************************************************
428*53ee8cc1Swenshuai.xi // [Function Name]:
429*53ee8cc1Swenshuai.xi // _MDrv_CEC_FindMyAddress()
430*53ee8cc1Swenshuai.xi // [Description]
431*53ee8cc1Swenshuai.xi //
432*53ee8cc1Swenshuai.xi // [Arguments]:
433*53ee8cc1Swenshuai.xi //
434*53ee8cc1Swenshuai.xi // [Return]:
435*53ee8cc1Swenshuai.xi //
436*53ee8cc1Swenshuai.xi //**************************************************************************
437*53ee8cc1Swenshuai.xi void _MDrv_CEC_FindMyAddress(CEC_RESOURCE_PRIVATE *pCECResourcePrivate)
438*53ee8cc1Swenshuai.xi {
439*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("\r\n CEC Find My address \r\n");
440*53ee8cc1Swenshuai.xi
441*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->bCECIsSource)// STB series
442*53ee8cc1Swenshuai.xi {
443*53ee8cc1Swenshuai.xi if(_MDrv_CEC_PingApi(E_LA_TUNER1) == E_CEC_RF)
444*53ee8cc1Swenshuai.xi {
445*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TUNER1;
446*53ee8cc1Swenshuai.xi }
447*53ee8cc1Swenshuai.xi else if(_MDrv_CEC_PingApi(E_LA_TUNER2) == E_CEC_RF)
448*53ee8cc1Swenshuai.xi {
449*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TUNER2;
450*53ee8cc1Swenshuai.xi }
451*53ee8cc1Swenshuai.xi else if(_MDrv_CEC_PingApi(E_LA_TUNER3) == E_CEC_RF)
452*53ee8cc1Swenshuai.xi {
453*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TUNER3;
454*53ee8cc1Swenshuai.xi }
455*53ee8cc1Swenshuai.xi else if(_MDrv_CEC_PingApi(E_LA_TUNER4) == E_CEC_RF)
456*53ee8cc1Swenshuai.xi {
457*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TUNER4;
458*53ee8cc1Swenshuai.xi }
459*53ee8cc1Swenshuai.xi else if(_MDrv_CEC_PingApi(E_LA_FREE_USE) == E_CEC_RF)
460*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_FREE_USE;
461*53ee8cc1Swenshuai.xi else
462*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TUNER1;
463*53ee8cc1Swenshuai.xi }
464*53ee8cc1Swenshuai.xi else // TV series
465*53ee8cc1Swenshuai.xi {
466*53ee8cc1Swenshuai.xi if(_MDrv_CEC_PingApi(E_LA_TV) == E_CEC_RF)
467*53ee8cc1Swenshuai.xi {
468*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TV;
469*53ee8cc1Swenshuai.xi }
470*53ee8cc1Swenshuai.xi else if(_MDrv_CEC_PingApi(E_LA_FREE_USE) == E_CEC_RF)
471*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_FREE_USE;
472*53ee8cc1Swenshuai.xi else
473*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = E_LA_TV;
474*53ee8cc1Swenshuai.xi }
475*53ee8cc1Swenshuai.xi mhal_CEC_SetMyAddress((MS_U8)pCECResourcePrivate->MyLogicalAddress);
476*53ee8cc1Swenshuai.xi
477*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("\r\nMy logical address=%x\r\n", pCECResourcePrivate->MyLogicalAddress);
478*53ee8cc1Swenshuai.xi }
479*53ee8cc1Swenshuai.xi
480*53ee8cc1Swenshuai.xi //**************************************************************************
481*53ee8cc1Swenshuai.xi // [Function Name]:
482*53ee8cc1Swenshuai.xi // MDrv_CecCheckExistedDevices()
483*53ee8cc1Swenshuai.xi // [Description]
484*53ee8cc1Swenshuai.xi // Driver layer: Use to check the existed CEC devices currently
485*53ee8cc1Swenshuai.xi // [Arguments]:
486*53ee8cc1Swenshuai.xi //
487*53ee8cc1Swenshuai.xi // [Return]:
488*53ee8cc1Swenshuai.xi //
489*53ee8cc1Swenshuai.xi //**************************************************************************
490*53ee8cc1Swenshuai.xi void _MDrv_CEC_CheckExistDevices(CEC_RESOURCE_PRIVATE *pCECResourcePrivate)
491*53ee8cc1Swenshuai.xi {
492*53ee8cc1Swenshuai.xi MS_U8 i, res;
493*53ee8cc1Swenshuai.xi MS_U8* Oprend_ptr = NULL;
494*53ee8cc1Swenshuai.xi
495*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("\r\n Existed CEC device \r\n");
496*53ee8cc1Swenshuai.xi for (i=E_LA_TV; i<E_LA_UNREGISTERED; i++)
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi #if ENABLE_CUST01_CEC
499*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->bCECIsSource) // STB series
500*53ee8cc1Swenshuai.xi {
501*53ee8cc1Swenshuai.xi if(!((i==E_LA_TV) ||(i==E_LA_AUDIO_SYS)) )
502*53ee8cc1Swenshuai.xi continue;
503*53ee8cc1Swenshuai.xi }
504*53ee8cc1Swenshuai.xi else // TV series
505*53ee8cc1Swenshuai.xi {
506*53ee8cc1Swenshuai.xi if(!((i==E_LA_RECORDER1) || (i==E_LA_TUNER1) || (i==E_LA_PLAYBACK1) || (i==E_LA_AUDIO_SYS) || (i==E_LA_PLAYBACK2) || (i==E_LA_PLYBACK3)))
507*53ee8cc1Swenshuai.xi continue;
508*53ee8cc1Swenshuai.xi }
509*53ee8cc1Swenshuai.xi #endif // #if ENABLE_CUST01_CEC
510*53ee8cc1Swenshuai.xi
511*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("CEC CheckDev:%u\n",i);
512*53ee8cc1Swenshuai.xi
513*53ee8cc1Swenshuai.xi // Just request a response.
514*53ee8cc1Swenshuai.xi res = _MDrv_CEC_SendFrame( ((pCECResourcePrivate->MyLogicalAddress<<4)&0xF0) |(i&0x0F), 0x00, Oprend_ptr, 0);
515*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("_MDrv_CEC_SendFrame: res = %u\n", res);
516*53ee8cc1Swenshuai.xi
517*53ee8cc1Swenshuai.xi if (res&E_CEC_TX_SUCCESS)
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecDevicesExisted[i] = TRUE;
520*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActiveLogicalAddress = (MsCEC_DEVICELA)i;
521*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("\r\n DEVICE ID= %d \r\n", i);
522*53ee8cc1Swenshuai.xi }
523*53ee8cc1Swenshuai.xi else
524*53ee8cc1Swenshuai.xi {
525*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecDevicesExisted[i]= FALSE;
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi }
528*53ee8cc1Swenshuai.xi }
529*53ee8cc1Swenshuai.xi
530*53ee8cc1Swenshuai.xi //**************************************************************************
531*53ee8cc1Swenshuai.xi // [Function Name]:
532*53ee8cc1Swenshuai.xi // _MDrv_CEC_TxApi()
533*53ee8cc1Swenshuai.xi // [Description]
534*53ee8cc1Swenshuai.xi // Driver layer: Use to send CEC message
535*53ee8cc1Swenshuai.xi // [Arguments]:
536*53ee8cc1Swenshuai.xi // dst_address: destination logical address
537*53ee8cc1Swenshuai.xi // msg: CEC message
538*53ee8cc1Swenshuai.xi // operand_ptr: message parameters
539*53ee8cc1Swenshuai.xi // len: parameter length
540*53ee8cc1Swenshuai.xi // [Return]:
541*53ee8cc1Swenshuai.xi // error_code: return status
542*53ee8cc1Swenshuai.xi //**************************************************************************
543*53ee8cc1Swenshuai.xi CEC_ERROR_CODE _MDrv_CEC_TxApi(MS_U8 ucInitiatorLA, MsCEC_DEVICELA dst_address, MsCEC_MSGLIST msg, MS_U8* operand_ptr, MS_U8 len)
544*53ee8cc1Swenshuai.xi {
545*53ee8cc1Swenshuai.xi MS_U8 res, header;
546*53ee8cc1Swenshuai.xi CEC_ERROR_CODE error_code = E_CEC_FEATURE_ABORT;
547*53ee8cc1Swenshuai.xi
548*53ee8cc1Swenshuai.xi header = ((ucInitiatorLA<<4)&0xF0)|(dst_address&0x0F);
549*53ee8cc1Swenshuai.xi
550*53ee8cc1Swenshuai.xi res=_MDrv_CEC_SendFrame(header, msg, operand_ptr, len);
551*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("_MDrv_CEC_SendFrame: res = 0x[%x]\n", res);
552*53ee8cc1Swenshuai.xi
553*53ee8cc1Swenshuai.xi if(res&E_CEC_TX_SUCCESS)
554*53ee8cc1Swenshuai.xi error_code = E_CEC_TX_SUCCESS;
555*53ee8cc1Swenshuai.xi else if(res&E_CEC_RF)
556*53ee8cc1Swenshuai.xi error_code = E_CEC_RF;
557*53ee8cc1Swenshuai.xi else if(res&E_CEC_LOST_ABT)
558*53ee8cc1Swenshuai.xi error_code = E_CEC_LOST_ABT;
559*53ee8cc1Swenshuai.xi else if(res&E_CEC_SYSTEM_BUSY)
560*53ee8cc1Swenshuai.xi error_code = E_CEC_SYSTEM_BUSY;
561*53ee8cc1Swenshuai.xi
562*53ee8cc1Swenshuai.xi #if ENABLE_CUST01_CEC
563*53ee8cc1Swenshuai.xi if( (msg==E_MSG_UI_PRESS) && (error_code==E_CEC_TX_SUCCESS) )
564*53ee8cc1Swenshuai.xi {
565*53ee8cc1Swenshuai.xi res=_MDrv_CEC_SendFrame(header, E_MSG_UI_RELEASE, operand_ptr, 0);
566*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("_MDrv_CEC_SendFrame: res = %u\n", res);
567*53ee8cc1Swenshuai.xi
568*53ee8cc1Swenshuai.xi if(res&E_CEC_TX_SUCCESS)
569*53ee8cc1Swenshuai.xi error_code = E_CEC_TX_SUCCESS;
570*53ee8cc1Swenshuai.xi else if(res&E_CEC_RF)
571*53ee8cc1Swenshuai.xi error_code = E_CEC_RF;
572*53ee8cc1Swenshuai.xi else if(res&E_CEC_LOST_ABT)
573*53ee8cc1Swenshuai.xi error_code = E_CEC_LOST_ABT;
574*53ee8cc1Swenshuai.xi else if(res&E_CEC_SYSTEM_BUSY)
575*53ee8cc1Swenshuai.xi error_code = E_CEC_SYSTEM_BUSY;
576*53ee8cc1Swenshuai.xi }
577*53ee8cc1Swenshuai.xi #endif
578*53ee8cc1Swenshuai.xi return error_code;
579*53ee8cc1Swenshuai.xi }
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi //**************************************************************************
582*53ee8cc1Swenshuai.xi // [Function Name]:
583*53ee8cc1Swenshuai.xi // _MDrv_CEC_TxApi2()
584*53ee8cc1Swenshuai.xi // [Description]
585*53ee8cc1Swenshuai.xi // Driver layer: Use to send CEC message
586*53ee8cc1Swenshuai.xi // [Arguments]:
587*53ee8cc1Swenshuai.xi // dst_address: destination logical address
588*53ee8cc1Swenshuai.xi // msg: CEC message
589*53ee8cc1Swenshuai.xi // operand_ptr: message parameters
590*53ee8cc1Swenshuai.xi // len: parameter length
591*53ee8cc1Swenshuai.xi // [Return]:
592*53ee8cc1Swenshuai.xi // error_code: return status
593*53ee8cc1Swenshuai.xi //**************************************************************************
594*53ee8cc1Swenshuai.xi CEC_ERROR_CODE _MDrv_CEC_TxApi2(MS_U8 ucInitiatorLA, MsCEC_DEVICELA dst_address, MsCEC_MSGLIST msg, MS_U8* operand_ptr, MS_U8 len)
595*53ee8cc1Swenshuai.xi {
596*53ee8cc1Swenshuai.xi MS_U8 res, header;
597*53ee8cc1Swenshuai.xi CEC_ERROR_CODE error_code = E_CEC_FEATURE_ABORT;
598*53ee8cc1Swenshuai.xi
599*53ee8cc1Swenshuai.xi header = ((ucInitiatorLA<<4)&0xF0)|(dst_address&0x0F);
600*53ee8cc1Swenshuai.xi
601*53ee8cc1Swenshuai.xi res =_MDrv_CEC_SendFrame(header, msg, operand_ptr, len);
602*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("_MDrv_CEC_SendFrame: res = 0x[%x]\n", res);
603*53ee8cc1Swenshuai.xi
604*53ee8cc1Swenshuai.xi if(res&E_CEC_TX_SUCCESS)
605*53ee8cc1Swenshuai.xi error_code = E_CEC_TX_SUCCESS;
606*53ee8cc1Swenshuai.xi else if(res&E_CEC_RF)
607*53ee8cc1Swenshuai.xi error_code = E_CEC_RF;
608*53ee8cc1Swenshuai.xi else if(res&E_CEC_LOST_ABT)
609*53ee8cc1Swenshuai.xi error_code = E_CEC_LOST_ABT;
610*53ee8cc1Swenshuai.xi else if(res&E_CEC_SYSTEM_BUSY)
611*53ee8cc1Swenshuai.xi error_code = E_CEC_SYSTEM_BUSY;
612*53ee8cc1Swenshuai.xi
613*53ee8cc1Swenshuai.xi return error_code;
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi
616*53ee8cc1Swenshuai.xi //#if !CEC_DEVICE_IS_SOURCE// TV series
617*53ee8cc1Swenshuai.xi //**************************************************************************
618*53ee8cc1Swenshuai.xi // [Function Name]:
619*53ee8cc1Swenshuai.xi // _MDrv_CEC_RxIsr()
620*53ee8cc1Swenshuai.xi // [Description]
621*53ee8cc1Swenshuai.xi //
622*53ee8cc1Swenshuai.xi // [Arguments]:
623*53ee8cc1Swenshuai.xi //
624*53ee8cc1Swenshuai.xi // [Return]:
625*53ee8cc1Swenshuai.xi //
626*53ee8cc1Swenshuai.xi //**************************************************************************
627*53ee8cc1Swenshuai.xi static void _MDrv_CEC_RxIsr(InterruptNum eIntNum)
628*53ee8cc1Swenshuai.xi {
629*53ee8cc1Swenshuai.xi void* pModule = NULL;
630*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
631*53ee8cc1Swenshuai.xi MS_BOOL bGetResourceFlag = FALSE;
632*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
633*53ee8cc1Swenshuai.xi
634*53ee8cc1Swenshuai.xi UtopiaModuleGetPtr(MODULE_CEC, &pModule);
635*53ee8cc1Swenshuai.xi
636*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
637*53ee8cc1Swenshuai.xi {
638*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
639*53ee8cc1Swenshuai.xi }
640*53ee8cc1Swenshuai.xi else
641*53ee8cc1Swenshuai.xi {
642*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
643*53ee8cc1Swenshuai.xi {
644*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
645*53ee8cc1Swenshuai.xi }
646*53ee8cc1Swenshuai.xi else
647*53ee8cc1Swenshuai.xi {
648*53ee8cc1Swenshuai.xi bGetResourceFlag = TRUE;
649*53ee8cc1Swenshuai.xi }
650*53ee8cc1Swenshuai.xi }
651*53ee8cc1Swenshuai.xi
652*53ee8cc1Swenshuai.xi UNUSED(eIntNum);
653*53ee8cc1Swenshuai.xi
654*53ee8cc1Swenshuai.xi if(ENABLE_CEC_INT)
655*53ee8cc1Swenshuai.xi {
656*53ee8cc1Swenshuai.xi _MDrv_CEC_ChkRxBuf(pCECResourcePrivate, bGetResourceFlag);
657*53ee8cc1Swenshuai.xi }
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
660*53ee8cc1Swenshuai.xi
661*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_CEC);
662*53ee8cc1Swenshuai.xi }
663*53ee8cc1Swenshuai.xi //#endif // TV series
664*53ee8cc1Swenshuai.xi
665*53ee8cc1Swenshuai.xi //**************************************************************************
666*53ee8cc1Swenshuai.xi // [Function Name]:
667*53ee8cc1Swenshuai.xi // _MDrv_CEC_Init()
668*53ee8cc1Swenshuai.xi // [Description]
669*53ee8cc1Swenshuai.xi // Driver layer: CEC initiail sequence
670*53ee8cc1Swenshuai.xi // [Arguments]:
671*53ee8cc1Swenshuai.xi //
672*53ee8cc1Swenshuai.xi // [Return]:
673*53ee8cc1Swenshuai.xi //
674*53ee8cc1Swenshuai.xi //**************************************************************************
675*53ee8cc1Swenshuai.xi void _MDrv_CEC_Init(CEC_RESOURCE_PRIVATE *pCECResourcePrivate, MS_U32 u32XTAL_CLK_Hz)
676*53ee8cc1Swenshuai.xi {
677*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->ucInitialIndex != 0xA5)
678*53ee8cc1Swenshuai.xi {
679*53ee8cc1Swenshuai.xi _MDrv_CEC_InitVariable(pCECResourcePrivate);
680*53ee8cc1Swenshuai.xi
681*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucInitialIndex = 0xA5;
682*53ee8cc1Swenshuai.xi }
683*53ee8cc1Swenshuai.xi
684*53ee8cc1Swenshuai.xi _MDrv_CEC_init_riu_base(pCECResourcePrivate);
685*53ee8cc1Swenshuai.xi
686*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->bRIUAddrReady)
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi if(!pCECResourcePrivate->bCecInitFinish)
689*53ee8cc1Swenshuai.xi {
690*53ee8cc1Swenshuai.xi mhal_CEC_Init(u32XTAL_CLK_Hz, pCECResourcePrivate->MyLogicalAddress, pCECResourcePrivate->ucRetryCount);
691*53ee8cc1Swenshuai.xi
692*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecInitFinish = TRUE;
693*53ee8cc1Swenshuai.xi }
694*53ee8cc1Swenshuai.xi
695*53ee8cc1Swenshuai.xi if((!pCECResourcePrivate->bCecISRAttach) && (pCECResourcePrivate->bAttachDrvISR))
696*53ee8cc1Swenshuai.xi {
697*53ee8cc1Swenshuai.xi //#if !CEC_DEVICE_IS_SOURCE // TV series
698*53ee8cc1Swenshuai.xi #if ENABLE_CEC_INT
699*53ee8cc1Swenshuai.xi MsOS_AttachInterrupt(E_INT_IRQ_CEC, _MDrv_CEC_RxIsr);
700*53ee8cc1Swenshuai.xi MsOS_EnableInterrupt(E_INT_IRQ_CEC);
701*53ee8cc1Swenshuai.xi #endif
702*53ee8cc1Swenshuai.xi //#endif
703*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecISRAttach = TRUE;
704*53ee8cc1Swenshuai.xi }
705*53ee8cc1Swenshuai.xi
706*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPowerStatus = E_MSG_PWRSTA_ON;
707*53ee8cc1Swenshuai.xi
708*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("** Complete CEC Initiation!! **\r\n");
709*53ee8cc1Swenshuai.xi }
710*53ee8cc1Swenshuai.xi }
711*53ee8cc1Swenshuai.xi
712*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
713*53ee8cc1Swenshuai.xi // Global Functions
714*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
715*53ee8cc1Swenshuai.xi
716*53ee8cc1Swenshuai.xi //**************************************************************************
717*53ee8cc1Swenshuai.xi // [Function Name]:
718*53ee8cc1Swenshuai.xi // mdrv_CEC_STREventProc()
719*53ee8cc1Swenshuai.xi // [Description]
720*53ee8cc1Swenshuai.xi //
721*53ee8cc1Swenshuai.xi // [Arguments]:
722*53ee8cc1Swenshuai.xi //
723*53ee8cc1Swenshuai.xi // [Return]:
724*53ee8cc1Swenshuai.xi //
725*53ee8cc1Swenshuai.xi //**************************************************************************
726*53ee8cc1Swenshuai.xi MS_U32 mdrv_CEC_STREventProc(void* pModule, EN_POWER_MODE usPowerState)
727*53ee8cc1Swenshuai.xi {
728*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
729*53ee8cc1Swenshuai.xi MS_U32 ulReturnValue = UTOPIA_STATUS_FAIL;
730*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
731*53ee8cc1Swenshuai.xi
732*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
733*53ee8cc1Swenshuai.xi {
734*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
735*53ee8cc1Swenshuai.xi }
736*53ee8cc1Swenshuai.xi else
737*53ee8cc1Swenshuai.xi {
738*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
739*53ee8cc1Swenshuai.xi {
740*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
741*53ee8cc1Swenshuai.xi }
742*53ee8cc1Swenshuai.xi else
743*53ee8cc1Swenshuai.xi {
744*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->usPrePowerState != usPowerState)
745*53ee8cc1Swenshuai.xi {
746*53ee8cc1Swenshuai.xi if(usPowerState == E_POWER_SUSPEND)
747*53ee8cc1Swenshuai.xi {
748*53ee8cc1Swenshuai.xi ulReturnValue = UTOPIA_STATUS_SUCCESS;
749*53ee8cc1Swenshuai.xi }
750*53ee8cc1Swenshuai.xi else if(usPowerState == E_POWER_RESUME)
751*53ee8cc1Swenshuai.xi {
752*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->bRIUAddrReady)
753*53ee8cc1Swenshuai.xi {
754*53ee8cc1Swenshuai.xi mhal_CEC_Init(pCECResourcePrivate->ulXTAL_CLK_Hz, pCECResourcePrivate->MyLogicalAddress, pCECResourcePrivate->ucRetryCount);
755*53ee8cc1Swenshuai.xi }
756*53ee8cc1Swenshuai.xi
757*53ee8cc1Swenshuai.xi ulReturnValue = UTOPIA_STATUS_SUCCESS;
758*53ee8cc1Swenshuai.xi }
759*53ee8cc1Swenshuai.xi
760*53ee8cc1Swenshuai.xi pCECResourcePrivate->usPrePowerState = usPowerState;
761*53ee8cc1Swenshuai.xi }
762*53ee8cc1Swenshuai.xi }
763*53ee8cc1Swenshuai.xi }
764*53ee8cc1Swenshuai.xi
765*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
766*53ee8cc1Swenshuai.xi
767*53ee8cc1Swenshuai.xi return ulReturnValue;
768*53ee8cc1Swenshuai.xi }
769*53ee8cc1Swenshuai.xi
770*53ee8cc1Swenshuai.xi MS_BOOL MDrv_CEC_DDC2BI_GetInfo(void* pInstance, MS_CEC_INFO_LIST *pInfo)
771*53ee8cc1Swenshuai.xi {
772*53ee8cc1Swenshuai.xi void* pModule = NULL;
773*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
774*53ee8cc1Swenshuai.xi MS_BOOL bReturnValue = FALSE;
775*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
776*53ee8cc1Swenshuai.xi MS_U8 ucIndex = 0;
777*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
778*53ee8cc1Swenshuai.xi
779*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
780*53ee8cc1Swenshuai.xi
781*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
782*53ee8cc1Swenshuai.xi {
783*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
784*53ee8cc1Swenshuai.xi }
785*53ee8cc1Swenshuai.xi else
786*53ee8cc1Swenshuai.xi {
787*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
788*53ee8cc1Swenshuai.xi {
789*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
790*53ee8cc1Swenshuai.xi }
791*53ee8cc1Swenshuai.xi else
792*53ee8cc1Swenshuai.xi {
793*53ee8cc1Swenshuai.xi if(pInfo != NULL)
794*53ee8cc1Swenshuai.xi {
795*53ee8cc1Swenshuai.xi bReturnValue = TRUE;
796*53ee8cc1Swenshuai.xi
797*53ee8cc1Swenshuai.xi pInfo->ActiveDeviceCECVersion = pCECResourcePrivate->ActiveDeviceCECVersion;
798*53ee8cc1Swenshuai.xi pInfo->ActiveDeviceType = pCECResourcePrivate->ActiveDeviceType;
799*53ee8cc1Swenshuai.xi pInfo->ActiveLogicalAddress = pCECResourcePrivate->ActiveLogicalAddress;
800*53ee8cc1Swenshuai.xi pInfo->ActivePowerStatus = pCECResourcePrivate->ActivePowerStatus;
801*53ee8cc1Swenshuai.xi pInfo->bCecMsgCnt = pCECResourcePrivate->bCecMsgCnt;
802*53ee8cc1Swenshuai.xi pInfo->CecFifoIdxE = pCECResourcePrivate->CecFifoIdxE;
803*53ee8cc1Swenshuai.xi pInfo->CecFifoIdxS = pCECResourcePrivate->CecFifoIdxS;
804*53ee8cc1Swenshuai.xi pInfo->fCecInitFinish = pCECResourcePrivate->bCecInitFinish;
805*53ee8cc1Swenshuai.xi #if(ENABLE_CEC_MULTIPLE)
806*53ee8cc1Swenshuai.xi pInfo->IniLogicalAddress = pCECResourcePrivate->IniLogicalAddress;
807*53ee8cc1Swenshuai.xi pInfo->MyDeviceType2 = pCECResourcePrivate->MyDeviceType2;
808*53ee8cc1Swenshuai.xi pInfo->MyLogicalAddress2 = pCECResourcePrivate->MyLogicalAddress2;
809*53ee8cc1Swenshuai.xi
810*53ee8cc1Swenshuai.xi #endif
811*53ee8cc1Swenshuai.xi pInfo->MyDeviceType = pCECResourcePrivate->MyDeviceType;
812*53ee8cc1Swenshuai.xi pInfo->MyLogicalAddress = pCECResourcePrivate->MyLogicalAddress;
813*53ee8cc1Swenshuai.xi pInfo->MyPowerStatus = pCECResourcePrivate->MyPowerStatus;
814*53ee8cc1Swenshuai.xi
815*53ee8cc1Swenshuai.xi for(uctemp = 0; uctemp < CEC_DEVICE_EXIST_COUNT; uctemp++)
816*53ee8cc1Swenshuai.xi {
817*53ee8cc1Swenshuai.xi if(uctemp < CEC_PHY_ADDR_COUNT)
818*53ee8cc1Swenshuai.xi {
819*53ee8cc1Swenshuai.xi pInfo->ActivePhysicalAddress[uctemp] = pCECResourcePrivate->ActivePhysicalAddress[uctemp];
820*53ee8cc1Swenshuai.xi pInfo->MyPhysicalAddress[uctemp] = pCECResourcePrivate->MyPhysicalAddress[uctemp];
821*53ee8cc1Swenshuai.xi #if(ENABLE_CEC_MULTIPLE)
822*53ee8cc1Swenshuai.xi pInfo->MyPhysicalAddress2[uctemp] = pCECResourcePrivate->MyPhysicalAddress2[uctemp];
823*53ee8cc1Swenshuai.xi #endif
824*53ee8cc1Swenshuai.xi }
825*53ee8cc1Swenshuai.xi
826*53ee8cc1Swenshuai.xi if(uctemp < CEC_DEVICE_EXIST_COUNT)
827*53ee8cc1Swenshuai.xi {
828*53ee8cc1Swenshuai.xi pInfo->CecDevicesExisted[uctemp] = pCECResourcePrivate->CecDevicesExisted[uctemp];
829*53ee8cc1Swenshuai.xi }
830*53ee8cc1Swenshuai.xi
831*53ee8cc1Swenshuai.xi if(uctemp < CEC_FIFO_NUM_COUNT)
832*53ee8cc1Swenshuai.xi {
833*53ee8cc1Swenshuai.xi pInfo->CecRxBuf[uctemp].ucLength = pCECResourcePrivate->CecRxBuf[uctemp].ucLength;
834*53ee8cc1Swenshuai.xi
835*53ee8cc1Swenshuai.xi for(ucIndex = 0; ucIndex < CEC_FIFO_DATA_NUMBER; ucIndex++)
836*53ee8cc1Swenshuai.xi {
837*53ee8cc1Swenshuai.xi pInfo->CecRxBuf[uctemp].tRxData[ucIndex] = pCECResourcePrivate->CecRxBuf[uctemp].tRxData[ucIndex];
838*53ee8cc1Swenshuai.xi }
839*53ee8cc1Swenshuai.xi }
840*53ee8cc1Swenshuai.xi }
841*53ee8cc1Swenshuai.xi }
842*53ee8cc1Swenshuai.xi }
843*53ee8cc1Swenshuai.xi }
844*53ee8cc1Swenshuai.xi
845*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
846*53ee8cc1Swenshuai.xi
847*53ee8cc1Swenshuai.xi return bReturnValue;
848*53ee8cc1Swenshuai.xi }
849*53ee8cc1Swenshuai.xi
850*53ee8cc1Swenshuai.xi //**************************************************************************
851*53ee8cc1Swenshuai.xi // [Function Name]:
852*53ee8cc1Swenshuai.xi // MDrv_CEC_PortSelect()
853*53ee8cc1Swenshuai.xi // [Description]
854*53ee8cc1Swenshuai.xi // Port Select
855*53ee8cc1Swenshuai.xi // [Arguments]:
856*53ee8cc1Swenshuai.xi //
857*53ee8cc1Swenshuai.xi // [Return]:
858*53ee8cc1Swenshuai.xi //
859*53ee8cc1Swenshuai.xi //**************************************************************************
860*53ee8cc1Swenshuai.xi void MDrv_CEC_PortSelect(void* pInstance, MsCEC_INPUT_PORT InputPort)
861*53ee8cc1Swenshuai.xi {
862*53ee8cc1Swenshuai.xi mhal_CEC_PortSelect(InputPort);
863*53ee8cc1Swenshuai.xi }
864*53ee8cc1Swenshuai.xi
865*53ee8cc1Swenshuai.xi //**************************************************************************
866*53ee8cc1Swenshuai.xi // [Function Name]:
867*53ee8cc1Swenshuai.xi // MDrv_CecExit()
868*53ee8cc1Swenshuai.xi // [Description]
869*53ee8cc1Swenshuai.xi // Driver layer: CEC initiail sequence
870*53ee8cc1Swenshuai.xi // [Arguments]:
871*53ee8cc1Swenshuai.xi //
872*53ee8cc1Swenshuai.xi // [Return]:
873*53ee8cc1Swenshuai.xi //
874*53ee8cc1Swenshuai.xi //*************************************************************************
875*53ee8cc1Swenshuai.xi void MDrv_CEC_Exit(void* pInstance)
876*53ee8cc1Swenshuai.xi {
877*53ee8cc1Swenshuai.xi void* pModule = NULL;
878*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
879*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
880*53ee8cc1Swenshuai.xi
881*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
882*53ee8cc1Swenshuai.xi
883*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
884*53ee8cc1Swenshuai.xi {
885*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
886*53ee8cc1Swenshuai.xi }
887*53ee8cc1Swenshuai.xi else
888*53ee8cc1Swenshuai.xi {
889*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
890*53ee8cc1Swenshuai.xi {
891*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
892*53ee8cc1Swenshuai.xi }
893*53ee8cc1Swenshuai.xi else
894*53ee8cc1Swenshuai.xi {
895*53ee8cc1Swenshuai.xi if((pCECResourcePrivate->bCecISRAttach) && (pCECResourcePrivate->bAttachDrvISR))
896*53ee8cc1Swenshuai.xi {
897*53ee8cc1Swenshuai.xi // Release CEC
898*53ee8cc1Swenshuai.xi MsOS_DetachInterrupt(E_INT_IRQ_CEC);
899*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecISRAttach = FALSE;
900*53ee8cc1Swenshuai.xi }
901*53ee8cc1Swenshuai.xi }
902*53ee8cc1Swenshuai.xi }
903*53ee8cc1Swenshuai.xi
904*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
905*53ee8cc1Swenshuai.xi
906*53ee8cc1Swenshuai.xi // Mask CEC interrupt
907*53ee8cc1Swenshuai.xi mhal_CEC_INTEn(FALSE);
908*53ee8cc1Swenshuai.xi
909*53ee8cc1Swenshuai.xi }
910*53ee8cc1Swenshuai.xi
911*53ee8cc1Swenshuai.xi //**************************************************************************
912*53ee8cc1Swenshuai.xi // [Function Name]:
913*53ee8cc1Swenshuai.xi // MDrv_CecInit()
914*53ee8cc1Swenshuai.xi // [Description]
915*53ee8cc1Swenshuai.xi // Driver layer: CEC set own logical address
916*53ee8cc1Swenshuai.xi // [Arguments]:
917*53ee8cc1Swenshuai.xi //
918*53ee8cc1Swenshuai.xi // [Return]:
919*53ee8cc1Swenshuai.xi //
920*53ee8cc1Swenshuai.xi //**************************************************************************
921*53ee8cc1Swenshuai.xi void MDrv_CEC_SetMyLogicalAddress(void* pInstance, MsCEC_DEVICELA myLA)
922*53ee8cc1Swenshuai.xi {
923*53ee8cc1Swenshuai.xi void* pModule = NULL;
924*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
925*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
926*53ee8cc1Swenshuai.xi
927*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
928*53ee8cc1Swenshuai.xi
929*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
930*53ee8cc1Swenshuai.xi {
931*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
932*53ee8cc1Swenshuai.xi }
933*53ee8cc1Swenshuai.xi else
934*53ee8cc1Swenshuai.xi {
935*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
936*53ee8cc1Swenshuai.xi {
937*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
938*53ee8cc1Swenshuai.xi }
939*53ee8cc1Swenshuai.xi else
940*53ee8cc1Swenshuai.xi {
941*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress = myLA;
942*53ee8cc1Swenshuai.xi mhal_CEC_SetMyAddress((MS_U8)myLA);
943*53ee8cc1Swenshuai.xi }
944*53ee8cc1Swenshuai.xi }
945*53ee8cc1Swenshuai.xi
946*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
947*53ee8cc1Swenshuai.xi }
948*53ee8cc1Swenshuai.xi
949*53ee8cc1Swenshuai.xi //**************************************************************************
950*53ee8cc1Swenshuai.xi // [Function Name]:
951*53ee8cc1Swenshuai.xi // MDrv_CEC_InitChip()
952*53ee8cc1Swenshuai.xi // [Description]
953*53ee8cc1Swenshuai.xi // Driver layer: CEC initiail chip
954*53ee8cc1Swenshuai.xi // [Arguments]:
955*53ee8cc1Swenshuai.xi //
956*53ee8cc1Swenshuai.xi // [Return]:
957*53ee8cc1Swenshuai.xi //
958*53ee8cc1Swenshuai.xi //**************************************************************************
959*53ee8cc1Swenshuai.xi void MDrv_CEC_InitChip(void* pInstance, MS_U32 u32XTAL_CLK_Hz)
960*53ee8cc1Swenshuai.xi {
961*53ee8cc1Swenshuai.xi void* pModule = NULL;
962*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
963*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
964*53ee8cc1Swenshuai.xi
965*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
966*53ee8cc1Swenshuai.xi
967*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
968*53ee8cc1Swenshuai.xi {
969*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
970*53ee8cc1Swenshuai.xi }
971*53ee8cc1Swenshuai.xi else
972*53ee8cc1Swenshuai.xi {
973*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
976*53ee8cc1Swenshuai.xi }
977*53ee8cc1Swenshuai.xi else
978*53ee8cc1Swenshuai.xi {
979*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("** CEC init: MDrv_CEC_InitChip **\n");
980*53ee8cc1Swenshuai.xi
981*53ee8cc1Swenshuai.xi pCECResourcePrivate->ulXTAL_CLK_Hz = u32XTAL_CLK_Hz;
982*53ee8cc1Swenshuai.xi _MDrv_CEC_Init(pCECResourcePrivate, pCECResourcePrivate->ulXTAL_CLK_Hz);
983*53ee8cc1Swenshuai.xi }
984*53ee8cc1Swenshuai.xi }
985*53ee8cc1Swenshuai.xi
986*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
987*53ee8cc1Swenshuai.xi }
988*53ee8cc1Swenshuai.xi
989*53ee8cc1Swenshuai.xi //**************************************************************************
990*53ee8cc1Swenshuai.xi // [Function Name]:
991*53ee8cc1Swenshuai.xi // MDrv_CEC_Init()
992*53ee8cc1Swenshuai.xi // [Description]
993*53ee8cc1Swenshuai.xi // CEC initial sequence
994*53ee8cc1Swenshuai.xi // [Arguments]:
995*53ee8cc1Swenshuai.xi //
996*53ee8cc1Swenshuai.xi // [Return]:
997*53ee8cc1Swenshuai.xi //
998*53ee8cc1Swenshuai.xi //**************************************************************************
999*53ee8cc1Swenshuai.xi void MDrv_CEC_Init(void* pInstance, MS_U32 u32XTAL_CLK_Hz)
1000*53ee8cc1Swenshuai.xi {
1001*53ee8cc1Swenshuai.xi void* pModule = NULL;
1002*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1003*53ee8cc1Swenshuai.xi MS_BOOL bIsSource = FALSE;
1004*53ee8cc1Swenshuai.xi MS_BOOL bDeviceExisted[CEC_DEVICE_EXIST_COUNT] = {0};
1005*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1006*53ee8cc1Swenshuai.xi MS_U8* pPowerStatus = 0;
1007*53ee8cc1Swenshuai.xi MsCEC_DEVICELA i;
1008*53ee8cc1Swenshuai.xi #if !ENABLE_SW_CEC_WAKEUP
1009*53ee8cc1Swenshuai.xi MS_U8 u8PowerOnMode = 0;
1010*53ee8cc1Swenshuai.xi #endif
1011*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1012*53ee8cc1Swenshuai.xi
1013*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1014*53ee8cc1Swenshuai.xi
1015*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1016*53ee8cc1Swenshuai.xi {
1017*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1018*53ee8cc1Swenshuai.xi }
1019*53ee8cc1Swenshuai.xi else
1020*53ee8cc1Swenshuai.xi {
1021*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1022*53ee8cc1Swenshuai.xi {
1023*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1024*53ee8cc1Swenshuai.xi }
1025*53ee8cc1Swenshuai.xi else
1026*53ee8cc1Swenshuai.xi {
1027*53ee8cc1Swenshuai.xi _MDrv_CEC_Init(pCECResourcePrivate, u32XTAL_CLK_Hz);
1028*53ee8cc1Swenshuai.xi _MDrv_CEC_FindMyAddress(pCECResourcePrivate); //logical address for this TV.
1029*53ee8cc1Swenshuai.xi _MDrv_CEC_CheckExistDevices(pCECResourcePrivate);
1030*53ee8cc1Swenshuai.xi
1031*53ee8cc1Swenshuai.xi bIsSource = pCECResourcePrivate->bCECIsSource;
1032*53ee8cc1Swenshuai.xi
1033*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1034*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1035*53ee8cc1Swenshuai.xi #else
1036*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1037*53ee8cc1Swenshuai.xi #endif
1038*53ee8cc1Swenshuai.xi pPowerStatus = (MS_U8*)&(pCECResourcePrivate->MyPowerStatus);
1039*53ee8cc1Swenshuai.xi
1040*53ee8cc1Swenshuai.xi for (i=E_LA_TV; i<E_LA_UNREGISTERED; i++)
1041*53ee8cc1Swenshuai.xi {
1042*53ee8cc1Swenshuai.xi bDeviceExisted[i] = pCECResourcePrivate->CecDevicesExisted[i];
1043*53ee8cc1Swenshuai.xi }
1044*53ee8cc1Swenshuai.xi }
1045*53ee8cc1Swenshuai.xi }
1046*53ee8cc1Swenshuai.xi
1047*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1048*53ee8cc1Swenshuai.xi
1049*53ee8cc1Swenshuai.xi // report power status to the active CEC devices
1050*53ee8cc1Swenshuai.xi for (i=E_LA_TV; i<E_LA_UNREGISTERED; i++)
1051*53ee8cc1Swenshuai.xi {
1052*53ee8cc1Swenshuai.xi #if ENABLE_CUST01_CEC
1053*53ee8cc1Swenshuai.xi if(bIsSource)
1054*53ee8cc1Swenshuai.xi {
1055*53ee8cc1Swenshuai.xi if(!((i==E_LA_TV) ||(i==E_LA_AUDIO_SYS)) )
1056*53ee8cc1Swenshuai.xi continue;
1057*53ee8cc1Swenshuai.xi }
1058*53ee8cc1Swenshuai.xi else
1059*53ee8cc1Swenshuai.xi {
1060*53ee8cc1Swenshuai.xi if(!((i==E_LA_RECORDER1) || (i==E_LA_TUNER1) || (i==E_LA_PLAYBACK1) || (i==E_LA_AUDIO_SYS) || (i==E_LA_PLAYBACK2) || (i==E_LA_PLYBACK3)))
1061*53ee8cc1Swenshuai.xi continue;
1062*53ee8cc1Swenshuai.xi }
1063*53ee8cc1Swenshuai.xi #endif // #if ENABLE_CUST01_CEC
1064*53ee8cc1Swenshuai.xi if(bDeviceExisted[i])
1065*53ee8cc1Swenshuai.xi {
1066*53ee8cc1Swenshuai.xi _MDrv_CEC_TxApi(ucInitiatorLA, i, E_MSG_PS_REPORT_POWER_STATUS, pPowerStatus, 1); // report TV power status
1067*53ee8cc1Swenshuai.xi }
1068*53ee8cc1Swenshuai.xi }
1069*53ee8cc1Swenshuai.xi
1070*53ee8cc1Swenshuai.xi //some dvd player may send the active source too early,
1071*53ee8cc1Swenshuai.xi //so we add here another request active source to get the proper cmd from player
1072*53ee8cc1Swenshuai.xi //to get the correct the HDMI port to switch to.
1073*53ee8cc1Swenshuai.xi #if !ENABLE_SW_CEC_WAKEUP
1074*53ee8cc1Swenshuai.xi mdrv_pm_ctrl_read(CTRL_READ_CMD, CP_READ_POWERON_MODE, 1, &u8PowerOnMode);
1075*53ee8cc1Swenshuai.xi if(u8PowerOnMode == M_POWER_ON_BY_HDMI_CEC)
1076*53ee8cc1Swenshuai.xi {
1077*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("cec wake up, then req active source\n");
1078*53ee8cc1Swenshuai.xi _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_RC_REQ_ACTIVE_SOURCE, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
1079*53ee8cc1Swenshuai.xi }
1080*53ee8cc1Swenshuai.xi #endif
1081*53ee8cc1Swenshuai.xi
1082*53ee8cc1Swenshuai.xi }
1083*53ee8cc1Swenshuai.xi
1084*53ee8cc1Swenshuai.xi //**************************************************************************
1085*53ee8cc1Swenshuai.xi // [Function Name]:
1086*53ee8cc1Swenshuai.xi // MDrv_CecCheckExistedDevices()
1087*53ee8cc1Swenshuai.xi // [Description]
1088*53ee8cc1Swenshuai.xi // Driver layer: Use to check the existed CEC devices currently
1089*53ee8cc1Swenshuai.xi // [Arguments]:
1090*53ee8cc1Swenshuai.xi //
1091*53ee8cc1Swenshuai.xi // [Return]:
1092*53ee8cc1Swenshuai.xi //
1093*53ee8cc1Swenshuai.xi //**************************************************************************
1094*53ee8cc1Swenshuai.xi void MDrv_CEC_CheckExistDevices(void* pInstance)
1095*53ee8cc1Swenshuai.xi {
1096*53ee8cc1Swenshuai.xi void* pModule = NULL;
1097*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1098*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1099*53ee8cc1Swenshuai.xi
1100*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1101*53ee8cc1Swenshuai.xi
1102*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1103*53ee8cc1Swenshuai.xi {
1104*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1105*53ee8cc1Swenshuai.xi }
1106*53ee8cc1Swenshuai.xi else
1107*53ee8cc1Swenshuai.xi {
1108*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1109*53ee8cc1Swenshuai.xi {
1110*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1111*53ee8cc1Swenshuai.xi }
1112*53ee8cc1Swenshuai.xi else
1113*53ee8cc1Swenshuai.xi {
1114*53ee8cc1Swenshuai.xi _MDrv_CEC_CheckExistDevices(pCECResourcePrivate);
1115*53ee8cc1Swenshuai.xi }
1116*53ee8cc1Swenshuai.xi }
1117*53ee8cc1Swenshuai.xi
1118*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1119*53ee8cc1Swenshuai.xi }
1120*53ee8cc1Swenshuai.xi
1121*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1122*53ee8cc1Swenshuai.xi // Local Functions
1123*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1124*53ee8cc1Swenshuai.xi
1125*53ee8cc1Swenshuai.xi //**************************************************************************
1126*53ee8cc1Swenshuai.xi // [Function Name]:
1127*53ee8cc1Swenshuai.xi // MDrv_CEC_NextDevice()
1128*53ee8cc1Swenshuai.xi // [Description]
1129*53ee8cc1Swenshuai.xi // Set logical address to next active device
1130*53ee8cc1Swenshuai.xi // [Arguments]:
1131*53ee8cc1Swenshuai.xi //
1132*53ee8cc1Swenshuai.xi // [Return]:
1133*53ee8cc1Swenshuai.xi // Next CEC active device's logical address
1134*53ee8cc1Swenshuai.xi //**************************************************************************
1135*53ee8cc1Swenshuai.xi MsCEC_DEVICELA MDrv_CEC_NextDevice(void* pInstance)
1136*53ee8cc1Swenshuai.xi {
1137*53ee8cc1Swenshuai.xi void* pModule = NULL;
1138*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1139*53ee8cc1Swenshuai.xi MS_U8 uctemp = 0;
1140*53ee8cc1Swenshuai.xi MsCEC_DEVICELA eReturnValue = E_LA_UNREGISTERED;
1141*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1142*53ee8cc1Swenshuai.xi
1143*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1144*53ee8cc1Swenshuai.xi
1145*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1146*53ee8cc1Swenshuai.xi {
1147*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1148*53ee8cc1Swenshuai.xi }
1149*53ee8cc1Swenshuai.xi else
1150*53ee8cc1Swenshuai.xi {
1151*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1152*53ee8cc1Swenshuai.xi {
1153*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1154*53ee8cc1Swenshuai.xi }
1155*53ee8cc1Swenshuai.xi else
1156*53ee8cc1Swenshuai.xi {
1157*53ee8cc1Swenshuai.xi _MDrv_CEC_CheckExistDevices(pCECResourcePrivate);
1158*53ee8cc1Swenshuai.xi
1159*53ee8cc1Swenshuai.xi eReturnValue = pCECResourcePrivate->ActiveLogicalAddress;
1160*53ee8cc1Swenshuai.xi
1161*53ee8cc1Swenshuai.xi for(uctemp = (pCECResourcePrivate->ActiveLogicalAddress +1); uctemp < E_LA_UNREGISTERED; uctemp++)
1162*53ee8cc1Swenshuai.xi {
1163*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->CecDevicesExisted[uctemp] && (uctemp != E_LA_TV) && (uctemp != E_LA_FREE_USE))
1164*53ee8cc1Swenshuai.xi {
1165*53ee8cc1Swenshuai.xi eReturnValue = (MsCEC_DEVICELA)uctemp;
1166*53ee8cc1Swenshuai.xi }
1167*53ee8cc1Swenshuai.xi }
1168*53ee8cc1Swenshuai.xi }
1169*53ee8cc1Swenshuai.xi }
1170*53ee8cc1Swenshuai.xi
1171*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1172*53ee8cc1Swenshuai.xi
1173*53ee8cc1Swenshuai.xi return eReturnValue;
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi
1176*53ee8cc1Swenshuai.xi //**************************************************************************
1177*53ee8cc1Swenshuai.xi // [Function Name]:
1178*53ee8cc1Swenshuai.xi // MDrv_CecRxChkBuf()
1179*53ee8cc1Swenshuai.xi // [Description]
1180*53ee8cc1Swenshuai.xi // Driver layer: Use to retrieve CEC message and store into CEC Rx buffer
1181*53ee8cc1Swenshuai.xi // [Arguments]:
1182*53ee8cc1Swenshuai.xi //
1183*53ee8cc1Swenshuai.xi // [Return]:
1184*53ee8cc1Swenshuai.xi // TRUE: While get the new CEC message
1185*53ee8cc1Swenshuai.xi // FALSE: No new CEC message
1186*53ee8cc1Swenshuai.xi //**************************************************************************
1187*53ee8cc1Swenshuai.xi void MDrv_CEC_ChkRxBuf(void* pInstance) //don't place print message in this function
1188*53ee8cc1Swenshuai.xi {
1189*53ee8cc1Swenshuai.xi void* pModule = NULL;
1190*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1191*53ee8cc1Swenshuai.xi MS_BOOL bGetResourceFlag = FALSE;
1192*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1193*53ee8cc1Swenshuai.xi
1194*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1195*53ee8cc1Swenshuai.xi
1196*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1197*53ee8cc1Swenshuai.xi {
1198*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1199*53ee8cc1Swenshuai.xi }
1200*53ee8cc1Swenshuai.xi else
1201*53ee8cc1Swenshuai.xi {
1202*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1203*53ee8cc1Swenshuai.xi {
1204*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1205*53ee8cc1Swenshuai.xi }
1206*53ee8cc1Swenshuai.xi else
1207*53ee8cc1Swenshuai.xi {
1208*53ee8cc1Swenshuai.xi bGetResourceFlag = TRUE;
1209*53ee8cc1Swenshuai.xi }
1210*53ee8cc1Swenshuai.xi }
1211*53ee8cc1Swenshuai.xi
1212*53ee8cc1Swenshuai.xi _MDrv_CEC_ChkRxBuf(pCECResourcePrivate, bGetResourceFlag);
1213*53ee8cc1Swenshuai.xi
1214*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1215*53ee8cc1Swenshuai.xi }
1216*53ee8cc1Swenshuai.xi
1217*53ee8cc1Swenshuai.xi //**************************************************************************
1218*53ee8cc1Swenshuai.xi // [Function Name]:
1219*53ee8cc1Swenshuai.xi // MDrv_CEC_TxSendMsg()
1220*53ee8cc1Swenshuai.xi // [Description]
1221*53ee8cc1Swenshuai.xi // Use to send any CEC message by user defined
1222*53ee8cc1Swenshuai.xi // [Arguments]:
1223*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1224*53ee8cc1Swenshuai.xi // msg: CEC message
1225*53ee8cc1Swenshuai.xi // cmd: message parameters
1226*53ee8cc1Swenshuai.xi // len: parameter length
1227*53ee8cc1Swenshuai.xi // [Return]:
1228*53ee8cc1Swenshuai.xi // error_code: return status
1229*53ee8cc1Swenshuai.xi //**************************************************************************
1230*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_TxSendMsg(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSGLIST msg, MS_U8 *cmd, MS_U8 len)
1231*53ee8cc1Swenshuai.xi {
1232*53ee8cc1Swenshuai.xi void* pModule = NULL;
1233*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1234*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1235*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1236*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1237*53ee8cc1Swenshuai.xi
1238*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1239*53ee8cc1Swenshuai.xi
1240*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1241*53ee8cc1Swenshuai.xi {
1242*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1243*53ee8cc1Swenshuai.xi }
1244*53ee8cc1Swenshuai.xi else
1245*53ee8cc1Swenshuai.xi {
1246*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1247*53ee8cc1Swenshuai.xi {
1248*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1249*53ee8cc1Swenshuai.xi }
1250*53ee8cc1Swenshuai.xi else
1251*53ee8cc1Swenshuai.xi {
1252*53ee8cc1Swenshuai.xi
1253*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1254*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1255*53ee8cc1Swenshuai.xi #else
1256*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1257*53ee8cc1Swenshuai.xi #endif
1258*53ee8cc1Swenshuai.xi }
1259*53ee8cc1Swenshuai.xi }
1260*53ee8cc1Swenshuai.xi
1261*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1262*53ee8cc1Swenshuai.xi
1263*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, msg, cmd, len);
1264*53ee8cc1Swenshuai.xi
1265*53ee8cc1Swenshuai.xi return res;
1266*53ee8cc1Swenshuai.xi }
1267*53ee8cc1Swenshuai.xi
1268*53ee8cc1Swenshuai.xi //**************************************************************************
1269*53ee8cc1Swenshuai.xi // [Function Name]:
1270*53ee8cc1Swenshuai.xi // MApi_CEC_TxSendMsg2()
1271*53ee8cc1Swenshuai.xi // [Description]
1272*53ee8cc1Swenshuai.xi // Use to send any CEC message by user defined
1273*53ee8cc1Swenshuai.xi // [Arguments]:
1274*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1275*53ee8cc1Swenshuai.xi // msg: CEC message
1276*53ee8cc1Swenshuai.xi // cmd: message parameters
1277*53ee8cc1Swenshuai.xi // len: parameter length
1278*53ee8cc1Swenshuai.xi // [Return]:
1279*53ee8cc1Swenshuai.xi // error_code: return status
1280*53ee8cc1Swenshuai.xi //**************************************************************************
1281*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_TxSendMsg2(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSGLIST msg, MS_U8* cmd, MS_U8 len)
1282*53ee8cc1Swenshuai.xi {
1283*53ee8cc1Swenshuai.xi void* pModule = NULL;
1284*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1285*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1286*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1287*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1288*53ee8cc1Swenshuai.xi
1289*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1290*53ee8cc1Swenshuai.xi
1291*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1292*53ee8cc1Swenshuai.xi {
1293*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi else
1296*53ee8cc1Swenshuai.xi {
1297*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1298*53ee8cc1Swenshuai.xi {
1299*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1300*53ee8cc1Swenshuai.xi }
1301*53ee8cc1Swenshuai.xi else
1302*53ee8cc1Swenshuai.xi {
1303*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1304*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1305*53ee8cc1Swenshuai.xi #else
1306*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1307*53ee8cc1Swenshuai.xi #endif
1308*53ee8cc1Swenshuai.xi }
1309*53ee8cc1Swenshuai.xi }
1310*53ee8cc1Swenshuai.xi
1311*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1312*53ee8cc1Swenshuai.xi
1313*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi2(ucInitiatorLA, dst_address, msg, cmd, len);
1314*53ee8cc1Swenshuai.xi
1315*53ee8cc1Swenshuai.xi return res;
1316*53ee8cc1Swenshuai.xi }
1317*53ee8cc1Swenshuai.xi //**************************************************************************
1318*53ee8cc1Swenshuai.xi // [Function Name]:
1319*53ee8cc1Swenshuai.xi // MDrv_CecTxSendPollingMsg()
1320*53ee8cc1Swenshuai.xi // [Description]
1321*53ee8cc1Swenshuai.xi // Use to send any CEC polling msg by user defined
1322*53ee8cc1Swenshuai.xi // [Arguments]:
1323*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1324*53ee8cc1Swenshuai.xi // [Return]:
1325*53ee8cc1Swenshuai.xi // error_code: return status
1326*53ee8cc1Swenshuai.xi //**************************************************************************
1327*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CecTxSendPollingMsg(void* pInstance, MsCEC_DEVICELA dst_address)
1328*53ee8cc1Swenshuai.xi {
1329*53ee8cc1Swenshuai.xi void* pModule = NULL;
1330*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1331*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1332*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1333*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1334*53ee8cc1Swenshuai.xi
1335*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1336*53ee8cc1Swenshuai.xi
1337*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1338*53ee8cc1Swenshuai.xi {
1339*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1340*53ee8cc1Swenshuai.xi }
1341*53ee8cc1Swenshuai.xi else
1342*53ee8cc1Swenshuai.xi {
1343*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1344*53ee8cc1Swenshuai.xi {
1345*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1346*53ee8cc1Swenshuai.xi }
1347*53ee8cc1Swenshuai.xi else
1348*53ee8cc1Swenshuai.xi {
1349*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1350*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1351*53ee8cc1Swenshuai.xi #else
1352*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1353*53ee8cc1Swenshuai.xi #endif
1354*53ee8cc1Swenshuai.xi }
1355*53ee8cc1Swenshuai.xi }
1356*53ee8cc1Swenshuai.xi
1357*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1358*53ee8cc1Swenshuai.xi
1359*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, (MsCEC_MSGLIST)0x00, NULL, 0x00);
1360*53ee8cc1Swenshuai.xi
1361*53ee8cc1Swenshuai.xi return res;
1362*53ee8cc1Swenshuai.xi }
1363*53ee8cc1Swenshuai.xi
1364*53ee8cc1Swenshuai.xi //**************************************************************************
1365*53ee8cc1Swenshuai.xi // [Function Name]:
1366*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ActiveSource()
1367*53ee8cc1Swenshuai.xi // [Description]
1368*53ee8cc1Swenshuai.xi // Used by a new source to indicate that it has started to transmit a stream or
1369*53ee8cc1Swenshuai.xi // used in response to a <Request Active Source>
1370*53ee8cc1Swenshuai.xi // [Message property]
1371*53ee8cc1Swenshuai.xi // Address: Broadcast
1372*53ee8cc1Swenshuai.xi // Initiator: All sources
1373*53ee8cc1Swenshuai.xi // Follower: TV, CEC Switches
1374*53ee8cc1Swenshuai.xi // [Arguments]:
1375*53ee8cc1Swenshuai.xi //
1376*53ee8cc1Swenshuai.xi // [Return]:
1377*53ee8cc1Swenshuai.xi // error_code: return status
1378*53ee8cc1Swenshuai.xi //**************************************************************************
1379*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ActiveSource(void* pInstance)
1380*53ee8cc1Swenshuai.xi {
1381*53ee8cc1Swenshuai.xi void* pModule = NULL;
1382*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1383*53ee8cc1Swenshuai.xi MS_U8 txbuf[2] = {0};
1384*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1385*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1386*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1387*53ee8cc1Swenshuai.xi
1388*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1389*53ee8cc1Swenshuai.xi
1390*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1391*53ee8cc1Swenshuai.xi {
1392*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1393*53ee8cc1Swenshuai.xi }
1394*53ee8cc1Swenshuai.xi else
1395*53ee8cc1Swenshuai.xi {
1396*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1397*53ee8cc1Swenshuai.xi {
1398*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1399*53ee8cc1Swenshuai.xi }
1400*53ee8cc1Swenshuai.xi else
1401*53ee8cc1Swenshuai.xi {
1402*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1403*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1404*53ee8cc1Swenshuai.xi #else
1405*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1406*53ee8cc1Swenshuai.xi #endif
1407*53ee8cc1Swenshuai.xi txbuf[0] = pCECResourcePrivate->MyPhysicalAddress[0];
1408*53ee8cc1Swenshuai.xi txbuf[1] = pCECResourcePrivate->MyPhysicalAddress[1];
1409*53ee8cc1Swenshuai.xi }
1410*53ee8cc1Swenshuai.xi }
1411*53ee8cc1Swenshuai.xi
1412*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1413*53ee8cc1Swenshuai.xi
1414*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_ACTIVE_SOURCE, txbuf, 2);
1415*53ee8cc1Swenshuai.xi
1416*53ee8cc1Swenshuai.xi return res;
1417*53ee8cc1Swenshuai.xi }
1418*53ee8cc1Swenshuai.xi
1419*53ee8cc1Swenshuai.xi //**************************************************************************
1420*53ee8cc1Swenshuai.xi // [Function Name]:
1421*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_RoutingChange()
1422*53ee8cc1Swenshuai.xi // [Description]
1423*53ee8cc1Swenshuai.xi // Used by a CEC switch when it's manually switched to inform akk other devices.
1424*53ee8cc1Swenshuai.xi // [Message property]
1425*53ee8cc1Swenshuai.xi // Address: Broadcast
1426*53ee8cc1Swenshuai.xi // Initiator: CEC switches and TV(with 2 or more HDMI inputs)
1427*53ee8cc1Swenshuai.xi // Follower: CEC switches
1428*53ee8cc1Swenshuai.xi // [Arguments]:
1429*53ee8cc1Swenshuai.xi // orig_address: The original physicall address
1430*53ee8cc1Swenshuai.xi // new_address: The new physical address
1431*53ee8cc1Swenshuai.xi // [Return]:
1432*53ee8cc1Swenshuai.xi // error_code: return status
1433*53ee8cc1Swenshuai.xi //**************************************************************************
1434*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_RoutingChange(void* pInstance, MS_U8* orig_address, MS_U8* new_address)
1435*53ee8cc1Swenshuai.xi {
1436*53ee8cc1Swenshuai.xi void* pModule = NULL;
1437*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1438*53ee8cc1Swenshuai.xi MS_U8 txbuf[4] = {0};
1439*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1440*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1441*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1442*53ee8cc1Swenshuai.xi
1443*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1444*53ee8cc1Swenshuai.xi
1445*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1446*53ee8cc1Swenshuai.xi {
1447*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1448*53ee8cc1Swenshuai.xi }
1449*53ee8cc1Swenshuai.xi else
1450*53ee8cc1Swenshuai.xi {
1451*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1452*53ee8cc1Swenshuai.xi {
1453*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1454*53ee8cc1Swenshuai.xi }
1455*53ee8cc1Swenshuai.xi else
1456*53ee8cc1Swenshuai.xi {
1457*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1458*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1459*53ee8cc1Swenshuai.xi #else
1460*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1461*53ee8cc1Swenshuai.xi #endif
1462*53ee8cc1Swenshuai.xi txbuf[0] = orig_address[0];
1463*53ee8cc1Swenshuai.xi txbuf[1] = orig_address[1];
1464*53ee8cc1Swenshuai.xi txbuf[2] = new_address[0];
1465*53ee8cc1Swenshuai.xi txbuf[3] = new_address[1];
1466*53ee8cc1Swenshuai.xi }
1467*53ee8cc1Swenshuai.xi }
1468*53ee8cc1Swenshuai.xi
1469*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1470*53ee8cc1Swenshuai.xi
1471*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_RC_ROUTING_CHANGE, txbuf, 4);
1472*53ee8cc1Swenshuai.xi
1473*53ee8cc1Swenshuai.xi return res;
1474*53ee8cc1Swenshuai.xi }
1475*53ee8cc1Swenshuai.xi
1476*53ee8cc1Swenshuai.xi //**************************************************************************
1477*53ee8cc1Swenshuai.xi // [Function Name]:
1478*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReqActiveSource()
1479*53ee8cc1Swenshuai.xi // [Description]
1480*53ee8cc1Swenshuai.xi // Used by a new device to discover the status of the system.
1481*53ee8cc1Swenshuai.xi // [Message property]
1482*53ee8cc1Swenshuai.xi // Address: Broadcast
1483*53ee8cc1Swenshuai.xi // Initiator:
1484*53ee8cc1Swenshuai.xi // Follower: All, except for CEC Switches and devices which cannot become a source.
1485*53ee8cc1Swenshuai.xi // [Arguments]:
1486*53ee8cc1Swenshuai.xi //
1487*53ee8cc1Swenshuai.xi // [Return]:
1488*53ee8cc1Swenshuai.xi // error_code: return status
1489*53ee8cc1Swenshuai.xi //**************************************************************************
1490*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReqActiveSource(void* pInstance)
1491*53ee8cc1Swenshuai.xi {
1492*53ee8cc1Swenshuai.xi void* pModule = NULL;
1493*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1494*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1495*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1496*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1497*53ee8cc1Swenshuai.xi
1498*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1499*53ee8cc1Swenshuai.xi
1500*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1501*53ee8cc1Swenshuai.xi {
1502*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1503*53ee8cc1Swenshuai.xi }
1504*53ee8cc1Swenshuai.xi else
1505*53ee8cc1Swenshuai.xi {
1506*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1507*53ee8cc1Swenshuai.xi {
1508*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1509*53ee8cc1Swenshuai.xi }
1510*53ee8cc1Swenshuai.xi else
1511*53ee8cc1Swenshuai.xi {
1512*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1513*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1514*53ee8cc1Swenshuai.xi #else
1515*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1516*53ee8cc1Swenshuai.xi #endif
1517*53ee8cc1Swenshuai.xi }
1518*53ee8cc1Swenshuai.xi }
1519*53ee8cc1Swenshuai.xi
1520*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1521*53ee8cc1Swenshuai.xi
1522*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_RC_REQ_ACTIVE_SOURCE, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
1523*53ee8cc1Swenshuai.xi return res;
1524*53ee8cc1Swenshuai.xi }
1525*53ee8cc1Swenshuai.xi
1526*53ee8cc1Swenshuai.xi //**************************************************************************
1527*53ee8cc1Swenshuai.xi // [Function Name]:
1528*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_SetStreamPath()
1529*53ee8cc1Swenshuai.xi // [Description]
1530*53ee8cc1Swenshuai.xi // Used by the TV to request a streaming path from the specified physical address.
1531*53ee8cc1Swenshuai.xi // [Message property]
1532*53ee8cc1Swenshuai.xi // Address: Broadcast
1533*53ee8cc1Swenshuai.xi // Initiator:
1534*53ee8cc1Swenshuai.xi // Follower: CEC Switches
1535*53ee8cc1Swenshuai.xi // [Arguments]:
1536*53ee8cc1Swenshuai.xi // new_address: The new physical address
1537*53ee8cc1Swenshuai.xi // [Return]:
1538*53ee8cc1Swenshuai.xi // error_code: return status
1539*53ee8cc1Swenshuai.xi //**************************************************************************
1540*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_SetStreamPath(void* pInstance, MS_U8* new_address)
1541*53ee8cc1Swenshuai.xi {
1542*53ee8cc1Swenshuai.xi void* pModule = NULL;
1543*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1544*53ee8cc1Swenshuai.xi MS_U8 txbuf[2] = {0};
1545*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1546*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1547*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1548*53ee8cc1Swenshuai.xi
1549*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1550*53ee8cc1Swenshuai.xi
1551*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1552*53ee8cc1Swenshuai.xi {
1553*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1554*53ee8cc1Swenshuai.xi }
1555*53ee8cc1Swenshuai.xi else
1556*53ee8cc1Swenshuai.xi {
1557*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1558*53ee8cc1Swenshuai.xi {
1559*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1560*53ee8cc1Swenshuai.xi }
1561*53ee8cc1Swenshuai.xi else
1562*53ee8cc1Swenshuai.xi {
1563*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1564*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1565*53ee8cc1Swenshuai.xi #else
1566*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1567*53ee8cc1Swenshuai.xi #endif
1568*53ee8cc1Swenshuai.xi txbuf[0] = new_address[0];
1569*53ee8cc1Swenshuai.xi txbuf[1] = new_address[1];
1570*53ee8cc1Swenshuai.xi }
1571*53ee8cc1Swenshuai.xi }
1572*53ee8cc1Swenshuai.xi
1573*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1574*53ee8cc1Swenshuai.xi
1575*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_RC_SET_STREM_PATH, txbuf, 2);
1576*53ee8cc1Swenshuai.xi
1577*53ee8cc1Swenshuai.xi return res;
1578*53ee8cc1Swenshuai.xi }
1579*53ee8cc1Swenshuai.xi
1580*53ee8cc1Swenshuai.xi //**************************************************************************
1581*53ee8cc1Swenshuai.xi // [Function Name]:
1582*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_Standby()
1583*53ee8cc1Swenshuai.xi // [Description]
1584*53ee8cc1Swenshuai.xi // Use to switch one or all devices into standby mode.
1585*53ee8cc1Swenshuai.xi // One device: it's specific logical address, like "E_LA_RECORDER1"
1586*53ee8cc1Swenshuai.xi // All device: Use broadcast logical address, "E_LA_BROADCAST"
1587*53ee8cc1Swenshuai.xi // [Message property]
1588*53ee8cc1Swenshuai.xi // Address: Directly / Broadcast
1589*53ee8cc1Swenshuai.xi // Initiator: TV(Broadcast Address)
1590*53ee8cc1Swenshuai.xi // Follower: All
1591*53ee8cc1Swenshuai.xi // [Arguments]:
1592*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1593*53ee8cc1Swenshuai.xi // [Return]:
1594*53ee8cc1Swenshuai.xi // error_code: return status
1595*53ee8cc1Swenshuai.xi //**************************************************************************
1596*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_Standby(void* pInstance, MsCEC_DEVICELA dst_address)
1597*53ee8cc1Swenshuai.xi {
1598*53ee8cc1Swenshuai.xi void* pModule = NULL;
1599*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1600*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1601*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1602*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1603*53ee8cc1Swenshuai.xi
1604*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1605*53ee8cc1Swenshuai.xi
1606*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1607*53ee8cc1Swenshuai.xi {
1608*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1609*53ee8cc1Swenshuai.xi }
1610*53ee8cc1Swenshuai.xi else
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1613*53ee8cc1Swenshuai.xi {
1614*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1615*53ee8cc1Swenshuai.xi }
1616*53ee8cc1Swenshuai.xi else
1617*53ee8cc1Swenshuai.xi {
1618*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1619*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1620*53ee8cc1Swenshuai.xi #else
1621*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1622*53ee8cc1Swenshuai.xi #endif
1623*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPowerStatus = E_MSG_PWRSTA_STANDBY;
1624*53ee8cc1Swenshuai.xi }
1625*53ee8cc1Swenshuai.xi }
1626*53ee8cc1Swenshuai.xi
1627*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1628*53ee8cc1Swenshuai.xi
1629*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_STANDBY, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
1630*53ee8cc1Swenshuai.xi return res;
1631*53ee8cc1Swenshuai.xi }
1632*53ee8cc1Swenshuai.xi
1633*53ee8cc1Swenshuai.xi //**************************************************************************
1634*53ee8cc1Swenshuai.xi // [Function Name]:
1635*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_RecordOff()
1636*53ee8cc1Swenshuai.xi // [Description]
1637*53ee8cc1Swenshuai.xi // Requests a device to stop a recording.
1638*53ee8cc1Swenshuai.xi // [Message property]
1639*53ee8cc1Swenshuai.xi // Address: Directly
1640*53ee8cc1Swenshuai.xi // Initiator: Device Initiating a recording
1641*53ee8cc1Swenshuai.xi // Follower: Recording Device if implementing <Record On>
1642*53ee8cc1Swenshuai.xi // [Arguments]:
1643*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1644*53ee8cc1Swenshuai.xi // [Return]:
1645*53ee8cc1Swenshuai.xi // error_code: return status
1646*53ee8cc1Swenshuai.xi //**************************************************************************
1647*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_RecordOff(void* pInstance, MsCEC_DEVICELA dst_address)
1648*53ee8cc1Swenshuai.xi {
1649*53ee8cc1Swenshuai.xi void* pModule = NULL;
1650*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1651*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1652*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1653*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1654*53ee8cc1Swenshuai.xi
1655*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1656*53ee8cc1Swenshuai.xi
1657*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1658*53ee8cc1Swenshuai.xi {
1659*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1660*53ee8cc1Swenshuai.xi }
1661*53ee8cc1Swenshuai.xi else
1662*53ee8cc1Swenshuai.xi {
1663*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1664*53ee8cc1Swenshuai.xi {
1665*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1666*53ee8cc1Swenshuai.xi }
1667*53ee8cc1Swenshuai.xi else
1668*53ee8cc1Swenshuai.xi {
1669*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1670*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1671*53ee8cc1Swenshuai.xi #else
1672*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1673*53ee8cc1Swenshuai.xi #endif
1674*53ee8cc1Swenshuai.xi }
1675*53ee8cc1Swenshuai.xi }
1676*53ee8cc1Swenshuai.xi
1677*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1678*53ee8cc1Swenshuai.xi
1679*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_OTR_RECORD_OFF, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
1680*53ee8cc1Swenshuai.xi
1681*53ee8cc1Swenshuai.xi return res;
1682*53ee8cc1Swenshuai.xi }
1683*53ee8cc1Swenshuai.xi
1684*53ee8cc1Swenshuai.xi //**************************************************************************
1685*53ee8cc1Swenshuai.xi // [Function Name]:
1686*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_RecordOn()
1687*53ee8cc1Swenshuai.xi // [Description]
1688*53ee8cc1Swenshuai.xi // Attempt to record the specified source.
1689*53ee8cc1Swenshuai.xi // [Message property]
1690*53ee8cc1Swenshuai.xi // Address: Directly
1691*53ee8cc1Swenshuai.xi // Initiator:
1692*53ee8cc1Swenshuai.xi // Follower:
1693*53ee8cc1Swenshuai.xi // [Arguments]:
1694*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1695*53ee8cc1Swenshuai.xi // [Return]:
1696*53ee8cc1Swenshuai.xi // error_code: return status
1697*53ee8cc1Swenshuai.xi //**************************************************************************
1698*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_RecordOn(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSG_RECORD_SOURCE_TYPE cmd)
1699*53ee8cc1Swenshuai.xi {
1700*53ee8cc1Swenshuai.xi void* pModule = NULL;
1701*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1702*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1703*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1704*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1705*53ee8cc1Swenshuai.xi
1706*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1707*53ee8cc1Swenshuai.xi
1708*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1709*53ee8cc1Swenshuai.xi {
1710*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1711*53ee8cc1Swenshuai.xi }
1712*53ee8cc1Swenshuai.xi else
1713*53ee8cc1Swenshuai.xi {
1714*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1715*53ee8cc1Swenshuai.xi {
1716*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1717*53ee8cc1Swenshuai.xi }
1718*53ee8cc1Swenshuai.xi else
1719*53ee8cc1Swenshuai.xi {
1720*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1721*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1722*53ee8cc1Swenshuai.xi #else
1723*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1724*53ee8cc1Swenshuai.xi #endif
1725*53ee8cc1Swenshuai.xi }
1726*53ee8cc1Swenshuai.xi }
1727*53ee8cc1Swenshuai.xi
1728*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1729*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_OTR_RECORD_ON, (MS_U8*)&cmd, 1);
1730*53ee8cc1Swenshuai.xi
1731*53ee8cc1Swenshuai.xi return res;
1732*53ee8cc1Swenshuai.xi }
1733*53ee8cc1Swenshuai.xi
1734*53ee8cc1Swenshuai.xi
1735*53ee8cc1Swenshuai.xi //**************************************************************************
1736*53ee8cc1Swenshuai.xi // [Function Name]:
1737*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReportCECVersion()
1738*53ee8cc1Swenshuai.xi // [Description]
1739*53ee8cc1Swenshuai.xi // Used to indicate the supported CEC version, in response to a <Get CEC Version>
1740*53ee8cc1Swenshuai.xi // [Message property]
1741*53ee8cc1Swenshuai.xi // Address: Directly
1742*53ee8cc1Swenshuai.xi // Initiator: All
1743*53ee8cc1Swenshuai.xi // Follower: All
1744*53ee8cc1Swenshuai.xi // [Arguments]:
1745*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1746*53ee8cc1Swenshuai.xi // version: CEC version
1747*53ee8cc1Swenshuai.xi // [Return]:
1748*53ee8cc1Swenshuai.xi // error_code: return status
1749*53ee8cc1Swenshuai.xi //**************************************************************************
1750*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReportCECVersion(void* pInstance, MsCEC_DEVICELA dst_address, MS_U8 version)
1751*53ee8cc1Swenshuai.xi {
1752*53ee8cc1Swenshuai.xi void* pModule = NULL;
1753*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1754*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1755*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1756*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1757*53ee8cc1Swenshuai.xi
1758*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1759*53ee8cc1Swenshuai.xi
1760*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1761*53ee8cc1Swenshuai.xi {
1762*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1763*53ee8cc1Swenshuai.xi }
1764*53ee8cc1Swenshuai.xi else
1765*53ee8cc1Swenshuai.xi {
1766*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1767*53ee8cc1Swenshuai.xi {
1768*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1769*53ee8cc1Swenshuai.xi }
1770*53ee8cc1Swenshuai.xi else
1771*53ee8cc1Swenshuai.xi {
1772*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1773*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1774*53ee8cc1Swenshuai.xi #else
1775*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1776*53ee8cc1Swenshuai.xi #endif
1777*53ee8cc1Swenshuai.xi }
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi
1780*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1781*53ee8cc1Swenshuai.xi
1782*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_SI_CEC_VERSION, &version, 1);
1783*53ee8cc1Swenshuai.xi return res;
1784*53ee8cc1Swenshuai.xi }
1785*53ee8cc1Swenshuai.xi
1786*53ee8cc1Swenshuai.xi //**************************************************************************
1787*53ee8cc1Swenshuai.xi // [Function Name]:
1788*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReqCECVersion()
1789*53ee8cc1Swenshuai.xi // [Description]
1790*53ee8cc1Swenshuai.xi // Used by a device to enquire which version of CEC the target supports
1791*53ee8cc1Swenshuai.xi // [Message property]
1792*53ee8cc1Swenshuai.xi // Address: Directly
1793*53ee8cc1Swenshuai.xi // Initiator: All
1794*53ee8cc1Swenshuai.xi // Follower: All
1795*53ee8cc1Swenshuai.xi // [Arguments]:
1796*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1797*53ee8cc1Swenshuai.xi // [Return]:
1798*53ee8cc1Swenshuai.xi // error_code: return status
1799*53ee8cc1Swenshuai.xi //**************************************************************************
1800*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReqCECVersion(void* pInstance, MsCEC_DEVICELA dst_address)
1801*53ee8cc1Swenshuai.xi {
1802*53ee8cc1Swenshuai.xi void* pModule = NULL;
1803*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1804*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1805*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1806*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1807*53ee8cc1Swenshuai.xi
1808*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1809*53ee8cc1Swenshuai.xi
1810*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1811*53ee8cc1Swenshuai.xi {
1812*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1813*53ee8cc1Swenshuai.xi }
1814*53ee8cc1Swenshuai.xi else
1815*53ee8cc1Swenshuai.xi {
1816*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1817*53ee8cc1Swenshuai.xi {
1818*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1819*53ee8cc1Swenshuai.xi }
1820*53ee8cc1Swenshuai.xi else
1821*53ee8cc1Swenshuai.xi {
1822*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1823*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1824*53ee8cc1Swenshuai.xi #else
1825*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1826*53ee8cc1Swenshuai.xi #endif
1827*53ee8cc1Swenshuai.xi }
1828*53ee8cc1Swenshuai.xi }
1829*53ee8cc1Swenshuai.xi
1830*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1831*53ee8cc1Swenshuai.xi
1832*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_SI_GET_CEC_VERSION, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
1833*53ee8cc1Swenshuai.xi
1834*53ee8cc1Swenshuai.xi return res;
1835*53ee8cc1Swenshuai.xi }
1836*53ee8cc1Swenshuai.xi
1837*53ee8cc1Swenshuai.xi //**************************************************************************
1838*53ee8cc1Swenshuai.xi // [Function Name]:
1839*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReportPhycalAddress()
1840*53ee8cc1Swenshuai.xi // [Description]
1841*53ee8cc1Swenshuai.xi // Use to inform all other devices of the mapping between physical and logical address of the initiator
1842*53ee8cc1Swenshuai.xi // [Message property]
1843*53ee8cc1Swenshuai.xi // Address: Broadcast
1844*53ee8cc1Swenshuai.xi // Initiator: All
1845*53ee8cc1Swenshuai.xi // Follower: TV
1846*53ee8cc1Swenshuai.xi // [Arguments]:
1847*53ee8cc1Swenshuai.xi //
1848*53ee8cc1Swenshuai.xi // [Return]:
1849*53ee8cc1Swenshuai.xi // error_code: return status
1850*53ee8cc1Swenshuai.xi //**************************************************************************
1851*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReportPhycalAddress(void* pInstance)
1852*53ee8cc1Swenshuai.xi {
1853*53ee8cc1Swenshuai.xi void* pModule = NULL;
1854*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1855*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1856*53ee8cc1Swenshuai.xi MS_U8 txbuf[3] = {0};
1857*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1858*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1859*53ee8cc1Swenshuai.xi
1860*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1861*53ee8cc1Swenshuai.xi
1862*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1863*53ee8cc1Swenshuai.xi {
1864*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1865*53ee8cc1Swenshuai.xi }
1866*53ee8cc1Swenshuai.xi else
1867*53ee8cc1Swenshuai.xi {
1868*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1869*53ee8cc1Swenshuai.xi {
1870*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1871*53ee8cc1Swenshuai.xi }
1872*53ee8cc1Swenshuai.xi else
1873*53ee8cc1Swenshuai.xi {
1874*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1875*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1876*53ee8cc1Swenshuai.xi #else
1877*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1878*53ee8cc1Swenshuai.xi #endif
1879*53ee8cc1Swenshuai.xi txbuf[0] = pCECResourcePrivate->MyPhysicalAddress[0];
1880*53ee8cc1Swenshuai.xi txbuf[1] = pCECResourcePrivate->MyPhysicalAddress[1];
1881*53ee8cc1Swenshuai.xi txbuf[2] = pCECResourcePrivate->MyDeviceType;
1882*53ee8cc1Swenshuai.xi }
1883*53ee8cc1Swenshuai.xi }
1884*53ee8cc1Swenshuai.xi
1885*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1886*53ee8cc1Swenshuai.xi
1887*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_SI_REPORT_PHY_ADDR, txbuf, 3);
1888*53ee8cc1Swenshuai.xi return res;
1889*53ee8cc1Swenshuai.xi }
1890*53ee8cc1Swenshuai.xi
1891*53ee8cc1Swenshuai.xi //**************************************************************************
1892*53ee8cc1Swenshuai.xi // [Function Name]:
1893*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReqPhycalAddress()
1894*53ee8cc1Swenshuai.xi // [Description]
1895*53ee8cc1Swenshuai.xi // A request to a device to return its physical address
1896*53ee8cc1Swenshuai.xi // [Message property]
1897*53ee8cc1Swenshuai.xi // Address: Directly
1898*53ee8cc1Swenshuai.xi // Initiator:
1899*53ee8cc1Swenshuai.xi // Follower: All, except for CEC Switches using logical address 15
1900*53ee8cc1Swenshuai.xi // [Arguments]:
1901*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1902*53ee8cc1Swenshuai.xi // [Return]:
1903*53ee8cc1Swenshuai.xi // error_code: return status
1904*53ee8cc1Swenshuai.xi //**************************************************************************
1905*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReqPhycalAddress(void* pInstance, MsCEC_DEVICELA dst_address)
1906*53ee8cc1Swenshuai.xi {
1907*53ee8cc1Swenshuai.xi void* pModule = NULL;
1908*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1909*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1910*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1911*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1912*53ee8cc1Swenshuai.xi
1913*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1914*53ee8cc1Swenshuai.xi
1915*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1916*53ee8cc1Swenshuai.xi {
1917*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1918*53ee8cc1Swenshuai.xi }
1919*53ee8cc1Swenshuai.xi else
1920*53ee8cc1Swenshuai.xi {
1921*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1922*53ee8cc1Swenshuai.xi {
1923*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1924*53ee8cc1Swenshuai.xi }
1925*53ee8cc1Swenshuai.xi else
1926*53ee8cc1Swenshuai.xi {
1927*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1928*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1929*53ee8cc1Swenshuai.xi #else
1930*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1931*53ee8cc1Swenshuai.xi #endif
1932*53ee8cc1Swenshuai.xi }
1933*53ee8cc1Swenshuai.xi }
1934*53ee8cc1Swenshuai.xi
1935*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1936*53ee8cc1Swenshuai.xi
1937*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_SI_REQUEST_PHY_ADDR, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
1938*53ee8cc1Swenshuai.xi
1939*53ee8cc1Swenshuai.xi return res;
1940*53ee8cc1Swenshuai.xi }
1941*53ee8cc1Swenshuai.xi
1942*53ee8cc1Swenshuai.xi //**************************************************************************
1943*53ee8cc1Swenshuai.xi // [Function Name]:
1944*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_DeckControl()
1945*53ee8cc1Swenshuai.xi // [Description]
1946*53ee8cc1Swenshuai.xi // Use to control a device's media functions
1947*53ee8cc1Swenshuai.xi // [Message property]
1948*53ee8cc1Swenshuai.xi // Address: Directly
1949*53ee8cc1Swenshuai.xi // Initiator:
1950*53ee8cc1Swenshuai.xi // Follower:
1951*53ee8cc1Swenshuai.xi // [Arguments]:
1952*53ee8cc1Swenshuai.xi // dst_address: destination logical address
1953*53ee8cc1Swenshuai.xi // cmd: deck control mode
1954*53ee8cc1Swenshuai.xi // [Return]:
1955*53ee8cc1Swenshuai.xi // error_code: return status
1956*53ee8cc1Swenshuai.xi //**************************************************************************
1957*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_DeckControl(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSG_DC_DECK_CTRL_PARM cmd)
1958*53ee8cc1Swenshuai.xi {
1959*53ee8cc1Swenshuai.xi void* pModule = NULL;
1960*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
1961*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
1962*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
1963*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
1964*53ee8cc1Swenshuai.xi
1965*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1966*53ee8cc1Swenshuai.xi
1967*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
1968*53ee8cc1Swenshuai.xi {
1969*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
1970*53ee8cc1Swenshuai.xi }
1971*53ee8cc1Swenshuai.xi else
1972*53ee8cc1Swenshuai.xi {
1973*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
1974*53ee8cc1Swenshuai.xi {
1975*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
1976*53ee8cc1Swenshuai.xi }
1977*53ee8cc1Swenshuai.xi else
1978*53ee8cc1Swenshuai.xi {
1979*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
1980*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
1981*53ee8cc1Swenshuai.xi #else
1982*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
1983*53ee8cc1Swenshuai.xi #endif
1984*53ee8cc1Swenshuai.xi }
1985*53ee8cc1Swenshuai.xi }
1986*53ee8cc1Swenshuai.xi
1987*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
1988*53ee8cc1Swenshuai.xi
1989*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_DC_DECK_CTRL, (MS_U8*)&cmd, 1);
1990*53ee8cc1Swenshuai.xi return res;
1991*53ee8cc1Swenshuai.xi }
1992*53ee8cc1Swenshuai.xi
1993*53ee8cc1Swenshuai.xi //**************************************************************************
1994*53ee8cc1Swenshuai.xi // [Function Name]:
1995*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_DecStatus()
1996*53ee8cc1Swenshuai.xi // [Description]
1997*53ee8cc1Swenshuai.xi // Use to provide a device's status when received "Give Deck Status"
1998*53ee8cc1Swenshuai.xi // [Message property]
1999*53ee8cc1Swenshuai.xi // Address: Directly
2000*53ee8cc1Swenshuai.xi // Initiator:
2001*53ee8cc1Swenshuai.xi // Follower:
2002*53ee8cc1Swenshuai.xi // [Arguments]:
2003*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2004*53ee8cc1Swenshuai.xi // cmd: deck info mode
2005*53ee8cc1Swenshuai.xi // [Return]:
2006*53ee8cc1Swenshuai.xi // error_code: return status
2007*53ee8cc1Swenshuai.xi //**************************************************************************
2008*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_DecStatus(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSG_DC_DECK_STATUS_PARM cmd)
2009*53ee8cc1Swenshuai.xi {
2010*53ee8cc1Swenshuai.xi void* pModule = NULL;
2011*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2012*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2013*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2014*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2015*53ee8cc1Swenshuai.xi
2016*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2017*53ee8cc1Swenshuai.xi
2018*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2019*53ee8cc1Swenshuai.xi {
2020*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2021*53ee8cc1Swenshuai.xi }
2022*53ee8cc1Swenshuai.xi else
2023*53ee8cc1Swenshuai.xi {
2024*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2025*53ee8cc1Swenshuai.xi {
2026*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2027*53ee8cc1Swenshuai.xi }
2028*53ee8cc1Swenshuai.xi else
2029*53ee8cc1Swenshuai.xi {
2030*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2031*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2032*53ee8cc1Swenshuai.xi #else
2033*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2034*53ee8cc1Swenshuai.xi #endif
2035*53ee8cc1Swenshuai.xi }
2036*53ee8cc1Swenshuai.xi }
2037*53ee8cc1Swenshuai.xi
2038*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2039*53ee8cc1Swenshuai.xi
2040*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_DC_DECK_STATUS, (MS_U8*)&cmd, 1);
2041*53ee8cc1Swenshuai.xi
2042*53ee8cc1Swenshuai.xi return res;
2043*53ee8cc1Swenshuai.xi }
2044*53ee8cc1Swenshuai.xi
2045*53ee8cc1Swenshuai.xi //**************************************************************************
2046*53ee8cc1Swenshuai.xi // [Function Name]:
2047*53ee8cc1Swenshuai.xi // MDrv_CEC_MSg_GiveDeckStatus()
2048*53ee8cc1Swenshuai.xi // [Description]
2049*53ee8cc1Swenshuai.xi // Use to request device's status
2050*53ee8cc1Swenshuai.xi // [Message property]
2051*53ee8cc1Swenshuai.xi // Address: Directly
2052*53ee8cc1Swenshuai.xi // Initiator:
2053*53ee8cc1Swenshuai.xi // Follower:
2054*53ee8cc1Swenshuai.xi // [Arguments]:
2055*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2056*53ee8cc1Swenshuai.xi // cmd: status request mode
2057*53ee8cc1Swenshuai.xi // [Return]:
2058*53ee8cc1Swenshuai.xi // error_code: return status
2059*53ee8cc1Swenshuai.xi //**************************************************************************
2060*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_MSg_GiveDeckStatus(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSG_STATUS_REQUEST_PARM cmd)
2061*53ee8cc1Swenshuai.xi {
2062*53ee8cc1Swenshuai.xi void* pModule = NULL;
2063*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2064*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2065*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2066*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2067*53ee8cc1Swenshuai.xi
2068*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2069*53ee8cc1Swenshuai.xi
2070*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2071*53ee8cc1Swenshuai.xi {
2072*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2073*53ee8cc1Swenshuai.xi }
2074*53ee8cc1Swenshuai.xi else
2075*53ee8cc1Swenshuai.xi {
2076*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2077*53ee8cc1Swenshuai.xi {
2078*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2079*53ee8cc1Swenshuai.xi }
2080*53ee8cc1Swenshuai.xi else
2081*53ee8cc1Swenshuai.xi {
2082*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2083*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2084*53ee8cc1Swenshuai.xi #else
2085*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2086*53ee8cc1Swenshuai.xi #endif
2087*53ee8cc1Swenshuai.xi }
2088*53ee8cc1Swenshuai.xi }
2089*53ee8cc1Swenshuai.xi
2090*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2091*53ee8cc1Swenshuai.xi
2092*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_DC_GIVE_DECK_STATUS, (MS_U8*)&cmd, 1);
2093*53ee8cc1Swenshuai.xi return res;
2094*53ee8cc1Swenshuai.xi }
2095*53ee8cc1Swenshuai.xi
2096*53ee8cc1Swenshuai.xi //**************************************************************************
2097*53ee8cc1Swenshuai.xi // [Function Name]:
2098*53ee8cc1Swenshuai.xi // MDrv_CEC_MSg_DCPlay()
2099*53ee8cc1Swenshuai.xi // [Description]
2100*53ee8cc1Swenshuai.xi // Use to control the playback behaviour of a source device
2101*53ee8cc1Swenshuai.xi // [Message property]
2102*53ee8cc1Swenshuai.xi // Address: Directly
2103*53ee8cc1Swenshuai.xi // Initiator:
2104*53ee8cc1Swenshuai.xi // Follower:
2105*53ee8cc1Swenshuai.xi // [Arguments]:
2106*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2107*53ee8cc1Swenshuai.xi // cmd: play mode
2108*53ee8cc1Swenshuai.xi // [Return]:
2109*53ee8cc1Swenshuai.xi // error_code: return status
2110*53ee8cc1Swenshuai.xi //**************************************************************************
2111*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_MSg_DCPlay(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSG_DC_PLAY_PARM cmd)
2112*53ee8cc1Swenshuai.xi {
2113*53ee8cc1Swenshuai.xi void* pModule = NULL;
2114*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2115*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2116*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2117*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2118*53ee8cc1Swenshuai.xi
2119*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2120*53ee8cc1Swenshuai.xi
2121*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2122*53ee8cc1Swenshuai.xi {
2123*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2124*53ee8cc1Swenshuai.xi }
2125*53ee8cc1Swenshuai.xi else
2126*53ee8cc1Swenshuai.xi {
2127*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2128*53ee8cc1Swenshuai.xi {
2129*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2130*53ee8cc1Swenshuai.xi }
2131*53ee8cc1Swenshuai.xi else
2132*53ee8cc1Swenshuai.xi {
2133*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2134*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2135*53ee8cc1Swenshuai.xi #else
2136*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2137*53ee8cc1Swenshuai.xi #endif
2138*53ee8cc1Swenshuai.xi }
2139*53ee8cc1Swenshuai.xi }
2140*53ee8cc1Swenshuai.xi
2141*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2142*53ee8cc1Swenshuai.xi
2143*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_DC_PLAY, (MS_U8*)&cmd, 1);
2144*53ee8cc1Swenshuai.xi
2145*53ee8cc1Swenshuai.xi return res;
2146*53ee8cc1Swenshuai.xi }
2147*53ee8cc1Swenshuai.xi
2148*53ee8cc1Swenshuai.xi //**************************************************************************
2149*53ee8cc1Swenshuai.xi // [Function Name]:
2150*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReqMenuStatus()
2151*53ee8cc1Swenshuai.xi // [Description]
2152*53ee8cc1Swenshuai.xi // Request from TV for a device to show/remove a menu or to query status
2153*53ee8cc1Swenshuai.xi // [Message property]
2154*53ee8cc1Swenshuai.xi // Address: Directly
2155*53ee8cc1Swenshuai.xi // Initiator:
2156*53ee8cc1Swenshuai.xi // Follower:
2157*53ee8cc1Swenshuai.xi // [Arguments]:
2158*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2159*53ee8cc1Swenshuai.xi // cmd: menu request type
2160*53ee8cc1Swenshuai.xi // [Return]:
2161*53ee8cc1Swenshuai.xi // error_code: return status
2162*53ee8cc1Swenshuai.xi //**************************************************************************
2163*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReqMenuStatus(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSG_MENU_REQ_TYPE cmd)
2164*53ee8cc1Swenshuai.xi {
2165*53ee8cc1Swenshuai.xi void* pModule = NULL;
2166*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2167*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2168*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2169*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2170*53ee8cc1Swenshuai.xi
2171*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2172*53ee8cc1Swenshuai.xi
2173*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2174*53ee8cc1Swenshuai.xi {
2175*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2176*53ee8cc1Swenshuai.xi }
2177*53ee8cc1Swenshuai.xi else
2178*53ee8cc1Swenshuai.xi {
2179*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2180*53ee8cc1Swenshuai.xi {
2181*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2182*53ee8cc1Swenshuai.xi }
2183*53ee8cc1Swenshuai.xi else
2184*53ee8cc1Swenshuai.xi {
2185*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2186*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2187*53ee8cc1Swenshuai.xi #else
2188*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2189*53ee8cc1Swenshuai.xi #endif
2190*53ee8cc1Swenshuai.xi }
2191*53ee8cc1Swenshuai.xi }
2192*53ee8cc1Swenshuai.xi
2193*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2194*53ee8cc1Swenshuai.xi
2195*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_DMC_MENU_REQUEST, (MS_U8*)&cmd, 1);
2196*53ee8cc1Swenshuai.xi
2197*53ee8cc1Swenshuai.xi return res;
2198*53ee8cc1Swenshuai.xi }
2199*53ee8cc1Swenshuai.xi
2200*53ee8cc1Swenshuai.xi //**************************************************************************
2201*53ee8cc1Swenshuai.xi // [Function Name]:
2202*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_UserCtrlPressed()
2203*53ee8cc1Swenshuai.xi // [Description]
2204*53ee8cc1Swenshuai.xi // Use to indicated that user pressed which control button
2205*53ee8cc1Swenshuai.xi // [Message property]
2206*53ee8cc1Swenshuai.xi // Address: Directly
2207*53ee8cc1Swenshuai.xi // Initiator:
2208*53ee8cc1Swenshuai.xi // Follower:
2209*53ee8cc1Swenshuai.xi // [Arguments]:
2210*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2211*53ee8cc1Swenshuai.xi // cmd: UI command
2212*53ee8cc1Swenshuai.xi // [Return]:
2213*53ee8cc1Swenshuai.xi // error_code: return status
2214*53ee8cc1Swenshuai.xi //**************************************************************************
2215*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_UserCtrlPressed(void* pInstance, MS_BOOL bUserCtrlEn, MsCEC_DEVICELA dst_address, MsCEC_MSG_USER_CTRL_PARM cmd)
2216*53ee8cc1Swenshuai.xi {
2217*53ee8cc1Swenshuai.xi void* pModule = NULL;
2218*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2219*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2220*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2221*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2222*53ee8cc1Swenshuai.xi
2223*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2224*53ee8cc1Swenshuai.xi
2225*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2226*53ee8cc1Swenshuai.xi {
2227*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2228*53ee8cc1Swenshuai.xi }
2229*53ee8cc1Swenshuai.xi else
2230*53ee8cc1Swenshuai.xi {
2231*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2232*53ee8cc1Swenshuai.xi {
2233*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2234*53ee8cc1Swenshuai.xi }
2235*53ee8cc1Swenshuai.xi else
2236*53ee8cc1Swenshuai.xi {
2237*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2238*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2239*53ee8cc1Swenshuai.xi #else
2240*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2241*53ee8cc1Swenshuai.xi #endif
2242*53ee8cc1Swenshuai.xi }
2243*53ee8cc1Swenshuai.xi }
2244*53ee8cc1Swenshuai.xi
2245*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2246*53ee8cc1Swenshuai.xi
2247*53ee8cc1Swenshuai.xi if(bUserCtrlEn) // menu status is activated
2248*53ee8cc1Swenshuai.xi {
2249*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_UI_PRESS, (MS_U8*)&cmd, 1);
2250*53ee8cc1Swenshuai.xi }
2251*53ee8cc1Swenshuai.xi else // if menu status ia deactivated, send request to active device
2252*53ee8cc1Swenshuai.xi {
2253*53ee8cc1Swenshuai.xi //res = MApi_CEC_Msg_ReqMenuStatus(dst_address, E_MSG_MENU_REQ_ACTIVATED);
2254*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_DMC_MENU_REQUEST, E_MSG_MENU_REQ_ACTIVATED, 1);
2255*53ee8cc1Swenshuai.xi }
2256*53ee8cc1Swenshuai.xi
2257*53ee8cc1Swenshuai.xi return res;
2258*53ee8cc1Swenshuai.xi }
2259*53ee8cc1Swenshuai.xi
2260*53ee8cc1Swenshuai.xi //**************************************************************************
2261*53ee8cc1Swenshuai.xi // [Function Name]:
2262*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_UserCtrlReleased()
2263*53ee8cc1Swenshuai.xi // [Description]
2264*53ee8cc1Swenshuai.xi // Use to indicated that user released which control button
2265*53ee8cc1Swenshuai.xi // [Message property]
2266*53ee8cc1Swenshuai.xi // Address: Directly
2267*53ee8cc1Swenshuai.xi // Initiator:
2268*53ee8cc1Swenshuai.xi // Follower:
2269*53ee8cc1Swenshuai.xi // [Arguments]:
2270*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2271*53ee8cc1Swenshuai.xi // [Return]:
2272*53ee8cc1Swenshuai.xi // error_code: return status
2273*53ee8cc1Swenshuai.xi //**************************************************************************
2274*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_UserCtrlReleased(void* pInstance, MsCEC_DEVICELA dst_address)
2275*53ee8cc1Swenshuai.xi {
2276*53ee8cc1Swenshuai.xi void* pModule = NULL;
2277*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2278*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2279*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2280*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2281*53ee8cc1Swenshuai.xi
2282*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2283*53ee8cc1Swenshuai.xi
2284*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2285*53ee8cc1Swenshuai.xi {
2286*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2287*53ee8cc1Swenshuai.xi }
2288*53ee8cc1Swenshuai.xi else
2289*53ee8cc1Swenshuai.xi {
2290*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2291*53ee8cc1Swenshuai.xi {
2292*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2293*53ee8cc1Swenshuai.xi }
2294*53ee8cc1Swenshuai.xi else
2295*53ee8cc1Swenshuai.xi {
2296*53ee8cc1Swenshuai.xi
2297*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2298*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2299*53ee8cc1Swenshuai.xi #else
2300*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2301*53ee8cc1Swenshuai.xi #endif
2302*53ee8cc1Swenshuai.xi }
2303*53ee8cc1Swenshuai.xi }
2304*53ee8cc1Swenshuai.xi
2305*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2306*53ee8cc1Swenshuai.xi
2307*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_UI_RELEASE, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
2308*53ee8cc1Swenshuai.xi
2309*53ee8cc1Swenshuai.xi return res;
2310*53ee8cc1Swenshuai.xi }
2311*53ee8cc1Swenshuai.xi
2312*53ee8cc1Swenshuai.xi //**************************************************************************
2313*53ee8cc1Swenshuai.xi // [Function Name]:
2314*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_GiveAudioStatus()
2315*53ee8cc1Swenshuai.xi // [Description]
2316*53ee8cc1Swenshuai.xi // Use to request an Amplifier to send its volume and mute status
2317*53ee8cc1Swenshuai.xi // [Message property]
2318*53ee8cc1Swenshuai.xi // Address: Directly
2319*53ee8cc1Swenshuai.xi // Initiator: All (except CEC switches)
2320*53ee8cc1Swenshuai.xi // Follower:
2321*53ee8cc1Swenshuai.xi // [Arguments]:
2322*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2323*53ee8cc1Swenshuai.xi // [Return]:
2324*53ee8cc1Swenshuai.xi // error_code: return status
2325*53ee8cc1Swenshuai.xi //**************************************************************************
2326*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_GiveAudioStatus(void* pInstance, MsCEC_DEVICELA dst_address)
2327*53ee8cc1Swenshuai.xi {
2328*53ee8cc1Swenshuai.xi void* pModule = NULL;
2329*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2330*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2331*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2332*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2333*53ee8cc1Swenshuai.xi
2334*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2335*53ee8cc1Swenshuai.xi
2336*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2337*53ee8cc1Swenshuai.xi {
2338*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2339*53ee8cc1Swenshuai.xi }
2340*53ee8cc1Swenshuai.xi else
2341*53ee8cc1Swenshuai.xi {
2342*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2343*53ee8cc1Swenshuai.xi {
2344*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2345*53ee8cc1Swenshuai.xi }
2346*53ee8cc1Swenshuai.xi else
2347*53ee8cc1Swenshuai.xi {
2348*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2349*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2350*53ee8cc1Swenshuai.xi #else
2351*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2352*53ee8cc1Swenshuai.xi #endif
2353*53ee8cc1Swenshuai.xi }
2354*53ee8cc1Swenshuai.xi }
2355*53ee8cc1Swenshuai.xi
2356*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2357*53ee8cc1Swenshuai.xi
2358*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_SAC_GIVE_AUDIO_STATUS, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
2359*53ee8cc1Swenshuai.xi
2360*53ee8cc1Swenshuai.xi return res;
2361*53ee8cc1Swenshuai.xi }
2362*53ee8cc1Swenshuai.xi
2363*53ee8cc1Swenshuai.xi //**************************************************************************
2364*53ee8cc1Swenshuai.xi // [Function Name]:
2365*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReportPowerStatus()
2366*53ee8cc1Swenshuai.xi // [Description]
2367*53ee8cc1Swenshuai.xi // Use to inform a requesting device of the current power status
2368*53ee8cc1Swenshuai.xi // [Message property]
2369*53ee8cc1Swenshuai.xi // Address: Directly
2370*53ee8cc1Swenshuai.xi // Initiator: All (except CEC switches)
2371*53ee8cc1Swenshuai.xi // Follower:
2372*53ee8cc1Swenshuai.xi // [Arguments]:
2373*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2374*53ee8cc1Swenshuai.xi // [Return]:
2375*53ee8cc1Swenshuai.xi // error_code: return status
2376*53ee8cc1Swenshuai.xi //**************************************************************************
2377*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReportPowerStatus(void* pInstance, MsCEC_DEVICELA dst_address)
2378*53ee8cc1Swenshuai.xi {
2379*53ee8cc1Swenshuai.xi void* pModule = NULL;
2380*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2381*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2382*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2383*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2384*53ee8cc1Swenshuai.xi
2385*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2386*53ee8cc1Swenshuai.xi
2387*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2388*53ee8cc1Swenshuai.xi {
2389*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2390*53ee8cc1Swenshuai.xi }
2391*53ee8cc1Swenshuai.xi else
2392*53ee8cc1Swenshuai.xi {
2393*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2394*53ee8cc1Swenshuai.xi {
2395*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2396*53ee8cc1Swenshuai.xi }
2397*53ee8cc1Swenshuai.xi else
2398*53ee8cc1Swenshuai.xi {
2399*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("*CEC*:Report My PowerSts: 0x%x\n", pCECResourcePrivate->MyPowerStatus);
2400*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2401*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2402*53ee8cc1Swenshuai.xi #else
2403*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2404*53ee8cc1Swenshuai.xi #endif
2405*53ee8cc1Swenshuai.xi }
2406*53ee8cc1Swenshuai.xi }
2407*53ee8cc1Swenshuai.xi
2408*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2409*53ee8cc1Swenshuai.xi
2410*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_PS_REPORT_POWER_STATUS, (MS_U8*)&(pCECResourcePrivate->MyPowerStatus), 1);
2411*53ee8cc1Swenshuai.xi return res;
2412*53ee8cc1Swenshuai.xi }
2413*53ee8cc1Swenshuai.xi
2414*53ee8cc1Swenshuai.xi //**************************************************************************
2415*53ee8cc1Swenshuai.xi // [Function Name]:
2416*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReqPowerStatus()
2417*53ee8cc1Swenshuai.xi // [Description]
2418*53ee8cc1Swenshuai.xi // Use to determine the current power status of a target device
2419*53ee8cc1Swenshuai.xi // [Message property]
2420*53ee8cc1Swenshuai.xi // Address: Directly
2421*53ee8cc1Swenshuai.xi // Initiator:
2422*53ee8cc1Swenshuai.xi // Follower: All (except CEC switches)
2423*53ee8cc1Swenshuai.xi // [Arguments]:
2424*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2425*53ee8cc1Swenshuai.xi // [Return]:
2426*53ee8cc1Swenshuai.xi // error_code: return status
2427*53ee8cc1Swenshuai.xi //**************************************************************************
2428*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReqPowerStatus(void* pInstance, MsCEC_DEVICELA dst_address)
2429*53ee8cc1Swenshuai.xi {
2430*53ee8cc1Swenshuai.xi void* pModule = NULL;
2431*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2432*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2433*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2434*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2435*53ee8cc1Swenshuai.xi
2436*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2437*53ee8cc1Swenshuai.xi
2438*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2439*53ee8cc1Swenshuai.xi {
2440*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2441*53ee8cc1Swenshuai.xi }
2442*53ee8cc1Swenshuai.xi else
2443*53ee8cc1Swenshuai.xi {
2444*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2445*53ee8cc1Swenshuai.xi {
2446*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2447*53ee8cc1Swenshuai.xi }
2448*53ee8cc1Swenshuai.xi else
2449*53ee8cc1Swenshuai.xi {
2450*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2451*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2452*53ee8cc1Swenshuai.xi #else
2453*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2454*53ee8cc1Swenshuai.xi #endif
2455*53ee8cc1Swenshuai.xi }
2456*53ee8cc1Swenshuai.xi }
2457*53ee8cc1Swenshuai.xi
2458*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2459*53ee8cc1Swenshuai.xi
2460*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_PS_GIVE_POWER_STATUS, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
2461*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_INFO("*CEC*:Req PowerSts: 0x%x\n", (MS_U16)res);
2462*53ee8cc1Swenshuai.xi
2463*53ee8cc1Swenshuai.xi return res;
2464*53ee8cc1Swenshuai.xi }
2465*53ee8cc1Swenshuai.xi
2466*53ee8cc1Swenshuai.xi //**************************************************************************
2467*53ee8cc1Swenshuai.xi // [Function Name]:
2468*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_FeatureAbort()
2469*53ee8cc1Swenshuai.xi // [Description]
2470*53ee8cc1Swenshuai.xi // Use to indicate that device doesn't support message type
2471*53ee8cc1Swenshuai.xi // [Message property]
2472*53ee8cc1Swenshuai.xi // Address: Directly
2473*53ee8cc1Swenshuai.xi // Initiator: Generate if a message is not supported
2474*53ee8cc1Swenshuai.xi // Follower: All
2475*53ee8cc1Swenshuai.xi // [Arguments]:
2476*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2477*53ee8cc1Swenshuai.xi // msg: the requested message type
2478*53ee8cc1Swenshuai.xi // cmd: unsupport reason
2479*53ee8cc1Swenshuai.xi // [Return]:
2480*53ee8cc1Swenshuai.xi // error_code: return status
2481*53ee8cc1Swenshuai.xi //**************************************************************************
2482*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_FeatureAbort(void* pInstance, MsCEC_DEVICELA dst_address, MsCEC_MSGLIST msg, MsCEC_MSG_ABORT_REASON cmd)
2483*53ee8cc1Swenshuai.xi {
2484*53ee8cc1Swenshuai.xi void* pModule = NULL;
2485*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2486*53ee8cc1Swenshuai.xi MS_U8 txbuf[2] = {0};
2487*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2488*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2489*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2490*53ee8cc1Swenshuai.xi
2491*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2492*53ee8cc1Swenshuai.xi
2493*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2494*53ee8cc1Swenshuai.xi {
2495*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2496*53ee8cc1Swenshuai.xi }
2497*53ee8cc1Swenshuai.xi else
2498*53ee8cc1Swenshuai.xi {
2499*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2500*53ee8cc1Swenshuai.xi {
2501*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2502*53ee8cc1Swenshuai.xi }
2503*53ee8cc1Swenshuai.xi else
2504*53ee8cc1Swenshuai.xi {
2505*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2506*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2507*53ee8cc1Swenshuai.xi #else
2508*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2509*53ee8cc1Swenshuai.xi #endif
2510*53ee8cc1Swenshuai.xi txbuf[0] = msg;
2511*53ee8cc1Swenshuai.xi txbuf[1] = cmd;
2512*53ee8cc1Swenshuai.xi }
2513*53ee8cc1Swenshuai.xi }
2514*53ee8cc1Swenshuai.xi
2515*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2516*53ee8cc1Swenshuai.xi
2517*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_FEATURE_ABORT, txbuf, 2);
2518*53ee8cc1Swenshuai.xi
2519*53ee8cc1Swenshuai.xi return res;
2520*53ee8cc1Swenshuai.xi }
2521*53ee8cc1Swenshuai.xi
2522*53ee8cc1Swenshuai.xi //**************************************************************************
2523*53ee8cc1Swenshuai.xi // [Function Name]:
2524*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_Abort()
2525*53ee8cc1Swenshuai.xi // [Description]
2526*53ee8cc1Swenshuai.xi // This message is reserved for testing purposes.
2527*53ee8cc1Swenshuai.xi // [Message property]
2528*53ee8cc1Swenshuai.xi // Address: Directly
2529*53ee8cc1Swenshuai.xi // Initiator:
2530*53ee8cc1Swenshuai.xi // Follower: All except for CEC switches
2531*53ee8cc1Swenshuai.xi // [Arguments]:
2532*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2533*53ee8cc1Swenshuai.xi // [Return]:
2534*53ee8cc1Swenshuai.xi // error_code: return status
2535*53ee8cc1Swenshuai.xi //**************************************************************************
2536*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_Abort(void* pInstance, MsCEC_DEVICELA dst_address)
2537*53ee8cc1Swenshuai.xi {
2538*53ee8cc1Swenshuai.xi void* pModule = NULL;
2539*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2540*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2541*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2542*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2543*53ee8cc1Swenshuai.xi
2544*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2545*53ee8cc1Swenshuai.xi
2546*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2547*53ee8cc1Swenshuai.xi {
2548*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2549*53ee8cc1Swenshuai.xi }
2550*53ee8cc1Swenshuai.xi else
2551*53ee8cc1Swenshuai.xi {
2552*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2553*53ee8cc1Swenshuai.xi {
2554*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2555*53ee8cc1Swenshuai.xi }
2556*53ee8cc1Swenshuai.xi else
2557*53ee8cc1Swenshuai.xi {
2558*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2559*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2560*53ee8cc1Swenshuai.xi #else
2561*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2562*53ee8cc1Swenshuai.xi #endif
2563*53ee8cc1Swenshuai.xi }
2564*53ee8cc1Swenshuai.xi }
2565*53ee8cc1Swenshuai.xi
2566*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2567*53ee8cc1Swenshuai.xi
2568*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_ABORT_MESSAGE, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
2569*53ee8cc1Swenshuai.xi
2570*53ee8cc1Swenshuai.xi return res;
2571*53ee8cc1Swenshuai.xi }
2572*53ee8cc1Swenshuai.xi
2573*53ee8cc1Swenshuai.xi //**************************************************************************
2574*53ee8cc1Swenshuai.xi // [Function Name]:
2575*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_SendMenuLanguage()
2576*53ee8cc1Swenshuai.xi // [Description]
2577*53ee8cc1Swenshuai.xi // Used by a CEC switch when it's manually switched language to inform akk other devices.
2578*53ee8cc1Swenshuai.xi // [Message property]
2579*53ee8cc1Swenshuai.xi // Address: Broadcast
2580*53ee8cc1Swenshuai.xi // Initiator: CEC switches and TV(with 2 or more HDMI inputs)
2581*53ee8cc1Swenshuai.xi // Follower: CEC switches
2582*53ee8cc1Swenshuai.xi // [Arguments]:
2583*53ee8cc1Swenshuai.xi // MenuLanguageCode: iso639-2 Language Code, 3 bytes
2584*53ee8cc1Swenshuai.xi // [Return]:
2585*53ee8cc1Swenshuai.xi // error_code: return status
2586*53ee8cc1Swenshuai.xi //**************************************************************************
2587*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_SendMenuLanguage(void* pInstance, MS_U8* pu8MenuLanguageCode)
2588*53ee8cc1Swenshuai.xi {
2589*53ee8cc1Swenshuai.xi void* pModule = NULL;
2590*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2591*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2592*53ee8cc1Swenshuai.xi MS_U8 txbuf[3] = {0};
2593*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2594*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2595*53ee8cc1Swenshuai.xi
2596*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2597*53ee8cc1Swenshuai.xi
2598*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2599*53ee8cc1Swenshuai.xi {
2600*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2601*53ee8cc1Swenshuai.xi }
2602*53ee8cc1Swenshuai.xi else
2603*53ee8cc1Swenshuai.xi {
2604*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2605*53ee8cc1Swenshuai.xi {
2606*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2607*53ee8cc1Swenshuai.xi }
2608*53ee8cc1Swenshuai.xi else
2609*53ee8cc1Swenshuai.xi {
2610*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2611*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2612*53ee8cc1Swenshuai.xi #else
2613*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2614*53ee8cc1Swenshuai.xi #endif
2615*53ee8cc1Swenshuai.xi txbuf[0] = pu8MenuLanguageCode[0];
2616*53ee8cc1Swenshuai.xi txbuf[1] = pu8MenuLanguageCode[1];
2617*53ee8cc1Swenshuai.xi txbuf[2] = pu8MenuLanguageCode[2];
2618*53ee8cc1Swenshuai.xi }
2619*53ee8cc1Swenshuai.xi }
2620*53ee8cc1Swenshuai.xi
2621*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2622*53ee8cc1Swenshuai.xi
2623*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_SI_SET_MENU_LANGUAGE, txbuf, 3);
2624*53ee8cc1Swenshuai.xi
2625*53ee8cc1Swenshuai.xi return res;
2626*53ee8cc1Swenshuai.xi }
2627*53ee8cc1Swenshuai.xi
2628*53ee8cc1Swenshuai.xi //**************************************************************************
2629*53ee8cc1Swenshuai.xi // [Function Name]:
2630*53ee8cc1Swenshuai.xi // MDrv_CecMsg_ReqARCInitiation()
2631*53ee8cc1Swenshuai.xi // [Description]
2632*53ee8cc1Swenshuai.xi // Used by an ARC TX device to request an ARC RX device to active
2633*53ee8cc1Swenshuai.xi // the ARC functionility in ARC TX device
2634*53ee8cc1Swenshuai.xi // [Message property]
2635*53ee8cc1Swenshuai.xi // Address: Directly
2636*53ee8cc1Swenshuai.xi // Initiator:
2637*53ee8cc1Swenshuai.xi // Follower: ARC RX device
2638*53ee8cc1Swenshuai.xi // [Arguments]:
2639*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2640*53ee8cc1Swenshuai.xi // [Return]:
2641*53ee8cc1Swenshuai.xi // error_code: return status
2642*53ee8cc1Swenshuai.xi //**************************************************************************
2643*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CecMsg_ReqARCInitiation(void* pInstance, MsCEC_DEVICELA dst_address)
2644*53ee8cc1Swenshuai.xi {
2645*53ee8cc1Swenshuai.xi void* pModule = NULL;
2646*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2647*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2648*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2649*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2650*53ee8cc1Swenshuai.xi
2651*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2652*53ee8cc1Swenshuai.xi
2653*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2654*53ee8cc1Swenshuai.xi {
2655*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2656*53ee8cc1Swenshuai.xi }
2657*53ee8cc1Swenshuai.xi else
2658*53ee8cc1Swenshuai.xi {
2659*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2660*53ee8cc1Swenshuai.xi {
2661*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2662*53ee8cc1Swenshuai.xi }
2663*53ee8cc1Swenshuai.xi else
2664*53ee8cc1Swenshuai.xi {
2665*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2666*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2667*53ee8cc1Swenshuai.xi #else
2668*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2669*53ee8cc1Swenshuai.xi #endif
2670*53ee8cc1Swenshuai.xi }
2671*53ee8cc1Swenshuai.xi }
2672*53ee8cc1Swenshuai.xi
2673*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2674*53ee8cc1Swenshuai.xi
2675*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_ARC_REQUEST_ARC_INITATION, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
2676*53ee8cc1Swenshuai.xi
2677*53ee8cc1Swenshuai.xi return res;
2678*53ee8cc1Swenshuai.xi }
2679*53ee8cc1Swenshuai.xi
2680*53ee8cc1Swenshuai.xi //**************************************************************************
2681*53ee8cc1Swenshuai.xi // [Function Name]:
2682*53ee8cc1Swenshuai.xi // MDrv_CecMsg_ReqARCTermination()
2683*53ee8cc1Swenshuai.xi // [Description]
2684*53ee8cc1Swenshuai.xi // Used by an ARC TX device to request an ARC RX device to deactive
2685*53ee8cc1Swenshuai.xi // the ARC functionility in ARC TX device
2686*53ee8cc1Swenshuai.xi // [Message property]
2687*53ee8cc1Swenshuai.xi // Address: Directly
2688*53ee8cc1Swenshuai.xi // Initiator:
2689*53ee8cc1Swenshuai.xi // Follower: ARC RX device
2690*53ee8cc1Swenshuai.xi // [Arguments]:
2691*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2692*53ee8cc1Swenshuai.xi // [Return]:
2693*53ee8cc1Swenshuai.xi // error_code: return status
2694*53ee8cc1Swenshuai.xi //**************************************************************************
2695*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CecMsg_ReqARCTermination(void* pInstance, MsCEC_DEVICELA dst_address)
2696*53ee8cc1Swenshuai.xi {
2697*53ee8cc1Swenshuai.xi void* pModule = NULL;
2698*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2699*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2700*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2701*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2702*53ee8cc1Swenshuai.xi
2703*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2704*53ee8cc1Swenshuai.xi
2705*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2706*53ee8cc1Swenshuai.xi {
2707*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2708*53ee8cc1Swenshuai.xi }
2709*53ee8cc1Swenshuai.xi else
2710*53ee8cc1Swenshuai.xi {
2711*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2712*53ee8cc1Swenshuai.xi {
2713*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2714*53ee8cc1Swenshuai.xi }
2715*53ee8cc1Swenshuai.xi else
2716*53ee8cc1Swenshuai.xi {
2717*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2718*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2719*53ee8cc1Swenshuai.xi #else
2720*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2721*53ee8cc1Swenshuai.xi #endif
2722*53ee8cc1Swenshuai.xi }
2723*53ee8cc1Swenshuai.xi }
2724*53ee8cc1Swenshuai.xi
2725*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2726*53ee8cc1Swenshuai.xi
2727*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_ARC_REQUEST_ARC_TERMINATION, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
2728*53ee8cc1Swenshuai.xi
2729*53ee8cc1Swenshuai.xi return res;
2730*53ee8cc1Swenshuai.xi }
2731*53ee8cc1Swenshuai.xi
2732*53ee8cc1Swenshuai.xi //**************************************************************************
2733*53ee8cc1Swenshuai.xi // [Function Name]:
2734*53ee8cc1Swenshuai.xi // MDrv_CecMsg_AudioModeReq()
2735*53ee8cc1Swenshuai.xi // [Description]
2736*53ee8cc1Swenshuai.xi // A device implementing System Audio Control and which has volume control
2737*53ee8cc1Swenshuai.xi // RC buttons request to use System Audio Mode to the Amplifier
2738*53ee8cc1Swenshuai.xi // [Message property]
2739*53ee8cc1Swenshuai.xi // Address: Directly
2740*53ee8cc1Swenshuai.xi // Initiator:
2741*53ee8cc1Swenshuai.xi // Follower:
2742*53ee8cc1Swenshuai.xi // [Arguments]:
2743*53ee8cc1Swenshuai.xi // dst_address: destination logical address
2744*53ee8cc1Swenshuai.xi // amp_switch: 1: unmute amplifier. 0: mute amplifier
2745*53ee8cc1Swenshuai.xi // my_address: source to be used is the device specified at this address
2746*53ee8cc1Swenshuai.xi // [Return]:
2747*53ee8cc1Swenshuai.xi // error_code: return status
2748*53ee8cc1Swenshuai.xi //**************************************************************************
2749*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CecMsg_AudioModeReq(void* pInstance, MsCEC_DEVICELA dst_address, MS_BOOL amp_switch, MS_U8* my_address)
2750*53ee8cc1Swenshuai.xi {
2751*53ee8cc1Swenshuai.xi void* pModule = NULL;
2752*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2753*53ee8cc1Swenshuai.xi MS_U8 txbuf[2] = {0};
2754*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
2755*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
2756*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2757*53ee8cc1Swenshuai.xi
2758*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2759*53ee8cc1Swenshuai.xi
2760*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2761*53ee8cc1Swenshuai.xi {
2762*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2763*53ee8cc1Swenshuai.xi }
2764*53ee8cc1Swenshuai.xi else
2765*53ee8cc1Swenshuai.xi {
2766*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2767*53ee8cc1Swenshuai.xi {
2768*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2769*53ee8cc1Swenshuai.xi }
2770*53ee8cc1Swenshuai.xi else
2771*53ee8cc1Swenshuai.xi {
2772*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
2773*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
2774*53ee8cc1Swenshuai.xi #else
2775*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
2776*53ee8cc1Swenshuai.xi #endif
2777*53ee8cc1Swenshuai.xi }
2778*53ee8cc1Swenshuai.xi }
2779*53ee8cc1Swenshuai.xi
2780*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2781*53ee8cc1Swenshuai.xi
2782*53ee8cc1Swenshuai.xi if(amp_switch)
2783*53ee8cc1Swenshuai.xi {
2784*53ee8cc1Swenshuai.xi txbuf[0] = my_address[0];
2785*53ee8cc1Swenshuai.xi txbuf[1] = my_address[1];
2786*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_SAC_SYSTEM_AUDIO_MODE_REQUEST, txbuf, 2);
2787*53ee8cc1Swenshuai.xi }
2788*53ee8cc1Swenshuai.xi else
2789*53ee8cc1Swenshuai.xi {
2790*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, dst_address, E_MSG_SAC_SYSTEM_AUDIO_MODE_REQUEST, (MS_U8*)E_MSG_FEATURE_ABORT, 0);
2791*53ee8cc1Swenshuai.xi }
2792*53ee8cc1Swenshuai.xi
2793*53ee8cc1Swenshuai.xi return res;
2794*53ee8cc1Swenshuai.xi }
2795*53ee8cc1Swenshuai.xi
2796*53ee8cc1Swenshuai.xi //**************************************************************************
2797*53ee8cc1Swenshuai.xi // [Function Name]:
2798*53ee8cc1Swenshuai.xi // MDrv_CecCheckFrame()
2799*53ee8cc1Swenshuai.xi // [Description]
2800*53ee8cc1Swenshuai.xi // Driver layer: Use to check CEC frame is valid or not
2801*53ee8cc1Swenshuai.xi // [Arguments]:
2802*53ee8cc1Swenshuai.xi // msg_type: CEC message type
2803*53ee8cc1Swenshuai.xi // uclen: message length, include header and opcode
2804*53ee8cc1Swenshuai.xi // [Return]:
2805*53ee8cc1Swenshuai.xi // True or False
2806*53ee8cc1Swenshuai.xi //**************************************************************************
2807*53ee8cc1Swenshuai.xi MS_BOOL MDrv_CEC_CheckFrame(void* pInstance, MsCEC_MSG_TRANS_TYPE msg_type, MS_U8 ucLen)
2808*53ee8cc1Swenshuai.xi {
2809*53ee8cc1Swenshuai.xi void* pModule = NULL;
2810*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2811*53ee8cc1Swenshuai.xi MS_BOOL a = FALSE;
2812*53ee8cc1Swenshuai.xi MS_BOOL b = FALSE;
2813*53ee8cc1Swenshuai.xi MS_BOOL bReturnFlag = FALSE;
2814*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2815*53ee8cc1Swenshuai.xi
2816*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2817*53ee8cc1Swenshuai.xi
2818*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2819*53ee8cc1Swenshuai.xi {
2820*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2821*53ee8cc1Swenshuai.xi }
2822*53ee8cc1Swenshuai.xi else
2823*53ee8cc1Swenshuai.xi {
2824*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2825*53ee8cc1Swenshuai.xi {
2826*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2827*53ee8cc1Swenshuai.xi }
2828*53ee8cc1Swenshuai.xi else
2829*53ee8cc1Swenshuai.xi {
2830*53ee8cc1Swenshuai.xi a = (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].tRxData[0]&0x0F) == 0x0F; //broadcast case or not (addressed)
2831*53ee8cc1Swenshuai.xi b = (pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].ucLength) >= ucLen; //para length same or bigger than want (spec)
2832*53ee8cc1Swenshuai.xi
2833*53ee8cc1Swenshuai.xi if((pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].tRxData[0]&0xF0) == 0xF0) //message from unregistered device
2834*53ee8cc1Swenshuai.xi {
2835*53ee8cc1Swenshuai.xi switch(pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].tRxData[1]) //opcode
2836*53ee8cc1Swenshuai.xi {
2837*53ee8cc1Swenshuai.xi case E_MSG_RC_INACTIVE_SOURCE:
2838*53ee8cc1Swenshuai.xi case E_MSG_RC_REQ_ACTIVE_SOURCE:
2839*53ee8cc1Swenshuai.xi case E_MSG_RC_ROUTING_CHANGE:
2840*53ee8cc1Swenshuai.xi case E_MSG_RC_ROUTING_INFO:
2841*53ee8cc1Swenshuai.xi case E_MSG_RC_SET_STREM_PATH:
2842*53ee8cc1Swenshuai.xi
2843*53ee8cc1Swenshuai.xi case E_MSG_STANDBY: //=> system standby
2844*53ee8cc1Swenshuai.xi // following command invoke broadcast response
2845*53ee8cc1Swenshuai.xi case E_MSG_SI_REQUEST_PHY_ADDR: //=> Report_Physical_Address
2846*53ee8cc1Swenshuai.xi case E_MSG_SI_GET_MENU_LANGUAGE: //=> Set_Menu_Language
2847*53ee8cc1Swenshuai.xi case E_MSG_VS_GIVE_VENDOR_ID: //=> Device_Vendor_ID
2848*53ee8cc1Swenshuai.xi break;
2849*53ee8cc1Swenshuai.xi default:
2850*53ee8cc1Swenshuai.xi bReturnFlag = FALSE;
2851*53ee8cc1Swenshuai.xi break;
2852*53ee8cc1Swenshuai.xi };
2853*53ee8cc1Swenshuai.xi }
2854*53ee8cc1Swenshuai.xi
2855*53ee8cc1Swenshuai.xi switch(msg_type)
2856*53ee8cc1Swenshuai.xi {
2857*53ee8cc1Swenshuai.xi case E_TRANS_BROADCAST_MSG:
2858*53ee8cc1Swenshuai.xi bReturnFlag = a&b;
2859*53ee8cc1Swenshuai.xi break;
2860*53ee8cc1Swenshuai.xi case E_TRANS_DIRECT_MSG:
2861*53ee8cc1Swenshuai.xi bReturnFlag = (!a)&b;
2862*53ee8cc1Swenshuai.xi break;
2863*53ee8cc1Swenshuai.xi case E_TRANS_BOTHTYPE_MSG:
2864*53ee8cc1Swenshuai.xi bReturnFlag = b;
2865*53ee8cc1Swenshuai.xi break;
2866*53ee8cc1Swenshuai.xi };
2867*53ee8cc1Swenshuai.xi }
2868*53ee8cc1Swenshuai.xi }
2869*53ee8cc1Swenshuai.xi
2870*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2871*53ee8cc1Swenshuai.xi
2872*53ee8cc1Swenshuai.xi return bReturnFlag;
2873*53ee8cc1Swenshuai.xi }
2874*53ee8cc1Swenshuai.xi
2875*53ee8cc1Swenshuai.xi //**************************************************************************
2876*53ee8cc1Swenshuai.xi // [Function Name]:
2877*53ee8cc1Swenshuai.xi // MDrv_CEC_SetRetryCount()
2878*53ee8cc1Swenshuai.xi // [Description]
2879*53ee8cc1Swenshuai.xi //
2880*53ee8cc1Swenshuai.xi // [Arguments]:
2881*53ee8cc1Swenshuai.xi //
2882*53ee8cc1Swenshuai.xi // [Return]:
2883*53ee8cc1Swenshuai.xi //
2884*53ee8cc1Swenshuai.xi //**************************************************************************
2885*53ee8cc1Swenshuai.xi void MDrv_CEC_SetRetryCount(void* pInstance, MS_U8 u8RetryCount)
2886*53ee8cc1Swenshuai.xi {
2887*53ee8cc1Swenshuai.xi void* pModule = NULL;
2888*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2889*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2890*53ee8cc1Swenshuai.xi
2891*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2892*53ee8cc1Swenshuai.xi
2893*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2894*53ee8cc1Swenshuai.xi {
2895*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2896*53ee8cc1Swenshuai.xi }
2897*53ee8cc1Swenshuai.xi else
2898*53ee8cc1Swenshuai.xi {
2899*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2900*53ee8cc1Swenshuai.xi {
2901*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2902*53ee8cc1Swenshuai.xi }
2903*53ee8cc1Swenshuai.xi else
2904*53ee8cc1Swenshuai.xi {
2905*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucRetryCount = u8RetryCount;
2906*53ee8cc1Swenshuai.xi }
2907*53ee8cc1Swenshuai.xi }
2908*53ee8cc1Swenshuai.xi
2909*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2910*53ee8cc1Swenshuai.xi }
2911*53ee8cc1Swenshuai.xi
2912*53ee8cc1Swenshuai.xi //**************************************************************************
2913*53ee8cc1Swenshuai.xi // [Function Name]:
2914*53ee8cc1Swenshuai.xi // MDrv_CEC_ConfigWakeUp()
2915*53ee8cc1Swenshuai.xi // [Description]
2916*53ee8cc1Swenshuai.xi //
2917*53ee8cc1Swenshuai.xi // [Arguments]:
2918*53ee8cc1Swenshuai.xi //
2919*53ee8cc1Swenshuai.xi // [Return]:
2920*53ee8cc1Swenshuai.xi //
2921*53ee8cc1Swenshuai.xi //**************************************************************************
2922*53ee8cc1Swenshuai.xi void MDrv_CEC_ConfigWakeUp(void* pInstance)
2923*53ee8cc1Swenshuai.xi {
2924*53ee8cc1Swenshuai.xi void* pModule = NULL;
2925*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2926*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2927*53ee8cc1Swenshuai.xi
2928*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2929*53ee8cc1Swenshuai.xi
2930*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2931*53ee8cc1Swenshuai.xi {
2932*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2933*53ee8cc1Swenshuai.xi }
2934*53ee8cc1Swenshuai.xi else
2935*53ee8cc1Swenshuai.xi {
2936*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2937*53ee8cc1Swenshuai.xi {
2938*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2939*53ee8cc1Swenshuai.xi }
2940*53ee8cc1Swenshuai.xi else
2941*53ee8cc1Swenshuai.xi {
2942*53ee8cc1Swenshuai.xi if (!pCECResourcePrivate->bRIUAddrReady)
2943*53ee8cc1Swenshuai.xi {
2944*53ee8cc1Swenshuai.xi _MDrv_CEC_init_riu_base(pCECResourcePrivate); // Get base address to prevent core dump
2945*53ee8cc1Swenshuai.xi }
2946*53ee8cc1Swenshuai.xi
2947*53ee8cc1Swenshuai.xi mhal_CEC_ConfigWakeUp(pCECResourcePrivate->ucRetryCount, pCECResourcePrivate->ucVendorID, pCECResourcePrivate->ulXTAL_CLK_Hz,
2948*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress, pCECResourcePrivate->MyDeviceType, pCECResourcePrivate->bCECIsSource);
2949*53ee8cc1Swenshuai.xi }
2950*53ee8cc1Swenshuai.xi }
2951*53ee8cc1Swenshuai.xi
2952*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2953*53ee8cc1Swenshuai.xi }
2954*53ee8cc1Swenshuai.xi
2955*53ee8cc1Swenshuai.xi //**************************************************************************
2956*53ee8cc1Swenshuai.xi // [Function Name]:
2957*53ee8cc1Swenshuai.xi // MDrv_CEC_ConfigWakeupInfoVendorID()
2958*53ee8cc1Swenshuai.xi // [Description]
2959*53ee8cc1Swenshuai.xi //
2960*53ee8cc1Swenshuai.xi // [Arguments]:
2961*53ee8cc1Swenshuai.xi //
2962*53ee8cc1Swenshuai.xi // [Return]:
2963*53ee8cc1Swenshuai.xi //
2964*53ee8cc1Swenshuai.xi //**************************************************************************
2965*53ee8cc1Swenshuai.xi void MDrv_CEC_ConfigWakeupInfoVendorID(void* pInstance, MS_U8 *u8CecVendorID)
2966*53ee8cc1Swenshuai.xi {
2967*53ee8cc1Swenshuai.xi void* pModule = NULL;
2968*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
2969*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
2970*53ee8cc1Swenshuai.xi
2971*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
2972*53ee8cc1Swenshuai.xi
2973*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
2974*53ee8cc1Swenshuai.xi {
2975*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
2976*53ee8cc1Swenshuai.xi }
2977*53ee8cc1Swenshuai.xi else
2978*53ee8cc1Swenshuai.xi {
2979*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
2980*53ee8cc1Swenshuai.xi {
2981*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
2982*53ee8cc1Swenshuai.xi }
2983*53ee8cc1Swenshuai.xi else
2984*53ee8cc1Swenshuai.xi {
2985*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucVendorID[0] = u8CecVendorID[0];
2986*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucVendorID[1] = u8CecVendorID[1];
2987*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucVendorID[2] = u8CecVendorID[2];
2988*53ee8cc1Swenshuai.xi }
2989*53ee8cc1Swenshuai.xi }
2990*53ee8cc1Swenshuai.xi
2991*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
2992*53ee8cc1Swenshuai.xi }
2993*53ee8cc1Swenshuai.xi
2994*53ee8cc1Swenshuai.xi //**************************************************************************
2995*53ee8cc1Swenshuai.xi // [Function Name]:
2996*53ee8cc1Swenshuai.xi // MDrv_CEC_Enabled()
2997*53ee8cc1Swenshuai.xi // [Description]
2998*53ee8cc1Swenshuai.xi //
2999*53ee8cc1Swenshuai.xi // [Arguments]:
3000*53ee8cc1Swenshuai.xi //
3001*53ee8cc1Swenshuai.xi // [Return]:
3002*53ee8cc1Swenshuai.xi //
3003*53ee8cc1Swenshuai.xi //**************************************************************************
3004*53ee8cc1Swenshuai.xi void MDrv_CEC_Enabled(void* pInstance, MS_BOOL bEnableFlag)
3005*53ee8cc1Swenshuai.xi {
3006*53ee8cc1Swenshuai.xi if (bEnableFlag)
3007*53ee8cc1Swenshuai.xi {
3008*53ee8cc1Swenshuai.xi mhal_CEC_ClearRxStatus();
3009*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
3010*53ee8cc1Swenshuai.xi mhal_CEC_ClearRxStatus2();
3011*53ee8cc1Swenshuai.xi #endif
3012*53ee8cc1Swenshuai.xi mhal_CEC_INTEn(TRUE);
3013*53ee8cc1Swenshuai.xi mhal_CEC_Enabled(TRUE);
3014*53ee8cc1Swenshuai.xi }
3015*53ee8cc1Swenshuai.xi else
3016*53ee8cc1Swenshuai.xi {
3017*53ee8cc1Swenshuai.xi mhal_CEC_INTEn(FALSE);
3018*53ee8cc1Swenshuai.xi mhal_CEC_Enabled(FALSE);
3019*53ee8cc1Swenshuai.xi }
3020*53ee8cc1Swenshuai.xi }
3021*53ee8cc1Swenshuai.xi
3022*53ee8cc1Swenshuai.xi //**************************************************************************
3023*53ee8cc1Swenshuai.xi // [Function Name]:
3024*53ee8cc1Swenshuai.xi // MDrv_CEC_TxStatus()
3025*53ee8cc1Swenshuai.xi // [Description]
3026*53ee8cc1Swenshuai.xi //
3027*53ee8cc1Swenshuai.xi // [Arguments]:
3028*53ee8cc1Swenshuai.xi //
3029*53ee8cc1Swenshuai.xi // [Return]:
3030*53ee8cc1Swenshuai.xi //
3031*53ee8cc1Swenshuai.xi //**************************************************************************
3032*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_TxStatus(void* pInstance)
3033*53ee8cc1Swenshuai.xi {
3034*53ee8cc1Swenshuai.xi return mhal_CEC_TxStatus();
3035*53ee8cc1Swenshuai.xi }
3036*53ee8cc1Swenshuai.xi
3037*53ee8cc1Swenshuai.xi //**************************************************************************
3038*53ee8cc1Swenshuai.xi // [Function Name]:
3039*53ee8cc1Swenshuai.xi // MDrv_CEC_CheckDeviceIsTx()
3040*53ee8cc1Swenshuai.xi // [Description]
3041*53ee8cc1Swenshuai.xi //
3042*53ee8cc1Swenshuai.xi // [Arguments]:
3043*53ee8cc1Swenshuai.xi //
3044*53ee8cc1Swenshuai.xi // [Return]:
3045*53ee8cc1Swenshuai.xi //
3046*53ee8cc1Swenshuai.xi //**************************************************************************
3047*53ee8cc1Swenshuai.xi MS_BOOL MDrv_CEC_CheckDeviceIsTx(void* pInstance)
3048*53ee8cc1Swenshuai.xi {
3049*53ee8cc1Swenshuai.xi void* pModule = NULL;
3050*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3051*53ee8cc1Swenshuai.xi MS_BOOL bCECIsSourceFlag = FALSE;
3052*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3053*53ee8cc1Swenshuai.xi
3054*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3055*53ee8cc1Swenshuai.xi
3056*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3057*53ee8cc1Swenshuai.xi {
3058*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3059*53ee8cc1Swenshuai.xi }
3060*53ee8cc1Swenshuai.xi else
3061*53ee8cc1Swenshuai.xi {
3062*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3063*53ee8cc1Swenshuai.xi {
3064*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3065*53ee8cc1Swenshuai.xi }
3066*53ee8cc1Swenshuai.xi else
3067*53ee8cc1Swenshuai.xi {
3068*53ee8cc1Swenshuai.xi bCECIsSourceFlag = pCECResourcePrivate->bCECIsSource;
3069*53ee8cc1Swenshuai.xi }
3070*53ee8cc1Swenshuai.xi }
3071*53ee8cc1Swenshuai.xi
3072*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3073*53ee8cc1Swenshuai.xi
3074*53ee8cc1Swenshuai.xi return bCECIsSourceFlag;
3075*53ee8cc1Swenshuai.xi }
3076*53ee8cc1Swenshuai.xi
3077*53ee8cc1Swenshuai.xi //**************************************************************************
3078*53ee8cc1Swenshuai.xi // [Function Name]:
3079*53ee8cc1Swenshuai.xi // MDrv_CEC_SetPowerState()
3080*53ee8cc1Swenshuai.xi // [Description]
3081*53ee8cc1Swenshuai.xi //
3082*53ee8cc1Swenshuai.xi // [Arguments]:
3083*53ee8cc1Swenshuai.xi //
3084*53ee8cc1Swenshuai.xi // [Return]:
3085*53ee8cc1Swenshuai.xi //
3086*53ee8cc1Swenshuai.xi //**************************************************************************
3087*53ee8cc1Swenshuai.xi MS_U32 MDrv_CEC_SetPowerState(void* pInstance, EN_POWER_MODE u16PowerState)
3088*53ee8cc1Swenshuai.xi {
3089*53ee8cc1Swenshuai.xi void* pModule = NULL;
3090*53ee8cc1Swenshuai.xi
3091*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3092*53ee8cc1Swenshuai.xi
3093*53ee8cc1Swenshuai.xi return mdrv_CEC_STREventProc(pModule, u16PowerState);
3094*53ee8cc1Swenshuai.xi }
3095*53ee8cc1Swenshuai.xi
3096*53ee8cc1Swenshuai.xi //**************************************************************************
3097*53ee8cc1Swenshuai.xi // [Function Name]:
3098*53ee8cc1Swenshuai.xi // MDrv_CEC_Get_Header()
3099*53ee8cc1Swenshuai.xi // [Description]
3100*53ee8cc1Swenshuai.xi //
3101*53ee8cc1Swenshuai.xi // [Arguments]:
3102*53ee8cc1Swenshuai.xi //
3103*53ee8cc1Swenshuai.xi // [Return]:
3104*53ee8cc1Swenshuai.xi //
3105*53ee8cc1Swenshuai.xi //**************************************************************************
3106*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_Get_Header(void* pInstance)
3107*53ee8cc1Swenshuai.xi {
3108*53ee8cc1Swenshuai.xi void* pModule = NULL;
3109*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3110*53ee8cc1Swenshuai.xi MS_U8 ucReturnValue = 0;
3111*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3112*53ee8cc1Swenshuai.xi
3113*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3114*53ee8cc1Swenshuai.xi
3115*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3116*53ee8cc1Swenshuai.xi {
3117*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3118*53ee8cc1Swenshuai.xi }
3119*53ee8cc1Swenshuai.xi else
3120*53ee8cc1Swenshuai.xi {
3121*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3122*53ee8cc1Swenshuai.xi {
3123*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3124*53ee8cc1Swenshuai.xi }
3125*53ee8cc1Swenshuai.xi else
3126*53ee8cc1Swenshuai.xi {
3127*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].tRxData[0];
3128*53ee8cc1Swenshuai.xi }
3129*53ee8cc1Swenshuai.xi }
3130*53ee8cc1Swenshuai.xi
3131*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3132*53ee8cc1Swenshuai.xi
3133*53ee8cc1Swenshuai.xi return ucReturnValue;
3134*53ee8cc1Swenshuai.xi }
3135*53ee8cc1Swenshuai.xi
3136*53ee8cc1Swenshuai.xi //**************************************************************************
3137*53ee8cc1Swenshuai.xi // [Function Name]:
3138*53ee8cc1Swenshuai.xi // MDrv_CEC_Get_OpCode()
3139*53ee8cc1Swenshuai.xi // [Description]
3140*53ee8cc1Swenshuai.xi //
3141*53ee8cc1Swenshuai.xi // [Arguments]:
3142*53ee8cc1Swenshuai.xi //
3143*53ee8cc1Swenshuai.xi // [Return]:
3144*53ee8cc1Swenshuai.xi //
3145*53ee8cc1Swenshuai.xi //**************************************************************************
3146*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_Get_OpCode(void* pInstance)
3147*53ee8cc1Swenshuai.xi {
3148*53ee8cc1Swenshuai.xi void* pModule = NULL;
3149*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3150*53ee8cc1Swenshuai.xi MS_U8 ucReturnValue = 0;
3151*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3152*53ee8cc1Swenshuai.xi
3153*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3154*53ee8cc1Swenshuai.xi
3155*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3156*53ee8cc1Swenshuai.xi {
3157*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3158*53ee8cc1Swenshuai.xi }
3159*53ee8cc1Swenshuai.xi else
3160*53ee8cc1Swenshuai.xi {
3161*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3162*53ee8cc1Swenshuai.xi {
3163*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3164*53ee8cc1Swenshuai.xi }
3165*53ee8cc1Swenshuai.xi else
3166*53ee8cc1Swenshuai.xi {
3167*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].tRxData[1];
3168*53ee8cc1Swenshuai.xi }
3169*53ee8cc1Swenshuai.xi }
3170*53ee8cc1Swenshuai.xi
3171*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3172*53ee8cc1Swenshuai.xi
3173*53ee8cc1Swenshuai.xi return ucReturnValue;
3174*53ee8cc1Swenshuai.xi }
3175*53ee8cc1Swenshuai.xi
3176*53ee8cc1Swenshuai.xi //**************************************************************************
3177*53ee8cc1Swenshuai.xi // [Function Name]:
3178*53ee8cc1Swenshuai.xi // MDrv_CEC_Get_Para()
3179*53ee8cc1Swenshuai.xi // [Description]
3180*53ee8cc1Swenshuai.xi //
3181*53ee8cc1Swenshuai.xi // [Arguments]:
3182*53ee8cc1Swenshuai.xi //
3183*53ee8cc1Swenshuai.xi // [Return]:
3184*53ee8cc1Swenshuai.xi //
3185*53ee8cc1Swenshuai.xi //**************************************************************************
3186*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_Get_Para(void* pInstance, MS_U8 u8Idx)
3187*53ee8cc1Swenshuai.xi {
3188*53ee8cc1Swenshuai.xi void* pModule = NULL;
3189*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3190*53ee8cc1Swenshuai.xi MS_U8 ucReturnValue = 0;
3191*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3192*53ee8cc1Swenshuai.xi
3193*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3194*53ee8cc1Swenshuai.xi
3195*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3196*53ee8cc1Swenshuai.xi {
3197*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3198*53ee8cc1Swenshuai.xi }
3199*53ee8cc1Swenshuai.xi else
3200*53ee8cc1Swenshuai.xi {
3201*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3202*53ee8cc1Swenshuai.xi {
3203*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3204*53ee8cc1Swenshuai.xi }
3205*53ee8cc1Swenshuai.xi else
3206*53ee8cc1Swenshuai.xi {
3207*53ee8cc1Swenshuai.xi if(u8Idx+2 > 15)
3208*53ee8cc1Swenshuai.xi {
3209*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].tRxData[0];
3210*53ee8cc1Swenshuai.xi }
3211*53ee8cc1Swenshuai.xi else
3212*53ee8cc1Swenshuai.xi {
3213*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].tRxData[u8Idx+2];
3214*53ee8cc1Swenshuai.xi }
3215*53ee8cc1Swenshuai.xi }
3216*53ee8cc1Swenshuai.xi }
3217*53ee8cc1Swenshuai.xi
3218*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3219*53ee8cc1Swenshuai.xi
3220*53ee8cc1Swenshuai.xi return ucReturnValue;
3221*53ee8cc1Swenshuai.xi }
3222*53ee8cc1Swenshuai.xi
3223*53ee8cc1Swenshuai.xi //**************************************************************************
3224*53ee8cc1Swenshuai.xi // [Function Name]:
3225*53ee8cc1Swenshuai.xi // MDrv_CEC_GetCmdLen()
3226*53ee8cc1Swenshuai.xi // [Description]
3227*53ee8cc1Swenshuai.xi //
3228*53ee8cc1Swenshuai.xi // [Arguments]:
3229*53ee8cc1Swenshuai.xi //
3230*53ee8cc1Swenshuai.xi // [Return]:
3231*53ee8cc1Swenshuai.xi //
3232*53ee8cc1Swenshuai.xi //**************************************************************************
3233*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_GetCmdLen(void* pInstance)
3234*53ee8cc1Swenshuai.xi {
3235*53ee8cc1Swenshuai.xi void* pModule = NULL;
3236*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3237*53ee8cc1Swenshuai.xi MS_U8 ucReturnValue = 0;
3238*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3239*53ee8cc1Swenshuai.xi
3240*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3241*53ee8cc1Swenshuai.xi
3242*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3243*53ee8cc1Swenshuai.xi {
3244*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3245*53ee8cc1Swenshuai.xi }
3246*53ee8cc1Swenshuai.xi else
3247*53ee8cc1Swenshuai.xi {
3248*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3249*53ee8cc1Swenshuai.xi {
3250*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3251*53ee8cc1Swenshuai.xi }
3252*53ee8cc1Swenshuai.xi else
3253*53ee8cc1Swenshuai.xi {
3254*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->CecRxBuf[pCECResourcePrivate->CecFifoIdxS].ucLength;
3255*53ee8cc1Swenshuai.xi }
3256*53ee8cc1Swenshuai.xi }
3257*53ee8cc1Swenshuai.xi
3258*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3259*53ee8cc1Swenshuai.xi
3260*53ee8cc1Swenshuai.xi return ucReturnValue;
3261*53ee8cc1Swenshuai.xi }
3262*53ee8cc1Swenshuai.xi
3263*53ee8cc1Swenshuai.xi //**************************************************************************
3264*53ee8cc1Swenshuai.xi // [Function Name]:
3265*53ee8cc1Swenshuai.xi // MDrv_CEC_IsRxBufEmpty()
3266*53ee8cc1Swenshuai.xi // [Description]
3267*53ee8cc1Swenshuai.xi //
3268*53ee8cc1Swenshuai.xi // [Arguments]:
3269*53ee8cc1Swenshuai.xi //
3270*53ee8cc1Swenshuai.xi // [Return]:
3271*53ee8cc1Swenshuai.xi //
3272*53ee8cc1Swenshuai.xi //**************************************************************************
3273*53ee8cc1Swenshuai.xi MS_BOOL MDrv_CEC_IsRxBufEmpty(void* pInstance)
3274*53ee8cc1Swenshuai.xi {
3275*53ee8cc1Swenshuai.xi void* pModule = NULL;
3276*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3277*53ee8cc1Swenshuai.xi MS_BOOL bReturnFlag = FALSE;
3278*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3279*53ee8cc1Swenshuai.xi
3280*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3281*53ee8cc1Swenshuai.xi
3282*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3283*53ee8cc1Swenshuai.xi {
3284*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3285*53ee8cc1Swenshuai.xi }
3286*53ee8cc1Swenshuai.xi else
3287*53ee8cc1Swenshuai.xi {
3288*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3289*53ee8cc1Swenshuai.xi {
3290*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3291*53ee8cc1Swenshuai.xi }
3292*53ee8cc1Swenshuai.xi else
3293*53ee8cc1Swenshuai.xi {
3294*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->bCecMsgCnt == 0 )
3295*53ee8cc1Swenshuai.xi {
3296*53ee8cc1Swenshuai.xi bReturnFlag = TRUE;
3297*53ee8cc1Swenshuai.xi }
3298*53ee8cc1Swenshuai.xi else
3299*53ee8cc1Swenshuai.xi {
3300*53ee8cc1Swenshuai.xi bReturnFlag = FALSE;
3301*53ee8cc1Swenshuai.xi }
3302*53ee8cc1Swenshuai.xi }
3303*53ee8cc1Swenshuai.xi }
3304*53ee8cc1Swenshuai.xi
3305*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3306*53ee8cc1Swenshuai.xi
3307*53ee8cc1Swenshuai.xi return bReturnFlag;
3308*53ee8cc1Swenshuai.xi }
3309*53ee8cc1Swenshuai.xi
3310*53ee8cc1Swenshuai.xi //**************************************************************************
3311*53ee8cc1Swenshuai.xi // [Function Name]:
3312*53ee8cc1Swenshuai.xi // MDrv_CEC_SetActiveLogicalAddress()
3313*53ee8cc1Swenshuai.xi // [Description]
3314*53ee8cc1Swenshuai.xi //
3315*53ee8cc1Swenshuai.xi // [Arguments]:
3316*53ee8cc1Swenshuai.xi //
3317*53ee8cc1Swenshuai.xi // [Return]:
3318*53ee8cc1Swenshuai.xi //
3319*53ee8cc1Swenshuai.xi //**************************************************************************
3320*53ee8cc1Swenshuai.xi void MDrv_CEC_SetActiveLogicalAddress(void* pInstance, MsCEC_DEVICELA Addr)
3321*53ee8cc1Swenshuai.xi {
3322*53ee8cc1Swenshuai.xi void* pModule = NULL;
3323*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3324*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3325*53ee8cc1Swenshuai.xi
3326*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3327*53ee8cc1Swenshuai.xi
3328*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3329*53ee8cc1Swenshuai.xi {
3330*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3331*53ee8cc1Swenshuai.xi }
3332*53ee8cc1Swenshuai.xi else
3333*53ee8cc1Swenshuai.xi {
3334*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3335*53ee8cc1Swenshuai.xi {
3336*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3337*53ee8cc1Swenshuai.xi }
3338*53ee8cc1Swenshuai.xi else
3339*53ee8cc1Swenshuai.xi {
3340*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActiveLogicalAddress = Addr;
3341*53ee8cc1Swenshuai.xi }
3342*53ee8cc1Swenshuai.xi }
3343*53ee8cc1Swenshuai.xi
3344*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3345*53ee8cc1Swenshuai.xi }
3346*53ee8cc1Swenshuai.xi
3347*53ee8cc1Swenshuai.xi //**************************************************************************
3348*53ee8cc1Swenshuai.xi // [Function Name]:
3349*53ee8cc1Swenshuai.xi // MDrv_CEC_GetActiveLogicalAddress()
3350*53ee8cc1Swenshuai.xi // [Description]
3351*53ee8cc1Swenshuai.xi //
3352*53ee8cc1Swenshuai.xi // [Arguments]:
3353*53ee8cc1Swenshuai.xi //
3354*53ee8cc1Swenshuai.xi // [Return]:
3355*53ee8cc1Swenshuai.xi //
3356*53ee8cc1Swenshuai.xi //**************************************************************************
3357*53ee8cc1Swenshuai.xi MsCEC_DEVICELA MDrv_CEC_GetActiveLogicalAddress(void* pInstance)
3358*53ee8cc1Swenshuai.xi {
3359*53ee8cc1Swenshuai.xi void* pModule = NULL;
3360*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3361*53ee8cc1Swenshuai.xi MsCEC_DEVICELA eReturnValue = E_LA_UNREGISTERED;
3362*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3363*53ee8cc1Swenshuai.xi
3364*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3365*53ee8cc1Swenshuai.xi
3366*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3367*53ee8cc1Swenshuai.xi {
3368*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3369*53ee8cc1Swenshuai.xi }
3370*53ee8cc1Swenshuai.xi else
3371*53ee8cc1Swenshuai.xi {
3372*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3373*53ee8cc1Swenshuai.xi {
3374*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3375*53ee8cc1Swenshuai.xi }
3376*53ee8cc1Swenshuai.xi else
3377*53ee8cc1Swenshuai.xi {
3378*53ee8cc1Swenshuai.xi eReturnValue = pCECResourcePrivate->ActiveLogicalAddress;
3379*53ee8cc1Swenshuai.xi }
3380*53ee8cc1Swenshuai.xi }
3381*53ee8cc1Swenshuai.xi
3382*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3383*53ee8cc1Swenshuai.xi
3384*53ee8cc1Swenshuai.xi return eReturnValue;
3385*53ee8cc1Swenshuai.xi }
3386*53ee8cc1Swenshuai.xi
3387*53ee8cc1Swenshuai.xi //**************************************************************************
3388*53ee8cc1Swenshuai.xi // [Function Name]:
3389*53ee8cc1Swenshuai.xi // MDrv_CEC_GetPowerStatus()
3390*53ee8cc1Swenshuai.xi // [Description]
3391*53ee8cc1Swenshuai.xi //
3392*53ee8cc1Swenshuai.xi // [Arguments]:
3393*53ee8cc1Swenshuai.xi //
3394*53ee8cc1Swenshuai.xi // [Return]:
3395*53ee8cc1Swenshuai.xi //
3396*53ee8cc1Swenshuai.xi //**************************************************************************
3397*53ee8cc1Swenshuai.xi MsCEC_MSG_POWER_STATUS_PARM MDrv_CEC_GetPowerStatus(void* pInstance)
3398*53ee8cc1Swenshuai.xi {
3399*53ee8cc1Swenshuai.xi void* pModule = NULL;
3400*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3401*53ee8cc1Swenshuai.xi MsCEC_MSG_POWER_STATUS_PARM eReturnValue = E_MSG_PWRSTA_UNKNOW;
3402*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3403*53ee8cc1Swenshuai.xi
3404*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3405*53ee8cc1Swenshuai.xi
3406*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3407*53ee8cc1Swenshuai.xi {
3408*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3409*53ee8cc1Swenshuai.xi }
3410*53ee8cc1Swenshuai.xi else
3411*53ee8cc1Swenshuai.xi {
3412*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3413*53ee8cc1Swenshuai.xi {
3414*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3415*53ee8cc1Swenshuai.xi }
3416*53ee8cc1Swenshuai.xi else
3417*53ee8cc1Swenshuai.xi {
3418*53ee8cc1Swenshuai.xi eReturnValue = pCECResourcePrivate->MyPowerStatus;
3419*53ee8cc1Swenshuai.xi }
3420*53ee8cc1Swenshuai.xi }
3421*53ee8cc1Swenshuai.xi
3422*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3423*53ee8cc1Swenshuai.xi
3424*53ee8cc1Swenshuai.xi return eReturnValue;
3425*53ee8cc1Swenshuai.xi }
3426*53ee8cc1Swenshuai.xi
3427*53ee8cc1Swenshuai.xi //**************************************************************************
3428*53ee8cc1Swenshuai.xi // [Function Name]:
3429*53ee8cc1Swenshuai.xi // MDrv_CEC_GetFifoIdx()
3430*53ee8cc1Swenshuai.xi // [Description]
3431*53ee8cc1Swenshuai.xi //
3432*53ee8cc1Swenshuai.xi // [Arguments]:
3433*53ee8cc1Swenshuai.xi //
3434*53ee8cc1Swenshuai.xi // [Return]:
3435*53ee8cc1Swenshuai.xi //
3436*53ee8cc1Swenshuai.xi //**************************************************************************
3437*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_GetFifoIdx(void* pInstance)
3438*53ee8cc1Swenshuai.xi {
3439*53ee8cc1Swenshuai.xi void* pModule = NULL;
3440*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3441*53ee8cc1Swenshuai.xi MS_U8 ucReturnValue = 0;
3442*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3443*53ee8cc1Swenshuai.xi
3444*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3445*53ee8cc1Swenshuai.xi
3446*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3447*53ee8cc1Swenshuai.xi {
3448*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3449*53ee8cc1Swenshuai.xi }
3450*53ee8cc1Swenshuai.xi else
3451*53ee8cc1Swenshuai.xi {
3452*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3453*53ee8cc1Swenshuai.xi {
3454*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3455*53ee8cc1Swenshuai.xi }
3456*53ee8cc1Swenshuai.xi else
3457*53ee8cc1Swenshuai.xi {
3458*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->CecFifoIdxS;
3459*53ee8cc1Swenshuai.xi }
3460*53ee8cc1Swenshuai.xi }
3461*53ee8cc1Swenshuai.xi
3462*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3463*53ee8cc1Swenshuai.xi
3464*53ee8cc1Swenshuai.xi return ucReturnValue;
3465*53ee8cc1Swenshuai.xi }
3466*53ee8cc1Swenshuai.xi
3467*53ee8cc1Swenshuai.xi //**************************************************************************
3468*53ee8cc1Swenshuai.xi // [Function Name]:
3469*53ee8cc1Swenshuai.xi // MDrv_CEC_SetFifoIdx()
3470*53ee8cc1Swenshuai.xi // [Description]
3471*53ee8cc1Swenshuai.xi //
3472*53ee8cc1Swenshuai.xi // [Arguments]:
3473*53ee8cc1Swenshuai.xi //
3474*53ee8cc1Swenshuai.xi // [Return]:
3475*53ee8cc1Swenshuai.xi //
3476*53ee8cc1Swenshuai.xi //**************************************************************************
3477*53ee8cc1Swenshuai.xi void MDrv_CEC_SetFifoIdx(void* pInstance, MS_U8 u8Idx)
3478*53ee8cc1Swenshuai.xi {
3479*53ee8cc1Swenshuai.xi void* pModule = NULL;
3480*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3481*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3482*53ee8cc1Swenshuai.xi
3483*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3484*53ee8cc1Swenshuai.xi
3485*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3486*53ee8cc1Swenshuai.xi {
3487*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3488*53ee8cc1Swenshuai.xi }
3489*53ee8cc1Swenshuai.xi else
3490*53ee8cc1Swenshuai.xi {
3491*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3492*53ee8cc1Swenshuai.xi {
3493*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3494*53ee8cc1Swenshuai.xi }
3495*53ee8cc1Swenshuai.xi else
3496*53ee8cc1Swenshuai.xi {
3497*53ee8cc1Swenshuai.xi pCECResourcePrivate->CecFifoIdxS = u8Idx;
3498*53ee8cc1Swenshuai.xi }
3499*53ee8cc1Swenshuai.xi }
3500*53ee8cc1Swenshuai.xi
3501*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3502*53ee8cc1Swenshuai.xi }
3503*53ee8cc1Swenshuai.xi
3504*53ee8cc1Swenshuai.xi //**************************************************************************
3505*53ee8cc1Swenshuai.xi // [Function Name]:
3506*53ee8cc1Swenshuai.xi // MDrv_CEC_SetActivePowerStatus()
3507*53ee8cc1Swenshuai.xi // [Description]
3508*53ee8cc1Swenshuai.xi //
3509*53ee8cc1Swenshuai.xi // [Arguments]:
3510*53ee8cc1Swenshuai.xi //
3511*53ee8cc1Swenshuai.xi // [Return]:
3512*53ee8cc1Swenshuai.xi //
3513*53ee8cc1Swenshuai.xi //**************************************************************************
3514*53ee8cc1Swenshuai.xi void MDrv_CEC_SetActivePowerStatus(void* pInstance, MsCEC_MSG_POWER_STATUS_PARM Status)
3515*53ee8cc1Swenshuai.xi {
3516*53ee8cc1Swenshuai.xi void* pModule = NULL;
3517*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3518*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3519*53ee8cc1Swenshuai.xi
3520*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3521*53ee8cc1Swenshuai.xi
3522*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3523*53ee8cc1Swenshuai.xi {
3524*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3525*53ee8cc1Swenshuai.xi }
3526*53ee8cc1Swenshuai.xi else
3527*53ee8cc1Swenshuai.xi {
3528*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3529*53ee8cc1Swenshuai.xi {
3530*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3531*53ee8cc1Swenshuai.xi }
3532*53ee8cc1Swenshuai.xi else
3533*53ee8cc1Swenshuai.xi {
3534*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActivePowerStatus = Status;
3535*53ee8cc1Swenshuai.xi }
3536*53ee8cc1Swenshuai.xi }
3537*53ee8cc1Swenshuai.xi
3538*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3539*53ee8cc1Swenshuai.xi }
3540*53ee8cc1Swenshuai.xi
3541*53ee8cc1Swenshuai.xi //**************************************************************************
3542*53ee8cc1Swenshuai.xi // [Function Name]:
3543*53ee8cc1Swenshuai.xi // MDrv_CEC_GetActivePowerStatus()
3544*53ee8cc1Swenshuai.xi // [Description]
3545*53ee8cc1Swenshuai.xi //
3546*53ee8cc1Swenshuai.xi // [Arguments]:
3547*53ee8cc1Swenshuai.xi //
3548*53ee8cc1Swenshuai.xi // [Return]:
3549*53ee8cc1Swenshuai.xi //
3550*53ee8cc1Swenshuai.xi //**************************************************************************
3551*53ee8cc1Swenshuai.xi MsCEC_MSG_POWER_STATUS_PARM MDrv_CEC_GetActivePowerStatus(void* pInstance)
3552*53ee8cc1Swenshuai.xi {
3553*53ee8cc1Swenshuai.xi void* pModule = NULL;
3554*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3555*53ee8cc1Swenshuai.xi MsCEC_MSG_POWER_STATUS_PARM eReturnValue = E_MSG_PWRSTA_UNKNOW;
3556*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3557*53ee8cc1Swenshuai.xi
3558*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3559*53ee8cc1Swenshuai.xi
3560*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3561*53ee8cc1Swenshuai.xi {
3562*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3563*53ee8cc1Swenshuai.xi }
3564*53ee8cc1Swenshuai.xi else
3565*53ee8cc1Swenshuai.xi {
3566*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3567*53ee8cc1Swenshuai.xi {
3568*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3569*53ee8cc1Swenshuai.xi }
3570*53ee8cc1Swenshuai.xi else
3571*53ee8cc1Swenshuai.xi {
3572*53ee8cc1Swenshuai.xi eReturnValue = pCECResourcePrivate->ActivePowerStatus;
3573*53ee8cc1Swenshuai.xi }
3574*53ee8cc1Swenshuai.xi }
3575*53ee8cc1Swenshuai.xi
3576*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3577*53ee8cc1Swenshuai.xi
3578*53ee8cc1Swenshuai.xi return eReturnValue;
3579*53ee8cc1Swenshuai.xi }
3580*53ee8cc1Swenshuai.xi
3581*53ee8cc1Swenshuai.xi //**************************************************************************
3582*53ee8cc1Swenshuai.xi // [Function Name]:
3583*53ee8cc1Swenshuai.xi // MDrv_CEC_SetActivePhysicalAddress()
3584*53ee8cc1Swenshuai.xi // [Description]
3585*53ee8cc1Swenshuai.xi //
3586*53ee8cc1Swenshuai.xi // [Arguments]:
3587*53ee8cc1Swenshuai.xi //
3588*53ee8cc1Swenshuai.xi // [Return]:
3589*53ee8cc1Swenshuai.xi //
3590*53ee8cc1Swenshuai.xi //**************************************************************************
3591*53ee8cc1Swenshuai.xi void MDrv_CEC_SetActivePhysicalAddress(void* pInstance, MS_U8 u8Para1, MS_U8 u8Para2)
3592*53ee8cc1Swenshuai.xi {
3593*53ee8cc1Swenshuai.xi void* pModule = NULL;
3594*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3595*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3596*53ee8cc1Swenshuai.xi
3597*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3598*53ee8cc1Swenshuai.xi
3599*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3600*53ee8cc1Swenshuai.xi {
3601*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3602*53ee8cc1Swenshuai.xi }
3603*53ee8cc1Swenshuai.xi else
3604*53ee8cc1Swenshuai.xi {
3605*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3606*53ee8cc1Swenshuai.xi {
3607*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3608*53ee8cc1Swenshuai.xi }
3609*53ee8cc1Swenshuai.xi else
3610*53ee8cc1Swenshuai.xi {
3611*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActivePhysicalAddress[0] = u8Para1;
3612*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActivePhysicalAddress[1] = u8Para2;
3613*53ee8cc1Swenshuai.xi }
3614*53ee8cc1Swenshuai.xi }
3615*53ee8cc1Swenshuai.xi
3616*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3617*53ee8cc1Swenshuai.xi }
3618*53ee8cc1Swenshuai.xi
3619*53ee8cc1Swenshuai.xi //**************************************************************************
3620*53ee8cc1Swenshuai.xi // [Function Name]:
3621*53ee8cc1Swenshuai.xi // MDrv_CEC_SetActiveDeviceCECVersion()
3622*53ee8cc1Swenshuai.xi // [Description]
3623*53ee8cc1Swenshuai.xi //
3624*53ee8cc1Swenshuai.xi // [Arguments]:
3625*53ee8cc1Swenshuai.xi //
3626*53ee8cc1Swenshuai.xi // [Return]:
3627*53ee8cc1Swenshuai.xi //
3628*53ee8cc1Swenshuai.xi //**************************************************************************
3629*53ee8cc1Swenshuai.xi void MDrv_CEC_SetActiveDeviceCECVersion(void* pInstance, MS_U8 u8Ver)
3630*53ee8cc1Swenshuai.xi {
3631*53ee8cc1Swenshuai.xi void* pModule = NULL;
3632*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3633*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3634*53ee8cc1Swenshuai.xi
3635*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3636*53ee8cc1Swenshuai.xi
3637*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3638*53ee8cc1Swenshuai.xi {
3639*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3640*53ee8cc1Swenshuai.xi }
3641*53ee8cc1Swenshuai.xi else
3642*53ee8cc1Swenshuai.xi {
3643*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3644*53ee8cc1Swenshuai.xi {
3645*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3646*53ee8cc1Swenshuai.xi }
3647*53ee8cc1Swenshuai.xi else
3648*53ee8cc1Swenshuai.xi {
3649*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActiveDeviceCECVersion= u8Ver;
3650*53ee8cc1Swenshuai.xi }
3651*53ee8cc1Swenshuai.xi }
3652*53ee8cc1Swenshuai.xi
3653*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3654*53ee8cc1Swenshuai.xi }
3655*53ee8cc1Swenshuai.xi
3656*53ee8cc1Swenshuai.xi //**************************************************************************
3657*53ee8cc1Swenshuai.xi // [Function Name]:
3658*53ee8cc1Swenshuai.xi // MDrv_CEC_SetActiveDeviceType()
3659*53ee8cc1Swenshuai.xi // [Description]
3660*53ee8cc1Swenshuai.xi //
3661*53ee8cc1Swenshuai.xi // [Arguments]:
3662*53ee8cc1Swenshuai.xi //
3663*53ee8cc1Swenshuai.xi // [Return]:
3664*53ee8cc1Swenshuai.xi //
3665*53ee8cc1Swenshuai.xi //**************************************************************************
3666*53ee8cc1Swenshuai.xi void MDrv_CEC_SetActiveDeviceType(void* pInstance, MsCEC_DEVICE_TYPE Type)
3667*53ee8cc1Swenshuai.xi {
3668*53ee8cc1Swenshuai.xi void* pModule = NULL;
3669*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3670*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3671*53ee8cc1Swenshuai.xi
3672*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3673*53ee8cc1Swenshuai.xi
3674*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3675*53ee8cc1Swenshuai.xi {
3676*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3677*53ee8cc1Swenshuai.xi }
3678*53ee8cc1Swenshuai.xi else
3679*53ee8cc1Swenshuai.xi {
3680*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3681*53ee8cc1Swenshuai.xi {
3682*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3683*53ee8cc1Swenshuai.xi }
3684*53ee8cc1Swenshuai.xi else
3685*53ee8cc1Swenshuai.xi {
3686*53ee8cc1Swenshuai.xi pCECResourcePrivate->ActiveDeviceType = Type;
3687*53ee8cc1Swenshuai.xi }
3688*53ee8cc1Swenshuai.xi }
3689*53ee8cc1Swenshuai.xi
3690*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3691*53ee8cc1Swenshuai.xi }
3692*53ee8cc1Swenshuai.xi
3693*53ee8cc1Swenshuai.xi //**************************************************************************
3694*53ee8cc1Swenshuai.xi // [Function Name]:
3695*53ee8cc1Swenshuai.xi // MDrv_CEC_GetMsgCnt()
3696*53ee8cc1Swenshuai.xi // [Description]
3697*53ee8cc1Swenshuai.xi //
3698*53ee8cc1Swenshuai.xi // [Arguments]:
3699*53ee8cc1Swenshuai.xi //
3700*53ee8cc1Swenshuai.xi // [Return]:
3701*53ee8cc1Swenshuai.xi //
3702*53ee8cc1Swenshuai.xi //**************************************************************************
3703*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_GetMsgCnt(void* pInstance)
3704*53ee8cc1Swenshuai.xi {
3705*53ee8cc1Swenshuai.xi void* pModule = NULL;
3706*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3707*53ee8cc1Swenshuai.xi MS_U8 ucReturnValue = 0;
3708*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3709*53ee8cc1Swenshuai.xi
3710*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3711*53ee8cc1Swenshuai.xi
3712*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3713*53ee8cc1Swenshuai.xi {
3714*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3715*53ee8cc1Swenshuai.xi }
3716*53ee8cc1Swenshuai.xi else
3717*53ee8cc1Swenshuai.xi {
3718*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3719*53ee8cc1Swenshuai.xi {
3720*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3721*53ee8cc1Swenshuai.xi }
3722*53ee8cc1Swenshuai.xi else
3723*53ee8cc1Swenshuai.xi {
3724*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->bCecMsgCnt;
3725*53ee8cc1Swenshuai.xi }
3726*53ee8cc1Swenshuai.xi }
3727*53ee8cc1Swenshuai.xi
3728*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3729*53ee8cc1Swenshuai.xi
3730*53ee8cc1Swenshuai.xi return ucReturnValue;
3731*53ee8cc1Swenshuai.xi }
3732*53ee8cc1Swenshuai.xi
3733*53ee8cc1Swenshuai.xi //**************************************************************************
3734*53ee8cc1Swenshuai.xi // [Function Name]:
3735*53ee8cc1Swenshuai.xi // MDrv_CEC_SetMsgCnt()
3736*53ee8cc1Swenshuai.xi // [Description]
3737*53ee8cc1Swenshuai.xi //
3738*53ee8cc1Swenshuai.xi // [Arguments]:
3739*53ee8cc1Swenshuai.xi //
3740*53ee8cc1Swenshuai.xi // [Return]:
3741*53ee8cc1Swenshuai.xi //
3742*53ee8cc1Swenshuai.xi //**************************************************************************
3743*53ee8cc1Swenshuai.xi void MDrv_CEC_SetMsgCnt(void* pInstance, MS_U8 u8Cnt)
3744*53ee8cc1Swenshuai.xi {
3745*53ee8cc1Swenshuai.xi void* pModule = NULL;
3746*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3747*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3748*53ee8cc1Swenshuai.xi
3749*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3750*53ee8cc1Swenshuai.xi
3751*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3752*53ee8cc1Swenshuai.xi {
3753*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3754*53ee8cc1Swenshuai.xi }
3755*53ee8cc1Swenshuai.xi else
3756*53ee8cc1Swenshuai.xi {
3757*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3758*53ee8cc1Swenshuai.xi {
3759*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3760*53ee8cc1Swenshuai.xi }
3761*53ee8cc1Swenshuai.xi else
3762*53ee8cc1Swenshuai.xi {
3763*53ee8cc1Swenshuai.xi pCECResourcePrivate->bCecMsgCnt = u8Cnt;
3764*53ee8cc1Swenshuai.xi }
3765*53ee8cc1Swenshuai.xi }
3766*53ee8cc1Swenshuai.xi
3767*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3768*53ee8cc1Swenshuai.xi }
3769*53ee8cc1Swenshuai.xi
3770*53ee8cc1Swenshuai.xi //**************************************************************************
3771*53ee8cc1Swenshuai.xi // [Function Name]:
3772*53ee8cc1Swenshuai.xi // MDrv_CEC_GetRxData()
3773*53ee8cc1Swenshuai.xi // [Description]
3774*53ee8cc1Swenshuai.xi //
3775*53ee8cc1Swenshuai.xi // [Arguments]:
3776*53ee8cc1Swenshuai.xi //
3777*53ee8cc1Swenshuai.xi // [Return]:
3778*53ee8cc1Swenshuai.xi //
3779*53ee8cc1Swenshuai.xi //**************************************************************************
3780*53ee8cc1Swenshuai.xi MS_U8 MDrv_CEC_GetRxData(void* pInstance, MS_U8 u8Fifoidx, MS_U8 u8Idx)
3781*53ee8cc1Swenshuai.xi {
3782*53ee8cc1Swenshuai.xi void* pModule = NULL;
3783*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3784*53ee8cc1Swenshuai.xi MS_U8 ucReturnValue = 0;
3785*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3786*53ee8cc1Swenshuai.xi
3787*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3788*53ee8cc1Swenshuai.xi
3789*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3790*53ee8cc1Swenshuai.xi {
3791*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3792*53ee8cc1Swenshuai.xi }
3793*53ee8cc1Swenshuai.xi else
3794*53ee8cc1Swenshuai.xi {
3795*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3796*53ee8cc1Swenshuai.xi {
3797*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3798*53ee8cc1Swenshuai.xi }
3799*53ee8cc1Swenshuai.xi else
3800*53ee8cc1Swenshuai.xi {
3801*53ee8cc1Swenshuai.xi ucReturnValue = pCECResourcePrivate->CecRxBuf[u8Fifoidx].tRxData[u8Idx];
3802*53ee8cc1Swenshuai.xi }
3803*53ee8cc1Swenshuai.xi }
3804*53ee8cc1Swenshuai.xi
3805*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3806*53ee8cc1Swenshuai.xi
3807*53ee8cc1Swenshuai.xi return ucReturnValue;
3808*53ee8cc1Swenshuai.xi }
3809*53ee8cc1Swenshuai.xi
3810*53ee8cc1Swenshuai.xi //**************************************************************************
3811*53ee8cc1Swenshuai.xi // [Function Name]:
3812*53ee8cc1Swenshuai.xi // MDrv_CEC_SetMyPhysicalAddress()
3813*53ee8cc1Swenshuai.xi // [Description]
3814*53ee8cc1Swenshuai.xi //
3815*53ee8cc1Swenshuai.xi // [Arguments]:
3816*53ee8cc1Swenshuai.xi //
3817*53ee8cc1Swenshuai.xi // [Return]:
3818*53ee8cc1Swenshuai.xi //
3819*53ee8cc1Swenshuai.xi //**************************************************************************
3820*53ee8cc1Swenshuai.xi void MDrv_CEC_SetMyPhysicalAddress(void* pInstance, MS_U8 *pdata)
3821*53ee8cc1Swenshuai.xi {
3822*53ee8cc1Swenshuai.xi void* pModule = NULL;
3823*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3824*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3825*53ee8cc1Swenshuai.xi
3826*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3827*53ee8cc1Swenshuai.xi
3828*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3829*53ee8cc1Swenshuai.xi {
3830*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3831*53ee8cc1Swenshuai.xi }
3832*53ee8cc1Swenshuai.xi else
3833*53ee8cc1Swenshuai.xi {
3834*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3835*53ee8cc1Swenshuai.xi {
3836*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3837*53ee8cc1Swenshuai.xi }
3838*53ee8cc1Swenshuai.xi else
3839*53ee8cc1Swenshuai.xi {
3840*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress[0] = pdata[0];
3841*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress[1] = pdata[1];
3842*53ee8cc1Swenshuai.xi }
3843*53ee8cc1Swenshuai.xi }
3844*53ee8cc1Swenshuai.xi
3845*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3846*53ee8cc1Swenshuai.xi }
3847*53ee8cc1Swenshuai.xi
3848*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
3849*53ee8cc1Swenshuai.xi //**************************************************************************
3850*53ee8cc1Swenshuai.xi // [Function Name]:
3851*53ee8cc1Swenshuai.xi // MDrv_CEC_SetMyLogicalAddress2()
3852*53ee8cc1Swenshuai.xi // [Description]
3853*53ee8cc1Swenshuai.xi //
3854*53ee8cc1Swenshuai.xi // [Arguments]:
3855*53ee8cc1Swenshuai.xi //
3856*53ee8cc1Swenshuai.xi // [Return]:
3857*53ee8cc1Swenshuai.xi //
3858*53ee8cc1Swenshuai.xi //**************************************************************************
3859*53ee8cc1Swenshuai.xi void MDrv_CEC_SetMyLogicalAddress2(void* pInstance, MsCEC_DEVICELA myLA)
3860*53ee8cc1Swenshuai.xi {
3861*53ee8cc1Swenshuai.xi void* pModule = NULL;
3862*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3863*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3864*53ee8cc1Swenshuai.xi
3865*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3866*53ee8cc1Swenshuai.xi
3867*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3868*53ee8cc1Swenshuai.xi {
3869*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3870*53ee8cc1Swenshuai.xi }
3871*53ee8cc1Swenshuai.xi else
3872*53ee8cc1Swenshuai.xi {
3873*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3874*53ee8cc1Swenshuai.xi {
3875*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3876*53ee8cc1Swenshuai.xi }
3877*53ee8cc1Swenshuai.xi else
3878*53ee8cc1Swenshuai.xi {
3879*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyLogicalAddress2= myLA;
3880*53ee8cc1Swenshuai.xi
3881*53ee8cc1Swenshuai.xi mhal_CEC_SetMyAddress2((MS_U8)pCECResourcePrivate->MyLogicalAddress2);
3882*53ee8cc1Swenshuai.xi }
3883*53ee8cc1Swenshuai.xi }
3884*53ee8cc1Swenshuai.xi
3885*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3886*53ee8cc1Swenshuai.xi }
3887*53ee8cc1Swenshuai.xi
3888*53ee8cc1Swenshuai.xi //**************************************************************************
3889*53ee8cc1Swenshuai.xi // [Function Name]:
3890*53ee8cc1Swenshuai.xi // MDrv_CEC_Msg_ReportPhycalAddress2()
3891*53ee8cc1Swenshuai.xi // [Description]
3892*53ee8cc1Swenshuai.xi //
3893*53ee8cc1Swenshuai.xi // [Arguments]:
3894*53ee8cc1Swenshuai.xi //
3895*53ee8cc1Swenshuai.xi // [Return]:
3896*53ee8cc1Swenshuai.xi //
3897*53ee8cc1Swenshuai.xi //**************************************************************************
3898*53ee8cc1Swenshuai.xi CEC_ERROR_CODE MDrv_CEC_Msg_ReportPhycalAddress2(void* pInstance)
3899*53ee8cc1Swenshuai.xi {
3900*53ee8cc1Swenshuai.xi void* pModule = NULL;
3901*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3902*53ee8cc1Swenshuai.xi MS_U8 txbuf[3] = {0};
3903*53ee8cc1Swenshuai.xi MS_U8 ucInitiatorLA = 0;
3904*53ee8cc1Swenshuai.xi CEC_ERROR_CODE res = E_CEC_FEATURE_ABORT;
3905*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3906*53ee8cc1Swenshuai.xi
3907*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3908*53ee8cc1Swenshuai.xi
3909*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3910*53ee8cc1Swenshuai.xi {
3911*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3912*53ee8cc1Swenshuai.xi }
3913*53ee8cc1Swenshuai.xi else
3914*53ee8cc1Swenshuai.xi {
3915*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3916*53ee8cc1Swenshuai.xi {
3917*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3918*53ee8cc1Swenshuai.xi }
3919*53ee8cc1Swenshuai.xi else
3920*53ee8cc1Swenshuai.xi {
3921*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
3922*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->IniLogicalAddress;
3923*53ee8cc1Swenshuai.xi #else
3924*53ee8cc1Swenshuai.xi ucInitiatorLA = pCECResourcePrivate->MyLogicalAddress;
3925*53ee8cc1Swenshuai.xi #endif
3926*53ee8cc1Swenshuai.xi txbuf[0] = pCECResourcePrivate->MyPhysicalAddress2[0];
3927*53ee8cc1Swenshuai.xi txbuf[1] = pCECResourcePrivate->MyPhysicalAddress2[1];
3928*53ee8cc1Swenshuai.xi txbuf[2] = pCECResourcePrivate->MyDeviceType2;
3929*53ee8cc1Swenshuai.xi }
3930*53ee8cc1Swenshuai.xi }
3931*53ee8cc1Swenshuai.xi
3932*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3933*53ee8cc1Swenshuai.xi
3934*53ee8cc1Swenshuai.xi res = _MDrv_CEC_TxApi(ucInitiatorLA, E_LA_BROADCAST, E_MSG_SI_REPORT_PHY_ADDR, txbuf, 3);
3935*53ee8cc1Swenshuai.xi
3936*53ee8cc1Swenshuai.xi return res;
3937*53ee8cc1Swenshuai.xi }
3938*53ee8cc1Swenshuai.xi
3939*53ee8cc1Swenshuai.xi //**************************************************************************
3940*53ee8cc1Swenshuai.xi // [Function Name]:
3941*53ee8cc1Swenshuai.xi // MDrv_CEC_SetMyPhysicalAddress2()
3942*53ee8cc1Swenshuai.xi // [Description]
3943*53ee8cc1Swenshuai.xi //
3944*53ee8cc1Swenshuai.xi // [Arguments]:
3945*53ee8cc1Swenshuai.xi //
3946*53ee8cc1Swenshuai.xi // [Return]:
3947*53ee8cc1Swenshuai.xi //
3948*53ee8cc1Swenshuai.xi //**************************************************************************
3949*53ee8cc1Swenshuai.xi void MDrv_CEC_SetMyPhysicalAddress2(void* pInstance, MS_U8 *pdata)
3950*53ee8cc1Swenshuai.xi {
3951*53ee8cc1Swenshuai.xi void* pModule = NULL;
3952*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3953*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3954*53ee8cc1Swenshuai.xi
3955*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3956*53ee8cc1Swenshuai.xi
3957*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3958*53ee8cc1Swenshuai.xi {
3959*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3960*53ee8cc1Swenshuai.xi }
3961*53ee8cc1Swenshuai.xi else
3962*53ee8cc1Swenshuai.xi {
3963*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
3964*53ee8cc1Swenshuai.xi {
3965*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
3966*53ee8cc1Swenshuai.xi }
3967*53ee8cc1Swenshuai.xi else
3968*53ee8cc1Swenshuai.xi {
3969*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress2[0] = pdata[0];
3970*53ee8cc1Swenshuai.xi pCECResourcePrivate->MyPhysicalAddress2[1] = pdata[1];
3971*53ee8cc1Swenshuai.xi }
3972*53ee8cc1Swenshuai.xi }
3973*53ee8cc1Swenshuai.xi
3974*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
3975*53ee8cc1Swenshuai.xi }
3976*53ee8cc1Swenshuai.xi
3977*53ee8cc1Swenshuai.xi //**************************************************************************
3978*53ee8cc1Swenshuai.xi // [Function Name]:
3979*53ee8cc1Swenshuai.xi // MDrv_CEC_SetInitiator()
3980*53ee8cc1Swenshuai.xi // [Description]
3981*53ee8cc1Swenshuai.xi //
3982*53ee8cc1Swenshuai.xi // [Arguments]:
3983*53ee8cc1Swenshuai.xi //
3984*53ee8cc1Swenshuai.xi // [Return]:
3985*53ee8cc1Swenshuai.xi //
3986*53ee8cc1Swenshuai.xi //**************************************************************************
3987*53ee8cc1Swenshuai.xi void MDrv_CEC_SetInitiator(void* pInstance, MsCEC_DEVICELA IniLA)
3988*53ee8cc1Swenshuai.xi {
3989*53ee8cc1Swenshuai.xi void* pModule = NULL;
3990*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
3991*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
3992*53ee8cc1Swenshuai.xi
3993*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3994*53ee8cc1Swenshuai.xi
3995*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
3996*53ee8cc1Swenshuai.xi {
3997*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
3998*53ee8cc1Swenshuai.xi }
3999*53ee8cc1Swenshuai.xi else
4000*53ee8cc1Swenshuai.xi {
4001*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
4002*53ee8cc1Swenshuai.xi {
4003*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
4004*53ee8cc1Swenshuai.xi }
4005*53ee8cc1Swenshuai.xi else
4006*53ee8cc1Swenshuai.xi {
4007*53ee8cc1Swenshuai.xi pCECResourcePrivate->IniLogicalAddress = IniLA ;
4008*53ee8cc1Swenshuai.xi }
4009*53ee8cc1Swenshuai.xi }
4010*53ee8cc1Swenshuai.xi
4011*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
4012*53ee8cc1Swenshuai.xi }
4013*53ee8cc1Swenshuai.xi
4014*53ee8cc1Swenshuai.xi #endif
4015*53ee8cc1Swenshuai.xi
4016*53ee8cc1Swenshuai.xi //**************************************************************************
4017*53ee8cc1Swenshuai.xi // [Function Name]:
4018*53ee8cc1Swenshuai.xi // MDrv_CEC_AttachISR()
4019*53ee8cc1Swenshuai.xi // [Description]
4020*53ee8cc1Swenshuai.xi //
4021*53ee8cc1Swenshuai.xi // [Arguments]:
4022*53ee8cc1Swenshuai.xi //
4023*53ee8cc1Swenshuai.xi // [Return]:
4024*53ee8cc1Swenshuai.xi //
4025*53ee8cc1Swenshuai.xi //**************************************************************************
4026*53ee8cc1Swenshuai.xi void MDrv_CEC_AttachDriverISR(void* pInstance, MS_BOOL bAttachDrvFlag)
4027*53ee8cc1Swenshuai.xi {
4028*53ee8cc1Swenshuai.xi void* pModule = NULL;
4029*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
4030*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
4031*53ee8cc1Swenshuai.xi
4032*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
4033*53ee8cc1Swenshuai.xi
4034*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
4035*53ee8cc1Swenshuai.xi {
4036*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
4037*53ee8cc1Swenshuai.xi }
4038*53ee8cc1Swenshuai.xi else
4039*53ee8cc1Swenshuai.xi {
4040*53ee8cc1Swenshuai.xi if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
4041*53ee8cc1Swenshuai.xi {
4042*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
4043*53ee8cc1Swenshuai.xi }
4044*53ee8cc1Swenshuai.xi else
4045*53ee8cc1Swenshuai.xi {
4046*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->ucInitialIndex != 0xA5)
4047*53ee8cc1Swenshuai.xi {
4048*53ee8cc1Swenshuai.xi _MDrv_CEC_InitVariable(pCECResourcePrivate);
4049*53ee8cc1Swenshuai.xi
4050*53ee8cc1Swenshuai.xi pCECResourcePrivate->ucInitialIndex = 0xA5;
4051*53ee8cc1Swenshuai.xi }
4052*53ee8cc1Swenshuai.xi
4053*53ee8cc1Swenshuai.xi pCECResourcePrivate->bAttachDrvISR = bAttachDrvFlag;
4054*53ee8cc1Swenshuai.xi }
4055*53ee8cc1Swenshuai.xi }
4056*53ee8cc1Swenshuai.xi
4057*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
4058*53ee8cc1Swenshuai.xi }
4059*53ee8cc1Swenshuai.xi
4060*53ee8cc1Swenshuai.xi //**************************************************************************
4061*53ee8cc1Swenshuai.xi // [Function Name]:
4062*53ee8cc1Swenshuai.xi // MDrv_CEC_GetConfiguration()
4063*53ee8cc1Swenshuai.xi // [Description]
4064*53ee8cc1Swenshuai.xi // CEC get init config
4065*53ee8cc1Swenshuai.xi // [Arguments]:
4066*53ee8cc1Swenshuai.xi //
4067*53ee8cc1Swenshuai.xi // [Return]:
4068*53ee8cc1Swenshuai.xi //
4069*53ee8cc1Swenshuai.xi //**************************************************************************
4070*53ee8cc1Swenshuai.xi stCEC_INITIAL_CONFIG_INFO MDrv_CEC_GetConfiguration(void* pInstance)
4071*53ee8cc1Swenshuai.xi {
4072*53ee8cc1Swenshuai.xi void* pModule = NULL;
4073*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
4074*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
4075*53ee8cc1Swenshuai.xi stCEC_INITIAL_CONFIG_INFO stInitialConfigInfo = {0};
4076*53ee8cc1Swenshuai.xi
4077*53ee8cc1Swenshuai.xi stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_ERR_NOT_AVAIL;
4078*53ee8cc1Swenshuai.xi
4079*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
4080*53ee8cc1Swenshuai.xi {
4081*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
4082*53ee8cc1Swenshuai.xi }
4083*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
4084*53ee8cc1Swenshuai.xi {
4085*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
4086*53ee8cc1Swenshuai.xi }
4087*53ee8cc1Swenshuai.xi else
4088*53ee8cc1Swenshuai.xi {
4089*53ee8cc1Swenshuai.xi _MDrv_CEC_init_riu_base(pCECResourcePrivate);
4090*53ee8cc1Swenshuai.xi
4091*53ee8cc1Swenshuai.xi if(pCECResourcePrivate->bCecInitFinish)
4092*53ee8cc1Swenshuai.xi {
4093*53ee8cc1Swenshuai.xi stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_SUCCESS;
4094*53ee8cc1Swenshuai.xi stInitialConfigInfo.bAttachDrvISR = pCECResourcePrivate->bAttachDrvISR;
4095*53ee8cc1Swenshuai.xi stInitialConfigInfo.ulXTAL_CLK_Hz = pCECResourcePrivate->ulXTAL_CLK_Hz;
4096*53ee8cc1Swenshuai.xi }
4097*53ee8cc1Swenshuai.xi }
4098*53ee8cc1Swenshuai.xi
4099*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
4100*53ee8cc1Swenshuai.xi return stInitialConfigInfo;
4101*53ee8cc1Swenshuai.xi }
4102*53ee8cc1Swenshuai.xi
4103*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
4104*53ee8cc1Swenshuai.xi //**************************************************************************
4105*53ee8cc1Swenshuai.xi // [Function Name]:
4106*53ee8cc1Swenshuai.xi // mdrv_CEC_MDCMDEchoCommand()
4107*53ee8cc1Swenshuai.xi // [Description]
4108*53ee8cc1Swenshuai.xi // CEC MDCMD echo command function
4109*53ee8cc1Swenshuai.xi // [Arguments]:
4110*53ee8cc1Swenshuai.xi //
4111*53ee8cc1Swenshuai.xi // [Return]:
4112*53ee8cc1Swenshuai.xi //
4113*53ee8cc1Swenshuai.xi //**************************************************************************
4114*53ee8cc1Swenshuai.xi void mdrv_CEC_MDCMDEchoCommand(void* pInstance, MS_U64* u64ReqHdl, char* pcCmdLine)
4115*53ee8cc1Swenshuai.xi {
4116*53ee8cc1Swenshuai.xi char pch[] = "=,";
4117*53ee8cc1Swenshuai.xi char* psep;
4118*53ee8cc1Swenshuai.xi
4119*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "LINE:%d, MDBCMD_CMDLINE\n", __LINE__);
4120*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "pcCmdLine: %s\n", pcCmdLine);
4121*53ee8cc1Swenshuai.xi
4122*53ee8cc1Swenshuai.xi psep = strsep(&pcCmdLine, pch);
4123*53ee8cc1Swenshuai.xi
4124*53ee8cc1Swenshuai.xi if(strncmp("CECOn", psep, 5) == 0)
4125*53ee8cc1Swenshuai.xi {
4126*53ee8cc1Swenshuai.xi
4127*53ee8cc1Swenshuai.xi }
4128*53ee8cc1Swenshuai.xi }
4129*53ee8cc1Swenshuai.xi
4130*53ee8cc1Swenshuai.xi //**************************************************************************
4131*53ee8cc1Swenshuai.xi // [Function Name]:
4132*53ee8cc1Swenshuai.xi // mdrv_CEC_MDCMDGetInfo()
4133*53ee8cc1Swenshuai.xi // [Description]
4134*53ee8cc1Swenshuai.xi // CEC MDCMD get info function
4135*53ee8cc1Swenshuai.xi // [Arguments]:
4136*53ee8cc1Swenshuai.xi //
4137*53ee8cc1Swenshuai.xi // [Return]:
4138*53ee8cc1Swenshuai.xi //
4139*53ee8cc1Swenshuai.xi //**************************************************************************
4140*53ee8cc1Swenshuai.xi void mdrv_CEC_MDCMDGetInfo(void* pInstance, MS_U64* u64ReqHdl)
4141*53ee8cc1Swenshuai.xi {
4142*53ee8cc1Swenshuai.xi void* pModule = NULL;
4143*53ee8cc1Swenshuai.xi void* pCECResource = NULL;
4144*53ee8cc1Swenshuai.xi CEC_RESOURCE_PRIVATE *pCECResourcePrivate = NULL;
4145*53ee8cc1Swenshuai.xi
4146*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, CEC_POOL, &pCECResource) != UTOPIA_STATUS_SUCCESS)
4147*53ee8cc1Swenshuai.xi {
4148*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
4149*53ee8cc1Swenshuai.xi }
4150*53ee8cc1Swenshuai.xi else if(UtopiaResourceGetPrivate(pCECResource, (void*)&pCECResourcePrivate) != UTOPIA_STATUS_SUCCESS)
4151*53ee8cc1Swenshuai.xi {
4152*53ee8cc1Swenshuai.xi MDRV_CEC_MSG_ERROR("[%s,%5d] Get CEC resource failed\n", __FUNCTION__, __LINE__);
4153*53ee8cc1Swenshuai.xi }
4154*53ee8cc1Swenshuai.xi else
4155*53ee8cc1Swenshuai.xi {
4156*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "LINE:%d, MDBCMD_GETINFO\n", __LINE__);
4157*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl, "---------------- Mstar CEC Info -----------------\n");
4158*53ee8cc1Swenshuai.xi #if ENABLE_CEC_MULTIPLE
4159*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl,"Logical Address: %d\n",pCECResourcePrivate->IniLogicalAddress);
4160*53ee8cc1Swenshuai.xi #else
4161*53ee8cc1Swenshuai.xi MdbPrint(u64ReqHdl,"Logical Address: %d\n",pCECResourcePrivate->MyLogicalAddress);
4162*53ee8cc1Swenshuai.xi #endif
4163*53ee8cc1Swenshuai.xi }
4164*53ee8cc1Swenshuai.xi
4165*53ee8cc1Swenshuai.xi UtopiaResourceRelease(pCECResource);
4166*53ee8cc1Swenshuai.xi }
4167*53ee8cc1Swenshuai.xi
4168*53ee8cc1Swenshuai.xi #endif
4169