source: svn/trunk/zas_dstar/devices/Tuner/Oren_Cascade2B/SN761662Tuner.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: 8.2 KB
Line 
1#include <stdio.h>
2#include "SN761662Tuner.h"
3#include "IicComm.h"
4
5
6int TunerSN761662SendChannel(unsigned int uiChannel, CHANNEL_TABLE_TYPE iChannelTable, TYPE_SN761662TUNER_REF_DIVIDER_RATIO iRefDividerRatio,TYPE_SN761662TUNER_ATC iATC, TYPE_SN761662TUNER_CP iCP,TYPE_SN761662TUNER_IFOSW iIFOSW,TYPE_SN761662TUNER_AGC_TOP_LEVEL_0_LEVEL_1 iAGCTop, TYPE_SN761662TUNER_RFAGC_SHIFT_XTALOUT_CONTROL iRFAGCShiftXtalOut)
7{
8        unsigned long ulFrequency = TunerSN761662GetFrequency(uiChannel,iChannelTable);
9        if(0 == ulFrequency)
10                return SN761662_CHANNEL_DOES_NOT_FIT_ANY_FREQUENCY;
11
12        return TunerSN761662SendFreq(ulFrequency, iRefDividerRatio, iATC, iCP, iIFOSW, iAGCTop, iRFAGCShiftXtalOut); 
13
14
15}
16
17
18int TunerSN761662SendFreq(unsigned long ulFrequency, TYPE_SN761662TUNER_REF_DIVIDER_RATIO iRefDividerRatio,TYPE_SN761662TUNER_ATC iATC, TYPE_SN761662TUNER_CP iCP,TYPE_SN761662TUNER_IFOSW iIFOSW,TYPE_SN761662TUNER_AGC_TOP_LEVEL_0_LEVEL_1 iAGCTop, TYPE_SN761662TUNER_RFAGC_SHIFT_XTALOUT_CONTROL iRFAGCShiftXtalOut)
19{
20        int iMult;
21        unsigned char ucaBytesToSend[5];
22        unsigned short usTmp;
23        int iBand;
24        ucaBytesToSend[0] = 0;
25        ucaBytesToSend[1] = 0;
26        ucaBytesToSend[2] = 0x80;
27        ucaBytesToSend[3] = 0xCC;
28        ucaBytesToSend[4] = 0xC0;
29       
30        if(iRefDividerRatio < SN761662TUNER_REF_DIVIDER_RATIO_24 || iRefDividerRatio > SN761662TUNER_REF_DIVIDER_RATIO_80)
31                return SN761662_INCORRECT_REF_DIVIDER_RATIO;
32
33        if(iIFOSW != TYPE_SN761662TUNER_IFOSW_IFOUT1_ENABLE_IFOUT2_DISABLE && iIFOSW != TYPE_SN761662TUNER_IFOSW_IFOUT1_DISABLE_IFOUT2_ENABLE)
34                return SN761662_INCORRECT_IFOSW;
35
36        if(iRFAGCShiftXtalOut < TYPE_SN761662TUNER_RFAGC_SHIFT_XTALOUT_CONTROL_IFOUT_0_OUTPUT_ENABLE || iRFAGCShiftXtalOut > TYPE_SN761662TUNER_RFAGC_SHIFT_XTALOUT_CONTROL_IFOUT_1_OUTPUT_DISABLE)
37                return SN761662_INCORRECT_RFAGC_SHIFT_XTALOUT_CONTROL;
38
39        switch(iRefDividerRatio){
40        case SN761662TUNER_REF_DIVIDER_RATIO_24:
41                iMult = 24;
42                break;
43        case SN761662TUNER_REF_DIVIDER_RATIO_28:
44                iMult = 28;
45                break;
46        case SN761662TUNER_REF_DIVIDER_RATIO_50:
47                iMult = 50;
48                break;
49        case SN761662TUNER_REF_DIVIDER_RATIO_64:
50                iMult = 64;
51                break;
52        case SN761662TUNER_REF_DIVIDER_RATIO_128:
53                iMult = 128;
54                break;
55        case SN761662TUNER_REF_DIVIDER_RATIO_80:
56                iMult = 80;
57                break;
58        }
59        usTmp = (unsigned short)((ulFrequency + 44000)* iMult / 4000);
60        if (usTmp == 0 || usTmp >= SN761662_N_MAX) { //15 bits
61        return SN761662_FREQUENCY_VALUE_OUT_OF_RANGE;
62    }
63        ucaBytesToSend[0] = usTmp >> 8;
64        ucaBytesToSend[1] = usTmp & 0xff;
65       
66        //ATC
67        if(iATC == 0)
68                ucaBytesToSend[4] &= ~0x20; 
69        else if(iATC == 1)
70                ucaBytesToSend[4] |= 0x20; 
71        else
72                return SN761662_INCORRECT_ATC;
73        //CP
74        //first set bits 6,7 to 0
75        ucaBytesToSend[3] &= ~0xC0; 
76        ucaBytesToSend[3] |= (iCP << 6);
77
78        //BS
79        ucaBytesToSend[3] &= ~0x0F; 
80       
81        if(ulFrequency > 54000 && ulFrequency <= 174000)
82                iBand = 0x01;
83        else if(ulFrequency > 174000 && ulFrequency <= 468000)
84                iBand = 0x02;
85        else if(ulFrequency > 468000 && ulFrequency <= 864000)
86                iBand = 0x08;
87        else
88                iBand = 0x03;
89
90        ucaBytesToSend[3] |= iBand;
91       
92        ucaBytesToSend[3] |= (iIFOSW << 5);
93
94        ucaBytesToSend[2] |= (iAGCTop << 3); 
95        ucaBytesToSend[2] |= iRefDividerRatio; 
96
97        ucaBytesToSend[4] |= iRFAGCShiftXtalOut;
98
99
100        //open 2nd IIC channel 
101        if( !TunerSN761662BeforeSendBytes())
102                return SN761662_BEFORE_SEND_BYTES_FAILED;
103
104        if (IicTransmit((unsigned char)SN761662_DEVICE_ADDRESS_WRITE, ucaBytesToSend, 5)) {
105                return SN761662_SEND_CONTROL_DATA_FAILED;
106        }
107
108        //close 2nd IIC channel
109        if( !TunerSN761662AfterSendBytes())
110                return SN761662_AFTER_SEND_BYTES_FAILED;
111        else
112                return SN761662_SUCCESS;
113
114        //return TRUE;
115
116}
117
118
119int TunerSN761662SendPicCarrier(unsigned long ulFrequency, TYPE_SN761662TUNER_REF_DIVIDER_RATIO iRefDividerRatio,TYPE_SN761662TUNER_ATC iATC, TYPE_SN761662TUNER_CP iCP,TYPE_SN761662TUNER_IFOSW iIFOSW,TYPE_SN761662TUNER_AGC_TOP_LEVEL_0_LEVEL_1 iAGCTop, TYPE_SN761662TUNER_RFAGC_SHIFT_XTALOUT_CONTROL iRFAGCShiftXtalOut)
120{
121        return TunerSN761662SendFreq(ulFrequency + 1750, iRefDividerRatio, iATC, iCP, iIFOSW, iAGCTop, iRFAGCShiftXtalOut); 
122}
123
124BOOLEAN TunerSN761662BeforeSendBytes()
125{
126        if(IIC_COM_SUCCESS != SendHostControl(0, 0))
127                return FALSE;
128        else
129                return TRUE;
130}
131
132BOOLEAN TunerSN761662AfterSendBytes()
133{
134        if(IIC_COM_SUCCESS != SendHostControl(0x80, 0))
135                return FALSE;
136        else
137                return TRUE;
138}
139
140
141unsigned long TunerSN761662GetFrequency(unsigned int uiChannelNumber,CHANNEL_TABLE_TYPE iChannelTable)
142{
143        unsigned long ulFrequency = 0;
144
145        if(0 ==  iChannelTable){//terrestrial
146                if ((uiChannelNumber >= 2) && (uiChannelNumber <= 6)) {
147                        switch (uiChannelNumber) {
148                                case 2:
149                                        ulFrequency = 57;
150                                        break;
151                                case 3:
152                                        ulFrequency = 63;
153                                        break;
154                                case 4:
155                                        ulFrequency = 69;
156                                        break;
157                                case 5:
158                                        ulFrequency = 79;
159                                        break;
160                                case 6:
161                                        ulFrequency = 85;
162                                        break;
163                        }
164                }
165                else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) {
166                        ulFrequency = 174 + ((uiChannelNumber - 7) * 6) + 3; 
167                }
168                else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 69)) {
169                        ulFrequency = 470 + ((uiChannelNumber - 14) * 6) + 3; 
170                }
171               
172                return ulFrequency * 1000;
173        }       
174        else if(1 ==  iChannelTable){//CATV
175                if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) {
176                        switch (uiChannelNumber) {
177                                case 1:
178                                        ulFrequency = 75;
179                                        break;
180                                case 2:
181                                        ulFrequency = 57;
182                                        break;
183                                case 3:
184                                        ulFrequency = 63;
185                                        break;
186                                case 4:
187                                        ulFrequency = 69;
188                                        break;
189                                case 5:
190                                        ulFrequency = 79;
191                                        break;
192                                case 6:
193                                        ulFrequency = 85;
194                                        break;
195                        }
196                }
197                else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) {
198                        ulFrequency = 90 + ((uiChannelNumber - 95) * 6) + 3; 
199                }
200                else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) {
201                        ulFrequency = 174 + ((uiChannelNumber - 7) * 6) + 3; 
202                }
203                else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) {
204                        ulFrequency = 120 + ((uiChannelNumber - 14) * 6) + 3; 
205                }
206                else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) {
207                        ulFrequency = 216 + ((uiChannelNumber - 23) * 6) + 3; 
208                }
209                else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) {
210                        ulFrequency = 648 + ((uiChannelNumber - 100) * 6) + 3; 
211                }
212
213                return ulFrequency * 1000;
214        }
215        else if(2 ==  iChannelTable){//IRC
216                if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) {
217                        switch (uiChannelNumber) {
218                                case 1:
219                                        ulFrequency = 75;
220                                        break;
221                                case 2:
222                                        ulFrequency = 57;
223                                        break;
224                                case 3:
225                                        ulFrequency = 63;
226                                        break;
227                                case 4:
228                                        ulFrequency = 69;
229                                        break;
230                                case 5:
231                                        ulFrequency = 81;
232                                        break;
233                                case 6:
234                                        ulFrequency = 87;
235                                        break;
236                        }
237                }
238                else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) {
239                        ulFrequency = 90 + ((uiChannelNumber - 95) * 6) + 3; 
240                }
241                else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) {
242                        ulFrequency = 174+ ((uiChannelNumber - 7) * 6) + 3; 
243                }
244                else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) {
245                        ulFrequency = 120 + ((uiChannelNumber - 14) * 6) + 3; 
246                }
247                else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) {
248                        ulFrequency = 216 + ((uiChannelNumber - 23) * 6) + 3; 
249                }
250                else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) {
251                        ulFrequency = 648 + ((uiChannelNumber - 100) * 6) + 3; 
252                }
253
254                return ulFrequency * 1000;
255        }
256        else if(3 ==  iChannelTable){//HRC
257                if ((uiChannelNumber >= 1) && (uiChannelNumber <= 6)) {
258                        switch (uiChannelNumber) {
259                                case 1:
260                                        ulFrequency = 75000;
261                                        break;
262                                case 2:
263                                        ulFrequency = 55753;
264                                        break;
265                                case 3:
266                                        ulFrequency = 61753;
267                                        break;
268                                case 4:
269                                        ulFrequency = 66753;
270                                        break;
271                                case 5:
272                                        ulFrequency = 79754;
273                                        break;
274                                case 6:
275                                        ulFrequency = 85754;
276                                        break;
277                        }
278                }
279                else if ((uiChannelNumber >= 95) && (uiChannelNumber <= 99)) {
280                        ulFrequency = (917545 + ((uiChannelNumber - 95) * 60003))/10; 
281                }
282                else if ((uiChannelNumber >= 7) && (uiChannelNumber <= 13)) {
283                        ulFrequency = (1757587 + ((uiChannelNumber - 7) * 60003))/10; 
284                }
285                else if ((uiChannelNumber >= 14) && (uiChannelNumber <= 22)) {
286                        ulFrequency = (1217560 + ((uiChannelNumber - 14) * 60003))/10; 
287                }
288                else if ((uiChannelNumber >= 23) && (uiChannelNumber <= 94)) {
289                        ulFrequency = (2177608 + ((uiChannelNumber - 23) * 60003))/10; 
290                }
291                else if ((uiChannelNumber >= 100) && (uiChannelNumber <= 135)) {
292                        ulFrequency = (6497824 + ((uiChannelNumber - 100) * 60003))/10; 
293                }
294                return ulFrequency ;
295        }
296        else
297                return 0;
298
299}
Note: See TracBrowser for help on using the repository browser.