给什么平台,跳什么舞

FM Volume

FM的音量调节跟音频服务(AudioService)有区别.

FmReceiverJNI.setControlNative(fd, V4L2_CID_AUDIO_VOLUME, value);

 

在frameworks/base/core/jni/android_hardware_fm.cpp中

android_hardware_fmradio_FmReceiverJNI_setControlNative

static int gVolume = 0;
static jint android_hardware_fmradio_FmReceiverJNI_setControlNative(...)
{
    switch(id){    
        case V4L2_CID_AUDIO_VOLUME://调节音量
        {
                gVolume = value;
                err = ioctl(fd, FM_IOCTL_SET_VOLUME, &value);        
        }
        break;
        case V4L2_CID_AUDIO_MUTE://开关音量
        {
                if(value == 0){
                        err = ioctl(fd, FM_IOCTL_SET_VOLUME, &gVolume); //SET (close)
                } else {
                        int volume = -1;
                        err = ioctl(fd, FM_IOCTL_GET_VOLUME, &volume); //GET (open)
                        if(err >= 0){ // exist error
                                gVolume = volume;  //get volume
                                volume = 0;
                                err = ioctl(fd, FM_IOCTL_SET_VOLUME, &volume); // set zero
                        }
                }                    
        }            
}

 

frameworks/base/core/java/android/hardware/fmradio/FmReceiver.java

public boolean setVolume(int value)

-> FmRxControls.setVolume(sFd,value)

-> FmReceiverJNI.setControlNative(fd, V4L2_CID_AUDIO_VOLUME, value);

-> FmReceiverJNI.java public static native int setControlNative(int fd, int id, int value);

 

posted @ 2012-11-21 15:04  Jimwind  阅读(307)  评论(0)    收藏  举报
==============精通*学习*关注==============