source: svn/trunk/zas_dstar/devices/Tuner/Oren_Cascade2B/XC3028.c @ 2

Last change on this file since 2 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
File size: 5.5 KB
Line 
1#include "XC3028.h"
2#include "XC3028InitData.h"
3#include "IicComm.h"
4#if NIMTN_TYPE==NIMTN_XC3028
5unsigned long TunerXC3028GetFrequencyFromChannel(unsigned int uiChannelNumber)
6{
7        unsigned long ulCenterFrequency = XC3028_CHANNEL_DOES_NOT_FIT_ANY_FREQUENCY;
8        if ((uiChannelNumber >= 2) && (uiChannelNumber <= 6)) {
9                switch (uiChannelNumber) {
10                        case 2:
11                                ulCenterFrequency = 57;
12                                break;
13                        case 3:
14                                ulCenterFrequency = 63;
15                                break;
16                        case 4:
17                                ulCenterFrequency = 69;
18                                break;
19                        case 5:
20                                ulCenterFrequency = 79;
21                                break;
22                        case 6:
23                                ulCenterFrequency = 85;
24                                break;
25                }
26        }
27        else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) {
28                ulCenterFrequency = 174 + ((uiChannelNumber - 7) * 6) + 3; 
29        }
30        else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 69)) {
31                ulCenterFrequency = 470 + ((uiChannelNumber - 14) * 6) + 3; 
32        }
33
34        return ulCenterFrequency*1000;
35}
36
37int TunerXC3028SendChannel(unsigned int uiChannelNumber,BOOLEAN bLoadFirmware, int iMode)
38{
39        unsigned long  ulCenterFrequency;
40        ulCenterFrequency = TunerXC3028GetFrequencyFromChannel(uiChannelNumber);
41        if(0 == ulCenterFrequency)
42                return XC3028_CHANNEL_DOES_NOT_FIT_ANY_FREQUENCY;
43
44        return TunerXC3028SendCenterFreq( ulCenterFrequency,bLoadFirmware,iMode);
45
46
47}
48
49int TunerXC3028SendPicCarrier(unsigned long ulFrequency,BOOLEAN bLoadFirmware, int iMode)
50{
51        return TunerXC3028SendCenterFreq( ulFrequency + 1750,bLoadFirmware,iMode);
52}
53
54int TunerXC3028SendCenterFreq(unsigned long ulFrequency,BOOLEAN bLoadFirmware, int iMode)
55{
56        unsigned long ulVal;
57        unsigned char ucaDataToSend[4];
58        int iRes;
59        //if no path then no need to load the firmware.
60        if(TRUE == bLoadFirmware){
61                if(XC3028_SUCCESS != (iRes = TunerXC3028LoadFirmware(iMode)))
62                        return iRes;
63        }
64
65        //open 2nd IIC channel 
66        if(!TunerXC3028BeforeSendBytes())       
67                return XC3028_COMMUNICATION_ERROR;
68
69        //Send configuration register
70        ucaDataToSend[0] = 0x00;
71        ucaDataToSend[1] = 0x02;
72        ucaDataToSend[2] = 0x00;
73        ucaDataToSend[3] = 0x00;
74
75
76        iRes = IicTransmit(TLSys_TunerDeviceAddress(I2CWRITE),ucaDataToSend, 4);
77        if(IIC_COM_SUCCESS != iRes){
78                return iRes;
79        }
80
81        //send the value for the conf register
82        ulVal = ((ulFrequency - 1750)*8) / 125;
83        ucaDataToSend[0] = (unsigned char)((ulVal & 0xff000000) >> 24);
84        ucaDataToSend[1] = (unsigned char)((ulVal & 0x00ff0000) >> 16);
85        ucaDataToSend[2] = (unsigned char)((ulVal & 0x0000ff00) >> 8);
86        ucaDataToSend[3] = (unsigned char)(ulVal & 0x000000ff);
87
88        iRes = IicTransmit(TLSys_TunerDeviceAddress(I2CWRITE),ucaDataToSend, 4);
89        if(IIC_COM_SUCCESS != iRes){
90                return iRes;
91        }
92
93        //close 2nd IIC channel
94        if(!TunerXC3028BeforeSendBytes())       
95                return XC3028_COMMUNICATION_ERROR;
96
97        return XC3028_SUCCESS;
98}
99
100BOOLEAN TunerXC3028BeforeSendBytes()
101{
102
103        if(IIC_COM_SUCCESS != SendHostControl(0, 0))
104                return FALSE;
105        else
106                return TRUE;
107}
108
109BOOLEAN TunerXC3028AfterSendBytes()
110{
111        if(IIC_COM_SUCCESS != SendHostControl(0x80, 0))
112                return FALSE;
113        else
114                return TRUE;
115}
116
117
118int TunerXC3028LoadFirmware(int iMode)
119{
120        int i,iStartIndex, iPacketLenthInBytes,iTotalNumberOfBytes;
121        short* psaStartPacketIndexes;
122        unsigned char *pucaData,ucSend[3];
123        unsigned int uiError;
124        unsigned short usReceiveData = 0,usSendByte = 0x8000;
125       
126       
127        //Set reset to the tuner using the cascade DSP code
128        //first check if code is loaded in to the DSP
129        SendHostControl( 0, 0);
130
131        usReceiveData = ReceiveWordOfData(&uiError);
132        if(0 != uiError){
133                return XC3028_COMMUNICATION_ERROR;
134        }
135
136        switch(usReceiveData & 0xff){
137        case 0x05:
138        case 0x06:
139        case 0x30:
140        case 0x31:
141        case 0x32:
142        case 0x23:
143        case 0x25:
144        case 0x2f:
145        case 0xff:
146                break;
147        default:
148                return XC3028_DSP_MODE_NOT_DEFINED;
149        }
150        //send to receive5 bit 15 - reset the XC3028
151        ucSend[1] = (char)(usSendByte >> 8);
152        ucSend[2] = (char)(usSendByte);
153
154
155        if(IIC_COM_SUCCESS != SendToReceive(5, ucSend, 2))
156                return XC3028_COMMUNICATION_ERROR;
157       
158        //open 2nd IIC channel 
159        if(!TunerXC3028BeforeSendBytes())       
160                return XC3028_COMMUNICATION_ERROR;
161
162        uiError = IicTransmit(TLSys_TunerDeviceAddress(I2CWRITE),XC3028Init0, XC3028_INIT_0_SIZE_IN_BYTES);
163        if(IIC_COM_SUCCESS != uiError){
164                return uiError;
165        }
166
167
168
169        for(i = 0 ; XC3028Init1StartPacketIndexes[i] != -1 ; i++ ){
170                if(XC3028Init1StartPacketIndexes[i+1] != -1)
171                        iPacketLenthInBytes = XC3028Init1StartPacketIndexes[i+1] - XC3028Init1StartPacketIndexes[i];
172                else
173                        iPacketLenthInBytes = XC3028_INIT_1_SIZE_IN_BYTES - XC3028Init1StartPacketIndexes[i];
174
175                iStartIndex = XC3028Init1StartPacketIndexes[i];
176                uiError = IicTransmit(TLSys_TunerDeviceAddress(I2CWRITE),&XC3028Init1[iStartIndex], iPacketLenthInBytes);
177                if(IIC_COM_SUCCESS != uiError){
178                        return uiError;
179                }
180
181        }
182               
183
184
185       
186       
187        if(iMode == 1){
188                pucaData = XC3028MnNtscPal;
189                psaStartPacketIndexes = XC3028MnNtscPalStartPacketIndexes;
190                iTotalNumberOfBytes = XC3028_MN_NTSC_PAL_SIZE_IN_BYTES;
191        }
192        else if(iMode == 0){
193                pucaData = XC3028Dtv6Oren1;
194                psaStartPacketIndexes = XC3028Dtv6Oren1StartPacketIndexes;
195                iTotalNumberOfBytes = XC3028_DTV_6_OREN_1_SIZE_IN_BYTES;
196        }
197        else
198                return XC3028_DSP_MODE_NOT_DEFINED;
199       
200        for(i = 0 ; psaStartPacketIndexes[i] != -1 ; i++ ){
201                if(psaStartPacketIndexes[i+1] != -1)
202                        iPacketLenthInBytes = psaStartPacketIndexes[i+1] - psaStartPacketIndexes[i];
203                else{
204                        iPacketLenthInBytes = iTotalNumberOfBytes - psaStartPacketIndexes[i];
205                }
206                iStartIndex = psaStartPacketIndexes[i];
207                uiError = IicTransmit(TLSys_TunerDeviceAddress(I2CWRITE),&pucaData[iStartIndex], iPacketLenthInBytes);
208                if(IIC_COM_SUCCESS != uiError){
209                        return uiError;
210                }
211
212        }
213
214        //close 2nd IIC channel
215        if(!TunerXC3028AfterSendBytes())       
216                return XC3028_COMMUNICATION_ERROR;
217
218        return XC3028_SUCCESS;
219}
220
221#endif//#if NIMTN_TYPE==NIMTN_XC3028
Note: See TracBrowser for help on using the repository browser.