// SampDlg.cpp : implementation file // #include "stdafx.h" #include "Samp.h" #include "SampDlg.h" #include "aiousb.h" #include "DetectDialog.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSampDlg dialog CSampDlg::CSampDlg(CWnd* pParent /*=NULL*/) : CDialog(CSampDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSampDlg) m_output0 = FALSE; m_output1 = FALSE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CSampDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSampDlg) DDX_Control(pDX, IDC_IMAGE9, m_image9); DDX_Control(pDX, IDC_IMAGE8, m_image8); DDX_Control(pDX, IDC_IMAGE7, m_image7); DDX_Control(pDX, IDC_IMAGE6, m_image6); DDX_Control(pDX, IDC_IMAGE5, m_image5); DDX_Control(pDX, IDC_IMAGE4, m_image4); DDX_Control(pDX, IDC_IMAGE3, m_image3); DDX_Control(pDX, IDC_IMAGE2, m_image2); DDX_Control(pDX, IDC_IMAGE15, m_image15); DDX_Control(pDX, IDC_IMAGE14, m_image14); DDX_Control(pDX, IDC_IMAGE13, m_image13); DDX_Control(pDX, IDC_IMAGE12, m_image12); DDX_Control(pDX, IDC_IMAGE11, m_image11); DDX_Control(pDX, IDC_IMAGE10, m_image10); DDX_Control(pDX, IDC_IMAGE1, m_image1); DDX_Control(pDX, IDC_IMAGE0, m_image0); DDX_Check(pDX, IDC_OUTPUT0, m_output0); DDX_Check(pDX, IDC_OUTPUT1, m_output1); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSampDlg, CDialog) //{{AFX_MSG_MAP(CSampDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_BN_CLICKED(IDC_OUTPUT0, OnOutput0) ON_BN_CLICKED(IDC_OUTPUT1, OnOutput1) ON_BN_CLICKED(IDC_IMAGE0, OnImage0) ON_BN_CLICKED(IDC_IMAGE1, OnImage1) ON_BN_CLICKED(IDC_IMAGE10, OnImage10) ON_BN_CLICKED(IDC_IMAGE11, OnImage11) ON_BN_CLICKED(IDC_IMAGE12, OnImage12) ON_BN_CLICKED(IDC_IMAGE13, OnImage13) ON_BN_CLICKED(IDC_IMAGE14, OnImage14) ON_BN_CLICKED(IDC_IMAGE15, OnImage15) ON_BN_CLICKED(IDC_IMAGE2, OnImage2) ON_BN_CLICKED(IDC_IMAGE3, OnImage3) ON_BN_CLICKED(IDC_IMAGE4, OnImage4) ON_BN_CLICKED(IDC_IMAGE5, OnImage5) ON_BN_CLICKED(IDC_IMAGE6, OnImage6) ON_BN_CLICKED(IDC_IMAGE7, OnImage7) ON_BN_CLICKED(IDC_IMAGE8, OnImage8) ON_BN_CLICKED(IDC_IMAGE9, OnImage9) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSampDlg message handlers BOOL CSampDlg::OnInitDialog() { CDialog::OnInitDialog(); // 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 unsigned char OutMask; int I; unsigned long Status; unsigned long PID; DeviceIndex = diOnly; Status = QueryDeviceInfo(DeviceIndex, &PID, NULL, NULL, NULL, NULL); PID &= 0xFFE0; if ( (Status != ERROR_SUCCESS) || ! (((PID >= 0x8040) && (PID <= 0x805F)) || ((PID >= 0x8140) && (PID <= 0x815F))) ) { DetectDialog DetectBox; if (DetectBox.DoModal() == IDOK) { DeviceIndex = DetectBox.index; } else { exit(1); } } OutMask = 0; DIOData = 0xFFFF; DIO_Configure(DeviceIndex, false, &OutMask, &DIOData); HighImage.LoadBitmap(IDB_BITMAP_HIGH); LowImage.LoadBitmap(IDB_BITMAP_LOW); for (I=0; I < 3; I++) { CTR_8254Mode(DeviceIndex, I, 1, 2); CTR_8254Mode(DeviceIndex, I, 2, 3); } LevelImage[0] = &m_image0; LevelImage[1] = &m_image1; LevelImage[2] = &m_image2; LevelImage[3] = &m_image3; LevelImage[4] = &m_image4; LevelImage[5] = &m_image5; LevelImage[6] = &m_image6; LevelImage[7] = &m_image7; LevelImage[8] = &m_image8; LevelImage[9] = &m_image9; LevelImage[10] = &m_image10; LevelImage[11] = &m_image11; LevelImage[12] = &m_image12; LevelImage[13] = &m_image13; LevelImage[14] = &m_image14; LevelImage[15] = &m_image15; OutCheck[0] = &m_output0; OutCheck[1] = &m_output1; DoUpdate = true; SetTimer(1, 5, NULL); return TRUE; // return TRUE unless you set the focus to a control } // 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 CSampDlg::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 CSampDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CSampDlg::OnTimer(UINT nIDEvent) { int I; unsigned short oDIOData, Changes; oDIOData = DIOData; DIO_ReadAll(DeviceIndex, &DIOData); if (DoUpdate == true) { Changes = 0xFFFF; DoUpdate = false; } for (I = 0; I < 16; I++) { if ((Changes & (1 << I)) != 0) { if ((DIOData & (1 << I)) != 0) LevelImage[I] -> SetBitmap(HighImage); else LevelImage[I] -> SetBitmap(LowImage); } } CDialog::OnTimer(nIDEvent); } void CSampDlg::OnOutput0() { OnOutputClick(0); } void CSampDlg::OnOutput1() { OnOutputClick(1); } void CSampDlg::OnOutputClick(int index) { int I; unsigned char OutMask = 0; UpdateData(true); for (I = 0; I < 2; I ++) if (*(OutCheck[I]) != 0) OutMask |= (1 << I); DIOData |= 0xFF << (index * 8); DIO_Configure(DeviceIndex, false, &OutMask, &DIOData); DoUpdate = true; } void CSampDlg::OnImage0() { LevelImageClick(0); } void CSampDlg::OnImage1() { LevelImageClick(1); } void CSampDlg::OnImage10() { LevelImageClick(10); } void CSampDlg::OnImage11() { LevelImageClick(11); } void CSampDlg::OnImage12() { LevelImageClick(12); } void CSampDlg::OnImage13() { LevelImageClick(13); } void CSampDlg::OnImage14() { LevelImageClick(14); } void CSampDlg::OnImage15() { LevelImageClick(15); } void CSampDlg::OnImage2() { LevelImageClick(2); } void CSampDlg::OnImage3() { LevelImageClick(3); } void CSampDlg::OnImage4() { LevelImageClick(4); } void CSampDlg::OnImage5() { LevelImageClick(5); } void CSampDlg::OnImage6() { LevelImageClick(6); } void CSampDlg::OnImage7() { LevelImageClick(7); } void CSampDlg::OnImage8() { LevelImageClick(8); } void CSampDlg::OnImage9() { LevelImageClick(9); } void CSampDlg::LevelImageClick(int index) { bool NewValue; DIOData ^= 1 << index; NewValue = (DIOData & (1 << index)) != 0; DIO_Write1(DeviceIndex, index, NewValue); DoUpdate = true; }