AndroidFM模块学习之四源码分析(十)
来源:互联网 发布:安卓上的windows模拟器 编辑:程序博客网 时间:2024/06/07 03:48
接上一篇,今天我们来看看android\vendor\qcom\opensource\fm\qcom\fmradio\FmRxControls.java
/ *
*打开FM Rx / Tx。
* Rx = 1和Tx = 2
* /
public void fmOn(int fd, int device) { int re; FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_STATE, device ); setAudioPath(fd, false); re = FmReceiverJNI.SetCalibrationNative(fd); if (re != 0) Log.d(TAG,"Calibration failed"); }
/ *
*关掉FM Rx / Tx
* /
public void fmOff(int fd){ FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_STATE, 0 ); }
/ *
*设置静音控制
* /
public void muteControl(int fd, boolean on) { if (on) { int err = FmReceiverJNI.setControlNative(fd, V4L2_CID_AUDIO_MUTE, 3 ); } else { int err = FmReceiverJNI.setControlNative(fd, V4L2_CID_AUDIO_MUTE, 0 ); } }
/ *
*获得干扰通道
* /
public int IovercControl(int fd) { int ioverc = FmReceiverJNI.getControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_IOVERC); Log.d(TAG, "IOVERC value is : "+ioverc); return ioverc; }
/ *
*获得IntDet
* /
public int IntDet(int fd) { int intdet = FmReceiverJNI.getControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_INTDET); Log.d(TAG, "IOVERC value is : "+intdet); return intdet; }
/ *
*获得MPX_DCC
* /
public int Mpx_Dcc(int fd) { int mpx_dcc = FmReceiverJNI.getControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_MPX_DCC); Log.d(TAG, "MPX_DCC value is : " + mpx_dcc); return mpx_dcc; }
/ *
*设置Hi-Low注入
* /
public int setHiLoInj(int fd, int inj) { int re = FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_HLSI, inj); return re; }
/ *
*set打开通道阈值
* /
public int setOnChannelThreshold(int fd, int sBuff) { int re = FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_ON_CHANNEL_THRESHOLD, sBuff); if ( re < 0) Log.e(TAG, "Failed to set On channel threshold data"); return re; }
/ *
*set关闭通道阈值
* /
public int setOffChannelThreshold(int fd, int sBuff) { int re = FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_OFF_CHANNEL_THRESHOLD, sBuff); if ( re < 0) Log.e(TAG, "Failed to set Off channel Threshold data"); return re; }
/ *
*设置音频路径模拟/数字
* /
public int setAudioPath(int fd, boolean value) { int mode; if (value) mode = FM_ANALOG_PATH; else mode = FM_DIGITAL_PATH; int re = FmReceiverJNI.setControlNative(fd, V4L2_CID_PRIVATE_TAVARUA_SET_AUDIO_PATH, mode); return re; }
/ *
*优化调频核心指定的频率。
* /
public int setStation(int fd) { Log.d(TAG, "** Tune Using: "+fd); int ret = FmReceiverJNI.setFreqNative(fd, mFreq); Log.d(TAG, "** Returned: "+ret); return ret; }
/ *
*获取FM频率
* /
public int getTunedFrequency(int fd) {
int frequency = FmReceiverJNI.getFreqNative(fd);
Log.d(TAG, "getTunedFrequency: "+frequency);
return frequency;
}
/ *
*获得SINR的价值
* /
public int getSINR(int fd) { return FmReceiverJNI.getControlNative(fd, V4L2_CID_PRIVATE_SINR); }
/ *
*开始自动搜索预设列表
* /
public int searchStationList (int fd, int mode, int preset_num, int dir, int pty ) { int re; /* set search mode. */ re = FmReceiverJNI.setControlNative (fd, V4L2_CID_PRIVATE_TAVARUA_SRCHMODE, mode); if (re != 0) { return re; } /* set number of stations to be returned in the list */re = FmReceiverJNI.setControlNative (fd, V4L2_CID_PRIVATE_TAVARUA_SRCH_CNT, preset_num); if (re != 0) { return re; } // RDS search list? if (pty > 0 ){ re = FmReceiverJNI.setControlNative (fd, V4L2_CID_PRIVATE_TAVARUA_SRCH_PTY, pty); } if (re != 0) { return re; } /* This triigers the search and once completed the FM core generates * searchListComplete event */ re = FmReceiverJNI.startSearchNative (fd, dir ); if (re != 0) { return re; } else { return 0; } }
/ *从缓冲区读取搜索列表* /
public int[] stationList (int fd) { int freq = 0; int i=0, j = 0; int station_num = 0; float real_freq = 0; int [] stationList; byte [] sList = new byte[100]; int tmpFreqByte1=0; int tmpFreqByte2=0; float lowBand, highBand; lowBand = (float) (FmReceiverJNI.getLowerBandNative(fd) / 1000.00); highBand = (float) (FmReceiverJNI.getUpperBandNative(fd) / 1000.00); Log.d(TAG, "lowBand: " + lowBand); Log.d(TAG, "highBand: " + highBand); FmReceiverJNI.getBufferNative(fd, sList, 0); if ((int)sList[0] >0) { station_num = (int)sList[0]; } stationList = new int[station_num+1];Log.d(TAG, "station_num: " + station_num); for (i=0;i<station_num;i++) { freq = 0; Log.d(TAG, " Byte1 = " + sList[i*2+1]); Log.d(TAG, " Byte2 = " + sList[i*2+2]); tmpFreqByte1 = sList[i*2+1] & 0xFF; tmpFreqByte2 = sList[i*2+2] & 0xFF; Log.d(TAG, " tmpFreqByte1 = " + tmpFreqByte1); Log.d(TAG, " tmpFreqByte2 = " + tmpFreqByte2); freq = (tmpFreqByte1 & 0x03) << 8; freq |= tmpFreqByte2; Log.d(TAG, " freq: " + freq);real_freq = (float)(freq * 50) + (lowBand * FREQ_MUL);//tuner.rangelow * FREQ_MUL; Log.d(TAG, " real_freq: " + real_freq); if ( (real_freq < (lowBand * FREQ_MUL)) || (real_freq > (highBand * FREQ_MUL)) ) { Log.e(TAG, "Frequency out of band limits"); } else { stationList[j] = (int)(real_freq); Log.d(TAG, " stationList: " + stationList[j]); j++; } } try { // mark end of list stationList[station_num] = 0; } catch (ArrayIndexOutOfBoundsException e) { Log.d(TAG, "ArrayIndexOutOfBoundsException !!"); } return stationList; }
0 0
- AndroidFM模块学习之四源码分析(十)
- AndroidFM模块学习之四源码分析(九)
- AndroidFm模块学习之四源码解析(十一)
- AndroidFM模块学习之录音功能
- Android FM模块学习之四源码分析(五)
- Android FM模块学习之四源码分析(七)
- Android FM模块学习之四源码分析(八)
- AndroidFM模块学习之五关闭FM流程
- Android FM模块学习之四源码解析(四)
- Android FM模块学习之四源码解析(一)
- Android FM模块学习之四源码解析(二)
- Android FM模块学习之四源码解析(三)
- Android FM模块学习之源码分析(六)
- Elasticsearch2.4学习(四)------源码分析之启动过程
- Elasticsearch2.4学习(四)------源码分析之启动过程
- spring源码学习之四 BeanDefinitionParserDelegate分析
- spark源码学习(十)--- blockManager分析
- python 学习(二十)之模块
- Spring mvc中@Requestmapping再探
- LightOJ - 1040 Donation
- contextual action mode
- NSObject 类的反射,方法反射(十五)
- MongoDB简介
- AndroidFM模块学习之四源码分析(十)
- linux 挂载硬盘
- JS显示网页最后更新时间
- jq.proxy
- Uml of linux
- An internal error occurred during: "Launching web on MyEclipse Tomcat"
- 我们要友好的告诉用户,程序要崩溃了
- 收集51本关于Python编程的免费电子图书
- 在Ubuntu Server 12.04.1 安装部署CloudStack 4.0企业私有云平台