📄 rf_agc.cpp.bak
字号:
#include "meta2.h"
//===========================================================================
static CRFAGC* rf_agc_ptr;
//===========================================================================
//static void CNF_ReadFromFDM( void )
//static void CNF_ReadFromNVRAM(FT_NVRAM_READ_CNF *cnf, short token, void *usrData)
static void CNF_ReadFromNVRAM( void )
{ // rf_agc_ptr->CNF_ReadFromFDM( );
// rf_agc_ptr->CNF_ReadFromNVRAM( cnf, token, usrData);
rf_agc_ptr->CNF_ReadFromNVRAM( );
}
//static void CNF_WriteToFDM( void )
static void CNF_WriteToNVRAM( void )
{ // rf_agc_ptr->CNF_WriteToFDM( );
rf_agc_ptr->CNF_WriteToNVRAM( );
}
static void REQ_TimeOut( void )
{ rf_agc_ptr->REQ_TimeOut();
}
static void REQ_Finish( void )
{ rf_agc_ptr->REQ_Finish();
}
//===========================================================================
CRFAGC::CRFAGC( void )
{
IsRunning = false;
ConfirmCallback = 0;
AgcBufSize = 0;
AgcBuf = 0;
}
//---------------------------------------------------------------------------
CRFAGC::~CRFAGC()
{
IsRunning = false;
ConfirmCallback = 0;
if(AgcBuf) delete [] AgcBuf;
}
//---------------------------------------------------------------------------
void CRFAGC::REQ_Finish( void )
{
if(!IsRunning) return;
TimerMan->CounterStop();
Confirm( STATE_AGC_OK );
IsRunning = false;
}
//---------------------------------------------------------------------------
void CRFAGC::REQ_Stop( void )
{
if(!IsRunning) return;
TimerMan->CounterStop();
// FDMMan->REQ_Stop();
NVRAMMan->REQ_Stop();
Confirm( STATE_AGC_STOP );
IsRunning = false;
}
//---------------------------------------------------------------------------
void CRFAGC::REQ_TimeOut( void )
{
if(!IsRunning) return;
TimerMan->CounterStop();
// FDMMan->REQ_Stop();
NVRAMMan->REQ_Stop();
Confirm( STATE_AGC_TIMEOUT );
IsRunning = false;
}
//---------------------------------------------------------------------------
void CRFAGC::Confirm( int confirm_state )
{
if(!IsRunning) return;
if(ConfirmCallback==0) return;
ConfirmState = confirm_state;
ActiveMan->SetActiveFunction( ConfirmCallback );
}
//===========================================================================
//void CRFAGC::REQ_Read_From_FDM( void )
void CRFAGC::REQ_Read_From_NVRAM( void )
{
rf_agc_ptr = this;
IsRunning = true;
if(AgcBuf==0)
{
// MetaResult = META_FDM_agcPathLoss_Len( &AgcBufSize );
MetaResult = META_NVRAM_agcPathLoss_Len( &AgcBufSize );
if(MetaResult!=META_SUCCESS)
{ Confirm( STATE_AGC_FAIL ); return; }
AgcBuf = new char[AgcBufSize];
}
// FDMMan->ConfirmCallback = ::CNF_ReadFromFDM;
NVRAMMan->ConfirmCallback = ::CNF_ReadFromNVRAM;
// FDMMan->REQ_ReadRec_Start( "FT_L1_GROUP",
// "L1_AGCPATHLOSS",
// AgcBufSize,
// AgcBuf );
NVRAMMan->REQ_ReadNVRAM_Start( "NVRAM_EF_L1_AGCPATHLOSS_LID",
1, // only 1 record
AgcBufSize,
AgcBuf );
}
//-------------------------------------
//void CRFAGC::CNF_ReadFromFDM( void )
//void CRFAGC::CNF_ReadFromNVRAM(FT_NVRAM_READ_CNF *cnf, short token, void *usrData)
void CRFAGC::CNF_ReadFromNVRAM( void )
{
if(!IsRunning) return;
// int state = FDMMan->ConfirmState;
int state = NVRAMMan->ConfirmState;
// if(state==STATE_FDM_OK)
if(state==STATE_NVRAM_OK)
{
// MetaResult = META_FDM_Decompose_agcPathLoss( &AgcPathLoss,
// AgcBuf,
// AgcBufSize );
MetaResult = META_NVRAM_Decompose_agcPathLoss( &AgcPathLoss,
AgcBuf,
AgcBufSize );
if(MetaResult!=META_SUCCESS)
{ Confirm( STATE_AGC_FAIL ); return; }
ActiveMan->SetActiveFunction( ::REQ_Finish );
}
// else if(state==STATE_FDM_TIMEOUT)
else if(state==STATE_NVRAM_TIMEOUT)
{ Confirm( STATE_AGC_TIMEOUT );
}
// else if(state==STATE_FDM_STOP)
else if(state==STATE_NVRAM_STOP)
{ Confirm( STATE_AGC_STOP );
}
else
{ Confirm( STATE_AGC_FAIL );
}
}
//===========================================================================
//void CRFAGC::REQ_Write_To_FDM( void )
void CRFAGC::REQ_Write_To_NVRAM( void )
{
rf_agc_ptr = this;
IsRunning = true;
if(AgcBuf==0)
{
//MetaResult = META_FDM_agcPathLoss_Len( &AgcBufSize );
MetaResult = META_NVRAM_agcPathLoss_Len( &AgcBufSize );
if(MetaResult!=META_SUCCESS)
{ Confirm( STATE_AGC_FAIL ); return; }
AgcBuf = new char[AgcBufSize];
}
// MetaResult = META_FDM_Compose_agcPathLoss( &AgcPathLoss,
// AgcBuf,
// AgcBufSize );
MetaResult = META_NVRAM_Compose_agcPathLoss( &AgcPathLoss,
AgcBuf,
AgcBufSize );
if(MetaResult!=META_SUCCESS)
{ Confirm( STATE_AGC_FAIL ); return; }
// FDMMan->ConfirmCallback = ::CNF_WriteToFDM;
NVRAMMan->ConfirmCallback = ::CNF_WriteToNVRAM;
// FDMMan->REQ_WriteRec_Start( "FT_L1_GROUP",
// "L1_AGCPATHLOSS",
// AgcBufSize,
// AgcBuf );
NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_L1_AGCPATHLOSS_LID",
1, // only 1 record
AgcBufSize,
AgcBuf );
}
//-------------------------------------
//void CRFAGC::CNF_WriteToFDM( void )
void CRFAGC::CNF_WriteToNVRAM( void )
{
if(!IsRunning) return;
// int state = FDMMan->ConfirmState;
int state = NVRAMMan->ConfirmState;
// if(state==STATE_FDM_OK)
if(state==STATE_NVRAM_OK)
{
ActiveMan->SetActiveFunction( ::REQ_Finish );
}
// else if(state==STATE_FDM_TIMEOUT)
else if(state==STATE_NVRAM_TIMEOUT)
{ Confirm( STATE_AGC_TIMEOUT );
}
// else if(state==STATE_FDM_STOP)
else if(state==STATE_NVRAM_STOP)
{ Confirm( STATE_AGC_STOP );
}
else
{ Confirm( STATE_AGC_FAIL );
}
}
//===========================================================================
static const char SUBBAND_NAME[][32] =
{
"GSM400 Sub band, RX loss",
"GSM850 Sub band, RX loss",
"GSM900 Sub band, RX loss",
"DCS1800 Sub band, RX loss",
"PCS1900 Sub band, RX loss",
};
bool CRFAGC::REQ_Read_From_File( char *filename )
{
TIniFile *ini_file;
AnsiString data;
char str[2048];
int idata[PLTABLE_SIZE];
float fdata[PLTABLE_SIZE];
int i, band;
ini_file = new TIniFile( filename );
if(ini_file != NULL) // added by Andy Ueng
{
for( band = 0; band<5; band++)
{
data = ini_file->ReadString( SUBBAND_NAME[band],
"Max ARFCN",
"-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1");
strcpy( str, data.c_str() );
String_To_Array_int( str, idata, PLTABLE_SIZE );
idata[ PLTABLE_SIZE-1 ] = -1;
for(i=0; i<PLTABLE_SIZE; i++)
{ AgcPathLoss.agcPathLoss[band][i].max_arfcn = idata[i];
}
data = ini_file->ReadString( SUBBAND_NAME[band],
"RX loss",
"0,0,0,0,0,0,0,0,0,0,0,0");
strcpy( str, data.c_str() );
String_To_Array_float( str, fdata, PLTABLE_SIZE );
fdata[ PLTABLE_SIZE-1 ] = 0;
for(i=0; i<PLTABLE_SIZE; i++)
{ AgcPathLoss.agcPathLoss[band][i].gain_offset = (int)(fdata[i]*GAIN_SCALE);
}
}
delete ini_file;
}
return( true );
}
//===========================================================================
bool CRFAGC::REQ_Write_To_File( char *filename )
{
TIniFile *ini_file;
char str[2048];
int idata[PLTABLE_SIZE];
float fdata[PLTABLE_SIZE];
int i, band;
ini_file = new TIniFile( filename );
if(ini_file != NULL) // added by Andy Ueng
{
for( band = 0; band<5; band++)
{
for(i=0; i<PLTABLE_SIZE; i++)
{ idata[i] = AgcPathLoss.agcPathLoss[band][i].max_arfcn;
}
Array_To_String_int( str, idata, PLTABLE_SIZE-1, ',' );
ini_file->WriteString( SUBBAND_NAME[band],
"Max ARFCN",
str );
for(i=0; i<PLTABLE_SIZE; i++)
{ fdata[i] = AgcPathLoss.agcPathLoss[band][i].gain_offset*1.0/GAIN_SCALE;
}
Array_To_String_float( str, fdata, PLTABLE_SIZE-1, ',' );
ini_file->WriteString( SUBBAND_NAME[band],
"RX loss",
str);
}
delete ini_file;
return( true );
}
//===========================================================================
static const char BAND_NAME[5][12] =
{ "GSM400",
"GSM850",
"GSM900",
"DCS1800",
"PCS1900"
};
bool CRFAGC::REQ_Write_To_M12193( char *filename )
{
FILE *fs;
int arfcn, loss;
int band, i;
fs = fopen( filename, "a+t" );
if(fs==0) return(false);
fprintf( fs, "/*----------------------------------------*/\n");
fprintf( fs, "/* Calibration data for path loss of gain */\n");
fprintf( fs, "/*----------------------------------------*/\n");
fprintf( fs, "\n");
for(band=2; band<5; band++)
{
fprintf( fs, "/* %s....................................................................*/\n", BAND_NAME[band] );
fprintf( fs, "\n");
fprintf( fs, "sAGCGAINOFFSET AGC_PATHLOSS_%s[ PLTABLE_SIZE ] =\n", BAND_NAME[band] );
fprintf( fs, "{\n");
for( i=0; i<PLTABLE_SIZE-1; i++ )
{ arfcn = AgcPathLoss.agcPathLoss[band][i].max_arfcn;
loss = AgcPathLoss.agcPathLoss[band][i].gain_offset;
if( (arfcn<0)||(arfcn>1023) ) break;
fprintf( fs, " { %4d, GAINLOSS( %.3f ) },\n", arfcn , (float)loss*1.0/GAIN_SCALE );
}
fprintf( fs, " /*-------------------------*/\n");
fprintf( fs, " { TABLE_END }\n");
fprintf( fs, "};\n");
fprintf( fs, "\n");
}
fprintf( fs, "/*...........................................................................*/\n");
fprintf( fs, "\n");
fprintf( fs, "sAGCGAINOFFSET* AGC_PATHLOSS_TABLE[] =\n");
fprintf( fs, "{ 0, /*#FrequencyBand400 */\n");
fprintf( fs, " 0, /*#FrequencyBand850 */\n");
fprintf( fs, " AGC_PATHLOSS_GSM900, /* FrequencyBand900 */\n");
fprintf( fs, " AGC_PATHLOSS_DCS1800, /* FrequencyBand1800 */\n");
fprintf( fs, " AGC_PATHLOSS_PCS1900, /* FrequencyBand1900 */\n");
fprintf( fs, "};\n");
fprintf( fs, "\n");
fclose(fs);
return(true);
}
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -