⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rf_agc.cpp.bak

📁 关于MTK 的MATA开发工具的RF源码
💻 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 + -