📄 filemakerdlg.cpp
字号:
// FileMakerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "FileMaker.h"
#include "FileMakerDlg.h"
#include "io.h"
#include "fcntl.h"
#include "process.h"
#include <mmsystem.h>
#include "Journal.h"
#include "writedata.h"
#include <malloc.h>
#include <assert.h>
#include <winioctl.h>
#include "Ezusbsys.h"
#include "UsbDiagSession.h"
#include "windows.h"
#include "wingdi.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define SAMPLE_LINE 288
#define SAMPLE_POINT 454
#define TRANS_COMMOND 0xAA
#define DATA_RD 0x35 //数据读
#define DATA_RDREQ 0x3A //数据读请求
#define DATA_WR 0x55 //数据写
#define FLASH_WR 0xAA //FLASH改写
#define TEST_CMD 0x00 //测试
#define SYSTEM_SET 0xC3 //系统设置
#define DATA_CHK 0xA5 //数据校验
#define DATA_BACK 0x53 //回送数据
#define MODE_SET 0x30 //模式设置
#define CTRL_CMD 0x31 //控制指令
#define SHAK_CMD 0x32 //交互指令
#define FLASH_ERASE 0x33 //FLASH擦除
extern char TheCommondDataSend[32];
extern int TheCommondDataLength;
extern int TheCommondDataNextSend;
int TheWriteDataLength;
unsigned char * TheWriteDataBuffer;
BOOL AllthreadQuit=FALSE,OnlyCheckFlashData;
CEvent FileMakerReplyEvent;
CEvent ReceiveFileMaker;
extern BOOL ConnectErrorHappen;
CJournal m_Journal;
HANDLE hThread_USB_Video=NULL;
HANDLE hThread_USB_ISO_READ=NULL;
HANDLE hThread_USB_ISO_WRITE=NULL;
unsigned WINAPI USB_Video_Thread(LPVOID pParam);
unsigned WINAPI USB_ISO_READ_Thread(LPVOID pParam);
unsigned WINAPI USB_ISO_WRITE_Thread(LPVOID pParam);
BOOL USBconnectstate = FALSE;
BOOL USB_Video_transfer = FALSE,USB_Video_Playing = FALSE;
HANDLE hTimeDelayEvent;
HWND TheHandleFileMakerDlg;
int TheTimeCounter;
BOOL Stop_Video_Connect,Stop_ISO_READ,Stop_ISO_WRITE;
UsbDiagSession session;
CWriteData m_mydata;
CString TheWriteDataFilesName;
BOOL TheChannelEnable;
BOOL TheDeviceSampleState=FALSE;
unsigned char * TheViewDataBuffer;
BOOL TheFlagStartPlay = FALSE;
BOOL TheFlagVideoStartUp = FALSE;
BOOL TheFlagResetDevice = FALSE;
BOOL TheFlagDataTranfer = FALSE;
int TheCurrentUpdateMode=0; //数据更新模式
BOOL TheUpdateDataReady = FALSE;
int TheUpdateStartAddress = 0x0000;
int TheUpdateDownLoadStep = 0,TheUpdateDataAddress=0,TheUpdateDataLength = 0;
unsigned char * TheUpdateDataBuffer;
#define _MAX_DOWNLOADBUFPKG_NUM_ 32
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileMakerDlg dialog
CFileMakerDlg::CFileMakerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFileMakerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CFileMakerDlg)
m_TimeCounter = _T("0");
m_USBconnected = FALSE;
m_USBtransferring = FALSE;
m_DataWriteChannel1 = FALSE;
m_PlayFileName = _T("TEST");
m_SampleState = FALSE;
m_FlashUpdateMode = FALSE;
m_CommondDataStr = _T("");
m_FlashUpdateAddr = _T("00000H");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CFileMakerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFileMakerDlg)
DDX_Control(pDX, IDC_EDIT3, m_FlashUpdateAddrCtrl);
DDX_Control(pDX, IDC_DTMF_SEND, m_CommondDataSend);
DDX_Control(pDX, IDC_EDIT2, m_CommondDataCtrl);
DDX_Control(pDX, IDC_CHECK4, m_FileModeCtrl);
DDX_Control(pDX, IDC_LIST1, m_MessageList);
DDX_Control(pDX, IDC_EDIT1, m_FileNameCtrl);
DDX_Control(pDX, IDC_BUTTON1, m_ButtonUpdate);
DDX_Control(pDX, IDC_CHECK3, m_DataWRctrlCH1);
DDX_Control(pDX, IDC_BUTTON_OPEN, m_ButtonOpen);
DDX_Control(pDX, IDC_BUTTON_READ, m_ButtonStart);
DDX_Text(pDX, IDC_STATIC_TIMECNT, m_TimeCounter);
DDX_Check(pDX, IDC_CHECK1, m_USBconnected);
DDX_Check(pDX, IDC_CHECK2, m_USBtransferring);
DDX_Check(pDX, IDC_CHECK3, m_DataWriteChannel1);
DDX_Text(pDX, IDC_EDIT1, m_PlayFileName);
DDX_Check(pDX, IDC_CHECK11, m_SampleState);
DDX_Check(pDX, IDC_CHECK4, m_FlashUpdateMode);
DDX_Text(pDX, IDC_EDIT2, m_CommondDataStr);
DDX_Text(pDX, IDC_EDIT3, m_FlashUpdateAddr);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CFileMakerDlg, CDialog)
//{{AFX_MSG_MAP(CFileMakerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_READ, OnButtonRead)
ON_BN_CLICKED(IDC_BUTTON_OPEN, OnButtonOpen)
ON_BN_CLICKED(IDC_BUTTON1, OnButtonUpdate)
ON_BN_CLICKED(IDC_BUTTON2, OnButtonClear)
ON_BN_CLICKED(IDC_BUTTON3, OnButtonReset)
ON_BN_CLICKED(IDC_CHECK11, OnCheckStartUp)
ON_BN_CLICKED(IDC_CHECK4, OnCheck4)
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2)
ON_BN_CLICKED(IDC_DTMF_SEND, OnCommondDataSend)
ON_MESSAGE(MW_SOMEONEMSG,OnSomeOneMsg)
ON_EN_CHANGE(IDC_EDIT3, OnChangeEdit3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFileMakerDlg message handlers
BOOL CFileMakerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
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);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
TheHandleFileMakerDlg = GetSafeHwnd();
m_Journal.StartRecord ("c:\\log\\USBtestlog.txt");
TheWriteDataBuffer = (unsigned char * )malloc( 1050000 ); //1M bytes buffer
TheViewDataBuffer = (unsigned char *)malloc( 128*1024 );
if( TheWriteDataBuffer == NULL || TheViewDataBuffer == NULL )
{ AfxMessageBox("不能分配足够的数据缓冲空间!");
return TRUE;
}
TheWriteDataFilesName = _T("TEST01.PCM");
if(!session.Init ())
{
MessageBox(_T(" 初始化错误\n驱动程序未安装或通信线路未联接"),_T("安装错误"),MB_OK|MB_ICONHAND);
//OnCancel();
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CFileMakerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CFileMakerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
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;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CFileMakerDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
int chtoint(char ch)
{ if (ch>47 && ch<58 || ch>64 && ch<71)
if (ch<58) return(ch-48);
else return(ch-55);
return(-1);
}
int updcrcr(int crc,int c)
{
int i;
for(i=0;i<8;i++)
{
if((crc ^ c) & 1) crc=(crc>>1)^0xA001; // 0xA001 crc16 mask
else crc>>=1;
c>>=1;
}
return crc;
}
void CFileMakerDlg::OnButtonRead()
{
// TODO: Add your control notification handler code here
USB_Video_transfer = TRUE;
TheFlagDataTranfer = TRUE;
/* if ( !USB_Video_transfer )
{
TheFlagDataTranfer = TRUE;
m_DataWRctrlCH1.SetButtonStyle(BS_3STATE,TRUE);
char str[50];
if (TheChannelEnable)
{ sprintf(str,"c:\\log\\%s",TheWriteDataFilesName);
if (!m_mydata.BuildBufferFile(str) )
{ TheChannelEnable = FALSE;
return;
}
}
USB_Video_transfer = TRUE;
m_ButtonStart.SetWindowText(_T("停止数据传输"));
}
else
{
USB_Video_transfer = FALSE;
m_ButtonStart.SetWindowText(_T("开始数据传输"));
m_ButtonStart.EnableWindow(FALSE);
m_ButtonOpen.EnableWindow(TRUE);
m_DataWRctrlCH1.SetButtonStyle(BS_AUTOCHECKBOX,TRUE);
}
PostMessage(MW_SOMEONEMSG, 0,0);*/
}
void CFileMakerDlg::OnButtonOpen()
{
// TODO: Add your control notification handler code here
if ( !USBconnectstate )
{
USBconnectstate = TRUE;
TheTimeCounter = 0;
m_ButtonStart.EnableWindow(TRUE);
PostMessage(MW_SOMEONEMSG, 0,0);
DWORD dwThreadID;
Stop_Video_Connect = FALSE;
m_ButtonOpen.SetWindowText(_T("关闭设备联接"));
hThread_USB_Video=(HANDLE)_beginthreadex(NULL,0,USB_Video_Thread,NULL,0,(unsigned int *)&dwThreadID);
m_FileModeCtrl.EnableWindow(TRUE);
}
else
{
//if ( USB_Video_transfer )
// OnButtonRead();
//if ( USB_Video_Playing )
// OnButtonUpdate();
Stop_Video_Connect = TRUE;
if(hThread_USB_Video!=NULL)
WaitForSingleObject(hThread_USB_Video,INFINITE);
m_ButtonStart.EnableWindow(FALSE);
m_ButtonOpen.SetWindowText(_T("打开设备联接"));
m_FileModeCtrl.EnableWindow(FALSE);
USBconnectstate = FALSE;
}
}
BEGIN_EVENTSINK_MAP(CFileMakerDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CFileMakerDlg)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CFileMakerDlg::OnSomeOneMsg(WPARAM wParam , LPARAM lParam)
{
CString MsgStr,tmp;
int i,j,data;
CDC* pDC;
COLORREF cl;
unsigned char * pbuf = TheViewDataBuffer;
// CBitmap testmap;
// CPoint pt;
// CSize size(SAMPLE_POINT,SAMPLE_LINE);
// BITMAP bm;
// CDC dcMem;
switch( wParam )
{ case 0 :
UpdateData(TRUE);
m_USBconnected = USBconnectstate;
m_TimeCounter.Format("%d",TheTimeCounter);
UpdateData(FALSE);
break;
case 1 :
m_ButtonUpdate.SetWindowText(_T("开始更新"));
m_ButtonUpdate.EnableWindow(FALSE);
UpdateData(FALSE);
break;
case 2 :
pDC=GetDC();
/*
//testmap.SetBitmapBits(SAMPLE_POINT*SAMPLE_LINE, pbuf );
//testmap.CreateBitmap( SAMPLE_POINT, SAMPLE_LINE, 0, SAMPLE_POINT*SAMPLE_LINE, pbuf );
pt.x = 100;
pt.y = 250;
//pDC->DrawState(pt,size, &testmap, DST_BITMAP | DSS_NORMAL, NULL );
//pDC->BitBlt(100, 250, 412, 288, ( CDC* ) &testmap, 0, 0, SRCCOPY );
//testmap.LoadBitmap(IDB_BITMAP1);
dcMem.CreateCompatibleDC(pDC);
dcMem.SelectObject(&testmap);
testmap.GetObject(sizeof(bm),&bm);
pDC->BitBlt(100, 250, bm.bmWidth, bm.bmHeight, &dcMem, 0, 0, SRCCOPY );
dcMem.DeleteDC();
testmap.DeleteObject();
*/
for ( j=0;j<SAMPLE_LINE-1;j++ )
{
for ( i=0;i<SAMPLE_POINT;i++ )
{
data = *pbuf ;
//data = ( data << 7 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -