📄 eeproom-writerdlg.cpp
字号:
// 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 + -