📄 nvrambuild.cpp
字号:
// NVRAMBuild.cpp : implementation file
//
#include "stdafx.h"
#include "AMCCPCI3Win.h"
#include "..\samplib\samplib.h"
#include "AMCCPCI3WinDlg.h"
#include "NVRAMBuild.h"
#include "StdPCIParams.h"
#include "SaveRestore.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static char sztemp[4096];
static char sztemp1[4096];
static char sztemp2[256];
static char sztemp3[256];
static char gheading[128];
static int NVRAM_Size[7] = {
256, 512, 128, 256, 512, 1024, 2048
};
/////////////////////////////////////////////////////////////////////////////
// CNVRAMBuild dialog
CNVRAMBuild::CNVRAMBuild(CWnd* pParent /*=NULL*/)
: CDialog(CNVRAMBuild::IDD, pParent)
{
//{{AFX_DATA_INIT(CNVRAMBuild)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
pMain = NULL;
}
void CNVRAMBuild::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNVRAMBuild)
// NOTE: the ClassWizard will add DDX and DDV calls here
DDX_Control(pDX, IDC_GRID1, m_GridControl);
DDX_Control(pDX, IDC_EDIT_CURRENT_FILE_NAME, m_Edit_CURRENT_FILE_NAME );
DDX_Control(pDX, IDC_EDIT_CURRENT_FILE_NAME_WRITE, m_Edit_CURRENT_FILE_NAME_WRITE );
DDX_Control(pDX, IDC_COMBO_FILE_NAMES, m_Combo_FILE_NAMES );
DDX_Control(pDX, IDC_HEX, m_Radio_HEX );
DDX_Control(pDX, IDC_DECIMAL, m_Radio_DECIMAL );
DDX_Control(pDX, IDC_BINARY, m_Radio_BINARY );
DDX_Control(pDX, IDC_COMBO_NVRAM_TYPE, m_Combo_NVRAM_TYPE );
DDX_Control(pDX, IDC_CHECK_READ_INTEL_HEX, m_Check_READ_INTEL_HEX );
DDX_Control(pDX, IDC_CHECK_READ_MERGE, m_Check_READ_MERGE );
DDX_Control(pDX, IDC_CHECK_WRITE_INTEL_HEX, m_Check_WRITE_INTEL_HEX );
DDX_Control(pDX, IDC_EDIT_ADDRESS, m_Edit_ADDRESS );
DDX_Control(pDX, IDC_EDIT_DATA, m_Edit_DATA );
DDX_Control(pDX, IDC_STATIC_ADDR_BASE, m_Static_ADDR_BASE );
DDX_Control(pDX, IDC_STATIC_DATA_BASE, m_Static_DATA_BASE );
DDX_Control(pDX, IDC_BUTTON_PCI_PARAMETERS, m_Button_PCI_PARAMETERS );
DDX_Control(pDX, IDC_BUTTON_UPDATE_DATA, m_Button_UPDATE_DATA );
DDX_Control(pDX, IDC_BUTTON_ZERO_DATA, m_Button_ZERO_DATA );
DDX_Control(pDX, IDC_BUTTON_WRITE_TO_NVRAM, m_Button_WRITE_TO_NVRAM );
DDX_Control(pDX, IDC_BUTTON_READ_FROM_NVRAM, m_Button_READ_FROM_NVRAM );
DDX_Control(pDX, IDC_BUTTON_CHECKSUM_GRID_DATA, m_Button_CHECKSUM_GRID_DATA );
DDX_Control(pDX, IDC_BUTTON_WRITE_NVRAM, m_Button_WRITE_NVRAM );
DDX_Control(pDX, IDC_BUTTON_REREAD, m_Button_REREAD );
DDX_Control(pDX, IDC_CHECK_ADDR_AS_BASE, m_Check_ADDR_AS_BASE );
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNVRAMBuild, CDialog)
//{{AFX_MSG_MAP(CNVRAMBuild)
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
ON_BN_CLICKED(IDC_HEX, OnHex)
ON_BN_CLICKED(IDC_DECIMAL, OnDecimal)
ON_BN_CLICKED(IDC_BINARY, OnBinary)
ON_WM_HSCROLL()
ON_WM_VSCROLL()
ON_BN_CLICKED(IDC_BUTTON_REREAD, OnButtonReread)
ON_BN_CLICKED(IDC_BUTTON_ZERO_DATA, OnButtonZeroData)
ON_BN_CLICKED(IDC_BUTTON_UPDATE_DATA, OnButtonUpdateData)
ON_BN_CLICKED(IDC_BUTTON_WRITE_NVRAM, OnButtonWriteNvram)
ON_BN_CLICKED(IDC_BUTTON_LOAD_FILE, OnButtonLoadFile)
ON_BN_CLICKED(IDC_BUTTON_WRITE_FILE, OnButtonWriteFile)
ON_BN_CLICKED(IDC_BUTTON_BROWSE_WRITE, OnButtonBrowseWrite)
ON_BN_CLICKED(IDC_BUTTON_WRITE_TO_NVRAM, OnButtonWriteToNvram)
ON_BN_CLICKED(IDC_BUTTON_READ_FROM_NVRAM, OnButtonReadFromNvram)
ON_BN_CLICKED(IDC_BUTTON_CHECKSUM_GRID_DATA, OnButtonChecksumGridData)
ON_BN_CLICKED(IDC_BUTTON_PCI_PARAMETERS, OnButtonPciParameters)
ON_BN_CLICKED(IDC_BUTTON_PLUS_ONE, OnButtonPlusOne)
ON_BN_CLICKED(IDC_BUTTON_MINUS_ONE, OnButtonMinusOne)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CNVRAMBuild::Initialize(CAMCCPCI3WinDlg *caller, int board )
{
int i;
pMain = caller;
cur_board = board;
strcpy( (char *)&sztemp, APP_NAME );
strcat( (char *)&sztemp, " - NVRAM Tool, " );
sprintf( (char *)&sztemp2,"Board %d", cur_board );
strcat( (char *)&sztemp, (char *)&sztemp2 );
SetWindowText( (char *)&sztemp );
strcpy( gheading, sztemp );
for( i=0 ; i < MAX_DATA_BUFFER ; i++ )
data_bytes[i] = i;
m_Combo_FILE_NAMES.ResetContent();
grid_overhead_flag = FALSE;
pGridMethods = NULL;
pStdPCIParams = NULL;
data_dirty = FALSE;
num_data_bytes = 0;
offset_data_bytes = 0;
file_byte_size = 0;
m_Combo_NVRAM_TYPE.ResetContent();
m_Combo_NVRAM_TYPE.AddString( "Parallel AT29C256 (256 Bytes)" );
m_Combo_NVRAM_TYPE.AddString( "Parallel AT29C512 (512 Bytes)" );
m_Combo_NVRAM_TYPE.AddString( "Serial 24C01 (128 Bytes)" );
m_Combo_NVRAM_TYPE.AddString( "Serial 24C02 (256 Bytes)" );
m_Combo_NVRAM_TYPE.AddString( "Serial 24C04 (512 Bytes)" );
m_Combo_NVRAM_TYPE.AddString( "Serial 24C08 (1024 Bytes)" );
m_Combo_NVRAM_TYPE.AddString( "Serial 24C16 (2048 Bytes)" );
m_Combo_NVRAM_TYPE.SetCurSel( 6 );
m_Check_READ_INTEL_HEX.SetCheck( TRUE );
m_Check_READ_MERGE.SetCheck( FALSE );
m_Check_WRITE_INTEL_HEX.SetCheck( TRUE );
ReadData();
num_base = 16;
old_num_base = 16;
OnHex();
// SetupDataGrid();
// DrawDataValues();
}
void CNVRAMBuild::TestError( UINT32 code )
{
if( code != e_Err_NoError ) {
pMain->TestErrorString( code, sztemp, sztemp2 );
MessageBox( sztemp, sztemp2, MB_OK | MB_ICONSTOP );
}
}
void CNVRAMBuild::DisableAll(void)
{
if( pStdPCIParams == NULL )
m_Button_PCI_PARAMETERS.EnableWindow( FALSE );
m_Button_UPDATE_DATA.EnableWindow( FALSE );
m_Button_ZERO_DATA.EnableWindow( FALSE );
m_Button_WRITE_TO_NVRAM.EnableWindow( FALSE );
m_Button_READ_FROM_NVRAM.EnableWindow( FALSE );
m_Button_CHECKSUM_GRID_DATA.EnableWindow( FALSE );
m_Button_WRITE_NVRAM.EnableWindow( FALSE );
m_Button_REREAD.EnableWindow( FALSE );
}
void CNVRAMBuild::EnableAll(void)
{
if( pStdPCIParams == NULL )
m_Button_PCI_PARAMETERS.EnableWindow( TRUE );
m_Button_UPDATE_DATA.EnableWindow( TRUE );
m_Button_ZERO_DATA.EnableWindow( TRUE );
m_Button_WRITE_TO_NVRAM.EnableWindow( TRUE );
m_Button_READ_FROM_NVRAM.EnableWindow( TRUE );
m_Button_CHECKSUM_GRID_DATA.EnableWindow( TRUE );
m_Button_WRITE_NVRAM.EnableWindow( TRUE );
m_Button_REREAD.EnableWindow( TRUE );
}
void CNVRAMBuild::ReadData(void)
{
int i;
UINT32 ret,rdata;
i = m_Combo_NVRAM_TYPE.GetCurSel();
num_data_bytes = NVRAM_Size[i];
if( cur_board < 0 ) {
for( i=0 ; i < num_data_bytes ; i++ )
data_bytes[i] = 0;
return;
}
for( i=0 ; i < num_data_bytes ; i++ ) {
ret = Sample_ReadNVRAM( cur_board, (UINT32) i, (UINT32 *)&rdata );
TestError( ret );
if( ret == e_Err_NoError ) {
data_bytes[i] = rdata;
}
}
}
void CNVRAMBuild::WriteData(void)
{
int i;
UINT32 ret,wdata;
i = m_Combo_NVRAM_TYPE.GetCurSel();
num_data_bytes = NVRAM_Size[i];
if( cur_board < 0 )
return;
for( i=0 ; i < num_data_bytes ; i++ ) {
wdata = wdata_bytes[i];
ret = Sample_WriteNVRAM( cur_board, (UINT32) i, (UINT32 *)&wdata );
TestError( ret );
}
}
bool CNVRAMBuild::CompareData(void)
{
int i;
bool eflag;
i = m_Combo_NVRAM_TYPE.GetCurSel();
num_data_bytes = NVRAM_Size[i];
if( cur_board < 0 )
return FALSE;
eflag = FALSE;
for( i=0 ; i < num_data_bytes ; i++ ) {
if( data_bytes[i] != wdata_bytes[i] ) {
sprintf( sztemp2,"Compare of Write/Read Data Failed!\n\nAddr: %04x Was: %02x S/B %02x",
i, data_bytes[i], wdata_bytes[i] );
MessageBox( sztemp2,gheading,MB_OK | MB_ICONSTOP );
eflag = TRUE;
break;
}
}
if( !eflag )
MessageBox( "NVRAM Data Write OK!",gheading,MB_OK | MB_ICONEXCLAMATION );
else
MessageBox( "NVRAM Data Write Failed!",gheading,MB_OK | MB_ICONSTOP );
return eflag;
}
void CNVRAMBuild::ZeroData(void)
{
// TODO: Add your control notification handler code here
int i;
i = m_Combo_NVRAM_TYPE.GetCurSel();
num_data_bytes = NVRAM_Size[i];
for( i=0 ; i < num_data_bytes ; i++ ) {
data_bytes[i] = 0;
}
}
void CNVRAMBuild::DisplayData(void)
{
DrawDataValues();
}
void CNVRAMBuild::AddDisplayString( char *stri, char *stro, int size_stro )
{
int cnt;
cnt = strlen( stri ) + strlen( stro );
if( cnt <= (size_stro-2) )
strcat( stro, stri );
}
void CNVRAMBuild::SetupDataGrid( void )
{
int i,addr; // Counter variable
char szTemp[256];
grid_overhead_flag = TRUE;
if( pGridMethods == NULL )
pGridMethods = new CGridMethods();
// Calculate the rows and columns
switch( num_base ) {
case 2:
num_cols = 8;
col_width = 1100;
break;
case 10:
num_cols = 10;
col_width = 525;
break;
default:
case 16:
num_cols = 16;
col_width = 400;
break;
}
num_data_rows = num_data_bytes / num_cols;
if( (num_data_rows * num_cols) != num_data_bytes )
num_data_rows++;
num_rows = num_data_rows;
if( num_rows < MIN_DATA_ROWS )
num_rows = MIN_DATA_ROWS;
//////////////////////////////////////
// Define the columns and rows
//////////////////////////////////////
pGridMethods->bInitializeGrid(&m_GridControl, num_rows+1, num_cols+2, 1, 1 );
//////////////////////////////////////
// Display upper,left box
//////////////////////////////////////
switch( num_base ) {
case 2:
//pGridMethods->bSetColumnHeadingString(&m_GridControl, 0, "Addr (Bin)");
pGridMethods->bSetColumnHeadingString(&m_GridControl, 0, "Addr (Hex)");
break;
case 10:
pGridMethods->bSetColumnHeadingString(&m_GridControl, 0, "Addr");
break;
default:
case 16:
pGridMethods->bSetColumnHeadingString(&m_GridControl, 0, "Addr");
break;
}
//////////////////////////////////////
// Display column headings
//////////////////////////////////////
for( i=1 ; i <= num_cols ; i++ ) {
switch( num_base ) {
//case 2:
// pMain->ConvertNumberToString( i-1, 4, num_base, (char *)szTemp );
// //sprintf( szTemp, "%x", i-1 );
// break;
case 10:
sprintf( szTemp, "%d", i-1 );
break;
default:
case 16:
sprintf( szTemp, "%x",i-1 );
break;
}
pGridMethods->bSetColumnHeadingString(&m_GridControl, i, szTemp );
}
pGridMethods->bSetColumnHeadingString(&m_GridControl, i, "Text" );
//////////////////////////////////////
// Display row headings
//////////////////////////////////////
addr = offset_data_bytes;
for( i=1 ; i <= num_data_rows ; i++ ) {
switch( num_base ) {
//case 2:
// pMain->ConvertNumberToString( addr, 8, num_base, (char *)szTemp );
// //sprintf( szTemp, "%x", i-1 );
// break;
case 10:
sprintf( szTemp, "%d", addr );
break;
default:
case 16:
if( (addr & 0xffff0000) == 0 )
sprintf( szTemp, "%04x",addr );
else {
if( (addr & 0xfff00000) == 0 )
sprintf( szTemp, "%05x",addr );
else {
if( (addr & 0xff000000) == 0 )
sprintf( szTemp, "%06x",addr );
else {
if( (addr & 0xf0000000) == 0 )
sprintf( szTemp, "%07x",addr );
else
sprintf( szTemp, "%08x",addr );
}
}
}
break;
}
pGridMethods->bSetRowHeadingString(&m_GridControl, i, szTemp );
addr += num_cols;
}
// If there are more rows on display than we are actually using,
// blank out the remaining ones.
if( num_data_rows != num_rows ) {
for( i=num_data_rows+1 ; i <= num_rows ; i++ )
pGridMethods->bSetRowHeadingString(&m_GridControl, i, "" );
}
//////////////////////////////////////
// Define widths of each column
//////////////////////////////////////
// Left most column (addr)
m_GridControl.SetColWidth(0, 800);
// All data columns
for( i=1 ; i <= num_cols ; i++ ) {
m_GridControl.SetColWidth(i, col_width );
}
// Text mapping column width
switch( num_base ) {
case 2:
m_GridControl.SetColWidth(i, 1100 );
break;
case 10:
m_GridControl.SetColWidth(i, 4570 );
break;
default:
case 16:
m_GridControl.SetColWidth(i, 3250 );
break;
}
grid_overhead_flag = TRUE;
}
void CNVRAMBuild::SetupEditData(void)
{
// TODO: Add your control notification handler code here
int addr,data;
int tbase;
m_Edit_ADDRESS.GetWindowText( (LPSTR) &sztemp2, sizeof( sztemp2 ) - 1 );
m_Edit_DATA.GetWindowText( (LPSTR) &sztemp3, sizeof( sztemp3 ) - 1 );
tbase = old_num_base;
if( strlen( sztemp2 ) ) {
switch( old_num_base ) {
case 2:
tbase = 16;
case 16:
case 10:
addr = pMain->ConvertStringToNumber( tbase, (char *) &sztemp2 );
break;
default:
return;
}
tbase = num_base;
switch( num_base ) {
case 2:
tbase = 16;
case 16:
case 10:
pMain->ConvertNumberToString( addr, 0, tbase, (char *)sztemp2 );
break;
default:
return;
}
m_Edit_ADDRESS.SetWindowText( (LPSTR) &sztemp2 );
}
if( strlen( sztemp3 ) ) {
switch( old_num_base ) {
case 2:
case 16:
case 10:
data = pMain->ConvertStringToNumber( old_num_base, (char *) &sztemp3 );
break;
default:
return;
}
switch( num_base ) {
case 2:
case 16:
case 10:
pMain->ConvertNumberToString( data, 0, num_base, (char *)sztemp3 );
break;
default:
return;
}
m_Edit_DATA.SetWindowText( (LPSTR) &sztemp3 );
}
}
void CNVRAMBuild::DrawDataValues( void )
{
short i,j,in; // Counter variable
char szTemp[256];
char szTemp2[32];
int chindex;
grid_overhead_flag = TRUE;
if( pGridMethods == NULL )
return;
if( num_data_bytes == 0 )
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -