source: svn/trunk/zas_dstar/devices/Tuner/S5H1409/TunerU7A06.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: 4.6 KB
Line 
1/****************************************************************************
2 * Module:      TunerU7A06
3 *
4 * Description: Tuner Driver for U7A06 Main Routines
5 *
6 * Notes: 20070312/hwatk
7 *
8 ************************************************************************^^*/
9
10#include <stdio.h>
11#include "TunerU7A06.h"
12#include "IicComm.h"
13
14#include "dsthalcommon.h"
15#include "dsthalcfg.h"
16#include "S5H1409Core.h"
17
18#ifndef NIMTN_TYPE
19#error NIMTN_TYPE shall be defined!
20#endif
21
22#define U7A06_DEVICE_ADDRESS_WRITE                      (0xC2)
23#define U7A06_SLAVE_ADDRESS                                     0xC3
24
25#define DEBUG_U7A06             0
26
27#if NIMTN_TYPE==NIMTN_U7A06
28
29static BOOLEAN TunerU7A06BeforeSendBytes(void);
30static BOOLEAN TunerU7A06AfterSendBytes(void);
31extern UINT32 gdhlExtDbgLvl;
32
33extern int S5H1409_IicTransmit(unsigned char chipAddr, unsigned char *pBuffer, int len );
34unsigned int U7A06_SendControlData(unsigned char Db1,unsigned char Db2,unsigned char Cb1,unsigned char Bb,unsigned char Cb2_Speed,unsigned char Cb2_Normal,int bNtsc);
35static BOOLEAN U7A06_SetRFFreq(unsigned long ulFrequency, int isDTV, unsigned char *pucDb1, unsigned char *pucDb2, unsigned char* pucBb);
36
37
38int Tuner_U7A06_SendFreq(unsigned long ulFreqInKHz, TunerDemod Demod )
39{
40        unsigned char Db1;
41        unsigned char Db2;
42        unsigned char Cb1;
43        unsigned char Bb;
44        unsigned char Cb2_Speed;
45        unsigned char Cb2_Normal;
46
47        Db1 = Db2 = Cb1 = Bb = Cb2_Speed = Cb2_Normal = 0;
48        printf("SendFreq dMHz: %ld\n", ulFreqInKHz);
49        if(FALSE  == U7A06_SetRFFreq( ulFreqInKHz, Demod != DEMOD_NTSC, &Db1, &Db2, &Bb ))
50                return -1;
51       
52        switch( Demod ) {
53                case DEMOD_8VSB:   Cb1 = 0x83; Cb2_Speed = 0xE3; Cb2_Normal = 0xC3; break;
54                case DEMOD_64QAM:  Cb1 = 0x93; Cb2_Speed = 0xE1; Cb2_Normal = 0xC1; break;
55                case DEMOD_QAM:
56                case DEMOD_256QAM: Cb1 = 0x8B; Cb2_Speed = 0xE3; Cb2_Normal = 0xC3; break;
57                case DEMOD_NTSC:   Cb1 = 0x8B; Cb2_Speed = 0xE3; Cb2_Normal = 0xC3; break;
58                default:
59                        return -1;
60        }
61       
62        return U7A06_SendControlData(Db1,Db2,Cb1,Bb,Cb2_Speed,Cb2_Normal,Demod==DEMOD_NTSC);
63}
64
65static BOOLEAN U7A06_SetRFFreq(unsigned long ulFrequency, int isDTV, unsigned char *pucDb1, unsigned char *pucDb2, unsigned char* pucBb)
66{
67        unsigned long ucNval;
68       
69        *pucDb1 = 0;
70        *pucDb2 = 0;
71        *pucBb = 0;
72       
73        if ((ulFrequency >= U7A06_LOW_BAND_MIN) && (ulFrequency <= U7A06_LOW_BAND_MAX) ) {
74                if ( isDTV )
75                        *pucBb = 0x1;
76                else
77                        *pucBb = 0x5;
78        }
79        else if((ulFrequency >=  U7A06_MID_BAND_MIN) && (ulFrequency <= U7A06_MID_BAND_MAX)){
80                if ( isDTV )
81                        *pucBb = 0x2;
82                else
83                        *pucBb = 0x6;
84        }
85        else if((ulFrequency >= U7A06_HIGH_BAND_MIN) && (ulFrequency <= U7A06_HIGH_BAND_MAX)){
86                if ( isDTV )
87                        *pucBb = 0x8;
88                else
89                        *pucBb = 0xC;
90        }
91        else 
92                return FALSE;
93       
94        ucNval = (ulFrequency + 44000000);
95        ucNval /= 62500;
96        *pucDb1 = (ucNval>>8) & 0x7F;
97        *pucDb2 = (ucNval>>0) & 0xFF;
98       
99        return TRUE;
100}
101
102static BOOLEAN TunerU7A06BeforeSendBytes()
103{
104        if ( Sdm_1409xRepeaterEnable() )
105                return 0;
106       
107        return 1;
108}
109
110static BOOLEAN TunerU7A06AfterSendBytes()
111{
112        if ( Sdm_1409xRepeaterDisable() )
113                return 0;
114       
115        return 1;
116}
117
118extern int S5H1409_IicTransmitEx(unsigned char chipAddr, unsigned char *pBuffer, int len );
119
120unsigned int U7A06_SendControlData(unsigned char Db1,unsigned char Db2,unsigned char Cb1,unsigned char Bb,unsigned char Cb2_Speed,unsigned char Cb2_Normal,int bNtsc)
121{
122        unsigned char str[10];
123
124        //open 2nd IIC channel 
125        if (!TunerU7A06BeforeSendBytes())
126                return U7A06_BEFORE_SEND_BYTES_FAILED;
127
128        str[0] = Db1;
129        str[1] = Db2;   
130        str[2] = Cb1;
131        str[3] = Bb;
132        str[4] = Cb2_Speed;
133        str[5]= '\0';
134
135#if DEBUG_U7A06
136        printf("TunerByte1: 0x%02X-0x%02X-0x%02X-0x%02X-0x%02X\n", str[0], str[1], str[2], str[3], str[4]);
137#else
138        //printf("TunerByte1: 0x%02X-0x%02X-0x%02X-0x%02X-0x%02X\n", str[0], str[1], str[2], str[3], str[4]);
139
140        if (S5H1409_IicTransmitEx(U7A06_DEVICE_ADDRESS_WRITE, str, 5)) {
141                return U7A06_SEND_CONTROL_DATA_FAILED;
142        }
143#endif
144        if (!bNtsc) {
145                //wait
146            OS_mDelay(200); /* 200 ms */
147        }
148       
149        str[0] = Cb1;
150        str[1] = Bb;
151        str[2] = Cb2_Normal;
152        str[3]= '\0';
153#if DEBUG_U7A06
154        printf("TunerByte2: 0x%02X\n", str[0]);
155#else
156        //printf("TunerByte2: 0x%02X-0x%02X-0x%02X\n", str[0], str[1], str[2]);
157
158        if (S5H1409_IicTransmitEx(U7A06_DEVICE_ADDRESS_WRITE, str, 3)) {
159                return U7A06_SEND_CONTROL_DATA_FAILED;
160        }
161#endif
162        //close 2nd IIC channel
163        if( !TunerU7A06AfterSendBytes())
164                return U7A06_AFTER_SEND_BYTES_FAILED;
165        else
166                return U7A06_SUCCESS;
167}
168
169int Tuner_U7A06GetADC(void)
170{
171        int stat; 
172       
173        if ( TunerU7A06BeforeSendBytes() == 0 )
174                return -1;
175       
176        stat = S5H_IicReadTunerByte( U7A06_SLAVE_ADDRESS );
177        //printf("|%s| stat=0x%x\n", __FUNCTION__, stat);
178               
179        if ( TunerU7A06AfterSendBytes() == 0 )
180                return -1;
181       
182        return stat;
183}
184
185#endif//#if NIMTN_TYPE==NIMTN_DTT7611
Note: See TracBrowser for help on using the repository browser.