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

📄 eeproom-writerdlg.cpp

📁 向Cypress 芯片中写入并读取产商的各种信息!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// EEPROOM-WriterDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "EEPROOM-Writer.h"
#include "EEPROOM-WriterDlg.h"
#include ".\eeproom-writerdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CEEPROOMWriterDlg 对话框



CEEPROOMWriterDlg::CEEPROOMWriterDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CEEPROOMWriterDlg::IDD, pParent)
	, m_operatorcode(0)
	, m_pccode(0)
	, m_SN(0)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_Select_0 = TRUE;
	m_Select_1 = TRUE;
	m_Select_2 = TRUE;
	m_DownLoading = FALSE;
	m_RepairFlag  = FALSE;  
	m_Show        = FALSE;
	m_Advance     = FALSE;
	Res_save[0]=0;
	Res_save[1]=0;
	Res_save[2]=0;
}

void CEEPROOMWriterDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT_OCODE_SET, m_operatorcode);
	DDV_MinMaxUInt(pDX, m_operatorcode, 0, 9999);
	DDX_Text(pDX, IDC_EDIT_PCCODE_SET, m_pccode);
	DDV_MinMaxUInt(pDX, m_pccode, 0, 9999);
	DDX_Text(pDX, IDC_EDIT_SN_SET, m_SN);
	DDV_MinMaxLong(pDX, m_SN, 0, 99999999);;
}

BEGIN_MESSAGE_MAP(CEEPROOMWriterDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BUTTON_DOWNLOAD, OnBnClickedButtonDownload)
//	ON_BN_CLICKED(ID_BUTTION_OPEN_DEV, OnBnClickedButtionOpenDev)
//	ON_BN_CLICKED(IDC_BUTTON_SHOW, OnBnClickedButtonShow)
//	ON_BN_CLICKED(IDC_CHECK1, OnBnClickedCheck1)
//	ON_BN_CLICKED(IDC_CHECK2, OnBnClickedCheck2)
//	ON_BN_CLICKED(IDC_CHECK3, OnBnClickedCheck3)
	ON_BN_CLICKED(IDC_BUTTON_OPEN_DEV, OnBnClickedButtonOpenDev)
	ON_BN_CLICKED(IDC_CHECK_OPEN_SHOW, OnBnClickedCheckOpenShow)
//	ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON_REPAIR, OnBnClickedButtonRepair)
//	ON_EN_CHANGE(IDC_EDIT9, OnEnChangeEdit9)
	ON_BN_CLICKED(IDC_BUTTON_ADVANCE, OnBnClickedButtonAdvance)
	ON_BN_CLICKED(IDC_BUTTON_EEPROM_READ, OnBnClickedButtonEepromRead)
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()


// CEEPROOMWriterDlg 消息处理程序

BOOL CEEPROOMWriterDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 将\“关于...\”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

		RECT bLineRect;
	this->GetDlgItem(IDC_STATIC_LINE)->GetWindowRect(&bLineRect);
	//this->GetWindowRect(&bDlgRect);
	//bDlgRect.bottom = bLineRect.bottom;
	//this->RedrawWindow(&bDlgRect,0,RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE);
	WINDOWPLACEMENT wPlace;
	this->GetWindowPlacement(&wPlace);
	m_HighthDe =	wPlace.rcNormalPosition.bottom - bLineRect.bottom;
	wPlace.rcNormalPosition.bottom = bLineRect.bottom;
	SetWindowPlacement(&wPlace);

	//设置默认信息
    CString PathString,SNFilePath,Cmd1FilePath,ShowString;
	FILE *pSn = NULL;
    GetFilePath(&PathString);
	Cmd1FilePath = PathString+CString("\\Cmd1.txt");
	pSn = fopen(Cmd1FilePath,"r");
	if(pSn !=NULL){
	  fscanf(pSn,"%d %d",&m_Pid,&m_Did);
	  fclose(pSn);
	}
	else
	{
		MessageBox("打开配置文件失败,请确认文件是否缺失!!",MB_OK);
	}
    
  
	this->GetDlgItem(IDC_EDIT_LOADER_SET)->SetWindowText("c0");
	this->GetDlgItem(IDC_EDIT_LOADER_SET)->EnableWindow(FALSE);
	this->GetDlgItem(IDC_EDIT_VID_SET)->SetWindowText("1c90");
	this->GetDlgItem(IDC_EDIT_VID_SET)->EnableWindow(FALSE);
	ShowString.Format("0%x",m_Pid);
	this->GetDlgItem(IDC_EDIT_PID_SET)->SetWindowText(ShowString);
	this->GetDlgItem(IDC_EDIT_PID_SET)->EnableWindow(FALSE);
	ShowString.Format("000%x",m_Did);
	this->GetDlgItem(IDC_EDIT_DID_SET)->SetWindowText(ShowString);	
	this->GetDlgItem(IDC_EDIT_DID_SET)->EnableWindow(FALSE);
	this->GetDlgItem(IDC_EDIT_OCODE_SET)->EnableWindow(FALSE);
	this->GetDlgItem(IDC_EDIT_PCCODE_SET)->EnableWindow(FALSE);
	this->GetDlgItem(IDC_EDIT_SN_SET)->EnableWindow(FALSE);
	this->GetDlgItem(IDC_BUTTON_EEPROM_READ)->EnableWindow(FALSE);
	this->GetDlgItem(IDC_BUTTON_ADVANCE)->EnableWindow(FALSE);
	//this->GetDlgItem(IDC_STATIC_PID)->EnableWindow(FALSE);
	//this->GetDlgItem(IDC_STATIC_DID)->EnableWindow(FALSE);
	
	///
    SYSTEMTIME bSystemTime;
	GetLocalTime(&bSystemTime);
	ShowSystemTime(&bSystemTime);
	///
	SNFilePath = PathString+CString("\\sn.txt");
	pSn = fopen(SNFilePath,"r");
	if(pSn !=NULL){
	  fscanf(pSn,"%d %d %d",&m_operatorcode,&m_pccode,&m_SN);
	  fclose(pSn);
	}
    
	UpdateData(FALSE);
	// TODO: 在此添加额外的初始化代码

	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}

void CEEPROOMWriterDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CEEPROOMWriterDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CEEPROOMWriterDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}
BOOLEAN CEEPROOMWriterDlg::bOpenDriver(HANDLE * phDeviceHandle)
{
	char completeDeviceName[64] = "";
    char pcMsg[64] = "";
	//char devname[] ="Ezusb-0";
	char devname[] ="PixelModem";

    strcat (completeDeviceName,
            "\\\\.\\"
            );

    strcat (completeDeviceName,
		    devname
		    );

    *phDeviceHandle = CreateFile(   completeDeviceName,
		                            GENERIC_WRITE,
		                            FILE_SHARE_WRITE,
		                            NULL,
		                            OPEN_EXISTING,
		                            0,
		                            NULL);

    if (*phDeviceHandle == INVALID_HANDLE_VALUE) {
        return (FALSE);
    } else {
        return (TRUE);
    } 
}
void CEEPROOMWriterDlg::OnBnClickedButtonDownload()
{
	HANDLE  hDevice = NULL;
	BOOLEAN bResult = FALSE;
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;

    UpdateData(TRUE);
	if(m_pccode>=10000)
		return;
	if(m_operatorcode>=10000)
		return;
	if(m_SN>=100000000)
		return;

	if(bOpenDriver(&hDevice)!=TRUE)
	{
		MessageBox("打开设备失败,请确认设备是否正确安装!!",NULL,MB_OK);
		return;
	}
	else
	{
	   m_DownLoading = TRUE;
	   Res[0] = m_SN;
	   Res[1] = m_pccode;
	   Res[2] = m_operatorcode;

       myRequest.request =0xDA;
	   myRequest.value  = 0x00;
	   myRequest.index  = 0x00;
	   myRequest.direction   = 0;
	   myRequest.requestType = 2;
	   myRequest.recepient   = 0;      
	 
	   //  if(m_Select_0){
	   bResult = WriteCommandC0(hDevice ,&myRequest);
       if(!bResult)
	   {
	    	MessageBox("第一个指令提交失败!!",NULL,MB_OK);
	    }
	//	}
	//	if(m_Select_1){
	   myRequest.value = 0x01;
	   _sleep(50);
	   bResult = WriteCommandDat(hDevice,&myRequest);
	   if(!bResult)
       {
		     MessageBox("第二个指令提交失败!!",NULL,MB_OK);
	    }
	//	}
	//	if(m_Select_2){
	   myRequest.value = 0x02;	
	   _sleep(50);
	   bResult = WriteCommandOthr(hDevice,&myRequest);	
	   if(!bResult)
	   {
		    MessageBox("第三个指令提交失败!!",NULL,MB_OK);
	   }
	//	}
	}
  
	m_DownLoading = FALSE;
	
	OnBnClickedButtonShow();
	// TODO: Add your control notification handler code here
}
void CEEPROOMWriterDlg::GetFilePath(CString * PathString)
{
    CHAR  snPath[200],PathStr[200];
	GetCurrentDirectory(200,snPath);
    for(int i=0,j=0;i<180;i++,j++)
	{
		PathStr[j] =snPath[i];
		if(snPath[i]==_T('\\')){
			j++;
		    PathStr[j] =_T('\\');
	     }
     }
    *PathString = CString(PathStr)+CString("\\");

	return ;
}
BOOLEAN CEEPROOMWriterDlg::WriteCommandC0(HANDLE  hDevice,VENDOR_OR_CLASS_REQUEST_CONTROL *myRequest)
{
	  
	  BOOLEAN bResult     = FALSE;
	  int     nBytes      = 0;
	  ULONG bufferLength = 8;
	  LONGLONG buffer = 0; 

   /*   buffer=2;                //BcdDeviceId
	  buffer=(buffer<<=8)+1;   //Pid
	  buffer=(buffer<<=8)+129;
      buffer=(buffer<<=8)+28;  //vid
	  buffer=(buffer<<=8)+144;
	  buffer=(buffer<<=8)+192; //'C0'*/
	  buffer=(m_Did/256);               //BcdDeviceId
	  buffer=(buffer<<=8)+(m_Did%256);
	  buffer=(buffer<<=8)+(m_Pid/256);   //Pid
	  buffer=(buffer<<=8)+(m_Pid%256);
      buffer=(buffer<<=8)+28;  //vid
	  buffer=(buffer<<=8)+144;
	  buffer=(buffer<<=8)+192; //'C0'

	  Res_save[0] = buffer;
	  bResult = SubmitCmd(hDevice,myRequest,&buffer,bufferLength);
	  return bResult;
}
BOOLEAN CEEPROOMWriterDlg::WriteCommandDat(HANDLE  hDevice,VENDOR_OR_CLASS_REQUEST_CONTROL *myRequest)
{
	  BOOLEAN bResult     = FALSE;
	  ULONG    bufferLength = 8;
	  LONGLONG buffer = 0;
	  SYSTEMTIME bSystemTime;
	  GetLocalTime(&bSystemTime);
	  //bSystemTime.wHour+=8;
      //bSystemTime.wHour%=24;

	  buffer =  bSystemTime.wSecond;
	  buffer = (buffer<<8)+bSystemTime.wMinute;
	  buffer = (buffer<<8)+bSystemTime.wHour;
	  buffer = (buffer<<8)+bSystemTime.wDay;
	  buffer = (buffer<<8)+bSystemTime.wMonth;
	  buffer = (buffer<<16)+bSystemTime.wYear;

	  Res_save[1] = buffer;

⌨️ 快捷键说明

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