欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 在公司的一些笔记

在公司的一些笔记

2024/10/25 10:33:22 来源:https://blog.csdn.net/qq_43448818/article/details/139804095  浏览:    关键词:在公司的一些笔记

学习笔记

6.19

  1. 记住挂载在windows上的账户是DAHUATECH\401593,不是401593
  2. Windows与linux不能同时挂载在虚拟盘上

6.21 相机测试程序的流程

dorker 工具管理镜像,使用exit命令可以退出重新选择镜像

6.21 

1、打包

2、环境的

3、设置输出

set light 命令

set light 0 2 100        id:模式 (0:关 1亮  2:频闪) 亮度


测试流程

1、先将代码写好,记得写打印

2、编译,编译后生成ko文件,在目录Z:\xzj\PDC\Trunk\bin\ambacv28


3、打包
将生成的文件移动到  Z:\xzj\Pack_cv28\Images\user_cv28\lib\modules
另外还缺少库文件 可以看图片中的日期,除了pdc.ko外还有很多文件
使用打包命令,会在打包程序中生成图片中的文件包

4、使用tftp传输bin文件到相机中
看图片中的设置

使用一个网卡连接到相机,将网卡的ip设置成192.168.100

使用tftp将打包后的镜像文件传输到相机中
5、使用命令set 对相机进行操作

编译

先将代码写好,记得写打印

cd build;make plat=ambacv28;编译环境是 ubuntu18-jk128-dsp-gcc12.1.1:latest

编译命令将某个库编译后生成ko文件,存放在目录:Z:\xzj\PDC\Trunk\bin\ambacv28

打包

将编译后生成ko文件与其他一些库文件生成的.ko文件,生成可以在相机linux中执行的bin文件

将编译生成的.ko文件移动到  Z:\xzj\Pack_cv28\Images\user_cv28\lib\modules

运行命令进行打包,之后生成的生成文件目录在Z:\xzj\Pack_cv28\Dist\240624\DH_IC-R3016MG00C_V1.002.0000.2.R.20240624-1

make pack
在路径:Z:\xzj\Pack_cv28 下执行,环境是ubuntu18-jk128-dsp-gcc12.1.1:latest

tftp传输

在windows上使用tftp,将打包生成的bin文件传输到相机中。

使用tftp进行传输的时候,需要使用在电脑上连接一个网卡,然后在windows上选择出现的网卡,设置IP地址,与开发版处于同一网段(IP地址除去最后个不同其他都一样)

Current Directory   是打包生成文件的路径

注意:Current目录是传输文件的路径  :\xzj\Pack_cv28\Dist\240624\DH_IC-R3016MG00C_V1.002.0000.2.R.20240624-1
Server interfaces 是tftp服务器ip地址也就我们的windows电脑,选择网卡的ip地址就可以

使用串口连接到相机之后,使用reboot,按住*号按键 进入tftp32目录,
run up

5、使用对相机进行操作

使用uart串口连接到相机,进入shell路径下输入以下命令控制相机灯的状态

set light 0 2 100

set  light (0或者4)灯的选择 (0,1,2)灯的模式   (0~100)亮度

6.25

svn  代码提交

选中代码,右键点击选中svn commit

打包成一个文件给客户端调用

打包到客户端去升级

在/home/401593/xzj/Pack_cv28/CombinPack下,运行 ./DspOnlyCombinPack.sh
生成结果在Z:\xzj\Pack_cv28\CombinPack,DH_IC-R3016MG00C_V1.002.0000.2.R.20240625-1_Major=.Minor=.Fix=.bin
打开工具CamTools,选择bin文件,然后点击start
 

日志等级以及打印

ERROT  WAN 是会存放到flash中

一般我们作为代码的注释,只需要写成ERROR_INFO 就可以

6.26

l2c通信

struct i2c_client {unsigned short flags;		/* 标志位,各种标志位的组合,具体含义由下文说明 */unsigned short addr;		/* 芯片地址 - 注意:7位地址存储在 _低_ 7 位中 */char name[I2C_NAME_SIZE];	/* 设备名称,用于标识设备 */struct i2c_adapter *adapter;	/* 所属的 I2C 适配器 */struct device dev;		/* 设备结构体 */int irq;			/* 设备引发的中断号 */struct list_head detected;	/* 用于设备检测的链表,一般不使用 */
};

struct i2c_adapter {struct module *owner;unsigned int class;		  /* classes to allow probing for */const struct i2c_algorithm *algo; /* the algorithm to access the bus */void *algo_data;/* data fields that are valid for all devices	*/const struct i2c_lock_operations *lock_ops;struct rt_mutex bus_lock;struct rt_mutex mux_lock;int timeout;			/* in jiffies */int retries;struct device dev;		/* the adapter device */int nr;char name[48];struct completion dev_released;struct mutex userspace_clients_lock;struct list_head userspace_clients;struct i2c_bus_recovery_info *bus_recovery_info;const struct i2c_adapter_quirks *quirks;struct irq_domain *host_notify_domain;
};

I2C 总线是一种串行通信总线,它采用了两条线(SDA和SCL)来传输数据和控制信号。I2C 总线适配器能够产生和解析这些信号,实现与 I2C 设备之间的数据读写、设备地址识别和控制等操作。

/** Filename : sc160hgs.c** History:*    2017/05/12 - [Hao Zeng] created file** Copyright 2008-2021 Ambarella International LP** This program is free software; you can redistribute it and/or* modify it under the terms of the GNU General Public License* as published by the Free Software Foundation; either version 2* of the License, or (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, see <http://www.gnu.org/licenses/>.**/#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/i2c.h>
#include <iav_utils.h>
#include <vin_api.h>
#include "sc160hgs_i2c.h"
#include "sc160hgs_table_i2c.c"
#include "../senRegHistory.h"static struct vin_device *vdev_array[SC160HGS_i2c_MAX_INSTANCE] = {NULL};
static struct SEN_RoiParams gRoiPrams;static int bus_id_sc160hgs_i2c = 0x00;
static int ColorOrMono_i2c = 0;//0 mono ,1 color
static Uint8 mode = 0;
static unsigned short img_width_off = 0;
static int addr = 0x30;int vinc_id_sc160hgs_i2c = 0x10;
int frameset_sc160hgs_i2c = 1;struct sc160hgs_i2c_priv {void *control_data;u32 frame_length_lines;u32 line_length;u32 agc_addr[4];u32 shutter_addr[4];
};
/*修改分辨率,xzj*/
#define MAX_FRAME_RATE  (8000)
#define US_IN_SECOND    (1000*1000)
#define ROI_HEIGHT      (1088)
#define ROI_WIDTH       (1440)
#define DELAY_NUM		(5)
#define PIXEL_CLK       (334) //  (837 / 10 * 4)//MHZ // lvds速率/位深*lane
#define ROI_DEFAULT_OFFSET_X       (72) //宽度方向默认偏移, (2448-ROI_WIDTH)/2=72
#define ROI_DEFAULT_OFFSET_Y       (160) //高度方向默认偏移, (2048-ROI_HEIGHT)/2=160int sc160hgs_get_roi_param(struct vin_device *vdev,struct SEN_RoiParams *pParams);static int sc160hgs_i2c_write_reg(struct vin_device *vdev, u32 subaddr, u32 data)
{int ret;struct sc160hgs_i2c_priv *sc160hgs;struct i2c_client *client;struct i2c_msg msgs[1];u8 pbuf[3];sc160hgs = (struct sc160hgs_i2c_priv *)vdev->priv;client = sc160hgs->control_data;//构建要发送的数据包pbuf[0] = (subaddr >> 8);//存放设备内部寄存器地址高八位pbuf[1] = (subaddr & 0xff);//存放设备内部寄存器地址的低八位pbuf[2] = data;//8位的数据//设置消息参数msgs[0].len = 3;msgs[0].addr = client->addr;if (unlikely(subaddr == SC160HGS_i2c_SWRESET))msgs[0].flags = client->flags | I2C_M_IGNORE_NAK;elsemsgs[0].flags = client->flags;msgs[0].buf = pbuf;//执行i2c传输/*client->adapter:指向 I2C 适配器的指针,表示要使用的 I2C 总线。msgs:一个指向 I2C 消息数组的指针,包含要传输的消息。1:表示要传输的消息数量。*/ret = i2c_transfer(client->adapter, msgs, 1);if (ret < 0) {vin_error("failed(%d): [0x%x:0x%x]\n", ret, subaddr, data);return 0;}return 0;
}static int sc160hgs_i2c_read_reg(struct vin_device *vdev, u32 subaddr, u32 *data)
{int ret = 0;struct sc160hgs_i2c_priv *sc160hgs;struct i2c_client *client;struct i2c_msg msgs[2];u8 pbuf0[2];u8 pbuf[1];sc160hgs = (struct sc160hgs_i2c_priv *)vdev->priv;client = sc160hgs->control_data;pbuf0[0] = (subaddr >> 8);pbuf0[1] = (subaddr & 0xff);msgs[0].len = 2;msgs[0].addr = client->addr;msgs[0].flags = client->flags;msgs[0].buf = pbuf0;msgs[1].addr = client->addr;msgs[1].flags = client->flags | I2C_M_RD;msgs[1].buf = pbuf;msgs[1].len = 1;ret = i2c_transfer(client->adapter, msgs, 2);if (ret < 0) {vin_error("failed(%d): [0x%x]\n", ret, subaddr);return 0;}*data = pbuf[0];return 0;
}
/*设置输入模式*/
static int sc160hgs_i2c_set_vin_mode(struct vin_device *vdev, struct vin_video_format *format)
{struct vin_device_config sc160hgs_i2c_config;struct SEN_RoiParams roiParams;memset(&sc160hgs_i2c_config, 0, sizeof(sc160hgs_i2c_config));sc160hgs_i2c_config.interface_type = SENSOR_MIPI;//接口类型sc160hgs_i2c_config.sync_mode = SENSOR_SYNC_MODE_MASTER;//它将同步模式设置为主模式,这可能意味着它在I2C通信中充当主设备sc160hgs_i2c_config.mipi_cfg.lane_number = SENSOR_4_LANE;//设置了MIPI接口的配置,其中lane_number字段被设置为4线模式memset(&roiParams, 0, sizeof(roiParams));sc160hgs_get_roi_param(vdev,&roiParams);sc160hgs_i2c_config.cap_win.x = format->def_start_x;sc160hgs_i2c_config.cap_win.y = format->def_start_y;sc160hgs_i2c_config.cap_win.width = roiParams.width;sc160hgs_i2c_config.cap_win.height = roiParams.height;sc160hgs_i2c_config.sensor_id	= GENERIC_SENSOR;sc160hgs_i2c_config.input_format	= AMBA_VIN_INPUT_FORMAT_RGB_RAW;sc160hgs_i2c_config.bayer_pattern	= format->bayer_pattern;sc160hgs_i2c_config.video_format	= format->format;sc160hgs_i2c_config.bit_resolution	= format->bits;return ambarella_set_vin_config(vdev, &sc160hgs_i2c_config);
}static int sc160hgs_i2c_set_hold_mode(struct vin_device *vdev, u32 hold_mode)
{return 0;
}static int sc160hgs_i2c_sw_reset(struct vin_device *vdev)
{int ret = 0;ret = sc160hgs_i2c_write_reg(vdev, SC160HGS_i2c_SWRESET, 0x01);/* Software reset */if (ret < 0)return ret;ret = sc160hgs_i2c_write_reg(vdev, SC160HGS_i2c_STANDBY, 0x00);/* Standby */if (ret < 0)return ret;return 0;
}static int sc160hgs_i2c_init_device(struct vin_device *vdev)
{int ret = 0;ret = sc160hgs_i2c_sw_reset(vdev);if (ret < 0)return ret;return 0;
}static int sc160hgs_i2c_update_hv_info(struct vin_device *vdev)
{u32 val_high, val_low;struct sc160hgs_i2c_priv *pinfo = (struct sc160hgs_i2c_priv *)vdev->priv;int ret = 0;ret = sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_HTS_MSB, &val_high);if (ret < 0)return ret;ret = sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_HTS_LSB, &val_low);if (ret < 0)return ret;pinfo->line_length = ((val_high << 8) + val_low) << 1;if (unlikely(!pinfo->line_length)) {vin_error("line length is 0!\n");//	return -EIO;}ret = sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_VTS_MSB, &val_high);if (ret < 0)return ret;ret = sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_VTS_LSB, &val_low);if (ret < 0)return ret;pinfo->frame_length_lines = ((val_high << 8) + val_low) << 1;return 0;
}static int sc160hgs_i2c_get_line_time(struct vin_device *vdev)
{u64 h_clks;struct sc160hgs_i2c_priv *pinfo = (struct sc160hgs_i2c_priv *)vdev->priv;h_clks = (u64)pinfo->line_length * 512000000;h_clks = DIV64_CLOSEST(h_clks, vdev->cur_pll->pixelclk);vdev->cur_format->line_time = (u32)h_clks;return 0;
}static int sc160hgs_i2c_stop_streaming(struct vin_device *vdev)
{int ret = 0;// ret = sc160hgs_i2c_write_reg(vdev, SC160HGS_i2c_STANDBY, 0x00); /* stop streaming */if (ret < 0)return ret;return 0;
}
/*需要改*/
static int sc160hgs_i2c_start_streaming(struct vin_device *vdev)
{msleep(200);/*将0x01值写入从设备(地址ox2100)中*/sc160hgs_i2c_write_reg(vdev, 0x2100, 0x01); /* start streaming */sc160hgs_i2c_write_reg(vdev, 0x363a, 0x26);sc160hgs_i2c_write_reg(vdev, 0x363a, 0x06);return 0;
}
/*设置图像的格式,第一个参数是输入设备信息结构体,第二个参数是接收的设置信息结构体*/
static int sc160hgs_i2c_set_format(struct vin_device *vdev, struct vin_video_format *format)
{struct vin_reg_16_8 *regs;int i, regs_num, regModCnt, ret = 0;u32 rData = 0;SEN_DrvSenRegHis *regModify;struct SEN_RoiParams pParams;regs = sc160hgs_i2c_sxga_10bit_regs;regs_num = ARRAY_SIZE(sc160hgs_i2c_sxga_10bit_regs);for (i = 0; i < regs_num; i++) {ret = sc160hgs_i2c_write_reg(vdev, regs[i].addr, regs[i].data);if (ret < 0)return ret;}//width [0x3208, 0x3209]sc160hgs_i2c_write_reg(vdev, 0x3208, 0x9);sc160hgs_i2c_write_reg(vdev, 0x3209, 0x0);//height [0x320a, 0x320b]sc160hgs_i2c_write_reg(vdev,0x320a, 0x6);sc160hgs_i2c_write_reg(vdev, 0x320b, 0xc0);//col start [0x3210, 0x3211]sc160hgs_i2c_write_reg(vdev,0x3210,0x0);sc160hgs_i2c_write_reg(vdev,0x3211,0x48);// //Active Row Start [0x3202, 0x3203]sc160hgs_i2c_write_reg(vdev,0x3202,0x0);sc160hgs_i2c_write_reg(vdev,0x3203,0xa0);//Active Row end [0x3206, 0x3207]sc160hgs_i2c_write_reg(vdev,0x3206, 0x7);sc160hgs_i2c_write_reg(vdev,0x3207, 0x6f);//VTS [0x320e, 0x320f] = Active row end - Active row start + 33sc160hgs_i2c_write_reg(vdev,0x320e, 0x6);sc160hgs_i2c_write_reg(vdev,0x320f, 0xf0);regModify = SEN_getModHisReg();regModCnt = SEN_getRegModHisCount();for (i = 0; i < regModCnt; i++) {ret = sc160hgs_i2c_write_reg(vdev, regModify[i].addr, regModify[i].value);if (ret < 0)return ret;}ret = sc160hgs_i2c_update_hv_info(vdev);if (ret < 0)return ret;sc160hgs_i2c_get_line_time(vdev);/* communicate with IAV */ret = sc160hgs_i2c_set_vin_mode(vdev, format);if (ret < 0)return ret;/* Enable Streaming */	ret = sc160hgs_i2c_start_streaming(vdev);if (ret < 0)return ret;return 0;
}static int sc160hgs_i2c_set_shutter_row(struct vin_device *vdev, u32 row)
{return 0;
}static int sc160hgs_i2c_shutter2row(struct vin_device *vdev, u32 *shutter_time)
{return 0;
}static int sc160hgs_i2c_set_fps(struct vin_device *vdev, int fps)
{return 0;
}static int sc160hgs_i2c_set_agc_index(struct vin_device *vdev, int agc_idx)
{return 0;
}static void set_offset_x(struct vin_device *vdev,unsigned int offset, unsigned char flip)
{int16_t vpos = 0;if (flip){vpos = offset + ROI_DEFAULT_OFFSET_X;}else{vpos = offset + ROI_DEFAULT_OFFSET_X;}// sc160hgs_i2c_write_reg(vdev,0x3210, (vpos & 0xff00) >> 8);// sc160hgs_i2c_write_reg(vdev,0x3211, (vpos & 0x00ff));// SEN_drvRegModHisUpdate(0x3210,(vpos & 0x0f00) >> 8,0);// SEN_drvRegModHisUpdate(0x3211,(vpos & 0x00ff),0);
}static int sc160hgs_i2c_set_mirror_mode(struct vin_device *vdev,struct vindev_mirror *mirror_mode)
{int ret = 0;u32 tmp_reg, bayer_pattern, mirror_pattern = 0;switch (mirror_mode->pattern) {case VINDEV_MIRROR_AUTO:return 0;case VINDEV_MIRROR_NONE:mirror_pattern = 0;break;case VINDEV_MIRROR_VERTICALLY:mirror_pattern = SC160HGS_i2c_V_FLIP;break;case VINDEV_MIRROR_HORRIZONTALLY:mirror_pattern = SC160HGS_i2c_H_MIRROR;break;case VINDEV_MIRROR_HORRIZONTALLY_VERTICALLY:mirror_pattern = SC160HGS_i2c_V_FLIP + SC160HGS_i2c_H_MIRROR;break;default:vin_error("do not support cmd mirror mode\n");return -EINVAL;}bayer_pattern = VINDEV_BAYER_PATTERN_MONO;ret = sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_HV_FORMAT, &tmp_reg);if (ret < 0)return ret;tmp_reg &= (~SC160HGS_i2c_HV_MASK);tmp_reg |= mirror_pattern;ret = sc160hgs_i2c_write_reg(vdev, SC160HGS_i2c_HV_FORMAT, tmp_reg);SEN_drvRegModHisUpdate(SC160HGS_i2c_HV_FORMAT,tmp_reg,0);if (ret < 0)return ret;if (mirror_mode->bayer_pattern == VINDEV_BAYER_PATTERN_AUTO)mirror_mode->bayer_pattern = bayer_pattern;return ret;
}static int sc160hgs_i2c_get_chip_status(struct vin_device *vdev,struct vindev_chip_status *chip_status)
{u32 tmp_reg = 0;int ret = 0;ret = sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_GAIN_MSB, &tmp_reg);if (ret < 0)chip_status->access_status |= VINDEV_STATUS_SENSOR_ERR;return 0;
}static int sc160hgs_i2c_get_max_fps(struct vin_device *vdev,struct SEN_FrameRateParams *pParams)
{u32 rData1	= 0;u32 rData2	= 0;Uint64 nCol = 0;Uint64 nRow    = pParams->Height;Uint64 framePeriod	= 0;//放大10000倍的1s与放大100倍的fps算出放大100倍的周期时间//Uint64 frameIntervalUs	 = (Uint64)(US_IN_SECOND * 1000)*10 / pParams->framerate;sc160hgs_i2c_read_reg(vdev,0x320C, &rData1);sc160hgs_i2c_read_reg(vdev,0x320d, &rData2);nCol  = ((rData1 << 8) + rData2) << 1;framePeriod = nCol * nRow / PIXEL_CLK;//vin_error("1framePeriod %d\n", framePeriod);if ((pParams->expset + pParams->tpTime) > framePeriod){framePeriod = pParams->expset + pParams->tpTime + pParams->expset*1/1000;}//vin_error("2framePeriod %d\n", framePeriod);framePeriod = framePeriod*100;pParams->framerate	= DIV64_DOWN((Uint64)1000000*100*100, framePeriod);if (pParams->framerate > MAX_FRAME_RATE){pParams->framerate = MAX_FRAME_RATE;}vout_debug("framerate %d expset %d height %d\n", pParams->framerate,pParams->expset,pParams->Height);return 0;}static int sc160hgs_i2c_set_exp(struct vin_device *vdev,struct SEN_ExpParams *pParams)//锟斤拷锟斤拷fpga锟脚猴拷实锟街凤拷sensor锟侥达拷锟斤拷锟斤拷锟绞匡拷
{vin_info("expVal %d \n", pParams->expVal);return 0;
}//内核态主要是传递参数,业务计算在vbp内实现
static int sc160hgs_i2c_set_gain(struct vin_device *vdev,struct SEN_GainParams   *pParams)
{Uint32 a_gain = (Uint32)pParams->gainVal;Uint32 d_gain = (Uint32)pParams->dgainVal;if (OSA_isNull(pParams)){return OSA_EFAIL;}OSA_INFO("a_gain = 0x%x  d_gain = 0x%x\n", a_gain, d_gain);sc160hgs_i2c_write_reg(vdev, 0x3e08, a_gain);sc160hgs_i2c_write_reg(vdev, 0x3e09, d_gain);SEN_drvRegModHisUpdate(0x3e08,a_gain,0);SEN_drvRegModHisUpdate(0x3e09,d_gain,0);return 0;
}static int sc160hgs_i2c_set_sen_pattern(struct vin_device *vdev,struct SEN_PatternParams *pParams )
{unsigned int mode = pParams->mode;u32 data = 0;sc160hgs_i2c_read_reg(vdev,0x4501, &data);if (1 == mode || 2 == mode){sc160hgs_i2c_write_reg(vdev,0x4501, data | (0x1 << 3));SEN_drvRegModHisUpdate(0x4501, data | (0x1 << 3), 0);}else{sc160hgs_i2c_write_reg(vdev,0x4501, data & ~(0x1 << 3));SEN_drvRegModHisUpdate(0x4501, data & ~(0x1 << 3), 0);}return 0;
}static int sc160hgs_i2c_set_timing(struct vin_device *vdev,struct SEN_TimingParams *pParams)
{//由于内核态不能计算浮点型数据,计算式中曝光等值放大100倍计算u32 rData1	= 0;u32 rData2	= 0;Uint64 nCol	= 0;Uint64 nRow    = pParams->i_height;Uint64 framePeriod  = 0;//放大10000倍的1s与放大100倍的fps算出放大100倍的周期时间Uint64 frameIntervalUs	 = (Uint64)(US_IN_SECOND * 1000)*10 / pParams->i_fps;//vin_info("1pParams->i_fps:%d  frameIntervalUs:%d\n",pParams->i_fps,frameIntervalUs);sc160hgs_i2c_read_reg(vdev,0x320C, &rData1);sc160hgs_i2c_read_reg(vdev,0x320d, &rData2);nCol  = ((rData1 << 8) + rData2) << 1;framePeriod = nCol * nRow / PIXEL_CLK;framePeriod=framePeriod*100;//vin_info("2framePeriod:%d\n",framePeriod);frameIntervalUs = (frameIntervalUs > framePeriod) ? frameIntervalUs  : framePeriod;//vin_info("3frameIntervalUs:%d\n",frameIntervalUs);pParams->o_acqReadoutTime	= frameIntervalUs/100 ;pParams->o_acqExpTime		= pParams->i_exp - pParams->i_exp/100000;if(pParams->i_acqMode == 4){pParams->io_triggerDelay  = 0;}// 不做处理,解决静态扫描中危报错//else//{//	pParams->io_triggerDelay  = pParams->io_triggerDelay;//}pParams->io_preTime 	= pParams->io_preTime * 100 ;return OSA_SOK;}int sc160hgs_i2c_get_roi_param(struct vin_device *vdev,struct SEN_RoiParams *pParams)
{u32 col_start = ROI_DEFAULT_OFFSET_X, active_row_start = ROI_DEFAULT_OFFSET_Y;u32 rData1	= 0;u32 rData2	= 0;if(mode == SEN_BINNING_MODE_HORIZONTAL_VERTICAL){pParams->width = ROI_WIDTH / 2 / 32 * 32;pParams->height = ROI_HEIGHT / 2 / 8 * 8;return 0;}OSA_clear(pParams);sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_X_WIDTH_MSB, &rData1);sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_X_WIDTH_LSB, &rData2);pParams->width = (rData1<<8) + rData2;sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_Y_HEIGHT_MSB, &rData1);sc160hgs_i2c_read_reg(vdev, SC160HGS_i2c_Y_HEIGHT_LSB, &rData2);pParams->height = (rData1<<8) + rData2;sc160hgs_i2c_read_reg(vdev,0x3210, &rData1);sc160hgs_i2c_read_reg(vdev,0x3211, &rData2);pParams->offsetx = (rData1<<8) + rData2 - col_start;pParams->offsetx = ROI_WIDTH - pParams->offsetx - pParams->width;sc160hgs_i2c_read_reg(vdev,0x3202, &rData1);sc160hgs_i2c_read_reg(vdev,0x3203, &rData2);pParams->offsety = (rData1<<8) + rData2 - active_row_start;if ((pParams->width > ROI_WIDTH || pParams->width <= 0)|| (pParams->height > ROI_HEIGHT || pParams->height <= 0)|| (pParams->offsetx > ROI_WIDTH)|| (pParams->offsety > ROI_HEIGHT)){pParams->offsetx = 0;pParams->offsety = 0;pParams->width  = ROI_WIDTH;pParams->height = ROI_HEIGHT;vin_error("default full size(%u,%u),offset(%u,%u)\n", pParams->width, pParams->height, pParams->offsetx, pParams->offsety);}return 0;
}int sc160hgs_get_roi_param(struct vin_device *vdev,struct SEN_RoiParams *pParams)
{if (vdev == NULL || vdev->cur_format == NULL){pParams->offsetx = 0;pParams->offsety = 0;pParams->width = ROI_WIDTH;pParams->height = ROI_HEIGHT;vin_info("NULL roi(%u,%u),offset(%u,%u)\n", pParams->width, pParams->height, pParams->offsetx, pParams->offsety);return 0;}if (gRoiPrams.width == 0|| gRoiPrams.height == 0){pParams->offsetx = 0;pParams->offsety = 0;pParams->width = vdev->cur_format->def_width;pParams->height = vdev->cur_format->def_height;vin_info("default roi(%u,%u),offset(%u,%u)\n", pParams->width, pParams->height, pParams->offsetx, pParams->offsety);return 0;}pParams->height = gRoiPrams.height;pParams->offsety = gRoiPrams.offsety;pParams->offsetx = gRoiPrams.offsetx;pParams->width = gRoiPrams.width;vin_error("sensor roi (%u,%u),offset(%u,%u)\n", pParams->width, pParams->height, pParams->offsetx, pParams->offsety);return 0;
}static int sc160hgs_i2c_set_roi_param(struct vin_device *vdev,struct SEN_RoiParams *pParams)
{unsigned char wData	= 0;u32 col_start = ROI_DEFAULT_OFFSET_X;u32 tmp_reg = 0;u32 active_row_start = ROI_DEFAULT_OFFSET_Y, active_row_end    = 0; u32 vts = 0;gRoiPrams.width = pParams->width;gRoiPrams.height = pParams->height;gRoiPrams.offsetx = pParams->offsetx;gRoiPrams.offsety = pParams->offsety;pParams->offsetx = ROI_WIDTH - pParams->offsetx - pParams->width;col_start += pParams->offsetx;active_row_start += pParams->offsety;active_row_end   = active_row_start - 1 + pParams->height + 16; //end-start+1=Window height+16vts = active_row_end - active_row_start + 33;//width [0x3208, 0x3209]wData = (pParams->width >> 8) & 0xff;sc160hgs_i2c_write_reg(vdev, SC160HGS_i2c_X_WIDTH_MSB, wData);SEN_drvRegModHisUpdate(SC160HGS_i2c_X_WIDTH_MSB, wData, 0);wData = pParams->width & 0xff;sc160hgs_i2c_write_reg(vdev, SC160HGS_i2c_X_WIDTH_LSB, wData);SEN_drvRegModHisUpdate(SC160HGS_i2c_X_WIDTH_LSB, wData, 0);//height [0x320a, 0x320b]wData = (pParams->height >> 8) & 0xff;sc160hgs_i2c_write_reg(vdev,SC160HGS_i2c_Y_HEIGHT_MSB, wData);SEN_drvRegModHisUpdate(SC160HGS_i2c_Y_HEIGHT_MSB, wData, 0);wData = pParams->height & 0xff;sc160hgs_i2c_write_reg(vdev, SC160HGS_i2c_Y_HEIGHT_LSB, wData);SEN_drvRegModHisUpdate(SC160HGS_i2c_Y_HEIGHT_LSB, wData, 0);//col start [0x3210, 0x3211]wData = (col_start >> 8) & 0xff;sc160hgs_i2c_write_reg(vdev,0x3210,wData);SEN_drvRegModHisUpdate(0x3210,wData,0);wData = col_start  & 0xff;sc160hgs_i2c_write_reg(vdev,0x3211,wData);SEN_drvRegModHisUpdate(0x3211,wData,0);//row start [0x3212, 0x3213]// wData = (row_start >> 8) & 0xff;// sc160hgs_i2c_write_reg(vdev,0x3212,wData);// SEN_drvRegModHisUpdate(0x3212,wData,0);// wData = row_start & 0xff;// sc160hgs_i2c_write_reg(vdev,0x3213,wData);// SEN_drvRegModHisUpdate(0x3213,wData,0);// //Active Row Start [0x3202, 0x3203]wData = (active_row_start >> 8) & 0xff;sc160hgs_i2c_write_reg(vdev,0x3202,wData);SEN_drvRegModHisUpdate(0x3202,wData,0);wData = active_row_start & 0xff;sc160hgs_i2c_write_reg(vdev,0x3203,wData);SEN_drvRegModHisUpdate(0x3203,wData,0);//Active Row end [0x3206, 0x3207]wData = (active_row_end >> 8) & 0xff;sc160hgs_i2c_write_reg(vdev,0x3206, wData);SEN_drvRegModHisUpdate(0x3206,wData,0);wData = active_row_end & 0xff;sc160hgs_i2c_write_reg(vdev,0x3207, wData);SEN_drvRegModHisUpdate(0x3207, wData,0);//VTS [0x320e, 0x320f] = Active row end - Active row start + 33wData = (vts >> 8) & 0xff;sc160hgs_i2c_write_reg(vdev,0x320e, wData);SEN_drvRegModHisUpdate(0x320e,wData,0);wData = vts & 0xff;sc160hgs_i2c_write_reg(vdev,0x320f, wData);SEN_drvRegModHisUpdate(0x320f,wData,0);vin_info("sensor roi size(%u,%u),offset(%u,%u)\n", pParams->width, pParams->height, pParams->offsetx, pParams->offsety);return 0;
}static int sc160hgs_i2c_get_low_power_status(struct vin_device *vdev, struct SEN_LowPowerParams *pParams)
{if(!pParams){return OSA_EFAIL;}pParams->mode = SLEEP_WAKE_UP;return 0;
}static int sc160hgs_i2c_set_low_power_status(struct vin_device *vdev, struct SEN_LowPowerParams *pParams)
{if(pParams && pParams->mode != SLEEP_WAKE_UP){OSA_WARN("low power mode is error!\n");return OSA_EFAIL;}if(pParams && pParams->status == 1){// sc160hgs_i2c_write_reg(vdev,0x0100, 0x00);// SEN_drvRegModHisUpdate(0x0100, 0x00, 0);}else if(pParams && pParams->status == 0){// sc160hgs_i2c_write_reg(vdev,0x0100, 0x01);// SEN_drvRegModHisUpdate(0x0100, 0x01, 0);msleep(5);}else{OSA_ERROR("pParams is NULL!\n");return OSA_EFAIL;}return 0;
}static int sc160hgs_i2c_get_binning_mode(struct vin_device *vdev, struct SEN_BinningMode *pParams)
{if(!pParams){return OSA_EFAIL;}pParams->mode = SEN_BINNING_MODE_HORIZONTAL_VERTICAL;return 0;
}static int sc160hgs_i2c_set_binning_mode(struct vin_device *vdev, struct SEN_BinningMode *pParams)
{u32 value = 0;if(!pParams){OSA_WARN("pParams is NULL!\n");return OSA_EFAIL;}return 0;sc160hgs_i2c_write_reg(vdev,0x0100,0x00);if(pParams->mode == SEN_BINNING_MODE_HORIZONTAL_VERTICAL){sc160hgs_i2c_write_reg(vdev, 0x3215, 0x31);SEN_drvRegModHisUpdate(0x3215,0x31,0);sc160hgs_i2c_write_reg(vdev, 0x3211, 0x08);SEN_drvRegModHisUpdate(0x3211,0x08,0);sc160hgs_i2c_write_reg(vdev, 0x320a, 0x02);SEN_drvRegModHisUpdate(0x320a,0x02,0);sc160hgs_i2c_write_reg(vdev, 0x320b, 0x00);SEN_drvRegModHisUpdate(0x320b,0x00,0);sc160hgs_i2c_write_reg(vdev, 0x5000, 0x41);SEN_drvRegModHisUpdate(0x5000,0x41,0);sc160hgs_i2c_write_reg(vdev, 0x5a01, 0x04);SEN_drvRegModHisUpdate(0x5a01,0x04,0);sc160hgs_i2c_write_reg(vdev, 0x5a00, 0xf1);SEN_drvRegModHisUpdate(0x5a00,0xf1,0);sc160hgs_i2c_write_reg(vdev, 0x3208, 0x02);SEN_drvRegModHisUpdate(0x3208,0x02,0);sc160hgs_i2c_write_reg(vdev, 0x3209, 0x80);SEN_drvRegModHisUpdate(0x3209,0x80,0);sc160hgs_i2c_read_reg(vdev, 0x303f, &value);value = value&0b11100000;value = value|0x02;sc160hgs_i2c_write_reg(vdev, 0x303f, value);SEN_drvRegModHisUpdate(0x303f,value,0);sc160hgs_i2c_write_reg(vdev, 0x4837, 0x2e);SEN_drvRegModHisUpdate(0x4837,0x2e,0);sc160hgs_i2c_write_reg(vdev, 0x303c, 0x15);SEN_drvRegModHisUpdate(0x303c,0x15,0);}else if(pParams->mode == SEN_BINNING_MODE_OFF){sc160hgs_i2c_write_reg(vdev, 0x3215, 0x11);SEN_drvRegModHisUpdate(0x3215,0x11,0);sc160hgs_i2c_write_reg(vdev, 0x3211, 0x0c);SEN_drvRegModHisUpdate(0x3211,0x0c,0);sc160hgs_i2c_write_reg(vdev, 0x5000, 0x1);SEN_drvRegModHisUpdate(0x5000,0x1,0);sc160hgs_i2c_write_reg(vdev, 0x5a01, 0x00);SEN_drvRegModHisUpdate(0x5a01,0x01,0);sc160hgs_i2c_write_reg(vdev, 0x5a00, 0x1);SEN_drvRegModHisUpdate(0x5a00,0x1,0);sc160hgs_i2c_write_reg(vdev, 0x303f, 0x11);SEN_drvRegModHisUpdate(0x303f,0x11,0);}mode = pParams->mode;sc160hgs_i2c_write_reg(vdev,0x0100,0x01);OSA_INFO("sc160hgs_i2c_set_binning_mode %d\n", pParams->mode);return 0;
}/*需要改硬件操作函数*/
static struct vin_ops sc160hgs_i2c_ops = {.init_device				= sc160hgs_i2c_init_device		,.set_format					= sc160hgs_i2c_set_format		,.set_shutter_row			= sc160hgs_i2c_set_shutter_row	,.shutter2row				= sc160hgs_i2c_shutter2row		,.set_frame_rate				= sc160hgs_i2c_set_fps			,.set_agc_index				= sc160hgs_i2c_set_agc_index		,.set_mirror_mode			= sc160hgs_i2c_set_mirror_mode	,.shutter2row				= sc160hgs_i2c_shutter2row		,.set_hold_mode				= sc160hgs_i2c_set_hold_mode		,.read_reg					= sc160hgs_i2c_read_reg			,.write_reg					= sc160hgs_i2c_write_reg			,.get_chip_status	 		= sc160hgs_i2c_get_chip_status	,.vin_dev_get_max_fps   	 	= sc160hgs_i2c_get_max_fps		,.vin_dev_set_exp       		= sc160hgs_i2c_set_exp			,.vin_dev_set_gain       	= sc160hgs_i2c_set_gain			,.vin_dev_set_sen_pattern	= sc160hgs_i2c_set_sen_pattern	,.vin_dev_set_timing     	= sc160hgs_i2c_set_timing		,.get_roi_param          	= sc160hgs_i2c_get_roi_param		,.set_roi_param          	= sc160hgs_i2c_set_roi_param		,.get_low_power_status		= sc160hgs_i2c_get_low_power_status,.set_low_power_status		= sc160hgs_i2c_set_low_power_status,// .get_binning_mode			= sc160hgs_i2c_get_binning_mode,// .set_binning_mode			= sc160hgs_i2c_set_binning_mode,};static int sc160hgs_i2c_drv_probe(struct i2c_client *client,const struct i2c_device_id *id)
{int ret = 0;struct vin_device *vdev;struct sc160hgs_i2c_priv *sc160hgs_i2c;u32 intf_id;static u8 probe_num = 0;intf_id = (vinc_id_sc160hgs_i2c >> (probe_num << 2)) & 0xF;if (intf_id == 0xF) /* vinc_id end */return 0;if (vinc_id_sc160hgs_i2c > 0xF) { /* multi vin case, use dt ids to load driver automatically */client->addr = addr;strlcpy(client->name, "sc160hgs", I2C_NAME_SIZE);}if (ColorOrMono_i2c == 1){vdev = ambarella_vin_create_device("sc160hgs",SENSOR_SC160HGS_C, sizeof(struct sc160hgs_i2c_priv));}else{vdev = ambarella_vin_create_device("sc160hgs",SENSOR_SC160HGS, sizeof(struct sc160hgs_i2c_priv));}if (!vdev)return -ENOMEM;vdev->intf_id = intf_id;vdev->dev_type = VINDEV_TYPE_SENSOR;vdev->sub_type = VINDEV_SUBTYPE_CMOS;vdev->default_mode = AMBA_VIDEO_MODE_SXGA;vdev->frame_rate = AMBA_VIDEO_FPS_AUTO;vdev->agc_db_max = 0x30000000;  /* 48dB */ vdev->agc_db_min = 0x00000000;  /* 0dB */vdev->agc_db_step = 0x00199999; /* 0.1dB */i2c_set_clientdata(client, vdev);sc160hgs_i2c = (struct sc160hgs_i2c_priv *)vdev->priv;sc160hgs_i2c->control_data = client;vdev->vsrc_ctx.num = frameset_sc160hgs_i2c;vdev->vsrc_ctx.switch_supported = vdev->vsrc_ctx.num > 1;vdev->vsrc_ctx.sensor_internal_switch = 1;vdev->vsrc_ctx.switch_enabled = 0;vdev->vsrc_ctx.cur_ctx = VINDEV_REG_CONTEXT_A;// color use vsrc2if (ColorOrMono_i2c == 1){ret = ambarella_vin_register_device(vdev, &sc160hgs_i2c_ops,sc160hgs_i2c_color_formats, ARRAY_SIZE(sc160hgs_i2c_color_formats),sc160hgs_i2c_plls, ARRAY_SIZE(sc160hgs_i2c_plls));vin_info("sc160hgs color\n");}else{ret = ambarella_vin_register_device(vdev, &sc160hgs_i2c_ops,sc160hgs_i2c_formats, ARRAY_SIZE(sc160hgs_i2c_formats),sc160hgs_i2c_plls, ARRAY_SIZE(sc160hgs_i2c_plls));}if (ret < 0)goto sc160hgs_i2c_probe_err;vdev_array[0] = vdev;vin_info("sc160hgs_i2c-LQR Init(4-lane MIPI), with SPI I/F, [vinc:vsrc]%d:%d\n",vdev->intf_id, vdev->vsrc_id);return 0;sc160hgs_i2c_probe_err:ambarella_vin_free_device(vdev);return ret;
}static int sc160hgs_i2c_drv_remove(struct i2c_client *client)
{struct vin_device *vdev;int i;for (i = 0; i < SC160HGS_i2c_MAX_INSTANCE; i++) {vdev = vdev_array[i];if (vdev) {ambarella_vin_unregister_device(vdev);ambarella_vin_free_device(vdev);}}return 0;
}static const struct i2c_device_id sc160hgs_idtable[] = {{ "sc160hgs", 0 },{ }
};
MODULE_DEVICE_TABLE(i2c, sc160hgs_idtable);#ifdef CONFIG_OF
static const struct of_device_id sc160hgs_dt_ids[] = {{ .compatible = "ambarella,ambvin", },{ }
};
MODULE_DEVICE_TABLE(of, sc160hgs_dt_ids);
#endifstatic struct i2c_driver i2c_driver_sc160hgs = {.driver = {.name	= "sc160hgs",.owner	= THIS_MODULE,},.id_table	= sc160hgs_idtable,.probe		= sc160hgs_i2c_drv_probe,.remove		= sc160hgs_i2c_drv_remove,
};int __init sc160hgs_i2c_init(int ColorOrMono)
{int ret;bus_id_sc160hgs_i2c = 0;ColorOrMono_i2c = ColorOrMono;if (vinc_id_sc160hgs_i2c > 0xF) { /* multi vin case, use dt ids to load driver automatically */i2c_driver_sc160hgs.driver.of_match_table = of_match_ptr(sc160hgs_dt_ids);} else {ret = ambpriv_i2c_update_addr("sc160hgs", bus_id_sc160hgs_i2c, addr);if (ret < 0)return ret;}ret = i2c_add_driver(&i2c_driver_sc160hgs);if (ret < 0)return ret;return 0;
}void __exit sc160hgs_i2c_exit(void)
{i2c_del_driver(&i2c_driver_sc160hgs);
}
/** Filename : sc160hgs.h** History:*    2017/05/12 - [Hao Zeng] created file** Copyright 2008-2021 Ambarella International LP** This program is free software; you can redistribute it and/or* modify it under the terms of the GNU General Public License* as published by the Free Software Foundation; either version 2* of the License, or (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, see <http://www.gnu.org/licenses/>.**/#ifndef __SC160HGS_I2C_H__
#define __SC160HGS_I2C_H__//#define SC160HGS_i2c_MASTER  1   // 调试需要开启master模式,开启该宏#define SC160HGS_i2c_MAX_INSTANCE  1#define SC160HGS_i2c_STANDBY			0x0100
#define SC160HGS_i2c_SWRESET			0x0103#define SC160HGS_i2c_EXPO_MSB		0x3E01
#define SC160HGS_i2c_EXPO_LSB		0x3E02#define SC160HGS_i2c_GAIN_MSB		0x3E08
#define SC160HGS_i2c_GAIN_LSB		0x3E09#define SC160HGS_i2c_HTS_MSB			0x320C
#define SC160HGS_i2c_HTS_LSB			0x320D
#define SC160HGS_i2c_VTS_MSB			0x320E
#define SC160HGS_i2c_VTS_LSB			0x320F#define SC160HGS_i2c_X_WIDTH_MSB		0x3208
#define SC160HGS_i2c_X_WIDTH_LSB		0x3209
#define SC160HGS_i2c_Y_HEIGHT_MSB		0x320A
#define SC160HGS_i2c_Y_HEIGHT_LSB		0x320B
#define SC160HGS_i2c_X_START_MSB		0x3210
#define SC160HGS_i2c_X_START_LSB		0x3211
#define SC160HGS_i2c_Y_START_MSB		0x3212
#define SC160HGS_i2c_Y_START_LSB		0x3213#define SC160HGS_i2c_HV_FORMAT		    0x3221
#define SC160HGS_i2c_H_MIRROR		    (3<<1)
#define SC160HGS_i2c_V_FLIP			    (3<<5)
#define SC160HGS_i2c_HV_MASK			(SC160HGS_i2c_H_MIRROR + SC160HGS_i2c_V_FLIP)#endif /* __SC160HGS_H__ */
/** Filename : sc160hgs_table.c** History:*    2017/05/12 - [Hao Zeng] created file** Copyright 2008-2021 Ambarella International LP** This program is free software; you can redistribute it and/or* modify it under the terms of the GNU General Public License* as published by the Free Software Foundation; either version 2* of the License, or (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, see <http://www.gnu.org/licenses/>.**/
/*配置文件,没有函数实现*/static struct vin_video_pll sc160hgs_i2c_plls[] = {{0, 27000000, 201480000},
};
/*视频格式的配置信息,包括分辨率、像素格式、帧率等*/
static struct vin_video_format sc160hgs_i2c_formats[] = {{.video_mode = AMBA_VIDEO_MODE_SXGA,.def_start_x = 0,.def_start_y = 0,.def_width = 2304,.def_height = 1728,/* sensor mode */.device_mode = 0,.pll_idx = 0,.width = 2304,.height = 1728,.format = AMBA_VIDEO_FORMAT_PROGRESSIVE,.type = AMBA_VIDEO_TYPE_RGB_RAW,.bits = AMBA_VIDEO_BITS_10,.ratio = AMBA_VIDEO_RATIO_AUTO,.max_fps = AMBA_VIDEO_FPS(80),.default_fps = AMBA_VIDEO_FPS_AUTO,.default_agc = 0,.default_shutter_time	= AMBA_VIDEO_FPS_AUTO,.default_bayer_pattern = VINDEV_BAYER_PATTERN_MONO,},
};
/*描述彩色视频格式的配置信息*/
static struct vin_video_format sc160hgs_i2c_color_formats[] = {{.video_mode = AMBA_VIDEO_MODE_SXGA,.def_start_x = 0,.def_start_y = 0,.def_width = 2304,.def_height = 1728,/* sensor mode */.device_mode = 0,.pll_idx = 0,.width = 1280,.height = 1024,.format = AMBA_VIDEO_FORMAT_PROGRESSIVE,.type = AMBA_VIDEO_TYPE_RGB_RAW,.bits = AMBA_VIDEO_BITS_10,.ratio = AMBA_VIDEO_RATIO_AUTO,.max_fps = AMBA_VIDEO_FPS(80),.default_fps = AMBA_VIDEO_FPS_AUTO,.default_agc = 0,.default_shutter_time	= AMBA_VIDEO_FPS_AUTO,.default_bayer_pattern = VINDEV_BAYER_PATTERN_BG,},
};
/* 需要改,这是一些配置寄存器的地址*/
static struct vin_reg_16_8 sc160hgs_i2c_sxga_10bit_regs[] = {{0x2103,0x01},//前一个是寄存器地址,后一个是值{0x2100,0x00},{0x36e9,0x80},{0x37f9,0x80},{0x3018,0x7b},{0x3019,0xf0},{0x301f,0x05},{0x3031,0x0a},{0x3037,0x00},{0x3058,0x21},{0x3059,0x43},{0x305a,0x65},{0x3062,0x00},{0x309f,0xb0},{0x30b8,0x44},{0x3200,0x00},{0x3201,0x00},{0x3202,0x00},{0x3203,0x00},{0x3204,0x09},{0x3205,0x9f},{0x3206,0x08},{0x3207,0x0f},{0x3208,0x09},{0x3209,0x90},{0x320a,0x08},{0x320b,0x00},{0x320c,0x02},{0x320d,0xa3},{0x320e,0x08},{0x320f,0x34},{0x3210,0x00},{0x3211,0x08},{0x3212,0x00},{0x3213,0x08},{0x3222,0x01},{0x3227,0x00},{0x3234,0x0f},{0x3241,0x00},{0x3243,0x03},{0x3248,0x04},{0x3249,0x0f},{0x3250,0x03},{0x3253,0x04},{0x3271,0x10},{0x3273,0x13},{0x3282,0x09},{0x32c0,0x07},{0x32d1,0x05},{0x3301,0x10},{0x3303,0x2c},{0x3304,0x40},{0x3306,0x58},{0x3309,0x58},{0x330b,0xb8},{0x330e,0x02},{0x330f,0x04},{0x3311,0x04},{0x3313,0x11},{0x3314,0xfc},{0x3316,0x11},{0x3317,0x0e},{0x331f,0x02},{0x3320,0xf1},{0x3352,0x16},{0x3356,0x18},{0x3360,0x80},{0x3361,0x20},{0x3363,0x9f},{0x3385,0x21},{0x3387,0x39},{0x33ad,0x38},{0x33af,0x40},{0x33b0,0x00},{0x33b5,0x08},{0x33b6,0x18},{0x33b8,0x40},{0x33ba,0x40},{0x33ef,0x04},{0x33f8,0x00},{0x33fa,0x01},{0x3420,0x88},{0x3421,0x98},{0x3422,0xb8},{0x3424,0x40},{0x3426,0x40},{0x3428,0x40},{0x342a,0x40},{0x3435,0x07},{0x3436,0x00},{0x3437,0xdc},{0x3438,0x00},{0x3439,0xdc},{0x343a,0x00},{0x343b,0xdc},{0x343c,0x00},{0x343d,0xfc},{0x349b,0x1f},{0x34f2,0x00},{0x34f3,0x08},{0x34f4,0x18},{0x34f5,0x80},{0x361a,0x40},{0x361b,0x98},{0x361f,0x00},{0x3628,0xa0},{0x3629,0x82},{0x362a,0x00},{0x3630,0x80},{0x3633,0x44},{0x3634,0x04},{0x3636,0x53},{0x3639,0x80},{0x363a,0x06},{0x363b,0x0f},{0x363c,0x0e},{0x363d,0x08},{0x363e,0x50},{0x363f,0x22},{0x3654,0x40},{0x365c,0x40},{0x3665,0x08},{0x3666,0x80},{0x3667,0x98},{0x3668,0xb8},{0x3670,0xe0},{0x3671,0xc8},{0x3672,0xaa},{0x3676,0x81},{0x3677,0x84},{0x3678,0x82},{0x3679,0x85},{0x367a,0x82},{0x367c,0x44},{0x367d,0x44},{0x367e,0x55},{0x3680,0x04},{0x3681,0x04},{0x3682,0x04},{0x3684,0x53},{0x3685,0x53},{0x3686,0x53},{0x3699,0x53},{0x369a,0x53},{0x369b,0x53},{0x36c0,0x88},{0x36c1,0xb8},{0x36c2,0x18},{0x36c3,0x98},{0x36c8,0x08},{0x36c9,0x38},{0x36ca,0x00},{0x36cb,0x80},{0x36d2,0x00},{0x36d3,0x00},{0x36d4,0x00},{0x36ea,0x07},{0x36eb,0x14},{0x36ec,0x42},{0x36ed,0x84},{0x3718,0x05},{0x3720,0x04},{0x3722,0xc8},{0x3724,0xa1},{0x3770,0x15},{0x3771,0x15},{0x3772,0x15},{0x3778,0xc8},{0x3779,0xd8},{0x377a,0xd8},{0x37c0,0x08},{0x37c1,0x98},{0x37c4,0x08},{0x37c5,0x38},{0x37fa,0x15},{0x37fb,0x45},{0x37fc,0x20},{0x37fd,0x04},{0x3900,0x1d},{0x3901,0x02},{0x3903,0x40},{0x3904,0x08},{0x3905,0x4d},{0x3907,0x00},{0x3908,0x40},{0x391f,0x44},{0x3933,0x80},{0x3934,0x00},{0x3937,0x74},{0x393a,0x00},{0x3e00,0x00},{0x3e01,0x00},{0x3e02,0x00},{0x3e03,0x2b},{0x3e08,0x00},{0x3e09,0x20},{0x3e15,0x00},{0x3e16,0x01},{0x3e17,0x8c},{0x3e18,0x01},{0x3e19,0x8c},{0x4330,0x50},{0x4331,0x20},{0x4338,0xae},{0x4347,0x02},{0x4350,0x20},{0x4360,0x0f},{0x4362,0xb8},{0x4364,0xc8},{0x4365,0x08},{0x4366,0x18},{0x4368,0x58},{0x436a,0x68},{0x436b,0x08},{0x436c,0x18},{0x4370,0x20},{0x4371,0x20},{0x4372,0x08},{0x4373,0x18},{0x437a,0x20},{0x437b,0x38},{0x4380,0x20},{0x4381,0x20},{0x4382,0x20},{0x4383,0x08},{0x4384,0x18},{0x4385,0x38},{0x4503,0x20},{0x4509,0x20},{0x450a,0x00},{0x450d,0x14},{0x4837,0x10},{0x4b01,0x11},{0x4b0b,0x00},{0x5000,0x30},{0x5002,0x00},{0x502e,0xa1},{0x5030,0x09},{0x5031,0xa0},{0x5032,0x08},{0x5033,0x10},{0x5034,0x03},{0x5104,0x14},{0x5105,0x10},{0x5106,0x03},{0x5107,0xb9},{0x5780,0x76},{0x5784,0x08},{0x5785,0x03},{0x5787,0x0a},{0x5788,0x0a},{0x5789,0x08},{0x578a,0x0a},{0x578b,0x0a},{0x578c,0x08},{0x578d,0x40},{0x5790,0x08},{0x5791,0x04},{0x5792,0x04},{0x5793,0x08},{0x5794,0x04},{0x5795,0x04},{0x57a8,0xd2},{0x57aa,0x2a},{0x57ab,0x7f},{0x57ac,0x00},{0x57ad,0x00},{0x6ec0,0x09},{0x6ec1,0x90},{0x6ec2,0x08},{0x6ec3,0x00},{0x36e9,0x07},{0x37f9,0x37},{0x4412,0x01},{0x4424,0x01},
};/* Gain table */
/* sc160hgs_i2c global gain table row size */
#define sc160hgs_i2c_GAIN_ROWS		(448 + 1)
#define sc160hgs_i2c_GAIN_COLS		(1)
#define sc160hgs_i2c_GAIN_MAXDB		(448)#define sc160hgs_i2c_GAIN_COL_AGC		(0)/* sc160hgs_i2c_GAIN_ROWS = 449, sc160hgs_i2c_GAIN_COLS = 1*/
static const u16 sc160hgs_i2c_GAIN_TABLE[sc160hgs_i2c_GAIN_ROWS][sc160hgs_i2c_GAIN_COLS] = {{0x0020}, /* index:0, gain:0.00000db -> x1.000000, again:x1.000000, dgain:x1 */{0x0020}, /* index:1, gain:0.09375db -> x1.010852, again:x1.010852, dgain:x1 */{0x0020}, /* index:2, gain:0.18750db -> x1.021821, again:x1.021821, dgain:x1 */{0x0021}, /* index:3, gain:0.28125db -> x1.032910, again:x1.032910, dgain:x1 */{0x0021}, /* index:4, gain:0.37500db -> x1.044119, again:x1.044119, dgain:x1 */{0x0021}, /* index:5, gain:0.46875db -> x1.055450, again:x1.055450, dgain:x1 */{0x0022}, /* index:6, gain:0.56250db -> x1.066903, again:x1.066903, dgain:x1 */{0x0022}, /* index:7, gain:0.65625db -> x1.078481, again:x1.078481, dgain:x1 */{0x0022}, /* index:8, gain:0.75000db -> x1.090184, again:x1.090184, dgain:x1 */{0x0023}, /* index:9, gain:0.84375db -> x1.102015, again:x1.102015, dgain:x1 */{0x0023}, /* index:10, gain:0.93750db -> x1.113974, again:x1.113974, dgain:x1 */{0x0024}, /* index:11, gain:1.03125db -> x1.126063, again:x1.126063, dgain:x1 */{0x0024}, /* index:12, gain:1.12500db -> x1.138282, again:x1.138282, dgain:x1 */{0x0024}, /* index:13, gain:1.21875db -> x1.150635, again:x1.150635, dgain:x1 */{0x0025}, /* index:14, gain:1.31250db -> x1.163121, again:x1.163121, dgain:x1 */{0x0025}, /* index:15, gain:1.40625db -> x1.175743, again:x1.175743, dgain:x1 */{0x0026}, /* index:16, gain:1.50000db -> x1.188502, again:x1.188502, dgain:x1 */{0x0026}, /* index:17, gain:1.59375db -> x1.201400, again:x1.201400, dgain:x1 */{0x0026}, /* index:18, gain:1.68750db -> x1.214437, again:x1.214437, dgain:x1 */{0x0027}, /* index:19, gain:1.78125db -> x1.227616, again:x1.227616, dgain:x1 */{0x0027}, /* index:20, gain:1.87500db -> x1.240938, again:x1.240938, dgain:x1 */{0x0028}, /* index:21, gain:1.96875db -> x1.254404, again:x1.254404, dgain:x1 */{0x0028}, /* index:22, gain:2.06250db -> x1.268017, again:x1.268017, dgain:x1 */{0x0029}, /* index:23, gain:2.15625db -> x1.281777, again:x1.281777, dgain:x1 */{0x0029}, /* index:24, gain:2.25000db -> x1.295687, again:x1.295687, dgain:x1 */{0x0029}, /* index:25, gain:2.34375db -> x1.309747, again:x1.309747, dgain:x1 */{0x002a}, /* index:26, gain:2.43750db -> x1.323960, again:x1.323960, dgain:x1 */{0x002a}, /* index:27, gain:2.53125db -> x1.338328, again:x1.338328, dgain:x1 */{0x002b}, /* index:28, gain:2.62500db -> x1.352851, again:x1.352851, dgain:x1 */{0x002b}, /* index:29, gain:2.71875db -> x1.367532, again:x1.367532, dgain:x1 */{0x002c}, /* index:30, gain:2.81250db -> x1.382372, again:x1.382372, dgain:x1 */{0x002c}, /* index:31, gain:2.90625db -> x1.397374, again:x1.397374, dgain:x1 */{0x002d}, /* index:32, gain:3.00000db -> x1.412538, again:x1.412538, dgain:x1 */{0x002d}, /* index:33, gain:3.09375db -> x1.427866, again:x1.427866, dgain:x1 */{0x002e}, /* index:34, gain:3.18750db -> x1.443361, again:x1.443361, dgain:x1 */{0x002e}, /* index:35, gain:3.28125db -> x1.459024, again:x1.459024, dgain:x1 */{0x002f}, /* index:36, gain:3.37500db -> x1.474857, again:x1.474857, dgain:x1 */{0x002f}, /* index:37, gain:3.46875db -> x1.490862, again:x1.490862, dgain:x1 */{0x0030}, /* index:38, gain:3.56250db -> x1.507041, again:x1.507041, dgain:x1 */{0x0030}, /* index:39, gain:3.65625db -> x1.523395, again:x1.523395, dgain:x1 */{0x0031}, /* index:40, gain:3.75000db -> x1.539927, again:x1.539927, dgain:x1 */{0x0031}, /* index:41, gain:3.84375db -> x1.556638, again:x1.556638, dgain:x1 */{0x0032}, /* index:42, gain:3.93750db -> x1.573530, again:x1.573530, dgain:x1 */{0x0032}, /* index:43, gain:4.03125db -> x1.590606, again:x1.590606, dgain:x1 */{0x0033}, /* index:44, gain:4.12500db -> x1.607867, again:x1.607867, dgain:x1 */{0x0034}, /* index:45, gain:4.21875db -> x1.625315, again:x1.625315, dgain:x1 */{0x0034}, /* index:46, gain:4.31250db -> x1.642952, again:x1.642952, dgain:x1 */{0x0035}, /* index:47, gain:4.40625db -> x1.660782, again:x1.660782, dgain:x1 */{0x0035}, /* index:48, gain:4.50000db -> x1.678804, again:x1.678804, dgain:x1 */{0x0036}, /* index:49, gain:4.59375db -> x1.697022, again:x1.697022, dgain:x1 */{0x0036}, /* index:50, gain:4.68750db -> x1.715438, again:x1.715438, dgain:x1 */{0x0037}, /* index:51, gain:4.78125db -> x1.734054, again:x1.734054, dgain:x1 */{0x0038}, /* index:52, gain:4.87500db -> x1.752871, again:x1.752871, dgain:x1 */{0x0038}, /* index:53, gain:4.96875db -> x1.771893, again:x1.771893, dgain:x1 */{0x0039}, /* index:54, gain:5.06250db -> x1.791121, again:x1.791121, dgain:x1 */{0x0039}, /* index:55, gain:5.15625db -> x1.810558, again:x1.810558, dgain:x1 */{0x003a}, /* index:56, gain:5.25000db -> x1.830206, again:x1.830206, dgain:x1 */{0x003b}, /* index:57, gain:5.34375db -> x1.850067, again:x1.850067, dgain:x1 */{0x003b}, /* index:58, gain:5.43750db -> x1.870144, again:x1.870144, dgain:x1 */{0x003c}, /* index:59, gain:5.53125db -> x1.890438, again:x1.890438, dgain:x1 */{0x003d}, /* index:60, gain:5.62500db -> x1.910953, again:x1.910953, dgain:x1 */{0x003d}, /* index:61, gain:5.71875db -> x1.931690, again:x1.931690, dgain:x1 */{0x003e}, /* index:62, gain:5.81250db -> x1.952653, again:x1.952653, dgain:x1 */{0x003f}, /* index:63, gain:5.90625db -> x1.973842, again:x1.973842, dgain:x1 */{0x003f}, /* index:64, gain:6.00000db -> x1.995262, again:x1.995262, dgain:x1 */{0x0420}, /* index:65, gain:6.09375db -> x2.016915, again:x2.016915, dgain:x1 */{0x0420}, /* index:66, gain:6.18750db -> x2.038802, again:x2.038802, dgain:x1 */{0x0420}, /* index:67, gain:6.28125db -> x2.060927, again:x2.060927, dgain:x1 */{0x0421}, /* index:68, gain:6.37500db -> x2.083291, again:x2.083291, dgain:x1 */{0x0421}, /* index:69, gain:6.46875db -> x2.105899, again:x2.105899, dgain:x1 */{0x0422}, /* index:70, gain:6.56250db -> x2.128752, again:x2.128752, dgain:x1 */{0x0422}, /* index:71, gain:6.65625db -> x2.151852, again:x2.151852, dgain:x1 */{0x0422}, /* index:72, gain:6.75000db -> x2.175204, again:x2.175204, dgain:x1 */{0x0423}, /* index:73, gain:6.84375db -> x2.198809, again:x2.198809, dgain:x1 */{0x0423}, /* index:74, gain:6.93750db -> x2.222670, again:x2.222670, dgain:x1 */{0x0423}, /* index:75, gain:7.03125db -> x2.246790, again:x2.246790, dgain:x1 */{0x0424}, /* index:76, gain:7.12500db -> x2.271172, again:x2.271172, dgain:x1 */{0x0424}, /* index:77, gain:7.21875db -> x2.295818, again:x2.295818, dgain:x1 */{0x0425}, /* index:78, gain:7.31250db -> x2.320732, again:x2.320732, dgain:x1 */{0x0425}, /* index:79, gain:7.40625db -> x2.345916, again:x2.345916, dgain:x1 */{0x0425}, /* index:80, gain:7.50000db -> x2.371374, again:x2.371374, dgain:x1 */{0x0426}, /* index:81, gain:7.59375db -> x2.397107, again:x2.397107, dgain:x1 */{0x0426}, /* index:82, gain:7.68750db -> x2.423120, again:x2.423120, dgain:x1 */{0x0427}, /* index:83, gain:7.78125db -> x2.449416, again:x2.449416, dgain:x1 */{0x0427}, /* index:84, gain:7.87500db -> x2.475996, again:x2.475996, dgain:x1 */{0x0428}, /* index:85, gain:7.96875db -> x2.502865, again:x2.502865, dgain:x1 */{0x0428}, /* index:86, gain:8.06250db -> x2.530026, again:x2.530026, dgain:x1 */{0x0428}, /* index:87, gain:8.15625db -> x2.557482, again:x2.557482, dgain:x1 */{0x0429}, /* index:88, gain:8.25000db -> x2.585235, again:x2.585235, dgain:x1 */{0x0429}, /* index:89, gain:8.34375db -> x2.613289, again:x2.613289, dgain:x1 */{0x042a}, /* index:90, gain:8.43750db -> x2.641648, again:x2.641648, dgain:x1 */{0x042a}, /* index:91, gain:8.53125db -> x2.670315, again:x2.670315, dgain:x1 */{0x042b}, /* index:92, gain:8.62500db -> x2.699293, again:x2.699293, dgain:x1 */{0x042b}, /* index:93, gain:8.71875db -> x2.728585, again:x2.728585, dgain:x1 */{0x042c}, /* index:94, gain:8.81250db -> x2.758195, again:x2.758195, dgain:x1 */{0x042c}, /* index:95, gain:8.90625db -> x2.788127, again:x2.788127, dgain:x1 */{0x042d}, /* index:96, gain:9.00000db -> x2.818383, again:x2.818383, dgain:x1 */{0x042d}, /* index:97, gain:9.09375db -> x2.848968, again:x2.848968, dgain:x1 */{0x042e}, /* index:98, gain:9.18750db -> x2.879884, again:x2.879884, dgain:x1 */{0x042e}, /* index:99, gain:9.28125db -> x2.911136, again:x2.911136, dgain:x1 */{0x042f}, /* index:100, gain:9.37500db -> x2.942727, again:x2.942727, dgain:x1 */{0x042f}, /* index:101, gain:9.46875db -> x2.974661, again:x2.974661, dgain:x1 */{0x0430}, /* index:102, gain:9.56250db -> x3.006942, again:x3.006942, dgain:x1 */{0x0430}, /* index:103, gain:9.65625db -> x3.039572, again:x3.039572, dgain:x1 */{0x0431}, /* index:104, gain:9.75000db -> x3.072557, again:x3.072557, dgain:x1 */{0x0431}, /* index:105, gain:9.84375db -> x3.105900, again:x3.105900, dgain:x1 */{0x0432}, /* index:106, gain:9.93750db -> x3.139605, again:x3.139605, dgain:x1 */{0x0432}, /* index:107, gain:10.03125db -> x3.173675, again:x3.173675, dgain:x1 */{0x0433}, /* index:108, gain:10.12500db -> x3.208116, again:x3.208116, dgain:x1 */{0x0433}, /* index:109, gain:10.21875db -> x3.242930, again:x3.242930, dgain:x1 */{0x0434}, /* index:110, gain:10.31250db -> x3.278121, again:x3.278121, dgain:x1 */{0x0435}, /* index:111, gain:10.40625db -> x3.313695, again:x3.313695, dgain:x1 */{0x0435}, /* index:112, gain:10.50000db -> x3.349654, again:x3.349654, dgain:x1 */{0x0436}, /* index:113, gain:10.59375db -> x3.386004, again:x3.386004, dgain:x1 */{0x0436}, /* index:114, gain:10.68750db -> x3.422749, again:x3.422749, dgain:x1 */{0x0437}, /* index:115, gain:10.78125db -> x3.459892, again:x3.459892, dgain:x1 */{0x0437}, /* index:116, gain:10.87500db -> x3.497438, again:x3.497438, dgain:x1 */{0x0438}, /* index:117, gain:10.96875db -> x3.535391, again:x3.535391, dgain:x1 */{0x0439}, /* index:118, gain:11.06250db -> x3.573757, again:x3.573757, dgain:x1 */{0x0439}, /* index:119, gain:11.15625db -> x3.612539, again:x3.612539, dgain:x1 */{0x043a}, /* index:120, gain:11.25000db -> x3.651741, again:x3.651741, dgain:x1 */{0x043b}, /* index:121, gain:11.34375db -> x3.691369, again:x3.691369, dgain:x1 */{0x043b}, /* index:122, gain:11.43750db -> x3.731427, again:x3.731427, dgain:x1 */{0x043c}, /* index:123, gain:11.53125db -> x3.771920, again:x3.771920, dgain:x1 */{0x043d}, /* index:124, gain:11.62500db -> x3.812853, again:x3.812853, dgain:x1 */{0x043d}, /* index:125, gain:11.71875db -> x3.854229, again:x3.854229, dgain:x1 */{0x043e}, /* index:126, gain:11.81250db -> x3.896054, again:x3.896054, dgain:x1 */{0x043f}, /* index:127, gain:11.90625db -> x3.938333, again:x3.938333, dgain:x1 */{0x043f}, /* index:128, gain:12.00000db -> x3.981072, again:x3.981072, dgain:x1 */{0x0c20}, /* index:129, gain:12.09375db -> x4.024274, again:x4.024274, dgain:x1 */{0x0c20}, /* index:130, gain:12.18750db -> x4.067944, again:x4.067944, dgain:x1 */{0x0c20}, /* index:131, gain:12.28125db -> x4.112089, again:x4.112089, dgain:x1 */{0x0c21}, /* index:132, gain:12.37500db -> x4.156712, again:x4.156712, dgain:x1 */{0x0c21}, /* index:133, gain:12.46875db -> x4.201821, again:x4.201821, dgain:x1 */{0x0c21}, /* index:134, gain:12.56250db -> x4.247418, again:x4.247418, dgain:x1 */{0x0c22}, /* index:135, gain:12.65625db -> x4.293510, again:x4.293510, dgain:x1 */{0x0c22}, /* index:136, gain:12.75000db -> x4.340103, again:x4.340103, dgain:x1 */{0x0c23}, /* index:137, gain:12.84375db -> x4.387200, again:x4.387200, dgain:x1 */{0x0c23}, /* index:138, gain:12.93750db -> x4.434810, again:x4.434810, dgain:x1 */{0x0c23}, /* index:139, gain:13.03125db -> x4.482936, again:x4.482936, dgain:x1 */{0x0c24}, /* index:140, gain:13.12500db -> x4.531584, again:x4.531584, dgain:x1 */{0x0c24}, /* index:141, gain:13.21875db -> x4.580759, again:x4.580759, dgain:x1 */{0x0c25}, /* index:142, gain:13.31250db -> x4.630469, again:x4.630469, dgain:x1 */{0x0c25}, /* index:143, gain:13.40625db -> x4.680719, again:x4.680719, dgain:x1 */{0x0c25}, /* index:144, gain:13.50000db -> x4.731513, again:x4.731513, dgain:x1 */{0x0c26}, /* index:145, gain:13.59375db -> x4.782858, again:x4.782858, dgain:x1 */{0x0c26}, /* index:146, gain:13.68750db -> x4.834761, again:x4.834761, dgain:x1 */{0x0c27}, /* index:147, gain:13.78125db -> x4.887227, again:x4.887227, dgain:x1 */{0x0c27}, /* index:148, gain:13.87500db -> x4.940262, again:x4.940262, dgain:x1 */{0x0c27}, /* index:149, gain:13.96875db -> x4.993873, again:x4.993873, dgain:x1 */{0x0c28}, /* index:150, gain:14.06250db -> x5.048066, again:x5.048066, dgain:x1 */{0x0c28}, /* index:151, gain:14.15625db -> x5.102846, again:x5.102846, dgain:x1 */{0x0c29}, /* index:152, gain:14.25000db -> x5.158221, again:x5.158221, dgain:x1 */{0x0c29}, /* index:153, gain:14.34375db -> x5.214198, again:x5.214198, dgain:x1 */{0x0c2a}, /* index:154, gain:14.43750db -> x5.270781, again:x5.270781, dgain:x1 */{0x0c2a}, /* index:155, gain:14.53125db -> x5.327979, again:x5.327979, dgain:x1 */{0x0c2b}, /* index:156, gain:14.62500db -> x5.385797, again:x5.385797, dgain:x1 */{0x0c2b}, /* index:157, gain:14.71875db -> x5.444243, again:x5.444243, dgain:x1 */{0x0c2c}, /* index:158, gain:14.81250db -> x5.503323, again:x5.503323, dgain:x1 */{0x0c2c}, /* index:159, gain:14.90625db -> x5.563044, again:x5.563044, dgain:x1 */{0x0c2c}, /* index:160, gain:15.00000db -> x5.623413, again:x5.623413, dgain:x1 */{0x0c2d}, /* index:161, gain:15.09375db -> x5.684437, again:x5.684437, dgain:x1 */{0x0c2d}, /* index:162, gain:15.18750db -> x5.746124, again:x5.746124, dgain:x1 */{0x0c2e}, /* index:163, gain:15.28125db -> x5.808480, again:x5.808480, dgain:x1 */{0x0c2e}, /* index:164, gain:15.37500db -> x5.871513, again:x5.871513, dgain:x1 */{0x0c2f}, /* index:165, gain:15.46875db -> x5.935229, again:x5.935229, dgain:x1 */{0x0c2f}, /* index:166, gain:15.56250db -> x5.999637, again:x5.999637, dgain:x1 */{0x0c30}, /* index:167, gain:15.65625db -> x6.064744, again:x6.064744, dgain:x1 */{0x0c31}, /* index:168, gain:15.75000db -> x6.130558, again:x6.130558, dgain:x1 */{0x0c31}, /* index:169, gain:15.84375db -> x6.197086, again:x6.197086, dgain:x1 */{0x0c32}, /* index:170, gain:15.93750db -> x6.264335, again:x6.264335, dgain:x1 */{0x0c32}, /* index:171, gain:16.03125db -> x6.332315, again:x6.332315, dgain:x1 */{0x0c33}, /* index:172, gain:16.12500db -> x6.401032, again:x6.401032, dgain:x1 */{0x0c33}, /* index:173, gain:16.21875db -> x6.470495, again:x6.470495, dgain:x1 */{0x0c34}, /* index:174, gain:16.31250db -> x6.540712, again:x6.540712, dgain:x1 */{0x0c34}, /* index:175, gain:16.40625db -> x6.611690, again:x6.611690, dgain:x1 */{0x0c35}, /* index:176, gain:16.50000db -> x6.683439, again:x6.683439, dgain:x1 */{0x0c36}, /* index:177, gain:16.59375db -> x6.755966, again:x6.755966, dgain:x1 */{0x0c36}, /* index:178, gain:16.68750db -> x6.829282, again:x6.829282, dgain:x1 */{0x0c37}, /* index:179, gain:16.78125db -> x6.903392, again:x6.903392, dgain:x1 */{0x0c37}, /* index:180, gain:16.87500db -> x6.978306, again:x6.978306, dgain:x1 */{0x0c38}, /* index:181, gain:16.96875db -> x7.054033, again:x7.054033, dgain:x1 */{0x0c39}, /* index:182, gain:17.06250db -> x7.130582, again:x7.130582, dgain:x1 */{0x0c39}, /* index:183, gain:17.15625db -> x7.207963, again:x7.207963, dgain:x1 */{0x0c3a}, /* index:184, gain:17.25000db -> x7.286182, again:x7.286182, dgain:x1 */{0x0c3a}, /* index:185, gain:17.34375db -> x7.365250, again:x7.365250, dgain:x1 */{0x0c3b}, /* index:186, gain:17.43750db -> x7.445176, again:x7.445176, dgain:x1 */{0x0c3c}, /* index:187, gain:17.53125db -> x7.525970, again:x7.525970, dgain:x1 */{0x0c3c}, /* index:188, gain:17.62500db -> x7.607641, again:x7.607641, dgain:x1 */{0x0c3d}, /* index:189, gain:17.71875db -> x7.690198, again:x7.690198, dgain:x1 */{0x0c3e}, /* index:190, gain:17.81250db -> x7.773650, again:x7.773650, dgain:x1 */{0x0c3e}, /* index:191, gain:17.90625db -> x7.858008, again:x7.858008, dgain:x1 */{0x0c3f}, /* index:192, gain:18.00000db -> x7.943282, again:x7.943282, dgain:x1 */{0x1c20}, /* index:193, gain:18.09375db -> x8.029482, again:x8.029482, dgain:x1 */{0x1c20}, /* index:194, gain:18.18750db -> x8.116616, again:x8.116616, dgain:x1 */{0x1c20}, /* index:195, gain:18.28125db -> x8.204696, again:x8.204696, dgain:x1 */{0x1c21}, /* index:196, gain:18.37500db -> x8.293732, again:x8.293732, dgain:x1 */{0x1c21}, /* index:197, gain:18.46875db -> x8.383734, again:x8.383734, dgain:x1 */{0x1c21}, /* index:198, gain:18.56250db -> x8.474713, again:x8.474713, dgain:x1 */{0x1c22}, /* index:199, gain:18.65625db -> x8.566679, again:x8.566679, dgain:x1 */{0x1c22}, /* index:200, gain:18.75000db -> x8.659643, again:x8.659643, dgain:x1 */{0x1c23}, /* index:201, gain:18.84375db -> x8.753616, again:x8.753616, dgain:x1 */{0x1c23}, /* index:202, gain:18.93750db -> x8.848608, again:x8.848608, dgain:x1 */{0x1c23}, /* index:203, gain:19.03125db -> x8.944633, again:x8.944633, dgain:x1 */{0x1c24}, /* index:204, gain:19.12500db -> x9.041698, again:x9.041698, dgain:x1 */{0x1c24}, /* index:205, gain:19.21875db -> x9.139817, again:x9.139817, dgain:x1 */{0x1c24}, /* index:206, gain:19.31250db -> x9.239000, again:x9.239000, dgain:x1 */{0x1c25}, /* index:207, gain:19.40625db -> x9.339260, again:x9.339260, dgain:x1 */{0x1c25}, /* index:208, gain:19.50000db -> x9.440609, again:x9.440609, dgain:x1 */{0x1c26}, /* index:209, gain:19.59375db -> x9.543057, again:x9.543057, dgain:x1 */{0x1c26}, /* index:210, gain:19.68750db -> x9.646616, again:x9.646616, dgain:x1 */{0x1c27}, /* index:211, gain:19.78125db -> x9.751299, again:x9.751299, dgain:x1 */{0x1c27}, /* index:212, gain:19.87500db -> x9.857118, again:x9.857118, dgain:x1 */{0x1c27}, /* index:213, gain:19.96875db -> x9.964087, again:x9.964087, dgain:x1 */{0x1c28}, /* index:214, gain:20.06250db -> x10.072214, again:x10.072214, dgain:x1 */{0x1c28}, /* index:215, gain:20.15625db -> x10.181517, again:x10.181517, dgain:x1 */{0x1c29}, /* index:216, gain:20.25000db -> x10.292006, again:x10.292006, dgain:x1 */{0x1c29}, /* index:217, gain:20.34375db -> x10.403692, again:x10.403692, dgain:x1 */{0x1c2a}, /* index:218, gain:20.43750db -> x10.516592, again:x10.516592, dgain:x1 */{0x1c2a}, /* index:219, gain:20.53125db -> x10.630714, again:x10.630714, dgain:x1 */{0x1c2a}, /* index:220, gain:20.62500db -> x10.746078, again:x10.746078, dgain:x1 */{0x1c2b}, /* index:221, gain:20.71875db -> x10.862694, again:x10.862694, dgain:x1 */{0x1c2b}, /* index:222, gain:20.81250db -> x10.980572, again:x10.980572, dgain:x1 */{0x1c2c}, /* index:223, gain:20.90625db -> x11.099733, again:x11.099733, dgain:x1 */{0x1c2c}, /* index:224, gain:21.00000db -> x11.220183, again:x11.220183, dgain:x1 */{0x1c2d}, /* index:225, gain:21.09375db -> x11.341944, again:x11.341944, dgain:x1 */{0x1c2d}, /* index:226, gain:21.18750db -> x11.465026, again:x11.465026, dgain:x1 */{0x1c2e}, /* index:227, gain:21.28125db -> x11.589441, again:x11.589441, dgain:x1 */{0x1c2e}, /* index:228, gain:21.37500db -> x11.715209, again:x11.715209, dgain:x1 */{0x1c2f}, /* index:229, gain:21.46875db -> x11.842338, again:x11.842338, dgain:x1 */{0x1c2f}, /* index:230, gain:21.56250db -> x11.970850, again:x11.970850, dgain:x1 */{0x1c30}, /* index:231, gain:21.65625db -> x12.100757, again:x12.100757, dgain:x1 */{0x1c30}, /* index:232, gain:21.75000db -> x12.232071, again:x12.232071, dgain:x1 */{0x1c31}, /* index:233, gain:21.84375db -> x12.364812, again:x12.364812, dgain:x1 */{0x1c31}, /* index:234, gain:21.93750db -> x12.498991, again:x12.498991, dgain:x1 */{0x1c32}, /* index:235, gain:22.03125db -> x12.634629, again:x12.634629, dgain:x1 */{0x1c33}, /* index:236, gain:22.12500db -> x12.771739, again:x12.771739, dgain:x1 */{0x1c33}, /* index:237, gain:22.21875db -> x12.910334, again:x12.910334, dgain:x1 */{0x1c34}, /* index:238, gain:22.31250db -> x13.050436, again:x13.050436, dgain:x1 */{0x1c34}, /* index:239, gain:22.40625db -> x13.192055, again:x13.192055, dgain:x1 */{0x1c35}, /* index:240, gain:22.50000db -> x13.335214, again:x13.335214, dgain:x1 */{0x1c35}, /* index:241, gain:22.59375db -> x13.479927, again:x13.479927, dgain:x1 */{0x1c36}, /* index:242, gain:22.68750db -> x13.626207, again:x13.626207, dgain:x1 */{0x1c37}, /* index:243, gain:22.78125db -> x13.774078, again:x13.774078, dgain:x1 */{0x1c37}, /* index:244, gain:22.87500db -> x13.923549, again:x13.923549, dgain:x1 */{0x1c38}, /* index:245, gain:22.96875db -> x14.074647, again:x14.074647, dgain:x1 */{0x1c38}, /* index:246, gain:23.06250db -> x14.227384, again:x14.227384, dgain:x1 */{0x1c39}, /* index:247, gain:23.15625db -> x14.381775, again:x14.381775, dgain:x1 */{0x1c3a}, /* index:248, gain:23.25000db -> x14.537845, again:x14.537845, dgain:x1 */{0x1c3a}, /* index:249, gain:23.34375db -> x14.695604, again:x14.695604, dgain:x1 */{0x1c3b}, /* index:250, gain:23.43750db -> x14.855080, again:x14.855080, dgain:x1 */{0x1c3c}, /* index:251, gain:23.53125db -> x15.016287, again:x15.016287, dgain:x1 */{0x1c3c}, /* index:252, gain:23.62500db -> x15.179238, again:x15.179238, dgain:x1 */{0x1c3d}, /* index:253, gain:23.71875db -> x15.343962, again:x15.343962, dgain:x1 */{0x1c3e}, /* index:254, gain:23.81250db -> x15.510470, again:x15.510470, dgain:x1 */{0x1c3e}, /* index:255, gain:23.90625db -> x15.678788, again:x15.678788, dgain:x1 */{0x1c3f}, /* index:256, gain:24.00000db -> x15.848934, again:x15.848934, dgain:x1 */{0x3c20}, /* index:257, gain:24.09375db -> x16.020921, again:x8.010460, dgain:x2 */{0x3c20}, /* index:258, gain:24.18750db -> x16.194779, again:x8.097389, dgain:x2 */{0x3c20}, /* index:259, gain:24.28125db -> x16.370519, again:x8.185260, dgain:x2 */{0x3c21}, /* index:260, gain:24.37500db -> x16.548171, again:x8.274085, dgain:x2 */{0x3c21}, /* index:261, gain:24.46875db -> x16.727751, again:x8.363875, dgain:x2 */{0x3c21}, /* index:262, gain:24.56250db -> x16.909275, again:x8.454637, dgain:x2 */{0x3c22}, /* index:263, gain:24.65625db -> x17.092773, again:x8.546386, dgain:x2 */{0x3c22}, /* index:264, gain:24.75000db -> x17.278258, again:x8.639129, dgain:x2 */{0x3c22}, /* index:265, gain:24.84375db -> x17.465760, again:x8.732880, dgain:x2 */{0x3c23}, /* index:266, gain:24.93750db -> x17.655298, again:x8.827649, dgain:x2 */{0x3c23}, /* index:267, gain:25.03125db -> x17.846887, again:x8.923444, dgain:x2 */{0x3c24}, /* index:268, gain:25.12500db -> x18.040560, again:x9.020280, dgain:x2 */{0x3c24}, /* index:269, gain:25.21875db -> x18.236330, again:x9.118165, dgain:x2 */{0x3c24}, /* index:270, gain:25.31250db -> x18.434230, again:x9.217115, dgain:x2 */{0x3c25}, /* index:271, gain:25.40625db -> x18.634277, again:x9.317139, dgain:x2 */{0x3c25}, /* index:272, gain:25.50000db -> x18.836490, again:x9.418245, dgain:x2 */{0x3c26}, /* index:273, gain:25.59375db -> x19.040902, again:x9.520451, dgain:x2 */{0x3c26}, /* index:274, gain:25.68750db -> x19.247528, again:x9.623764, dgain:x2 */{0x3c26}, /* index:275, gain:25.78125db -> x19.456401, again:x9.728200, dgain:x2 */{0x3c27}, /* index:276, gain:25.87500db -> x19.667540, again:x9.833770, dgain:x2 */{0x3c27}, /* index:277, gain:25.96875db -> x19.880966, again:x9.940483, dgain:x2 */{0x3c28}, /* index:278, gain:26.06250db -> x20.096713, again:x10.048356, dgain:x2 */{0x3c28}, /* index:279, gain:26.15625db -> x20.314795, again:x10.157398, dgain:x2 */{0x3c29}, /* index:280, gain:26.25000db -> x20.535250, again:x10.267625, dgain:x2 */{0x3c29}, /* index:281, gain:26.34375db -> x20.758098, again:x10.379049, dgain:x2 */{0x3c29}, /* index:282, gain:26.43750db -> x20.983357, again:x10.491679, dgain:x2 */{0x3c2a}, /* index:283, gain:26.53125db -> x21.211067, again:x10.605534, dgain:x2 */{0x3c2a}, /* index:284, gain:26.62500db -> x21.441243, again:x10.720621, dgain:x2 */{0x3c2b}, /* index:285, gain:26.71875db -> x21.673922, again:x10.836961, dgain:x2 */{0x3c2b}, /* index:286, gain:26.81250db -> x21.909126, again:x10.954563, dgain:x2 */{0x3c2c}, /* index:287, gain:26.90625db -> x22.146876, again:x11.073438, dgain:x2 */{0x3c2c}, /* index:288, gain:27.00000db -> x22.387213, again:x11.193606, dgain:x2 */{0x3c2d}, /* index:289, gain:27.09375db -> x22.630151, again:x11.315076, dgain:x2 */{0x3c2d}, /* index:290, gain:27.18750db -> x22.875732, again:x11.437866, dgain:x2 */{0x3c2e}, /* index:291, gain:27.28125db -> x23.123978, again:x11.561989, dgain:x2 */{0x3c2e}, /* index:292, gain:27.37500db -> x23.374912, again:x11.687456, dgain:x2 */{0x3c2f}, /* index:293, gain:27.46875db -> x23.628575, again:x11.814287, dgain:x2 */{0x3c2f}, /* index:294, gain:27.56250db -> x23.884984, again:x11.942492, dgain:x2 */{0x3c30}, /* index:295, gain:27.65625db -> x24.144182, again:x12.072091, dgain:x2 */{0x3c30}, /* index:296, gain:27.75000db -> x24.406193, again:x12.203097, dgain:x2 */{0x3c31}, /* index:297, gain:27.84375db -> x24.671041, again:x12.335521, dgain:x2 */{0x3c31}, /* index:298, gain:27.93750db -> x24.938770, again:x12.469385, dgain:x2 */{0x3c32}, /* index:299, gain:28.03125db -> x25.209397, again:x12.604698, dgain:x2 */{0x3c32}, /* index:300, gain:28.12500db -> x25.482967, again:x12.741484, dgain:x2 */{0x3c33}, /* index:301, gain:28.21875db -> x25.759507, again:x12.879754, dgain:x2 */{0x3c34}, /* index:302, gain:28.31250db -> x26.039040, again:x13.019520, dgain:x2 */{0x3c34}, /* index:303, gain:28.40625db -> x26.321614, again:x13.160807, dgain:x2 */{0x3c35}, /* index:304, gain:28.50000db -> x26.607248, again:x13.303624, dgain:x2 */{0x3c35}, /* index:305, gain:28.59375db -> x26.895988, again:x13.447994, dgain:x2 */{0x3c36}, /* index:306, gain:28.68750db -> x27.187861, again:x13.593931, dgain:x2 */{0x3c36}, /* index:307, gain:28.78125db -> x27.482895, again:x13.741447, dgain:x2 */{0x3c37}, /* index:308, gain:28.87500db -> x27.781137, again:x13.890569, dgain:x2 */{0x3c38}, /* index:309, gain:28.96875db -> x28.082609, again:x14.041304, dgain:x2 */{0x3c38}, /* index:310, gain:29.06250db -> x28.387360, again:x14.193680, dgain:x2 */{0x3c39}, /* index:311, gain:29.15625db -> x28.695417, again:x14.347709, dgain:x2 */{0x3c3a}, /* index:312, gain:29.25000db -> x29.006810, again:x14.503405, dgain:x2 */{0x3c3a}, /* index:313, gain:29.34375db -> x29.321590, again:x14.660795, dgain:x2 */{0x3c3b}, /* index:314, gain:29.43750db -> x29.639778, again:x14.819889, dgain:x2 */{0x3c3b}, /* index:315, gain:29.53125db -> x29.961427, again:x14.980714, dgain:x2 */{0x3c3c}, /* index:316, gain:29.62500db -> x30.286567, again:x15.143283, dgain:x2 */{0x3c3d}, /* index:317, gain:29.71875db -> x30.615226, again:x15.307613, dgain:x2 */{0x3c3d}, /* index:318, gain:29.81250db -> x30.947461, again:x15.473730, dgain:x2 */{0x3c3e}, /* index:319, gain:29.90625db -> x31.283292, again:x15.641646, dgain:x2 */{0x3c3f}, /* index:320, gain:30.00000db -> x31.622777, again:x15.811388, dgain:x2 */{0x3c3f}, /* index:321, gain:30.09375db -> x31.965945, again:x15.982972, dgain:x2 */{0x7c20}, /* index:322, gain:30.18750db -> x32.312829, again:x8.078207, dgain:x4 */{0x7c20}, /* index:323, gain:30.28125db -> x32.663485, again:x8.165871, dgain:x4 */{0x7c21}, /* index:324, gain:30.37500db -> x33.017938, again:x8.254485, dgain:x4 */{0x7c21}, /* index:325, gain:30.46875db -> x33.376247, again:x8.344062, dgain:x4 */{0x7c21}, /* index:326, gain:30.56250db -> x33.738444, again:x8.434611, dgain:x4 */{0x7c22}, /* index:327, gain:30.65625db -> x34.104562, again:x8.526140, dgain:x4 */{0x7c22}, /* index:328, gain:30.75000db -> x34.474663, again:x8.618666, dgain:x4 */{0x7c22}, /* index:329, gain:30.84375db -> x34.848770, again:x8.712192, dgain:x4 */{0x7c23}, /* index:330, gain:30.93750db -> x35.226947, again:x8.806737, dgain:x4 */{0x7c23}, /* index:331, gain:31.03125db -> x35.609227, again:x8.902307, dgain:x4 */{0x7c23}, /* index:332, gain:31.12500db -> x35.995646, again:x8.998912, dgain:x4 */{0x7c24}, /* index:333, gain:31.21875db -> x36.386269, again:x9.096567, dgain:x4 */{0x7c24}, /* index:334, gain:31.31250db -> x36.781120, again:x9.195280, dgain:x4 */{0x7c25}, /* index:335, gain:31.40625db -> x37.180267, again:x9.295067, dgain:x4 */{0x7c25}, /* index:336, gain:31.50000db -> x37.583745, again:x9.395936, dgain:x4 */{0x7c25}, /* index:337, gain:31.59375db -> x37.991591, again:x9.497898, dgain:x4 */{0x7c26}, /* index:338, gain:31.68750db -> x38.403873, again:x9.600968, dgain:x4 */{0x7c26}, /* index:339, gain:31.78125db -> x38.820619, again:x9.705155, dgain:x4 */{0x7c27}, /* index:340, gain:31.87500db -> x39.241898, again:x9.810474, dgain:x4 */{0x7c27}, /* index:341, gain:31.96875db -> x39.667748, again:x9.916937, dgain:x4 */{0x7c28}, /* index:342, gain:32.06250db -> x40.098209, again:x10.024552, dgain:x4 */{0x7c28}, /* index:343, gain:32.15625db -> x40.533352, again:x10.133338, dgain:x4 */{0x7c28}, /* index:344, gain:32.25000db -> x40.973206, again:x10.243302, dgain:x4 */{0x7c29}, /* index:345, gain:32.34375db -> x41.417845, again:x10.354461, dgain:x4 */{0x7c29}, /* index:346, gain:32.43750db -> x41.867309, again:x10.466827, dgain:x4 */{0x7c2a}, /* index:347, gain:32.53125db -> x42.321639, again:x10.580410, dgain:x4 */{0x7c2a}, /* index:348, gain:32.62500db -> x42.780911, again:x10.695228, dgain:x4 */{0x7c2b}, /* index:349, gain:32.71875db -> x43.245154, again:x10.811289, dgain:x4 */{0x7c2b}, /* index:350, gain:32.81250db -> x43.714448, again:x10.928612, dgain:x4 */{0x7c2c}, /* index:351, gain:32.90625db -> x44.188835, again:x11.047209, dgain:x4 */{0x7c2c}, /* index:352, gain:33.00000db -> x44.668357, again:x11.167089, dgain:x4 */{0x7c2d}, /* index:353, gain:33.09375db -> x45.153095, again:x11.288274, dgain:x4 */{0x7c2d}, /* index:354, gain:33.18750db -> x45.643081, again:x11.410770, dgain:x4 */{0x7c2e}, /* index:355, gain:33.28125db -> x46.138397, again:x11.534599, dgain:x4 */{0x7c2e}, /* index:356, gain:33.37500db -> x46.639088, again:x11.659772, dgain:x4 */{0x7c2f}, /* index:357, gain:33.46875db -> x47.145199, again:x11.786300, dgain:x4 */{0x7c2f}, /* index:358, gain:33.56250db -> x47.656816, again:x11.914204, dgain:x4 */{0x7c30}, /* index:359, gain:33.65625db -> x48.173972, again:x12.043493, dgain:x4 */{0x7c30}, /* index:360, gain:33.75000db -> x48.696753, again:x12.174188, dgain:x4 */{0x7c31}, /* index:361, gain:33.84375db -> x49.225207, again:x12.306302, dgain:x4 */{0x7c31}, /* index:362, gain:33.93750db -> x49.759382, again:x12.439845, dgain:x4 */{0x7c32}, /* index:363, gain:34.03125db -> x50.299367, again:x12.574842, dgain:x4 */{0x7c32}, /* index:364, gain:34.12500db -> x50.845199, again:x12.711300, dgain:x4 */{0x7c33}, /* index:365, gain:34.21875db -> x51.396968, again:x12.849242, dgain:x4 */{0x7c33}, /* index:366, gain:34.31250db -> x51.954725, again:x12.988681, dgain:x4 */{0x7c34}, /* index:367, gain:34.40625db -> x52.518520, again:x13.129630, dgain:x4 */{0x7c35}, /* index:368, gain:34.50000db -> x53.088447, again:x13.272112, dgain:x4 */{0x7c35}, /* index:369, gain:34.59375db -> x53.664545, again:x13.416136, dgain:x4 */{0x7c36}, /* index:370, gain:34.68750db -> x54.246909, again:x13.561727, dgain:x4 */{0x7c36}, /* index:371, gain:34.78125db -> x54.835593, again:x13.708898, dgain:x4 */{0x7c37}, /* index:372, gain:34.87500db -> x55.430651, again:x13.857663, dgain:x4 */{0x7c38}, /* index:373, gain:34.96875db -> x56.032181, again:x14.008045, dgain:x4 */{0x7c38}, /* index:374, gain:35.06250db -> x56.640223, again:x14.160056, dgain:x4 */{0x7c39}, /* index:375, gain:35.15625db -> x57.254879, again:x14.313720, dgain:x4 */{0x7c39}, /* index:376, gain:35.25000db -> x57.876205, again:x14.469051, dgain:x4 */{0x7c3a}, /* index:377, gain:35.34375db -> x58.504258, again:x14.626065, dgain:x4 */{0x7c3b}, /* index:378, gain:35.43750db -> x59.139143, again:x14.784786, dgain:x4 */{0x7c3b}, /* index:379, gain:35.53125db -> x59.780900, again:x14.945225, dgain:x4 */{0x7c3c}, /* index:380, gain:35.62500db -> x60.429639, again:x15.107410, dgain:x4 */{0x7c3d}, /* index:381, gain:35.71875db -> x61.085418, again:x15.271354, dgain:x4 */{0x7c3d}, /* index:382, gain:35.81250db -> x61.748296, again:x15.437074, dgain:x4 */{0x7c3e}, /* index:383, gain:35.90625db -> x62.418384, again:x15.604596, dgain:x4 */{0x7c3f}, /* index:384, gain:36.00000db -> x63.095728, again:x15.773932, dgain:x4 */{0x7c3f}, /* index:385, gain:36.09375db -> x63.780438, again:x15.945110, dgain:x4 */{0xfc20}, /* index:386, gain:36.18750db -> x64.472580, again:x8.059072, dgain:x8 */{0xfc20}, /* index:387, gain:36.28125db -> x65.172214, again:x8.146527, dgain:x8 */{0xfc20}, /* index:388, gain:36.37500db -> x65.879459, again:x8.234932, dgain:x8 */{0xfc21}, /* index:389, gain:36.46875db -> x66.594360, again:x8.324295, dgain:x8 */{0xfc21}, /* index:390, gain:36.56250db -> x67.317038, again:x8.414630, dgain:x8 */{0xfc22}, /* index:391, gain:36.65625db -> x68.047559, again:x8.505945, dgain:x8 */{0xfc22}, /* index:392, gain:36.75000db -> x68.785987, again:x8.598248, dgain:x8 */{0xfc22}, /* index:393, gain:36.84375db -> x69.532449, again:x8.691556, dgain:x8 */{0xfc23}, /* index:394, gain:36.93750db -> x70.286991, again:x8.785874, dgain:x8 */{0xfc23}, /* index:395, gain:37.03125db -> x71.049741, again:x8.881218, dgain:x8 */{0xfc23}, /* index:396, gain:37.12500db -> x71.820768, again:x8.977596, dgain:x8 */{0xfc24}, /* index:397, gain:37.21875db -> x72.600143, again:x9.075018, dgain:x8 */{0xfc24}, /* index:398, gain:37.31250db -> x73.387995, again:x9.173499, dgain:x8 */{0xfc25}, /* index:399, gain:37.40625db -> x74.184377, again:x9.273047, dgain:x8 */{0xfc25}, /* index:400, gain:37.50000db -> x74.989421, again:x9.373678, dgain:x8 */{0xfc25}, /* index:401, gain:37.59375db -> x75.803201, again:x9.475400, dgain:x8 */{0xfc26}, /* index:402, gain:37.68750db -> x76.625792, again:x9.578224, dgain:x8 */{0xfc26}, /* index:403, gain:37.78125db -> x77.457330, again:x9.682166, dgain:x8 */{0xfc27}, /* index:404, gain:37.87500db -> x78.297871, again:x9.787234, dgain:x8 */{0xfc27}, /* index:405, gain:37.96875db -> x79.147554, again:x9.893444, dgain:x8 */{0xfc28}, /* index:406, gain:38.06250db -> x80.006459, again:x10.000807, dgain:x8 */{0xfc28}, /* index:407, gain:38.15625db -> x80.874662, again:x10.109333, dgain:x8 */{0xfc28}, /* index:408, gain:38.25000db -> x81.752308, again:x10.219039, dgain:x8 */{0xfc29}, /* index:409, gain:38.34375db -> x82.639457, again:x10.329932, dgain:x8 */{0xfc29}, /* index:410, gain:38.43750db -> x83.536255, again:x10.442032, dgain:x8 */{0xfc2a}, /* index:411, gain:38.53125db -> x84.442785, again:x10.555348, dgain:x8 */{0xfc2a}, /* index:412, gain:38.62500db -> x85.359129, again:x10.669891, dgain:x8 */{0xfc2b}, /* index:413, gain:38.71875db -> x86.285441, again:x10.785680, dgain:x8 */{0xfc2b}, /* index:414, gain:38.81250db -> x87.221781, again:x10.902723, dgain:x8 */{0xfc2c}, /* index:415, gain:38.90625db -> x88.168307, again:x11.021038, dgain:x8 */{0xfc2c}, /* index:416, gain:39.00000db -> x89.125104, again:x11.140638, dgain:x8 */{0xfc2d}, /* index:417, gain:39.09375db -> x90.092259, again:x11.261532, dgain:x8 */{0xfc2d}, /* index:418, gain:39.18750db -> x91.069934, again:x11.383742, dgain:x8 */{0xfc2e}, /* index:419, gain:39.28125db -> x92.058194, again:x11.507274, dgain:x8 */{0xfc2e}, /* index:420, gain:39.37500db -> x93.057204, again:x11.632151, dgain:x8 */{0xfc2f}, /* index:421, gain:39.46875db -> x94.067055, again:x11.758382, dgain:x8 */{0xfc2f}, /* index:422, gain:39.56250db -> x95.087839, again:x11.885980, dgain:x8 */{0xfc30}, /* index:423, gain:39.65625db -> x96.119726, again:x12.014966, dgain:x8 */{0xfc30}, /* index:424, gain:39.75000db -> x97.162784, again:x12.145348, dgain:x8 */{0xfc31}, /* index:425, gain:39.84375db -> x98.217189, again:x12.277149, dgain:x8 */{0xfc31}, /* index:426, gain:39.93750db -> x99.283036, again:x12.410379, dgain:x8 */{0xfc32}, /* index:427, gain:40.03125db -> x100.360449, again:x12.545056, dgain:x8 */{0xfc32}, /* index:428, gain:40.12500db -> x101.449499, again:x12.681187, dgain:x8 */{0xfc33}, /* index:429, gain:40.21875db -> x102.550422, again:x12.818803, dgain:x8 */{0xfc33}, /* index:430, gain:40.31250db -> x103.663293, again:x12.957912, dgain:x8 */{0xfc34}, /* index:431, gain:40.40625db -> x104.788240, again:x13.098530, dgain:x8 */{0xfc34}, /* index:432, gain:40.50000db -> x105.925396, again:x13.240674, dgain:x8 */{0xfc35}, /* index:433, gain:40.59375db -> x107.074833, again:x13.384354, dgain:x8 */{0xfc36}, /* index:434, gain:40.68750db -> x108.236802, again:x13.529600, dgain:x8 */{0xfc36}, /* index:435, gain:40.78125db -> x109.411381, again:x13.676423, dgain:x8 */{0xfc37}, /* index:436, gain:40.87500db -> x110.598706, again:x13.824838, dgain:x8 */{0xfc37}, /* index:437, gain:40.96875db -> x111.798917, again:x13.974865, dgain:x8 */{0xfc38}, /* index:438, gain:41.06250db -> x113.012089, again:x14.126511, dgain:x8 */{0xfc39}, /* index:439, gain:41.15625db -> x114.238490, again:x14.279811, dgain:x8 */{0xfc39}, /* index:440, gain:41.25000db -> x115.478198, again:x14.434775, dgain:x8 */{0xfc3a}, /* index:441, gain:41.34375db -> x116.731361, again:x14.591420, dgain:x8 */{0xfc3a}, /* index:442, gain:41.43750db -> x117.998122, again:x14.749765, dgain:x8 */{0xfc3b}, /* index:443, gain:41.53125db -> x119.278565, again:x14.909821, dgain:x8 */{0xfc3c}, /* index:444, gain:41.62500db -> x120.572968, again:x15.071621, dgain:x8 */{0xfc3c}, /* index:445, gain:41.71875db -> x121.881418, again:x15.235177, dgain:x8 */{0xfc3d}, /* index:446, gain:41.81250db -> x123.204068, again:x15.400508, dgain:x8 */{0xfc3e}, /* index:447, gain:41.90625db -> x124.541071, again:x15.567634, dgain:x8 */{0xfc3e}, /* index:448, gain:42.00000db -> x125.892514, again:x15.736564, dgain:x8 */
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com