form_RFTXIQBBTX.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:45k
源码类别:

MTK

开发平台:

C++ Builder

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. // form
  5. #ifndef _FORM_MAIN_H_
  6. #include "form_main.h"
  7. #endif
  8. #ifndef _FORM_RFTXIQBBTX_H_
  9. #include "form_RFTXIQBBTX.h"
  10. #endif
  11. // misc
  12. #ifndef  _FT_UTILS_H_
  13. #include "ft_utils.h"
  14. #endif
  15. #ifndef  _MISC_H_
  16. #include "misc.h"
  17. #endif
  18. #ifndef  _MAN_FDM_H_
  19. #include "man_fdm.h"
  20. #endif
  21. //---------------------------------------------------------------------------
  22. #pragma package(smart_init)
  23. #pragma resource "*.dfm"
  24. TfrmTXIQBBTXSetting *frmTXIQBBTXSetting;
  25. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  26. // TX IQ
  27. static void  CNF_TXIQ_ReadFromNVRAM( void )
  28. {   frmTXIQBBTXSetting->TXIQ_UploadFromFlashDone();
  29. }
  30. //--------------------------------------------------------------------------
  31. static void  CNF_TXIQ_WriteToNVRAM( void )
  32. {   frmTXIQBBTXSetting->TXIQ_DownloadToFlashDone();
  33. }
  34. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  35. static void  ConfirmCallback_TX( void )
  36. {  frmTXIQBBTXSetting->ConfirmCallback_TX();
  37. }
  38. //----------------------------------------------------------------------------
  39. static void  ConfirmCallback_MultiSlotTX( void )
  40. {
  41.     frmTXIQBBTXSetting->ConfirmCallback_MultiSlotTX();
  42. }
  43. //---------------------------------------------------------------------------
  44. __fastcall TfrmTXIQBBTXSetting::TfrmTXIQBBTXSetting(TComponent* Owner)
  45.         : TForm(Owner)
  46. {
  47.    
  48. }
  49. //---------------------------------------------------------------------------
  50. void TfrmTXIQBBTXSetting::Init( void )
  51. {
  52.     m_bInit = true;
  53. }
  54. //===========================================================================
  55. void __fastcall TfrmTXIQBBTXSetting::FormCreate(TObject *Sender)
  56. {
  57.     Init();
  58. }
  59. //---------------------------------------------------------------------------
  60. void __fastcall TfrmTXIQBBTXSetting::FormActivate(TObject *Sender)
  61. {
  62.     if (m_bInit)
  63.     {
  64.         m_bInit = false;
  65.         //  BbTxCfgVer
  66.         BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  67.         m_eBbTxCfgVer = m_pcRF_TXIQRUN_Obj->Query_BBTxCfgVer_Start(bb_chip);
  68.         // RF ID
  69.         m_uiFinalRfid = frmMainSel->Get_FinalRFID();
  70.         if ((RF_ID_A60111A == m_uiFinalRfid) ||
  71.             (RF_ID_AERO2E  == m_uiFinalRfid) ||
  72.             (RF_ID_MT6140A == m_uiFinalRfid) ||
  73.             (RF_ID_MT6140B == m_uiFinalRfid) ||
  74.             (RF_ID_MT6140C == m_uiFinalRfid) ||
  75.             (RF_ID_MT6140D == m_uiFinalRfid)
  76.            )
  77.         {
  78.             pnlHBPHeader->Visible = true;
  79.             pnlHBP->Visible = true;
  80.         }
  81.         else
  82.         {
  83.             pnlHBPHeader->Visible = false;
  84.             pnlHBP->Visible = false;
  85.         }
  86.         m_sFinalMSCAP = frmMainSel->Get_FinalMSCap();
  87.         if( m_sFinalMSCAP.capability.EDGE_8PSK_TX )
  88.         {
  89.             lblTXModulation->Visible = true;
  90.             cbTXModulation->Visible = true;
  91.         }
  92.         else
  93.         {
  94.             lblTXModulation->Visible = false;
  95.             cbTXModulation->Visible = false;
  96.             cbTXModulation->ItemIndex = MOD_GMSK_INDEX;
  97.         }
  98.         if( MOD_GMSK_INDEX == cbTXModulation->ItemIndex )
  99.         {
  100.             Display_TxGmskUi();
  101.         }
  102.         else
  103.         {
  104.             Display_TxEpskUi();
  105.         }
  106.         m_bMultiSlotTxExSupport = frmRFTool->Get_MultiSlotTxExSupport();
  107.     }    
  108. }
  109. //===========================================================================
  110. void  TfrmTXIQBBTXSetting::ShowHintLabel( TControl *sender, char* hint )
  111. {
  112.    TPoint pt0 = this->ClientOrigin;
  113.    TPoint pt1 = sender->ClientOrigin;
  114.    lblHint->Left = (pt1.x-pt0.x);
  115.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  116.    lblHint->Caption = hint;
  117.    lblHint->Visible = true;
  118.    HintTimer->Enabled = true;
  119. }
  120. //---------------------------------------------------------------------------
  121. void  TfrmTXIQBBTXSetting::CurrentPageReset( void )
  122. {
  123.     btnTXStart->Enabled = true;
  124.     btnTXStart->Tag = 0;
  125.     btnTXIQUploadFromFlash->Enabled = true;
  126.     btnTXIQDownloadToFlash->Enabled = true;
  127.     btnTXIQChangeDB->Enabled = true;
  128.     btnTXIQLoadFromFile->Enabled = true;
  129.     btnTXIQSaveToFile->Enabled = true;
  130. }
  131. //---------------------------------------------------------------------------
  132. void  TfrmTXIQBBTXSetting::CurrentPageLock( void )
  133. {
  134.     btnTXStart->Enabled = false;
  135.     btnTXStart->Tag = 1;
  136.     btnTXIQUploadFromFlash->Enabled = false;
  137.     btnTXIQDownloadToFlash->Enabled = false;
  138.     btnTXIQChangeDB->Enabled = false;
  139.     btnTXIQLoadFromFile->Enabled = false;
  140.     btnTXIQSaveToFile->Enabled = false;
  141. }
  142. //===========================================================================
  143. void TfrmTXIQBBTXSetting::RedrawBBTxParameters(void)
  144. {
  145.     char str[256];
  146.     edtTXIQBBTXCommonModeVoltage->Text = IntToStr ( m_sUiL1CalTxIq.BBTXParameters.bbtx_common_mode_voltage ) ;
  147.     edtTXIQBBTXGain->Text = IntToStr ( m_sUiL1CalTxIq.BBTXParameters.bbtx_gain );
  148.     edtTXIQBBTXCalrcsel->Text = IntToStr (m_sUiL1CalTxIq.BBTXParameters.bbtx_calrcsel);
  149.     sprintf(str, "%.3f", m_sUiL1CalTxIq.BBTXParameters.apc_bat_low_voltage);
  150.     edtTXIQAPCBatLowVoltage->Text = (AnsiString) str;
  151.     sprintf(str, "%.3f", m_sUiL1CalTxIq.BBTXParameters.apc_bat_high_voltage);
  152.     edtTXIQAPCBatHighVoltage->Text = (AnsiString) str;
  153.     sprintf(str, "%.3f", m_sUiL1CalTxIq.BBTXParameters.apc_bat_low_temperature);
  154.     edtTXIQAPCBatLowTemperature->Text = (AnsiString) str;
  155.     sprintf(str, "%.3f", m_sUiL1CalTxIq.BBTXParameters.apc_bat_high_temperature);
  156.     edtTXIQAPCBatHighTemperature->Text = (AnsiString) str;
  157.     
  158.     edtTXIQBBTXTrimI->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_trimI );
  159.     edtTXIQBBTXTrimQ->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_trimQ );
  160.     edtTXIQBBTXOffsetI->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetI );
  161.     edtTXIQBBTXOffsetQ->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetQ );
  162.     edtTXIQBBTXCalibratedFlag ->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_isCalibrated );
  163.     if ((RF_ID_A60111A == m_uiFinalRfid) ||
  164.         (RF_ID_AERO2E  == m_uiFinalRfid) ||
  165.         (RF_ID_MT6140A == m_uiFinalRfid) ||
  166.         (RF_ID_MT6140B == m_uiFinalRfid) ||
  167.         (RF_ID_MT6140C == m_uiFinalRfid) ||
  168.         (RF_ID_MT6140D == m_uiFinalRfid)
  169.        )
  170.     {
  171.         edtTXIQBBTXPhasesel->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_phsel );
  172.         edtTXIQBBTXCommonModeVoltageHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_common_mode_voltage_h );
  173.         edtTXIQBBTXGainHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_gain_h );
  174.         edtTXIQBBTXCalrcselHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_calrcsel_h );
  175.         edtTXIQBBTXTrimIHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_trimI_h );
  176.         edtTXIQBBTXTrimQHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_trimQ_h );
  177.         edtTXIQBBTXOffsetIHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetI_h );
  178.         edtTXIQBBTXOffsetQHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetQ_h );
  179.         edtTXIQBBTXPhaseselHigh->Text = IntToStr( m_sUiL1CalTxIq.BBTXParameters.bbtx_phsel_h );
  180.     }
  181. }
  182. //---------------------------------------------------------------------------
  183. void  TfrmTXIQBBTXSetting::Display_TxGmskUi( void )
  184. {
  185.     lblTXCS->Visible = false;
  186.     cbTXCS->Visible = false;
  187.     lblTXTA->Visible = false;
  188.     edtTXTA->Visible = false;
  189.     Display_TXGmskBurstType();
  190.     
  191.     m_sFinalMSCAP = frmMainSel->Get_FinalMSCap( );
  192.     Display_TxCS( m_sFinalMSCAP.capability, GMSK );
  193. }
  194. //---------------------------------------------------------------------------
  195. void  TfrmTXIQBBTXSetting::Display_TxEpskUi( void )
  196. {
  197.     lblTXCS->Visible = true;
  198.     cbTXCS->Visible = true;
  199.     lblTXTA->Visible = true;
  200.     edtTXTA->Visible = true;
  201.     Display_TXEpskBurstType();
  202.     m_sFinalMSCAP = frmMainSel->Get_FinalMSCap( );
  203.     Display_TxCS( m_sFinalMSCAP.capability, EPSK );
  204. }
  205. //--------------------------------------------------------------------------
  206. void TfrmTXIQBBTXSetting::Display_TXGmskBurstType( void )
  207. {
  208.     int i;
  209.     AnsiString BT_GMSK[] =
  210.     {
  211.         "NB (TSC)",
  212.         "AB",
  213.         "All 1"
  214.     };
  215.     cbTXBurstType->Items->Clear();
  216.     for( i=0; i<sizeof(BT_GMSK)/sizeof(BT_GMSK[0]); i++)
  217.     {
  218.             cbTXBurstType->Items->Add(BT_GMSK[i]);
  219.     }
  220.     cbTXBurstType->ItemIndex = 0;
  221. }
  222. //--------------------------------------------------------------------------
  223. void TfrmTXIQBBTXSetting::Display_TxCS( RfMsCapabilityBits capability, E_MODULATION modulation )
  224. {
  225.     AnsiString CS_GPRS[] =
  226.     {
  227.         "CS1",
  228.         "CS2",
  229.         "CS3",
  230.         "CS4",
  231.         "PRACH8",
  232.         "PRACH11"
  233.     };
  234.     AnsiString CS_EGPRS_GMSK[] =
  235.     {
  236.         "CS1",
  237.         "CS2",
  238.         "CS3",
  239.         "CS4",
  240.         "PRACH8",
  241.         "PRACH11",
  242.         "MCS1",
  243. "MCS2",
  244. "MCS3",
  245. "MCS4"
  246.     };
  247.     AnsiString CS_EGPRS_EPSK[] =
  248.     {
  249.         "MCS5",
  250. "MCS6",
  251. "MCS7",
  252. "MCS8",
  253. "MCS9"
  254.     };
  255.     int i;
  256.     cbTXCS->Clear();
  257.     if( GMSK == modulation )
  258.     {
  259.         if( capability.EDGE_RX || capability.EDGE_8PSK_TX )
  260.         {
  261.             for( i=0; i<sizeof(CS_EGPRS_GMSK)/sizeof(AnsiString); i++ )
  262.             {
  263.                 cbTXCS->Items->Add(CS_EGPRS_GMSK[i]);
  264.             }
  265.         }
  266.         else if( capability.GPRS )
  267.         {
  268.             for( i=0; i<sizeof(CS_GPRS)/sizeof(AnsiString); i++ )
  269.             {
  270.                 cbTXCS->Items->Add(CS_GPRS[i]);
  271.             }
  272.         }
  273.     }
  274.     else // EPSK
  275.     {
  276.         if( capability.EDGE_8PSK_TX )
  277.         {
  278.             for( i=0; i<sizeof(CS_EGPRS_EPSK)/sizeof(AnsiString); i++ )
  279.             {
  280.                 cbTXCS->Items->Add(CS_EGPRS_EPSK[i]);
  281.             }
  282.         }
  283.     }
  284.     cbTXCS->ItemIndex = 0;
  285. }
  286. //--------------------------------------------------------------------------
  287. void TfrmTXIQBBTXSetting::Display_TXEpskBurstType( void )
  288. {
  289.     m_sFinalMSCAP = frmMainSel->Get_FinalMSCap(  );
  290.    
  291.     if( m_sFinalMSCAP.capability.EDGE_8PSK_TX )
  292.     {
  293.         AnsiString BT_EPSK[] =
  294.         {
  295.             "NB (TSC)",
  296.             "All 0",
  297.             "All 1",
  298.             "Pattern",
  299.             "Fixed (TSC)",
  300.             "Fixed All 0 (TSC)",
  301.             "Fixed Alter Bits (TSC)"
  302.         };
  303.         cbTXBurstType->Items->Clear();
  304.         for(int i=0; i<sizeof(BT_EPSK)/sizeof(BT_EPSK[0]); i++)
  305.         {
  306.             cbTXBurstType->Items->Add(BT_EPSK[i]);
  307.         }
  308.         cbTXBurstType->ItemIndex = 0;
  309.         lblTXBurstType->Visible = true;
  310.         cbTXBurstType->Visible = true;
  311.     }
  312.     else
  313.     {
  314.         lblTXBurstType->Visible = false;
  315.         cbTXBurstType->Visible = false;
  316.     }
  317. }
  318. //---------------------------------------------------------------------------
  319. void TfrmTXIQBBTXSetting::Get_BBTXChangeFlag(S_BBTXPARA_CHANGE_FLAG_T& flag)
  320. {
  321.     flag.b_bbtx_common_mode_voltage = edtTXIQBBTXCommonModeVoltage->Visible;
  322.     flag.b_bbtx_gain = edtTXIQBBTXGain->Visible;
  323.     flag.b_bbtx_calrcsel = edtTXIQBBTXCalrcsel->Visible;
  324.     flag.b_bbtx_trimI = edtTXIQBBTXTrimI->Visible;
  325.     flag.b_bbtx_trimQ = edtTXIQBBTXTrimQ->Visible;
  326.     flag.b_bbtx_offsetI = edtTXIQBBTXOffsetI->Visible;
  327.     flag.b_bbtx_offsetQ = edtTXIQBBTXOffsetQ->Visible;
  328.     flag.b_bbtx_isCalibrated = edtTXIQBBTXCalibratedFlag->Visible;
  329.     flag.b_apc_bat_low_voltage = edtTXIQAPCBatLowVoltage->Visible;
  330.     flag.b_apc_bat_high_voltage = edtTXIQAPCBatHighVoltage->Visible;
  331.     flag.b_apc_bat_low_temperature = edtTXIQAPCBatLowTemperature->Visible;
  332.     flag.b_apc_bat_high_temperature = edtTXIQAPCBatHighTemperature->Visible;
  333.     flag.b_bbtx_common_mode_voltage_h = edtTXIQBBTXCommonModeVoltageHigh->Visible;
  334.     flag.b_bbtx_gain_h = edtTXIQBBTXGainHigh->Visible;
  335.     flag.b_bbtx_calrcsel_h = edtTXIQBBTXCalrcselHigh->Visible;
  336.     flag.b_bbtx_trimI_h = edtTXIQBBTXTrimIHigh->Visible;
  337.     flag.b_bbtx_trimQ_h = edtTXIQBBTXTrimQHigh->Visible;
  338.     flag.b_bbtx_offsetI_h = edtTXIQBBTXOffsetIHigh->Visible;
  339.     flag.b_bbtx_offsetQ_h = edtTXIQBBTXOffsetQHigh->Visible;
  340.     flag.b_bbtx_phsel = edtTXIQBBTXPhasesel->Visible;
  341.     flag.b_bbtx_phsel_h = edtTXIQBBTXPhaseselHigh->Visible;
  342. }
  343. //---------------------------------------------------------------------------
  344. void __fastcall TfrmTXIQBBTXSetting::edtArfcnCheck(TObject *Sender)
  345. {
  346.     short sdata;
  347.     AnsiString  text;
  348.     TEdit *edit = (TEdit*)Sender;
  349.     char  hint[][256] =
  350.     {   " value shall be 0~124 or 975~1023 ",
  351.         " value shall be 512~885 ",
  352.         " value shall be 512~810 ",
  353.         " value shall be 128~251 ",
  354.     };
  355.     text = edit->Text;
  356.     if( !IsValidARFCN( text, m_eCurBand, sdata))
  357.     {
  358.         edit->Text = IntToStr( Default_ARFCN[m_eCurBand] );
  359.         ShowHintLabel( edit, hint[m_eCurBand] );
  360.         edit->SetFocus();
  361.         return;
  362.     } 
  363. }
  364. //---------------------------------------------------------------------------
  365. void __fastcall TfrmTXIQBBTXSetting::edtPclCheck(TObject *Sender)
  366. {
  367.     int  i;
  368.     int  data;
  369.     AnsiString  text;
  370.     TEdit *edit = (TEdit*)Sender;
  371.     char  hint[][256] =
  372.     {
  373.         " value shall be 4~31 ",
  374.         " value shall be 0~28 ",
  375.         " value shall be 0~15 ",
  376.         " value shall be 4~31 ",
  377.     };
  378.     text = edit->Text;
  379.     if( text.AnsiCompare("") == 0 )  return;
  380.     if( !IsValidPCL( text, m_eCurBand, data ) )
  381.     {
  382.         ShowHintLabel( edit, hint[m_eCurBand] );
  383.         edit->Text = IntToStr( Default_PCL );
  384.         edit->SetFocus();
  385.         return;
  386.     }
  387. }
  388. //---------------------------------------------------------------------------
  389. void __fastcall TfrmTXIQBBTXSetting::edtAfcDacCheck(TObject *Sender)
  390. {
  391.     short  sdata;
  392.     AnsiString  text;
  393.     TEdit *edit = (TEdit*)Sender;
  394.     char  hint[] = " value shall be 0~8191 ";
  395.     text = edit->Text;
  396.     if (!IsValidAFC(text, sdata))
  397.     {
  398.         ShowHintLabel( edit, hint );
  399.         edit->Text = IntToStr( Default_AFC );
  400.         edit->SetFocus();
  401.         return;
  402.     }
  403. }
  404. //---------------------------------------------------------------------------
  405. void __fastcall TfrmTXIQBBTXSetting::edtTACheck(TObject *Sender)
  406. {
  407.     int  data;
  408.     AnsiString  text;
  409.     TEdit *edit = (TEdit*)Sender;
  410.     char  hint[] = " value shall be 0~63 ";
  411.     text = edit->Text;
  412.     if( !IsValidTA( text, data ) )
  413.     {
  414.         ShowHintLabel( edit, hint );
  415.         edit->Text = Default_TA;
  416.         edit->SetFocus();
  417.         return;
  418.     }    
  419. }
  420. //---------------------------------------------------------------------------
  421. void __fastcall TfrmTXIQBBTXSetting::edtPatternCheck(TObject *Sender)
  422. {
  423.     unsigned short  data;
  424.     AnsiString  text;
  425.     TEdit *edit = (TEdit*)Sender;
  426.     char  hint[256] =
  427.     {   " binary format and length<=16 "
  428.     };
  429.     text = edit->Text;
  430.     if( !IsValidMultiSlotTxPattern( text, data ) )
  431.     {   ShowHintLabel( edit, hint);
  432.         edit->SetFocus();
  433.         return;
  434.     }
  435. }
  436. //---------------------------------------------------------------------------
  437. void __fastcall TfrmTXIQBBTXSetting::edtBBTXCommonModeVoltageCheck(
  438.       TObject *Sender)
  439. {
  440.     signed char  data;
  441.     AnsiString  text;
  442.     TEdit *edit = (TEdit*)Sender;
  443.     char  hint[256] =
  444.     {   " value shall be -4 ~ 3 "
  445.     };
  446.     text = edit->Text;
  447.     if( !IsValidBBTXCommonModeVoltage( text, data ) )
  448.     {
  449.         edit->Text = IntToStr( Default_BBTXCommonModeVoltage );
  450.         ShowHintLabel( edit, hint );
  451.         edit->SetFocus();
  452.         return;
  453.     }
  454.     if( 0 == edit->Tag ) // low band
  455.     {
  456.         m_sUiL1CalTxIq.BBTXParameters.bbtx_common_mode_voltage = data;
  457.     }
  458.     else
  459.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_common_mode_voltage_h = data;
  460.     }
  461. }
  462. //---------------------------------------------------------------------------
  463. void __fastcall TfrmTXIQBBTXSetting::edtBBTXGainCheck(TObject *Sender)
  464. {
  465.     signed char  data;
  466.     AnsiString  text;
  467.     TEdit *edit = (TEdit*)Sender;
  468.     char  hint[256] =
  469.     {   " value shall be -4 ~ 3 "
  470.     };
  471.     text = edit->Text;
  472.     if( !IsValidBBTXGain( text, data ) )
  473.     {
  474.         edit->Text = IntToStr( Default_BBTXGain );
  475.         ShowHintLabel( edit, hint );
  476.         edit->SetFocus();
  477.         return;
  478.     }
  479.     if( 0 == edit->Tag ) // low band
  480.     {
  481.         m_sUiL1CalTxIq.BBTXParameters.bbtx_gain = data;
  482.     }
  483.     else
  484.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_gain_h = data;
  485.     }
  486. }
  487. //---------------------------------------------------------------------------
  488. void __fastcall TfrmTXIQBBTXSetting::edtCTBBTXCalrcselCheck(
  489.       TObject *Sender)
  490. {
  491.     signed char  data;
  492.     AnsiString  text;
  493.     TEdit *edit = (TEdit*)Sender;
  494.     char  hint[256] =
  495.     {   " value shall be -4 ~ 3 "
  496.     };
  497.     text = edit->Text;
  498.     if( !IsValidBBTXCalrcsel( text, data ) )
  499.     {
  500.         edit->Text = IntToStr( Default_BBTXCalrcsel );
  501.         ShowHintLabel( edit, hint );
  502.         edit->SetFocus();
  503.         return;
  504.     }
  505.     if( 0 == edit->Tag ) // low band
  506.     {
  507.         m_sUiL1CalTxIq.BBTXParameters.bbtx_calrcsel = data;
  508.     }
  509.     else
  510.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_calrcsel_h = data;
  511.     }
  512. }
  513. //---------------------------------------------------------------------------
  514. void __fastcall TfrmTXIQBBTXSetting::edtTXIQBBTXTrimICheck(TObject *Sender)
  515. {
  516.     signed char  data;
  517.     AnsiString  text;
  518.     TEdit *edit = (TEdit*)Sender;
  519.     char  hint[] = " value shall be -8~7 ";
  520.     text = edit->Text;
  521.     if( !IsValidTrimIQ( text, data ) )
  522.     {
  523.         ShowHintLabel( edit, hint );
  524.         edit->Text = Default_TrimIQ;
  525.         edit->SetFocus();
  526.         return;
  527.     }
  528.     if( 0 == edit->Tag ) // low band
  529.     {
  530.         m_sUiL1CalTxIq.BBTXParameters.bbtx_trimI = data;
  531.     }
  532.     else
  533.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_trimI_h = data;
  534.     }
  535. }
  536. //---------------------------------------------------------------------------
  537. void __fastcall TfrmTXIQBBTXSetting::edtTXIQBBTXTrimQCheck(TObject *Sender)
  538. {
  539.     signed char  data;
  540.     AnsiString  text;
  541.     TEdit *edit = (TEdit*)Sender;
  542.     char  hint[] = " value shall be -8~7 ";
  543.     text = edit->Text;
  544.     if( !IsValidTrimIQ( text, data ) )
  545.     {
  546.         ShowHintLabel( edit, hint );
  547.         edit->Text = Default_TrimIQ;
  548.         edit->SetFocus();
  549.         return;
  550.     }
  551.     if( 0 == edit->Tag ) // low band
  552.     {
  553.         m_sUiL1CalTxIq.BBTXParameters.bbtx_trimQ = data;
  554.     }
  555.     else
  556.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_trimQ_h = data;
  557.     }
  558. }
  559. //---------------------------------------------------------------------------
  560. void __fastcall TfrmTXIQBBTXSetting::edtTXIQBBTXOffsetICheck(
  561.       TObject *Sender)
  562. {
  563.     signed char  data;
  564.     AnsiString  text;
  565.     TEdit *edit = (TEdit*)Sender;
  566.     char  hint[2][128] = {" value shall be -32~31 ", " value shall be -64~63 "};
  567.     text = edit->Text;
  568.     if (!IsValidOffsetIQ(m_eBbTxCfgVer, text, data))
  569.     {
  570.         if (m_eBbTxCfgVer < BBTXCFG_VER4)
  571.         {
  572.             ShowHintLabel(edit, hint[0]);
  573.         }
  574.         else
  575.         {
  576.             ShowHintLabel(edit, hint[1]);
  577.         }
  578.         edit->SetFocus();
  579.         return;
  580.     }
  581.     if( 0 == edit->Tag ) // low band
  582.     {
  583.         m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetI = data;
  584.     }
  585.     else
  586.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetI_h = data;
  587.     }
  588. }
  589. //---------------------------------------------------------------------------
  590. void __fastcall TfrmTXIQBBTXSetting::edtTXIQBBTXOffsetQCheck(
  591.       TObject *Sender)
  592. {
  593.     signed char  data;
  594.     AnsiString  text;
  595.     TEdit *edit = (TEdit*)Sender;
  596.     char  hint[2][128] = {" value shall be -32~31 ", " value shall be -64~63 "};
  597.     text = edit->Text;
  598.     if (!IsValidOffsetIQ(m_eBbTxCfgVer, text, data))
  599.     {
  600.         if (m_eBbTxCfgVer < BBTXCFG_VER4)
  601.         {
  602.             ShowHintLabel(edit, hint[0]);
  603.         }
  604.         else
  605.         {
  606.             ShowHintLabel(edit, hint[1]);
  607.         }
  608.         edit->SetFocus();
  609.         return;
  610.     }
  611.     if( 0 == edit->Tag ) // low band
  612.     {
  613.         m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetQ = data;
  614.     }
  615.     else
  616.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_offsetQ_h = data;
  617.     }
  618. }
  619. //---------------------------------------------------------------------------
  620. void __fastcall TfrmTXIQBBTXSetting::edtBBTXCalibratedFlagCheck(
  621.       TObject *Sender)
  622. {
  623.     unsigned char  data;
  624.     AnsiString  text;
  625.     TEdit *edit = (TEdit*)Sender;
  626.     char  hint[] = " value is not valid ";
  627.     text = edit->Text;
  628.     if( !IsValidBBTXCalibratedFlag( text, data ) )
  629.     {
  630.         edtTXIQBBTXTrimI->Enabled = false;
  631.         edtTXIQBBTXTrimQ->Enabled = false;
  632.         edtTXIQBBTXOffsetI->Enabled = false;
  633.         edtTXIQBBTXOffsetQ->Enabled = false;
  634.         ShowHintLabel( edit, hint );
  635.         edit->Text = "0";
  636.         edit->SetFocus();
  637.         return;
  638.     }
  639.     edtTXIQBBTXTrimI->Enabled = true;
  640.     edtTXIQBBTXTrimQ->Enabled = true;
  641.     edtTXIQBBTXOffsetI->Enabled = true;
  642.     edtTXIQBBTXOffsetQ->Enabled = true;
  643.     m_sUiL1CalTxIq.BBTXParameters.bbtx_isCalibrated = data;    
  644. }
  645. //---------------------------------------------------------------------------
  646. void __fastcall TfrmTXIQBBTXSetting::edtAPCBatLowVoltageCheck(
  647.       TObject *Sender)
  648. {
  649.     double  d_data;
  650.     AnsiString  text;
  651.     TEdit *edit = (TEdit*)Sender;
  652.     char  hint[256] =
  653.     {   " value shall be 0 ~ 10 "
  654.     };
  655.     text = edit->Text;
  656.     if( !IsValidAPCBatLowVoltage( text, d_data ) )
  657.     {
  658.         edit->Text = IntToStr( Default_APCBatLowVoltage );
  659.         ShowHintLabel( edit, hint );
  660.         edit->SetFocus();
  661.         return;
  662.     }
  663.     m_sUiL1CalTxIq.BBTXParameters.apc_bat_low_voltage = d_data;
  664. }
  665. //---------------------------------------------------------------------------
  666. void __fastcall TfrmTXIQBBTXSetting::edtAPCBatHighVoltageCheck(
  667.       TObject *Sender)
  668. {
  669.     double  d_data;
  670.     AnsiString  text;
  671.     TEdit *edit = (TEdit*)Sender;
  672.     char  hint[256] =
  673.     {   " value shall be 0 ~ 10 "
  674.     };
  675.     text = edit->Text;
  676.     if( !IsValidAPCBatHighVoltage( text, d_data ) )
  677.     {
  678.         edit->Text = IntToStr( Default_APCBatHighVoltage );
  679.         ShowHintLabel( edit, hint );
  680.         edit->SetFocus();
  681.         return;
  682.     }
  683.     m_sUiL1CalTxIq.BBTXParameters.apc_bat_high_voltage = d_data;
  684. }
  685. //---------------------------------------------------------------------------
  686. void __fastcall TfrmTXIQBBTXSetting::edtAPCBatLowTemperatureCheck(
  687.       TObject *Sender)
  688. {
  689.     double  d_data;
  690.     AnsiString  text;
  691.     TEdit *edit = (TEdit*)Sender;
  692.     char  hint[256] =
  693.     {   " value shall be -50 ~ 100 "
  694.     };
  695.     text = edit->Text;
  696.     if( !IsValidAPCBatLowTemperature( text, d_data ) )
  697.     {
  698.         edit->Text = IntToStr( Default_APCBatLowTemperature );
  699.         ShowHintLabel( edit, hint );
  700.         edit->SetFocus();
  701.         return;
  702.     }
  703.     m_sUiL1CalTxIq.BBTXParameters.apc_bat_low_temperature = d_data;
  704. }
  705. //---------------------------------------------------------------------------
  706. void __fastcall TfrmTXIQBBTXSetting::edtAPCBatHighTemperatureCheck(
  707.       TObject *Sender)
  708. {
  709.     double   d_data;
  710.     AnsiString  text;
  711.     TEdit *edit = (TEdit*)Sender;
  712.     char  hint[256] =
  713.     {   " value shall be -50 ~ 100 "
  714.     };
  715.     text = edit->Text;
  716.     if( !IsValidAPCBatHighTemperature( text, d_data ) )
  717.     {
  718.         edit->Text = IntToStr( Default_APCBatHighTemperature );
  719.         ShowHintLabel( edit, hint );
  720.         edit->SetFocus();
  721.         return;
  722.     }
  723.     m_sUiL1CalTxIq.BBTXParameters.apc_bat_high_temperature = d_data;
  724. }
  725. #if 0
  726. //============================================================================
  727. void TfrmTXIQBBTXSetting::SetBBTxParameterAccess( void )
  728. {
  729.     // low band
  730.     m_sBBTXParAccess.b_bbtx_common_mode_voltage = edtTXIQBBTXCommonModeVoltage->Visible;
  731.     m_sBBTXParAccess.b_bbtx_gain                = edtTXIQBBTXGain->Visible;
  732.     m_sBBTXParAccess.b_bbtx_calrcsel            = edtTXIQBBTXCalrcsel->Visible;
  733.     m_sBBTXParAccess.b_bbtx_phsel               = edtTXIQBBTXPhasesel->Visible;
  734.     m_sBBTXParAccess.b_bbtx_trimI               = edtTXIQBBTXTrimI->Visible;
  735.     m_sBBTXParAccess.b_bbtx_trimQ               = edtTXIQBBTXTrimQ->Visible;
  736.     m_sBBTXParAccess.b_bbtx_offsetI             = edtTXIQBBTXOffsetI->Visible;
  737.     m_sBBTXParAccess.b_bbtx_offsetQ             = edtTXIQBBTXOffsetQ->Visible;
  738.     // high band
  739.     m_sBBTXParAccess.b_bbtx_common_mode_voltage_h = edtTXIQBBTXCommonModeVoltageHigh->Visible;
  740.     m_sBBTXParAccess.b_bbtx_gain_h                = edtTXIQBBTXGainHigh->Visible;
  741.     m_sBBTXParAccess.b_bbtx_calrcsel_h            = edtTXIQBBTXCalrcselHigh->Visible;
  742.     m_sBBTXParAccess.b_bbtx_phsel_h               = edtTXIQBBTXPhaseselHigh->Visible;
  743.     m_sBBTXParAccess.b_bbtx_trimI_h               = edtTXIQBBTXTrimIHigh->Visible;
  744.     m_sBBTXParAccess.b_bbtx_trimQ_h               = edtTXIQBBTXTrimQHigh->Visible;
  745.     m_sBBTXParAccess.b_bbtx_offsetI_h             = edtTXIQBBTXOffsetIHigh->Visible;
  746.     m_sBBTXParAccess.b_bbtx_offsetQ_h             = edtTXIQBBTXOffsetQHigh->Visible;
  747.     // common
  748.     m_sBBTXParAccess.b_bbtx_isCalibrated        = edtTXIQBBTXCalibratedFlag->Visible;
  749.     m_sBBTXParAccess.b_apc_bat_low_voltage      = edtTXIQAPCBatLowVoltage->Visible;
  750.     m_sBBTXParAccess.b_apc_bat_high_voltage     = edtTXIQAPCBatHighVoltage->Visible;
  751.     m_sBBTXParAccess.b_apc_bat_low_temperature  = edtTXIQAPCBatLowTemperature->Visible;
  752.     m_sBBTXParAccess.b_apc_bat_high_temperature = edtTXIQAPCBatHighTemperature->Visible;
  753. }
  754. #endif
  755. //---------------------------------------------------------------------------
  756. void __fastcall TfrmTXIQBBTXSetting::btnTXIQUploadFromFlashClick(
  757.       TObject *Sender)
  758. {
  759.     if (!NVRAMMan->Get_IsInit())
  760.     {
  761.         frmMainSel->mnuFDMDatabaseClick(Sender);
  762.     }
  763.     if (!NVRAMMan->Get_IsInit())
  764.     {
  765.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) " NVRAM database file initialize fail";
  766.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  767.         return;
  768.     }
  769.     m_pcRF_TXIQ_Obj->ConfirmCallback = ::CNF_TXIQ_ReadFromNVRAM;
  770.     m_pcRF_TXIQ_Obj->REQ_Read_From_NVRAM_Start(m_uiFinalRfid, m_eBbTxCfgVer);
  771.     CurrentPageLock();
  772. }
  773. //---------------------------------------------------------------------------
  774. void  TfrmTXIQBBTXSetting::TXIQ_UploadFromFlashDone( void )
  775. {
  776.     E_METAAPP_RESULT_T state = m_pcRF_TXIQ_Obj->Get_ConfirmState();
  777.     char  str[20];
  778.     float  fdata;
  779.     switch( state )
  780.     {
  781.         case METAAPP_SUCCESS:
  782.         {
  783.            // if( m_bBBTxDownloadTrigger )
  784.            // {
  785.            //     m_pcRF_TXIQ_Obj->Set_UiBBTXParameters(m_sUiL1CalTxIq);
  786.            //     m_pcRF_TXIQ_Obj->ConfirmCallback = ::CNF_TXIQ_WriteToNVRAM;
  787.            //     m_pcRF_TXIQ_Obj->REQ_Write_To_NVRAM_Start(m_uiFinalRfid);
  788.            // }
  789.            // else
  790.             {
  791.                 S_UI_L1CAL_TXIQ* p_txiq = m_pcRF_TXIQ_Obj->Get_UiBBTXParameters();
  792.                 m_sUiL1CalTxIq = *p_txiq;
  793.                 RedrawBBTxParameters();
  794.                 sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Upload TXIQ setting from flash successful";
  795.             }
  796.         }
  797.         break;
  798.         case METAAPP_FAIL:
  799.         {
  800.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Upload TXIQ setting from flash fail, please check the version of load and NVRAM database are same.";
  801.             Application->MessageBox( "Execution Failure : Upload TXIQ setting form flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  802.         }
  803.         break;
  804.         case METAAPP_TIMEOUT:
  805.         {
  806.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Upload TXIQ setting from flash timeout";
  807.             Application->MessageBox( "Execution Timeout : Upload TXIQ setting form flash", "TIMEOUT", MB_OK );
  808.         }
  809.         break;
  810.         case METAAPP_STOP:
  811.         {
  812.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Upload TXIQ setting from flash stop";
  813.         }
  814.         break;
  815.     }
  816.     CurrentPageReset();
  817. }
  818. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  819. void __fastcall TfrmTXIQBBTXSetting::btnTXIQDownloadToFlashClick(
  820.       TObject *Sender)
  821. {
  822.     if (!NVRAMMan->Get_IsInit())
  823.     {
  824.         frmMainSel->mnuFDMDatabaseClick(Sender);
  825.     }
  826.     if( ! NVRAMMan->Get_IsInit() )
  827.     {
  828.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialize fail";
  829.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  830.         return;
  831.     }
  832.     S_BBTXPARA_CHANGE_FLAG_T flag;
  833.     Get_BBTXChangeFlag(flag);
  834.     m_pcRF_TXIQ_Obj->Set_BBTXChangeFlag(flag);
  835.     m_pcRF_TXIQ_Obj->Set_UiBBTXParameters(m_eBbTxCfgVer, m_uiFinalRfid, m_sUiL1CalTxIq);
  836.     m_pcRF_TXIQ_Obj->ConfirmCallback = ::CNF_TXIQ_WriteToNVRAM;
  837.     m_pcRF_TXIQ_Obj->REQ_Write_To_NVRAM_Start(m_uiFinalRfid, m_eBbTxCfgVer);
  838.     CurrentPageLock();
  839. }
  840. //---------------------------------------------------------------------------
  841. void  TfrmTXIQBBTXSetting::TXIQ_DownloadToFlashDone( void )
  842. {
  843.     E_METAAPP_RESULT_T state = m_pcRF_TXIQ_Obj->Get_ConfirmState();
  844.     CurrentPageReset();
  845.     switch( state )
  846.     {
  847.         case METAAPP_SUCCESS:
  848.         {
  849.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Download TXIQ setting to flash successful";
  850.         }
  851.         break;
  852.         case METAAPP_FAIL:
  853.         {
  854.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Download TXIQ setting to flash fail, please check the version of load and NVRAM database are same.";
  855.             Application->MessageBox( "Execution Failure : Download TXIQ setting to flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  856.         }
  857.         break;
  858.         case METAAPP_TIMEOUT:
  859.         {
  860.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Download TXIQ setting to flash timeout";
  861.             Application->MessageBox( "Execution Timeout : Download TXIQ setting to flash", "TIMEOUT", MB_OK );
  862.         }
  863.         break;
  864.         case METAAPP_STOP:
  865.         {
  866.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Download TXIQ setting to flash stop";
  867.         }
  868.         break;
  869.         case METAAPP_NVRAM_LID_VER_NOT_SUPPORT:
  870.         {
  871.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  NVRAM_EF_L1_TXIQ_LID version is not support, please update META to latest version";
  872.             Application->MessageBox("Execution Warning : NVRAM_EF_L1_TXIQ_LID version is not support, please update META to latest version", "WARNING", MB_OK);
  873.         }
  874.         break;
  875.         default:
  876.         {
  877.         }
  878.         break;
  879.    }
  880. }
  881. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  882. void __fastcall TfrmTXIQBBTXSetting::btnTXIQChangeDBClick(TObject *Sender)
  883. {
  884.     frmMainSel->mnuFDMDatabaseClick(Sender);
  885.     if( ! NVRAMMan->Get_IsInit() )
  886.     {
  887.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  888.         Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  889.         return;
  890.     }
  891.     sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Change NVRAM database file successfully";    
  892. }
  893. //---------------------------------------------------------------------------
  894. void __fastcall TfrmTXIQBBTXSetting::btnTXIQLoadFromFileClick(
  895.       TObject *Sender)
  896. {
  897.     char str[512];
  898.     bool ok;
  899.     float  fdata;
  900.     ok = dlgOpen->Execute();
  901.     if( !ok )
  902.     {
  903.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Load TXIQ setting from file fail";
  904.         Application->MessageBox( "Execution Failure : Load TXIQ setting from file", "FAILURE", MB_OK );
  905.         return;
  906.     }
  907.     strcpy( str, dlgOpen->FileName.c_str() );
  908.     ok = m_pcRF_TXIQ_Obj->REQ_Read_From_File(str, m_uiFinalRfid, m_eBbTxCfgVer);
  909.     if( ok )
  910.     {
  911.         S_UI_L1CAL_TXIQ* p_txiq = m_pcRF_TXIQ_Obj->Get_UiBBTXParameters();
  912.         m_sUiL1CalTxIq = *p_txiq;
  913.         RedrawBBTxParameters();
  914.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Load TXIQ setting from file successful";
  915.     }
  916.     else
  917.     {
  918.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Load TXIQ setting from file fail";
  919.         Application->MessageBox( "Execution Failure : Load TXIQ setting from file", "FAILURE", MB_OK );
  920.     }
  921. }
  922. //---------------------------------------------------------------------------
  923. void __fastcall TfrmTXIQBBTXSetting::btnTXIQSaveToFileClick(
  924.       TObject *Sender)
  925. {
  926.     char str[512];
  927.     bool ok;
  928.     ok = dlgSave->Execute();
  929.     if( !ok )
  930.     {
  931.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Save TXIQ setting to file fail";
  932.         Application->MessageBox( "Execution Failure : Save TXIQ setting to file", "FAILURE", MB_OK );
  933.         return;
  934.     }
  935.     strcpy( str, dlgSave->FileName.c_str() );
  936.     S_BBTXPARA_CHANGE_FLAG_T flag;
  937.     Get_BBTXChangeFlag(flag);
  938.     m_pcRF_TXIQ_Obj->Set_BBTXChangeFlag(flag);
  939.     
  940.     m_pcRF_TXIQ_Obj->Set_UiBBTXParameters(m_eBbTxCfgVer, m_uiFinalRfid, m_sUiL1CalTxIq);
  941.     ok = m_pcRF_TXIQ_Obj->REQ_Write_To_File(str, m_uiFinalRfid, m_eBbTxCfgVer);
  942.     if (!ok)
  943.     {
  944.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Save TXIQ setting to file fail";
  945.         Application->MessageBox( "Execution Failure : Save TXIQ setting to file", "FAILURE", MB_OK );
  946.     }
  947.     else
  948.     {
  949.         sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Save TXIQ setting to file successfully";
  950.     }    
  951. }
  952. //---------------------------------------------------------------------------
  953. void __fastcall TfrmTXIQBBTXSetting::Timer2Timer(TObject *Sender)
  954. {
  955.     HintTimer->Enabled = false;
  956.     lblHint->Visible = false;
  957. }
  958. //---------------------------------------------------------------------------
  959. void __fastcall TfrmTXIQBBTXSetting::btnTXStartClick(TObject *Sender)
  960. {
  961.     E_BANDSEL e_band;
  962.     short arfcn;
  963.     int   tsc;
  964.     int   pcl;
  965.     short   s_afc_dac;
  966.     APCTxPattern e_burst_type;
  967.     signed char  trim_i;
  968.     signed char  trim_q;
  969.     signed char  off_i;
  970.     signed char  off_q;
  971.     AnsiString  text;
  972.     if (btnTXStart->Tag)
  973.     {
  974.         return;
  975.     }
  976.     e_band = (E_BANDSEL) cbxTXBand->ItemIndex;
  977.     text = edtTXArfcn->Text;    if( !IsValidARFCN( text, e_band, arfcn ) )      {  edtArfcnCheck(edtTXArfcn);      return;   }
  978.     text = edtTXPcl->Text;      if( !IsValidPCL( text, e_band, pcl ) )          {  edtPclCheck(edtTXPcl);          return;   }
  979.     text = edtTXAfc->Text;      if (!IsValidAFC(text, s_afc_dac))            {  edtAfcDacCheck(edtTXAfc);       return;   }
  980.     tsc = cbxTXTsc->ItemIndex;
  981.     CurrentPageLock();
  982.     if (MOD_GMSK_INDEX == cbTXModulation->ItemIndex)
  983.     {
  984.         e_burst_type = Get_GmskBurstType();
  985.         S_RFTX rf_tx;
  986.         rf_tx.e_bandsel = e_band;
  987.         rf_tx.s_RfNbTxReq.arfcn  = arfcn;
  988.         rf_tx.s_RfNbTxReq.bsic   = tsc;
  989.         rf_tx.s_RfNbTxReq.power  = pcl;
  990.         rf_tx.s_RfNbTxReq.frames = -99;
  991.         rf_tx.s_RfNbTxReq.dacValue = s_afc_dac;
  992.         rf_tx.s_RfNbTxReq.burstTypeNB = e_burst_type;
  993.         m_pcRF_TX_Obj->ConfirmCallback  = ::ConfirmCallback_TX;
  994.         m_pcRF_TX_Obj->REQ_Start(rf_tx);
  995.     }
  996.     else
  997.     {
  998.         int   pcl_ms[4];
  999.         CodingScheme e_cs_ms[4];
  1000.         //bool  isEDGEsupport;
  1001.         unsigned short pattern_data;
  1002.         int   ta;
  1003.         char TimeSlotMask = 0x01;
  1004.         e_cs_ms[0]  = (CodingScheme) cbTXCS->ItemIndex + (int) CodingSchemeMCS5;
  1005.         e_cs_ms[1]  = (CodingScheme) cbTXCS->ItemIndex + (int) CodingSchemeMCS5;
  1006.         e_cs_ms[2]  = (CodingScheme) cbTXCS->ItemIndex + (int) CodingSchemeMCS5;
  1007.         e_cs_ms[3]  = (CodingScheme) cbTXCS->ItemIndex + (int) CodingSchemeMCS5;
  1008.         text = edtTXPcl->Text;              if( !IsValidPCL( text, e_band, pcl_ms[0] ) )       {  edtPclCheck(edtTXPcl);                  return;   }
  1009.         pcl_ms[1] = pcl_ms[0];
  1010.         pcl_ms[2] = pcl_ms[0];
  1011.         pcl_ms[3] = pcl_ms[0];
  1012.         text = edtTXTA->Text;               if( !IsValidTA( text, ta ) )                  {  edtTACheck(edtTXTA);            return;   }
  1013.         m_sFinalMSCAP = frmMainSel->Get_FinalMSCap();
  1014.         //if( m_sFinalMSCAP.capability.EDGE_8PSK_TX )
  1015.         //{
  1016.         //    isEDGEsupport = 1;
  1017.         //}
  1018.         //else
  1019.         //{
  1020.         //    isEDGEsupport = 0;
  1021.         //}
  1022.         e_burst_type = Get_EpskBurstType();
  1023.         if (NB_TX_PATTERN_WITHOUT_TSC == e_burst_type)
  1024.         {
  1025.             text = edtTXPattern->Text;       if( !IsValidMultiSlotTxPattern( text, pattern_data ) )                  {  edtPatternCheck(edtTXPattern);            return;   }
  1026.         }
  1027.         S_MULTI_SLOT_TX_T multi_slot_tx;
  1028.         multi_slot_tx.b_MultiSlotTXExSupport = m_bMultiSlotTxExSupport;
  1029.         multi_slot_tx.e_bandsel = e_band;
  1030.         multi_slot_tx.req.arfcn = arfcn;
  1031.         multi_slot_tx.req.bsic  = tsc;
  1032.         multi_slot_tx.req.timeSlotmask = TimeSlotMask;
  1033.         for (int i=0; i<4; i++)
  1034.         {
  1035.             multi_slot_tx.req.powerLev[i] = pcl_ms[i];
  1036.     multi_slot_tx.req.cs[i]       = e_cs_ms[i];
  1037.         }
  1038.         multi_slot_tx.req.ta = ta;
  1039.         multi_slot_tx.req.frames = -99;
  1040.         multi_slot_tx.req.dacValue = s_afc_dac;
  1041.         multi_slot_tx.req.pattern = e_burst_type;
  1042.         multi_slot_tx.req.pattern_data = pattern_data;
  1043.         m_pcRF_MULTI_SLOT_TX_Obj->ConfirmCallback = ::ConfirmCallback_MultiSlotTX;
  1044.         m_pcRF_MULTI_SLOT_TX_Obj->REQ_Start(multi_slot_tx);
  1045.     }
  1046.     sbTXIQ->Panels->Items[0]->Text = (AnsiString)"  Burst TX processing";
  1047. }
  1048. //---------------------------------------------------------------------------
  1049. void  TfrmTXIQBBTXSetting::ConfirmCallback_TX( void )
  1050. {
  1051.     E_METAAPP_RESULT_T state = m_pcRF_TX_Obj->Get_ConfirmState();
  1052.     switch (state)
  1053.     {
  1054.         case METAAPP_SUCCESS:
  1055.         {
  1056.             sbTXIQ->Panels->Items[0]->Text = (AnsiString)"  Burst TX progressing";
  1057.         }
  1058.         break;
  1059.         case METAAPP_FAIL:
  1060.         {
  1061.             sbTXIQ->Panels->Items[0]->Text = (AnsiString)"  Burst TX fail";
  1062.             Application->MessageBox( "Execution Failure : Burst TX", "FAILURE", MB_OK );
  1063.             Force_RF_Stop();
  1064.             CurrentPageReset();
  1065.         }
  1066.         break;
  1067.         case METAAPP_TIMEOUT:
  1068.         {
  1069.             sbTXIQ->Panels->Items[0]->Text = (AnsiString)"  Burst TX timeout";
  1070.             Application->MessageBox( "Execution Timout : Burst TX", "TIMEOUT", MB_OK );
  1071.             Force_RF_Stop();
  1072.            CurrentPageReset();
  1073.         }
  1074.         break;
  1075.         case METAAPP_STOP:
  1076.         {
  1077.             sbTXIQ->Panels->Items[0]->Text = (AnsiString)"  Burst TX stop";
  1078.         }
  1079.         break;
  1080.     }
  1081. }
  1082. //---------------------------------------------------------------------------
  1083. void  TfrmTXIQBBTXSetting::ConfirmCallback_MultiSlotTX( void )
  1084. {
  1085.     E_METAAPP_RESULT_T state = m_pcRF_MULTI_SLOT_TX_Obj->Get_ConfirmState();
  1086.     switch( state )
  1087.     {
  1088.         case METAAPP_SUCCESS:
  1089.         {
  1090.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Burst TX progressing";
  1091.         }
  1092.         break;
  1093.         case METAAPP_FAIL:
  1094.         {
  1095.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Burst TX fail";
  1096.             Application->MessageBox( "Execution Failure : Burst TX", "FAILURE", MB_OK );
  1097.             Force_RF_Stop();
  1098.             CurrentPageReset();
  1099.         }
  1100.         break;
  1101.         case METAAPP_TIMEOUT:
  1102.         {
  1103.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Burst TX timeout";
  1104.             Application->MessageBox( "Execution Timeout : Burst TX", "TIMEOUT", MB_OK );
  1105.             Force_RF_Stop();
  1106.             CurrentPageReset();
  1107.         }
  1108.         break;
  1109.         case METAAPP_STOP:
  1110.         {
  1111.             sbTXIQ->Panels->Items[0]->Text = (AnsiString) "  Burst TX stop";
  1112.         }
  1113.         break;
  1114.     }
  1115. }
  1116. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1117. void __fastcall TfrmTXIQBBTXSetting::btnTXStopClick(TObject *Sender)
  1118. {
  1119.     if( 1 == btnTXStart->Tag )
  1120.     {
  1121.         sbTXIQ->Panels->Items[0]->Text = (AnsiString)"  Burst TX stop";
  1122.         Force_RF_Stop();
  1123.         CurrentPageReset();
  1124.         return;
  1125.     }
  1126. }
  1127. //---------------------------------------------------------------------------
  1128. void  TfrmTXIQBBTXSetting::Force_RF_Stop( void )
  1129. {
  1130.     m_pcRF_TX_Obj->REQ_Stop();
  1131.     //m_pcRF_TXIQ_Obj->REQ_Stop();
  1132.     m_pcRF_MULTI_SLOT_TX_Obj->REQ_Stop();
  1133.     m_pcRF_STOP_Obj->REQ_Start();
  1134. }
  1135. //--------------------------------------------------------------------------
  1136. APCTxPattern TfrmTXIQBBTXSetting::Get_GmskBurstType(void)
  1137. {
  1138.     APCTxPattern e_bt;
  1139.     if (cbTXBurstType->Text.AnsiCompareIC("AB") == 0)
  1140.     {
  1141.         e_bt = AB_TX_RANDOM_WITH_SYNC_SEQ;
  1142.     }
  1143.     else if (cbTXBurstType->Text.AnsiCompareIC("All 1") == 0)
  1144.     {
  1145.         e_bt = NB_TX_ALL_ONES_WITHOUT_TSC;
  1146.     }
  1147.     else
  1148.     {
  1149.         e_bt = NB_TX_RANDOM_WITH_TSC;
  1150.     }
  1151.     return e_bt;
  1152. }
  1153. //--------------------------------------------------------------------------
  1154. APCTxPattern TfrmTXIQBBTXSetting::Get_EpskBurstType(void)
  1155. {
  1156.     APCTxPattern e_bt;
  1157.     if (cbTXBurstType->Text.AnsiCompareIC("All 0") == 0)
  1158.     {
  1159.         e_bt = NB_TX_ALL_ZEROS_WITHOUT_TSC;
  1160.     }
  1161.     else if (cbTXBurstType->Text.AnsiCompareIC("All 1") == 0)
  1162.     {
  1163.         e_bt = NB_TX_ALL_ONES_WITHOUT_TSC;
  1164.     }
  1165.     else if (cbTXBurstType->Text.AnsiCompareIC("Pattern") == 0)
  1166.     {
  1167.         e_bt = NB_TX_PATTERN_WITHOUT_TSC;
  1168.     }
  1169.     else if (cbTXBurstType->Text.AnsiCompareIC("Fixed (TSC)") == 0)
  1170.     {
  1171.         e_bt = NB_TX_FIXED_RANDOM_WITH_TSC;
  1172.     }
  1173.     else if (cbTXBurstType->Text.AnsiCompareIC("Fixed All 0 (TSC)") == 0)
  1174.     {
  1175.         e_bt = NB_TX_FIXED_ALL_ZEROS_WITH_TSC;
  1176.     }
  1177.     else if (cbTXBurstType->Text.AnsiCompareIC("Fixed Alter Bits (TSC)") == 0)
  1178.     {
  1179.         e_bt = NB_TX_FIXED_ALTER_BITS_WITH_TSC;
  1180.     }
  1181.     else
  1182.     {
  1183.         e_bt = NB_TX_RANDOM_WITH_TSC;
  1184.     }
  1185.     return e_bt;
  1186. }
  1187. //============================================================================
  1188. /////////////////////////// export information  //////////////////////////////
  1189. //============================================================================
  1190. void TfrmTXIQBBTXSetting::Set_RF_TX_Obj( CRFTX* rf_tx_obj )
  1191. {   m_pcRF_TX_Obj = rf_tx_obj;
  1192. }
  1193. //----------------------------------------------------------------------------
  1194. void TfrmTXIQBBTXSetting::Set_RF_TXIQ_Obj( CRFTXIQ  *rf_txiq_obj )
  1195. {
  1196.     m_pcRF_TXIQ_Obj = rf_txiq_obj;
  1197. }
  1198. //----------------------------------------------------------------------------
  1199. void TfrmTXIQBBTXSetting::Set_RF_MULTI_SLOT_TX_Obj( CRFMULTISLOTTX    *rf_multi_slot_tx_obj )
  1200. {
  1201.     m_pcRF_MULTI_SLOT_TX_Obj = rf_multi_slot_tx_obj;
  1202. }
  1203. //----------------------------------------------------------------------------
  1204. void TfrmTXIQBBTXSetting::Set_RF_STOP_Obj( CRFSTOP* rf_stop_obj )
  1205. {   m_pcRF_STOP_Obj = rf_stop_obj;
  1206. }
  1207. void __fastcall TfrmTXIQBBTXSetting::cbTXModulationChange(TObject *Sender)
  1208. {
  1209.     if( MOD_GMSK_INDEX == cbTXModulation->ItemIndex )
  1210.     {
  1211.         Display_TxGmskUi();
  1212.     }
  1213.     else
  1214.     {
  1215.         Display_TxEpskUi();
  1216.     }
  1217. }
  1218. //---------------------------------------------------------------------------
  1219. void __fastcall TfrmTXIQBBTXSetting::cbxBandChange(TObject *Sender)
  1220. {
  1221.     TEdit *edit = edtTXArfcn;
  1222.     short sdata;
  1223.     if (!frmMainSel->cbGSM850->Checked)
  1224.     {
  1225.         if (BANDSEL_GSM850 == (E_BANDSEL) ((TComboBox*)Sender)->ItemIndex )
  1226.         {
  1227.             ((TComboBox*)Sender)->ItemIndex = 0;
  1228.             Application->MessageBox( "Please check GSM 850 on main menu", "FAILURE", MB_OK );
  1229.         }
  1230.     }
  1231.     m_eCurBand = (E_BANDSEL) ((TComboBox*)Sender)->ItemIndex;
  1232.     edtArfcnCheck(edit);
  1233.     if( !IsValidARFCN(edit->Text, m_eCurBand, sdata) )
  1234.     {
  1235.         edit->Text = IntToStr( Default_ARFCN[m_eCurBand] );
  1236.     }
  1237.     
  1238. }
  1239. //---------------------------------------------------------------------------
  1240. void __fastcall TfrmTXIQBBTXSetting::cbTXBurstTypeChange(TObject *Sender)
  1241. {
  1242.     if( cbTXBurstType->Text.AnsiCompareIC("Pattern") == 0 )
  1243.     {
  1244.         lblTXPattern->Visible = true;
  1245.         edtTXPattern->Visible = true;
  1246.     }
  1247.     else
  1248.     {
  1249.         lblTXPattern->Visible = false;
  1250.         edtTXPattern->Visible = false;
  1251.     }    
  1252. }
  1253. //---------------------------------------------------------------------------
  1254. void __fastcall TfrmTXIQBBTXSetting::edtTXIQBBTXPhaseselCheck(
  1255.       TObject *Sender)
  1256. {
  1257.     signed char  data;
  1258.     AnsiString  text;
  1259.     TEdit *edit = (TEdit*)Sender;
  1260.     char  hint[2][256] =
  1261.     {
  1262.         " value shall be -3 ~ 3 ",
  1263.         " value shall be -5 ~ 5 "
  1264.     };
  1265.     text = edit->Text;
  1266.     if (!IsValidBBTXPhasesel(m_eBbTxCfgVer, text, data))
  1267.     {
  1268.         if (m_eBbTxCfgVer <= BBTXCFG_VER4)
  1269.         {
  1270.             ShowHintLabel(edit, hint[0]);
  1271.         }
  1272.         else
  1273.         {
  1274.             ShowHintLabel(edit, hint[1]);
  1275.         }
  1276.         edit->Text = Default_TrimIQ;
  1277.         edit->SetFocus();
  1278.         return;
  1279.     }
  1280.     if( 0 == edit->Tag ) // low band
  1281.     {
  1282.         m_sUiL1CalTxIq.BBTXParameters.bbtx_phsel = data;
  1283.     }
  1284.     else
  1285.     {   m_sUiL1CalTxIq.BBTXParameters.bbtx_phsel_h = data;
  1286.     }
  1287. }