zl程序教程

您现在的位置是:首页 >  其他

当前栏目

msm8953 fm设置频段流程

流程 设置 FM 频段
2023-09-14 09:16:14 时间
1. vendor/qcom/opensource/fm/fmapp2/src/com/caf/fmradio/FMRadioService.java
  public class FmReceiver extends FmTransceiver{};//FmReceiver继承FmTransceiver
  public class FmTransmitter extends FmTransceiver{}; //FmTransmitter继承FmTransceiver
  import qcom.fmradio.FmReceiver;
  private FmReceiver mReceiver;
	
  public boolean tune(int frequency) {
	 mReceiver.setStation(frequency);
 }
  
2.vendor/qcom/opensource/fm/qcom/fmradio/FmTransceiver.java  
   private final String V4L2_DEVICE = "/dev/radio0";
   protected FmRxControls mControl;
   
   public boolean setStation (int frequencyKHz) {
	   mControl.setFreq(frequencyKHz);
	   ret = mControl.setStation(sFd); //sFd是拿到打开"/dev/radio0"设备节点
   } 
 
3. vendor/qcom/opensource/fm/qcom/fmradio/FmRxControls.java
 public void setFreq (int f){
    mFreq = f;
 }
 
 public int setStation(int fd) {
    int ret = FmReceiverJNI.setFreqNative(fd, mFreq);
 }
 
 4.vendor/qcom/opensource/fm/qcom/fmradio/FmReceiverJNI.java
   static native int setFreqNative(int fd, int freq);
 
 public FmReceiverJNI(FmRxEvCallbacks callback) {
     mCallback = callback;
	 initNative();
  }

5.  vendor/qcom/opensource/fm/jni/android_hardware_fm.cpp
static jint android_hardware_fmradio_FmReceiverJNI_setFreqNative(){
     err = FmIoctlsInterface :: set_freq(fd, freq);
}

6.vendor/qcom/opensource/fm/jni/FmIoctlsInterface.cpp
int  FmIoctlsInterface :: set_freq(UINT fd, ULINT freq){
   struct v4l2_frequency channel;
   channel.type = V4L2_TUNER_RADIO;
   channel.frequency = (freq * TUNE_MULT);
    ret = ioctl(fd, VIDIOC_S_FREQUENCY, &channel);
}

7.kernel/msm-3.18/drivers/media/v4l2-core/v4l2-dev.c
static void determine_valid_ioctls(struct video_device *vdev){
   SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
}
8.kernel/msm-3.18/drivers/media/radio/radio-iris.c
<1>.static const struct v4l2_ioctl_ops iris_ioctl_ops = {
   .vidioc_g_frequency           = iris_vidioc_g_frequency,
   .vidioc_s_frequency           = iris_vidioc_s_frequency,
};

<2>.static int iris_vidioc_s_frequency(struct file *file, void *priv, const struct v4l2_frequency *freq){
    retval = iris_set_freq(radio, f);
}

<3>.static int iris_set_freq(struct iris_device *radio, unsigned int freq){
  retval = hci_fm_tune_station(&freq, radio->fm_hdev);
}

<4>.static int hci_fm_tune_station(__u32 *arg, struct radio_hci_dev *hdev){
  ret = radio_hci_request(hdev, hci_fm_tune_station_req, tune_freq, RADIO_HCI_TIMEOUT);
}

9./kernel/msm-3.xxx/arch/arm/boot/dts/qcom/msm8953.dtsi 
qcom,iris-fm {
   compatible = "qcom,iris_fm";
};