form_wifieeprom.cpp

来自「MTK 手机软件开发 META 源代码,开发环境: C++ Builder」· C++ 代码 · 共 825 行 · 第 1/2 页

CPP
825
字号
}
//---------------------------------------------------------------------------

void __fastcall TfrmWiFiEEPROM::edtSNCheck(TObject *Sender)
{
    AnsiString  text;
    unsigned int  uidata;
    TEdit *edit = (TEdit*)Sender;
    char  hint[] = " value shall be 0~0xFFFFFFFF ";

    text = edit->Text;

    if( 0 == btnWGI->Tag ) // Dec
    {
        if( !IsValidDecWiFiSN( text, uidata ) )
        {
            ShowHintLabel( edit, hint );
            edit->SetFocus();
            return;
        }
    }
    else
    {
        if( !IsValidHexWiFiSN( text, uidata ) )
        {
            ShowHintLabel( edit, hint );
            edit->SetFocus();
            return;
        }
    }

    m_sEEGeneral.uiSN = uidata;
}
//---------------------------------------------------------------------------



void __fastcall TfrmWiFiEEPROM::edtMACAddrCheck(TObject *Sender)
{
    AnsiString  text;
    unsigned char  mac_addr_char;
    TEdit *edit = (TEdit*)Sender;
    char  hint[] = " value shall be 0x00~0xFF ";

    text = edit->Text;
    

    if( 0 == btnWGI->Tag ) // Dec
    {
        if( !IsValidDecWiFiMACAddress( text, mac_addr_char ) )
        {
            ShowHintLabel( edit, hint );
            edit->SetFocus();
            return;
        }
    }
    else
    {
        if( !IsValidHexWiFiMACAddress( text, mac_addr_char ) )
        {
            ShowHintLabel( edit, hint );
            edit->SetFocus();
            return;
        }
    }

    m_sEEGeneral.sMACAddr.mac_addr[edit->Tag] = mac_addr_char;
}

//---------------------------------------------------------------------------
void __fastcall TfrmWiFiEEPROM::btnUploadFromEEPROMClick(TObject *Sender)
{

    m_sEE.count          = WIFI_EE_LEN_BB_CHIP_ID   +
                         WIFI_EE_LEN_RF_CHIP_ID   +
                         WIFI_EE_LEN_SN           +
                         WIFI_EE_LEN_MAC_ADDR     +
                         WIFI_EE_LEN_RESERVED0    +
                         WIFI_EE_LEN_TX_IQ        +
                         WIFI_EE_LEN_RESERVED1    +
                         WIFI_EE_LEN_RESERVED2    +
                         WIFI_EE_LEN_CHECKSUM     +
                         WIFI_EE_LEN_TXP_2_4_G;
                         
    for (unsigned int i=0; i<m_sEE.count; i++ )
    {
        m_sEE.eeprom[i].index = 2*i;
    }

    m_WIFI_EE_Obj.ConfirmCallback = ::ConfirmCallback_ReadEE;
    m_WIFI_EE_Obj.REQ_Read_From_EE_Start( m_sEE );

    sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Read EEPROM progressing";

}

//---------------------------------------------------------------------------
void TfrmWiFiEEPROM::ConfirmCallback_ReadEE( void )
{

    E_METAAPP_RESULT_T state = m_WIFI_EE_Obj.Get_ConfirmState();

    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            m_sEE = m_WIFI_EE_Obj.Get_EE();
            ReDrawFields( PNLIDX_WGI | PNLIDX_TXDC | PNLIDX_2400MTXP );
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Read EEPROM successfully";
        }
        break;

        case METAAPP_FAIL:
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Read EEPROM fail";
            Application->MessageBox( "Execution Fail : Read EEPROM", "FAIL", MB_OK );
        }
        break;

        case METAAPP_TIMEOUT:
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Read EEPROM timeout";
            Application->MessageBox( "Execution Timeout : Read EEPROM", "TIMEOUT", MB_OK );
        }
        break;

        case METAAPP_STOP:
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Read EEPROM stop";
        }    
        break;
    }
    CurrentPageReset();

}

//---------------------------------------------------------------------------
void __fastcall TfrmWiFiEEPROM::btnDownloadToEEPROMClick(TObject *Sender)
{

   // m_sEE.eeprom_index = WIFI_EE_ADDR_BB_CHIP_ID;
    m_sEE.count          = WIFI_EE_LEN_BB_CHIP_ID   +
                         WIFI_EE_LEN_RF_CHIP_ID   +
                         WIFI_EE_LEN_SN           +
                         WIFI_EE_LEN_MAC_ADDR     +
                         WIFI_EE_LEN_RESERVED0    +
                         WIFI_EE_LEN_TX_IQ        +
                         WIFI_EE_LEN_RESERVED1    +
                         WIFI_EE_LEN_RESERVED2    +
                         WIFI_EE_LEN_CHECKSUM     +
                         WIFI_EE_LEN_TXP_2_4_G;





    for (unsigned int i=0; i<m_sEE.count; i++)
    {
        m_sEE.eeprom[i].index = 2*i;
    }

    m_sEEGeneral.ucChecksum = m_WIFI_EE_Obj.Calculate_Checksum( m_sEEGeneral );
    Compose_EEPROM_Data();

    m_WIFI_EE_Obj.ConfirmCallback = ::ConfirmCallback_WriteEE;
    m_WIFI_EE_Obj.REQ_Write_To_EE_Start( m_sEE );

    sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Write EEPROM progressing";

}

//---------------------------------------------------------------------------
void TfrmWiFiEEPROM::ConfirmCallback_WriteEE( void )
{

    E_METAAPP_RESULT_T state = m_WIFI_EE_Obj.Get_ConfirmState();

    switch( state )
    {
        case METAAPP_SUCCESS:
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Write EEPROM successfully";
        }
        break;

        case METAAPP_FAIL:
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Write EEPROM fail";
            Application->MessageBox( "Execution Timeout : Write EEPROM", "FAIL", MB_OK );

        }
        break;

        case METAAPP_TIMEOUT:
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Write EEPROM timeout";
            Application->MessageBox( "Execution Timeout : Write EEPROM", "TIMEOUT", MB_OK );

        }
        break;

        case METAAPP_STOP:
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString)"  Write EEPROM stop";
        }    
        break;
    }
    CurrentPageReset();

}

//---------------------------------------------------------------------------

void __fastcall TfrmWiFiEEPROM::btnLoadFromFileClick(TObject *Sender)
{
    char str[512];
    bool ok;
    float  fdata;

    ok = OpenDialog->Execute();
    if( !ok )
    {
        sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Load WiFi EEPROM setting from file fail";
        return;
    }
    strcpy( str, OpenDialog->FileName.c_str() );

    // General information
    //if( cbWGIHeader->Checked )
    {
        ok = m_WIFI_EE_Obj.REQ_Read_General_Info_From_File( str );
        if( !ok )
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Load WiFi EEPROM setting from file fail";
            Application->MessageBox( "Execution Failure : Load WiFi EEPROM setting from file", "FAILURE", MB_OK );
            return;
        }
        m_sEEGeneral = m_WIFI_EE_Obj.Get_EEGeneral();
    }

    ReDrawFields( PNLIDX_WGI | PNLIDX_TXDC | PNLIDX_2400MTXP );
    sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Load WiFi TX setting from file successfully";
}
//---------------------------------------------------------------------------
void __fastcall TfrmWiFiEEPROM::btnSaveToFileClick(TObject *Sender)
{
   char str[512];
    bool ok;

    ok = SaveDialog->Execute();
    if( !ok )
    {
        sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Save WiFi EEPROM setting to file fail";
        return;
    }

    if( ! CheckFields() )
    {
        sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Save WiFi EEPROM setting to file fail";
        return;
    }

    strcpy( str, SaveDialog->FileName.c_str() );

    /// General information
   // if( cbWGIHeader->Checked )
    {
        m_WIFI_EE_Obj.Set_EEGeneral( m_sEEGeneral );
        ok = m_WIFI_EE_Obj.REQ_Write_General_Info_To_File( str );
        if( !ok )
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Save WiFi EEPROM setting to file fail";
            Application->MessageBox( "Execution Failure : Save WiFi EEPROM setting to file", "FAILURE", MB_OK );
            return;
        }
    }

    // TX DC offset
   // if( cbTXDCHeader->Checked )
    {
        m_WIFI_EE_Obj.Set_TxDcOffset( m_sEEGeneral.sTxDcOffset );
        ok = m_WIFI_EE_Obj.REQ_Write_TX_DC_Offset_To_File( str );
        if( !ok )
        {
            sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Save WiFi EEPROM setting to file fail";
            Application->MessageBox( "Execution Failure : Save WiFi EEPROM setting to file", "FAILURE", MB_OK );
            return;
        }
    }

    // 2.4G TX power table
   // if( cb2400MTXPHeader->Checked )
    {
        if( m_sWiFiCap.support_802_11g || m_sWiFiCap.support_802_11b )
        {
            m_WIFI_EE_Obj.Set_TxChannelDac2400M( m_sTxPwr2400M );
            ok = m_WIFI_EE_Obj.REQ_Write_TxPower2400M_To_File( str );
            if( !ok )
            {
                sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Save WiFi EEPROM setting to file fail";
                Application->MessageBox( "Execution Failure : Save WiFi EEPROM setting to file", "FAILURE", MB_OK );
                return;
            }
        }
    }



    sbWiFiEEPROM->Panels->Items[0]->Text = (AnsiString) "  Save WiFi EEPROM setting to file successfully";
}

//---------------------------------------------------------------------------
void __fastcall TfrmWiFiEEPROM::HintTimerTimer(TObject *Sender)
{
    HintTimer->Enabled = false;
    lblHint->Visible = false;
}


//---------------------------------------------------------------------------
void TfrmWiFiEEPROM::Compose_EEPROM_Data( void )
{
    // BB chip ID
    m_sEE.eeprom[WIFI_EE_ADDR_BB_CHIP_ID].eeprom_data16   = m_sEEGeneral.usBBChipID;
    // RF chip ID
    m_sEE.eeprom[WIFI_EE_ADDR_RF_CHIP_ID].eeprom_data16   = m_sEEGeneral.usRFChipID;
    // SN
    m_sEE.eeprom[WIFI_EE_ADDR_SN].eeprom_data16           = m_sEEGeneral.uiSN       & 0x0000FFFF;
    m_sEE.eeprom[WIFI_EE_ADDR_SN+1].eeprom_data16         = m_sEEGeneral.uiSN       & 0xFFFF0000 >> 16;
    // MAC address
    for( int i=0; i< sizeof(m_sEEGeneral.sMACAddr.mac_addr)/sizeof(m_sEEGeneral.sMACAddr.mac_addr[0]); i=i+2 )
    {
        m_sEE.eeprom[WIFI_EE_ADDR_MAC_ADDR+i/2].eeprom_data16     = m_sEEGeneral.sMACAddr.mac_addr[i] | (m_sEEGeneral.sMACAddr.mac_addr[i+1]<<8);
    }

    // reserved 0
    m_sEE.eeprom[WIFI_EE_ADDR_RESERVED0].eeprom_data16   = m_sEEGeneral.usReserved0;

    // TX DC offset
    m_sEE.eeprom[WIFI_EE_ADDR_TX_IQ].eeprom_data16       = m_sEEGeneral.sTxDcOffset.q_ch_offset;
    m_sEE.eeprom[WIFI_EE_ADDR_TX_IQ].eeprom_data16       = (m_sEE.eeprom[WIFI_EE_ADDR_TX_IQ].eeprom_data16 << 8) |
                                                            m_sEEGeneral.sTxDcOffset.i_ch_offset;

    // reserved 1
    m_sEE.eeprom[WIFI_EE_ADDR_RESERVED1].eeprom_data16   = m_sEEGeneral.usReserved1;

    // checksum
    m_sEE.eeprom[WIFI_EE_ADDR_CHECKSUM].eeprom_data16    = m_sEEGeneral.ucChecksum;
    m_sEE.eeprom[WIFI_EE_ADDR_CHECKSUM].eeprom_data16    = (m_sEE.eeprom[WIFI_EE_ADDR_CHECKSUM].eeprom_data16 << 8) |
                                                           m_sEEGeneral.ucReserved2;
    // reserved 3
    m_sEE.eeprom[WIFI_EE_ADDR_RESERVED3].eeprom_data16   = m_usReserved3;

}

//---------------------------------------------------------------------------
void TfrmWiFiEEPROM::DeCompose_EEPROM_Data( void )
{

    int i, j;

    // WiFi general information
    // BB chip ID
    m_sEEGeneral.usBBChipID = m_sEE.eeprom[WIFI_EE_ADDR_BB_CHIP_ID].eeprom_data16;

    // RF chip ID
    m_sEEGeneral.usRFChipID = m_sEE.eeprom[WIFI_EE_ADDR_RF_CHIP_ID].eeprom_data16;

    // SN
    m_sEEGeneral.uiSN       = (m_sEE.eeprom[WIFI_EE_ADDR_SN+1].eeprom_data16<<16)  |
                               m_sEE.eeprom[WIFI_EE_ADDR_SN].eeprom_data16;

    // MAC address
    for( i=0; i< sizeof(m_sEEGeneral.sMACAddr.mac_addr)/sizeof(m_sEEGeneral.sMACAddr.mac_addr[0]); i++ )
    {
        if( 0 == i % 2 )
        {
            m_sEEGeneral.sMACAddr.mac_addr[i] = m_sEE.eeprom[WIFI_EE_ADDR_MAC_ADDR+i/2].eeprom_data16 & 0x00FF;
        }
        else
        {   m_sEEGeneral.sMACAddr.mac_addr[i] = (m_sEE.eeprom[WIFI_EE_ADDR_MAC_ADDR+i/2].eeprom_data16 & 0xFF00) >> 8;
        }
    }

    // reserve 0
    m_sEEGeneral.usReserved0 = m_sEE.eeprom[WIFI_EE_ADDR_RESERVED0].eeprom_data16;

    // TX IQ offset
    m_sEEGeneral.sTxDcOffset.q_ch_offset = (m_sEE.eeprom[WIFI_EE_ADDR_TX_IQ].eeprom_data16&0xFF00)>>8;
    m_sEEGeneral.sTxDcOffset.i_ch_offset = m_sEE.eeprom[WIFI_EE_ADDR_TX_IQ].eeprom_data16&0x00FF;

    // reserved 1
    m_sEEGeneral.usReserved1 = m_sEE.eeprom[WIFI_EE_ADDR_RESERVED1].eeprom_data16;

    // reserved 2
    m_sEEGeneral.ucReserved2    = m_sEE.eeprom[WIFI_EE_ADDR_CHECKSUM].eeprom_data16 & 0xFF00;

    // checksum
    m_sEEGeneral.ucChecksum = (m_sEE.eeprom[WIFI_EE_ADDR_CHECKSUM].eeprom_data16>>8) & 0x00FF;

    // reserved 3
    m_usReserved3 = m_sEE.eeprom[WIFI_EE_ADDR_RESERVED3].eeprom_data16;

    // 2.4G TX power table
    for( i=0; i<NUM_TX_POWER_2400M_CH; i++ )
    {
        m_sTxPwr2400M.CCKTxPWR[i] = m_sEE.eeprom[i].eeprom_data16;
    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?