// QTestDlg.cpp : implementation file // #include "stdafx.h" #include "QTest.h" #include "QTestDlg.h" #include "windows.h" #include "sli6_ext.h" #include #include #include #include extern CHAR SLI6_ErrorString[1024]; //XQErToAcXAcQAcErAcTo char strstatus[8][4] = {"X","Q","Er","TO", "AX","AQ","AEr","ATO"}; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // 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() ///////////////////////////////////////////////////////////////////////////// // CQTestDlg dialog CQTestDlg::CQTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CQTestDlg::IDD, pParent) { //{{AFX_DATA_INIT(CQTestDlg) m_dataval = _T(""); m_fromval = _T(""); m_tillval = _T(""); m_1Nval = 0; m_2Nval = 0; m_3Nval = 0; m_4Nval = 0; m_5Nval = 0; m_6Nval = 0; m_1Aval = 0; m_2Aval = 0; m_3Aval = 0; m_5Aval = 0; m_6Aval = 0; m_1Fval = 0; m_2Fval = 0; m_3Fval = 0; m_4Fval = 0; m_5Fval = 0; m_6Fval = 0; m_4Aval = 0; m_1ch = FALSE; m_2ch = FALSE; m_3ch = FALSE; m_4ch = FALSE; m_5ch = FALSE; m_6ch = FALSE; m_ErrorCheck = FALSE; m_1Aerr = 0; m_2Aerr = 0; m_3Aerr = 0; m_4Aerr = 0; m_5Aerr = 0; m_6Aerr = 0; m_1Ferr = 0; m_2Ferr = 0; m_3Ferr = 0; m_4Ferr = 0; m_5Ferr = 0; m_6Ferr = 0; m_ComboCardV = _T(""); m_LAMAutoV = FALSE; m_SizeVal = _T(""); m_TimeEn = FALSE; m_StatusEn = FALSE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); dis_ico = AfxGetApp()->LoadIcon(IDI_DISABLEICO); ena_ico = AfxGetApp()->LoadIcon(IDI_ENABLEICO); fire_ico = AfxGetApp()->LoadIcon(IDI_FIREICO); for(int i=0;i < 6;i++) CN[i]=NULL; } void CQTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CQTestDlg) DDX_Control(pDX, IDC_EDIT29, m_SizeCtr); DDX_Control(pDX, IDC_LIST1, m_LogIntC); DDX_Control(pDX, IDC_BUTTON9, m_6Lam); DDX_Control(pDX, IDC_BUTTON8, m_5Lam); DDX_Control(pDX, IDC_BUTTON7, m_4Lam); DDX_Control(pDX, IDC_BUTTON6, m_3Lam); DDX_Control(pDX, IDC_BUTTON5, m_2Lam); DDX_Control(pDX, IDC_BUTTON4, m_1Lam); DDX_Control(pDX, IDC_COMBOCard, m_ComboCardC); DDX_Control(pDX, IDC_BUTTON2, m_StartCtr); DDX_Control(pDX, IDC_EDIT26, m_wdataCtr); DDX_Control(pDX, IDC_EDIT28, m_tillCtr); DDX_Control(pDX, IDC_EDIT27, m_FromCtr); DDX_Control(pDX, IDC_LIST2, m_LogCtr); DDX_Control(pDX, IDC_EDIT46, m_6FerrC); DDX_Control(pDX, IDC_EDIT45, m_5FerrC); DDX_Control(pDX, IDC_EDIT44, m_4FerrC); DDX_Control(pDX, IDC_EDIT43, m_3FerrC); DDX_Control(pDX, IDC_EDIT42, m_2FerrC); DDX_Control(pDX, IDC_EDIT41, m_1FerrC); DDX_Control(pDX, IDC_EDIT40, m_6AerrC); DDX_Control(pDX, IDC_EDIT39, m_5AerrC); DDX_Control(pDX, IDC_EDIT38, m_4AerrC); DDX_Control(pDX, IDC_EDIT37, m_3AerrC); DDX_Control(pDX, IDC_EDIT36, m_2AerrC); DDX_Control(pDX, IDC_EDIT35, m_1AerrC); DDX_Control(pDX, IDC_EDIT25, m_6FC); DDX_Control(pDX, IDC_EDIT24, m_5FC); DDX_Control(pDX, IDC_EDIT23, m_4FC); DDX_Control(pDX, IDC_EDIT22, m_3FC); DDX_Control(pDX, IDC_EDIT21, m_2FC); DDX_Control(pDX, IDC_EDIT20, m_1FC); DDX_Control(pDX, IDC_EDIT19, m_6AC); DDX_Control(pDX, IDC_EDIT18, m_5AC); DDX_Control(pDX, IDC_EDIT17, m_4AC); DDX_Control(pDX, IDC_EDIT16, m_3AC); DDX_Control(pDX, IDC_EDIT15, m_2AC); DDX_Control(pDX, IDC_EDIT14, m_1AC); DDX_Control(pDX, IDC_EDIT13, m_6NC); DDX_Control(pDX, IDC_EDIT12, m_5NC); DDX_Control(pDX, IDC_EDIT11, m_4NC); DDX_Control(pDX, IDC_EDIT10, m_3NC); DDX_Control(pDX, IDC_EDIT9, m_2NC); DDX_Control(pDX, IDC_EDIT8, m_1NC); DDX_Text(pDX, IDC_EDIT26, m_dataval); DDV_MaxChars(pDX, m_dataval, 10); DDX_Text(pDX, IDC_EDIT27, m_fromval); DDV_MaxChars(pDX, m_fromval, 10); DDX_Text(pDX, IDC_EDIT28, m_tillval); DDV_MaxChars(pDX, m_tillval, 10); DDX_Text(pDX, IDC_EDIT8, m_1Nval); DDX_Text(pDX, IDC_EDIT9, m_2Nval); DDX_Text(pDX, IDC_EDIT10, m_3Nval); DDX_Text(pDX, IDC_EDIT11, m_4Nval); DDX_Text(pDX, IDC_EDIT12, m_5Nval); DDX_Text(pDX, IDC_EDIT13, m_6Nval); DDX_Text(pDX, IDC_EDIT14, m_1Aval); DDX_Text(pDX, IDC_EDIT15, m_2Aval); DDX_Text(pDX, IDC_EDIT16, m_3Aval); DDX_Text(pDX, IDC_EDIT18, m_5Aval); DDX_Text(pDX, IDC_EDIT19, m_6Aval); DDX_Text(pDX, IDC_EDIT20, m_1Fval); DDX_Text(pDX, IDC_EDIT21, m_2Fval); DDX_Text(pDX, IDC_EDIT22, m_3Fval); DDX_Text(pDX, IDC_EDIT23, m_4Fval); DDX_Text(pDX, IDC_EDIT24, m_5Fval); DDX_Text(pDX, IDC_EDIT25, m_6Fval); DDX_Text(pDX, IDC_EDIT17, m_4Aval); DDX_Check(pDX, IDC_CHECK2, m_1ch); DDX_Check(pDX, IDC_CHECK3, m_2ch); DDX_Check(pDX, IDC_CHECK4, m_3ch); DDX_Check(pDX, IDC_CHECK5, m_4ch); DDX_Check(pDX, IDC_CHECK6, m_5ch); DDX_Check(pDX, IDC_CHECK7, m_6ch); DDX_Check(pDX, IDC_CHECK11, m_ErrorCheck); DDX_Text(pDX, IDC_EDIT35, m_1Aerr); DDX_Text(pDX, IDC_EDIT36, m_2Aerr); DDX_Text(pDX, IDC_EDIT37, m_3Aerr); DDX_Text(pDX, IDC_EDIT38, m_4Aerr); DDX_Text(pDX, IDC_EDIT39, m_5Aerr); DDX_Text(pDX, IDC_EDIT40, m_6Aerr); DDX_Text(pDX, IDC_EDIT41, m_1Ferr); DDX_Text(pDX, IDC_EDIT42, m_2Ferr); DDX_Text(pDX, IDC_EDIT43, m_3Ferr); DDX_Text(pDX, IDC_EDIT44, m_4Ferr); DDX_Text(pDX, IDC_EDIT45, m_5Ferr); DDX_Text(pDX, IDC_EDIT46, m_6Ferr); DDX_CBString(pDX, IDC_COMBOCard, m_ComboCardV); DDV_MaxChars(pDX, m_ComboCardV, 1); DDX_Check(pDX, IDC_CHECK1, m_LAMAutoV); DDX_Text(pDX, IDC_EDIT29, m_SizeVal); DDV_MaxChars(pDX, m_SizeVal, 8); DDX_Check(pDX, IDC_CHECK10, m_TimeEn); DDX_Control(pDX, IDC_RADIO1, m_rInc); DDX_Control(pDX, IDC_RADIO2, m_rNInc); DDX_Control(pDX, IDC_RADIO3, m_r16); DDX_Control(pDX, IDC_RADIO4, m_r24); DDX_Control(pDX, IDC_RADIO5, m_rmemtest); DDX_Check(pDX, IDC_CHECK9, m_StatusEn); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CQTestDlg, CDialog) //{{AFX_MSG_MAP(CQTestDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON2, OnButtonStart) ON_EN_CHANGE(IDC_EDIT1, OnChangeCardN) ON_BN_CLICKED(IDC_CHECK2, OnCh1) ON_BN_CLICKED(IDC_CHECK4, OnCh3) ON_BN_CLICKED(IDC_CHECK3, OnCh2) ON_BN_CLICKED(IDC_CHECK5, OnCh4) ON_BN_CLICKED(IDC_CHECK6, OnCh5) ON_BN_CLICKED(IDC_CHECK7, OnCh6) ON_BN_CLICKED(IDC_CHECK11, OnChError) ON_BN_CLICKED(IDC_RADIO1, OnRInc) ON_BN_CLICKED(IDC_RADIO2, OnRNInc) ON_BN_CLICKED(IDC_RADIO3, OnR16bit) ON_BN_CLICKED(IDC_RADIO4, OnR24bit) ON_BN_CLICKED(IDC_BUTTON1, OnButtonStop) ON_BN_CLICKED(IDC_BUTTON3, OnClear) ON_CBN_SELCHANGE(IDC_COMBOCard, OnSelchangeCOMBOCard) ON_WM_SETCURSOR() ON_BN_CLICKED(IDC_BUTTON4, OnLAM1) ON_BN_CLICKED(IDC_BUTTON5, OnLAM2) ON_BN_CLICKED(IDC_BUTTON6, OnLAM3) ON_BN_CLICKED(IDC_BUTTON7, OnLAM4) ON_BN_CLICKED(IDC_BUTTON8, OnLAM5) ON_BN_CLICKED(IDC_BUTTON9, OnLAM6) ON_BN_CLICKED(IDC_CHECK1, OnLAMAuto) ON_BN_CLICKED(IDC_RADIO5, OnMemTest) ON_BN_CLICKED(IDC_BUTTON10, OnClearStatus) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CQTestDlg message handlers BOOL CQTestDlg::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 //this->m_1Lam //this->m_1Lam.SetIcon(::LoadStandardIcon(IDI_APPLICATION)); this->m_1Lam.SetIcon(ena_ico); this->m_2Lam.SetIcon(ena_ico); this->m_3Lam.SetIcon(ena_ico); this->m_4Lam.SetIcon(ena_ico); this->m_5Lam.SetIcon(ena_ico); this->m_6Lam.SetIcon(ena_ico); // TODO: Add extra initialization here /// настройка диалога //////////////////////// ///////// открываем карточки //////////////////// int i=1; CString str; // while(OpenCard(i,1) != -1) i++; // if(i == 1) // { // ::AfxMessageBox("No Cards Found!"); // //exit(0); // } this->m_ComboCardC.ResetContent(); for(int k=1;k < 6;k++) { str.Format("%d",k); this->m_ComboCardC.InsertString(k-1,str); } // while(i > 1) CloseCard(i--); CardN = 1; WORD status,data = 0x1F; for(int cn = 0;cn < 6; cn++) { if( (CN[cn] = OpenCrate(CardN,cn+1)) != -1) { cam16write(CN[cn],0,1,&data); cam16read(CN[cn],0,0,&status); status |= 0x40; cam16write(CN[cn],0,0,&status); SetIntOnLAMfunc(CN[cn],intf); LAMIntEnable(CN[cn],this); ClearStatus(CN[cn]); } } this->m_ComboCardC.SetCurSel(0); ////////////////////////////////////////////////// m_1LB = false; m_2LB = false; m_3LB = false; m_4LB = false; m_5LB = false; m_6LB = false; // this->m_1Lam.SetState(1); // this->m_2Lam.SetState(1); // this->m_3Lam.SetState(1); // this->m_4Lam.SetState(1); // this->m_5Lam.SetState(1); // this->m_6Lam.SetState(1); m_1NC.LimitText(2);m_1NC.EnableWindow(false); m_2NC.LimitText(2);m_2NC.EnableWindow(false); m_3NC.LimitText(2);m_3NC.EnableWindow(false); m_4NC.LimitText(2);m_4NC.EnableWindow(false); m_5NC.LimitText(2);m_5NC.EnableWindow(false); m_6NC.LimitText(2);m_6NC.EnableWindow(false); m_1AC.LimitText(2);m_1AC.EnableWindow(false); m_2AC.LimitText(2);m_2AC.EnableWindow(false); m_3AC.LimitText(2);m_3AC.EnableWindow(false); m_4AC.LimitText(2);m_4AC.EnableWindow(false); m_5AC.LimitText(2);m_5AC.EnableWindow(false); m_6AC.LimitText(2);m_6AC.EnableWindow(false); m_1FC.LimitText(2);m_1FC.EnableWindow(false); m_2FC.LimitText(2);m_2FC.EnableWindow(false); m_3FC.LimitText(2);m_3FC.EnableWindow(false); m_4FC.LimitText(2);m_4FC.EnableWindow(false); m_5FC.LimitText(2);m_5FC.EnableWindow(false); m_6FC.LimitText(2);m_6FC.EnableWindow(false); m_1AerrC.LimitText(2);m_1AerrC.EnableWindow(false); m_2AerrC.LimitText(2);m_2AerrC.EnableWindow(false); m_3AerrC.LimitText(2);m_3AerrC.EnableWindow(false); m_4AerrC.LimitText(2);m_4AerrC.EnableWindow(false); m_5AerrC.LimitText(2);m_5AerrC.EnableWindow(false); m_6AerrC.LimitText(2);m_6AerrC.EnableWindow(false); m_1FerrC.LimitText(2);m_1FerrC.EnableWindow(false); m_2FerrC.LimitText(2);m_2FerrC.EnableWindow(false); m_3FerrC.LimitText(2);m_3FerrC.EnableWindow(false); m_4FerrC.LimitText(2);m_4FerrC.EnableWindow(false); m_5FerrC.LimitText(2);m_5FerrC.EnableWindow(false); m_6FerrC.LimitText(2);m_6FerrC.EnableWindow(false); m_r16.SetCheck(1); m_rInc.SetCheck(1); m_FromCtr.EnableWindow(); m_tillCtr.EnableWindow(); m_wdataCtr.EnableWindow(false); m_SizeCtr.EnableWindow(false); m_1NC.SetWindowText("2"); m_2NC.SetWindowText("2"); m_3NC.SetWindowText("2"); m_4NC.SetWindowText("2"); m_5NC.SetWindowText("2"); m_6NC.SetWindowText("2"); m_FromCtr.SetWindowText("0"); m_tillCtr.SetWindowText("0x100000"); //// инициализация //////////////////////////// m_bits = false; m_Mode = 0; this->hThread = NULL; return TRUE; // return TRUE unless you set the focus to a control } void CQTestDlg::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 CQTestDlg::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 CQTestDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CQTestDlg::OnButtonStart() { // TODO: Add your control notification handler code here CString msg; //int CN[6][6]; unsigned short i=0; DWORD dwThreadId; // подготовка к запуску - блокировка елементов this->m_StartCtr.EnableWindow(false); this->m_ComboCardC.EnableWindow(false); ////////////////////////////////////////////// BeginWaitCursor(); if(hThread != NULL) return; this->UpdateData(); // снимаем данные с показателей :) if(this->m_TimeEn) start = clock(); hThread = CreateThread( NULL, // default security attributes 0, // use default stack size ThreadFunc, // thread function this, // argument to thread function 0, // use default creation flags &dwThreadId); // returns the thread identifier if (hThread == NULL) { msg += "CreateThread failed."; ::AfxMessageBox(msg); } //else{ //_getch(); // msg += "Waiting..."; // ::AfxMessageBox(msg); // WaitForSingleObject(hThread,INFINITE); // finish = clock(); //Sleep(1000000); // CloseHandle(hThread); //} } void CQTestDlg::OnChangeCardN() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here } void CQTestDlg::OnCh1() { // TODO: Add your control notification handler code here if(!this->m_1ch){ m_1NC.EnableWindow(); m_1AC.EnableWindow(); m_1FC.EnableWindow(); if(this->m_ErrorCheck){ m_1AerrC.EnableWindow(); m_1FerrC.EnableWindow(); } this->m_1ch = true; } else{ m_1NC.EnableWindow(false); m_1AC.EnableWindow(false); m_1FC.EnableWindow(false); m_1AerrC.EnableWindow(false); m_1FerrC.EnableWindow(false); this->m_1ch = false; } } void CQTestDlg::OnCh2() { // TODO: Add your control notification handler code here if(!this->m_2ch){ m_2NC.EnableWindow(); m_2AC.EnableWindow(); m_2FC.EnableWindow(); if(this->m_ErrorCheck){ m_2AerrC.EnableWindow(); m_2FerrC.EnableWindow(); } this->m_2ch = true; } else{ m_2NC.EnableWindow(false); m_2AC.EnableWindow(false); m_2FC.EnableWindow(false); m_2AerrC.EnableWindow(false); m_2FerrC.EnableWindow(false); this->m_2ch = false; } } void CQTestDlg::OnCh3() { if(!this->m_3ch){ m_3NC.EnableWindow(); m_3AC.EnableWindow(); m_3FC.EnableWindow(); if(this->m_ErrorCheck){ m_3AerrC.EnableWindow(); m_3FerrC.EnableWindow(); } this->m_3ch = true; } else{ m_3NC.EnableWindow(false); m_3AC.EnableWindow(false); m_3FC.EnableWindow(false); m_3AerrC.EnableWindow(false); m_3FerrC.EnableWindow(false); this->m_3ch = false; } } void CQTestDlg::OnCh4() { // TODO: Add your control notification handler code here if(!this->m_4ch){ m_4NC.EnableWindow(); m_4AC.EnableWindow(); m_4FC.EnableWindow(); if(this->m_ErrorCheck){ m_4AerrC.EnableWindow(); m_4FerrC.EnableWindow(); } this->m_4ch = true; } else{ m_4NC.EnableWindow(false); m_4AC.EnableWindow(false); m_4FC.EnableWindow(false); m_4AerrC.EnableWindow(false); m_4FerrC.EnableWindow(false); this->m_4ch = false; } } void CQTestDlg::OnCh5() { // TODO: Add your control notification handler code here if(!this->m_5ch){ m_5NC.EnableWindow(); m_5AC.EnableWindow(); m_5FC.EnableWindow(); if(this->m_ErrorCheck){ m_5AerrC.EnableWindow(); m_5FerrC.EnableWindow(); } this->m_5ch = true; } else{ m_5NC.EnableWindow(false); m_5AC.EnableWindow(false); m_5FC.EnableWindow(false); m_5AerrC.EnableWindow(false); m_5FerrC.EnableWindow(false); this->m_5ch = false; } } void CQTestDlg::OnCh6() { // TODO: Add your control notification handler code here if(!this->m_6ch){ m_6NC.EnableWindow(); m_6AC.EnableWindow(); m_6FC.EnableWindow(); if(this->m_ErrorCheck){ m_6AerrC.EnableWindow(); m_6FerrC.EnableWindow(); } this->m_6ch = true; } else{ m_6NC.EnableWindow(false); m_6AC.EnableWindow(false); m_6FC.EnableWindow(false); m_6AerrC.EnableWindow(false); m_6FerrC.EnableWindow(false); m_6ch = false; } } void CQTestDlg::OnChError() { // TODO: Add your control notification handler code here if(!m_ErrorCheck){ if(m_1ch){ m_1AerrC.EnableWindow(); m_1FerrC.EnableWindow(); } if(m_2ch){ m_2AerrC.EnableWindow(); m_2FerrC.EnableWindow(); } if(m_3ch){ m_3AerrC.EnableWindow(); m_3FerrC.EnableWindow(); } if(m_4ch){ m_4AerrC.EnableWindow(); m_4FerrC.EnableWindow(); } if(m_5ch){ m_5AerrC.EnableWindow(); m_5FerrC.EnableWindow(); } if(m_6ch){ m_6AerrC.EnableWindow(); m_6FerrC.EnableWindow(); } m_ErrorCheck = true; } else{ m_1AerrC.EnableWindow(false); m_1FerrC.EnableWindow(false); m_2AerrC.EnableWindow(false); m_2FerrC.EnableWindow(false); m_3AerrC.EnableWindow(false); m_3FerrC.EnableWindow(false); m_4AerrC.EnableWindow(false); m_4FerrC.EnableWindow(false); m_5AerrC.EnableWindow(false); m_5FerrC.EnableWindow(false); m_6AerrC.EnableWindow(false); m_6FerrC.EnableWindow(false); m_ErrorCheck = false; } } void CQTestDlg::OnRInc() { // TODO: Add your control notification handler code here this->m_Mode = 0; this->m_FromCtr.EnableWindow(); this->m_tillCtr.EnableWindow(); this->m_wdataCtr.EnableWindow(false); this->m_SizeCtr.EnableWindow(false); } void CQTestDlg::OnRNInc() { // TODO: Add your control notification handler code here this->m_Mode = 1; this->m_FromCtr.EnableWindow(false); this->m_tillCtr.EnableWindow(false); this->m_SizeCtr.EnableWindow(false); this->m_wdataCtr.EnableWindow(); } void CQTestDlg::OnMemTest() { // TODO: Add your control notification handler code here this->m_Mode = 2; this->m_FromCtr.EnableWindow(false); this->m_tillCtr.EnableWindow(false); this->m_wdataCtr.EnableWindow(false); this->m_SizeCtr.EnableWindow(); } void CQTestDlg::OnR16bit() { // TODO: Add your control notification handler code here this->m_bits = false; } void CQTestDlg::OnR24bit() { // TODO: Add your control notification handler code here this->m_bits = true; } DWORD WINAPI ThreadFunc( LPVOID lpParam ) { CString msg,stime; int CN[6][6]; unsigned short i=0; unsigned short CardN; CQTestDlg* pDlg = (CQTestDlg*)lpParam; CardN = atoi(pDlg->m_ComboCardV); /* if(OpenCard(CardN,0) == -1) { msg.Format("Can't open card %d!\nError: %s", CardN,SLI6_ErrorString); ::AfxMessageBox(msg); pDlg->m_StartCtr.EnableWindow(true); return -1; } */ // msg.Format("Card %d opened!\nError",CardN); // ::AfxMessageBox(msg); if(pDlg->m_1ch) { if( (CN[i][0] = pDlg->CN[0]) == -1) { msg.Format("Can't open crate 1!\nError: %s", SLI6_ErrorString); AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } else{ CN[i][1] = pDlg->m_1Nval; CN[i][2] = pDlg->m_1Aval; CN[i][3] = pDlg->m_1Fval; if(pDlg->m_ErrorCheck) { CN[i][4] = pDlg->m_1Aerr; CN[i][5] = pDlg->m_1Ferr; } i++; } } if(pDlg->m_2ch) { if( (CN[i][0] = pDlg->CN[1]) == -1) { msg.Format("Can't open crate 2!\nError: %s", SLI6_ErrorString); AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } else{ CN[i][1] = pDlg->m_2Nval; CN[i][2] = pDlg->m_2Aval; CN[i][3] = pDlg->m_2Fval; if(pDlg->m_ErrorCheck) { CN[i][4] = pDlg->m_2Aerr; CN[i][5] = pDlg->m_2Ferr; } i++; } } if(pDlg->m_3ch) { if( (CN[i][0] = pDlg->CN[2]) == -1) { msg.Format("Can't open crate 3!\nError: %s", SLI6_ErrorString); AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } else{ CN[i][1] = pDlg->m_3Nval; CN[i][2] = pDlg->m_3Aval; CN[i][3] = pDlg->m_3Fval; if(pDlg->m_ErrorCheck) { CN[i][4] = pDlg->m_3Aerr; CN[i][5] = pDlg->m_3Ferr; } i++; } } if(pDlg->m_4ch) { if( (CN[i][0] = pDlg->CN[3]) == -1) { msg.Format("Can't open crate 4!\nError: %s", SLI6_ErrorString); AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } else{ CN[i][1] = pDlg->m_4Nval; CN[i][2] = pDlg->m_4Aval; CN[i][3] = pDlg->m_4Fval; if(pDlg->m_ErrorCheck) { CN[i][4] = pDlg->m_4Aerr; CN[i][5] = pDlg->m_4Ferr; } i++; } } if(pDlg->m_5ch) { if( (CN[i][0] = pDlg->CN[4]) == -1) { msg.Format("Can't open crate 5!\nError: %s", SLI6_ErrorString); AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } else{ CN[i][1] = pDlg->m_5Nval; CN[i][2] = pDlg->m_5Aval; CN[i][3] = pDlg->m_5Fval; if(pDlg->m_ErrorCheck) { CN[i][4] = pDlg->m_5Aerr; CN[i][5] = pDlg->m_5Ferr; } i++; } } if(pDlg->m_6ch) { if( (CN[i][0] = pDlg->CN[5]) == -1) { msg.Format("Can't open crate 6!\nError: %s", SLI6_ErrorString); AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } else{ CN[i][1] = pDlg->m_6Nval; CN[i][2] = pDlg->m_6Aval; CN[i][3] = pDlg->m_6Fval; if(pDlg->m_ErrorCheck) { CN[i][4] = pDlg->m_6Aerr; CN[i][5] = pDlg->m_6Ferr; } i++; } } if(i == 0) { msg = "No crates enabled!"; ::AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } /// тест from-till if(!pDlg->m_ErrorCheck) // без проверки ошибок { switch(pDlg->m_Mode) { case 0: // c инкрементом { DWORD begin=0,end=0; WORD status = 0; ///////////// проверка параметров ///////////////////// if( (pDlg->m_fromval.GetLength() == 0) || (pDlg->m_tillval.GetLength() == 0) ) { msg = "Wrong parameters!"; ::AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } ///////////// преобразование стр -> инт /////////////// if( (pDlg->m_fromval.GetLength() > 1) && (pDlg->m_fromval.GetAt(1) == 'x') ) begin = strtoul((LPCSTR)(pDlg->m_fromval),NULL,16); else begin = strtoul((LPCSTR)(pDlg->m_fromval),NULL,10); if( (pDlg->m_tillval.GetLength() > 1) && (pDlg->m_tillval.GetAt(1) == 'x') ) end = strtoul((LPCSTR)(pDlg->m_tillval),NULL,16); else end = strtoul((LPCSTR)(pDlg->m_tillval),NULL,10); /////////////////////////////////////////////////////// if(!pDlg->m_bits) // 16 бит { for(unsigned long t = begin; t < end; t++) for(unsigned long ch = 0; ch < i; ch++) cam16write(CN[ch][0],CN[ch][1],CN[ch][2],(WORD*)(&t) ); if(pDlg->m_StatusEn) { for(unsigned long ch = 0; ch < i; ch++) { status = cam16write(CN[ch][0],CN[ch][1],CN[ch][2],(WORD*)(&(end)) ); msg.Format("Crate: %d, status: ",CN[ch][0]&(0xFFFF)); // XQErToAcXAcQAcErAcTo for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } pDlg->m_LogCtr.AddString((LPCTSTR)msg); } }else{ for(unsigned long ch = 0; ch < i; ch++) cam16write(CN[ch][0],CN[ch][1],CN[ch][2],(WORD*)(&end) ); } } else{ // 24 бита for(unsigned long t = begin; t < end; t++) for(unsigned long ch = 0; ch < i; ch++) cam24write(CN[ch][0],CN[ch][1],CN[ch][2],&t); if(pDlg->m_StatusEn) { for(unsigned long ch = 0; ch < i; ch++) { status = cam24write(CN[ch][0],CN[ch][1],CN[ch][2],&end); msg.Format("Crate: %d, status: ",CN[ch][0]&(0xFFFF)); // XQErToAcXAcQAcErAcTo //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); } }else{ for(unsigned long ch = 0; ch < i; ch++) cam24write(CN[ch][0],CN[ch][1],CN[ch][2],&end); } } break; } case 1: // без инкремента { DWORD data = 0x0; WORD status; ///////////// преобразование стр -> инт /////////////// if( (pDlg->m_dataval.GetLength() > 1) && (pDlg->m_dataval.GetAt(1) == 'x') ) data = strtoul((LPCSTR)(pDlg->m_dataval),NULL,16); else data = strtoul((LPCSTR)(pDlg->m_dataval),NULL,10); ///////////////// цикл ///////////////////////////////// if(!pDlg->m_bits) // 16 бит { for(unsigned long ch = 0; ch < i; ch++) { status = cam16(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],(WORD*)(&data) ); msg.Format("Crate: %d data: 0x%0X",CN[ch][0]&(0xFFFF),data); if(pDlg->m_StatusEn) { msg += " status: "; //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// } pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } else{ // 24 бита for(unsigned long ch = 0; ch < i; ch++) { status = cam24(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],&data); msg.Format("Crate: %d data: 0x%0X",CN[ch][0]&(0xFFFF),data); pDlg->m_LogCtr.AddString((LPCTSTR)msg); if(pDlg->m_StatusEn) { msg += " status: "; //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// } pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } break; } case 2: // тест памяти { DWORD size; WORD data = 0x0; WORD status = 0; ///////////// проверка параметров ///////////////////// if( pDlg->m_SizeVal.GetLength() == 0 ) { msg = "Wrong parameters!"; ::AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } ///////////// преобразование стр -> инт /////////////// if( (pDlg->m_SizeVal.GetLength() > 1) && (pDlg->m_SizeVal.GetAt(1) == 'x') ) size = strtoul((LPCSTR)(pDlg->m_SizeVal),NULL,16); else size = strtoul((LPCSTR)(pDlg->m_SizeVal),NULL,10); if(!pDlg->m_bits) // 16 бит { /////////// подготовка данных /////////////////////// WORD* data16w = (WORD*)malloc(sizeof(WORD)*size); for(unsigned long t=0; t < size; t++) data16w[t] = (unsigned short)(t&0xFFFF); ///////////////////////////////////////////////////// for(unsigned short ch = 0; ch < i; ch++) { ////////////// подготовка ///////////////////////////// cam16(CN[ch][0],CN[ch][1],0,26,&data); cam16(CN[ch][0],CN[ch][1],0,18,&data); /////////////////////////////////////////////////////// if(pDlg->m_StatusEn) { status = cam16Block(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],size,data16w); msg.Format("Crate: %d status: ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } pDlg->m_LogCtr.AddString((LPCTSTR)msg); /////////////////////////////////////////////////// }else{ cam16Block(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],size,data16w); } } } else{ // 24 бита /////////// подготовка данных /////////////////////// DWORD* data24w = (DWORD*)malloc(sizeof(DWORD)*size); for(unsigned long t=0; t < size; t++) data24w[t] = t; ///////////////////////////////////////////////////// for(unsigned short ch = 0; ch < i; ch++) { ////////////// подготовка ///////////////////////////// cam16(CN[ch][0],CN[ch][1],0,26,&data); cam16(CN[ch][0],CN[ch][1],0,18,&data); /////////////////////////////////////////////////////// if(pDlg->m_StatusEn) { status = cam24Block(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],size,data24w); msg.Format("Crate: %d status: ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } pDlg->m_LogCtr.AddString((LPCTSTR)msg); ////////////////////////////////////////////////// }else{ cam24Block(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],size,data24w); } } } break; } } } else{ // с проверкой switch(pDlg->m_Mode) { case 0: // c инкрементом { DWORD begin=0,end=0,datar=0; WORD statusr = 0,statusw = 0; ///////////// проверка параметров ///////////////////// if( (pDlg->m_fromval.GetLength() == 0) || (pDlg->m_tillval.GetLength() == 0) ) { msg = "Wrong parameters!"; ::AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } ///////////// преобразование стр -> инт /////////////// if( (pDlg->m_fromval.GetLength() > 1) && (pDlg->m_fromval.GetAt(1) == 'x') ) begin = strtoul((LPCSTR)(pDlg->m_fromval),NULL,16); else begin = strtoul((LPCSTR)(pDlg->m_fromval),NULL,10); if( (pDlg->m_tillval.GetLength() > 1) && (pDlg->m_tillval.GetAt(1) == 'x') ) end = strtoul((LPCSTR)(pDlg->m_tillval),NULL,16); else end = strtoul((LPCSTR)(pDlg->m_tillval),NULL,10); ///////////// цикл /////////////////////////////////// if(!pDlg->m_bits) // 16 бит { for(unsigned long t = begin; t < end; t++) for(unsigned long ch = 0; ch < i; ch++) { cam16write(CN[ch][0],CN[ch][1],CN[ch][2],(WORD*)(&t) ); cam16read(CN[ch][0],CN[ch][1],CN[ch][4],(WORD*)(&datar)); if(datar != (t&0xFFFF)) { msg.Format("Crate %d writen 0x%0X, but readen 0x%0X",CN[ch][0]&(0xFFFF),t,datar); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } if(pDlg->m_StatusEn) // статус включен { for(unsigned long ch = 0; ch < i; ch++) { statusw = cam16write(CN[ch][0],CN[ch][1],CN[ch][2],(WORD*)(&end) ); statusr = cam16read(CN[ch][0],CN[ch][1],CN[ch][4],(WORD*)(&datar)); if(datar != (end&0xFFFF)) { msg.Format("Crate %d writen %0X, but readen %0X",CN[ch][0]&(0xFFFF),end,datar); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } msg.Format("Crate %d write status: ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((statusw >> b)&1) { msg += strstatus[7-b]; msg += " "; } //////////// распечатка статуса по битам ///////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); msg.Format("Crate %d read status: ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(b = 7;b >= 0; b--) if((statusr >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); } }else{ // статус выключен for(unsigned long ch = 0; ch < i; ch++) { cam16write(CN[ch][0],CN[ch][1],CN[ch][2],(WORD*)(&end) ); cam16read(CN[ch][0],CN[ch][1],CN[ch][4],(WORD*)(&datar)); if(datar != (end&0xFFFF)) { msg.Format("Crate %d writen %0X, but readen %0X",CN[ch][0]&(0xFFFF),end,datar); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } } } else{ // 24 бита for(unsigned long t = begin; t < end; t++) for(unsigned long ch = 0; ch < i; ch++) { cam24write(CN[ch][0],CN[ch][1],CN[ch][2],&t); cam24read(CN[ch][0],CN[ch][1],CN[ch][4],&datar); if(datar != (t&0xFFFFFF)) { msg.Format("Crate %d writen 0x%0X, but readen 0x%0X",CN[ch][0]&(0xFFFF),t,datar); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } if(pDlg->m_StatusEn) // статус включен { for(unsigned long ch = 0; ch < i; ch++) // последний цикл отдельно { statusw = cam24write(CN[ch][0],CN[ch][1],CN[ch][2],&t); statusr = cam24read(CN[ch][0],CN[ch][1],CN[ch][4],&datar); if(datar != (end&0xFFFFFF)) { msg.Format("Crate %d writen 0x%0X, but readen 0x%0X",CN[ch][0]&(0xFFFF),end,datar); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } msg.Format("Crate %d write status: ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((statusw >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); msg.Format("Crate %d read status: ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(b = 7;b >= 0; b--) if((statusr >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); } }else{ // статус выключен for(unsigned long ch = 0; ch < i; ch++) { cam24write(CN[ch][0],CN[ch][1],CN[ch][2],&end); cam24read(CN[ch][0],CN[ch][1],CN[ch][4],&datar); if(datar != (end&0xFFFFFF)) { msg.Format("Crate %d writen %0X, but readen %0X",CN[ch][0]&(0xFFFF),end,datar); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } } } break; } case 1: // без инкремента { DWORD data = 0,datar = 0; WORD status = 0; ///////////// преобразование стр -> инт /////////////// if( (pDlg->m_dataval.GetLength() > 1) && (pDlg->m_dataval.GetAt(1) == 'x') ) data = strtoul((LPCSTR)(pDlg->m_dataval),NULL,16); else data = strtoul((LPCSTR)(pDlg->m_dataval),NULL,10); ///////////// цикл //////////////////////////////////// if(!pDlg->m_bits) // 16 бит { for(unsigned long ch = 0; ch < i; ch++) { status = cam16(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],(WORD*)(&data) ); cam16(CN[ch][0],CN[ch][1],CN[ch][4],CN[ch][5],(WORD*)(&datar) ); msg.Format("Crate %d data: 0x%0X check: 0x%0X ",CN[ch][0]&(0xFFFF),(data&0xFFFF),(datar&0xFFFF)); if(pDlg->m_StatusEn) { msg += " status: "; //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// } pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } else{ // 24 бита for(unsigned long ch = 0; ch < i; ch++) { status = cam24(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],&data ); cam24(CN[ch][0],CN[ch][1],CN[ch][4],CN[ch][5],&datar ); msg.Format("Crate: %d data: 0x%0X check: 0x%0X ",CN[ch][0]&(0xFFFF),data,datar); if(pDlg->m_StatusEn) { msg += " status: "; //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((status >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// } pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } break; } case 2: // тест памяти { DWORD size; WORD data = 0x0; WORD statusr = 0,statusw = 0; ///////////// проверка параметров ///////////////////// if( pDlg->m_SizeVal.GetLength() == 0 ) { msg = "Wrong parameters!"; ::AfxMessageBox(msg); // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //////////////////////////// return 0; } ///////////// преобразование стр -> инт /////////////// if( (pDlg->m_SizeVal.GetLength() > 1) && (pDlg->m_SizeVal.GetAt(1) == 'x') ) size = strtoul((LPCSTR)(pDlg->m_SizeVal),NULL,16); else size = strtoul((LPCSTR)(pDlg->m_SizeVal),NULL,10); if(size > 0xFFFF) size = 0xFFFF; if(!pDlg->m_bits) // 16 бит { /////////// подготовка данных /////////////////////// WORD* data16w = (WORD*)malloc(sizeof(WORD)*size); WORD* data16r = (WORD*)malloc(sizeof(WORD)*size); for(unsigned long t=0; t < size; t++) data16w[t] = (unsigned short)(t&0xFFFF); ///////////////////////////////////////////////////// for(unsigned short ch = 0; ch < i; ch++) { ////////////// подготовка ///////////////////////////// cam16(CN[ch][0],CN[ch][1],0,26,&data); cam16(CN[ch][0],CN[ch][1],0,18,&data); ////////////// запись ///////////////////////////////// statusw = cam16Block(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],size,data16w); ////////////// подготовка ///////////////////////////// cam16(CN[ch][0],CN[ch][1],0,26,&data); cam16(CN[ch][0],CN[ch][1],0,18,&data); ////////////// чтение ///////////////////////////////// statusr = cam16Block(CN[ch][0],CN[ch][1],CN[ch][4],CN[ch][5],size,data16r); ////////////// сравнение ////////////////////////////// for(unsigned long t=0; t < size; t++) if (data16r[t] != (unsigned short)(t&0xFFFF)) { msg.Format("Crate %d: writen %0X, but readen %0X", CN[ch][0]&(0xFFFF),(unsigned short)(t&0xFFFF),data16r[t]); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } /////////////////////////////////////////////////////// if(pDlg->m_StatusEn) { msg.Format("Crate %d: Write status ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((statusw >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); msg.Format("Crate %d: Read status ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(b = 7;b >= 0; b--) if((statusr >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } } else{ // 24 бита /////////// подготовка данных /////////////////////// DWORD* data24w = (DWORD*)malloc(sizeof(DWORD)*size); DWORD* data24r = (DWORD*)malloc(sizeof(DWORD)*size); for(unsigned long t=0; t < size; t++) data24w[t] = t; ///////////////////////////////////////////////////// for(unsigned short ch = 0; ch < i; ch++) { ////////////// подготовка ///////////////////////////// cam16(CN[ch][0],CN[ch][1],0,26,&data); cam16(CN[ch][0],CN[ch][1],0,18,&data); /////////////// запись //////////////////////////////////////// cam24Block(CN[ch][0],CN[ch][1],CN[ch][2],CN[ch][3],size,data24w); ////////////// подготовка ///////////////////////////// cam16(CN[ch][0],CN[ch][1],0,26,&data); cam16(CN[ch][0],CN[ch][1],0,18,&data); /////////////// чтение //////////////////////////////// cam24Block(CN[ch][0],CN[ch][1],CN[ch][4],CN[ch][5],size,data24r); ////////////// сравнение ////////////////////////////// for(unsigned long t=0; t < size; t++) if (data24r[t] != t) { msg.Format("Crate:%d write:%0X read:%0X addr:%0X size:%0X", CN[ch][0]&(0xFFFF),t,data24r[t],t,size); pDlg->m_LogCtr.AddString((LPCTSTR)msg); } /////////////////////////////////////////////////////// if(pDlg->m_StatusEn) { msg.Format("Crate %d: Write status ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(int b = 7;b >= 0; b--) if((statusw >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); msg.Format("Crate %d: Read status ",CN[ch][0]&(0xFFFF)); //////////// распечатка статуса по битам ///////// for(b = 7;b >= 0; b--) if((statusr >> b)&1) { msg += strstatus[7-b]; msg += " "; } ////////////////////////////////////////////////// pDlg->m_LogCtr.AddString((LPCTSTR)msg); } } } break; } } } // время /////////////////////////// if(pDlg->m_TimeEn){ pDlg->finish = clock(); stime.Format("%lu msec",(unsigned long)(1000.0*(pDlg->finish-pDlg->start)/CLOCKS_PER_SEC)); pDlg->m_LogCtr.AddString(stime); } ///////////////////////////////////// // восстановление паратетров pDlg->hThread = NULL; pDlg->m_StartCtr.EnableWindow(true); pDlg->m_ComboCardC.EnableWindow(true); //pDlg->OnSet(pDlg->GetWindow(),NULL,NULL); //////////////////////////////////////// //pDlg->EndWaitCursor(); //pDlg->OnSetCursor(pDlg->GetActiveWindow(),NULL,NULL); //pDlg->Invalidate(false); //::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); // установить курсор, который взять из системы return 0; //CButton } void CQTestDlg::OnButtonStop() { CString stime; if(hThread != NULL) { TerminateThread(hThread,NULL); CloseHandle(hThread); finish = clock(); if(this->m_TimeEn) { stime.Format("%lu msec",(unsigned long)( 1000.0*(finish-start)/CLOCKS_PER_SEC )); this->m_LogCtr.AddString(stime); } // восстановление паратетров this->hThread = NULL; this->m_StartCtr.EnableWindow(true); this->m_ComboCardC.EnableWindow(true); //////////////////////////// } // TODO: Add your control notification handler code here } void CQTestDlg::OnClear() { // TODO: Add your control notification handler code here this->m_LogCtr.ResetContent(); this->m_LogIntC.ResetContent(); } void CQTestDlg::OnSelchangeCOMBOCard() { // TODO: Add your control notification handler code here int newCardN; CString msg; WORD status,data = 0x1F; // закрываем старые крейты for(int n = 0;n < 6;n++) if(CN[n] != NULL) { LAMIntDisable(CN[n]); CloseCrate(CN[n]); } newCardN = this->m_ComboCardC.GetCurSel() + 1; /* if(OpenCard(newCardN) == -1) { msg.Format("Can't open card %d: %s",newCardN,SLI6_ErrorString); AfxMessageBox(msg); this->m_ComboCardC.SetCurSel(CardN-1); }else{ CardN = newCardN; } */ for(int cn = 0;cn < 6;cn++) { if( (CN[cn] = OpenCrate(CardN,cn+1)) != -1) { cam16write(CN[cn],0,1,&data); cam16read(CN[cn],0,0,&status); status |= 0x40; cam16write(CN[cn],0,0,&status); if( SetIntOnLAMfunc(CN[cn],intf) == -1){ msg.Format("Can't set LAM function Crate: %d: %s",cn+1,SLI6_ErrorString); AfxMessageBox(msg); } if( LAMIntEnable(CN[cn],this) == -1) { msg.Format("Can't Enable LAM Crate: %d: %s",cn+1,SLI6_ErrorString); AfxMessageBox(msg); } ClearStatus(CN[cn]); }else{ msg.Format("Can't Open Crate: %d: %s",cn+1,SLI6_ErrorString); AfxMessageBox(msg); } } } void intf(int _CN, PVOID param) { CQTestDlg *pDlg = (CQTestDlg*)param; CString str; time_t ltime; // pDlg->UpdateData(); // снимаем данные с показателей :) if(!pDlg->m_LAMAutoV) { // LAMIntDisable(_CN); switch(_CN&(0xFFFF)) { case 1: pDlg->m_1Lam.SetIcon(pDlg->fire_ico); pDlg->m_1LB = true; break; case 2: pDlg->m_2Lam.SetIcon(pDlg->fire_ico); pDlg->m_2LB = true; break; case 3: pDlg->m_3Lam.SetIcon(pDlg->fire_ico); pDlg->m_3LB = true; break; case 4: pDlg->m_4Lam.SetIcon(pDlg->fire_ico); pDlg->m_4LB = true; break; case 5: pDlg->m_5Lam.SetIcon(pDlg->fire_ico); pDlg->m_5LB = true; break; case 6: pDlg->m_6Lam.SetIcon(pDlg->fire_ico); pDlg->m_6LB = true; break; } } else LAMIntEnable(_CN,pDlg); time(<ime); CString temp = ctime( <ime ); str.Format("LAM on Crate: %d At %s",_CN&(0xFFFF),temp.Mid(10,10)); pDlg->m_LogIntC.AddString(str); } CQTestDlg::~CQTestDlg() { } BOOL CQTestDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // TODO: Add your message handler code here and/or call default if(hThread != NULL) { ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT)); // установить курсор, который взять из системы return TRUE; } return CDialog::OnSetCursor(pWnd, nHitTest, message); } void CQTestDlg::OnLAM1() { // TODO: Add your control notification handler code here if(m_1LB) { // разрешить прерывание this->m_1Lam.SetIcon(ena_ico); m_1LB = false; LAMIntEnable(CN[0],this); } else { //this->m_1Lam.EnableWindow(0); this->m_1Lam.SetIcon(fire_ico); m_1LB = true; LAMIntDisable(CN[0]); } // this->m_1Lam.SetState(0); } void CQTestDlg::OnLAM2() { // TODO: Add your control notification handler code here if(m_2LB) { // разрешить прерывание this->m_2Lam.SetIcon(ena_ico); m_2LB = false; LAMIntEnable(CN[1],this); } else { this->m_2Lam.SetIcon(fire_ico); m_2LB = true; LAMIntDisable(CN[1]); } } void CQTestDlg::OnLAM3() { // TODO: Add your control notification handler code here if(m_3LB) { // разрешить прерывание this->m_3Lam.SetIcon(ena_ico); m_3LB = false; LAMIntEnable(CN[2],this); } else { this->m_3Lam.SetIcon(fire_ico); m_3LB = true; LAMIntDisable(CN[2]); } } void CQTestDlg::OnLAM4() { // TODO: Add your control notification handler code here if(m_4LB) { // разрешить прерывание this->m_4Lam.SetIcon(ena_ico); m_4LB = false; LAMIntEnable(CN[3],this); } else { this->m_4Lam.SetIcon(fire_ico); m_4LB = true; LAMIntDisable(CN[3]); } } void CQTestDlg::OnLAM5() { // TODO: Add your control notification handler code here if(m_5LB) { // разрешить прерывание this->m_5Lam.SetIcon(ena_ico); m_5LB = false; LAMIntEnable(CN[4],this); } else { this->m_5Lam.SetIcon(fire_ico); m_5LB = true; LAMIntDisable(CN[4]); } } void CQTestDlg::OnLAM6() { // TODO: Add your control notification handler code here if(m_6LB) { // разрешить прерывание this->m_6Lam.SetIcon(ena_ico); m_6LB = false; LAMIntEnable(CN[5],this); } else { this->m_6Lam.SetIcon(fire_ico); m_6LB = true; LAMIntDisable(CN[5]); } } void CQTestDlg::OnLAMAuto() { // TODO: Add your control notification handler code here if(this->m_LAMAutoV) this->m_LAMAutoV = false; //this->m_LAMAutoC else this->m_LAMAutoV = true; } void CQTestDlg::OnClearStatus() { // TODO: Add your control notification handler code here }