source: svn/newcon3bcm2_21bu/dst/dhl/src/devices/dtqs22ddp101a/UserDefinedIIC.c @ 22

Last change on this file since 22 was 22, checked in by phkim, 11 years ago
  1. phkim
  2. newcon3sk 를 kctv 로 브랜치 함
  • Property svn:executable set to *
File size: 10.5 KB
Line 
1/********************************************************************
2* UserDefinedIIC.c
3* User Defined IIC Function
4* By yooheeyong 2010/02/20
5*********************************************************************/
6//#include "../stdafx.h"
7#include "DHL_OSAL.h"
8#include "DHL_DEV_Priv.h"
9
10#include "UserDefinedIIC.h"
11
12#ifdef SEMCO_IIC
13        #include "lpt.h"
14    #include "CoreComm.h"
15        #include "CyAPIUser.h"
16
17        extern Ciic m_iic;  /* IIC ÀÎÅÍÆäÀ̽º °´Ã¼ ¼±¾ð */
18        extern CCoreComm m_comm;
19        extern int EXTERN_LPT_USB;
20    extern int bDisconnect;
21        extern BOOL bUSBDriverOpen;
22
23    #define TRY_CONNECT_CNT   10 // 10¹ø±îÁö ¿¬°á ½Ãµµ
24
25    #include "CIni.h"
26    // ½Ã¸®¾ó Æ÷Æ® Á¤º¸ INI ÆÄÀÏ °ü·Ã °´Ã¼
27        CIni CI;
28
29#endif
30
31/* IIC initialization */
32void I2c_Init(void)
33{
34
35#ifdef SEMCO_IIC
36
37    int nTimeOut;
38    char msg[100]={0,};
39    int nPort,baudrate,data,stop,parity;
40
41        /* Semco IIC initialization */
42
43    if(EXTERN_LPT_USB == SEL_LPT)
44        {
45                #define LPTDELAY    4000
46                m_iic.I2cInit(LPTDELAY);
47
48                if(bUSBDriverOpen)
49                {
50                        bUSBDriverOpen = FALSE;
51                        Cypress_USB_Close();
52                }
53
54        }else if(EXTERN_LPT_USB == SEL_USB){
55
56           // INI ÆÄÀÏ¿¡¼­ Com Á¤º¸ Àоî¿È
57           CI.GetIniFile(".\\ComInfo.ini");
58           nPort = atoi(CI.lpPort);
59           baudrate = atoi(CI.lpBaudRate);
60           data  = atoi(CI.lpData);
61           parity = atoi(CI.lpParity);
62           stop  = atoi(CI.lpStop);
63
64           if(bDisconnect)
65           {
66         m_comm.Disconnect();
67           }
68
69       bDisconnect = m_comm.IsConnected(); 
70       nTimeOut = 0;
71
72           while(!bDisconnect && nTimeOut < TRY_CONNECT_CNT) // ¿¬°á »óŰ¡ ¾Æ´Ï¶ó¸é ¿¬°á
73           {
74                  m_comm.Connect(nPort, baudrate, data, stop, parity, 0);
75                 
76
77                  if((bDisconnect = m_comm.IsConnected())) 
78                  {
79                          sprintf(msg,"COM%d¿¡ ¿¬°áµÇ¾ú½À´Ï´Ù.",nPort);
80                          OutputDebugString(msg);
81                          break;
82                  }
83                  nTimeOut++;
84           }
85
86           if(nTimeOut >= 10)
87           {
88                   sprintf(msg,"COM%d¿¡ ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù.",nPort);
89                   OutputDebugString(msg);
90           }
91
92           if(bUSBDriverOpen)
93           {
94                        bUSBDriverOpen = FALSE;
95                        Cypress_USB_Close();
96           }
97
98        }else{
99
100                if(bUSBDriverOpen == FALSE)
101                {
102                        bUSBDriverOpen = TRUE;
103                        Cypress_USB_Open();
104                }
105
106        }
107
108#endif
109
110}
111
112/* IIC Deinitialization */
113void I2c_DeInit(void)
114{
115#ifdef SEMCO_IIC
116    if(EXTERN_LPT_USB == SEL_CY_USB)
117        {
118                if(bUSBDriverOpen)
119                {
120                        bUSBDriverOpen = FALSE;
121                        Cypress_USB_Close();
122                }
123        }
124#endif
125}
126
127/* MxL601 IIC Write */
128int MxL601_I2cWrite(unsigned char I2cSlaveAddr, unsigned char RegAddr, unsigned char RegData)
129{
130        int status = 0;//usb purpose
131
132#ifdef SEMCO_IIC
133        /* Semco IIC function */
134         if(EXTERN_LPT_USB == SEL_LPT)
135         {
136                m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,(unsigned int)RegAddr,&RegData,1);
137                status = I2C_OK;
138         }else if(EXTERN_LPT_USB == SEL_USB){
139
140         }else{
141                //  Sleep(1);//for cypress
142            status =(I2C_RESULT)Cypress_USB_WriteI2C(I2cSlaveAddr>>1, 1, &RegAddr, 1, &RegData);
143         }
144
145#else
146
147
148#endif
149
150        return status;
151}
152
153/* MxL601 IIC Read */
154int MxL601_I2cRead(unsigned char I2cSlaveAddr, unsigned char RegAddr, unsigned char *DataPtr)
155{
156        unsigned char SendDatas[200]={0,};
157        int status = 0;//usb purpose
158        int addr=0;
159
160#ifdef SEMCO_IIC
161    /* Semco IIC function */
162         if(EXTERN_LPT_USB == SEL_LPT)
163         {
164                addr = 0xFB;
165                addr <<= 8;
166                addr |= RegAddr;
167                m_iic.Semco_I2c_ReadBytes(I2cSlaveAddr,2,(unsigned int)addr,DataPtr,1);
168                status = I2C_OK;
169         }else if(EXTERN_LPT_USB == SEL_USB){
170
171         }else{
172                // Sleep(1);//for cypress
173                SendDatas[0] = 0xFB;
174        SendDatas[1] = RegAddr;
175                status = (I2C_RESULT)Cypress_USB_ReadI2C(I2cSlaveAddr>>1, 2,SendDatas, 1, DataPtr);
176         }
177
178#else
179
180
181#endif
182
183
184
185        return status;
186}
187
188/* MxL201 IIC Write */
189/*
190int MxL201_I2cWrite(unsigned char I2cSlaveAddr, unsigned char RegAddr, unsigned char RegData, unsigned int count)
191{
192        int status = 0;//usb purpose
193
194#ifdef SEMCO_IIC
195        // Semco IIC function
196         if(EXTERN_LPT_USB == SEL_LPT)
197         {
198                 if(count<=1)
199                         m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,(unsigned int)RegAddr,&RegData,0);//AIC ÀÇ °æ¿ì.
200                 else
201                         m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,(unsigned int)RegAddr,&RegData,1);
202                status = I2C_OK;
203         }else if(EXTERN_LPT_USB == SEL_USB){
204
205         }else{
206                //  Sleep(1);//for cypress
207            status =(I2C_RESULT)Cypress_USB_WriteI2C(I2cSlaveAddr>>1, 1, &RegAddr, 1, &RegData);
208         }
209
210#else
211
212
213#endif
214
215        return status;
216}
217*/
218
219int MxL201_I2cWrite(unsigned char I2cSlaveAddr, unsigned char *RegData, unsigned int count)
220{
221        int status = 0;//usb purpose
222        unsigned char TempAddr,TempData;//Temp Register Addr/Data
223        int len = 0;
224
225#ifdef SEMCO_IIC
226        // Semco IIC function //
227         if(EXTERN_LPT_USB == SEL_LPT)
228         {
229                 if(count <= 1)//AIC ÀÇ °æ¿ì.
230                 {
231                         //S, DevID+W, ACK, AIC(OxFF), ACK, P)
232                         TempAddr = RegData[0];
233                         TempData = 0x00;
234                         m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,TempAddr,&TempData,0);
235                 }
236                 else//(count > 1)
237                 {
238                         for(len=0;len<count;len++)
239                         {
240                                 TempAddr = RegData[len];
241                                 TempData = RegData[len+1];
242                                 len++;
243                                 m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,TempAddr,&TempData,1);
244                         }
245                         //m_iic.Semco_I2c_WriteBytes (I2cSlaveAddr,1,TempAddr,&TempData,1);
246                 }
247                 status = I2C_OK;
248         }else if(EXTERN_LPT_USB == SEL_USB){
249
250         }else{
251                //  Sleep(1);//for cypress
252                 if(count <= 1){
253                         TempAddr = RegData[0];
254                         TempData = 0x00;
255                         status = (I2C_RESULT)Cypress_USB_WriteI2C(I2cSlaveAddr>>1, 1, &TempAddr, 0, &TempData);
256                 }
257                 else{
258                         for(len=0;len<count;len++)
259                         {
260                                 TempAddr = RegData[len];
261                                 TempData = RegData[len+1];
262                                 len++;
263                                 status =(I2C_RESULT)Cypress_USB_WriteI2C(I2cSlaveAddr>>1, 1, &TempAddr, 1, &TempData);
264                         }
265                 }
266         }
267
268#else
269        DHL_RESULT dhr = DHL_OK;
270       
271        if (count <= 1)
272        {
273                TempAddr = RegData[0];
274                TempData = 0x00;
275                dhr = dhl_i2c_write2(0, I2cSlaveAddr, TempAddr, &TempData, 1);
276                if (dhr != DHL_OK)
277                {
278                        DHL_OS_Printf("|%s| fail to write tuner(chip_addr:0x%x).\n",
279                                      __FUNCTION__, I2cSlaveAddr);
280                }
281        }
282        else
283        {
284                DHL_OS_Printf("|%s| dump = ", __FUNCTION__);
285                for (len = 0; len < count; len++)
286                {
287                        DHL_OS_Printf("%2x ", RegData[len]);
288                }
289                DHL_OS_Printf("\n");
290               
291                for (len = 0; len < count; len += 2)
292                {
293                        TempAddr = RegData[len];
294                        TempData = RegData[len + 1];
295                        DHL_OS_Printf("|%s| addr = %x, data = %x\n", __FUNCTION__, TempAddr, TempData);
296                        dhr = dhl_i2c_write2(0, I2cSlaveAddr, TempAddr, &TempData, 1);
297                        if (dhr != DHL_OK)
298                        {
299                                DHL_OS_Printf("|%s| fail to write tuner(chip_addr:0x%x).\n",
300                                              __FUNCTION__, I2cSlaveAddr);
301                        }
302                }
303        }
304#endif
305
306        return status;
307}
308
309
310/* MxL201 IIC Read */
311int MxL201_I2cRead(unsigned char I2cSlaveAddr, unsigned char RegAddr, unsigned char *DataPtr)
312{
313        unsigned char SendDatas[200]={0,};
314        int status = 0;//usb purpose
315        int addr=0;
316
317#ifdef SEMCO_IIC
318    /* Semco IIC function */
319         if(EXTERN_LPT_USB == SEL_LPT)
320         {
321                addr = 0xFB;
322                addr <<= 8;
323                addr |= RegAddr;
324                m_iic.Semco_I2c_ReadBytes(I2cSlaveAddr,2,(unsigned int)addr,DataPtr,1);
325                status = I2C_OK;
326         }else if(EXTERN_LPT_USB == SEL_USB){
327
328         }else{
329                // Sleep(1);//for cypress
330                SendDatas[0] = 0xFB;
331        SendDatas[1] = RegAddr;
332                status = (I2C_RESULT)Cypress_USB_ReadI2C(I2cSlaveAddr>>1, 2,SendDatas, 1, DataPtr);
333         }
334
335#else
336        DHL_RESULT dhr = DHL_OK;
337        UINT16 SubAddr;
338       
339        SubAddr = 0xfb00 | RegAddr;
340        dhr = dhl_i2c_read3(0, I2cSlaveAddr, SubAddr, DataPtr, 1);
341        if (dhr != DHL_OK)
342        {
343                DHL_OS_Printf("|%s| fail to read tuner(chip_addr:0x%x).\n",
344                              __FUNCTION__, I2cSlaveAddr);
345        }
346#endif
347
348        return status;
349}
350
351
352/* TDA8296 IIC Write */
353unsigned long TDA8296_I2cWrite(int tUnit, unsigned long AddrSize, unsigned char *pAddr, unsigned long WriteLen, unsigned char *pData)
354{
355
356#ifdef SEMCO_IIC
357    if(EXTERN_LPT_USB == SEL_LPT)
358        {
359                m_iic.TDA8296_Semco_Write(TDA8296_ADDRESS, pAddr, pData, WriteLen);
360            //m_iic.Semco_I2c_WriteBytes (TDA8296_ADDRESS,1,(unsigned int)*pAddr,pData,WriteLen);
361        }else if(EXTERN_LPT_USB == SEL_USB){
362            m_comm.ComIICWrite(TDA8296_ADDRESS,1,pAddr,WriteLen,pData);
363        }else{
364                Cypress_USB_WriteI2C (TDA8296_ADDRESS>>1, AddrSize, pAddr,WriteLen,pData);
365        }
366#endif 
367
368#ifdef DUMP
369        {
370                char msg1[100]={0,};
371                sprintf(msg1,"Chip : 0x%x, Addr 0x%x, %d length 0x%x\n",(int)(TDA8296_ADDRESS>>1),*pAddr,WriteLen,*pData);
372                OutputDebugString(msg1);
373        }
374#endif
375
376        return 0;
377}
378
379/* TDA8296 IIC Read */
380unsigned long TDA8296_I2cRead(int tUnit, unsigned long AddrSize, unsigned char *pAddr,  unsigned long ReadLen, unsigned char *pData)
381{
382
383#ifdef SEMCO_IIC
384
385    if(EXTERN_LPT_USB == SEL_LPT)
386        {
387                m_iic.TDA8296_Semco_Read(TDA8296_ADDRESS, pAddr, pData, ReadLen);
388                //m_iic.Semco_I2c_ReadBytes(TDA8296_ADDRESS,1,(unsigned int)*pAddr,pData,ReadLen);
389        }else if(EXTERN_LPT_USB == SEL_USB){
390            m_comm.ComIICRead(TDA8296_ADDRESS,1,pAddr,ReadLen,pData);
391        }else{
392                Cypress_USB_ReadI2C(TDA8296_ADDRESS>>1, AddrSize, pAddr, ReadLen, pData);
393        }
394#endif 
395        return 0;
396}
397
398/* TDA8296 Wait time*/
399unsigned long TDA8296_Wait(int tUnit, unsigned long wTime)
400{
401    SemcoSleep((unsigned int)wTime);
402        return 0;
403}
404
405
406/* S5H1411 IIC Write */
407unsigned short SH1411_I2cWriteOneRegister(unsigned char ChipAddr, unsigned char RegAddr, unsigned short Data)
408{
409        unsigned char data[2];
410
411#ifdef SEMCO_IIC
412    if(EXTERN_LPT_USB == SEL_LPT)
413        {
414        /* Semco IIC function */
415                m_iic.I2cWriteOneRegister_s5h1411(ChipAddr,RegAddr,Data);
416        }else if(EXTERN_LPT_USB == SEL_USB){
417                data[0] = (unsigned char)(Data>>8);
418                data[1] = (unsigned char)(Data);
419                //Cypress_USB_WriteI2C (ChipAddr>>1, 1, &RegAddr, 2,data);
420        m_comm.ComIICWrite(ChipAddr,1,&RegAddr,2,data);
421        }else{
422                data[0] = (unsigned char)(Data>>8);
423                data[1] = (unsigned char)(Data);
424                Cypress_USB_WriteI2C (ChipAddr>>1, 1, &RegAddr, 2,data);
425        }
426#endif
427
428        return 1;
429}
430
431/* S5H1411 IIC Read */
432unsigned short SH1411_I2cReadOneRegister(unsigned char ChipAddr, unsigned char RegAddr)
433{
434        unsigned short ReadData=0x00;
435        unsigned char  Data[2];
436
437#ifdef SEMCO_IIC
438    if(EXTERN_LPT_USB == SEL_LPT)
439        {
440                /* Semco IIC function */
441                ReadData = m_iic.I2cReadOneRegister_s5h1411(ChipAddr,RegAddr);
442        }else if(EXTERN_LPT_USB == SEL_USB){
443                //Cypress_USB_ReadI2C(ChipAddr>>1, 1, &RegAddr, 2,Data);
444                m_comm.ComIICRead(ChipAddr,1,&RegAddr,2,Data);
445                ReadData = (Data[0]<<8 | Data[1]);
446        }else{
447                Cypress_USB_ReadI2C(ChipAddr>>1, 1, &RegAddr, 2,Data);
448                ReadData = (Data[0]<<8 | Data[1]);
449        }
450
451#endif
452
453        return ReadData;
454}
455
456
457
458
459/* User Defined Delay */
460void SemcoSleep(unsigned int nSleepTims_ms)
461{
462#ifdef SEMCO_IIC
463        Sleep(nSleepTims_ms);
464#else
465        DHL_OS_Delay(nSleepTims_ms);
466#endif
467}
Note: See TracBrowser for help on using the repository browser.