422 lines
9.4 KiB
C++
422 lines
9.4 KiB
C++
/*
|
|
* Copyright (c) 2014, 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 "FmPerformanceParams.h"
|
|
#include "FmIoctlsInterface.h"
|
|
|
|
#include <cstdio>
|
|
#include <linux/videodev2.h>
|
|
#include <utils/Log.h>
|
|
|
|
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 * 3 + 3)];
|
|
|
|
if(data != NULL) {
|
|
data[size++] = 0x40;
|
|
data[size++] = ((n * 3) + 1);
|
|
data[size++] = n;
|
|
while((size < (n * 3 + 2)) && (freqs != NULL)
|
|
&& (sinrs != NULL)) {
|
|
freq = (*freqs - 76000) / 50;
|
|
data[size++] = (freq & 0xff);
|
|
data[size++] = ((freq >> 8) & 0xff);
|
|
data[size++] = *sinrs;
|
|
freqs++;
|
|
sinrs++;
|
|
}
|
|
if(size == (n * 3 + 3)) {
|
|
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;
|
|
}
|