diff -r 7cee158cb8cd -r 26b2b12093af javauis/amms_akn/src_tuner/javasrc/com/nokia/amms/control/tuner/TunerControlImpl.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/amms_akn/src_tuner/javasrc/com/nokia/amms/control/tuner/TunerControlImpl.java Wed Oct 13 14:23:59 2010 +0300 @@ -0,0 +1,548 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This class implements + * javax.microedition.amms.control.tuner.TunerControl + * +*/ + + +package com.nokia.amms.control.tuner; + +import javax.microedition.media.MediaException; +import javax.microedition.media.Control; +import com.nokia.microedition.media.InternalPlayer; +import com.nokia.microedition.media.PlayerImpl; +import com.nokia.microedition.media.Locator; +import com.nokia.microedition.media.ManagerImpl; +import com.nokia.microedition.media.control.ControlImpl; +import com.nokia.mj.impl.rt.legacy.NativeError; + +public class TunerControlImpl + extends ControlImpl + implements javax.microedition.amms.control.tuner.TunerControl +{ + //preset name max length + private static final int MAX_PRESET_NAME_LENGTH = 100; + //max number of presets + private static final int MAX_NUMBER_OF_PRESETS = 20; + //all frequencys are in 100 Hertzs + private static final int HERTZ_MULTIPLIER = 100; + + /** + * Constructor + */ + public TunerControlImpl() + { + //JDEBUG( "AMMS TunerControlImpl Constructor" ); + } + + /** + * Gets the minimum frequency supported by this tuner + * with the given modulation. + * + * @param modulation The modulation whose supported minimum frequency + * is asked. + * @return The minimum frequency in 100 Hertzs. + * @throws IllegalArgumentException if the modulation is not supported or it is null. + */ + public int getMinFreq(String aModulation) + { + if (aModulation != MODULATION_FM) + { + throw new IllegalArgumentException("Modulation is not valid."); + } + + int minFreq = _getMinFreq(iEventSource, + iControlHandle); + + NativeError.check(minFreq); + + return minFreq / HERTZ_MULTIPLIER; + } + + /** + * Gets the maximum frequency supported by this tuner + * with the given modulation. + * + * @param modulation The modulation whose supported maximum frequency + * is asked. + * @return The maximum frequency in 100 Hertzs. + * @throws IllegalArgumentException if the modulation is not supported or it is null. + */ + public int getMaxFreq(String aModulation) + { + if (aModulation != MODULATION_FM) + { + throw new IllegalArgumentException("Modulation is not valid."); + } + + int maxFreq = _getMaxFreq(iEventSource, + iControlHandle); + + NativeError.check(maxFreq); + + return maxFreq / HERTZ_MULTIPLIER; + } + + /** + * Tunes to the given frequency or to the closest supported frequency. + * + * @param freq The frequency in 100 Hertzs that will be taken into use. + * If that frequency is not supported, the closest supported + * frequency will be taken into use. + * + * @param modulation The modulation to be used. TunerControl specifies + * predefined constants MODULATION_FM and MODULATION_AM + * but other modulations can be supported as well. Supported modulations can be queried + * by System property tuner.modulations. + * + * @throws IllegalArgumentException if freq is not inside the frequency band supported + * by the device or if the modulation is not supported or the modulation is null. + * + * @return the frequency in 100 Hertzs that was taken into use. + */ + public int setFrequency(int aFreq, String aModulation) + { + if (aModulation != MODULATION_FM) + { + throw new IllegalArgumentException("Modulation is not valid."); + } + + int freqInUse = _setFrequency(iEventSource, + iControlHandle, + aFreq * HERTZ_MULTIPLIER); + + NativeError.check(freqInUse); + + return freqInUse / HERTZ_MULTIPLIER; + } + + /** + * Gets the frequency which the tuner has been tuned to. + * + * @return The frequency to which the device has been tuned, in 100 Hertzs. + */ + public int getFrequency() + { + int freq = _getFrequency(iEventSource, iControlHandle); + + NativeError.check(freq); + + return freq / HERTZ_MULTIPLIER; + } + + /** + *

Seeks for the next broadcast signal. If the end of the Player's + * frequency band is reached before a signal was found, the scan + * continues from the other end until a signal is found or the + * starting frequency is reached.

+ * + *

After seeking, the frequency of the Player is the one that + * was returned or if nothing was found, the original frequency.

+ * + * @param startFreq the frequency in 100 Hertzs wherefrom the scan starts (inclusive) + * + * @param modulation The modulation to be used. TunerControl specifies + * predefined constants MODULATION_FM and MODULATION_AM + * but other modulations can be supported as well. Supported modulations can be queried + * by System property tuner.modulations. + * @param upwards if true, the scan proceeds towards higher frequencies, + * otherwise towards lower frequencies + * + * @return The found frequency in 100 Hertzs or, if no signal was found, 0. + * + * @throws IllegalArgumentException if startFreq is not between the supported minimum + * and maximum frequencies or if the modulation is null. + * @throws MediaException if the seek functionality is not available for the given modulation. + */ + public int seek(int aStartFreq, String aModulation, boolean aUpwards) + throws MediaException + { + if (aModulation != MODULATION_FM) + { + throw new IllegalArgumentException("Modulation is not valid."); + } + + int foundFreq = _seek(iEventSource, + iControlHandle, + aStartFreq * HERTZ_MULTIPLIER, + aUpwards); + + NativeError.check(foundFreq); + + return foundFreq / HERTZ_MULTIPLIER; + } + + /** + * Gets the current squelching (muting in frequencies without broadcast) + * setting. + * + * @return true if squelch is on or false if squelch is off. + */ + public boolean getSquelch() + { + int retValue = _getSquelch(iEventSource, iControlHandle); + + NativeError.check(retValue); + + if (retValue == NativeError.KErrNone) + { + return true; + } + + return false; + } + + /** + * Sets squelching on or off. Squelching means muting the frequencies + * that do not contain radio broadcast. + * + * @param squelch true to turn the squelch on or false to turn the squelch off. + * @throws MediaException if the given squelch setting is not supported. + */ + public void setSquelch(boolean aSquelch) throws MediaException + { + int err = _setSquelch(iEventSource, iControlHandle, aSquelch); + + NativeError.check(err); + } + + /** + * Gets the modulation in use. + * + * @return The modulation currently in use. + */ + public String getModulation() + { + //only FM modulation is supported + return MODULATION_FM; + } + + /** + * Gets the strength of the recepted signal. + * + * @return A value between 0 and 100 where 0 means the faintest and 100 the strongest possible signal strength. + * @throws MediaException if querying the signal strength is not supported. + */ + public int getSignalStrength() throws MediaException + { + int signalStrength = _getSignalStrength(iEventSource, + iControlHandle); + + if (signalStrength != NativeError.KErrNone) + { + throw new MediaException("Signal strength is not supported."); + } + + return signalStrength; + } + + /** + * Gets the stereo mode in use. + * + * @return The stereo mode in use. Stereo mode is one of MONO, + * STEREO or AUTO. + */ + public int getStereoMode() + { + int stereoMode = _getStereoMode(iEventSource, iControlHandle); + + NativeError.check(stereoMode); + + return stereoMode; + } + + /** + * Sets the stereo mode. + * + * @param mode The stereo mode to be used. Stereo mode is one of MONO, + * STEREO or AUTO. + * @throws IllegalArgumentException if the given mode is not supported. + */ + public void setStereoMode(int aStereoMode) + { + if (aStereoMode != MONO && aStereoMode != STEREO && aStereoMode != AUTO) + { + throw new IllegalArgumentException(); + } + + int err = _setStereoMode(iEventSource, iControlHandle, aStereoMode); + + if (err != NativeError.KErrNone) + { + throw new IllegalArgumentException("Stereo mode is not supported."); + } + } + + /** + * Gets the number of presets. The numbering of presets starts from one and the largest + * preset number equals the value returned from this method. + * + * @return The number of presets, or zero if the presets are not supported. + */ + public int getNumberOfPresets() + { + + return 0; + } + + /** + * Tunes the tuner by using settings specified in the preset. Changes to + * presets following a usePreset call do not tune the tuner automatically. + * + * @param preset the preset to be used. + * @throws IllegalArgumentException if preset < 1 or preset > number of presets. + */ + public void usePreset(int aPreset) + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + int err = _usePreset(iEventSource, iControlHandle, aPreset); + + NativeError.check(err); + } + + /** + * Configures the preset using current frequency and modulation + * (and stereo mode if native presets support storing it). + * + * @param preset the preset to be set. + * @throws IllegalArgumentException if preset < 1 or preset > number of preset range. + * @throws SecurityException if setting presets has been prohibited. + */ + public void setPreset(int aPreset) + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + int err = _setPreset(iEventSource, iControlHandle, aPreset); + + NativeError.check(err); + } + + /** + * Configures the preset using given settings. + * The stereo mode might not be stored if it is not supported by the presets. + * (In that case, IllegalArgumentException is not thrown.) + * + * @param preset the preset to be configured. + * @param freq the frequency of the preset in 100 Hertzs. + * @param mod the modulation of the preset. + * @param stereoMode the stereo mode of the preset. + * @throws IllegalArgumentException if preset < 1 or preset > number of presets or + * freq or modulation are not available or if the modulation is null or if stereoMode is not a supported stereo mode. + * @throws SecurityException if setting presets has been prohibited. + */ + public void setPreset(int aPreset, int aFreq, String aModulation, int aStereoMode) + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + if (aModulation != MODULATION_FM) + { + throw new IllegalArgumentException("Modulation is not valid."); + } + if (aStereoMode != MONO && aStereoMode != STEREO && aStereoMode != AUTO) + { + throw new IllegalArgumentException("Stereo mode is not supported."); + } + + int err = _setPreset(iEventSource, iControlHandle, aPreset, aFreq * HERTZ_MULTIPLIER, aStereoMode); + + NativeError.check(err); + } + + /** + * Gets the preset's frequency. + * + * @param preset the preset whose frequency is to be returned. + * @return The frequency of the preset in 100 Hertzs. + * @throws IllegalArgumentException if preset < 1 or preset > number of presets. + */ + public int getPresetFrequency(int aPreset) + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + + int presetFreq = _getPresetFrequency(iEventSource, iControlHandle, aPreset); + + NativeError.check(presetFreq); + + return presetFreq / HERTZ_MULTIPLIER; + } + + /** + * Gets the preset's modulation. + * + * @param preset the preset whose modulation is to be returned. + * @return The modulation of the preset. + * @throws IllegalArgumentException if preset < 1 or preset > number of presets. + */ + public String getPresetModulation(int aPreset) + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + return MODULATION_FM; + } + + /** + * Gets the preset's stereo mode. + * + * @param preset the preset whose stereo mode is to be returned. + * @return The stereo mode of the preset. Stereo mode is one of + * MONO, STEREO or AUTO. + * @throws IllegalArgumentException if preset < 1 or preset > number of presets. + * @throws MediaException if the presets do not support storing of the stereo mode. + */ + public int getPresetStereoMode(int aPreset) throws MediaException + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + + int presetStereoMode = _getPresetStereoMode(iEventSource, iControlHandle, aPreset); + + NativeError.check(presetStereoMode); + + return presetStereoMode; + } + + /** + * Gets the preset name. + * + * @param preset the preset whose name is to be returned. + * @return A String containing the preset name. + * @throws IllegalArgumentException if preset < 1 or preset > number of presets. + */ + public String getPresetName(int aPreset) + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + + int[] error = new int[ 1 ]; + + String presetName = _getPresetName(iEventSource, iControlHandle, aPreset, error); + + NativeError.check(error[ 0 ]); + + return presetName; + } + + /** + * Sets the preset name. + * + * @param preset the preset whose name is to be set. + * @param name the name of the preset. + * @throws IllegalArgumentException if preset < 1 or preset > number of presets or + * if the name is null. + * @throws SecurityException if setting presets has been prohibited. + */ + public void setPresetName(int aPreset, String aName) + { + if (aPreset < 0 || aPreset > MAX_NUMBER_OF_PRESETS) + { + throw new IllegalArgumentException("Preset out of preset range."); + } + if (aName.length() > MAX_PRESET_NAME_LENGTH) + { + throw new IllegalArgumentException("Preset name too long"); + } + + int err = _setPresetName(iEventSource, iControlHandle, aPreset, aName); + + NativeError.check(err); + } + + + private native int _getMinFreq(int aEventSourceHandle, + int aTunerControlHandle); + + private native int _getMaxFreq(int aEventSourceHandle, + int aTunerControlHandle); + + private native int _setFrequency(int aEventSourceHandle, + int aTunerControlHandle, + int aFreq); + + private native int _getFrequency(int aEventSourceHandle, + int aTunerControlHandle); + + + private native int _seek(int aEventSourceHandle, + int aTunerControlHandle, + int aStartFreq, + boolean aUpwards); + + private native int _getSquelch(int aEventSourceHandle, + int aTunerControlHandle); + + private native int _setSquelch(int aEventSourceHandle, + int aTunerControlHandle, + boolean aSquelch); + + private native int _getSignalStrength(int aEventSourceHandle, + int aTunerControlHandle); + + private native int _getStereoMode(int aEventSourceHandle, + int aTunerControlHandle); + + private native int _setStereoMode(int aEventSourceHandle, + int aTunerControlHandle, + int aStereoMode); + + private native int _usePreset(int aEventSourceHandle, + int aTunerControlHandle, + int aPreset); + + private native int _setPreset(int aEventSourceHandle, + int aTunerControlHandle, + int aPreset); + + private native int _setPreset(int aEventSourceHandle, + int aTunerControlHandle, + int aPreset, + int aFreq, + int aStereoMode); + + private native int _getPresetFrequency(int aEventSourceHandle, + int aTunerControlHandle, + int aPreset); + + private native int _getPresetStereoMode(int aEventSourceHandle, + int aTunerControlHandle, + int aPreset); + + private native int _setPresetName(int aEventSourceHandle, + int aTunerControlHandle, + int aPreset, + String aName); + + private native String _getPresetName(int aEventSourceHandle, + int aTunerControlHandle, + int aPreset, + int[] aError); + + +}