📄 mcuprogrammersettingsdlg.cpp
字号:
}
void CMCUProgrammerSettingsDlg::OnButtonBrowseNotBanked()
{
BrowseForHexFile(FP_NOT_BANKED);
}
void CMCUProgrammerSettingsDlg::OnButtonBrowseBank1()
{
BrowseForHexFile(FP_BANK1);
}
void CMCUProgrammerSettingsDlg::OnButtonBrowseBank2()
{
BrowseForHexFile(FP_BANK2);
}
void CMCUProgrammerSettingsDlg::OnButtonBrowseBank3()
{
BrowseForHexFile(FP_BANK3);
}
void CMCUProgrammerSettingsDlg::OnButtonBrowseLog()
{
BrowseForHexFile(FP_LOG);
}
void CMCUProgrammerSettingsDlg::OnCheckLogtofile()
{
UpdateData(TRUE);
// Only enable the append if we are logging, if not do not allow it
// as a selection
if (m_LogToFile)
{
GetDlgItem(IDC_CHECK_APPENDLOGFILE)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_CHECK_APPENDLOGFILE)->EnableWindow(FALSE);
}
}
void CMCUProgrammerSettingsDlg::OnCheckLockCodeSpace()
{
// Update the lock byte edit boxes and captions
UpdateLockByteCtrls();
}
// Update the lock byte edit boxes and captions
void CMCUProgrammerSettingsDlg::UpdateLockByteCtrls()
{
BOOL bEnableLockCtrls = FALSE;
// Enable/disable the lock byte controls based on the check status
// of the lock code space checkbox
bEnableLockCtrls = IsDlgButtonChecked(IDC_CHECK_LOCK_CODE_SPACE);
// Enable the lock byte controls if the checkbox is enabled
// otherwise disable the controls
GetDlgItem(IDC_STATIC_WRITE_LOCK_BYTE)->EnableWindow(bEnableLockCtrls);
GetDlgItem(IDC_EDIT_WRITE_LOCK_BYTE)->EnableWindow(bEnableLockCtrls);
GetDlgItem(IDC_STATIC_READ_LOCK_BYTE)->EnableWindow(bEnableLockCtrls);
GetDlgItem(IDC_EDIT_READ_LOCK_BYTE)->EnableWindow(bEnableLockCtrls);
// Show one or two lock byte edit boxes depending on the selected part
// number
CString partNum;
m_ComboPartNumber.GetWindowText(partNum);
// Get the read/write lock byte addresses
if (GetLockByteAddresses(partNum, m_wLockByteAddr, m_rLockByteAddr))
{
BOOL bTwoLockBytes = TRUE;
CString textA;
CString textB;
CString prefix = "Write Lock";
// If the addresses are the same, then there only needs to be
// one edit box for the lock byte value
if (m_wLockByteAddr == m_rLockByteAddr)
{
prefix = "R/W Lock";
bTwoLockBytes = FALSE;
}
// If addresses are the same, then show:
//
// "R/W Lock
// (0x00000):"
//
// Otherwise show:
//
// "Write Lock
// (0x00000):"
// "Read Lock
// (0x00000):"
//
textA.Format("%s\n(0x%05X):", prefix, m_wLockByteAddr);
textB.Format("Read Lock\n(0x%05X):", m_rLockByteAddr);
SetDlgItemText(IDC_STATIC_WRITE_LOCK_BYTE, textA);
SetDlgItemText(IDC_STATIC_READ_LOCK_BYTE, textB);
GetDlgItem(IDC_STATIC_WRITE_LOCK_BYTE)->ShowWindow(TRUE);
GetDlgItem(IDC_EDIT_WRITE_LOCK_BYTE)->ShowWindow(TRUE);
GetDlgItem(IDC_STATIC_READ_LOCK_BYTE)->ShowWindow(bTwoLockBytes);
GetDlgItem(IDC_EDIT_READ_LOCK_BYTE)->ShowWindow(bTwoLockBytes);
}
// If an unknown part or no part has been selected
else
{
// Hide all lock byte controls
GetDlgItem(IDC_STATIC_WRITE_LOCK_BYTE)->ShowWindow(FALSE);
GetDlgItem(IDC_EDIT_WRITE_LOCK_BYTE)->ShowWindow(FALSE);
GetDlgItem(IDC_STATIC_READ_LOCK_BYTE)->ShowWindow(FALSE);
GetDlgItem(IDC_EDIT_READ_LOCK_BYTE)->ShowWindow(FALSE);
// Uncheck the lock code space checkbox
CheckDlgButton(IDC_CHECK_LOCK_CODE_SPACE, FALSE);
m_LockCodeSpace = FALSE;
}
}
void CMCUProgrammerSettingsDlg::UpdateHexFileCtrls()
{
int numBanks = 0;
CString partNum;
m_ComboPartNumber.GetWindowText(partNum);
// Check to see if the part supports code banking
GetNumCodeBanks(partNum, numBanks);
// Show all three sets of controls if the device supports banking
if (numBanks == 3)
{
GetDlgItem(IDC_STATIC_BANK1)->EnableWindow(TRUE);
GetDlgItem(IDC_STATIC_BANK2)->EnableWindow(TRUE);
GetDlgItem(IDC_STATIC_BANK3)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_HEXFILE_BANK1)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_HEXFILE_BANK2)->EnableWindow(TRUE);
GetDlgItem(IDC_EDIT_HEXFILE_BANK3)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_BROWSE_BANK1)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_BROWSE_BANK2)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_BROWSE_BANK3)->EnableWindow(TRUE);
}
// Otherwise only show the first set of controls
else
{
GetDlgItem(IDC_STATIC_BANK1)->EnableWindow(FALSE);
GetDlgItem(IDC_STATIC_BANK2)->EnableWindow(FALSE);
GetDlgItem(IDC_STATIC_BANK3)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_HEXFILE_BANK1)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_HEXFILE_BANK2)->EnableWindow(FALSE);
GetDlgItem(IDC_EDIT_HEXFILE_BANK3)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_BROWSE_BANK1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_BROWSE_BANK2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_BROWSE_BANK3)->EnableWindow(FALSE);
// Clear the banked hex filenames
SetDlgItemText(IDC_EDIT_HEXFILE_BANK1, "");
SetDlgItemText(IDC_EDIT_HEXFILE_BANK2, "");
SetDlgItemText(IDC_EDIT_HEXFILE_BANK3, "");
m_HexFileBank1.Empty();
m_HexFileBank2.Empty();
m_HexFileBank3.Empty();
}
}
BOOL CMCUProgrammerSettingsDlg::GetLockByteAddresses(CString partNum, UINT& wLockAddr, UINT& rLockAddr)
{
BOOL retVal = FALSE;
// Search through the part list for a matching part name
for (int i = 0; i < PartListSize; i++)
{
if (PartList[i].partNumber == partNum)
{
wLockAddr = PartList[i].wLockAddr;
rLockAddr = PartList[i].rLockAddr;
retVal = TRUE;
break;
}
}
return retVal;
}
BOOL CMCUProgrammerSettingsDlg::GetNumCodeBanks(CString partNum, int& numBanks)
{
BOOL retVal = FALSE;
// So far only the F12x/F13x devices support code banking
// with 3, 32kB banks plus the common bank
if (partNum.Left(8) == "C8051F12" ||
partNum.Left(8) == "C8051F13")
{
numBanks = 3;
retVal = TRUE;
}
else if (!partNum.IsEmpty())
{
numBanks = 0;
retVal = TRUE;
}
else
{
retVal = FALSE;
}
return retVal;
}
void CMCUProgrammerSettingsDlg::OnButtonLoadsettings()
{
UpdateData(TRUE);
CFileDialog fileDlg(TRUE, "pgs", NULL, OFN_NOCHANGEDIR, "Program Settings Files (*.pgs)|*.pgs|All Files(*.*)|*.*||");
// Browse for the Hex file
if (fileDlg.DoModal() == IDOK)
{
SerializeSettings(fileDlg.GetPathName(), SERIALIZE_IN);
}
UpdateData(FALSE);
// Configure the check boxes
OnCheckLogtofile();
// Update the serial settings
OnChangeSerial();
// Update the lock byte edit boxes and captions
UpdateLockByteCtrls();
// Update the hex file controls for banking
UpdateHexFileCtrls();
}
void CMCUProgrammerSettingsDlg::OnButtonSavesettings()
{
UpdateData(TRUE);
CFileDialog fileDlg(FALSE, "pgs", "ProgramSettings.pgs", OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR, "Program Settings Files (*.pgs)|*.pgs|All Files(*.*)|*.*||");
// Browse for the Hex file
if (fileDlg.DoModal() == IDOK)
{
SerializeSettings(fileDlg.GetPathName(), SERIALIZE_OUT);
}
UpdateData(FALSE);
}
void CMCUProgrammerSettingsDlg::SerializeSettings(CString fileName, BOOL inOut)
{
CFile iniFile;
// Check if we are serializing in or out
if (inOut == SERIALIZE_IN)
{
// Serialize in the default settings if the ini file exists
if (iniFile.Open(fileName, CFile::modeRead))
{
CArchive ar(&iniFile, CArchive::load);
Serialize(ar);
ar.Close();
iniFile.Close();
}
}
else
{
// Serialize in the default settings if the ini file exists
if (iniFile.Open(fileName, CFile::modeCreate | CFile::modeWrite))
{
CArchive ar(&iniFile, CArchive::store);
Serialize(ar);
ar.Close();
iniFile.Close();
}
}
}
void CMCUProgrammerSettingsDlg::Serialize(CArchive& ar)
{
try
{
// Serialize the configuration in or out
if (ar.IsStoring())
{
ar << m_ComboSerialNumberSize.GetCurSel();
ar << m_ComboPartNumber.GetCurSel();
ar << m_EraseCodeSpace;
ar << m_SerializeParts;
ar << m_HexFileNotBanked;
ar << m_SerialNumberCodeLocation;
ar << m_SerialNumberIncrement;
ar << m_StartingSerialNumber;
ar << m_LogToFile;
ar << m_LogFile;
ar << m_AppendToLog;
// New to version 1.2
ar << (WORD)VERSION_MAJOR;
ar << (WORD)VERSION_MINOR;
ar << m_HexFileBank1;
ar << m_HexFileBank2;
ar << m_HexFileBank3;
ar << m_FlashPersist;
ar << m_LockCodeSpace;
ar << m_wLockByteVal;
ar << m_rLockByteVal;
}
else
{
int tmp;
WORD version_major;
WORD version_minor;
ar >> tmp;
m_ComboSerialNumberSize.SetCurSel(tmp);
ar >> tmp;
m_ComboPartNumber.SetCurSel(tmp);
ar >> m_EraseCodeSpace;
ar >> m_SerializeParts;
ar >> m_HexFileNotBanked;
ar >> m_SerialNumberCodeLocation;
ar >> m_SerialNumberIncrement;
ar >> m_StartingSerialNumber;
ar >> m_LogToFile;
ar >> m_LogFile;
ar >> m_AppendToLog;
// Previous version of the save file did not
// serialize these variables
//
// So only serialize if the file isn't
// empty
if (!ar.IsBufferEmpty())
{
ar >> version_major;
ar >> version_minor;
ar >> m_HexFileBank1;
ar >> m_HexFileBank2;
ar >> m_HexFileBank3;
ar >> m_FlashPersist;
ar >> m_LockCodeSpace;
ar >> m_wLockByteVal;
ar >> m_rLockByteVal;
}
// Otherwise use default values
else
{
m_HexFileBank1.Empty();
m_HexFileBank2.Empty();
m_HexFileBank3.Empty();
m_FlashPersist = FALSE;
m_LockCodeSpace = FALSE;
m_wLockByteVal = 0xFF;
m_rLockByteVal = 0xFF;
}
}
}
catch(...)
{
}
}
void CMCUProgrammerSettingsDlg::OnSelchangeComboPartnumber()
{
// Update the lock byte edit boxes and captions
UpdateLockByteCtrls();
// Update the hex file controls for banking
UpdateHexFileCtrls();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -