📄 burnnanddlg.cpp.svn-base
字号:
// 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 + -