summaryrefslogtreecommitdiffstats
path: root/api/Panasonic_ENV77H11D5.c
blob: e76341c8d51d9476a7bfd7ae1ea6ca918d8011d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**
 * @(#)Panasonic_ENV77H11D5.cpp
 *
 * ==========================================================
 * Version: 2.0
 * Date:    2008.07.02
 * ==========================================================
 *
 * ==========================================================
 * History:
 *
 * Date         Author      Description
 * ----------------------------------------------------------
 *
 * 2008.07.02   Tom Lin     added tuner version
 * ==========================================================
 *
 * Copyright 2005 Afatech, Inc. All rights reserved.
 *
 */

//#include <stdio.h> //for Linux
#include "type.h"
#include "error.h"
#include "user.h"
#include "register.h"
#include "standard.h"
#include "Panasonic_ENV77H11D5_Script.h"


Dword ENV77H11D5_open (
	IN  Demodulator*	demodulator,
	IN  Byte			chip
) {
    return (Error_NO_ERROR);
}


Dword ENV77H11D5_close (
	IN  Demodulator*	demodulator,
	IN  Byte			chip
) {
    return (Error_NO_ERROR);
}


Dword ENV77H11D5_set (
	IN  Demodulator*	demodulator,
	IN  Byte			chip,
    IN  Word			bandwidth,
	IN  Dword			frequency
) {
    Dword error = Error_NO_ERROR;
    Word N;
	Byte N1;
	Byte N2;
	Byte ucC1 = 0x8E;
	Byte ucC2;
	Byte buffer[10];

    /** Round ((wFreq * 1000 + 36125) * 6 / 1000) so that "500" exists */
	N   = (Word)(((frequency + 36167) * 6 + 500) / 1000);
    N1 = (Byte)(N / 256);
    N2 = (Byte)(N % 256);

    if ((174000 <= frequency) && (frequency <= 230000)) ucC2 = 0x42;
    else if ((470000 < frequency) && (frequency <= 486000)) ucC2 = 0x64;
    else if ((486000 < frequency) && (frequency <= 526000)) ucC2 = 0x84;
    else if ((526000 < frequency) && (frequency <= 678000)) ucC2 = 0xA4;
    else if ((678000 < frequency) && (frequency <= 862000)) ucC2 = 0xC4;
    else {
        error = Error_FREQ_OUT_OF_RANGE;
        goto exit;
    }

    ucC1 = 0xC2;

    buffer[0] = N1;
    buffer[1] = N2;
    buffer[2] = ucC1;
    buffer[3] = ucC2;

    /** Write freq parameters to tuner */
    error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 4, buffer);
    if (error) goto exit;

    ucC1 = 0x86;

    buffer[0] = N1;
    buffer[1] = N2;
    buffer[2] = ucC1;
    buffer[3] = ucC2;

    /** Write freq parameters to tuner */
    error = Standard_writeTunerRegisters (demodulator, chip, 0x0000, 4, buffer);
    if (error) goto exit;

exit:
	return(error);
}


TunerDescription tuner_ENV77H11D5 = {
    ENV77H11D5_open,
    ENV77H11D5_close,
    ENV77H11D5_set,
    ENV77H11D5_scripts,
	ENV77H11D5_scriptSets,
    ENV77H11D5_ADDRESS,             /** tuner i2c address */
    0,                              /** length of tuner register address */
    36167000,                       /** tuner if */
    True,                           /** spectrum inverse */
    0x01,                           /** tuner id */
};