请选择 进入手机版 | 继续访问电脑版

DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 783|回复: 3

[UUProg] uuprog开发教程:烧写工程管理2

[复制链接]
发表于 2014-11-30 07:14:59 | 显示全部楼层 |阅读模式
       上节我们已经讲解了ppf文件的结构,这节我们将继续讲解读写代码部分。使用文件结构来读写文件可以方便有效的读取和写入而又不会出错,通过结构体有效的匹配每个文件体中的各变量。
QQ图片20141129010710.png
从上图可以看出借个工程文件操作函数:OnFileProjectOpen()打开工程文件、OnFileProjectSaveAs()保存工程文件、OnFileProjectAttribute()设置工程属性、OnFileProjectClose()关闭工程。打开和保存基本就是两个对立的操作过程,也是整个操作的难点。
1、打开工程
  1. void CUUProgDlg::OnFileProjectOpen()
  2. {
  3.         // TODO: Add your command handler code here
  4.         CFile ldfile;
  5.         CString m_sFileExt;

  6.         SetAppLog("加载工程开始...");
  7.         //保存工程文件代码
  8.         CFileDialog mDlg(TRUE,".PPF",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"编程器工程文件(*.ppf)|*.ppf||",this);
  9.         if(mDlg.DoModal() == IDOK)
  10.         {
  11.                 m_sProjectFilename = mDlg.GetPathName();
  12.                 m_sFileExt = mDlg.GetFileExt();
  13.                 m_sFileExt.MakeUpper();
  14.                 //加载文件
  15.                 if(!m_sProjectFilename.IsEmpty())
  16.                 {
  17.                         SetAppLog("加载文件:"+m_sProjectFilename);
  18.                         if(ldfile.Open(m_sProjectFilename,CFile::shareCompat|CFile::modeRead,NULL))
  19.                         {
  20.                                 int nFileSize;
  21.                                 nFileSize=ldfile.GetLength();
  22.                                 if(m_sFileExt=="PPF")
  23.                                 {
  24.                                         char* pFileBuf=(char*)GlobalAlloc(GMEM_FIXED,nFileSize+1);
  25.                                         memset(pFileBuf,0,nFileSize+1);
  26.                                         ldfile.Read(pFileBuf,nFileSize);
  27.                                         memcpy(&m_stPFileHead,pFileBuf,sizeof(ProjectFileHeadStruct));
  28.                                         memcpy(&m_stPFile,&pFileBuf[sizeof(ProjectFileHeadStruct)],sizeof(ProjectFileStruct));
  29.                                         CProjectPasswordDlg passworddlg;
  30.                                        
  31.                                         if(passworddlg.DoModal() == IDOK)
  32.                                         {
  33.                                                 if(m_stPFile.AccessPassword != passworddlg.m_sProjectPassword)
  34.                                                 {
  35.                                                         SetAppLog("访问密码错误");
  36.                                                         AfxMessageBox("访问密码错误");
  37.                                                         GlobalFree(pFileBuf);
  38.                                                         ldfile.Close();
  39.                                                         ZeroMemory(&m_stPFile, sizeof(ProjectFileStruct));
  40.                                                         ZeroMemory(&m_stPFileHead, sizeof(ProjectFileHeadStruct));
  41.                                                         return;
  42.                                                 }
  43.                                         }
  44.                                         else
  45.                                         {
  46.                                                 GlobalFree(pFileBuf);
  47.                                                 ldfile.Close();
  48.                                                 SetAppLog("取消加载工程");
  49.                                                 ZeroMemory(&m_stPFile, sizeof(ProjectFileStruct));
  50.                                                 ZeroMemory(&m_stPFileHead, sizeof(ProjectFileHeadStruct));
  51.                                                 return;
  52.                                         }
  53.                                         memcpy(pProgBuff,&pFileBuf[sizeof(ProjectFileHeadStruct)+sizeof(ProjectFileStruct)],nFileSize-sizeof(ProjectFileHeadStruct)-sizeof(ProjectFileStruct));
  54.                                         GlobalFree(pFileBuf);
  55.                                         ldfile.Close();
  56.                                         SetAppLog("加载完成:"+Int2Str(nFileSize)+"字节");
  57.                                         SetMenuItem(false);
  58.                                         SetLoadFileName(m_sProjectFilename);
  59.                                         CString temp;
  60.                                         for (int i=0; i<m_arDeviceList.GetSize(); i++)
  61.                                         {
  62.                                                 temp = m_arDeviceList.GetAt(i).DeviceName;
  63.                                                 if(m_stPFile.DeviceName == temp)
  64.                                                 {
  65.                                                         SetDeviceInfo(i);
  66.                                                         break;
  67.                                                         
  68.                                                 }
  69.                                         }
  70.                                 }
  71.                                 else
  72.                                 {
  73.                                         SetAppLog("文件格式不支持");
  74.                                         AfxMessageBox("文件格式不支持");
  75.                                 }
  76.                         }
  77.                         else
  78.                         {
  79.                                 SetAppLog("加载文件失败");
  80.                                 AfxMessageBox("加载指定的文件出错");
  81.                         }
  82.                 }
  83.         }        
  84.         
  85.         else
  86.         {
  87.                 SetAppLog("取消加载文件");
  88.         }
  89.         
  90. }
复制代码
2、保存工程
  1. void CUUProgDlg::OnFileProjectSaveAs()
  2. {
  3.         // TODO: Add your command handler code here
  4.         CString projectfilename;
  5.         CFile savefile;
  6.         CString m_sFileExt;
  7.         int buffsize;

  8.         SetAppLog("工程保存开始...");
  9.         buffsize = GetMinLength(pProgBuff,m_dDeviceSize);
  10.         if (buffsize ==0)
  11.         {
  12.                 SetAppLog("缓冲区无数据,取消保存");
  13.                 AfxMessageBox("缓冲区无数据,不需保存");
  14.                 return;
  15.         }
  16.         CFileDialog mDlg(FALSE,".PPF",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"编程器工程文件(*.ppf)|*.ppf||",this);
  17.         if(mDlg.DoModal() == IDOK)
  18.         {
  19.                 projectfilename = mDlg.GetPathName();
  20.                 m_sFileExt = mDlg.GetFileExt();
  21.                 m_sFileExt.MakeUpper();
  22.                 SetAppLog("保存为:"+projectfilename);
  23.                 //保存文件代码
  24.                 if (m_sFileExt=="PPF")
  25.                 {
  26.                         if(savefile.Open(projectfilename,CFile::shareCompat|CFile::modeCreate|CFile::modeWrite,NULL))
  27.                         {
  28.         m_stPFile.BuffCheckCRC = m_dBuffCheckCRC;
  29.         m_stPFileHead.ProjectFileCRC = m_dProjectFileCRC;
  30.         m_stPFile.BuffSize = buffsize;
  31.         strcpy(m_stPFile.UUProgSN,m_sUUProgSN);
  32.         strcpy(m_stPFileHead.Appname,"UUProg V"+m_sAppVer);
  33.         strcpy(m_stPFileHead.ProjectFileVer,m_sAppVer);
  34.         strcpy(m_stPFile.DeviceName,m_sDeviceName);
  35.                                 //m_editBuf2.GetData(m_Pro.m_pReadBuf,0x10000);
  36.                                 savefile.Write(&m_stPFileHead,sizeof(ProjectFileHeadStruct));
  37.                                 savefile.Write(&m_stPFile,sizeof(ProjectFileStruct));
  38.                                 savefile.Write(pProgBuff,buffsize);
  39.                                 savefile.Close();
  40.                                 SetAppLog("保存完成:"+Int2Str(sizeof(ProjectFileHeadStruct)+sizeof(ProjectFileStruct)+buffsize)+"字节");
  41.                         }
  42.                 }
  43.                 else
  44.                 {
  45.                 SetAppLog("文件格式不支持");
  46.                 AfxMessageBox("文件格式不支持");
  47.                 }
  48.         }        
  49.         else
  50.         {
  51.                 SetAppLog("取消保存");
  52.         }

  53. }
复制代码
3、工程属性操作
  1. void CProgProjectAttribute::OnOk()
  2. {
  3.         // TODO: Add your control notification handler code here
  4.         UpdateData(true);
  5.         if (parent->m_sProjectFilename.IsEmpty())
  6.         {
  7.         strcpy(parent->m_stPFile.CreateDate,m_sProjectCreateDate);
  8.         }
  9.         if(m_sAccessPassword != m_sAccessPassword1)
  10.         {
  11.                 AfxMessageBox("两次输入的访问密码不一致");
  12.                 return;
  13.         }
  14.         strcpy(parent->m_stPFile.AccessPassword,m_sAccessPassword);
  15.         if(m_sSecurityPassword != m_sSecurityPassword1)
  16.         {
  17.                 AfxMessageBox("两次输入的安全密码不一致");
  18.                 return;
  19.         }
  20.         strcpy(parent->m_stPFile.SecurityPassword,m_sSecurityPassword);
  21.         strcpy(parent->m_stPFile.EditDate,m_sProjectModifyDate);
  22.         strcpy(parent->m_stPFile.ProjectName,m_sProjectName);
  23.         strcpy(parent->m_stPFile.ProjectNote,m_sProjectNote);
  24.         
  25.         CDialog::OnOK();
  26. }
复制代码
4、关闭工程
  1. void CUUProgDlg::OnFileProjectClose()
  2. {
  3.         // TODO: Add your command handler code here
  4.         if(!m_sProjectFilename.IsEmpty())
  5.         {
  6.         ZeroMemory(&m_stPFile, sizeof(ProjectFileStruct));
  7.         ZeroMemory(&m_stPFileHead, sizeof(ProjectFileHeadStruct));
  8.         memset(pProgBuff,0xff,m_dDeviceSize);
  9.         SetMenuItem(true);
  10.         m_sProjectFilename = "";
  11.         SetLoadFileName("未加载文件");
  12.         }
  13.         else
  14.         {
  15.                 SetAppLog("未打开工程文件,不需关闭");
  16.                 AfxMessageBox("未打开工程文件,不需关闭");
  17.         }
  18. }
复制代码
具体的请参考源代码。






发表于 2015-1-12 09:26:33 | 显示全部楼层
支持一下,liyf真的很用心啊。
发表于 2017-8-12 13:19:36 | 显示全部楼层
uuprog 源代码哪里还可以下载?
 楼主| 发表于 2017-8-12 15:53:13 | 显示全部楼层
program 发表于 2017-8-12 13:19
uuprog 源代码哪里还可以下载?

置顶贴啊
完全开源UUprog v1.2b编程器制作资料--第二阶段:2015.5.7 UUProg v1.3原理图+pcb
http://www.diybcq.com/thread-93167-1-1.html
(出处: DIY编程器网)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2017-8-23 08:44 , 耗时 0.420760 秒, 34 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器
DIY编程器群1:3044634 DIY编程器1

Email:libyoufer@sina.com

QQ:28000622

快速回复 返回顶部 返回列表