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

📄 flashwriterdlg.cpp

📁 将XLS文件的内容下载到LED显示屏上显示
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}

void CFlashWriterDlg::UpdateFileInfomation()
{

	BYTE data[USE_BLOCK0_SIZE];
	UINT Count=0;
	FillMemory(data,USE_BLOCK0_SIZE,0xFF);


	for (UINT i=0 ; i < m_FileInforCount ; i++ )
	{

		data[Count++]=( m_FileInformation[i].StartAddress >> 16 ) & 0xFF;
		data[Count++]=( m_FileInformation[i].StartAddress >> 24 ) & 0xFF;
		data[Count++]=m_FileInformation[i].StartAddress & 0xFF;
		data[Count++]=( m_FileInformation[i].StartAddress >> 8 ) & 0xFF;

		data[Count++]=( m_FileInformation[i].Size >> 16 ) & 0xFF;
		data[Count++]=( m_FileInformation[i].Size >> 24 ) & 0xFF;
		data[Count++]=m_FileInformation[i].Size & 0xFF;
		data[Count++]=( m_FileInformation[i].Size >> 8 ) & 0xFF;

	}//end for

	NFlashWrite(&data[0],0,USE_BLOCK0_SIZE);


}

void CFlashWriterDlg::OnPlayFile()
{
	int Block=0;
	int Status;
	unsigned char data[512];

	static char szFilter[] = _T("BIN Files(*.BIN;*.BN1;*.BN2;MRC)|*.BIN;*.BN1;*.BN2;*.MRC||");
	CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );
	CString FileName;
	unsigned char	*FileDataPtr;
	int	Temp_Counter;

	do{
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x60)<<16 | 0000));	//Erase Nandflash CMD1
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((Ale1ByteCommand+((Block<<6)&&0xff))<<16 | 0001));	//Row Address 1
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((Ale1ByteCommand+((Block>>2)&&0xff))<<16 | 0002));	//Row Address 2
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0xd0)<<16 | 0003));	//Erase Nandflash CMD2
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WaitReady<<16 | 0004));	//Wait Busy
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (ReadStatus<<16 | 0005));	//Read Status

		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (Read1ByteToY0<<16 | 0006));	//Read Status
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 0007));	//Read Status
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0);	//Excute Nandflash Program
		Sleep(1);
		USB_Special_Patten = USB_Special_Patten + 0x40;
		Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, UpLoadY0Data);	//Excute Nandflash Program
		data[0]=0;
		data[1]=0;
		Status = USBICE_Read(&data[0], 64);
		if (data[0]!=0x55 || data[1]!=0xaa)
			break;
		else
		{
			Status = data[2];
			Status = data[3];
		}
		m_Status.Format("%d",Block);
		UpdateData(false);
		Block++;
	}while (Block<10);


	if (FileDlg.DoModal()==IDOK)
	{
		//----Read File Manager in NF Block0 Page 0------------------
		m_Status = "1: Read File Info";
		UpdateData(false);

		Sleep(100);

		FileName = FileDlg.GetPathName();

		CFile f_tmp;
		unsigned long FileLength,DownloadLength;
		BYTE  *ProgramData;

		if ( ! f_tmp.Open(FileName, CFile::modeRead) )
		{
			AfxMessageBox("File could not be opened",MB_OK,0);
			return;
		}

		FileLength = f_tmp.GetLength();

		UINT k = FileLength / 512 ;
		if ( FileLength <= 512 )
			DownloadLength = 512;
		else if ( ! ( FileLength % 512 ) )
			DownloadLength = FileLength;
		else
			DownloadLength = ( k + 1 ) * 512;

		ProgramData = new BYTE[DownloadLength];
		FillMemory(ProgramData,DownloadLength,0xFF);

		f_tmp.Read(ProgramData,FileLength);
		f_tmp.Close();
		UINT StartAddress;

		StartAddress =0;

		m_Status = "2: Program";
		UpdateData(false);

		FileDataPtr=&ProgramData[0];
		Temp_Counter = 0;
		do
		{
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((0xb000)<<16 | SetIx1Value));	//Erase Nandflash CMD1

			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , 512/2 );	//设置数据个数

			USB_Special_Patten = USB_Special_Patten + 0x40;
//			Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, DownloadData);	//Excute Download Program
			Sleep(1);

			USBICE_Write( FileDataPtr , 512 );

			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(Check_Status+USB_Special_Patten, 0);	//Excute Download Program
			data[0]=0;
			data[1]=0;
			Status = USBICE_Read(&data[0], 64);
			FileDataPtr=FileDataPtr+512;

			//Write Data To Nandflash init
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x80)<<16 | 0000));	//Write page Nandflash CMD1
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (Ale4ByteCommand<<16 | 0001));	//Row Address 1
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 2));	//Nandflash End
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((StartAddress&&0xff)<<16 | 20));	//Set X0 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress&&0x700)|(((StartAddress&&0xffff800)<<5)&&0xff0000))<<8 | 22));	//Set mr0 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress<<5)&&0xff000000)>>8 | 23));	//Set mr1 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0);	//Excute Nandflash Program
			Sleep(50);
			//			USB_Special_Patten = USB_Special_Patten + 0x40;
			//			Write4L_Cmd(Check_Status+USB_Special_Patten, 0);	//Excute Download Program
			//			Status = USBICE_Read(&data[0], 64);

			//Write to Nandflash
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((0xb000)<<16 | SetIx1Value));
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((00)<<16 | SetIx1bkramValue));
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (256<<16 | 21));	//Set y0 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WriteIx1Data<<16 | 0000));	//Write 512byte to nandflash
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x10)<<16 | 0001));	//Write page Nandflash CMD2
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WaitReady<<16 | 0002));	//Write page Nandflash CMD2
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 3));	//Nandflash End
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0);	//Excute Nandflash Program
			Sleep(50);

			///////////////////////Read verify
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x00)<<16 | 0000));	//Read page Nandflash CMD1
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (Ale4ByteCommand<<16 | 0001));	//Row Address 1
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((CleCommand+0x30)<<16 | 0002));	//Read page Nandflash CMD2
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (WaitReady<<16 | 0003));	//Wait Busy
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 4));	//Nandflash End
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((StartAddress&&0xff)<<16 | 20));	//Set X0 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress&&0x700)|(((StartAddress&&0xffff800)<<5)&&0xff0000))<<8 | 22));	//Set mr0 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (((StartAddress<<5)&&0xff000000)>>8 | 23));	//Set mr1 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0);	//Excute Nandflash Program
			Sleep(50);

			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (0xae00<<16 | SetIx1Value));
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, SetIx1bkramValue);
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (256<<16 | 21));	//Set y0 Value
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, ((ReadDataToIx1+0x00)<<16 | 0000));	//Read page Nandflash CMD1
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (NandFlashCommandEnd<<16 | 1));	//Nandflash End
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_ExcuteCommandRam_Cmd+USB_Special_Patten, 0);	//Excute Nandflash Program
			Sleep(50);

			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd( SET_ADDRESS + USB_Special_Patten , 512/2 );	//设置数据个数
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
			Write4L_Cmd(USB_SetCommandRam_Cmd+USB_Special_Patten, (0xae00<<16 | SetIx1Value));
			Sleep(1);
			USB_Special_Patten = USB_Special_Patten + 0x40;
//			Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, UploadDataCmd);	//设置数据个数
			Sleep(1);
			USBICE_Read(&data[0], 512);
			//Write End
			StartAddress+=512;
			Temp_Counter++;
			if	(Temp_Counter >= 20)
			{
				m_Status.Format("%d",StartAddress);
				UpdateData(false);
				Temp_Counter = 0;
			}
		}while (FileDataPtr<&ProgramData[DownloadLength]);
	}

}

void CFlashWriterDlg::OnBrowse()
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	char *p="xls File(*.xls)|*.xls";
	CFileDialog cfdlg(true,NULL,NULL,OFN_HIDEREADONLY,p,NULL);
	if (cfdlg.DoModal () == IDOK)
	{
		m_SourceFile = cfdlg.GetPathName ();
	}
	if ( !m_SourceFile.IsEmpty () )
		UpdateData(false);

}

void CFlashWriterDlg::OnClose()
{
	// TODO: Add your message handler code here and/or call default
	if (USBReadyFlag)
	{
		Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, ResetMCUCmd);	//设置数据个数
		Set_USB_Close(0x00);
	}
	CDialog::OnClose();
}

void CFlashWriterDlg::UsbSucessClose()
{
	Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, UsbOKExitCmd);	//设置数据个数
	Set_USB_Close(0x00);
}

void CFlashWriterDlg::OnTimer(UINT nIDEvent)
{
	// TODO: Add your message handler code here and/or call default
	CWnd *pWnd = GetDlgItem(IDC_STATIC_USB);


	if ( ! Initial_NFlashWriter() )
	{
		USBReadyFlag=false;
		pWnd->SetWindowText("USB Status:No USB Device!");
		Close_USB();
		GetDlgItem(IDC_Program_FLASH_WRITER)->EnableWindow(FALSE);
	}
	else
	{
		USBReadyFlag=true;
		pWnd->SetWindowText("USB Status:USB is Ready!");
		GetDlgItem(IDC_Program_FLASH_WRITER)->EnableWindow(TRUE);
	}
	CDialog::OnTimer(nIDEvent);
}

void CFlashWriterDlg::SetProgress(short MaxIndex)
{
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetRange(0, MaxIndex);
}

void CFlashWriterDlg::ProgressPrg(int Temp_Counter)
{
	return;
	((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(Temp_Counter);
	UpdateData(false);
	UpdateWindow();
}

void CFlashWriterDlg::OnButton2()
{
	// TODO: Add your control notification handler code here
	if (USBReadyFlag)
	{
		Write4L_Cmd(USB_Program_Jmp_Cmd+USB_Special_Patten, ResetMCUCmd);	//设置数据个数
		Set_USB_Close(0x00);
	}
	CDialog::OnOK();
}

void CFlashWriterDlg::OnOutofmemoryProgress1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}

void CFlashWriterDlg::OnButton3() 
{
	OnProcEvent();
	return;

	CExcelRW rw;

	if (!rw.Open("c:\\test.xls", "sheet1"))
	{
		AfxMessageBox("open failed");
		return;
	}

	rw.Write(1, 1, _variant_t("ri o"));
	rw.Save("c:\\test.xls");

	_variant_t ri = rw.Read(1, 2);

	rw.Close();
}

void CFlashWriterDlg::OnProcEvent()
{
	// 初始化,发指令
	// 启动线程
	unsigned long tId;
	HANDLE hThread = CreateThread(NULL, 0, ThreadInit, (PVOID)&m_hWnd, 0,  &tId);
	if (hThread == NULL)
	{
		AfxMessageBox("启动线程失败");
	}
}

unsigned long __stdcall CFlashWriterDlg::ThreadInit(PVOID param)
{
	HWND* pWnd = (HWND*)param;

	// 等待指令操作
	//short cmd = 1;
	Sleep(1000);
	char* buf = new char[20];

	::PostMessage(*pWnd, MSG_INIT, (WPARAM)buf, 0);

	//delete[] buf;

	return 0;
}

LRESULT CFlashWriterDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	if (message == MSG_INIT)
	{
		// 收到初始化返回指令,调用相关函数
		char* buf = (char*)wParam;
		delete[] buf;
		AfxMessageBox("收到指令");
	}
	else if (message == MSG_READ)
	{
		// 收到读数据返回指令,调用相关函数
	}
	else if (message == MSG_ERASE)
	{
		// 收到擦除返回指令,调用相关函数
	}
	else if (message == MSG_WRITE)
	{
		// 收到输入返回指令,调用相关函数
	}
	else if (message == MSG_CHECK)
	{
		// 收到校验返回指令,调用相关函数
	}
	
	return CDialog::WindowProc(message, wParam, lParam);
}

⌨️ 快捷键说明

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