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

MTK

开发平台:

C++ Builder

  1. //--------------------------------------------------------------------------
  2. #include <vcl.h>  
  3. #pragma hdrstop
  4. // form
  5. #ifndef _FORM_WiFI_H_
  6. #include "form_WiFI.h"
  7. #endif
  8. #ifndef _FORM_MAIN_H_
  9. #include "form_main.h"
  10. #endif
  11. #ifndef  _FORM_WIFITXPROFILE_H_
  12. #include "form_wifitxprofile.h"
  13. #endif
  14. #ifndef _FORM_WIFIALC2400M_H_
  15. #include "form_WiFiALC2400M.h"
  16. #endif
  17. #ifndef _FORM_WIFIBBCR_H_
  18. #include "form_wifibbcr.h"
  19. #endif
  20. #ifndef _FORM_WIFIMCR_H_
  21. #include "form_wifimcr.h"
  22. #endif
  23. #ifndef _FORM_WIFIEEPROM_H_
  24. #include "form_WiFiEEPROM.h"
  25. #endif
  26. // WiFi
  27. #ifndef  _WIFI_COMMON_H_
  28. #include "wifi_common.h"
  29. #endif
  30. #ifndef  _MT5911_COMMON_H_
  31. #include "mt5911_common.h"
  32. #endif
  33. // man
  34. #ifndef  _MAN_FDM_H_
  35. #include "man_fdm.h"
  36. #endif
  37. // Misc.
  38. #ifndef  _MISC_WIFI_H_
  39. #include "misc_wifi.h"
  40. #endif
  41. // message
  42. #ifndef _META_LAB_MSG_H_
  43. #include "meta_lab_msg.h"
  44. #endif
  45. #define WIFI_DBM_MAX    0
  46. #define WIFI_DBM_0      1
  47. #define WIFI_DBM_5      2
  48. #define WIFI_DBM_10     3
  49. // bit pattern
  50. #define WIFI_IDX_ALL_0      0
  51. #define WIFI_IDX_ALL_1      1
  52. #define WIFI_IDX_ALTERNATE  2
  53. #define WIFI_IDX_RANDOM     3
  54. enum
  55. {
  56.     PAGEIDX_TXALL=0,
  57.     PAGEIDX_CPRX,
  58.     PAGEIDX_PS,
  59.     PAGEIDX_BB,
  60.     PAGEIDX_MAC,
  61.     PAGEIDX_EE,
  62.     PAGEIDX_SC,
  63.     PAGEIDX_NONE
  64. };
  65. enum
  66. {
  67.     TYPEIDX_CPTX=0,
  68.     TYPEIDX_TXOP,
  69.     TYPEIDX_TXCS,
  70.     TYPEIDX_LF
  71. };
  72. enum
  73. {
  74.     IDX_TX_FILTER_NORTH_AMERICA=0,
  75.     IDX_TX_FILTER_JAPAN
  76. };
  77. //---------------------------------------------------------------------------
  78. #pragma package(smart_init)
  79. #pragma resource "*.dfm"
  80. TfrmWiFi *frmWiFi;
  81. extern bool g_bHideEnable;
  82. //===========================================================================
  83. void ConfirmCallback_QueryChannelList( void )
  84. {   frmWiFi->ConfirmCallback_QueryChannelList();
  85. }
  86. //--------------------------------------------------------------------------
  87. static void ConfirmCallback_CPT( void )
  88. {   frmWiFi->ConfirmCallback_CPT();
  89. }
  90. //---------------------------------------------------------------------------
  91. static void ConfirmCallback_QueryTxStatus( void )
  92. {   frmWiFi->ConfirmCallback_QueryTxStatus();
  93. }
  94. //---------------------------------------------------------------------------
  95. static void CNF_CPTX_ReadTxPower2400MFromNVRAM( void )
  96. {   frmWiFi->CPTX_UploadTxPower2400MFromFlashDone();
  97. }
  98. //---------------------------------------------------------------------------
  99. static void CNF_CPTX_WriteTxPower2400MToNVRAM( void )
  100. {   frmWiFi->CPTX_DownloadTxPower2400MToFlashDone();
  101. }
  102. //---------------------------------------------------------------------------
  103. static void CNF_CPTX_ReadTxPower5000MFromNVRAM( void )
  104. {   frmWiFi->CPTX_UploadTxPower5000MFromFlashDone();
  105. }
  106. //---------------------------------------------------------------------------
  107. static void CNF_ReadTxDCFromNVRAM( void )
  108. {   frmWiFi->UploadTxDCFromFlashDone();
  109. }
  110. //---------------------------------------------------------------------------
  111. static void CNF_CPTX_WriteTxPower5000MToNVRAM( void )
  112. {   frmWiFi->CPTX_DownloadTxPower5000MToFlashDone();
  113. }
  114. //---------------------------------------------------------------------------
  115. static void CNF_TXOP_ReadTxPower2400MFromNVRAM( void )
  116. {   frmWiFi->TXOP_UploadTxPower2400MFromFlashDone();
  117. }
  118. //---------------------------------------------------------------------------
  119. static void CNF_TXOP_WriteTxPower2400MToNVRAM( void )
  120. {   frmWiFi->TXOP_DownloadTxPower2400MToFlashDone();
  121. }
  122. //---------------------------------------------------------------------------
  123. static void CNF_TXOP_ReadTxPower5000MFromNVRAM( void )
  124. {   frmWiFi->TXOP_UploadTxPower5000MFromFlashDone();
  125. }
  126. //---------------------------------------------------------------------------
  127. static void CNF_TXOP_WriteTxPower5000MToNVRAM( void )
  128. {   frmWiFi->TXOP_DownloadTxPower5000MToFlashDone();
  129. }
  130. //---------------------------------------------------------------------------
  131. static void CNF_WriteTxDCToNVRAM( void )
  132. {   frmWiFi->DownloadTxDCToFlashDone();
  133. }
  134. //---------------------------------------------------------------------------
  135. static void ConfirmCallback_CPRX( void )
  136. {   frmWiFi->ConfirmCallback_CPRX();
  137. }
  138. //---------------------------------------------------------------------------
  139. static void ConfirmCallback_QueryOriRxStatus( void )
  140. {   frmWiFi->ConfirmCallback_QueryOriRxStatus();
  141. }
  142. //---------------------------------------------------------------------------
  143. static void ConfirmCallback_QueryRxStatus( void )
  144. {   frmWiFi->ConfirmCallback_QueryRxStatus();
  145. }
  146. //---------------------------------------------------------------------------
  147. static void ConfirmCallback_QueryRxCounter( void )
  148. {   frmWiFi->ConfirmCallback_QueryRxCounter();
  149. }
  150. //---------------------------------------------------------------------------
  151. static void  ConfirmCallback_TxDcOffsetCal( void )
  152. {   frmWiFi->ConfirmCallback_TxDcOffsetCal();
  153. }
  154. //---------------------------------------------------------------------------
  155. static void ConfirmCallback_TXOP( void )
  156. {   frmWiFi->ConfirmCallback_TXOP();
  157. }
  158. //---------------------------------------------------------------------------
  159. static void ConfirmCallback_TXCS( void )
  160. {   frmWiFi->ConfirmCallback_TXCS();
  161. }
  162. //---------------------------------------------------------------------------
  163. static void ConfirmCallback_LF( void )
  164. {   frmWiFi->ConfirmCallback_LF();
  165. }
  166. //---------------------------------------------------------------------------
  167. static void ConfirmCallback_PS( void )
  168. {   frmWiFi->ConfirmCallback_PS();
  169. }
  170. //---------------------------------------------------------------------------
  171. static void ConfirmCallback_ReadBBReg( void )
  172. {   frmWiFi->ConfirmCallback_ReadBBReg();
  173. }
  174. //---------------------------------------------------------------------------
  175. static void ConfirmCallback_ReadAllBBReg( void )
  176. {   frmWiFi->ConfirmCallback_ReadAllBBReg();
  177. }
  178. //---------------------------------------------------------------------------
  179. static void ConfirmCallback_WriteBBReg( void )
  180. {   frmWiFi->ConfirmCallback_WriteBBReg();
  181. }
  182. //---------------------------------------------------------------------------
  183. static void ConfirmCallback_ReadMACReg( void )
  184. {   frmWiFi->ConfirmCallback_ReadMACReg();
  185. }
  186. //---------------------------------------------------------------------------
  187. static void ConfirmCallback_ReadAllMACReg( void )
  188. {   frmWiFi->ConfirmCallback_ReadAllMACReg();
  189. }
  190. //---------------------------------------------------------------------------
  191. static void ConfirmCallback_WriteMACReg( void )
  192. {   frmWiFi->ConfirmCallback_WriteMACReg();
  193. }
  194. //---------------------------------------------------------------------------
  195. static void ConfirmCallback_ReadEE( void )
  196. {   frmWiFi->ConfirmCallback_ReadEE();
  197. }
  198. //---------------------------------------------------------------------------
  199. static void ConfirmCallback_ReadAllEE( void )
  200. {   frmWiFi->ConfirmCallback_ReadAllEE();
  201. }
  202. //---------------------------------------------------------------------------
  203. static void ConfirmCallback_WriteEE( void )
  204. {   frmWiFi->ConfirmCallback_WriteEE();
  205. }
  206. //---------------------------------------------------------------------------
  207. static void CNF_TXOP_SetDbmToDac( void )
  208. {   frmWiFi->CNF_TXOP_SetDbmToDac();
  209. }
  210. //---------------------------------------------------------------------------
  211. static void  CNF_TXOP_QueryDbmToDac( void )
  212. {   frmWiFi->CNF_TXOP_QueryDbmToDac();
  213. }
  214. //---------------------------------------------------------------------------
  215. static void ConfirmCallback_SC( void )
  216. {   frmWiFi->ConfirmCallback_SC();
  217. }
  218. //---------------------------------------------------------------------------
  219. static void ConfirmCallback_ReadTxPowerFromEE( void )
  220. {   frmWiFi->ConfirmCallback_ReadTxPowerFromEE();
  221. }
  222. //---------------------------------------------------------------------------
  223. static void ConfirmCallback_ReadTxDcOffsetFromEE( void )
  224. {   frmWiFi->ConfirmCallback_ReadTxDcOffsetFromEE();
  225. }
  226. //===========================================================================
  227. __fastcall TfrmWiFi::TfrmWiFi(TComponent* Owner)
  228.         : TForm(Owner)
  229. {
  230.     Init();
  231.     m_bFirstCPTXShow = true;
  232.     m_bFirstCPRXShow = true;
  233.     m_bFirstTXOPShow = true;
  234.     m_bFirstTXCSShow = true;
  235.     m_bFirstLFShow   = true;
  236.     m_bFirstCSShow   = true;
  237.     m_bFirstBBShow   = true;
  238.     m_bFirstMACShow  = true;
  239.     // TX
  240.     edtTXFramCtrl[0] = edtTXFramCtrl0;   edtTXDuration[0] = edtTXDuration0; edtTXSeqCtrl[0] = edtTXSeqCtrl0;
  241.     edtTXFramCtrl[1] = edtTXFramCtrl1;   edtTXDuration[1] = edtTXDuration1; edtTXSeqCtrl[1] = edtTXSeqCtrl1;
  242.     edtTXAddress1[0] = edtTXAddress10;   edtTXAddress2[0] = edtTXAddress20;  edtTXAddress3[0] = edtTXAddress30;
  243.     edtTXAddress1[1] = edtTXAddress11;   edtTXAddress2[1] = edtTXAddress21;  edtTXAddress3[1] = edtTXAddress31;
  244.     edtTXAddress1[2] = edtTXAddress12;   edtTXAddress2[2] = edtTXAddress22;  edtTXAddress3[2] = edtTXAddress32;
  245.     edtTXAddress1[3] = edtTXAddress13;   edtTXAddress2[3] = edtTXAddress23;  edtTXAddress3[3] = edtTXAddress33;
  246.     edtTXAddress1[4] = edtTXAddress14;   edtTXAddress2[4] = edtTXAddress24;  edtTXAddress3[4] = edtTXAddress34;
  247.     edtTXAddress1[5] = edtTXAddress15;   edtTXAddress2[5] = edtTXAddress25;  edtTXAddress3[5] = edtTXAddress35;
  248.     // Continuous packet RX
  249.     stCPRSum[0]  = stCPR1MSum;    stCPRGood[0]  = stCPR1MGood;   stCPRBad[0]  = stCPR1MBad;   stCPRFer[0]  = stCPR1MFer;
  250.     stCPRSum[1]  = stCPR2MSum;    stCPRGood[1]  = stCPR2MGood;   stCPRBad[1]  = stCPR2MBad;   stCPRFer[1]  = stCPR2MFer;
  251.     stCPRSum[2]  = stCPR5_5MSum;  stCPRGood[2]  = stCPR5_5MGood; stCPRBad[2]  = stCPR5_5MBad; stCPRFer[2]  = stCPR5_5MFer;
  252.     stCPRSum[3]  = stCPR11MSum;   stCPRGood[3]  = stCPR11MGood;  stCPRBad[3]  = stCPR11MBad;  stCPRFer[3]  = stCPR11MFer;
  253.     stCPRSum[4]  = stCPR6MSum;    stCPRGood[4]  = stCPR6MGood;   stCPRBad[4]  = stCPR6MBad;   stCPRFer[4]  = stCPR6MFer;
  254.     stCPRSum[5]  = stCPR9MSum;    stCPRGood[5]  = stCPR9MGood;   stCPRBad[5]  = stCPR9MBad;   stCPRFer[5]  = stCPR9MFer;
  255.     stCPRSum[6]  = stCPR12MSum;   stCPRGood[6]  = stCPR12MGood;  stCPRBad[6]  = stCPR12MBad;  stCPRFer[6]  = stCPR12MFer;
  256.     stCPRSum[7]  = stCPR18MSum;   stCPRGood[7]  = stCPR18MGood;  stCPRBad[7]  = stCPR18MBad;  stCPRFer[7]  = stCPR18MFer;
  257.     stCPRSum[8]  = stCPR24MSum;   stCPRGood[8]  = stCPR24MGood;  stCPRBad[8]  = stCPR24MBad;  stCPRFer[8]  = stCPR24MFer;
  258.     stCPRSum[9]  = stCPR36MSum;   stCPRGood[9]  = stCPR36MGood;  stCPRBad[9]  = stCPR36MBad;  stCPRFer[9]  = stCPR36MFer;
  259.     stCPRSum[10] = stCPR48MSum;   stCPRGood[10] = stCPR48MGood;  stCPRBad[10] = stCPR48MBad;  stCPRFer[10] = stCPR48MFer;
  260.     stCPRSum[11] = stCPR54MSum;   stCPRGood[11] = stCPR54MGood;  stCPRBad[11] = stCPR54MBad;  stCPRFer[11] = stCPR54MFer;
  261.     m_pvBBCRDisp  = NULL;
  262.     m_pvMCRDisp   = NULL;
  263.     m_pvMCR16Disp = NULL;
  264.     m_pvEEDisp    = NULL;
  265.     WindowProc = SubClassWndProc;
  266. }
  267. //---------------------------------------------------------------------------
  268. void TfrmWiFi::Init( void )
  269. {
  270.      m_bInit          = true;
  271. }
  272. //==============================================================================
  273. void _fastcall TfrmWiFi::SubClassWndProc( Messages::TMessage &Message)
  274. {
  275.     switch ( Message.Msg )
  276.     {
  277.         case WM_ML_WIFI_PRINT_MSG:
  278.         {
  279.             FillSCResult();
  280.         }
  281.         break;
  282.         
  283.         default:
  284.              this->WndProc( Message );
  285.         break;
  286.     }
  287. }
  288. //==========================================================================
  289. ////////////////////////////   Form event handler   ////////////////////////
  290. //==========================================================================
  291. void __fastcall TfrmWiFi::FormCreate(TObject *Sender)
  292. {
  293.     // Initialize
  294.     m_uiBBIdx = 0;
  295.     m_ucBBValue = 0;
  296.     m_uiBBBeginIdx = 0;
  297.     m_uiBBEndIdx = 0;
  298.     m_uiMacAddr = 0;
  299.     m_uiMacBeginAddr = 0;
  300.     m_uiMacEndAddr = 0;
  301.     m_uiMacData = 0;
  302.     m_usMac16Data = 0;
  303.         // eeprom
  304.     m_uiEEPROMIdx = 0;
  305.     m_uiEEPROMBeginIdx = 0;
  306.     m_uiEEPROMEndIdx = 0;
  307.     m_usEEPROMData = 0;
  308.     m_iTestPageIndex = PAGEIDX_NONE;
  309.     m_iLastPageIndex = pctlToolSel->ActivePageIndex;
  310.     // dynamic allocate
  311.     m_pSCLog = new TStringList;
  312. }
  313. //---------------------------------------------------------------------------
  314. void __fastcall TfrmWiFi::FormDestroy(TObject *Sender)
  315. {
  316.     delete m_pSCLog;
  317.     DeAllocateBBCRVector();
  318.     DeAllocateMCRVector();
  319.     DeAllocateMCR16Vector();
  320.     DeAllocateEEPROMVector();
  321. }
  322. //--------------------------------------------------------------------------
  323. void __fastcall TfrmWiFi::FormShow(TObject *Sender)
  324. {
  325.     ApplyHideProperty();
  326.     frmWiFiTxProfile->WIFI_APC_Obj(&m_WIFI_APC_Obj);
  327. }
  328. //---------------------------------------------------------------------------
  329. void __fastcall TfrmWiFi::ToggleHideExecute(TObject *Sender)
  330. {
  331.     g_bHideEnable = g_bHideEnable ? false : true;
  332.     
  333.     ApplyHideProperty();
  334. }
  335. //---------------------------------------------------------------------------
  336. void TfrmWiFi::ApplyHideProperty( void )
  337. {
  338.     bool visible = g_bHideEnable ? false : true;
  339.     btnBBRegSetting->Visible = visible;
  340.     btnMACRegSetting->Visible = visible;
  341.     btnEEPROMSetting->Visible = visible;
  342.     tsSC->Visible = visible;
  343.     tsSC->TabVisible = visible;
  344. }
  345. //---------------------------------------------------------------------------
  346. void __fastcall TfrmWiFi::pctlToolSelChange(TObject *Sender)
  347. {
  348.     if( PAGEIDX_NONE != m_iTestPageIndex )
  349.     {
  350.        if(m_iTestPageIndex != pctlToolSel->ActivePageIndex &&
  351.           PAGEIDX_BB       != pctlToolSel->ActivePageIndex &&
  352.           PAGEIDX_MAC      != pctlToolSel->ActivePageIndex &&
  353.           PAGEIDX_EE       != pctlToolSel->ActivePageIndex
  354.          )
  355.        {
  356.            pctlToolSel->ActivePageIndex = m_iLastPageIndex;
  357.            Application->MessageBox( "Cannot change page because test is progressing", "Notice", MB_OK );
  358.            return;
  359.        }
  360.    }
  361.     switch(pctlToolSel->ActivePageIndex)
  362.     {
  363.         case PAGEIDX_TXALL:
  364.         {
  365.            // if( ! m_bFirstCPTXShow )
  366.            // {
  367.            //     m_bFirstCPTXShow = false;
  368.             //    Display_CPTXChannelId();
  369.            // }
  370.         }
  371.         break;
  372.         case PAGEIDX_CPRX:
  373.         break;
  374.         case PAGEIDX_PS:
  375.         break;
  376.         case PAGEIDX_BB:
  377.         break;
  378.         case PAGEIDX_MAC:
  379.         break;
  380.         case PAGEIDX_EE:
  381.         break;
  382.     }
  383.     m_iLastPageIndex = pctlToolSel->ActivePageIndex;
  384. }
  385. //---------------------------------------------------------------------------
  386. void  TfrmWiFi::ReDrawFields( int page_idx )
  387. {
  388.     switch( page_idx )
  389.     {
  390.         case PAGEIDX_TXALL:
  391.              ReDrawTXFields();
  392.         break;
  393.         case PAGEIDX_CPRX:
  394.         break;
  395.         case PAGEIDX_PS:
  396.         break;
  397.         case PAGEIDX_BB:
  398.              ReDrawBBFields();
  399.         break;
  400.         case PAGEIDX_MAC:
  401.              ReDrawMACFields();
  402.         break;
  403.         case PAGEIDX_EE:
  404.              ReDrawEEFields();
  405.         break;
  406.         case PAGEIDX_SC:
  407.         break;
  408.     }
  409. }
  410. //---------------------------------------------------------------------------
  411. void TfrmWiFi::ReDrawTXFields(void)
  412. {
  413.     char  str[256];
  414.     E_WIFI_GENERATION wifi_802_11_idx;
  415.     unsigned int chan_idx;
  416.     if(! GetWiFiChannelIndexFromStr( cbTXChannelID->Text, cbTXTxRate->Text, wifi_802_11_idx, chan_idx ) )
  417.     {
  418.         return;
  419.     }
  420.     if( 0 == btnTXTxPowerDac->Tag )  // Dec
  421.     {
  422.         btnTXTxPowerDac->Caption = "TX power DAC (Dec)";
  423.         lblTXTxPowerDac0X->Visible = false;
  424.         if( WIFI_802_11A_IDX == wifi_802_11_idx )
  425.         {
  426.             edtTXTxPowerDAC->Text = IntToStr( m_sTxPwr5000M.TxPWR[chan_idx] );
  427.         }
  428.         else if( WIFI_802_11B_IDX == wifi_802_11_idx )
  429.         {
  430.             edtTXTxPowerDAC->Text = IntToStr( m_sTxPwr2400M.CCKTxPWR[chan_idx] );
  431.         }
  432.         else  // 802.11G
  433.         {   edtTXTxPowerDAC->Text = IntToStr( m_sTxPwr2400M.OFDMTxPWR[chan_idx] );
  434.         }
  435.     }
  436.     else  // Hex
  437.     {
  438.         btnTXTxPowerDac->Caption = "TX power DAC (Hex)";
  439.         lblTXTxPowerDac0X->Visible = true;
  440.         if( WIFI_802_11A_IDX == wifi_802_11_idx )
  441.         {
  442.             sprintf( str, "%X", (int)m_sTxPwr5000M.TxPWR[chan_idx] );
  443.         }
  444.         else if( WIFI_802_11B_IDX == wifi_802_11_idx )
  445.         {
  446.             sprintf( str, "%X", (int)m_sTxPwr2400M.CCKTxPWR[chan_idx] );
  447.         }
  448.         else // 802.11G
  449.         {
  450.             sprintf( str, "%X", (int)m_sTxPwr2400M.OFDMTxPWR[chan_idx] );
  451.         }
  452.         edtTXTxPowerDAC->Text = str;
  453.     }
  454.     // TX DC offset
  455.     if( 0 == btnTXIDC->Tag )  // Dec
  456.     {
  457.         btnTXIDC->Caption = "I_DC (Dec)";
  458.         lblTXIDC0x->Visible = false;
  459.         edtTXIDC->Text = IntToStr( m_sTxDcOffset.i_ch_offset );
  460.     }
  461.     else  // Hex
  462.     {
  463.         btnTXIDC->Caption = "I_DC (Hex)";
  464.         lblTXIDC0x->Visible = true;
  465.         sprintf( str, "%X", (int)m_sTxDcOffset.i_ch_offset );
  466.         edtTXIDC->Text = str;
  467.     }
  468.     if( 0 == btnTXQDC->Tag )  // Dec
  469.     {
  470.         btnTXQDC->Caption = "Q_DC (Dec)";
  471.         lblTXQDC0x->Visible = false;
  472.         edtTXQDC->Text = IntToStr( m_sTxDcOffset.q_ch_offset );
  473.     }
  474.     else  // Hex
  475.     {
  476.         btnTXQDC->Caption = "Q_DC (Hex)";
  477.         lblTXQDC0x->Visible = true;
  478.         sprintf( str, "%X", (int)m_sTxDcOffset.q_ch_offset );
  479.         edtTXQDC->Text = str;
  480.     }
  481. }
  482. //---------------------------------------------------------------------------
  483. void  TfrmWiFi::ReDrawTXOPFields( void )
  484. {
  485. #if 0
  486.     char  str[256];
  487.     E_WIFI_GENERATION wifi_802_11_idx;
  488.     unsigned int chan_idx;
  489.     if(! GetWiFiChannelIndexFromStr( cbTXOPChannelID->Text, cbTXOPTXRate->Text, wifi_802_11_idx, chan_idx ) )
  490.     {
  491.         return;
  492.     }
  493.     if( 0 == btnTXOPTxPowerDac->Tag )  // Dec
  494.     {
  495.         btnTXOPTxPowerDac->Caption = "TX power DAC (Dec)";
  496.         lblTXOPTxPowerDac0X->Visible = false;
  497.         if( WIFI_802_11A_IDX == wifi_802_11_idx )
  498.         {
  499.             edtTXOPTxPowerDAC->Text = m_sTxPwr5000M.TxPWR[chan_idx];
  500.         }
  501.         else if( WIFI_802_11B_IDX == wifi_802_11_idx )
  502.         {
  503.             edtTXOPTxPowerDAC->Text = m_sTxPwr2400M.CCKTxPWR[chan_idx];
  504.         }
  505.         else
  506.         {
  507.             edtTXOPTxPowerDAC->Text = m_sTxPwr2400M.OFDMTxPWR[chan_idx];
  508.         }
  509.     }
  510.     else  // Hex
  511.     {
  512.         btnTXOPTxPowerDac->Caption = "TX power DAC (Hex)";
  513.         lblTXOPTxPowerDac0X->Visible = true;
  514.         if( WIFI_802_11A_IDX == wifi_802_11_idx )
  515.         {
  516.             sprintf( str, "%X", (int)m_sTxPwr5000M.TxPWR[chan_idx] );
  517.         }
  518.         else if( WIFI_802_11B_IDX == wifi_802_11_idx )
  519.         {
  520.             sprintf( str, "%X", (int)m_sTxPwr2400M.CCKTxPWR[chan_idx] );
  521.         }
  522.         else  // 802.11g
  523.         {
  524.             sprintf( str, "%X", (int)m_sTxPwr2400M.OFDMTxPWR[chan_idx] );
  525.         }
  526.         edtTXOPTxPowerDAC->Text = str;
  527.     }
  528. #endif
  529. }
  530. //---------------------------------------------------------------------------
  531. void  TfrmWiFi::ReDrawBBFields( void )
  532. {
  533.     char  str[256];
  534.     //sprintf(str, "%08lx", m_ucBBAddr);
  535.     //sprintf(str, "%04lx", m_ucBBAddr);
  536.     //edtBBCRIndex->Text = str;
  537.     edtBBCRIndex->Text = m_uiBBIdx;
  538.     if( 0 == btnBBCRData->Tag )  // Dec
  539.     {
  540.         btnBBCRData->Caption = "CR Data (Dec)";
  541.         lblBBCRData0X->Visible = false;
  542.         edtBBCRData->Text = m_ucBBValue;
  543.     }
  544.     else  // Hex
  545.     {
  546.         btnBBCRData->Caption = "CR Data (Hex)";
  547.         lblBBCRData0X->Visible = true;
  548.         sprintf( str, "%X", (int)m_ucBBValue );
  549.         edtBBCRData->Text = str;
  550.     }
  551. }
  552. //---------------------------------------------------------------------------
  553. void  TfrmWiFi::ReDrawMACFields( void )
  554. {
  555.     char  str[256];
  556.     //sprintf(str, "%08lx", m_ucBBAddr);
  557.     sprintf(str, "%04lx", m_uiMacAddr);
  558.     edtMACMCRAddress->Text = str;
  559.     if( btnMACMCRData->Tag==0 )  // Dec
  560.     {
  561.         btnMACMCRData->Caption = "CR Data (Dec)";
  562.         lblMACMCRData0X->Visible = false;
  563.         if( rbMAC16bits->Checked )
  564.         {
  565.             edtMACMCRData->Text = m_usMac16Data;
  566.         }
  567.         else
  568.         {   edtMACMCRData->Text = m_uiMacData;
  569.         }
  570.     }
  571.     else  // Hex
  572.     {
  573.         btnMACMCRData->Caption = "CR Data (Hex)";
  574.         lblMACMCRData0X->Visible = true;
  575.         if( rbMAC16bits->Checked )
  576.         {   sprintf( str, "%X", m_usMac16Data );
  577.         }
  578.         else
  579.         {   sprintf( str, "%X", m_uiMacData );
  580.         }
  581.         edtMACMCRData->Text = str;
  582.     }
  583. }
  584. //---------------------------------------------------------------------------
  585. void  TfrmWiFi::ReDrawEEFields( void )
  586. {
  587.     char  str[256];
  588.     sprintf(str, "%04lx", m_uiEEPROMIdx);
  589.    // sprintf(str, "%04lx", m_sEE.eeprom[0].index);
  590.     edtEEIndex->Text = str;
  591.     if( 0 == btnEEData->Tag )  // Dec
  592.     {
  593.         btnEEData->Caption = "EEPRom data (Dec)";
  594.         lblEEData0X->Visible = false;
  595.         edtEEData->Text = IntToStr( m_sEE.eeprom[0].eeprom_data16 );
  596.     }
  597.     else  // Hex
  598.     {
  599.         btnEEData->Caption = "EEPRom data (Hex)";
  600.         lblEEData0X->Visible = true;
  601.         sprintf( str, "%X", m_sEE.eeprom[0].eeprom_data16 );
  602.         edtEEData->Text = str;
  603.     }
  604. }
  605. //----------------------------------------------------------------------------
  606. void  TfrmWiFi::FillBBResult( bool  is_title )
  607. {
  608.     char  str[256];
  609.     if( is_title )
  610.     {
  611.         memBBResult->Lines->Clear();
  612.         sprintf( str, " BB          BB                                        " );
  613.         memBBResult->Lines->Add(str);
  614.         sprintf( str, " index       data                                      " );
  615.         memBBResult->Lines->Add(str);
  616.         sprintf( str, "=======================================================" );
  617.         memBBResult->Lines->Add(str);
  618.     }
  619.     else
  620.     {
  621.         AnsiString as_bbinfo;
  622.         unsigned int    bb_addr;
  623.         unsigned char   bb_value;
  624.         vector<WiFi_BBReg8_S>:: iterator iter;
  625.         WiFi_BBReg8_S bbcr_first = *m_pvBBCRDisp->begin();
  626.         for( iter = m_pvBBCRDisp->begin(); iter != m_pvBBCRDisp->end(); iter++ )
  627.        // for( int i=0; i<m_sBBCR.count; i++ )
  628.         {
  629.             bb_addr  = iter->index;
  630.             bb_value = iter->bbcr_data8;
  631.             if( (bb_addr-bbcr_first.index) % 8 == 0 )
  632.             {
  633.                 sprintf(str, "%04ld:        ", bb_addr);
  634.                 as_bbinfo = str;
  635.             }
  636.             sprintf(str, "%02lx ", bb_value);
  637.             as_bbinfo += str;
  638.             // if( bb_addr % 8 == 0 && bb_addr != 0 )
  639.             if( (bb_addr-bbcr_first.index) % 8 == 7  )
  640.             {
  641.                 strcpy( str, as_bbinfo.c_str() );
  642.                 memBBResult->Lines->Add(str);
  643.             }
  644.         }
  645.         if( (bb_addr-bbcr_first.index) % 8 != 7  )
  646.         {
  647.             strcpy( str, as_bbinfo.c_str() );
  648.             memBBResult->Lines->Add(str);
  649.         }
  650.     }
  651. }
  652. //----------------------------------------------------------------------------
  653. void  TfrmWiFi::FillMACResult( bool  is_title )
  654. {
  655.     char  str[256];
  656.     if( is_title )
  657.     {
  658.         memMACResult->Lines->Clear();
  659.         sprintf( str, " MAC         MAC                                        " );
  660.         memMACResult->Lines->Add(str);
  661.         sprintf( str, " address     data                                      " );
  662.         memMACResult->Lines->Add(str);
  663.         sprintf( str, "=======================================================" );
  664.         memMACResult->Lines->Add(str);
  665.     }
  666.     else
  667.     {
  668.         AnsiString as_macinfo;
  669.         unsigned int   mac_addr;
  670.         if( rbMAC16bits->Checked )
  671.         {
  672.             unsigned int   mac16_value;
  673.             vector<WiFi_MACReg16_S>:: iterator iter;
  674.             WiFi_MACReg16_S mcr16_first = *m_pvMCR16Disp->begin();
  675.            // for( int i=0; i<m_sMCR16.count; i++ )
  676.             for( iter = m_pvMCR16Disp->begin(); iter != m_pvMCR16Disp->end(); iter++ )
  677.             {
  678.                 mac_addr    = iter->index;
  679.                 mac16_value = iter->mcr_data16;
  680.                 if( (mac_addr-mcr16_first.index) % 0x10 == 0 )
  681.                 {
  682.                     sprintf(str, "%04lx:        ", mac_addr);
  683.                     as_macinfo = str;
  684.                 }
  685.                 sprintf(str, "%04lx ", mac16_value);
  686.                 as_macinfo += str;
  687.                 if( (mac_addr-mcr16_first.index) % 0x10 == 0x0E  )
  688.                 {
  689.                     strcpy( str, as_macinfo.c_str() );
  690.                     memMACResult->Lines->Add(str);
  691.                 }
  692.             }
  693.             if( (mac_addr-mcr16_first.index) % 0x10 != 0x0E  )
  694.             {
  695.                 strcpy( str, as_macinfo.c_str() );
  696.                 memMACResult->Lines->Add(str);
  697.             }
  698.         }
  699.         else // MAC32
  700.         {
  701.             unsigned int   mac32_value;
  702.             vector<WiFi_MACReg32_S>:: iterator iter;
  703.             WiFi_MACReg32_S mcr32_first = *m_pvMCRDisp->begin();
  704.             //for( int i=0; i<m_sMCR.count; i++ )
  705.             for( iter = m_pvMCRDisp->begin(); iter != m_pvMCRDisp->end(); iter++ )
  706.             {
  707.                 mac_addr    = iter->index;
  708.                 mac32_value = iter->mcr_data32;
  709.                 if( (mac_addr-mcr32_first.index) % 0x10 == 0 )
  710.                 {
  711.                     sprintf(str, "%04lx:        ", mac_addr);
  712.                     as_macinfo = str;
  713.                 }
  714.                 sprintf(str, "%08lx ", mac32_value);
  715.                 as_macinfo += str;
  716.                 if( (mac_addr-mcr32_first.index) % 0x10 == 0x0C  )
  717.                 {
  718.                     strcpy( str, as_macinfo.c_str() );
  719.                     memMACResult->Lines->Add(str);
  720.                 }
  721.             }
  722.             if( (mac_addr-mcr32_first.index) % 0x10 != 0x0C  )
  723.             {
  724.                 strcpy( str, as_macinfo.c_str() );
  725.                 memMACResult->Lines->Add(str);
  726.             }
  727.         }
  728.     }
  729. }
  730. //----------------------------------------------------------------------------
  731. void  TfrmWiFi::FillEEResult( bool  is_title )
  732. {
  733.     char  str[256];
  734.     if( is_title )
  735.     {
  736.         memEEResult->Lines->Clear();
  737.         sprintf( str, " EEProm                                   EEPRom                                       " );
  738.         memEEResult->Lines->Add(str);
  739.         sprintf( str, " address                                  data                                         " );
  740.         memEEResult->Lines->Add(str);
  741.         if( rbEEWord->Checked )
  742.             sprintf( str, "=======================================================================================" );
  743.         else
  744.             sprintf( str, "=====================================================================================================" );
  745.         memEEResult->Lines->Add(str);
  746.     }
  747.     else
  748.     {
  749.         AnsiString as_eeinfo;
  750.         unsigned int     ee_addr;
  751.         unsigned short   ee_value;
  752.         vector<WiFi_EEPROM_S>:: iterator iter;
  753.         WiFi_EEPROM_S eeprom_first = *m_pvEEDisp->begin();
  754.         if( rbEEByte->Checked )
  755.         {
  756.             for( iter = m_pvEEDisp->begin(); iter != m_pvEEDisp->end(); iter++ )
  757.             //for( int i=0; i<m_sEE.count; i++ )
  758.             {
  759.                 //WiFi_EEPROM_S eeprom;
  760.                 //eeprom = *iter;
  761.                 ee_addr  = iter->index;
  762.                 ee_value = iter->eeprom_data16;
  763.                 if( (ee_addr-eeprom_first.index) % 0x10 == 0 )
  764.                 {
  765.                     sprintf(str, "%04lx: ", ee_addr);
  766.                     as_eeinfo = str;
  767.                 }
  768.                 sprintf(str, "%02lx ", ee_value & 0x00FF );
  769.                 as_eeinfo += str;
  770.                 sprintf(str, "%02lx ", (ee_value & 0xFF00)>>8 );
  771.                 as_eeinfo += str;
  772.                 if( (ee_addr-eeprom_first.index) % 0x10 == 0x0F  )
  773.                 {
  774.                     strcpy( str, as_eeinfo.c_str() );
  775.                     memEEResult->Lines->Add(str);
  776.                 }
  777.             }
  778.             if( (ee_addr-eeprom_first.index) % 0x10 != 0x0F  )
  779.             {
  780.                 strcpy( str, as_eeinfo.c_str() );
  781.                 memEEResult->Lines->Add(str);
  782.             }
  783.         }
  784.         else
  785.         {
  786.             //for( int i=0; i<m_sEEDisp.count; i++ )
  787.             for( iter = m_pvEEDisp->begin(); iter != m_pvEEDisp->end(); iter++ )
  788.             {
  789.                // WiFi_EEPROM_S eeprom;
  790.                // eeprom = *iter;
  791.                 ee_addr  = iter->index;
  792.                 ee_value = iter->eeprom_data16;
  793.                 if( (ee_addr-eeprom_first.index) % 0x10 == 0 )
  794.                 {
  795.                     sprintf(str, "%04lx: ", ee_addr);
  796.                     as_eeinfo = str;
  797.                 }
  798.                 sprintf(str, "%04lx ", ee_value);
  799.                 as_eeinfo += str;
  800.                 if( (ee_addr-eeprom_first.index) % 0x10 == 0x0F  )
  801.                 {
  802.                     strcpy( str, as_eeinfo.c_str() );
  803.                     memEEResult->Lines->Add(str);
  804.                 }
  805.             }
  806.             if( (ee_addr-eeprom_first.index) % 0x10 != 0x0F  )
  807.             {
  808.                 strcpy( str, as_eeinfo.c_str() );
  809.                 memEEResult->Lines->Add(str);
  810.             }
  811.         } // word
  812.     }
  813. }
  814. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  815. bool  TfrmWiFi::CheckFields( E_ACCESS_TYPE access_type, E_OPERATION_TYPE op_type )
  816. {
  817.     switch(pctlToolSel->ActivePageIndex)
  818.     {
  819.         case PAGEIDX_TXALL:
  820.         {
  821.         }
  822.         break;
  823.         case PAGEIDX_CPRX:
  824.         break;
  825.         case PAGEIDX_PS:
  826.         break;
  827.         case PAGEIDX_BB:
  828.              if( ! CheckBBFields( access_type, op_type ) )  return false;
  829.         break;
  830.         case PAGEIDX_MAC:
  831.              if( ! CheckMACFields( access_type, op_type ) )  return false;
  832.         break;
  833.         case PAGEIDX_EE:
  834.              if( ! CheckEEFields( access_type, op_type ) )  return false;
  835.         break;
  836.         case PAGEIDX_SC:
  837.         break;
  838.     }
  839.     return true;
  840. }
  841. //---------------------------------------------------------------------------
  842. bool  TfrmWiFi::CheckBBFields( E_ACCESS_TYPE access_type, E_OPERATION_TYPE op_type )
  843. {
  844.     unsigned int uidata;
  845.     AnsiString text;
  846.     if( ACCESS_SINGLE == access_type )
  847.     {
  848.         text = edtBBCRIndex->Text;        if( !IsValidDecWiFiBBRegAddr( text, uidata ) )           {  edtBBCRIndexCheck(edtBBCRIndex);            return false;   }
  849.         m_uiBBIdx = uidata;
  850.         if( op_type == OP_WRITE )
  851.         {
  852.             unsigned char ucdata;
  853.             text = edtBBCRData->Text;
  854.             if( btnBBCRData->Tag==0 )  // Dec
  855.             {
  856.                 if( !IsValidDecWiFiBBRegValue( text, ucdata ) )
  857.                 {
  858.                     edtBBCRDataCheck( edtBBCRData );
  859.                     return false;
  860.                 }
  861.             }
  862.             else  // Hex
  863.             {
  864.                 if( !IsValidHexWiFiBBRegValue( text, ucdata ) )
  865.                 {
  866.                     edtBBCRDataCheck( edtBBCRData );
  867.                     return false;
  868.                 }
  869.             }
  870.             m_ucBBValue = ucdata;
  871.         }
  872.     }
  873.     else // dump
  874.     {
  875.         text = edtBBBeginCRIndex->Text;        if( !IsValidDecWiFiBBRegAddr( text, uidata ) )           {  edtBBBeginCRIndexCheck(edtBBBeginCRIndex);            return false;   }
  876.         m_uiBBBeginIdx = uidata;
  877.         text = edtBBEndCRIndex->Text;        if( !IsValidDecWiFiBBRegAddr( text, uidata ) )           {  edtBBEndCRIndexCheck(edtBBEndCRIndex);            return false;   }
  878.         m_uiBBEndIdx = uidata;
  879.     }
  880.     return true;
  881. }
  882. //---------------------------------------------------------------------------
  883. bool  TfrmWiFi::CheckMACFields( E_ACCESS_TYPE access_type, E_OPERATION_TYPE op_type )
  884. {
  885.     unsigned int uidata;
  886.     AnsiString text;
  887.     if( ACCESS_SINGLE == access_type )
  888.     {
  889.         text = edtMACMCRAddress->Text;        if( !IsValidHexWiFiMacRegAddr( text, uidata ) )           {  edtMACMCRAddressCheck(edtMACMCRAddress);            return false;   }
  890.         m_uiMacAddr = uidata;
  891.         text = edtMACMCRData->Text;
  892.         if( rbMAC16bits->Checked )
  893.         {
  894.             unsigned short usdata;
  895.             if( btnMACMCRData->Tag==0 )  // Dec
  896.             {
  897.                 if( !IsValidDecWiFiMacReg16Value( text, usdata ) )
  898.                 {
  899.                     edtMACMCRDataCheck( edtMACMCRData );
  900.                     return false;
  901.                 }
  902.             }
  903.             else  // Hex
  904.             {
  905.                 if( !IsValidHexWiFiMacReg16Value( text, usdata ) )
  906.                 {
  907.                     edtMACMCRDataCheck( edtMACMCRData );
  908.                     return false;
  909.                 }
  910.             }
  911.             m_usMac16Data = usdata;
  912.         }
  913.         else
  914.         {
  915.             if( btnMACMCRData->Tag==0 )  // Dec
  916.             {
  917.                 if( !IsValidDecWiFiMacRegValue( text, uidata ) )
  918.                 {
  919.                     edtMACMCRDataCheck( edtMACMCRData );
  920.                     return false;
  921.                 }
  922.             }
  923.             else  // Hex
  924.             {
  925.                 if( !IsValidHexWiFiMacRegValue( text, uidata ) )
  926.                 {
  927.                     edtMACMCRDataCheck( edtMACMCRData );
  928.                     return false;
  929.                 }
  930.             }
  931.             m_uiMacData = uidata;
  932.         }
  933.     }
  934.     else // dump
  935.     {
  936.         if( rbMAC16bits->Checked )
  937.         {
  938.             text = edtMACBeginMCRAddr->Text;        if( !IsValidHexWiFiMacRegAddr( text, uidata ) )           {  edtMACBeginMCRAddrCheck(edtMACBeginMCRAddr);            return false;   }
  939.             m_uiMacBeginAddr = uidata;
  940.             text = edtMACEndMCRAddr->Text;          if( !IsValidHexWiFiMacRegAddr( text, uidata ) )           {  edtMACBeginMCRAddrCheck(edtMACEndMCRAddr);            return false;   }
  941.             m_uiMacEndAddr = uidata;
  942.         }
  943.     }
  944.     return true;
  945. }
  946. //---------------------------------------------------------------------------
  947. bool  TfrmWiFi::CheckEEFields( E_ACCESS_TYPE access_type, E_OPERATION_TYPE op_type )
  948. {
  949.     unsigned int uidata;
  950.     unsigned short usdata;
  951.     AnsiString text;
  952.     if( ACCESS_SINGLE == access_type )
  953.     {
  954.         text = edtEEIndex->Text;        if( !IsValidHexWiFiEERegAddr( text, uidata ) )           {  edtMACMCRAddressCheck(edtMACMCRAddress);            return false;   }
  955.         m_uiEEPROMIdx = uidata;
  956.         text = edtEEData->Text;
  957.         if( 0 == btnEEData->Tag )  // Dec
  958.         {
  959.             if( !IsValidDecWiFiEERegValue( text, usdata ) )
  960.             {
  961.                 edtEEDataCheck( edtEEData );
  962.                 return false;
  963.             }
  964.         }
  965.         else  // Hex
  966.         {
  967.             if( !IsValidHexWiFiEERegValue( text, usdata ) )
  968.             {
  969.                 edtEEDataCheck( edtEEData );
  970.                 return false;
  971.             }
  972.         }
  973.         m_usEEPROMData = usdata;
  974.     }
  975.     else
  976.     {
  977.         text = edtEEBeginIndex->Text;        if( !IsValidHexWiFiEERegAddr( text, uidata ) )           {  edtBeginEEIndexCheck(edtEEBeginIndex);            return false;   }
  978.         m_uiEEPROMBeginIdx = uidata;
  979.         text = edtEEEndIndex->Text;        if( !IsValidHexWiFiEERegAddr( text, uidata ) )           {  edtEndEEIndexCheck(edtEEEndIndex);            return false;   }
  980.         m_uiEEPROMEndIdx = uidata;
  981.     }
  982.     return true;
  983. }
  984. //---------------------------------------------------------------------------
  985. bool  TfrmWiFi::CheckTXOPFields( void )
  986. {
  987.     return true;
  988. }
  989. //---------------------------------------------------------------------------
  990. void  TfrmWiFi::EnableCPTUIComponent( void )
  991. {
  992.     // ALC
  993.     m_edtTXTargetAlc->Enabled = true;
  994.     m_cbTXTargetGain->Enabled = true;
  995.     m_cbTXAlcTracking->Enabled = true;
  996.     m_cbTargetAlc->Enabled = true;
  997.     // MAC header
  998.     edtTXFramCtrl1->Enabled = true;
  999.     edtTXFramCtrl0->Enabled = true;
  1000.     edtTXDuration1->Enabled = true;
  1001.     edtTXDuration0->Enabled = true;
  1002.     edtTXAddress15->Enabled = true;
  1003.     edtTXAddress14->Enabled = true;
  1004.     edtTXAddress13->Enabled = true;
  1005.     edtTXAddress12->Enabled = true;
  1006.     edtTXAddress11->Enabled = true;
  1007.     edtTXAddress10->Enabled = true;
  1008.     edtTXAddress25->Enabled = true;
  1009.     edtTXAddress24->Enabled = true;
  1010.     edtTXAddress23->Enabled = true;
  1011.     edtTXAddress22->Enabled = true;
  1012.     edtTXAddress21->Enabled = true;
  1013.     edtTXAddress20->Enabled = true;
  1014.     edtTXAddress35->Enabled = true;
  1015.     edtTXAddress34->Enabled = true;
  1016.     edtTXAddress33->Enabled = true;
  1017.     edtTXAddress32->Enabled = true;
  1018.     edtTXAddress31->Enabled = true;
  1019.     edtTXAddress30->Enabled = true;
  1020.     edtTXSeqCtrl1->Enabled = true;
  1021.     edtTXSeqCtrl0->Enabled = true;
  1022.     edtTXPacketLength->Enabled = true;
  1023.     edtTXPacketCount->Enabled = true;
  1024.     edtTXPacketInterval->Enabled = true;
  1025.     cbTXPreamble->Enabled = true;
  1026.     cbTXBitPattern->Enabled = true;
  1027. }
  1028. //---------------------------------------------------------------------------
  1029. void  TfrmWiFi::DisableCPTUIComponent(void)
  1030. {
  1031.     // ALC
  1032.     m_edtTXTargetAlc->Enabled = false;
  1033.     m_cbTXTargetGain->Enabled = false;
  1034.     m_cbTXAlcTracking->Enabled = false;
  1035.     m_cbTargetAlc->Enabled = false;
  1036.     // MAC header
  1037.     edtTXFramCtrl1->Enabled = false;
  1038.     edtTXFramCtrl0->Enabled = false;
  1039.     edtTXDuration1->Enabled = false;
  1040.     edtTXDuration0->Enabled = false;
  1041.     edtTXAddress15->Enabled = false;
  1042.     edtTXAddress14->Enabled = false;
  1043.     edtTXAddress13->Enabled = false;
  1044.     edtTXAddress12->Enabled = false;
  1045.     edtTXAddress11->Enabled = false;
  1046.     edtTXAddress10->Enabled = false;
  1047.     edtTXAddress25->Enabled = false;
  1048.     edtTXAddress24->Enabled = false;
  1049.     edtTXAddress23->Enabled = false;
  1050.     edtTXAddress22->Enabled = false;
  1051.     edtTXAddress21->Enabled = false;
  1052.     edtTXAddress20->Enabled = false;
  1053.     edtTXAddress35->Enabled = false;
  1054.     edtTXAddress34->Enabled = false;
  1055.     edtTXAddress33->Enabled = false;
  1056.     edtTXAddress32->Enabled = false;
  1057.     edtTXAddress31->Enabled = false;
  1058.     edtTXAddress30->Enabled = false;
  1059.     edtTXSeqCtrl1->Enabled = false;
  1060.     edtTXSeqCtrl0->Enabled = false;
  1061.     edtTXPacketLength->Enabled = false;
  1062.     edtTXPacketCount->Enabled = false;
  1063.     edtTXPacketInterval->Enabled = false;
  1064.     cbTXPreamble->Enabled = false;
  1065.     cbTXBitPattern->Enabled = false;
  1066. }
  1067. //---------------------------------------------------------------------------
  1068. void  TfrmWiFi::CurrentPageReset( void )
  1069. {
  1070.     switch(pctlToolSel->ActivePageIndex)
  1071.     {
  1072.         case PAGEIDX_TXALL:
  1073.         {
  1074.             m_iTestPageIndex = PAGEIDX_NONE;
  1075.            // cbTXChannelID->Enabled = true;
  1076.            // cbTXTxFilter->Enabled = true;
  1077.            // cbTXTxRate->Enabled = true;
  1078.            // btnTXTxPowerDac->Enabled = true;
  1079.            // edtTXTxPowerDAC->Enabled = true;
  1080.             rbTXOP->Enabled = true;
  1081.             rbTXCS->Enabled = true;
  1082.             rbCPT->Enabled = true;
  1083.             rbTXLF->Enabled = true;
  1084.             // TX DC offset
  1085.             //edtTXIDC->Enabled = true;
  1086.             //edtTXQDC->Enabled = true;
  1087.             btnTXCalTxDC->Enabled = true;
  1088.             btnTXUploadFromFlash->Enabled = true;
  1089.             btnTXDownloadToFlash->Enabled = true;
  1090.             btnTXChangeDB->Enabled = true;
  1091.             //btnTXLoadFromFile->Enabled = true;
  1092.             //btnTXSaveToFile->Enabled = true;
  1093.             btnLoadTxPowerFromEE->Enabled = true;
  1094.             btnTXTxChannelPower->Enabled = true;
  1095.             m_btnTxAlc->Enabled = true;
  1096.             btnTXStart->Enabled = true;
  1097.             btnTXStart->Tag = 0;
  1098.             if( rbCPT->Checked )
  1099.             {
  1100.                 EnableCPTUIComponent();
  1101.             }
  1102.         }
  1103.         break;
  1104.         case PAGEIDX_CPRX:
  1105.         {
  1106.             m_iTestPageIndex = PAGEIDX_NONE;
  1107.             cbCPRChannelID->Enabled = true;
  1108.            // cbCPRRxAntenna->Enabled = true;
  1109.             cbCPRRxAntenna->Enabled = true;
  1110.             btnCPRReset->Enabled = true;
  1111.             btnCPRQueryRxCounter->Enabled = true;
  1112.             btnCPRStart->Enabled = true;
  1113.             btnCPRStart->Tag = 0;
  1114.         }
  1115.         break;
  1116.         case PAGEIDX_PS:
  1117.         {
  1118.             m_iTestPageIndex = PAGEIDX_NONE;
  1119.             cbPSPowerMode->Enabled = true;
  1120.             btnPSStart->Enabled = true;
  1121.             btnPSStart->Tag = 0;
  1122.         }
  1123.         break;
  1124.         case PAGEIDX_BB:
  1125.         {
  1126.             edtBBCRIndex->Enabled = true;
  1127.             edtBBCRData->Enabled = true;
  1128.             btnBBRead->Enabled = true;
  1129.             btnBBWrite->Enabled = true;
  1130.             btnBBCRData->Enabled = true;
  1131.             btnBBDumpBBReg->Enabled = true;
  1132.             btnBBRead->Tag = 0;
  1133.             btnBBWrite->Tag = 0;
  1134.         }
  1135.         break;
  1136.         case PAGEIDX_MAC:
  1137.         {
  1138.             edtMACMCRAddress->Enabled = true;
  1139.             edtMACMCRData->Enabled = true;
  1140.             btnMACRead->Enabled = true;
  1141.             btnMACWrite->Enabled = true;
  1142.             btnMACMCRData->Enabled = true;
  1143.             btnMACDumpAllMacReg->Enabled = true;
  1144.             btnMACRead->Tag = 0;
  1145.             btnMACWrite->Tag = 0;
  1146.         }
  1147.         break;
  1148.         case PAGEIDX_EE:
  1149.         {
  1150.             edtEEIndex->Enabled = true;
  1151.             edtEEData->Enabled = true;
  1152.             btnEERead->Enabled = true;
  1153.             btnEEWrite->Enabled = true;
  1154.             btnEEData->Enabled = true;
  1155.             btnEE->Enabled = true;
  1156.             btnEERead->Tag = 0;
  1157.             btnEEWrite->Tag = 0;
  1158.         }
  1159.         break;
  1160.         case PAGEIDX_SC:
  1161.         {
  1162.             btnSCScriptFile->Enabled = true;
  1163.             btnSCStart->Enabled = true;
  1164.             btnSCStart->Tag = 0;
  1165.         }
  1166.         break;
  1167.     }
  1168. }
  1169. //---------------------------------------------------------------------------
  1170. void  TfrmWiFi::CurrentPageLock( void )
  1171. {
  1172.     switch(pctlToolSel->ActivePageIndex)
  1173.     {
  1174.         case PAGEIDX_TXALL:
  1175.         {
  1176.             m_iTestPageIndex = PAGEIDX_TXALL;
  1177.            // cbTXChannelID->Enabled = false;
  1178.            // cbTXTxFilter->Enabled = false;
  1179.            // cbTXTxRate->Enabled = false;
  1180.            // btnTXTxPowerDac->Enabled = false;
  1181.            // edtTXTxPowerDAC->Enabled = false;
  1182.            // edtTXPacketInterval->Enabled = false;
  1183.            // edtTXPacketLength->Enabled = false;
  1184.            // edtTXPacketCount->Enabled = false;
  1185.            // cbTXBitPattern->Enabled = false;
  1186.            // DisableCPTUIComponent();
  1187.             rbTXOP->Enabled = false;
  1188.             rbTXCS->Enabled = false;
  1189.             rbCPT->Enabled = false;
  1190.             rbTXLF->Enabled = false;
  1191.             // TX DC offset
  1192.             btnTXCalTxDC->Enabled = false;
  1193.             btnTXUploadFromFlash->Enabled = false;
  1194.             btnTXDownloadToFlash->Enabled = false;
  1195.             btnTXChangeDB->Enabled = false;
  1196.             btnLoadTxPowerFromEE->Enabled = false;
  1197.             btnTXTxChannelPower->Enabled = false;
  1198.             m_btnTxAlc->Enabled = false;
  1199.             btnTXStart->Enabled = false;
  1200.             btnTXStart->Tag = 1;
  1201.         }
  1202.         break;
  1203.         case PAGEIDX_CPRX:
  1204.         {
  1205.             m_iTestPageIndex = PAGEIDX_CPRX;
  1206.             cbCPRChannelID->Enabled = false;
  1207.             cbCPRRxAntenna->Enabled = false;
  1208.            // cbCPRRxAntenna->Enabled = false;
  1209.             btnCPRReset->Enabled = false;
  1210.             btnCPRQueryRxCounter->Enabled = false;
  1211.             btnCPRStart->Enabled = false;
  1212.             btnCPRStart->Tag = 1;
  1213.         }
  1214.         break;
  1215.         case PAGEIDX_PS:
  1216.         {
  1217.             m_iTestPageIndex = PAGEIDX_PS;
  1218.             cbPSPowerMode->Enabled = false;
  1219.             btnPSStart->Enabled = false;
  1220.             btnPSStart->Tag = 1;
  1221.         }
  1222.         break;
  1223.         case PAGEIDX_BB:
  1224.         {
  1225.            // m_iTestPageIndex = PAGEIDX_BB;
  1226.             edtBBCRIndex->Enabled = false;
  1227.             edtBBCRData->Enabled = false;
  1228.             btnBBRead->Enabled = false;
  1229.             btnBBWrite->Enabled = false;
  1230.             btnBBCRData->Enabled = false;
  1231.             btnBBDumpBBReg->Enabled = false;
  1232.             btnBBRead->Tag = 1;
  1233.             btnBBWrite->Tag = 1;
  1234.         }
  1235.         break;
  1236.         case PAGEIDX_MAC:
  1237.         {
  1238.            // m_iTestPageIndex = PAGEIDX_MAC;
  1239.             edtMACMCRAddress->Enabled = false;
  1240.             edtMACMCRData->Enabled = false;
  1241.             btnMACRead->Enabled = false;
  1242.             btnMACWrite->Enabled = false;
  1243.             btnMACMCRData->Enabled = false;
  1244.             btnMACDumpAllMacReg->Enabled = false;
  1245.             btnMACRead->Tag = 1;
  1246.             btnMACWrite->Tag = 1;
  1247.         }
  1248.         break;
  1249.         case PAGEIDX_EE:
  1250.         {
  1251.            // m_iTestPageIndex = PAGEIDX_EE;
  1252.             edtEEIndex->Enabled = false;
  1253.             edtEEData->Enabled = false;
  1254.             btnEERead->Enabled = false;
  1255.             btnEEWrite->Enabled = false;
  1256.             btnEEData->Enabled = false;
  1257.             btnEE->Enabled = false;
  1258.             btnEERead->Tag = 1;
  1259.             btnEEWrite->Tag = 1;
  1260.         }
  1261.         break;
  1262.         case PAGEIDX_SC:
  1263.         {
  1264.             btnSCScriptFile->Enabled = false;
  1265.             btnSCStart->Enabled = false;
  1266.             btnSCStart->Tag = 1;
  1267.         }
  1268.     }
  1269. }
  1270. //---------------------------------------------------------------------------
  1271. void __fastcall TfrmWiFi::btnTXStartClick(TObject *Sender)
  1272. {
  1273.     if( rbTXOP->Checked )
  1274.     {
  1275.         TXOPExecute();
  1276.     }
  1277.     else if( rbTXCS->Checked )
  1278.     {
  1279.         TXCSExecute();
  1280.     }
  1281.     else if( rbCPT->Checked )
  1282.     {
  1283.         CPTExecute();
  1284.     }
  1285.     else
  1286.     {
  1287.         LFExecute();
  1288.     }
  1289. }
  1290. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1291. void TfrmWiFi::CPTExecute(void)
  1292. {
  1293.     int i;
  1294.     AnsiString  text;
  1295.     S_WIFICPT  m_sWiFiCPT;
  1296.     m_sWiFiCPT.bAlcSupport = m_bAlcSupport;
  1297.     m_sWiFiCPT.wifi_id = m_final_WiFiId;
  1298.     m_sWiFiCPT.channel_freq = GetWiFiChannelFreqFromStr( cbTXChannelID->Text );
  1299.     if( IDX_TX_FILTER_NORTH_AMERICA == cbTXTxFilter->ItemIndex )
  1300.     {
  1301.         m_sWiFiCPT.reg_domain.country_code[0] = 'U';
  1302.         m_sWiFiCPT.reg_domain.country_code[1] = 'S';
  1303.     }
  1304.     else
  1305.     {
  1306.         m_sWiFiCPT.reg_domain.country_code[0] = 'J';
  1307.         m_sWiFiCPT.reg_domain.country_code[1] = 'P';
  1308.     }
  1309.     m_sWiFiCPT.tx_rate = (WiFi_TestRate_E) GetWiFiTxRateFromStr( cbTXTxRate->Text );
  1310.     text = edtTXPacketLength->Text;      if( !IsValidWiFiPacketLength( text, m_sWiFiCPT.pkt_length ) )         {  edtCPTPacketLengthCheck(edtTXPacketLength);        return;   }
  1311.     text = edtTXPacketCount->Text;       if( !IsValidWiFiPacketCount( text, m_sWiFiCPT.pkt_count ) )           {  edtCPTPacketCountCheck(edtTXPacketCount);          return;   }
  1312.     text = edtTXPacketInterval->Text;    if( !IsValidWiFiPacketInterval( text, m_sWiFiCPT.pkt_interval ) )     {  edtCPTPacketIntervalCheck(edtTXPacketInterval);    return;   }
  1313.     if( 0 == btnTXTxPowerDac->Tag )
  1314.     {
  1315.         text = edtTXTxPowerDAC->Text;        if( !IsValidDecWiFiTxPowerDac( text, m_sWiFiCPT.tx_pwr_dac ) )           {  edtCPTTxPowerDACCheck(edtTXTxPowerDAC);               return;   }
  1316.     }
  1317.     else
  1318.     {
  1319.         text = edtTXTxPowerDAC->Text;        if( !IsValidHexWiFiTxPowerDac( text, m_sWiFiCPT.tx_pwr_dac ) )           {  edtCPTTxPowerDACCheck(edtTXTxPowerDAC);               return;   }
  1320.     }
  1321.     switch (cbTXBitPattern->ItemIndex)
  1322.     {
  1323.         case WIFI_IDX_ALL_0:
  1324.         {
  1325.             m_sWiFiCPT.pattern = WIFI_TX_ALL_ZEROS;
  1326.         }
  1327.         break;
  1328.         case WIFI_IDX_ALL_1:
  1329.         {
  1330.             m_sWiFiCPT.pattern = WIFI_TX_ALL_ONES;
  1331.         }
  1332.         break;
  1333.         case WIFI_IDX_ALTERNATE:
  1334.         {
  1335.             m_sWiFiCPT.pattern = WIFI_TX_ALTERNATE_BITS;
  1336.         }
  1337.         break;
  1338.         case WIFI_IDX_RANDOM:
  1339.         {
  1340.             m_sWiFiCPT.pattern = WIFI_TX_PSEUDO_RANDOM;
  1341.         }
  1342.         break;
  1343.         default:
  1344.         {
  1345.         }
  1346.         break;
  1347.     }
  1348.     m_sWiFiCPT.is_short_preamble = cbTXPreamble->ItemIndex;
  1349.     // MAC header
  1350.     for( i=0; i<WIFI_MAC_HEAD_FRAME_CTRL_LEN; i++ )
  1351.     {   text = edtTXFramCtrl[i]->Text;    if( !IsValidHexWiFiMacHeaderFrameCtrl( text, m_sWiFiCPT.s_mac_header.frame_ctrl[i] ) )    {  edtTXFramCtrlCheck(edtTXFramCtrl[i]);  return;   }
  1352.     }
  1353.     for( i=0; i<WIFI_MAC_HEAD_DURATION_LEN; i++ )
  1354.     {   text = edtTXDuration[i]->Text;    if( !IsValidHexWiFiMacHeaderDuration( text, m_sWiFiCPT.s_mac_header.duration[i] ) )    {  edtTXDurationCheck(edtTXDuration[i]);  return;   }
  1355.     }
  1356.     for( i=0; i<WIFI_MAC_HEAD_ADDRESS_LEN; i++ )
  1357.     {   text = edtTXAddress1[i]->Text;    if( !IsValidHexWiFiMacHeaderAddress( text, m_sWiFiCPT.s_mac_header.address1[i] ) )    {  edtTXAddress1Check(edtTXAddress1[i]);  return;   }
  1358.     }
  1359.     for( i=0; i<WIFI_MAC_HEAD_ADDRESS_LEN; i++ )
  1360.     {   text = edtTXAddress2[i]->Text;    if( !IsValidHexWiFiMacHeaderAddress( text, m_sWiFiCPT.s_mac_header.address2[i] ) )    {  edtTXAddress2Check(edtTXAddress2[i]);  return;   }
  1361.     }
  1362.     for( i=0; i<WIFI_MAC_HEAD_ADDRESS_LEN; i++ )
  1363.     {   text = edtTXAddress3[i]->Text;    if( !IsValidHexWiFiMacHeaderAddress( text, m_sWiFiCPT.s_mac_header.address3[i] ) )    {  edtTXAddress3Check(edtTXAddress3[i]);  return;   }
  1364.     }
  1365.     for( i=0; i<WIFI_MAC_HEAD_SEQ_CTRL_LEN; i++ )
  1366.     {   text = edtTXSeqCtrl[i]->Text;    if( !IsValidHexWiFiMacHeaderAddress( text, m_sWiFiCPT.s_mac_header.seq_ctrl[i] ) )    {  edtTXSeqCtrlCheck(edtTXSeqCtrl[i]);  return;   }
  1367.     }
  1368.     if (m_bAlcSupport)
  1369.     {
  1370.         m_sWiFiCPT.ui_txFlags = 0;
  1371.         if (!m_cbTXTargetGain->Checked)
  1372.         {
  1373.             m_sWiFiCPT.ui_txFlags |= WIFI_TX_FLAG_NO_TXGAIN;
  1374.         }
  1375.         if (m_cbTXAlcTracking->Checked)
  1376.         {
  1377.             m_sWiFiCPT.ui_txFlags |= WIFI_TX_FLAG_ENABLE_ALC_TRACK;
  1378.         }
  1379.         if (m_cbTargetAlc->Checked)
  1380.         {
  1381.             m_sWiFiCPT.ui_txFlags |= WIFI_TX_FLAG_TARGET_ALC_PROVIDE;
  1382.         }
  1383.         m_sWiFiCPT.ui_targetAlc = m_edtTXTargetAlc->Text.ToInt();
  1384.     }
  1385.     CurrentPageLock();
  1386.     sbTX->Panels->Items[0]->Text = (AnsiString) "  Continuos packet TX progressing";
  1387.     m_WIFI_CPT_Obj.ConfirmCallback  = ::ConfirmCallback_CPT;
  1388.     m_WIFI_CPT_Obj.REQ_Start(m_sWiFiCPT);
  1389. }
  1390. //---------------------------------------------------------------------------
  1391. void  TfrmWiFi::ConfirmCallback_CPT(void)
  1392. {
  1393.     int state = m_WIFI_CPT_Obj.Get_ConfirmState();
  1394.     switch( state )
  1395.     {
  1396.         case METAAPP_SUCCESS:
  1397.         {
  1398.             TimerWiFi->Enabled = true;
  1399.             sbTX->Panels->Items[0]->Text = (AnsiString)"  Continuous packet TX progressing";
  1400.         }
  1401.         break;
  1402.         case METAAPP_FAIL:
  1403.         {
  1404.             sbTX->Panels->Items[0]->Text = (AnsiString)"  Continuous packet TX fail";
  1405.             Application->MessageBox( "Execution Failure : Continuous packet TX", "FAILURE", MB_OK );
  1406.             Application->BringToFront();
  1407.             Force_WiFi_Stop();
  1408.             CurrentPageReset();
  1409.         }
  1410.         break;
  1411.         case METAAPP_TIMEOUT:
  1412.         {
  1413.              sbTX->Panels->Items[0]->Text = (AnsiString)"  Continuous packet TX timeout";
  1414.              Application->MessageBox( "Execution Timeout : Continuous packet TX", "TIMEOUT", MB_OK );
  1415.              Force_WiFi_Stop();
  1416.              CurrentPageReset();
  1417.         }
  1418.         break;
  1419.         case METAAPP_STOP:
  1420.         {
  1421.              sbTX->Panels->Items[0]->Text = (AnsiString)"  Continuous packet TX stop";
  1422.              CurrentPageReset();
  1423.         }
  1424.         break;
  1425.     }
  1426. }
  1427. //---------------------------------------------------------------------------
  1428. void __fastcall TfrmWiFi::btnTXUploadFromFlashClick(TObject *Sender)
  1429. {
  1430.     if( ! NVRAMMan->Get_IsInit() )
  1431.     {  frmMainSel->mnuFDMDatabaseClick(Sender);
  1432.     }
  1433.     if( ! NVRAMMan->Get_IsInit() )
  1434.     {
  1435.         sbTX->Panels->Items[0]->Text = (AnsiString) " NVRAM database file initialize fail";
  1436.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  1437.         return;
  1438.     }
  1439.   //  m_WIFI_CPT_Obj.ConfirmCallback = ::CNF_CPTX_ReadFromNVRAM;
  1440.   //  m_WIFI_CPT_Obj.REQ_Read_From_NVRAM();
  1441.     if( m_sWiFiCap.support_802_11g || m_sWiFiCap.support_802_11b )
  1442.     {
  1443.         m_WIFI_APC_Obj.ConfirmCallback = ::CNF_CPTX_ReadTxPower2400MFromNVRAM;
  1444.         m_WIFI_APC_Obj.REQ_Read_TxPower2400M_From_NVRAM_Start();
  1445.     }
  1446.     else if( m_sWiFiCap.support_802_11a )
  1447.     {
  1448.         m_WIFI_APC_Obj.ConfirmCallback = ::CNF_CPTX_ReadTxPower5000MFromNVRAM;
  1449.         m_WIFI_APC_Obj.REQ_Read_TxPower5000M_From_NVRAM_Start();
  1450.     }
  1451.     CurrentPageLock();
  1452.    
  1453. }
  1454. //---------------------------------------------------------------------------
  1455. void  TfrmWiFi::CPTX_UploadTxPower2400MFromFlashDone( void )
  1456. {
  1457.     E_METAAPP_RESULT_T state = m_WIFI_APC_Obj.Get_ConfirmState();
  1458.     char  str[20];
  1459.     float  fdata;
  1460.     switch( state )
  1461.     {
  1462.         case METAAPP_SUCCESS:
  1463.         {
  1464.             m_sTxPwr2400M = m_WIFI_APC_Obj.Get_TxChannelDac2400M();
  1465.             if( m_sWiFiCap.support_802_11a )
  1466.             {
  1467.                 m_WIFI_APC_Obj.ConfirmCallback = ::CNF_CPTX_ReadTxPower5000MFromNVRAM;
  1468.                 m_WIFI_APC_Obj.REQ_Read_TxPower5000M_From_NVRAM_Start();
  1469.             }
  1470.             else
  1471.             {
  1472.                 ReDrawFields( PAGEIDX_TXALL );
  1473.                 sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting from flash successful";
  1474.                 //CurrentPageReset();
  1475.                 m_WIFI_TXDC_Obj.ConfirmCallback = ::CNF_ReadTxDCFromNVRAM;
  1476.                 m_WIFI_TXDC_Obj.REQ_Read_From_NVRAM_Start();
  1477.             }
  1478.         }
  1479.         break;
  1480.         case METAAPP_FAIL:
  1481.         {
  1482.              sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting fail, please check the version of load and NVRAM database are same.";
  1483.              Application->MessageBox( "Execution Failure : Upload TX channel power setting, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1484.              CurrentPageReset();
  1485.         }
  1486.         break;
  1487.         case METAAPP_TIMEOUT:
  1488.         {
  1489.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting timeout";
  1490.             Application->MessageBox( "Execution Timeout : Upload TX channel power setting", "TIMEOUT", MB_OK );
  1491.             CurrentPageReset();
  1492.         }
  1493.         break;
  1494.         case METAAPP_STOP:
  1495.         {
  1496.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting stop";
  1497.             CurrentPageReset();
  1498.         }
  1499.         break;
  1500.     }
  1501. }
  1502. //---------------------------------------------------------------------------
  1503. void  TfrmWiFi::CPTX_UploadTxPower5000MFromFlashDone( void )
  1504. {
  1505.     E_METAAPP_RESULT_T state = m_WIFI_APC_Obj.Get_ConfirmState();
  1506.     char  str[20];
  1507.     float  fdata;
  1508.     switch( state )
  1509.     {
  1510.         case METAAPP_SUCCESS:
  1511.         {
  1512.              m_sTxPwr5000M = m_WIFI_APC_Obj.Get_TxChannelDac5000M();
  1513.              ReDrawFields( PAGEIDX_TXALL );
  1514.              sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting from flash successful";
  1515.              m_WIFI_TXDC_Obj.ConfirmCallback = ::CNF_ReadTxDCFromNVRAM;
  1516.              m_WIFI_TXDC_Obj.REQ_Read_From_NVRAM_Start();
  1517.         }
  1518.         break;
  1519.         case METAAPP_FAIL:
  1520.         {
  1521.              sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting fail, please check the version of load and NVRAM database are same.";
  1522.              Application->MessageBox( "Execution Failure : Upload TX channel power setting, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1523.              CurrentPageReset();
  1524.         }
  1525.         break;
  1526.         case METAAPP_TIMEOUT:
  1527.         {
  1528.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting timeout";
  1529.             Application->MessageBox( "Execution Timeout : Upload TX channel power setting", "TIMEOUT", MB_OK );
  1530.             CurrentPageReset();
  1531.         }
  1532.         break;
  1533.         case METAAPP_STOP:
  1534.         {
  1535.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting stop";
  1536.             CurrentPageReset();
  1537.         }
  1538.         break;
  1539.     }
  1540. }
  1541. //--------------------------------------------------------------------------
  1542. void TfrmWiFi::UploadTxDCFromFlashDone( void )
  1543. {
  1544.     E_METAAPP_RESULT_T state = m_WIFI_TXDC_Obj.Get_ConfirmState();
  1545.     char  str[20];
  1546.     float  fdata;
  1547.     switch( state )
  1548.     {
  1549.         case METAAPP_SUCCESS:
  1550.         {
  1551.              m_sTxDcOffset = m_WIFI_TXDC_Obj.Get_TxDcOffset();
  1552.              ReDrawFields( PAGEIDX_TXALL );
  1553.              sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX DC offset from flash successful";
  1554.         }
  1555.         break;
  1556.         case METAAPP_FAIL:
  1557.         {
  1558.              sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting fail, please check the version of load and NVRAM database are same.";
  1559.              Application->MessageBox( "Execution Failure : Upload TX channel power setting, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1560.         }
  1561.         break;
  1562.         case METAAPP_TIMEOUT:
  1563.         {
  1564.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting timeout";
  1565.             Application->MessageBox( "Execution Timeout : Upload TX channel power setting", "TIMEOUT", MB_OK );
  1566.         }
  1567.         break;
  1568.         case METAAPP_STOP:
  1569.         {
  1570.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Upload TX channel power setting stop";
  1571.         }
  1572.         break;
  1573.     }
  1574.     CurrentPageReset();
  1575. }
  1576. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1577. void __fastcall TfrmWiFi::btnTXDownloadToFlashClick(TObject *Sender)
  1578. {
  1579.     if( ! NVRAMMan->Get_IsInit() )
  1580.     {  frmMainSel->mnuFDMDatabaseClick(Sender);
  1581.     }
  1582.     if( ! NVRAMMan->Get_IsInit() )
  1583.     {
  1584.         sbTX->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialize fail";
  1585.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  1586.         return;
  1587.     }
  1588.     if( m_sWiFiCap.support_802_11g || m_sWiFiCap.support_802_11b )
  1589.     {
  1590.         m_WIFI_APC_Obj.Set_TxChannelDac2400M( m_sTxPwr2400M );
  1591.         m_WIFI_APC_Obj.ConfirmCallback = ::CNF_CPTX_WriteTxPower2400MToNVRAM;
  1592.         m_WIFI_APC_Obj.REQ_Write_TxPower2400M_To_NVRAM_Start();
  1593.     }
  1594.     else if( m_sWiFiCap.support_802_11a )
  1595.     {
  1596.         m_WIFI_APC_Obj.Set_TxChannelDac5000M( m_sTxPwr5000M );
  1597.         m_WIFI_APC_Obj.ConfirmCallback = ::CNF_CPTX_WriteTxPower5000MToNVRAM;
  1598.         m_WIFI_APC_Obj.REQ_Write_TxPower5000M_To_NVRAM_Start();
  1599.     }
  1600.     CurrentPageLock();
  1601. }
  1602. //---------------------------------------------------------------------------
  1603. void  TfrmWiFi::CPTX_DownloadTxPower2400MToFlashDone( void )
  1604. {
  1605.     int state = m_WIFI_CPT_Obj.Get_ConfirmState();
  1606.     switch( state )
  1607.     {
  1608.         case METAAPP_SUCCESS:
  1609.         {
  1610.             if( m_sWiFiCap.support_802_11a )
  1611.             {
  1612.                 m_WIFI_APC_Obj.Set_TxChannelDac5000M( m_sTxPwr5000M );
  1613.                 m_WIFI_APC_Obj.ConfirmCallback = ::CNF_CPTX_WriteTxPower5000MToNVRAM;
  1614.                 m_WIFI_APC_Obj.REQ_Write_TxPower5000M_To_NVRAM_Start();
  1615.             }
  1616.             else
  1617.             {
  1618.                 sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash successful";
  1619.                // CurrentPageReset();
  1620.                 m_WIFI_TXDC_Obj.Set_TxDcOffset( m_sTxDcOffset );
  1621.                 m_WIFI_TXDC_Obj.ConfirmCallback = ::CNF_WriteTxDCToNVRAM;
  1622.                 m_WIFI_TXDC_Obj.REQ_Write_To_NVRAM_Start();
  1623.             }
  1624.         }
  1625.         break;
  1626.         case METAAPP_FAIL:
  1627.         {
  1628.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash fail, please check the version of load and NVRAM database are same.";
  1629.             Application->MessageBox( "Execution Failure : Download TX channel power setting to flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1630.             CurrentPageReset();
  1631.         }
  1632.         break;
  1633.         case METAAPP_TIMEOUT:
  1634.         {
  1635.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash timeout";
  1636.             Application->MessageBox( "Execution Timeout : Download TX channel power setting to flash", "TIMEOUT", MB_OK );
  1637.             CurrentPageReset();
  1638.         }
  1639.         break;
  1640.         case METAAPP_STOP:
  1641.         {
  1642.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash stop";
  1643.             CurrentPageReset();
  1644.         }
  1645.         break;
  1646.     }
  1647. }
  1648. //---------------------------------------------------------------------------
  1649. void  TfrmWiFi::CPTX_DownloadTxPower5000MToFlashDone( void )
  1650. {
  1651.     int state = m_WIFI_CPT_Obj.Get_ConfirmState();
  1652.     switch( state )
  1653.     {
  1654.         case METAAPP_SUCCESS:
  1655.         {
  1656.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash successful";
  1657.             m_WIFI_TXDC_Obj.Set_TxDcOffset( m_sTxDcOffset );
  1658.             m_WIFI_TXDC_Obj.ConfirmCallback = ::CNF_WriteTxDCToNVRAM;
  1659.             m_WIFI_TXDC_Obj.REQ_Write_To_NVRAM_Start();
  1660.         }
  1661.         break;
  1662.         case METAAPP_FAIL:
  1663.         {
  1664.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash fail, please check the version of load and NVRAM database are same.";
  1665.             Application->MessageBox( "Execution Failure : Download TX channel power setting to flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1666.             CurrentPageReset();
  1667.         }
  1668.         break;
  1669.         case METAAPP_TIMEOUT:
  1670.         {
  1671.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash timeout";
  1672.             Application->MessageBox( "Execution Timeout : Download TX channel power setting to flash", "TIMEOUT", MB_OK );
  1673.             CurrentPageReset();
  1674.         }
  1675.         break;
  1676.         case METAAPP_STOP:
  1677.         {
  1678.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX channel power setting to flash stop";
  1679.             CurrentPageReset();
  1680.         }
  1681.         break;
  1682.     }
  1683. }
  1684. //---------------------------------------------------------------------------
  1685. void  TfrmWiFi::DownloadTxDCToFlashDone( void )
  1686. {
  1687.     int state = m_WIFI_CPT_Obj.Get_ConfirmState();
  1688.     switch( state )
  1689.     {
  1690.         case METAAPP_SUCCESS:
  1691.         {
  1692.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX DC offset to flash successful";
  1693.         }
  1694.         break;
  1695.         case METAAPP_FAIL:
  1696.         {
  1697.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX DC offset to flash fail, please check the version of load and NVRAM database are same.";
  1698.             Application->MessageBox( "Execution Failure : Download TX DC offset to flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1699.         }
  1700.         break;
  1701.         case METAAPP_TIMEOUT:
  1702.         {
  1703.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX DC offset to flash timeout";
  1704.             Application->MessageBox( "Execution Timeout : Download TX DC offset to flash", "TIMEOUT", MB_OK );
  1705.         }
  1706.         break;
  1707.         case METAAPP_STOP:
  1708.         {
  1709.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Download TX DC offset to flash stop";
  1710.         }
  1711.         break;
  1712.     }
  1713.     CurrentPageReset();
  1714. }
  1715. //--------------------------------------------------------------------------
  1716. void __fastcall TfrmWiFi::btnTXChangeDBClick(TObject *Sender)
  1717. {
  1718.     frmMainSel->mnuFDMDatabaseClick(Sender);
  1719.     if( ! NVRAMMan->Get_IsInit() )
  1720.     {
  1721.         sbTX->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  1722.         Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  1723.         return;
  1724.     }
  1725.     sbTX->Panels->Items[0]->Text = (AnsiString) "  Change NVRAM database file successfully";
  1726. }
  1727. //---------------------------------------------------------------------------
  1728. void __fastcall TfrmWiFi::btnTXLoadFromFileClick(TObject *Sender)
  1729. {
  1730.     char str[512];
  1731.     bool ok;
  1732.     float  fdata;
  1733.     ok = OpenDialog->Execute();
  1734.     if( !ok )
  1735.     {
  1736.         sbTX->Panels->Items[0]->Text = (AnsiString) "  Load WiFi TX setting from file fail";
  1737.         return;
  1738.     }
  1739.     strcpy( str, OpenDialog->FileName.c_str() );
  1740.     if( m_sWiFiCap.support_802_11g || m_sWiFiCap.support_802_11b )
  1741.     {
  1742.         ok = m_WIFI_APC_Obj.REQ_Read_TxPower2400M_From_File( str );
  1743.         if( ok )
  1744.         {
  1745.             m_sTxPwr2400M = m_WIFI_APC_Obj.Get_TxChannelDac2400M();
  1746.         }
  1747.         else
  1748.         {
  1749.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Load WiFi TX setting from file fail";
  1750.             Application->MessageBox( "Execution Failure : Load WiFi TX setting from file", "FAILURE", MB_OK );
  1751.         }
  1752.     }
  1753.     if( m_sWiFiCap.support_802_11a )
  1754.     {
  1755.         ok = m_WIFI_APC_Obj.REQ_Read_TxPower5000M_From_File( str );
  1756.         if( ok )
  1757.         {
  1758.             m_sTxPwr5000M = m_WIFI_APC_Obj.Get_TxChannelDac5000M();
  1759.         }
  1760.         else
  1761.         {
  1762.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Load WiFi TX setting from file fail";
  1763.             Application->MessageBox( "Execution Failure : Load WiFi TX setting from file", "FAILURE", MB_OK );
  1764.         }
  1765.     }
  1766.     // load TX DC offset from file
  1767.     ok = m_WIFI_TXDC_Obj.REQ_Read_From_File( str );
  1768.     if( ok )
  1769.     {
  1770.         m_sTxDcOffset = m_WIFI_TXDC_Obj.Get_TxDcOffset();
  1771.     }
  1772.     else
  1773.     {
  1774.         sbTX->Panels->Items[0]->Text = (AnsiString) "  Load WiFi TX setting from file fail";
  1775.         Application->MessageBox( "Execution Failure : Load WiFi TX setting from file", "FAILURE", MB_OK );
  1776.     }
  1777.     ReDrawFields( PAGEIDX_TXALL );
  1778.     sbTX->Panels->Items[0]->Text = (AnsiString) "  Load WiFi TX setting from file successfully";
  1779. }
  1780. //---------------------------------------------------------------------------
  1781. void __fastcall TfrmWiFi::btnTXSaveToFileClick(TObject *Sender)
  1782. {
  1783.     char str[512];
  1784.     bool ok;
  1785.     ok = SaveDialog->Execute();
  1786.     if( !ok )
  1787.     {
  1788.         sbTX->Panels->Items[0]->Text = (AnsiString) "  Save WiFi TX setting to file fail";
  1789.         return;
  1790.     }
  1791.     strcpy( str, SaveDialog->FileName.c_str() );
  1792.     if( m_sWiFiCap.support_802_11g || m_sWiFiCap.support_802_11b )
  1793.     {
  1794.         m_WIFI_APC_Obj.Set_TxChannelDac2400M( m_sTxPwr2400M );
  1795.         ok = m_WIFI_APC_Obj.REQ_Write_TxPower2400M_To_File( str );
  1796.         if( !ok )
  1797.         {
  1798.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Save WiFi TX setting to file fail";
  1799.             Application->MessageBox( "Execution Failure : Save WiFi TX setting to file", "FAILURE", MB_OK );
  1800.             return;
  1801.         }
  1802.     }
  1803.     if( m_sWiFiCap.support_802_11a )
  1804.     {
  1805.         m_WIFI_APC_Obj.Set_TxChannelDac5000M( m_sTxPwr5000M );
  1806.         ok = m_WIFI_APC_Obj.REQ_Write_TxPower5000M_To_File( str );
  1807.         if( !ok )
  1808.         {
  1809.             sbTX->Panels->Items[0]->Text = (AnsiString) "  Save WiFi TX setting to file fail";
  1810.             Application->MessageBox( "Execution Failure : Save WiFi TX setting to file", "FAILURE", MB_OK );
  1811.             return;
  1812.         }
  1813.     }
  1814.     // save TX DC offset to file
  1815.     m_WIFI_TXDC_Obj.Set_TxDcOffset( m_sTxDcOffset );
  1816.     ok = m_WIFI_TXDC_Obj.REQ_Write_To_File( str );
  1817.     if( !ok )
  1818.     {
  1819.         sbTX->Panels->Items[0]->Text = (AnsiString) "  Save WiFi TX setting to file fail";
  1820.         Application->MessageBox( "Execution Failure : Save WiFi TX setting to file", "FAILURE", MB_OK );
  1821.         return;
  1822.     }
  1823.     sbTX->Panels->Items[0]->Text = (AnsiString) "  Save WiFi TX setting to file successfully";
  1824. }
  1825. //---------------------------------------------------------------------------
  1826. //---------------------------------------------------------------------------
  1827. void __fastcall TfrmWiFi::edtCPTPacketCountCheck(TObject *Sender)
  1828. {
  1829.    unsigned int  ui_data;
  1830.    AnsiString  text;
  1831.    TEdit *edit = (TEdit*)Sender;
  1832.    char  hint[] =
  1833.    {   " packet count is invalid "
  1834.    };
  1835.    text = edit->Text;
  1836.    if( !IsValidWiFiPacketCount( text, ui_data ) )
  1837.    {
  1838.       edit->Text = 1000;
  1839.       ShowHintLabel( edit, hint );
  1840.       edit->SetFocus();
  1841.       return;
  1842.    }
  1843. }
  1844. //---------------------------------------------------------------------------
  1845. void __fastcall TfrmWiFi::edtCPTPacketLengthCheck(TObject *Sender)
  1846. {
  1847.     unsigned int  ui_data;
  1848.     AnsiString  text;
  1849.     TEdit *edit = (TEdit*)Sender;
  1850.     char  hint[] =
  1851.     {   " packet length shall be 24~1500 "
  1852.     };
  1853.     text = edit->Text;
  1854.     if( !IsValidWiFiPacketLength( text, ui_data ) )
  1855.     {
  1856.         edit->Text = 128;
  1857.         ShowHintLabel( edit, hint );
  1858.         edit->SetFocus();
  1859.         return;
  1860.     }
  1861. }
  1862. //--------------------------------------------------------------------------
  1863. void __fastcall TfrmWiFi::edtCPTPacketIntervalCheck(TObject *Sender)
  1864. {
  1865.     unsigned int  ui_data;
  1866.     AnsiString  text;
  1867.     TEdit *edit = (TEdit*)Sender;
  1868.     char  hint[] =
  1869.     {   " packet interval is invalid "
  1870.     };
  1871.     text = edit->Text;
  1872.     if( !IsValidWiFiPacketLength( text, ui_data ) )
  1873.     {
  1874.         edit->Text = 100;
  1875.         ShowHintLabel( edit, hint );
  1876.         edit->SetFocus();
  1877.         return;
  1878.     }
  1879. }
  1880. //---------------------------------------------------------------------------
  1881. void __fastcall TfrmWiFi::edtCPTTxPowerDACCheck(TObject *Sender)
  1882. {
  1883.     unsigned char  uc_data;
  1884.     AnsiString  text;
  1885.     TEdit *edit = (TEdit*)Sender;
  1886.     char  hint[] = " value should be 0~63 ";
  1887.     text = edit->Text;
  1888.     if( 0 == btnTXTxPowerDac->Tag )  // Dec
  1889.     {
  1890.         if( !IsValidDecWiFiTxPowerDac( text, uc_data ) )
  1891.         {
  1892.             ShowHintLabel( edit, hint );
  1893.             edit->SetFocus();
  1894.             return;
  1895.         }
  1896.     }
  1897.     else  // Hex
  1898.     {
  1899.         if( !IsValidHexWiFiTxPowerDac( text, uc_data ) )
  1900.         {
  1901.             ShowHintLabel( edit, hint );
  1902.             edit->SetFocus();
  1903.             return;
  1904.         }
  1905.     }
  1906.     if( uc_data > 63 )
  1907.     {
  1908.         ShowHintLabel( edit, hint );
  1909.             edit->SetFocus();
  1910.             return;
  1911.     }
  1912.     E_WIFI_GENERATION wifi_802_11_idx;
  1913.     unsigned int chan_idx;
  1914.     if(! GetWiFiChannelIndexFromStr( cbTXChannelID->Text, cbTXTxRate->Text, wifi_802_11_idx, chan_idx ) )
  1915.     {
  1916.         return;
  1917.     }
  1918.     if( WIFI_802_11A_IDX == wifi_802_11_idx )
  1919.     {
  1920.         m_sTxPwr5000M.TxPWR[chan_idx] = uc_data;
  1921.     }
  1922.     else if( WIFI_802_11B_IDX == wifi_802_11_idx )
  1923.     {
  1924.         m_sTxPwr2400M.CCKTxPWR[chan_idx] = uc_data;
  1925.     }
  1926.     else  // 802.11G
  1927.     {
  1928.         m_sTxPwr2400M.OFDMTxPWR[chan_idx] = uc_data;
  1929.     }
  1930. }
  1931. //---------------------------------------------------------------------------
  1932. void __fastcall TfrmWiFi::cbTXTxFilterChange(TObject *Sender)
  1933. {
  1934.     //    
  1935. }
  1936. //---------------------------------------------------------------------------
  1937. void __fastcall TfrmWiFi::cbTXTxRateChange(TObject *Sender)
  1938. {
  1939.     ReDrawFields( PAGEIDX_TXALL );
  1940. }
  1941. //---------------------------------------------------------------------------
  1942. //---------------------------------------------------------------------------
  1943. void __fastcall TfrmWiFi::cbCPTRxAntennaChange(TObject *Sender)
  1944. {
  1945.     //    
  1946. }
  1947. //---------------------------------------------------------------------------
  1948. void __fastcall TfrmWiFi::cbTXChannelIDChange(TObject *Sender)
  1949. {
  1950.     ReDrawFields( PAGEIDX_TXALL );
  1951. }
  1952. //---------------------------------------------------------------------------
  1953. void  TfrmWiFi::ShowHintLabel( TControl *sender, char* hint )
  1954. {
  1955.    TPoint pt0 = this->ClientOrigin;
  1956.    TPoint pt1 = sender->ClientOrigin;
  1957.    lblHint->Left = (pt1.x-pt0.x);
  1958.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  1959.    lblHint->Caption = hint;
  1960.    lblHint->Visible = true;
  1961.    HintTimer->Enabled = true;
  1962. }
  1963. //---------------------------------------------------------------------------
  1964. void __fastcall TfrmWiFi::btnTXStopClick(TObject *Sender)
  1965. {
  1966.     if( 1 == btnTXStart->Tag )
  1967.     {
  1968.         Force_WiFi_Stop();
  1969.         CurrentPageReset();
  1970.         sbTX->Panels->Items[0]->Text = (AnsiString)"  Stop continuous packet TX successfully";
  1971.     }
  1972. }
  1973. //---------------------------------------------------------------------------
  1974. void __fastcall TfrmWiFi::cbCPRChannelIDChange(TObject *Sender)
  1975. {
  1976.     //    
  1977. }
  1978. //---------------------------------------------------------------------------
  1979. void __fastcall TfrmWiFi::cbCPRRxAntennaChange(TObject *Sender)
  1980. {
  1981.     //    
  1982. }
  1983. //---------------------------------------------------------------------------
  1984. void __fastcall TfrmWiFi::btnCPRResetClick(TObject *Sender)
  1985. {
  1986.     // General RX
  1987.     int i;
  1988.     stCPRTotal->Caption = IntToStr( 0 );
  1989.     stCPRSuccess->Caption = IntToStr( 0 );
  1990.     stCPRFER->Caption = IntToStr( 0 );
  1991.     stCPRCRCErr->Caption = IntToStr( 0 );
  1992.     stCPRint_rx_ok_num->Caption = IntToStr( 0 );
  1993.     stCPRint_crc_err_num->Caption = IntToStr( 0 );
  1994.     stCPRpau_rx_ok_count->Caption = IntToStr( 0 );
  1995.     stCPRpau_crc_err_count->Caption = IntToStr( 0 );
  1996.     stCPRpau_cca_count->Caption = IntToStr( 0 );
  1997.     stCPRpau_rx_fifo_full_count->Caption = IntToStr( 0 );
  1998.     for( i=0; i<WIFI_TEST_RATE_COUNT; i++ )
  1999.     {
  2000.         stCPRSum[i]->Caption = IntToStr( 0 );
  2001.         stCPRGood[i]->Caption = IntToStr( 0 );
  2002.         stCPRBad[i]->Caption = IntToStr( 0 );
  2003.         stCPRFer[i]->Caption = IntToStr( 0 );
  2004.     }
  2005.     // RSSI
  2006.     stCPRMin->Caption = IntToStr( 0 );
  2007.     stCPRMax->Caption = IntToStr( 0 );
  2008.     stCPRMean->Caption = IntToStr( 0 );
  2009.     stCPRVariance->Caption = IntToStr( 0 );
  2010.     // Preamble
  2011.     stCPRLong->Caption = IntToStr( 0 );
  2012.     stCPRShort->Caption = IntToStr( 0 );
  2013.     m_WIFI_CPRX_Obj.ConfirmCallback  = ::ConfirmCallback_QueryOriRxStatus;
  2014.     m_WIFI_CPRX_Obj.REQ_QueryRxStatus_Start();
  2015. }
  2016. //---------------------------------------------------------------------------
  2017. void __fastcall TfrmWiFi::btnCPRStartClick(TObject *Sender)
  2018. {
  2019.     unsigned int channel_freq = GetWiFiChannelFreqFromStr( cbCPRChannelID->Text );
  2020.     WiFi_RxAntSel_E rx_ant = (WiFi_RxAntSel_E) cbCPRRxAntenna->ItemIndex;
  2021.     CurrentPageLock();
  2022.     m_WIFI_CPRX_Obj.ConfirmCallback  = ::ConfirmCallback_CPRX;
  2023.     m_WIFI_CPRX_Obj.REQ_Start( channel_freq, rx_ant );
  2024. }
  2025. //---------------------------------------------------------------------------
  2026. void TfrmWiFi::ConfirmCallback_CPRX( void )
  2027. {
  2028.     int state = m_WIFI_CPRX_Obj.Get_ConfirmState();
  2029.     switch( state )
  2030.     {
  2031.         case STATE_CPRX_OK:
  2032.         {
  2033.             m_WIFI_CPRX_Obj.ConfirmCallback  = ::ConfirmCallback_QueryOriRxStatus;
  2034.             m_WIFI_CPRX_Obj.REQ_QueryRxStatus_Start();
  2035.             TimerWiFi->Enabled = true;
  2036.             sbCPR->Panels->Items[0]->Text = (AnsiString)"  Continuous packet RX progressing";
  2037.         }
  2038.         break;
  2039.         case STATE_CPRX_FAIL:
  2040.         {
  2041.             sbCPR->Panels->Items[0]->Text = (AnsiString)"  Continuous packet RX fail";
  2042.             Application->MessageBox( "Execution Failure : Continuous packet RX", "FAILURE", MB_OK );
  2043.             Force_WiFi_Stop();
  2044.             CurrentPageReset();
  2045.         }
  2046.         break;
  2047.         case STATE_CPRX_TIMEOUT:
  2048.         {
  2049.              sbCPR->Panels->Items[0]->Text = (AnsiString)"  Continuous packet RX timeout";
  2050.              Application->MessageBox( "Execution Timeout : Continuous packet RX", "TIMEOUT", MB_OK );
  2051.              Force_WiFi_Stop();
  2052.              CurrentPageReset();
  2053.         }
  2054.         break;
  2055.         case STATE_CPRX_STOP:
  2056.         {
  2057.              sbCPR->Panels->Items[0]->Text = (AnsiString)"  Continuous packet RX stop";
  2058.              CurrentPageReset();
  2059.         }
  2060.         break;
  2061.     }
  2062. }
  2063. //---------------------------------------------------------------------------
  2064. void TfrmWiFi::ConfirmCallback_QueryOriRxStatus( void )
  2065. {
  2066.     int state = m_WIFI_CPRX_Obj.Get_ConfirmState();
  2067.     switch( state )
  2068.     {
  2069.         case STATE_CPRX_OK:
  2070.         {
  2071.             WiFi_RxStatus_S  rx_status;
  2072.             m_sOriRxStatus = m_WIFI_CPRX_Obj.Get_RxStatus();
  2073.            // stCPRSuccess->Caption = IntToStr( rx_status.int_rx_ok_num - m_sOriRxStatus.int_rx_ok_num );
  2074.            // stCPRCRCErr->Caption  = IntToStr( rx_status.int_crc_err_num - m_sOriRxStatus.int_crc_err_num );
  2075.            // stCPRTotal->Caption   = IntToStr( stCPRSuccess->Caption.ToInt() + stCPRCRCErr->Caption.ToInt() );
  2076.            // if( stCPRTotal->Caption.ToInt() != 0 )
  2077.            // {
  2078.            //     stCPRFER->Caption     = Double_To_AnsiString( stCPRCRCErr->Caption.ToInt() * 100.0 / stCPRTotal->Caption.ToInt() );
  2079.            // }
  2080.             sbCPR->Panels->Items[0]->Text = (AnsiString)"  Query continuous packet RX status successfully";
  2081.         }
  2082.         break;
  2083.         case STATE_CPRX_FAIL:
  2084.         {
  2085.             sbCPR->Panels->Items[0]->Text = (AnsiString)"  Query continuous packet RX status fail";
  2086.             Application->MessageBox( "Execution Failure : Query continuous packet RX status", "FAILURE", MB_OK );
  2087.             Force_WiFi_Stop();
  2088.             CurrentPageReset();
  2089.         }
  2090.         break;
  2091.         case STATE_CPRX_TIMEOUT:
  2092.         {
  2093.              sbCPR->Panels->Items[0]->Text = (AnsiString)"  Query continuous packet RX status timeout";
  2094.              Application->MessageBox( "Execution Timeout : Query continuous packet RX status", "TIMEOUT", MB_OK );
  2095.              Force_WiFi_Stop();
  2096.              CurrentPageReset();
  2097.         }
  2098.         break;
  2099.         case STATE_CPRX_STOP:
  2100.         {
  2101.              sbCPR->Panels->Items[0]->Text = (AnsiString)"  Query continuous packet RX status stop";
  2102.              CurrentPageReset();
  2103.         }
  2104.         break;
  2105.     }
  2106. }
  2107. //---------------------------------------------------------------------------
  2108. void __fastcall TfrmWiFi::btnCPRStopClick(TObject *Sender)
  2109. {
  2110.     if( btnCPRStart->Tag==1 )
  2111.     {
  2112.         Force_WiFi_Stop();
  2113.         CurrentPageReset();
  2114.         sbCPR->Panels->Items[0]->Text = (AnsiString)"  Stop continuous packet RX successfully";
  2115.     }
  2116. }
  2117. //---------------------------------------------------------------------------
  2118. void __fastcall TfrmWiFi::cbTXOPChannelIDChange(TObject *Sender)
  2119. {
  2120.    // ReDrawFields( PAGEIDX_TXOP );
  2121. }
  2122. //---------------------------------------------------------------------------
  2123. void __fastcall TfrmWiFi::cbTXOPTXFilterChange(TObject *Sender)
  2124. {
  2125.     //    
  2126. }
  2127. //---------------------------------------------------------------------------
  2128. void __fastcall TfrmWiFi::cbTXOPTXRateChange(TObject *Sender)
  2129. {
  2130.    // ReDrawFields( PAGEIDX_TXOP );
  2131. }
  2132. //---------------------------------------------------------------------------
  2133. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2134. void  TfrmWiFi::TXOPExecute( void )
  2135. {
  2136.     AnsiString text;
  2137.     S_WIFITXOP  wifitxop;
  2138.     wifitxop.wifi_id = m_final_WiFiId;
  2139.     if( IDX_TX_FILTER_NORTH_AMERICA == cbTXTxFilter->ItemIndex )
  2140.     {
  2141.         wifitxop.reg_domain.country_code[0] = 'U';
  2142.         wifitxop.reg_domain.country_code[1] = 'S';
  2143.     }
  2144.     else
  2145.     {
  2146.         wifitxop.reg_domain.country_code[0] = 'J';
  2147.         wifitxop.reg_domain.country_code[1] = 'P';
  2148.     }
  2149.     wifitxop.channel_freq = GetWiFiChannelFreqFromStr( cbTXChannelID->Text );
  2150.     wifitxop.tx_rate      = (WiFi_TestRate_E) GetWiFiTxRateFromStr( cbTXTxRate->Text );
  2151.     if( 0 == btnTXTxPowerDac->Tag )
  2152.     {
  2153.         text = edtTXTxPowerDAC->Text;        if( !IsValidDecWiFiTxPowerDac( text, wifitxop.tx_pwr_dac ) )           {  edtTXOPTxPowerDACCheck(edtTXTxPowerDAC);            return;   }
  2154.     }
  2155.     else
  2156.     {
  2157.         text = edtTXTxPowerDAC->Text;        if( !IsValidHexWiFiTxPowerDac( text, wifitxop.tx_pwr_dac ) )           {  edtTXOPTxPowerDACCheck(edtTXTxPowerDAC);            return;   }
  2158.     }
  2159.     CurrentPageLock();
  2160.     sbTX->Panels->Items[0]->Text = (AnsiString)"  TX output power progressing";
  2161.     m_WIFI_TXOP_Obj.ConfirmCallback  = ::ConfirmCallback_TXOP;
  2162.     m_WIFI_TXOP_Obj.REQ_Start( wifitxop );
  2163. }
  2164. //---------------------------------------------------------------------------
  2165. void  TfrmWiFi::ConfirmCallback_TXOP( void )
  2166. {
  2167.     int state = m_WIFI_TXOP_Obj.Get_ConfirmState();
  2168.     switch( state )
  2169.     {
  2170.         case STATE_TXOP_OK:
  2171.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX output power progressing";
  2172.         break;
  2173.         case STATE_TXOP_FAIL:
  2174.         {
  2175.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX output power fail";
  2176.             Application->MessageBox( "Execution Timeout : TX output power", "FAIL", MB_OK );
  2177.             Force_WiFi_Stop();
  2178.             CurrentPageReset();
  2179.         }
  2180.         break;
  2181.         case STATE_TXOP_TIMEOUT:
  2182.         {
  2183.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX output power timeout";
  2184.             Application->MessageBox( "Execution Timeout : TX output power", "TIMEOUT", MB_OK );
  2185.             Force_WiFi_Stop();
  2186.             CurrentPageReset();
  2187.         }
  2188.         break;
  2189.         case STATE_TXOP_STOP:
  2190.         {
  2191.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX output power stop";
  2192.             CurrentPageReset();
  2193.         }
  2194.         break;
  2195.     }
  2196. }
  2197. //---------------------------------------------------------------------------
  2198. void __fastcall TfrmWiFi::btnTXOPStopClick(TObject *Sender)
  2199. {
  2200.     if( 1 == btnTXStart->Tag )
  2201.     {
  2202.         Force_WiFi_Stop();
  2203.         CurrentPageReset();
  2204.         sbTX->Panels->Items[0]->Text = (AnsiString)"  Stop TX output power successfully";
  2205.     }
  2206. }
  2207. //---------------------------------------------------------------------------
  2208. void __fastcall TfrmWiFi::cbTXCSChannelIDChange(TObject *Sender)
  2209. {
  2210.     //    
  2211. }
  2212. //---------------------------------------------------------------------------
  2213. void __fastcall TfrmWiFi::cbTXCSTXFilterChange(TObject *Sender)
  2214. {
  2215.     //
  2216. }
  2217. //---------------------------------------------------------------------------
  2218. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2219. void TfrmWiFi::TXCSExecute( void )
  2220. {
  2221.     AnsiString  text;
  2222.     S_WIFITXCS  wifitxcs;
  2223.     wifitxcs.wifi_id = m_final_WiFiId;
  2224.     wifitxcs.channel_freq = GetWiFiChannelFreqFromStr( cbTXChannelID->Text );
  2225.     if( IDX_TX_FILTER_NORTH_AMERICA == cbTXTxFilter->ItemIndex )
  2226.     {
  2227.         wifitxcs.reg_domain.country_code[0] = 'U';
  2228.         wifitxcs.reg_domain.country_code[1] = 'S';
  2229.     }
  2230.     else
  2231.     {
  2232.         wifitxcs.reg_domain.country_code[0] = 'J';
  2233.         wifitxcs.reg_domain.country_code[1] = 'P';
  2234.     }
  2235.     wifitxcs.tx_rate = (WiFi_TestRate_E) GetWiFiTxRateFromStr( cbTXTxRate->Text );
  2236.     if( 0 == btnTXTxPowerDac->Tag )
  2237.     {
  2238.         text = edtTXTxPowerDAC->Text;        if( !IsValidDecWiFiTxPowerDac( text, wifitxcs.tx_pwr_dac ) )           {  edtTXCSTxPowerDACCheck(edtTXTxPowerDAC);            return;   }
  2239.     }
  2240.     else
  2241.     {
  2242.         text = edtTXTxPowerDAC->Text;        if( !IsValidHexWiFiTxPowerDac( text, wifitxcs.tx_pwr_dac ) )           {  edtTXCSTxPowerDACCheck(edtTXTxPowerDAC);            return;   }
  2243.     }
  2244.     CurrentPageLock();
  2245.     sbTX->Panels->Items[0]->Text = (AnsiString) "  TX Carrier suppression progressing";
  2246.     m_WIFI_TXCS_Obj.ConfirmCallback  = ::ConfirmCallback_TXCS;
  2247.     m_WIFI_TXCS_Obj.REQ_Start( wifitxcs );
  2248. }
  2249. //---------------------------------------------------------------------------
  2250. void TfrmWiFi::ConfirmCallback_TXCS( void )
  2251. {
  2252.     int state = m_WIFI_TXCS_Obj.Get_ConfirmState();
  2253.     switch( state )
  2254.     {
  2255.         case STATE_TXCS_OK:
  2256.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX carrier suppression progressing";
  2257.         break;
  2258.         case STATE_TXCS_FAIL:
  2259.         {
  2260.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX carrier suppression fail";
  2261.             Application->MessageBox( "Execution Timeout : TX carrier suppression", "FAIL", MB_OK );
  2262.             Force_WiFi_Stop();
  2263.             CurrentPageReset();
  2264.         }
  2265.         break;
  2266.         case STATE_TXCS_TIMEOUT:
  2267.         {
  2268.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX carrier suppression timeout";
  2269.             Application->MessageBox( "Execution Timeout : TX carrier suppression", "TIMEOUT", MB_OK );
  2270.             Force_WiFi_Stop();
  2271.             CurrentPageReset();
  2272.         }
  2273.         break;
  2274.         case STATE_TXCS_STOP:
  2275.         {
  2276.             sbTX->Panels->Items[0]->Text = (AnsiString)"  TX carrier suppression stop";
  2277.             CurrentPageReset();
  2278.         }
  2279.         break;
  2280.     }
  2281. }
  2282. //---------------------------------------------------------------------------
  2283. void __fastcall TfrmWiFi::btnTXCSStopClick(TObject *Sender)
  2284. {
  2285.     if( 1 == btnTXStart->Tag )
  2286.     {
  2287.         Force_WiFi_Stop();
  2288.         CurrentPageReset();
  2289.         sbTX->Panels->Items[0]->Text = (AnsiString)"  Stop TX carrier suppression successfully";
  2290.     }
  2291. }
  2292. //---------------------------------------------------------------------------
  2293. void __fastcall TfrmWiFi::cbLFChannelIDChange(TObject *Sender)
  2294. {
  2295.     //    
  2296. }
  2297. //---------------------------------------------------------------------------
  2298. void __fastcall TfrmWiFi::cbLFTXFilterChange(TObject *Sender)
  2299. {
  2300.     //    
  2301. }
  2302. //---------------------------------------------------------------------------
  2303. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2304. void TfrmWiFi::LFExecute( void )
  2305. {
  2306.     AnsiString  text;
  2307.     S_WIFILF wifilf;
  2308.     wifilf.wifi_id = m_final_WiFiId;
  2309.     wifilf.channel_freq = GetWiFiChannelFreqFromStr( cbTXChannelID->Text );
  2310.     if( IDX_TX_FILTER_NORTH_AMERICA == cbTXTxFilter->ItemIndex )
  2311.     {
  2312.         wifilf.reg_domain.country_code[0] = 'U';
  2313.         wifilf.reg_domain.country_code[1] = 'S';
  2314.     }
  2315.     else
  2316.     {
  2317.         wifilf.reg_domain.country_code[0] = 'J';
  2318.         wifilf.reg_domain.country_code[1] = 'P';
  2319.     }
  2320.     wifilf.tx_rate = (WiFi_TestRate_E) GetWiFiTxRateFromStr( cbTXTxRate->Text );
  2321.     if( 0 == btnTXTxPowerDac->Tag )
  2322.     {
  2323.         text = edtTXTxPowerDAC->Text;        if( !IsValidDecWiFiTxPowerDac( text, wifilf.tx_pwr_dac ) )           {  edtLFTxPowerDACCheck(edtTXTxPowerDAC);            return;   }
  2324.     }
  2325.     else
  2326.     {
  2327.         text = edtTXTxPowerDAC->Text;        if( !IsValidHexWiFiTxPowerDac( text, wifilf.tx_pwr_dac ) )           {  edtLFTxPowerDACCheck(edtTXTxPowerDAC);            return;   }
  2328.     }
  2329.     CurrentPageLock();
  2330.     sbTX->Panels->Items[0]->Text = (AnsiString) "  Local frequency test progressing";
  2331.     m_WIFI_LF_Obj.ConfirmCallback  = ::ConfirmCallback_LF;
  2332.     m_WIFI_LF_Obj.REQ_Start( wifilf );
  2333. }
  2334. //---------------------------------------------------------------------------
  2335. void TfrmWiFi::ConfirmCallback_LF( void )
  2336. {
  2337.     int state = m_WIFI_LF_Obj.Get_ConfirmState();
  2338.     switch( state )
  2339.     {
  2340.         case STATE_LF_OK:
  2341.             sbTX->Panels->Items[0]->Text = (AnsiString)"  Local frequency test progressing";
  2342.         break;
  2343.         case STATE_LF_FAIL:
  2344.         {
  2345.             sbTX->Panels->Items[0]->Text = (AnsiString)"  Local frequency test fail";
  2346.             Application->MessageBox( "Execution Timeout : Local frequency test", "FAIL", MB_OK );
  2347.             Force_WiFi_Stop();
  2348.             CurrentPageReset();
  2349.         }
  2350.         break;
  2351.         case STATE_LF_TIMEOUT:
  2352.         {
  2353.             sbTX->Panels->Items[0]->Text = (AnsiString)"  Local frequency test timeout";
  2354.             Application->MessageBox( "Execution Timeout : Local frequency test", "TIMEOUT", MB_OK );
  2355.             Force_WiFi_Stop();
  2356.             CurrentPageReset();
  2357.         }
  2358.         break;
  2359.         case STATE_LF_STOP:
  2360.         {
  2361.             sbTX->Panels->Items[0]->Text = (AnsiString)"  Local frequency test stop";
  2362.             CurrentPageReset();
  2363.         }
  2364.         break;
  2365.     }
  2366. }
  2367. //---------------------------------------------------------------------------
  2368. void __fastcall TfrmWiFi::btnLFStopClick(TObject *Sender)
  2369. {
  2370.     if( 1 == btnTXStart->Tag )
  2371.     {
  2372.         Force_WiFi_Stop();
  2373.         CurrentPageReset();
  2374.         sbTX->Panels->Items[0]->Text = (AnsiString)"  Stop local frequency test successfully";
  2375.     }
  2376. }
  2377. //---------------------------------------------------------------------------
  2378. void __fastcall TfrmWiFi::btnPSStandbyClick(TObject *Sender)
  2379. {
  2380.     m_WIFI_PS_Obj.ConfirmCallback  = ::ConfirmCallback_PS;
  2381.     m_WIFI_PS_Obj.REQ_Start( WIFI_POWER_MODE_IDLE );
  2382. }
  2383. //---------------------------------------------------------------------------
  2384. void __fastcall TfrmWiFi::btnPSSleepClick(TObject *Sender)
  2385. {
  2386.     m_WIFI_PS_Obj.ConfirmCallback  = ::ConfirmCallback_PS;
  2387.     m_WIFI_PS_Obj.REQ_Start( WIFI_POWER_MODE_SLEEP );
  2388. }
  2389. //---------------------------------------------------------------------------
  2390. void __fastcall TfrmWiFi::edtBBCRIndexCheck(TObject *Sender)
  2391. {
  2392.     AnsiString  text;
  2393.     unsigned int  uidata;
  2394.     TEdit *edit = (TEdit*)Sender;
  2395.     char  hint[] = " value should be 0~127 ";
  2396.     text = edit->Text;
  2397.     if( !IsValidDecWiFiBBRegAddr( text, uidata ) )
  2398.     {
  2399.         ShowHintLabel( edit, hint );
  2400.         edit->SetFocus();
  2401.         return;
  2402.     }
  2403.     if( uidata > 127 )
  2404.     {
  2405.         ShowHintLabel( edit, hint );
  2406.         edit->SetFocus();
  2407.         return;
  2408.     }
  2409.     m_uiBBIdx = uidata;
  2410. }
  2411. //---------------------------------------------------------------------------
  2412. void __fastcall TfrmWiFi::edtBBCRDataCheck(TObject *Sender)
  2413. {
  2414.     AnsiString  text;
  2415.     unsigned char  ucdata;
  2416.     int  band;
  2417.     TEdit *edit = (TEdit*)Sender;
  2418.     char  hint[] = " character is not valid ";
  2419.     text = edit->Text;
  2420.     if( btnBBCRData->Tag==0 )  // Dec
  2421.     {
  2422.         if( !IsValidDecWiFiBBRegValue( text, ucdata ) )
  2423.         {
  2424.             ShowHintLabel( edit, hint );
  2425.             edit->SetFocus();
  2426.             return;
  2427.         }
  2428.     }
  2429.     else  // Hex
  2430.     {
  2431.         if( !IsValidHexWiFiBBRegValue( text, ucdata ) )
  2432.         {
  2433.             ShowHintLabel( edit, hint );
  2434.             edit->SetFocus();
  2435.             return;
  2436.         }
  2437.     }
  2438.     m_ucBBValue = ucdata;
  2439. }
  2440. //---------------------------------------------------------------------------
  2441. void __fastcall TfrmWiFi::btnBBReadClick(TObject *Sender)
  2442. {
  2443.     AnsiString text;
  2444.     unsigned int uidata;
  2445.     if( !CheckFields( ACCESS_SINGLE, OP_READ ) )
  2446.     {
  2447.         sbBB->Panels->Items[0]->Text = (AnsiString) "  Read baseband register fail";
  2448.         Application->MessageBox( "Execution Failure : Read baseband register", "FAILURE", MB_OK );
  2449.         return;
  2450.     }
  2451.     CurrentPageLock();
  2452.     Compose_BBCR_Parameter( ACCESS_SINGLE );
  2453.     
  2454.     m_WIFI_BB_Obj.ConfirmCallback  = ::ConfirmCallback_ReadBBReg;
  2455.     m_WIFI_BB_Obj.REQ_Read_BBCR_Setting_From_Reg_Start( m_sBBCR );
  2456.    // m_WIFI_BB_Obj.REQ_Read_From_Reg_Start(  m_ucBBAddr );
  2457. }
  2458. //---------------------------------------------------------------------------
  2459. void TfrmWiFi::ConfirmCallback_ReadBBReg( void )
  2460. {
  2461.     int state = m_WIFI_BB_Obj.Get_ConfirmState();
  2462.     switch( state )
  2463.     {
  2464.         case STATE_BB_OK:
  2465.         {
  2466.             m_sBBCR = m_WIFI_BB_Obj.Get_BBCR();
  2467.             DeCompose_BBCR_Data( ACCESS_SINGLE );
  2468.             ReDrawFields( PAGEIDX_BB );
  2469.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Read baseband register successfully";
  2470.         }
  2471.         break;
  2472.         case STATE_BB_FAIL:
  2473.         {
  2474.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Read baseband register fail";
  2475.             Application->MessageBox( "Execution Timeout : Read baseband register", "FAIL", MB_OK );
  2476.             Force_WiFi_Stop();
  2477.         }
  2478.         break;
  2479.         case STATE_BB_TIMEOUT:
  2480.         {
  2481.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Read baseband register timeout";
  2482.             Application->MessageBox( "Execution Timeout : Read baseband register", "TIMEOUT", MB_OK );
  2483.             Force_WiFi_Stop();
  2484.         }
  2485.         break;
  2486.         case STATE_BB_STOP:
  2487.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Read baseband register stop";
  2488.         break;
  2489.     }
  2490.     CurrentPageReset();
  2491.     
  2492. }
  2493. //-----------------------------------------------------------------------
  2494. void __fastcall TfrmWiFi::btnBBWriteClick(TObject *Sender)
  2495. {
  2496.     AnsiString text;
  2497.    // unsigned char bb_reg_addr, bb_reg_data;
  2498.    // text = edtBBCRIndex->Text;        if( !IsValidHexWiFiBBRegAddr( text, bb_reg_addr ) )           {  edtBBCRIndexCheck(edtBBCRIndex);            return;   }
  2499.    // text = edtBBCRData->Text;        if( !IsValidHexWiFiBBRegValue( text, bb_reg_data ) )           {  edtBBCRDataCheck(edtBBCRData);            return;   }
  2500.     if( !CheckFields( ACCESS_SINGLE, OP_WRITE ) )
  2501.     {
  2502.         sbBB->Panels->Items[0]->Text = (AnsiString) "  Write baseband register fail";
  2503.         Application->MessageBox( "Execution Failure : Write baseband register", "FAILURE", MB_OK );
  2504.         return;
  2505.     }
  2506.     Compose_BBCR_Parameter( ACCESS_SINGLE );
  2507.     Compose_BBCR_Data( ACCESS_SINGLE );
  2508.     m_WIFI_BB_Obj.ConfirmCallback  = ::ConfirmCallback_WriteBBReg;
  2509.     m_WIFI_BB_Obj.REQ_Write_BBCR_Setting_To_Reg_Start( m_sBBCR );
  2510. }
  2511. //---------------------------------------------------------------------------
  2512. void TfrmWiFi::ConfirmCallback_WriteBBReg( void )
  2513. {
  2514.     int state = m_WIFI_BB_Obj.Get_ConfirmState();
  2515.     switch( state )
  2516.     {
  2517.         case STATE_BB_OK:
  2518.         {
  2519.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Write baseband register successfully";
  2520.         }
  2521.         break;
  2522.         case STATE_BB_FAIL:
  2523.         {
  2524.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Write baseband register fail";
  2525.             Application->MessageBox( "Execution Timeout : Write baseband register", "FAIL", MB_OK );
  2526.             Force_WiFi_Stop();
  2527.         }
  2528.         break;
  2529.         case STATE_BB_TIMEOUT:
  2530.         {
  2531.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Write baseband register timeout";
  2532.             Application->MessageBox( "Execution Timeout : Write baseband register", "TIMEOUT", MB_OK );
  2533.             Force_WiFi_Stop();
  2534.         }
  2535.         break;
  2536.         case STATE_BB_STOP:
  2537.             sbBB->Panels->Items[0]->Text = (AnsiString)"  Write baseband register stop";
  2538.         break;
  2539.     }
  2540.     CurrentPageReset();
  2541. }
  2542. //---------------------------------------------------------------------------
  2543. void __fastcall TfrmWiFi::edtMACMCRAddressCheck(TObject *Sender)
  2544. {
  2545.     AnsiString  text;
  2546.     unsigned int  uidata;
  2547.     TEdit *edit = (TEdit*)Sender;
  2548.     char  hint[] = " character is not valid ";
  2549.     char  hint16[] = " value should be multiple of 2 ";
  2550.     char  hint32[] = " value should be multiple of 4 ";
  2551.     text = edit->Text;
  2552.     if( !IsValidHexWiFiMacRegAddr( text, uidata ) )
  2553.     {
  2554.         ShowHintLabel( edit, hint );
  2555.         edit->SetFocus();
  2556.         return;
  2557.     }
  2558.     if( rbMAC16bits->Checked )
  2559.     {
  2560.         if( 0 != uidata%2 )
  2561.         {
  2562.             ShowHintLabel( edit, hint16 );
  2563.             edit->SetFocus();
  2564.             return;
  2565.         }
  2566.     }
  2567.     else
  2568.     {
  2569.         if( 0 != uidata%4 )
  2570.         {
  2571.             ShowHintLabel( edit, hint32 );
  2572.             edit->SetFocus();
  2573.             return;
  2574.         }
  2575.     }
  2576.     m_uiMacAddr = uidata;
  2577. }
  2578. //---------------------------------------------------------------------------
  2579. void __fastcall TfrmWiFi::edtMACMCRDataCheck(TObject *Sender)
  2580. {
  2581.     AnsiString  text;
  2582.     int  band;
  2583.     TEdit *edit = (TEdit*)Sender;
  2584.     char  hint[] = " value is not valid ";
  2585.     text = edit->Text;
  2586.     if( rbMAC16bits->Checked )
  2587.     {
  2588.         unsigned short  usdata;
  2589.         if( btnMACMCRData->Tag==0 )  // Dec
  2590.         {
  2591.             if( !IsValidDecWiFiMacReg16Value( text, usdata ) )
  2592.             {
  2593.                 ShowHintLabel( edit, hint );
  2594.                 edit->SetFocus();
  2595.                 return;
  2596.             }
  2597.         }
  2598.         else  // Hex
  2599.         {
  2600.             if( !IsValidHexWiFiMacReg16Value( text, usdata ) )
  2601.             {
  2602.                 ShowHintLabel( edit, hint );
  2603.                 edit->SetFocus();
  2604.                 return;
  2605.             }
  2606.         }
  2607.         m_usMac16Data = usdata;
  2608.     }
  2609.     else
  2610.     {
  2611.         unsigned int  uidata;
  2612.         if( btnMACMCRData->Tag==0 )  // Dec
  2613.         {
  2614.             if( !IsValidDecWiFiMacRegValue( text, uidata ) )
  2615.             {
  2616.                 ShowHintLabel( edit, hint );
  2617.                 edit->SetFocus();
  2618.                 return;
  2619.             }
  2620.         }
  2621.         else  // Hex
  2622.         {
  2623.             if( !IsValidHexWiFiMacRegValue( text, uidata ) )
  2624.             {
  2625.                 ShowHintLabel( edit, hint );
  2626.                 edit->SetFocus();
  2627.                 return;
  2628.             }
  2629.         }
  2630.         m_uiMacData = uidata;
  2631.     }
  2632. }
  2633. //---------------------------------------------------------------------------
  2634. void __fastcall TfrmWiFi::btnMACReadClick(TObject *Sender)
  2635. {
  2636.     AnsiString text;
  2637.     unsigned int mac_reg_addr;
  2638.     text = edtMACMCRAddress->Text;        if( !IsValidHexWiFiMacRegAddr( text, mac_reg_addr ) )           {  edtMACMCRAddressCheck(edtMACMCRAddress);            return;   }
  2639.     m_uiMacAddr = mac_reg_addr;
  2640.     CurrentPageLock();
  2641.     m_WIFI_MAC_Obj.ConfirmCallback  = ::ConfirmCallback_ReadMACReg;
  2642.     if( rbMAC16bits->Checked )
  2643.     {
  2644.         Compose_MCR16_Parameter( ACCESS_SINGLE );
  2645.         m_WIFI_MAC_Obj.REQ_Read_MCR16_Setting_From_Reg_Start( m_sMCR16 );
  2646.     }
  2647.     else
  2648.     {
  2649.         Compose_MCR_Parameter( ACCESS_SINGLE );
  2650.         m_WIFI_MAC_Obj.REQ_Read_MCR_Setting_From_Reg_Start( m_sMCR );
  2651.     }
  2652.     sbMAC->Panels->Items[0]->Text = (AnsiString)"  Read MAC register progressing";
  2653.     //m_WIFI_MAC_Obj.REQ_Read_From_Reg_Start( m_uiMacAddr );
  2654. }
  2655. //---------------------------------------------------------------------------
  2656. void TfrmWiFi::ConfirmCallback_ReadMACReg( void )
  2657. {
  2658.     int state = m_WIFI_MAC_Obj.Get_ConfirmState();