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

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2001
  8. *
  9. *****************************************************************************/
  10. /*****************************************************************************
  11.  *
  12.  * Filename:
  13.  * ---------
  14.  *   wifi_sc.cpp
  15.  *
  16.  * Project:
  17.  * --------
  18.  *   Maui META APP
  19.  *
  20.  * Description:
  21.  * ------------
  22.  *   WiFi script source
  23.  *
  24.  * Author:
  25.  * -------
  26.  *  Andy Ueng (mtk00490)
  27.  *
  28.  *============================================================================
  29.  *             HISTORY
  30.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  31.  *------------------------------------------------------------------------------
  32.  * $Revision$
  33.  * $Modtime$
  34.  * $Log$
  35.  *
  36.  *------------------------------------------------------------------------------
  37.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  38.  *============================================================================
  39.  ****************************************************************************/
  40. //===========================================================================
  41. #pragma hdrstop
  42. #ifndef  _WIFI_SC_H_
  43. #include "wifi_sc.h"
  44. #endif
  45. // man
  46. #ifndef  _MAN_ACTIVE_H_
  47. #include "man_active.h"
  48. #endif
  49. // misc
  50. #ifndef  _FT_UTILS_H_
  51. #include "ft_utils.h"
  52. #endif
  53. // message
  54. #ifndef _META_LAB_MSG_H_
  55. #include "meta_lab_msg.h"
  56. #endif
  57. // WiFi
  58. #ifndef  _WIFI_EE_H_
  59. #include "wifi_ee.h"
  60. #endif
  61. #define INVALID_TAG  -1
  62. const AnsiString KEY_WORD[]=
  63. {
  64.     "#define",
  65.     "EEPROMR",
  66.     "EEPROMW",
  67.     "MCRR",
  68.     "MCRW",
  69.     "MCR16R",
  70.     "MCR16W",
  71.     "BBR",
  72.     "BBW",
  73.     "B",
  74.     "W",
  75.     "D",
  76.     "DELAY",
  77.     "CALL",
  78.     "RET",
  79.     "EXIT",
  80.     "LABEL",
  81.     "LOOP",
  82.     "LOAD",
  83.     "MADDB",
  84.     "MADDW",
  85.     "MADDD",
  86.     "MSUBB",
  87.     "MSUBW",
  88.     "MSUBD",
  89.     "MCMPB",
  90.     "MCMPD",
  91.     "MANDB",
  92.     "MANDW",
  93.     "MANDD",
  94.     "MORB",
  95.     "MORW",
  96.     "MORD",
  97.     "MXORB",
  98.     "MXORW",
  99.     "MXORD",
  100.     "MSHLB",
  101.     "MSHLW",
  102.     "MSHLD",
  103.     "MSHRB",
  104.     "MSHRW",
  105.     "MSHRD",
  106.     "JNE",
  107.     "JNB",
  108.     "JNA",
  109.     "JE",
  110.     "JB",
  111.     "JA",
  112.     "JMP",
  113.     "MPRB",
  114.     "MPRW",
  115.     "MPRD",
  116.     "MPWB",
  117.     "MPWW",
  118.     "MPWD",
  119.     "PRINT",
  120.     "MPRN2FILE",
  121.     "RAND",
  122.     "SET_START",
  123.     "SET_STOP",
  124.     "SET_CONT_TX",
  125.     "SET_LOCAL_FREQ",
  126.     "SET_CARRIER_SUPP",
  127.     "SET_PKT_TX",
  128.     "SET_PWR_MGT"
  129.     "SET_PKT_RX",
  130.     "SET_REG_DOMAIN",
  131.     "SET_DBM_TO_DAC",
  132.     "SET_END"
  133. };
  134. //==============================================================================
  135. static CWIFISC*  gs_wifi_sc_ptr;
  136. static bool g_bIsRunning;
  137. //==============================================================================
  138. static  void  REQ_Read_From_File( void )
  139. {   gs_wifi_sc_ptr->REQ_Read_From_File();
  140. }
  141. //------------------------------------------------------------------------------
  142. static void  REQ_TimeOut( void )
  143. {   gs_wifi_sc_ptr->REQ_TimeOut();
  144. }
  145. //------------------------------------------------------------------------------
  146. static void  REQ_Finish( void )
  147. {   gs_wifi_sc_ptr->REQ_Finish();
  148. }
  149. //===========================================================================
  150. CWIFISC::CWIFISC( void )
  151. {
  152.     g_bIsRunning = false;
  153.     ConfirmCallback = 0;
  154.     m_pvDefine = NULL;
  155.     m_pvBVar   = NULL;
  156.     m_pvWVar   = NULL;
  157.     m_pvDVar   = NULL;
  158.     m_pvLabel  = NULL;
  159.     m_pvCall   = NULL;
  160. }
  161. //---------------------------------------------------------------------------
  162. CWIFISC::~CWIFISC( void )
  163. {
  164.     g_bIsRunning = false;
  165.     ConfirmCallback = 0;
  166. }
  167. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  168. void CWIFISC::AllocateVector( void )
  169. {
  170.     if( NULL == m_pvDefine )
  171.         m_pvDefine = new vector<S_DEFINE>;
  172.     if( NULL == m_pvBVar )
  173.         m_pvBVar   = new vector<S_B_VAR>;
  174.     if( NULL == m_pvWVar )
  175.         m_pvWVar   = new vector<S_W_VAR>;
  176.     if( NULL == m_pvDVar )
  177.         m_pvDVar   = new vector<S_D_VAR>;
  178.     if( NULL == m_pvLabel )
  179.         m_pvLabel  = new vector<S_LABEL>;
  180.     if( NULL == m_pvCall )
  181.         m_pvCall = new vector<S_CALL>;
  182. }
  183. //---------------------------------------------------------------------------
  184. void CWIFISC::DeAllocateVector( void )
  185. {
  186.     if( NULL != m_pvDefine )
  187.     {
  188.         if( ! m_pvDefine->empty() )
  189.         {
  190.             m_pvDefine->erase( m_pvDefine->begin(), m_pvDefine->end() );
  191.         }
  192.         delete m_pvDefine;
  193.         m_pvDefine = NULL;
  194.     }
  195.     if( NULL != m_pvBVar )
  196.     {
  197.         if( ! m_pvBVar->empty() )
  198.         {
  199.             m_pvBVar->erase( m_pvBVar->begin(), m_pvBVar->end() );
  200.         }
  201.         delete m_pvBVar;
  202.         m_pvBVar = NULL;
  203.     }
  204.     if( NULL != m_pvWVar )
  205.     {
  206.         if( ! m_pvWVar->empty() )
  207.         {
  208.             m_pvWVar->erase( m_pvWVar->begin(), m_pvWVar->end() );
  209.         }
  210.         delete m_pvWVar;
  211.         m_pvWVar = NULL;
  212.     }
  213.     if( NULL != m_pvDVar )
  214.     {
  215.         if( ! m_pvDVar->empty() )
  216.         {
  217.             m_pvDVar->erase( m_pvDVar->begin(), m_pvDVar->end() );
  218.         }
  219.         delete m_pvDVar;
  220.         m_pvDVar = NULL;
  221.     }
  222.     if( NULL != m_pvLabel )
  223.     {
  224.         if( ! m_pvLabel->empty() )
  225.         {
  226.             m_pvLabel->erase( m_pvLabel->begin(), m_pvLabel->end() );
  227.         }
  228.         delete m_pvLabel;
  229.         m_pvLabel = NULL;
  230.     }
  231.     if( NULL != m_pvCall )
  232.     {
  233.         if( ! m_pvCall->empty() )
  234.         {
  235.             m_pvCall->erase( m_pvCall->begin(), m_pvCall->end() );
  236.         }
  237.         delete m_pvCall;
  238.         m_pvCall = NULL;
  239.     }    
  240. }
  241. //---------------------------------------------------------------------------
  242. void  CWIFISC::REQ_Finish( void )
  243. {
  244.    if( ! g_bIsRunning )  return;
  245.    Confirm( STATE_SC_OK );
  246. }
  247. //---------------------------------------------------------------------------
  248. void  CWIFISC::REQ_Stop( void )
  249. {
  250.     if( ! g_bIsRunning )  return;
  251.     Confirm( STATE_SC_STOP );
  252. }
  253. //---------------------------------------------------------------------------
  254. void  CWIFISC::REQ_TimeOut( void )
  255. {
  256.     if( ! g_bIsRunning )  return;
  257.     Confirm( STATE_SC_TIMEOUT );
  258. }
  259. //---------------------------------------------------------------------------
  260. void  CWIFISC::Confirm( int confirm_state )
  261. {
  262.    if( ! g_bIsRunning )  return;
  263.    g_bIsRunning = false;
  264.    DeAllocateVector();
  265.    CloseFile();
  266.    if(ConfirmCallback==0)  return;
  267.    m_iConfirmState = confirm_state;
  268.    ActiveMan->SetActiveFunction( ConfirmCallback );
  269. }
  270. //============================================================================
  271. void CWIFISC::REQ_Start( S_WIFISC  wifisc )
  272. {
  273.     gs_wifi_sc_ptr  = this;
  274.     g_bIsRunning    = true;
  275.     m_WiFiSc = wifisc;
  276.     AllocateVector();
  277.     ActiveMan->SetActiveFunction( ::REQ_Read_From_File );
  278. }
  279. //----------------------------------------------------------------------------
  280. bool  CWIFISC::OpenFile( void )
  281. {
  282.    // if( m_ifs.is_open() )
  283.    // {
  284.    //     CloseFile();
  285.    // }
  286.     m_pifs = new ifstream;
  287.     m_pifs->open( m_WiFiSc.filename.c_str() );
  288.     //m_ifs.seekg( ios::beg );
  289.         //m_ifs.setmode( filebuf::text ); // set to text mode
  290.     //m_pFBuf = m_ifs.rdbuf();
  291.     return true;
  292. }
  293. //---------------------------------------------------------------------------
  294. void CWIFISC::CloseFile( void )
  295. {
  296.     if( m_pifs->is_open() )
  297.     {   m_pifs->close();
  298.         delete m_pifs;
  299.     }
  300. }
  301. //----------------------------------------------------------------------------
  302. void  CWIFISC::REQ_Read_From_File( void )
  303. {
  304.     if( ! OpenFile() )
  305.     {
  306.         Confirm( STATE_SC_FAIL );
  307.         return;
  308.     }
  309.     if( ! ParseFile() )
  310.     {
  311.         Confirm( STATE_SC_FAIL );
  312.         return;
  313.     }
  314.     ActiveMan->SetActiveFunction( ::REQ_Finish );
  315. }
  316. //---------------------------------------------------------------------------
  317. bool CWIFISC::ParseFile( void )
  318. {
  319.     const int str_size = 256;
  320.     char str[str_size];
  321.     while( ! m_pifs->eof() )
  322.     {
  323.         m_pifs->getline( str, str_size, 'n' );
  324.         if( ! ParseCommandLine( str ) )
  325.         {
  326.             AnsiString as_str = str;
  327.             AddLogToStringList( as_str + " error" );
  328.             return false;
  329.         }    
  330.        // streampos pos = m_ifs.tellg();
  331.        // m_ifs.tellg();
  332.     }    
  333.     return true;
  334. }
  335. //---------------------------------------------------------------------------
  336. bool CWIFISC::ParseCommandLine( AnsiString as_cmd )
  337. {
  338.     as_cmd = as_cmd.UpperCase();
  339.     if( as_cmd.AnsiCompareIC("") == 0 )  return true;  // NULL
  340.     if( as_cmd.AnsiPos("//") != 0 )  return true; // note
  341.   //  int iLD_space = as_cmd.AnsiPos( " " );
  342.   //  int iLD_comma = as_cmd.AnsiPos( "," );
  343.   //  as_operator = as_cmd.SubString( 1, iLD_space-1 );
  344.     S_OP op;
  345.     op.tag = (E_WIFISCRIPT_TAG) INVALID_TAG;
  346.     AnsiString as_rem;
  347.     AnsiString as_operator;
  348.     int i;
  349.     char str[256];
  350.     bool keyword_found = false;
  351.     int iLD_space = as_cmd.LastDelimiter( " " );
  352.     int iLD_comma = as_cmd.AnsiPos( "," );
  353.     if( iLD_comma != 0 )
  354.     {
  355.         if( iLD_comma > iLD_space )
  356.         {
  357.             op.op2 = as_cmd.SubString( iLD_comma+1, as_cmd.Length()-iLD_comma );
  358.            // as_rem = as_cmd.SubString( 1, iLD_comma - 1 );
  359.            // iLD_space = as_rem.LastDelimiter( " " );
  360.            // op.op1 = as_rem.SubString( iLD_space+1, as_cmd.Length()-iLD_space );
  361.         }
  362.         else
  363.         {
  364.             op.op2 = as_cmd.SubString( iLD_space+1, as_cmd.Length()-iLD_space );
  365.             //as_rem = as_cmd.SubString( 1, iLD_comma-1 );
  366.             //iLD_space = as_rem.LastDelimiter( " " );
  367.             //op.op1 = as_rem.SubString( iLD_space+1, as_cmd.Length()-iLD_space );
  368.            // iLD_space = as_rem.LastDelimiter( " " );
  369.            // as_rem = as_rem.SubString( 1, iLD_space-1 );
  370.         }
  371.         as_rem = as_cmd.SubString( 1, iLD_comma-1 );
  372.         iLD_space = as_rem.LastDelimiter( " " );
  373.         op.op1 = as_rem.SubString( iLD_space+1, as_cmd.Length()-iLD_space );
  374.        // iLD_space = as_rem.LastDelimiter( " " );
  375.        // as_rem = as_rem.SubString( 1, iLD_space-1 );
  376.        // int j=0;
  377.        // for( i=0; i<as_rem.Length(); i++ )
  378.        // {
  379.        //    if( as_rem.SubString( i+1, 1 ).AnsiCompareIC(" ") != 0 )
  380.        //    {
  381.        //        strcpy( &str[j], as_rem.SubString( i+1, 1 ).c_str() );
  382.        //        j++;
  383.        //    }
  384.        // }
  385.        // str[j] = '';
  386.        // as_operator = (AnsiString) str;
  387.     }
  388.     else // no op2
  389.     {
  390.         if( as_cmd.AnsiPos("EXIT") != 0 )
  391.         {
  392.             op.op1 = "";
  393.         }
  394.         else if( as_cmd.AnsiPos(""") == 0 ) // no " "
  395.         {
  396.             op.op1 = as_cmd.SubString( iLD_space+1, as_cmd.Length() - iLD_comma );
  397.             as_rem = as_cmd;
  398.         }
  399.         else
  400.         {
  401.             int iLD_1stQuotes = as_cmd.AnsiPos(""");
  402.             int iLD_2ndQuotes = as_cmd.LastDelimiter(""");
  403.             op.op1 = as_cmd.SubString( iLD_1stQuotes+1, iLD_2ndQuotes - iLD_1stQuotes -1 );
  404.             as_rem = as_cmd.SubString( 1, iLD_1stQuotes - 1 );
  405.         }
  406.         op.op2 = "";
  407.     }
  408.     iLD_space = as_rem.LastDelimiter( " " );
  409.     if( iLD_space != 0 )
  410.     {
  411.         as_rem = as_rem.SubString( 1, iLD_space-1 );
  412.     }
  413.     else
  414.     {
  415.         as_rem = as_cmd;
  416.     }
  417.     int j=0;
  418.     for( i=0; i<as_rem.Length(); i++ )
  419.     {
  420.         if( as_rem.SubString( i+1, 1 ).AnsiCompareIC(" ") != 0 )
  421.         {
  422.             strcpy( &str[j], as_rem.SubString( i+1, 1 ).c_str() );
  423.             j++;
  424.         }
  425.     }
  426.     str[j] = '';
  427.     as_operator = (AnsiString) str;
  428.     for( int i=0; i<sizeof(KEY_WORD)/sizeof(KEY_WORD[0]); i++ )
  429.     {
  430.         if( as_operator.AnsiCompareIC( KEY_WORD[i] ) == 0 )
  431.         {
  432.             op.tag = ( E_WIFISCRIPT_TAG ) i;
  433.             keyword_found = true;
  434.             break;
  435.         }
  436.     }
  437.     if( keyword_found )
  438.     {
  439.         if( ! Interpret( op ) )  return false;
  440.     }
  441.     return keyword_found;
  442. }
  443. //---------------------------------------------------------------------------
  444. bool CWIFISC::Interpret( S_OP op )
  445. {
  446.     switch( op.tag )
  447.     {
  448.         case DEFINE_TAG:                // "DEFINE",
  449.         {
  450.             S_DEFINE define;
  451.             define.name  = op.op1;
  452.             define.value = op.op2.ToInt();
  453.             m_pvDefine->push_back( define );
  454.         }
  455.         break;
  456.         case EEPROMR_TAG:                // "EEPROMR",
  457.         {
  458.             S_WIFI_EEPROM  eeprom;
  459.             eeprom.eeprom[0].index = GetDefineValue(op.op1);
  460.             eeprom.count           = 1;
  461.             
  462.             META_RESULT  MetaResult =  META_WiFi_EEPROM_Read_r( m_META_HANDLE_Obj.Get_MainHandle(), 500, eeprom.eeprom, eeprom.count );
  463.             if(MetaResult!=META_SUCCESS)   return false;
  464.             WordValueOperate( op.op2, eeprom.eeprom[0].eeprom_data16, SET_OP );
  465.         }
  466.         break;
  467.         case EEPROMW_TAG:                  // "EEPROMW",
  468.         {
  469.             S_WIFI_EEPROM  eeprom;
  470.             eeprom.eeprom[0].index = GetDefineValue(op.op1);
  471.             eeprom.count           = 1;
  472.             WordValueOperate( op.op2, eeprom.eeprom[0].eeprom_data16, GET_OP );
  473.             META_RESULT  MetaResult = META_WiFi_EEPROM_Write_r( m_META_HANDLE_Obj.Get_MainHandle(), 500, eeprom.eeprom, eeprom.count );
  474.             if(MetaResult!=META_SUCCESS)   return false;
  475.         }
  476.         break;
  477.         case MCRR_TAG:                 // "MCRR",
  478.         {
  479.             S_WiFi_MCR mcr;
  480.             mcr.count = 1;
  481.             mcr.mac_reg32[0].index = GetDefineValue(op.op1);
  482.             META_RESULT MetaResult = META_WiFi_MACReg32Read_r( m_META_HANDLE_Obj.Get_MainHandle(), 500, mcr.mac_reg32, mcr.count );
  483.             if(MetaResult!=META_SUCCESS)   return false;
  484.             DWordValueOperate( op.op2, mcr.mac_reg32[0].mcr_data32, SET_OP );
  485.         }
  486.         break;
  487.         case MCRW_TAG:                 // "MCRW",
  488.         {
  489.             S_WiFi_MCR mcr;
  490.             mcr.count = 1;
  491.             mcr.mac_reg32[0].index = GetDefineValue(op.op1);
  492.             DWordValueOperate( op.op2, mcr.mac_reg32[0].mcr_data32, GET_OP );
  493.             META_RESULT  MetaResult = META_WiFi_MACReg32Write_r( m_META_HANDLE_Obj.Get_MainHandle(), 500, mcr.mac_reg32, mcr.count );
  494.             if(MetaResult!=META_SUCCESS)   return false;
  495.         }
  496.         break;
  497.         case MCR16R_TAG:               // "MCR16R",
  498.         {
  499.             S_WiFi_MCR16 mcr16;
  500.             mcr16.count = 1;
  501.             mcr16.mac_reg16[0].index = GetDefineValue(op.op1);
  502.             META_RESULT MetaResult = META_WiFi_MACReg16Read_r( m_META_HANDLE_Obj.Get_MainHandle(), 500, mcr16.mac_reg16, mcr16.count );
  503.             if(MetaResult!=META_SUCCESS)   return false;
  504.             WordValueOperate( op.op2, mcr16.mac_reg16[0].mcr_data16, SET_OP );
  505.         }
  506.         break;
  507.         case MCR16W_TAG:               // "MCR16W",
  508.         {
  509.             S_WiFi_MCR16 mcr16;
  510.             mcr16.count = 1;
  511.             mcr16.mac_reg16[0].index = GetDefineValue(op.op1);
  512.             WordValueOperate( op.op2, mcr16.mac_reg16[0].mcr_data16, GET_OP );
  513.             META_RESULT  MetaResult = META_WiFi_MACReg16Write_r( m_META_HANDLE_Obj.Get_MainHandle(), 500, mcr16.mac_reg16, mcr16.count );
  514.             if(MetaResult!=META_SUCCESS)   return false;
  515.         }
  516.         break;
  517.         case BBR_TAG:                  // "BBR",
  518.         {
  519.             S_WiFi_BBCR bbcr;
  520.             bbcr.count = 1;
  521.             bbcr.bb_reg8[0].index = (unsigned char) GetDefineValue(op.op1);
  522.             META_RESULT  MetaResult = META_WiFi_BBRegRead_r( m_META_HANDLE_Obj.Get_MainHandle(), 500, bbcr.bb_reg8, bbcr.count );
  523.             if(MetaResult!=META_SUCCESS)   return false;
  524.             ByteValueOperate( op.op2, bbcr.bb_reg8[0].bbcr_data8, SET_OP );
  525.         }
  526.         break;
  527.         case BBW_TAG:                  // "BBW",
  528.         {
  529.             S_WiFi_BBCR bbcr;
  530.             bbcr.count = 1;
  531.             bbcr.bb_reg8[0].index =  (unsigned char) GetDefineValue(op.op1);
  532.             ByteValueOperate( op.op2, bbcr.bb_reg8[0].bbcr_data8, GET_OP );
  533.             META_RESULT  MetaResult = META_WiFi_BBRegWrite_r( m_META_HANDLE_Obj.Get_MainHandle(),  500, bbcr.bb_reg8, bbcr.count );
  534.             if(MetaResult!=META_SUCCESS)   return false;
  535.         }
  536.         break;
  537.         case B_TAG:                    // "B",
  538.         {
  539.             S_B_VAR b_var;
  540.             b_var.name = op.op1;
  541.             b_var.value = op.op2.ToInt();
  542.             m_pvBVar->push_back( b_var );
  543.         }
  544.         break;
  545.         case W_TAG:                    // "W",
  546.         {
  547.             S_W_VAR w_var;
  548.             w_var.name = op.op1;
  549.             w_var.value = op.op2.ToInt();
  550.             m_pvWVar->push_back( w_var );
  551.         }
  552.         break;
  553.         case D_TAG:                    // "D",
  554.         {
  555.             S_D_VAR d_var;
  556.             d_var.name = op.op1;
  557.             d_var.value = op.op2.ToInt();
  558.             m_pvDVar->push_back( d_var );
  559.         }
  560.         break;
  561.         case DELAY_TAG:                // "DELAY",
  562.         {
  563.             unsigned int ms;
  564.             ms = GetDefineValue(op.op1);
  565.             Sleep( ms );
  566.         }
  567.         break;
  568.         case CALL_TAG:                 // "CALL",
  569.         {
  570.             S_CALL call;
  571.             call.pos = m_pifs->tellg();
  572.             m_pvCall->push_back( call );
  573.             vector<S_LABEL>:: iterator iter;
  574.             S_LABEL label;
  575.             for( iter = m_pvLabel->begin(); iter != m_pvLabel->end(); iter++ )
  576.             {
  577.                 label = *iter;
  578.                 if( op.op1.AnsiCompareIC(label.name) == 0 )
  579.                 {
  580.                     m_pifs->seekg( label.pos );
  581.                    // streampos pos = m_pifs->tellg();
  582.                     break;
  583.                 }
  584.             }
  585.         }
  586.         break;
  587.         case EXIT_TAG:                 // "EXIT",
  588.         {
  589.             ActiveMan->SetActiveFunction( ::REQ_Finish );
  590.         }
  591.         case RET_TAG:                  // "RET",
  592.         {
  593.         }
  594.         break;
  595.         case LABEL_TAG:                // "LABEL",
  596.         {
  597.             S_LABEL label;
  598.             label.name = op.op1;
  599.             label.pos = m_pifs->tellg();
  600.             m_pvLabel->push_back( label );
  601.         }
  602.         break;
  603.         case LOOP_TAG:                 // "LOOP",
  604.         {
  605.         }
  606.         break;
  607.         case LOAD_TAG:                 // "LOAD",
  608.         {
  609.         }
  610.         break;
  611.         case MADDB_TAG:                // "MADDB",
  612.         {
  613.             unsigned char value = (unsigned char) GetDefineValue( op.op2 );
  614.             ByteValueOperate( op.op1, value, ADD_OP );
  615.         }
  616.         break;
  617.         case MADDW_TAG:                // "MADDW",
  618.         {
  619.             unsigned short value = (unsigned short) GetDefineValue( op.op2 );
  620.             WordValueOperate( op.op1, value, ADD_OP );
  621.         }
  622.         break;
  623.         case MADDD_TAG:                // "MADDD",
  624.         {
  625.             unsigned int value = GetDefineValue( op.op2 );
  626.             DWordValueOperate( op.op1, value, ADD_OP );
  627.         }
  628.         break;
  629.         case MSUBB_TAG:                // "MSUBB",
  630.         {
  631.             unsigned char value = (unsigned char) GetDefineValue( op.op2 );
  632.             ByteValueOperate( op.op1, value, SUB_OP );
  633.         }
  634.         break;
  635.         case MSUBW_TAG:                // "MSUBW",
  636.         {
  637.             unsigned short value = (unsigned short) GetDefineValue( op.op2 );
  638.             WordValueOperate( op.op1, value, SUB_OP );
  639.         }
  640.         break;
  641.         case MSUBD_TAG:                // "MSUBD",
  642.         {
  643.             unsigned int value = GetDefineValue( op.op2 );
  644.             DWordValueOperate( op.op1, value, SUB_OP );
  645.         }
  646.         break;
  647.         case MCMPB_TAG:                // "MCMPB",
  648.         {
  649.         }
  650.         break;
  651.         case MCMPD_TAG:                // "MCMPD",
  652.         {
  653.         }
  654.         break;
  655.         case MANDB_TAG:                // "MANDB",
  656.         {
  657.             unsigned char value = (unsigned char) GetDefineValue( op.op2 );
  658.             ByteValueOperate( op.op1, value, AND_OP );
  659.         }
  660.         break;
  661.         case MANDW_TAG:                // "MANDW",
  662.         {
  663.             unsigned short value = (unsigned short) GetDefineValue( op.op2 );
  664.             WordValueOperate( op.op1, value, AND_OP );
  665.         }
  666.         break;
  667.         case MANDD_TAG:                // "MANDD",
  668.         {
  669.             unsigned int value = GetDefineValue( op.op2 );
  670.             DWordValueOperate( op.op1, value, AND_OP );
  671.         }
  672.         break;
  673.         case MORB_TAG:                 // "MORB",
  674.         {
  675.             unsigned char value = (unsigned char) GetDefineValue( op.op2 );
  676.             ByteValueOperate( op.op1, value, OR_OP );
  677.         }
  678.         break;
  679.         case MORW_TAG:                 // "MORW",
  680.         {
  681.             unsigned short value = (unsigned short) GetDefineValue( op.op2 );
  682.             WordValueOperate( op.op1, value, OR_OP );
  683.         }
  684.         break;
  685.         case MORD_TAG:                 // "MORD",
  686.         {
  687.             unsigned int value = GetDefineValue( op.op2 );
  688.             DWordValueOperate( op.op1, value, OR_OP );
  689.         }
  690.         break;
  691.         case MXORB_TAG:                // "MXORB",
  692.         {
  693.             unsigned char value = (unsigned char) GetDefineValue( op.op2 );
  694.             ByteValueOperate( op.op1, value, XOR_OP );
  695.         }
  696.         break;
  697.         case MXORW_TAG:                // "MXORW",
  698.         {
  699.             unsigned short value = (unsigned short) GetDefineValue( op.op2 );
  700.             WordValueOperate( op.op1, value, XOR_OP );
  701.         }
  702.         break;
  703.         case MXORD_TAG:                // "MXORD",
  704.         {
  705.             unsigned int value = GetDefineValue( op.op2 );
  706.             DWordValueOperate( op.op1, value, XOR_OP );
  707.         }
  708.         break;
  709.         case MSHLB_TAG:                // "MSHLB",
  710.         {
  711.             unsigned char value = (unsigned char) GetDefineValue( op.op2 );
  712.             ByteValueOperate( op.op1, value, SHL_OP );
  713.         }
  714.         break;
  715.         case MSHLW_TAG:                // "MSHLW",
  716.         {
  717.             unsigned short value = (unsigned short) GetDefineValue( op.op2 );
  718.             WordValueOperate( op.op1, value, SHL_OP );
  719.         }
  720.         break;
  721.         case MSHLD_TAG:                // "MSHLD",
  722.         {
  723.             unsigned int value = GetDefineValue( op.op2 );
  724.             DWordValueOperate( op.op1, value, SHL_OP );
  725.         }
  726.         break;
  727.         case MSHRB_TAG:                // "MSHRB",
  728.         {
  729.             unsigned char value = (unsigned char) GetDefineValue( op.op2 );
  730.             ByteValueOperate( op.op1, value, SHR_OP );
  731.         }
  732.         break;
  733.         case MSHRW_TAG:                // "MSHRW",
  734.         {
  735.             unsigned short value = (unsigned short) GetDefineValue( op.op2 );
  736.             WordValueOperate( op.op1, value, SHR_OP );
  737.         }
  738.         break;
  739.         case MSHRD_TAG:                // "MSHRD",
  740.         {
  741.             unsigned int value = GetDefineValue( op.op2 );
  742.             DWordValueOperate( op.op1, value, SHR_OP );
  743.         }
  744.         break;
  745.         case PRINT_TAG:                // "PRINT",
  746.         {
  747.             AddLogToStringList(op.op1);
  748.             PostMessage(
  749.                          m_WiFiSc.hPostMsgDestHandle,
  750.                          WM_ML_WIFI_PRINT_MSG,
  751.                          0,
  752.                          0
  753.                         );
  754.         }
  755.         break;
  756.         case JNE_TAG:                  // "JNE",
  757.         {
  758.         }
  759.         break;
  760.         case JNB_TAG:                  // "JNB",
  761.         {
  762.         }
  763.         break;
  764.         case JNA_TAG:                  // "JNA",
  765.         {
  766.         }
  767.         break;
  768.         case JE_TAG:                   // "JE",
  769.         {
  770.         }
  771.         break;
  772.         case JB_TAG:                   // "JB",
  773.         {
  774.         }
  775.         break;
  776.         case JA_TAG:                   // "JA",
  777.         {
  778.         }
  779.         break;
  780.         case JMP_TAG:                  // "JMP",
  781.         {
  782.         }
  783.         break;
  784.         case MPRB_TAG:                 // "MPRB",
  785.         {
  786.         }
  787.         break;
  788.         case MPRW_TAG:                 // "MPRW",
  789.         {
  790.         }
  791.         break;
  792.         case MPRD_TAG:                 // "MPRD",
  793.         {
  794.         }
  795.         break;
  796.         case MPWB_TAG:                 // "MPWB",
  797.         {
  798.         }
  799.         break;
  800.         case MPWW_TAG:                 // "MPWW",
  801.         {
  802.         }
  803.         break;
  804.         case MPWD_TAG:                 // "MPWD",
  805.         {
  806.         }
  807.         break;
  808.         case MPRN2FILE_TAG:            // "MPRN2FILE",
  809.         {
  810.         }
  811.         break;
  812.         case RAND_TAG:                 // "RAND",
  813.         {
  814.         }
  815.         break;
  816.         case SET_START_TAG:            // "SET_START",
  817.         {
  818.         }
  819.         break;
  820.         case SET_STOP_TAG:             // "SET_STOP",
  821.         {
  822.         }
  823.         break;
  824.         case SET_CONT_TX_TAG:          // "SET_CONT_TX",
  825.         {
  826.         }
  827.         break;
  828.         case SET_LOCAL_FREQ_TAG:       //  "SET_LOCAL_FREQ",
  829.         {
  830.         }
  831.         break;
  832.         case SET_CARRIER_SUPP_TAG:     // "SET_CARRIER_SUPP",
  833.         {
  834.         }
  835.         break;
  836.         case SET_PKT_TX_TAG:           // "SET_PKT_TX",
  837.         {
  838.         }
  839.         break;
  840.         case SET_PWR_MGT_TAG:          // "SET_PWR_MGT"
  841.         {
  842.         }
  843.         break;
  844.         case SET_PKT_RX_TAG:           // "SET_PKT_RX",
  845.         {
  846.         }
  847.         break;
  848.         case SET_REG_DOMAIN_TAG:       // "SET_REG_DOMAIN",
  849.         {
  850.         }
  851.         break;
  852.         case SET_DBM_TO_DAC_TAG:       // "SET_DBM_TO_DAC",
  853.         {
  854.         }
  855.         break;
  856.         case SET_END_TAG:              // "SET_END"
  857.         {
  858.         }
  859.         break;
  860.     }
  861.     return true;
  862. }
  863. //===========================================================================
  864. /////////////////////////////     Define handling     ///////////////////////
  865. //===========================================================================
  866. unsigned int CWIFISC::GetDefineValue( AnsiString str )
  867. {
  868.     unsigned int value;
  869.     unsigned int pos_mouse = str.AnsiPos("@");
  870.     if( 0 == pos_mouse ) // const
  871.     {
  872.         value = str.ToInt();
  873.     }
  874.     else  // alias
  875.     {
  876.         str = str.SubString( pos_mouse+1, str.Length() - pos_mouse );
  877.         vector<S_DEFINE>:: iterator iter;
  878.         S_DEFINE define;
  879.         for( iter = m_pvDefine->begin(); iter != m_pvDefine->end(); iter++ )
  880.         {
  881.             define = *iter;
  882.             if( define.name.AnsiCompareIC( str ) == 0 )
  883.             {
  884.                 value = iter->value;
  885.                 break;
  886.             }
  887.         }
  888.     }
  889.     return value;
  890. }
  891. //---------------------------------------------------------------------------
  892. //===========================================================================
  893. ////////////////////////////      BBCR read/wrtie     ///////////////////////
  894. //===========================================================================
  895. void CWIFISC::ByteValueOperate( AnsiString str, unsigned char &value, E_OPERATION op )
  896. {
  897.     vector<S_B_VAR>:: iterator iter;
  898.     S_B_VAR old_ub_var;
  899.     int iLD_AND = str.LastDelimiter( "&" );
  900.     if( 0 == iLD_AND && GET_OP == op ) // const
  901.     {
  902.         value = str.ToInt();
  903.         return;
  904.     }
  905.     // alias
  906.     str = str.SubString( iLD_AND+1, str.Length() - iLD_AND );
  907.     for( iter=m_pvBVar->begin(); iter!= m_pvBVar->end(); iter++ )
  908.     {
  909.         old_ub_var = *iter;
  910.         if( old_ub_var.name.AnsiCompareIC(str) == 0 )
  911.         {
  912.             switch( op )
  913.             {
  914.                 case GET_OP:
  915.                      value = iter->value;
  916.                 break;
  917.                 case SET_OP:
  918.                      iter->value = value;
  919.                 break;
  920.                 case ADD_OP:
  921.                      iter->value += value;
  922.                 break;
  923.                 case SUB_OP:
  924.                      iter->value -= value;
  925.                 break;
  926.                 case CMP_OP:
  927.                 break;
  928.                 case AND_OP:
  929.                      iter->value &= value;
  930.                 break;
  931.                 case OR_OP:
  932.                      iter->value |= value;
  933.                 break;
  934.                 case XOR_OP:
  935.                      iter->value ^= value;
  936.                 break;
  937.                 case SHL_OP:
  938.                      iter->value <<= value;
  939.                 break;
  940.                 case SHR_OP:
  941.                      iter->value >>= value;
  942.                 break;
  943.             }
  944.             break;
  945.         }
  946.     }
  947. }
  948. //===========================================================================
  949. ////////////////////////////      MCR32 read/wrtie     ////////////////////////
  950. //===========================================================================
  951. void CWIFISC::DWordValueOperate( AnsiString str, unsigned int &value, E_OPERATION op )
  952. {
  953.     vector<S_D_VAR>:: iterator iter;
  954.     S_D_VAR old_d_var;
  955.     int iLD_AND = str.LastDelimiter( "&" );
  956.     if( 0 == iLD_AND && GET_OP == op ) // const
  957.     {
  958.         value = str.ToInt();
  959.         return;
  960.     }
  961.     // alias
  962.     str = str.SubString( iLD_AND+1, str.Length() - iLD_AND );
  963.     for( iter=m_pvDVar->begin(); iter!= m_pvDVar->end(); iter++ )
  964.     {
  965.         old_d_var = *iter;
  966.         if( old_d_var.name.AnsiCompareIC(str) == 0 )
  967.         {
  968.             switch( op )
  969.             {
  970.                 case GET_OP:
  971.                      value = iter->value;
  972.                 break;
  973.                 case SET_OP:
  974.                      iter->value = value;
  975.                 break;
  976.                 case ADD_OP:
  977.                      iter->value += value;
  978.                 break;
  979.                 case SUB_OP:
  980.                      iter->value -= value;
  981.                 break;
  982.                 case CMP_OP:
  983.                 break;
  984.                 case AND_OP:
  985.                      iter->value &= value;
  986.                 break;
  987.                 case OR_OP:
  988.                      iter->value |= value;
  989.                 break;
  990.                 case XOR_OP:
  991.                      iter->value ^= value;
  992.                 break;
  993.                 case SHL_OP:
  994.                      iter->value <<= value;
  995.                 break;
  996.                 case SHR_OP:
  997.                      iter->value >>= value;
  998.                 break;
  999.             }
  1000.             break;
  1001.         }
  1002.     }
  1003. }
  1004. //===========================================================================
  1005. ////////////////////////////   Pseudo EEPROM, MCR16 read/write   ///////////////////
  1006. //===========================================================================
  1007. void CWIFISC::WordValueOperate( AnsiString str, unsigned short &value, E_OPERATION op )
  1008. {
  1009.     vector<S_W_VAR>:: iterator iter;
  1010.     S_W_VAR old_w_var;
  1011.     int iLD_AND = str.LastDelimiter( "&" );
  1012.     if( 0 == iLD_AND && GET_OP == op ) // const
  1013.     {
  1014.         value = str.ToInt();
  1015.         return;
  1016.     }
  1017.     // alias
  1018.     str = str.SubString( iLD_AND+1, str.Length() - iLD_AND );
  1019.     
  1020.     for( iter=m_pvWVar->begin(); iter!= m_pvWVar->end(); iter++ )
  1021.     {
  1022.         old_w_var = *iter;
  1023.         if( old_w_var.name.AnsiCompareIC(str) == 0 )
  1024.         {
  1025.             switch( op )
  1026.             {
  1027.                 case GET_OP:
  1028.                      value = iter->value;
  1029.                 break;
  1030.                 case SET_OP:
  1031.                      iter->value = value;
  1032.                 break;
  1033.                 case ADD_OP:
  1034.                      iter->value += value;
  1035.                 break;
  1036.                 case SUB_OP:
  1037.                      iter->value -= value;
  1038.                 break;
  1039.                 case CMP_OP:
  1040.                 break;
  1041.                 case AND_OP:
  1042.                      iter->value &= value;
  1043.                 break;
  1044.                 case OR_OP:
  1045.                      iter->value |= value;
  1046.                 break;
  1047.                 case XOR_OP:
  1048.                      iter->value ^= value;
  1049.                 break;
  1050.                 case SHL_OP:
  1051.                      iter->value <<= value;
  1052.                 break;
  1053.                 case SHR_OP:
  1054.                      iter->value >>= value;
  1055.                 break;
  1056.             }
  1057.             break;
  1058.         }
  1059.     }
  1060. }
  1061. //===========================================================================
  1062. ////////////////////////////   Log  information   ////////////////////////
  1063. //===========================================================================
  1064. void  CWIFISC::AddLogToStringList( AnsiString as_log )
  1065. {
  1066.     m_WiFiSc.log->Add( as_log );
  1067. }
  1068. //===========================================================================
  1069. ////////////////////////////   Global  information   ////////////////////////
  1070. //===========================================================================
  1071. int   CWIFISC::Get_ConfirmState( void )
  1072. {
  1073.     return  m_iConfirmState;
  1074. }