blob: bdd0a4372485f01b841a6dadeeb93dc79aa76099 [file] [log] [blame]
/*
* 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;
}