#include "SamsungSolomonVoiceW_Int.h"

#define C10LOG2									0x6054		// Q16.13(3.0102999)
#define Gain20_2Q15								1638
#define	TX_XD_LEVEL_V							0		
#define	TX_G_OLD_V								0

/* Gain Table */
const short TxAGC_Adaptime[4] = { 29789, 21845, 29789, 21845 };
const short TxAGC_Threshold[2] = { -2560, -8960 };	// DiamondVoice : { -1664, -7680 };
const short TxAGC_Slope[2] = { 1807, 0 };			// DiamondVoice : { 1807, -6144 };
const short TxAGC_MaxBoost[2] = { 0, 2048 };

const short TXAGCSm_WB[160] = { 205, 410, 614, 819, 1024, 1229, 1434, 1638, 1843, 2048, 2253, 2458, 2662, 2867, 3072, 3277, 3481, 3686, 3891, 4096, 4301, 4505, 4710, 4915, 5120, 5325, 5529, 5734, 5939, 6144, 6349, 6553, 6758, 6963, 7168, 7373, 7577, 7782, 7987, 8192, 8397, 8601, 8806, 9011, 9216, 9421, 9625, 9830, 10035, 10240, 10444, 10649, 10854, 11059, 11264, 11468, 11673, 11878, 12083, 12288, 12492, 12697, 12902, 13107, 13312, 13516, 13721, 13926, 14131, 14336, 14540, 14745, 14950, 15155, 15360, 15564, 15769, 15974, 16179, 16384, 16588, 16793, 16998, 17203, 17407, 17612, 17817, 18022, 18227, 18431, 18636, 18841, 19046, 19251, 19455, 19660, 19865, 20070, 20275, 20479, 20684, 20889, 21094, 21299, 21503, 21708, 21913, 22118, 22323, 22527, 22732, 22937, 23142, 23346, 23551, 23756, 23961, 24166, 24370, 24575, 24780, 24985, 25190, 25394, 25599, 25804, 26009, 26214, 26418, 26623, 26828, 27033, 27238, 27442, 27647, 27852, 28057, 28262, 28466, 28671, 28876, 29081, 29286, 29490, 29695, 29900, 30105, 30309, 30514, 30719, 30924, 31129, 31333, 31538, 31743, 31948, 32153, 32357, 32562, 32767 };
const short TXAGCSm_NB[80] = { 410, 819, 1229, 1638, 2048, 2458, 2867, 3277, 3686, 4096, 4505, 4915, 5325, 5734, 6144, 6553, 6963, 7373, 7782, 8192, 8601, 9011, 9421, 9830, 10240, 10649, 11059, 11468, 11878, 12288, 12697, 13107, 13516, 13926, 14336, 14745, 15155, 15564, 15974, 16384, 16793, 17203, 17612, 18022, 18431, 18841, 19251, 19660, 20070, 20479, 20889, 21299, 21708, 22118, 22527, 22937, 23346, 23756, 24166, 24575, 24985, 25394, 25804, 26214, 26623, 27033, 27442, 27852, 28262, 28671, 29081, 29490, 29900, 30309, 30719, 31129, 31538, 31948, 32357, 32767 };

short TxAGC_Comp_thrd[] =
{
	0,			// 0dB
	-128,		// -1dB
	-256,		// -2dB
	-384,		// -3dB
	-512,		// -4dB
	-640, 		// -5dB
	-768, 		// -6dB
	-896,		// -7dB
	-1024,		// -8dB
	-1152,		// -9dB
	-1280,		// -10dB
	-1408,		// -11dB
	-1536,		// -12dB
	-1664,		// -13dB
	-1792,		// -14dB
	-1920,		// -15dB
	-2048,		// -16dB
	-2176,		// -17dB
	-2304,		// -18dB
	-2432,		// -19dB
	-2560,		// -20dB
	-2688,		// -21dB
	-2816,		// -22dB
	-2944,		// -23dB
	-3072,		// -24dB
	-3200,		// -25dB
	-3328,		// -26dB
	-3456,		// -27dB
	-3584,		// -28dB
	-3712,		// -29dB
	-3840,		// -30dB
	-3968,		// -31dB
	-4096,		// -32dB
	-4224,		// -33dB
	-4352,		// -34dB
	-4480,		// -35dB
	-4608,		// -36dB
	-4736,		// -37dB
	-4864,		// -38dB
	-4992,		// -39dB
	-5120,		// -40dB
	-5248,		// -41dB
	-5376,		// -42dB
	-5504,		// -43dB
	-5632,		// -44dB
	-5760,		// -45dB
	-5888,		// -46dB
	-6016,		// -47dB
	-6144,		// -48dB
	-6272,		// -49dB
	-6400,		// -50dB
	-6528,		// -51dB
	-6656,		// -52dB
	-6784,		// -53dB
	-6912,		// -54dB
};

short TxAGC_Comp_slope[] =
{
	0,			// 1.0
	682,			// 1.5
	1024,		// 2.0
	1228,		// 2.5
	1365,		// 3.0
	1462,		// 3.5
	1536,		// 4.0
	1592,		// 4.5				
	1638,		// 5.0				
	1675,		// 5.5				
	1706,		// 6.0				
	1732,		// 6.5				
	1755,		// 7.0				
	1774,		// 7.5				
	1792,		// 8.0				
	1807,		// 8.5		* Default Volue *
	1820,		// 9.0
	1832,		// 9.5
	1843,		// 10.0
};

short TxAGC_Exp_thrd[] =
{
	-7040,		// -55dB 
	-7168,		// -56dB 
	-7296,		// -57dB 
	-7424,		// -58dB 
	-7552,		// -59dB 
	-7680,		// -60dB 
	-7808,		// -61dB 
	-7936,		// -62dB 
	-8064,		// -63dB 
	-8192,		// -64dB 
	-8320,		// -65dB 
	-8448,		// -66dB 
	-8576,		// -67dB 
	-8704,		// -68dB 
	-8832,		// -69dB 
	-8960,		// -70dB	* Default Volue * 
	-9088,		// -71dB
	-9216,		// -72dB
	-9344,		// -73dB
	-9472,		// -74dB
	-9600,		// -75dB
	-9728,		// -76dB
	-9856,		// -77dB
	-9984,		// -78dB
	-10112,		// -79dB
	-10240,		// -80dB
	-10368,		// -81dB
	-10496,		// -82dB
	-10624,		// -83dB
	-10752,		// -84dB
	-10880,		// -85dB
	-11008,		// -86dB
	-11136,		// -87dB
	-11264,		// -88dB
	-11392,		// -89dB
	-11520		// -90dB
};

short TxAGC_Exp_slope[] =
{
	0,			// 1/1.0
	-1024,		// 1/1.5
	-2048,		// 1/2.0
	-3072,		// 1/2.5
	-4096,		// 1/3.0
	-5120,		// 1/3.5
	-6144,		// 1/4.0		* Default Volue *
	-7168,		// 1/4.5
	-8192,		// 1/5.0
	-9216,		// 1/5.5
	-10240,		// 1/6.0
	-11264,		// 1/6.5
	-12288,		// 1/7.0
	-13312,		// 1/7.5
	-14336,		// 1/8.0
	-15360,		// 1/8.5
	-16384,		// 1/9.0
	-17408,		// 1/9.5
	-18432,		// 1/10.0
};

void SolomonVoiceWAGCInit(AGCStatus* AGC_buf, SamsungSolomonVoiceWTxAGCParam* AGC_param);
void SolomonVoiceW_AGC_ParamConfig(SamsungSolomonVoiceWTxAGCParam* AGC_param, SamsungSolomonVoiceWTxAGCParam* param);
void FN_SOLOMONVOICEW_TX_AGC(short *In, AGCStatus* AGC_buf, SamsungSolomonVoiceWTxAGCParam* AGC_param);
void FN_SOLOMONVOICEW_TX_AGC_2ch(short *In1, short *In2, AGCStatus* AGC_buf, SamsungSolomonVoiceWTxAGCParam* AGC_param);
