📄 scommdlg.cpp
字号:
//将一个字符串作为十六进制串转化为一个字节数组,字节间可用空格分隔,
//返回转换后的字节数组长度,同时字节数组长度自动设置。
int CSCOMMDlg::Str2Hex(CString str, char* data)
{
int t,t1;
int rlen=0,len=str.GetLength();
//data.SetSize(len/2);
for(int i=0;i<len;)
{
char l,h=str[i];
if(h==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
l=str[i];
t=HexChar(h);
t1=HexChar(l);
if((t==16)||(t1==16))
break;
else
t=t*16+t1;
i++;
data[rlen]=(char)t;
rlen++;
}
return rlen;
}
void CSCOMMDlg::OnButtonManualsend()
{
// TODO: Add your control notification handler code here
if(m_Port.m_hComm==NULL)
{
//m_ctrlAutoSend.SetCheck(0);
AfxMessageBox("串口没有打开,请打开串口");
return;
}
else
{
CString strTemp;
if(m_Status != M_IN_UBOOT){
m_Port.WriteToPort((LPCTSTR)"\n"); //发送数据
}
if(m_strSendData.GetLength() > 0){
strTemp += m_strSendData + _T("\n");
m_Port.WriteToPort((LPCTSTR)strTemp); //发送数据
}else{
AfxMessageBox("请先输入命令\n");
return;
}
}
}
void CSCOMMDlg::OnCheckAutosend()
{
// TODO: Add your control notification handler code here
m_bAutoSend=!m_bAutoSend;
if(m_bAutoSend)
{
if(m_Port.m_hComm==NULL)
{
m_bAutoSend=!m_bAutoSend;
//m_ctrlAutoSend.SetCheck(0);
AfxMessageBox("串口没有打开,请打开串口");
return;
}
else
SetTimer(1,m_nCycleTime,NULL);
}
else
{
KillTimer(1);
}
}
void CSCOMMDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CString strStatus;
switch(nIDEvent)
{
case 1:
OnButtonManualsend();
break;
case 2:
//m_ctrlSavePath.SetWindowText(m_strCurPath);
KillTimer(2);
break;
case 3:
m_ctrlManualSend.EnableWindow(TRUE);
//m_ctrlAutoSend.EnableWindow(TRUE);
m_ctrlSendFile.EnableWindow(TRUE);
// m_strSendFilePathName=m_strTempSendFilePathName;
//m_ctrlEditSendFile.SetWindowText(m_strSendFilePathName);//m_strSendFilePathName
KillTimer(3);
break;
case 4:
m_animIcon.ShowNextImage();
break;
case 11:
KillTimer(11);
m_bWaitACK = FALSE;
if(m_Indown)
DownId();
m_Indown = FALSE;
break;
case 12:
{
int pid,serial;
CString tmp;
KillTimer(12);
//AfxMessageBox("get succuss\n");
if(m_bAutoMake){
GetDlgItem(IDC_EDIT_PID)->GetWindowText(tmp);
pid = atoi((LPCTSTR)tmp);
GetDlgItem(IDC_EDIT_SERIAL)->GetWindowText(tmp);
serial = atoi((LPCTSTR)tmp);
pid ++;
if(pid > 9999999){
pid = 1000001;
serial ++;
if(serial > 99)
serial = 1;
}
tmp.Format("%ld",pid);
GetDlgItem(IDC_EDIT_PID)->SetWindowText(tmp);
tmp.Format("%d",serial);
GetDlgItem(IDC_EDIT_SERIAL)->SetWindowText(tmp);
GetDlgItem(IDC_EDIT_PID)->GetWindowText(tmp);
WritePrivateProfileString("Config","ID_ProId",(LPCTSTR)tmp,(LPCTSTR)m_sIniPath);
GetDlgItem(IDC_EDIT_SERIAL)->GetWindowText(tmp);
WritePrivateProfileString("Config","ID_Serial",(LPCTSTR)tmp,(LPCTSTR)m_sIniPath);
}
SaveID();
break;
}
case 13:
{
KillTimer(13);
m_Port.WriteToPort((LPCTSTR)"echo 1 > /proc/sys/vpm/sys_busy\n"); //发送数据
m_Port.WriteToPort((LPCTSTR)"\n"); //发送数据
CTime cutime = CTime::GetCurrentTime();
CString str_cutime = cutime.Format("./setabpm time @#%Y-%m-%d:%H:%M:%S#@\n");
AfxMessageBox(str_cutime);
m_Port.WriteToPort((LPCTSTR)str_cutime);
break;
}
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
void CSCOMMDlg::OnChangeEditCycletime()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
/*CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT_CYCLETIME);
CString strText;
pEdit->GetWindowText(strText);
m_nCycleTime=atoi(strText);*/
}
void CSCOMMDlg::OnChangeEditSend()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
UpdateData(TRUE);
}
void CSCOMMDlg::OnButtonClearrecasenda()
{
// TODO: Add your control notification handler code here
m_strSendData.Empty();
UpdateData(FALSE);
}
void CSCOMMDlg::OnSelendokComboComselect()
{
// TODO: Add your control notification handler code here
if(m_Port.m_hComm!=NULL)
{
m_Port.ClosePort();
}
m_nCom=m_Com.GetCurSel()+1;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("状态:COM%d:打开 , 用户:%s",m_nCom,cur_user[m_User]);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("状态:COM%d 打开失败,用户:%s",m_nCom,cur_user[m_User]);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
AfxMessageBox("没有发现此串口或被占用");
}
}
void CSCOMMDlg::OnSelendokComboSpeed()
{
// TODO: Add your control notification handler code here
CString temp;
int i=m_Speed.GetCurSel();
switch(i)
{
case 0:
i=300;
break;
case 1:
i=600;
break;
case 2:
i=1200;
break;
case 3:
i=2400;
break;
case 4:
i=4800;
break;
case 5:
i=9600;
break;
case 6:
i=19200;
break;
case 7:
i=38400;
break;
case 8:
i=43000;
break;
case 9:
i=56000;
break;
case 10:
i=57600;
break;
case 11:
i=115200;
break;
default:
break;
}
m_nBaud=i;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("状态:COM%d:打开 , 用户:%s",m_nCom,cur_user[m_User]);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("状态:COM%d:打开失败 , 用户:%s",m_nCom,cur_user[m_User]);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
void CSCOMMDlg::OnSelendokComboParity()
{
// TODO: Add your control notification handler code here
char temp;
int i=m_Parity.GetCurSel();
switch(i)
{
case 0:
temp='N';
break;
case 1:
temp='O';
break;
case 2:
temp='E';
break;
}
m_cParity=temp;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("状态:COM%d:打开 , 用户:%s",m_nCom,cur_user[m_User]);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("状态:COM%d:打开失败 , 用户:%s",m_nCom,cur_user[m_User]);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
void CSCOMMDlg::OnSelendokComboDatabits()
{
// TODO: Add your control notification handler code here
//char temp;
int i=m_DataBits.GetCurSel();
switch(i)
{
case 0:
i=8;
break;
case 1:
i=7;
break;
case 2:
i=6;
break;
}
m_nDatabits=i;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("状态:COM%d:打开 , 用户:%s",m_nCom,cur_user[m_User]);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("状态:COM%d:打开失败 , 用户:%s",m_nCom,cur_user[m_User]);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
void CSCOMMDlg::OnSelendokComboStopbits()
{
// TODO: Add your control notification handler code here
int i=m_StopBits.GetCurSel();
switch(i)
{
case 0:
i=1;
break;
case 1:
i=2;
break;
}
m_nStopbits=i;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("状态:COM%d:打开 , 用户:%s",m_nCom,cur_user[m_User]);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("状态:COM%d:打开失败 , 用户:%s",m_nCom,cur_user[m_User]);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
//保存显示数据
/*void CSCOMMDlg::OnButtonSavedata()
{
// TODO: Add your control notification handler code here
/*UpdateData(TRUE);
int nLength;
nLength = m_strCurPath.GetLength();
for( int nCount = 0; nCount < nLength; nCount++ )
{
if( m_strCurPath.GetAt( nCount ) == '\\' )
CreateDirectory( m_strCurPath.Left( nCount + 1 ), NULL );
}
CreateDirectory( m_strCurPath, NULL );
CFile m_rFile;
LPCSTR lpszPath =m_strCurPath;// "c:\\comdata";
SetCurrentDirectory( lpszPath );
//文件名为Rec**.txt,以下代码自动检测文件名是否存在,若存在,则后面序号自动递增
//如Rec00.txt Rec01.txt,程序自动为正要保存的文件命名为Rec02.txt.
char buf[20];
for(int j=0;j<100;j++)
{
sprintf(buf,"Rec%02d.txt",j);
if( (access( buf, 0 )) == -1 )
break;
}
if(!m_rFile.Open(buf,CFile::modeCreate | CFile::modeWrite ))
{
AfxMessageBox( "创建记录文件失败!");
return;
}
if((access(buf,0))==-1)
{
AfxMessageBox("failed");
return;
}
CTime t = CTime::GetCurrentTime();
CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
m_rFile.Write((LPCTSTR)str,str.GetLength());
m_rFile.Write((LPCTSTR)m_ReceiveDatalist,m_ReceiveDatalist.GetLength());
m_rFile.Flush();
m_rFile.Close();
str="OK,";
for(int i=0;i<5;i++)
str+=buf[i];
str+=".txt saved";
m_ctrlSavePath.SetWindowText(str);
SetTimer(2,5000,NULL); //在定时器中显示保存文件状态
}*/
//改变文件保存路径
void CSCOMMDlg::OnButtonDirbrowser()
{
// TODO: Add your control notification handler code here
/*static char displayname[MAX_PATH];
static char path[MAX_PATH];
LPITEMIDLIST pidlBrowse; // PIDL selected by user
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = displayname;
bi.lpszTitle = "请选择要保存接收数据的文件夹";
bi.ulFlags = BIF_EDITBOX ;
bi.lpfn = NULL;
pidlBrowse=SHBrowseForFolder( &bi);
if(pidlBrowse!=NULL)
{
SHGetPathFromIDList(pidlBrowse,path);
}
CString str=path; //得到路径
if(str.IsEmpty()) return; //如果没有选择,就返回
m_strCurPath=str; //接收路径编辑框对应变量
UpdateData(FALSE); */
}
void CSCOMMDlg::OnButtonCountreset()
{
// TODO: Add your control notification handler code here
CString strTemp;
WriteCount = 0;
strTemp.Format("%ld个",WriteCount);
strTemp="已成功烧写:"+strTemp;
m_ctrlTXCount.SetWindowText(strTemp);
strTemp.Format("%d",WriteCount);
WritePrivateProfileString("Config","WriteCount",(LPCTSTR)strTemp,(LPCTSTR)m_sIniPath);
}
void CSCOMMDlg::OnButtonClose()
{
// TODO: Add your control notification handler code here
CString str;
//str.Format("RoaringWindSoft You can use all the functions of the SComAssistant,But if you registered:\r\nNo popup Message and No marks of RoaringWindStudio\r\nFree Updates(Send to you Automaticly by Email)\r\n Thank You");
//AfxMessageBox(str);
GetDlgItem(IDC_EDIT_PID)->GetWindowText(str);
WritePrivateProfileString("Config","ID_ProId",(LPCTSTR)str,(LPCTSTR)m_sIniPath);
GetDlgItem(IDC_EDIT_TYPE)->GetWindowText(str);
WritePrivateProfileString("Config","ID_Type",(LPCTSTR)str,(LPCTSTR)m_sIniPath);
GetDlgItem(IDC_EDIT_SERIAL)->GetWindowText(str);
WritePrivateProfileString("Config","ID_Serial",(LPCTSTR)str,(LPCTSTR)m_sIniPath);
GetDlgItem(IDC_EDIT_HDID)->GetWindowText(str);
WritePrivateProfileString("Config","ID_HardId",(LPCTSTR)str,(LPCTSTR)m_sIniPath);
str.Format("%d",WriteCount);
WritePrivateProfileString("Config","WriteCount",(LPCTSTR)str,(LPCTSTR)m_sIniPath);
CSCOMMDlg::OnOK();
}
//选择要发送的文件
/*void CSCOMMDlg::OnButtonFilebrowser()
{
// TODO: Add your control notification handler code here
LPCSTR lpszPath = "c:\\comdata";
SetCurrentDirectory( lpszPath );
static char BASED_CODE szFilter[] = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog FileDlg( TRUE, NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilter );
FileDlg.m_ofn.lpstrInitialDir = lpszPath ;
if( FileDlg.DoModal() ==IDOK )
{
CString strFileName = FileDlg.GetFileName( );
CString strFileExt = FileDlg.GetFileExt( );
CString lpstrName = FileDlg.GetPathName( );
//m_strSendFilePathName=lpstrName;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -