⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scommdlg.cpp

📁 设备ID烧写程序.exe 软件使用说明: > 1)先打开此程序.设备好串口号.其它取默认值就可以了.打开串口(默认开机自动打开串口1). 然后,设备按OK键开机. > 2)打勾"
💻 CPP
📖 第 1 页 / 共 3 页
字号:


//将一个字符串作为十六进制串转化为一个字节数组,字节间可用空格分隔,
//返回转换后的字节数组长度,同时字节数组长度自动设置。
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 + -