~blackskad/gnomeradio/dev-vol-button

« back to all changes in this revision

Viewing changes to src/radio.c

  • Committer: mfcn
  • Date: 2008-09-13 15:05:32 UTC
  • Revision ID: svn-v3-trunk0:ba97a3d1-ec25-0410-b1c6-e06ad936ea6c:trunk:206
Tags: GNOMERADIO_1_8
        * configure.in:
        * src/Makefile.am:

        Version 1.8

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  This program is free software; you can redistribute it and/or modify
 
3
 *  it under the terms of the GNU General Public License as published by
 
4
 *  the Free Software Foundation; either version 2 of the License, or
 
5
 *  (at your option) any later version.
 
6
 *
 
7
 *  This program is distributed in the hope that it will be useful,
 
8
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
9
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
10
 *  GNU Library General Public License for more details.
 
11
 *
 
12
 *  You should have received a copy of the GNU General Public License
 
13
 *  along with this program; if not, write to the Free Software
 
14
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
15
 */
 
16
 
 
17
#include <stdio.h>
 
18
#include <stdlib.h>
 
19
#include <unistd.h>
 
20
#include <string.h>
 
21
#include <math.h>
 
22
#include <fcntl.h>
 
23
#include <sys/ioctl.h>
 
24
#include <assert.h>
 
25
 
 
26
#include "radio.h"
 
27
#include "v4l1.h"
 
28
#include "v4l2.h"
 
29
 
 
30
static RadioDev *dev;
 
31
 
 
32
/*
 
33
 * These functions handle the radio device
 
34
 */
 
35
 
 
36
int radio_init(char *device, DriverType driver)
 
37
{
 
38
    int rv = -1;
 
39
        if (dev) {
 
40
                radio_stop();
 
41
        }
 
42
 
 
43
        switch (driver) {
 
44
                case DRIVER_V4L2:
 
45
                        goto try_v4l2;
 
46
                case DRIVER_ANY:
 
47
                case DRIVER_V4L1:
 
48
                default:
 
49
                        goto try_v4l1;
 
50
        }
 
51
 
 
52
try_v4l1:
 
53
        dev = v4l1_radio_dev_new();
 
54
        rv = dev->init (dev, device);
 
55
        if (rv == 0) {
 
56
        fprintf(stderr, "Initializing v4l1 failed\n");
 
57
                dev->finalize (dev);
 
58
                dev = NULL;
 
59
                if (driver != DRIVER_ANY)
 
60
                        goto failure;
 
61
        } else {
 
62
                goto success;
 
63
        }
 
64
 
 
65
try_v4l2:
 
66
        dev = v4l2_radio_dev_new();
 
67
        rv = dev->init (dev, device);
 
68
        if (rv == 0) {
 
69
        fprintf(stderr, "Initializing v4l2 failed\n");
 
70
                dev->finalize (dev);
 
71
                dev = NULL;
 
72
                if (driver != DRIVER_ANY)
 
73
                        goto failure;
 
74
        } else {
 
75
                goto success;
 
76
        }
 
77
 
 
78
success:
 
79
        radio_unmute();
 
80
failure:
 
81
 
 
82
        return rv;
 
83
}
 
84
 
 
85
int radio_is_init(void)
 
86
{
 
87
        if (dev) return dev->is_init (dev);
 
88
        else return 0;
 
89
}
 
90
 
 
91
void radio_stop(void)
 
92
{
 
93
        radio_mute();
 
94
        
 
95
        if (dev) dev->finalize (dev);
 
96
}
 
97
 
 
98
void radio_set_freq(float frequency)
 
99
{
 
100
        if (dev) dev->set_freq (dev, frequency);
 
101
}
 
102
 
 
103
void radio_unmute(void)
 
104
{
 
105
        if (dev) dev->mute (dev, 0);
 
106
}
 
107
 
 
108
void radio_mute(void)
 
109
{
 
110
        if (dev) dev->mute (dev, 1);
 
111
}
 
112
 
 
113
int radio_get_stereo(void)
 
114
{
 
115
        if (dev) return dev->get_stereo (dev);
 
116
        else return -1;
 
117
}
 
118
 
 
119
int radio_get_signal(void)
 
120
{
 
121
        if (dev) return dev->get_signal (dev);
 
122
        else return -1;
 
123
}
 
124
 
 
125
int radio_check_station(float freq)
 
126
{
 
127
        static int a, b;
 
128
        static float last;
 
129
        int signal;
 
130
        
 
131
        signal = radio_get_signal();
 
132
        
 
133
        if (last == 0.0f)
 
134
                last = freq;
 
135
        
 
136
        if ((a + b + signal > 8) && (fabsf(freq - last) > 0.25f)) {
 
137
                a = b = 0;
 
138
                last = freq;
 
139
                return 1;
 
140
        }
 
141
        a = b;
 
142
        b = signal;
 
143
        return 0;
 
144
}
 
145