summaryrefslogtreecommitdiffstats
path: root/libfm_jni/FmPerformanceParams.cpp
diff options
context:
space:
mode:
authorVenkateshwarlu Domakonda <vdomak@codeaurora.org>2015-03-24 10:28:37 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2015-04-09 03:27:16 -0700
commitacdd9a4aa651b66b3a69cb1ec4f2b3fd1fb4aaed (patch)
tree77c0c1248da3558ab5b26cde16761d6dd3805203 /libfm_jni/FmPerformanceParams.cpp
parentee21b948384ed2ae1f133f53f4d52b8ff245ee62 (diff)
downloadandroid_hardware_qcom_fm-acdd9a4aa651b66b3a69cb1ec4f2b3fd1fb4aaed.tar.gz
android_hardware_qcom_fm-acdd9a4aa651b66b3a69cb1ec4f2b3fd1fb4aaed.tar.bz2
android_hardware_qcom_fm-acdd9a4aa651b66b3a69cb1ec4f2b3fd1fb4aaed.zip
libfmjni: Implement hal layer
Implement HAL layer that can be plugged in with Android FM APP to get fm functionalities. Change-Id: Id16d37a320fdbacb505ba7ecc431622db17bd4d7
Diffstat (limited to 'libfm_jni/FmPerformanceParams.cpp')
-rw-r--r--libfm_jni/FmPerformanceParams.cpp545
1 files changed, 545 insertions, 0 deletions
diff --git a/libfm_jni/FmPerformanceParams.cpp b/libfm_jni/FmPerformanceParams.cpp
new file mode 100644
index 0000000..dc22432
--- /dev/null
+++ b/libfm_jni/FmPerformanceParams.cpp
@@ -0,0 +1,545 @@
+/*
+Copyright (c) 2015, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <cstdio>
+#include <utils/Log.h>
+#include "FmPerformanceParams.h"
+#include "FmIoctlsInterface.h"
+#include <linux/videodev2.h>
+
+signed char FmPerformanceParams :: SetBand
+(
+ UINT fd, unsigned char band
+)
+{
+ signed char ret = FM_FAILURE;
+
+ switch(band) {
+ case BAND_87500_108000:
+ ret = FmIoctlsInterface::set_band(fd,
+ 87500, 108000);
+ break;
+ case BAND_76000_108000:
+ ret = FmIoctlsInterface::set_band(fd,
+ 76000, 108000);
+ break;
+ case BAND_76000_90000:
+ ret = FmIoctlsInterface::set_band(fd,
+ 76000, 90000);
+ break;
+ default:
+ ALOGE("Band type: %ld is invalid\n", band);
+ ret = FM_FAILURE;
+ break;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetEmphsis
+(
+ UINT fd, unsigned char emph
+)
+{
+ signed char ret = FM_FAILURE;
+
+ switch(emph) {
+ case DE_EMP75:
+ case DE_EMP50:
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_EMPHASIS, emph);
+ break;
+ default:
+ ALOGE("invalid de-emphasis value\n");
+ ret = FM_FAILURE;
+ break;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetChannelSpacing
+(
+ UINT fd, unsigned char spacing
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_CHAN_SPACING, spacing);
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetAfRmssiTh
+(
+ UINT fd, unsigned short th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_AF_RMSSI_TH, th);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetAfRmssiSamplesCnt
+(
+ UINT fd, unsigned char cnt
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_AF_RMSSI_SAMPLES, cnt);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetGoodChannelRmssiTh
+(
+ UINT fd, signed char th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_GOOD_CH_RMSSI_TH, th);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetSrchAlgoType
+(
+ UINT fd, unsigned char algo
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_SRCHALGOTYPE, algo);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetSinrFirstStage
+(
+ UINT fd, signed char th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_SINRFIRSTSTAGE, th);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetRmssiFirstStage
+(
+ UINT fd, signed char th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_RMSSIFIRSTSTAGE, th);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetCf0Th12
+(
+ UINT fd, int th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_CF0TH12, th);
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetSinrSamplesCnt
+(
+ UINT fd, unsigned char cnt
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_SINR_SAMPLES, cnt);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetIntfLowTh
+(
+ UINT fd, unsigned char th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_ON_CHANNEL_THRESHOLD, th);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetIntfHighTh
+(
+ UINT fd, unsigned char th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_OFF_CHANNEL_THRESHOLD, th);
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetSinrFinalStage
+(
+ UINT fd, signed char th
+)
+{
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_SINR_THRESHOLD, th);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetAfRmssiTh
+(
+ UINT fd, unsigned short &th
+)
+{
+ long int af_rmssi_th;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_AF_RMSSI_TH, af_rmssi_th);
+ if(ret == FM_SUCCESS) {
+ th = af_rmssi_th;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetAfRmssiSamplesCnt
+(
+ UINT fd, unsigned char &cnt
+)
+{
+ long int af_samples_cnt;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_AF_RMSSI_SAMPLES, af_samples_cnt);
+ if(ret == FM_SUCCESS) {
+ cnt = af_samples_cnt;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetGoodChannelRmssiTh
+(
+ UINT fd, signed char &th
+)
+{
+ long int gd_chan_rmssi_th;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_GOOD_CH_RMSSI_TH, gd_chan_rmssi_th);
+ if(ret == FM_SUCCESS) {
+ th = gd_chan_rmssi_th;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetSrchAlgoType
+(
+ UINT fd, unsigned char &algo
+)
+{
+ long int srch_algo_type;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_SRCHALGOTYPE, srch_algo_type);
+ if(ret == FM_SUCCESS) {
+ algo = srch_algo_type;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetSinrFirstStage
+(
+ UINT fd, signed char &th
+)
+{
+ long int sinr_first_stage;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_SINRFIRSTSTAGE, sinr_first_stage);
+ if(ret == FM_SUCCESS) {
+ th = sinr_first_stage;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetRmssiFirstStage
+(
+ UINT fd, signed char &th
+)
+{
+ long int rmssi_first_stage;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_RMSSIFIRSTSTAGE, rmssi_first_stage);
+ if(ret == FM_SUCCESS) {
+ th = rmssi_first_stage;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetCf0Th12
+(
+ UINT fd, int &th
+)
+{
+ long int cf0th12;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_CF0TH12, cf0th12);
+ if(ret == FM_SUCCESS) {
+ th = cf0th12;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetSinrSamplesCnt
+(
+ UINT fd, unsigned char &cnt
+)
+{
+ long int sinr_samples_cnt;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_SINR_SAMPLES, sinr_samples_cnt);
+ if(ret == FM_SUCCESS) {
+ cnt = sinr_samples_cnt;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetIntfLowTh
+(
+ UINT fd, unsigned char &th
+)
+{
+ long int intf_low_th;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_ON_CHANNEL_THRESHOLD, intf_low_th);
+ if(ret == FM_SUCCESS) {
+ th = intf_low_th;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetIntfHighTh
+(
+ UINT fd, unsigned char &th
+)
+{
+ long int intf_high_th;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_OFF_CHANNEL_THRESHOLD, intf_high_th);
+ if(ret == FM_SUCCESS) {
+ th = intf_high_th;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetIntfDet
+(
+ UINT fd, unsigned char &th
+)
+{
+ long int int_det;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_INTDET, int_det);
+ if(ret == FM_SUCCESS) {
+ th = int_det;
+ }
+ return ret;
+}
+signed char FmPerformanceParams :: GetSinrFinalStage
+(
+ UINT fd, signed char &th
+)
+{
+ signed char ret = FM_FAILURE;
+ long int sinr;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_SINR_THRESHOLD, sinr);
+
+ if(ret == FM_SUCCESS) {
+ th = sinr;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetHybridSrchList
+(
+ UINT fd,
+ unsigned int *freqs,
+ signed char *sinrs,
+ unsigned int n
+)
+{
+ struct v4l2_ext_control ext_ctl;
+ struct v4l2_ext_controls v4l2_ctls;
+ unsigned int freq;
+ signed char sinr;
+ unsigned int size = 0;
+ char *data = NULL;
+ signed char ret = FM_FAILURE;
+
+ if(n <= 0) {
+ return ret;
+ }
+ data = new char[(n * HYBRID_SRCH_DATA_LEN + HYBRID_SRCH_DATA_INDEX)];
+
+ if(data != NULL) {
+ data[size++] = HYBRID_SRCH_MODE;
+ data[size++] = ((n * HYBRID_SRCH_DATA_LEN) + 1);
+ data[size++] = n;
+ while((size < (n * HYBRID_SRCH_DATA_LEN + 2)) && (freqs != NULL)
+ && (sinrs != NULL)) {
+ freq = (*freqs - STARTING_FREQ) / FREQ_MULTIPLEX;
+ data[size++] = (freq & 0xff);
+ data[size++] = ((freq >> 8) & 0xff);
+ data[size++] = *sinrs;
+ freqs++;
+ sinrs++;
+ }
+ if(size == (n * HYBRID_SRCH_DATA_LEN + HYBRID_SRCH_DATA_INDEX)) {
+ ext_ctl.id = V4L2_CID_PRV_IRIS_WRITE_DEFAULT;
+ ext_ctl.string = data;
+ ext_ctl.size = size;
+ v4l2_ctls.ctrl_class = V4L2_CTRL_CLASS_USER;
+ v4l2_ctls.count = 1;
+ v4l2_ctls.controls = &ext_ctl;
+ ret = FmIoctlsInterface::set_ext_control(fd, &v4l2_ctls);
+ if(ret == FM_SUCCESS) {
+ ALOGE("hybrid srch list sent successfully\n");
+ }else {
+ ALOGE("hybrid srch list setting failed\n");
+ }
+ }
+ }
+
+ delete []data;
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetBlendSinr
+(
+ UINT fd, signed char bsinr
+)
+{
+ signed char ret = FM_FAILURE;
+
+ if ((bsinr >= MIN_BLEND_SINRHI) &&
+ (bsinr <= MAX_BLEND_SINRHI))
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_IRIS_BLEND_SINRHI, bsinr);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetBlendSinr
+(
+ UINT fd, signed char &bsinr
+)
+{
+ long int blend_sinr_hi;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_IRIS_BLEND_SINRHI, blend_sinr_hi);
+ if(ret == FM_SUCCESS) {
+ bsinr = blend_sinr_hi;
+ }
+ return ret;
+}
+
+signed char FmPerformanceParams :: SetBlendRmssi
+(
+ UINT fd, signed char brmssi
+)
+{
+ signed char ret = FM_FAILURE;
+
+ if ((brmssi >= MIN_BLEND_RMSSIHI) &&
+ (brmssi <= MAX_BLEND_RMSSIHI))
+ ret = FmIoctlsInterface::set_control(fd,
+ V4L2_CID_PRV_IRIS_BLEND_RMSSIHI, brmssi);
+
+ return ret;
+}
+
+signed char FmPerformanceParams :: GetBlendRmssi
+(
+ UINT fd, signed char &brmssi
+)
+{
+ long int blend_rmssi_hi;
+ signed char ret = FM_FAILURE;
+
+ ret = FmIoctlsInterface::get_control(fd,
+ V4L2_CID_PRV_IRIS_BLEND_RMSSIHI, blend_rmssi_hi);
+ if(ret == FM_SUCCESS) {
+ brmssi = blend_rmssi_hi;
+ }
+ return ret;
+}