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";
};
相关文章
- springboot启动流程详解_网页解析的详细过程
- 永续合约系统开发详细流程丨合约跟单对冲量化系统开发原理及代码
- Flowable 快速入门教程:SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(超详细)[通俗易懂]
- 如何使用流程 中的 DataObject 并为流程设置租户
- 【第六篇】Camunda系列-流程变量
- 设备维修管理流程及系统解决方案
- Flowable 设置流程变量的四种方式
- 「新兴技术和创新」EA874 STREET 新兴技术规划流程
- 【Android 高性能音频】Oboe 开发流程 ( 包含头 Oboe 头文件 | 创建音频流 | 设置音频流 | 音频流回调类 AudioStreamCallback )
- Python基础语法-控制流程语句-while
- PKI证书生成流程详解架构师
- activiti工作流设置流程变量详解编程语言
- Oracle交付提升效率,更加高效(oracle交货流程)
- 利用Redis优化流程之设置Topic(redis设置topic)
- 详细分析Apache安装设置全流程
- win7下安装JDK基本流程