* libfm_jni/FmPerformanceParams.cpp:
443:16: error: unused variable 'sinr'
* libfm_jni/ConfigFmThs.cpp:
425:17: error: unused variable 'ret'
433:9: error: unused variable 'value'
566:9: error: unused variable 'index'
* libfm_jni/ConfFileParser.cpp:
328:16: error: unused variable 'num_of_keys'
536:9: error: unused variable 'grp_name'
537:16: error: unused variable 'len'
732:13: error: unused function 'key_exist'
* libfm_jni/FmRadioController.cpp:
651:9: error: unused variable 'stationList
* libfm_jni/FmPerformanceParams.cpp:
442:16: error: unused variable 'sinr'
Change-Id: I9c4839d1bc8b64c536b8a7db7c2094001f2562ba
547 lines
12 KiB
C++
547 lines
12 KiB
C++
/*
|
|
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.
|
|
*/
|
|
|
|
#define LOG_TAG "android_hardware_fm"
|
|
|
|
#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: %u 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;
|
|
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;
|
|
}
|