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

📄 burnnanddlg.cpp.svn-base

📁 vc环境下编译的一个对USB设备进行烧录的驱动程序
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
//                m_nWorkNum--;

                break;
            }
        }
	}

	return 0;
}

LRESULT CBurnNANDDlg::On_Message(WPARAM wp, LPARAM lp)
{
	int port = wp - 100;

	bool ret;

	switch(lp) 
	{
		case MESSAGE_START_SET_REGISTER:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始设置寄存器");

			m_brStaticBrush[port] = &m_brBlueBrush;
			m_StaticColor[port] = RGB(0, 0, 255);
			//Invalidate();
            GetDlgItem(IDC_STATIC_COLOR_COM1 + port)->Invalidate();

			break;
		case MESSAGE_SET_REGISTER_FAIL:
			terminate_mission(port, "设置寄存器失败");
			break;
		case MESSAGE_SET_REGISTER_SUCCESS:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("设置寄存器成功");
			break;
		case MESSAGE_START_DOWNLOAD_LOADFILE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始下载通讯程序");
			break;
		case MESSAGE_DOWNLOAD_LOADFILE_FAIL:
			terminate_mission(port, "下载通讯程序失败");
			break;
		case MESSAGE_DOWNLOAD_LOADFILE_SUCCESS:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("下载通讯程序成功");
			break;
		case MESSAGE_START_INIT_USB:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始初始化USB");
			break;
		case MESSAGE_INIT_USB_FAIL:
			terminate_mission(port, "USB初始化失败");
			break;
		case MESSAGE_INIT_USB_SUCCESS:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("USB初始化成功");
			break;
		case MESSAGE_START_TEST_TRANSC:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始测试");
			break;
		case MESSAGE_TEST_TRANSC_FAIL:
			terminate_mission(port, "测试失败");
			break;
		case MESSAGE_START_ERASE_TRANSC:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始擦除");
			break;
		case MESSAGE_ERASE_TRANSC_FAIL:
			terminate_mission(port, "擦除失败");
			break;
		case MESSAGE_START_FORMAT_TRANSC:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始格式化");
			break;
		case MESSAGE_FORMAT_TRANSC_FAIAL:
			terminate_mission(port, "格式化失败");
			break;
		case MESSAGE_START_DOWNLOAD_FILE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始下载BIN文件");
			break;
		case MESSAGE_DOWNLOADING_FILE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("正在下载BIN文件");
			break;
		case MESSAGE_DOWNLOAD_FILE_FAIL:
			terminate_mission(port, "下载BIN文件失败");
			break;
		case MESSAGE_DOWNLOAD_FILE_SUCCESS:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("下载BIN文件成功");
			break;
		case MESSAGE_START_DOWNLOAD_RESOURCE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("正在下载预制资源");
			break;
		case MESSAGE_DOWNLOAD_RESOURCE_SUCCESS:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("下载预制资源成功");
			break;
		case MESSAGE_DOWNLOAD_RESOURCE_FAIL:
			terminate_mission(port, "下载预制资源失败");
			break;

		case MESSAGE_START_DOWNLOAD_FAT_IMAGE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始下载磁盘镜象文件");
			break;
		case MESSAGE_DOWNLOADING_FAT_IMAGE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("正在下载磁盘镜象文件");
			break;
		case MESSAGE_DOWNLOAD_FAT_IMAGE_SUCCESS:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("下载磁盘镜象文件文件成功");
			break;

		case MESSAGE_DOWNLOAD_FAT_IMAGE_FAIL:
			terminate_mission(port, "下载磁盘镜象文件失败");
			break;

        case MESSAGE_GET_CHIP_PARA:
            GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("取NANDFLASH参数");
            break;
        
        case MESSAGE_GET_CHIP_PARA_FAIL:
            terminate_mission(port, "取NANDFLASH参数失败");
            break;

        case MESSAGE_GET_CHIP_PARA_SUCCESS:
            GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("取NANDFLASH参数成功");
            break;

        case MESSAGE_SET_CHIP_PARA:
            GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("设置NANDFLASH参数");
            break;
        
        case MESSAGE_SET_CHIP_PARA_FAIL:
            terminate_mission(port, "设置NANDFLASH参数失败");
            break;

        case MESSAGE_SET_CHIP_PARA_SUCCESS:
            GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("设置NANDFLASH参数成功");
            break;

		case MESSAGE_TASK_COMPLETE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("烧录完成");

			burnflash[port].terminate_thread();
			m_bWorking[port] = FALSE;
			burnflash[port].close_usb();
			burnflash[port].set_download_file_len(0);
			((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + port))->SetPos(0);

			if(config.bOpenCom)
			{
				burnflash[port].close_com();

				ret  = burnflash[port].open_com(config.base_com + port, config.BaudRate, m_hWnd);

				//burnflash[port].set_dcb(config.BaudRate, config.ByteSize, config.Parity, config.StopBits);

				//ret = burnflash[port].set_para();
				if(!ret)
				{
					CString str;
					str.Format("打开串口%d失败", config.base_com + port);
					MessageBox(str, NULL, MB_OK);
				}
			}

			m_brStaticBrush[port] = &m_brGreenBrush;
			m_StaticColor[port] = RGB(0, 255, 0);
			//Invalidate();
            GetDlgItem(IDC_STATIC_COLOR_COM1 + port)->Invalidate();
			
			break;
		case MESSAGE_COMPARE_FILE:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("开始比较数据");
			break;

		case MESSAGE_COMPARE_FILE_FAIL:
			terminate_mission(port, "比较数据失败");
			break;

		case MESSAGE_COMPARE_FILE_SUCCESS:
			GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText("比较数据成功");
			break;

		case MESSAGE_DOWNLOAD_FILE_LEN:
			((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + port))->SetPos(burnflash[port].get_download_file_len());
			break;

		/* Aug.06,07 - Added to validate the FS Format-Table */
        case MESSAGE_CHECK_FORMAT_DATA_FAIL:
            terminate_mission(port, "文件系统分区表不适合这款Nandflash");
            break;
		
		default:
			break;
	}

	if(m_nWorkNum == 0)
	{
//		m_bWorking = FALSE;
		GetMenu()->EnableMenuItem(IDM_CONFIG, MF_BYCOMMAND | MF_ENABLED );
	}
	
	return 0;
}

void CBurnNANDDlg::terminate_mission(int port, LPCTSTR str)
{
	bool ret;
	
	if(str == NULL)
		return;

	GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText(str);
	burnflash[port].terminate_thread();
	m_bWorking[port] = FALSE;
	burnflash[port].close_usb();
	burnflash[port].set_download_file_len(0);
	//((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + port))->SetPos(0);
	((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + port))->SetForeColour(RGB(255, 0, 0));
    ((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + port))->Invalidate();

	if(config.bOpenCom)
	{
		burnflash[port].close_com();

		ret  = burnflash[port].open_com(config.base_com + port, config.BaudRate, m_hWnd);

		//burnflash[port].set_dcb(config.BaudRate, config.ByteSize, config.Parity, config.StopBits);

		//ret = burnflash[port].set_para();
		if(!ret)
		{
			CString str;
			str.Format("打开串口%d失败", config.base_com + port);
			MessageBox(str, NULL, MB_OK);
		}
	}

	m_brStaticBrush[port] = &m_brRedBrush;
	m_StaticColor[port] = RGB(255, 0, 0);
	//Invalidate();
    GetDlgItem(IDC_STATIC_COLOR_COM1 + port)->Invalidate();
}

LRESULT CBurnNANDDlg::On_Receive(WPARAM wp, LPARAM lp)
{	
	int port, len;

	port = wp - config.base_com - 100;
	if( !burnflash[port].is_com_open() )
		return 0;
	
	len = burnflash[port].com_read(receive_buf[port] + receive_index[port], 100);

	EB_Printf(port, receive_buf[port] + receive_index[port]);

	receive_index[port] += len;

	if(burnflash[port].get_thread() == INVALID_HANDLE_VALUE)
	{
		if(receive_buf[port][receive_index[port] - 1] == '#')
		{
			if(receive_buf[port][receive_index[port] - 2] == '>')
			{
				receive_index[port] = 0;
				
				if(!config.bUBoot)
				{
					if(!burnflash[port].is_standby() && !m_bWorking[port])
					{
						m_brStaticBrush[port] = &m_brYellowBrush;
						m_StaticColor[port] = RGB(255, 255, 0);

						GetDlgItem(IDC_STATIC_COLOR_COM1 + port)->Invalidate();
					
						burnflash[port].set_standby(TRUE);
//						m_nWorkNum++;

						((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + port))->SetPos(0);
						((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + port))->SetForeColour(RGB(0, 0, 255));
						CString str, str1;

						str = __T("串口");
						str1.Format("%d", port + 1);
						str = str + str1;

						GetDlgItem(IDC_STATIC_COM1 + port)->SetWindowText(str);

						if(config.bAutoDownload)
						{
							StartBurn(port);
						}
					}
				}
			}
		}
	}
	
/*	if(burnflash[port].Get_usb_handle() == INVALID_HANDLE_VALUE)
	{
		if(receive_buf[port][receive_index[port] - 1] == '8' &&
			receive_buf[port][receive_index[port] - 2] == 'G' &&
			receive_buf[port][receive_index[port] - 3] == 'G' &&
			receive_buf[port][receive_index[port] - 4] == 'A' &&
			receive_buf[port][receive_index[port] - 5] == 'G')
		{
			SetEvent(usb_init_event);
		}
			
	}*/

	if(burnflash[port].Get_usb_handle() == INVALID_HANDLE_VALUE)
	{
		if((receive_buf[port][receive_index[port] - 1] == 'G' ||
			receive_buf[port][receive_index[port] - 1] == 'Q' ) &&
			receive_buf[port][receive_index[port] - 2] == 'A' &&
			receive_buf[port][receive_index[port] - 3] == 'G')
		{
			g_bInit = TRUE;
//			SetEvent(usb_init_event);
//			receive_index[port] = 0;
		}
			
	}

	if(burnflash[port].get_thread() != INVALID_HANDLE_VALUE)
	{
		if(receive_buf[port][receive_index[port] - 1] == ':' &&
			receive_buf[port][receive_index[port] - 2] == 'e' &&
			receive_buf[port][receive_index[port] - 3] == 'l' &&
			receive_buf[port][receive_index[port] - 4] == 'i' &&
			receive_buf[port][receive_index[port] - 5] == 'f')
		{
			SetEvent(burnflash[port].download_init_event);
		}
	}

	if(receive_index[port] >= MAX_RECEIVE_BUF_LEN - 100)
	{
		receive_index[port] = 0;
	}

	return 0;
}

void CBurnNANDDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default

	for(int i = 0; i < config.equipment_count; i++)
	{
		burnflash[i].close_usb();
		burnflash[i].close_com();
		if(receive_buf[i] != NULL)
			free(receive_buf[i]);
		record_free(config.base_com + i);
	}

	free(config.download_files);
	free(config.set_registers);
	
    UnregisterDeviceNotification( m_hDevNotify );

	CDialog::OnClose();
}

void CBurnNANDDlg::OnConfig() 
{
	// TODO: Add your command handler code here
	CConfigDlg DlgConfig;

	CPassWordDlg DlgPassWord;


	int ret = DlgPassWord.DoModal();

	if(ret == 1)
	{
		if(DlgPassWord.m_password != "anyka")
		{
			MessageBox("密码不正确!", NULL, MB_OK);
			return;
		}
	}
	else
		return;

	for(int i = 0; i < config.equipment_count; i++)
	{
		if(receive_buf[i] != NULL)
			free(receive_buf[i]);
        receive_buf[i] = NULL;
        burnflash[i].set_standby(false);
	}

	for(i = 0; i< config.com_count; i++)
	{
		burnflash[i].close_com();
		record_free(config.base_com + i);
	}
	
	DlgConfig.DoModal();


    for(i = 0; i < MAX_DEVICE_NUM; i++)
	{
		((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + i))->SetRange32(0, config.total_download_file_len);
		((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + i))->SetPos(0);
		((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + i))->SetBkColour(RGB(212, 208, 200));
		((CTextProgressCtrl *)GetDlgItem(IDC_PROGRESS_COM1 + i))->SetForeColour(RGB(0, 0, 255));

        m_brStaticBrush[i] = &m_brBlackBrush;
		m_StaticColor[i] = RGB(0, 0, 0);
	}

	if(config.bAutoDownload)
	{
		GetDlgItem(IDC_BUTTON_BURN)->ShowWindow(SW_HIDE);
	}
	else
	{
		GetDlgItem(IDC_BUTTON_BURN)->ShowWindow(SW_SHOW);
	}

	if(config.bOpenCom)
	{
		for(i = 0; i < config.com_count; i++)
		{
			receive_buf[i] = (char *)malloc(MAX_RECEIVE_BUF_LEN);
			receive_index[i] = 0;

			bool ret = burnflash[i].set_dcb(config.BaudRate,config.ByteSize, config.Parity, config.StopBits);
			if(!ret)
			{
				MessageBox("设置串口出错!", NULL, MB_OK);
			}

			ret = burnflash[i].open_com(config.base_com + i, config.BaudRate, m_hWnd);
			if(!ret)
			{
				CString str;
				str.Format("打开串口%d失败", config.base_com + i);
				MessageBox(str, NULL, MB_OK);
			}
		}
	}

	Invalidate(TRUE);
	
}

#define STRING_LEN  4096  

#define KEY_BACKSPACE  0x08
#define KEY_ENTER      0x0d
#define KEY_ESC        0x1b

void CBurnNANDDlg::EB_Printf(int port, TCHAR *fmt,...)
{
    va_list ap;
    int i,slen,lineIdx;
    int txtRepStart,txtRepEnd,txtSelEnd;
    static int wasCr=0; //should be static type.
    static TCHAR string[STRING_LEN+4096]; //margin for '\b'
    static TCHAR string2[STRING_LEN+4096]; //margin for '\n'->'\r\n'
    static int prevBSCnt=0;
    int str2Pt=0;
	CEdit* _hwndEdit;
   
	_hwndEdit = (CEdit *)GetDlgItem(IDC_SCREEN_COM1 + port);

	txtRepStart = _hwndEdit->GetWindowTextLength();
    txtRepEnd=txtRepStart-1;
    
    va_start(ap,fmt);
    _vsntprintf(string2,STRING_LEN-1,fmt,ap);
    va_end(ap);

    string2[STRING_LEN-1]='\0';

⌨️ 快捷键说明

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