1a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang/*
2a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * Copyright (C) 2014 The Android Open Source Project
3a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang *
4a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * Licensed under the Apache License, Version 2.0 (the "License");
5a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * you may not use this file except in compliance with the License.
6a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * You may obtain a copy of the License at
7a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang *
8a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang *      http://www.apache.org/licenses/LICENSE-2.0
9a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang *
10a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * Unless required by applicable law or agreed to in writing, software
11a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * distributed under the License is distributed on an "AS IS" BASIS,
12a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * See the License for the specific language governing permissions and
14a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * limitations under the License.
15a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang */
16a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
17a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huangpackage com.android.fmradio;
18a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
19a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang/**
20a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang * This class define FM native interface, will description FM native interface
21a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang */
22a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huangpublic class FmNative {
23a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static {
24a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang        System.loadLibrary("fmjni");
25a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    }
26a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
27a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
28a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Open FM device, call before power up
29a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
30a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (true,success; false, failed)
31a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
32a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native boolean openDev();
33a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
34a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
35a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Close FM device, call after power down
36a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
37a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (true, success; false, failed)
38a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
39a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native boolean closeDev();
40a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
41a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
42a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * power up FM with frequency use long antenna
43a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
44a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param frequency frequency(50KHZ, 87.55; 100KHZ, 87.5)
45a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
46a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (true, success; false, failed)
47a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
48a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native boolean powerUp(float frequency);
49a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
50a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
51a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Power down FM
52a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
53a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param type (0, FMRadio; 1, FMTransimitter)
54a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
55a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (true, success; false, failed)
56a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
57a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native boolean powerDown(int type);
58a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
59a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
60a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * tune to frequency
61a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
62a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param frequency frequency(50KHZ, 87.55; 100KHZ, 87.5)
63a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
64a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (true, success; false, failed)
65a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
66a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native boolean tune(float frequency);
67a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
68a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
69a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * seek with frequency in direction
70a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
71a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param frequency frequency(50KHZ, 87.55; 100KHZ, 87.5)
72a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param isUp (true, next station; false previous station)
73a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
74a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return frequency(float)
75a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
76a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native float seek(float frequency, boolean isUp);
77a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
78a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
79a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Auto scan(from 87.50-108.00)
80a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
81a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return The scan station array(short)
82a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
83a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native short[] autoScan();
84a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
85a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
86a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Stop scan, also can stop seek, other native when scan should call stop
87a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * scan first, else will execute wait auto scan finish
88a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
89a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (true, can stop scan process; false, can't stop scan process)
90a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
91a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native boolean stopScan();
92a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
93a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
94a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Open or close rds fuction
95a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
96a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param rdson The rdson (true, open; false, close)
97a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
98a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return rdsset
99a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
100a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native int setRds(boolean rdson);
101a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
102a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
103a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Read rds events
104a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
105a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return rds event type
106a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
107a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native short readRds();
108a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
109a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
110a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Get program service(program name)
111a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
112a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return The program name
113a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
114a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native byte[] getPs();
115a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
116a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
117a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Get radio text, RDS standard does not support Chinese character
118a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
119a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return The LRT (Last Radio Text) bytes
120a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
121a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native byte[] getLrText();
122a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
123a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
124a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Active alternative frequencies
125a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
126a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return The frequency(float)
127a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
128a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native short activeAf();
129a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
130a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
131a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Mute or unmute FM voice
132a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
133a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param mute (true, mute; false, unmute)
134a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
135a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (true, success; false, failed)
136a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
137a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native int setMute(boolean mute);
138a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
139a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
140a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Inquiry if RDS is support in driver
141a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
142a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (1, support; 0, NOT support; -1, error)
143a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
144a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native int isRdsSupport();
145a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang
146a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    /**
147a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * Switch antenna
148a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
149a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @param antenna antenna (0, long antenna, 1 short antenna)
150a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     *
151a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     * @return (0, success; 1 failed; 2 not support)
152a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang     */
153a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang    static native int switchAntenna(int antenna);
154a8b6afca0e187c008ba8fdeb670d5f2c13116bedBenson Huang}
155