// PCIUtilDlg.cpp : implementation file // // // Author: CMLH // Date: Feburary 12, 2003 // // (c) 2003 Avnet Design Services // All Rights Reserved. // ================================================================ // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A // PARTICULAR PURPOSE. // Copyright (c) 2003 Avnet Corporation // ================================================================ #include "stdafx.h" #include "PCIUtil.h" #include "BarStatus.h" #include "pci_device_diagc.h" #include "pci_device_libc.h" #include "CmdReg.h" #include "DataDump.h" #include "PCIUtilDlg.h" #include "Avnet.h" #include "print_structc.h" #include "pci_diag_libc.h" #include "windrvr_int_threadc.h" #include "utilsc.h" #include "status_stringsc.h" //#include "windrvr_eventsc.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif AVPCI_DEVICE_HANDLE hAVPCI_DEVICE = NULL; WD_PCI_SLOT pciSlot; BOOL fRegisteredEvent = FALSE; DWORD dwAction = 0; struct { CHAR *name; UINT dwOffset; UINT dwBytes; UINT dwVal; } fields[30] = { { "VID", 0x0, 2 }, { "DID", 0x2, 2 }, { "CMD", 0x4, 2 }, { "STS", 0x6, 2 }, { "RID", 0x8, 1 }, { "CLCD", 0x9, 3 }, { "CALN", 0xc, 1 }, { "LAT", 0xd, 1 }, { "HDR", 0xe, 1 }, { "BIST", 0xf, 1 }, { "BADDR0", 0x10, 4 }, { "BADDR1", 0x14, 4 }, { "BADDR2", 0x18, 4 }, { "BADDR3", 0x1c, 4 }, { "BADDR4", 0x20, 4 }, { "BADDR5", 0x24, 4 }, { "EXROM", 0x30, 4 }, { "INTLN", 0x3c, 1 }, { "INTPIN", 0x3d, 1 }, { "MINGNT", 0x3e, 1 }, { "MAXLAT", 0x3f, 1 }, { NULL, 0, 0 }, { NULL, 0, 0 } }; ///////////////////////////////////////////////////////////////////////////// // 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() ///////////////////////////////////////////////////////////////////////////// // CPCIUtilDlg dialog CPCIUtilDlg::CPCIUtilDlg(CWnd* pParent /*=NULL*/) : CDialog(CPCIUtilDlg::IDD, pParent) { //{{AFX_DATA_INIT(CPCIUtilDlg) m_strCardNo = _T(""); m_strCmdReg = _T("0000"); m_strBrdAccessFilename = _T(""); m_strBrdAccessEndAddr = _T(""); m_strBrdAccessStartAddr = _T("00000000"); m_intBrdAccessBar = 1; m_intBrdAccessMode = 2; m_intBrdAccessAccess = 0; m_strBusScan = _T(""); m_strVid = _T(""); m_strDid = _T(""); m_fCmdRegB0 = FALSE; m_fCmdRegB1 = FALSE; m_fCmdRegB2 = FALSE; m_fCmdRegB3 = FALSE; m_fCmdRegB4 = FALSE; m_fCmdRegB5 = FALSE; m_fCmdRegB6 = FALSE; m_fCmdRegB7 = FALSE; m_fCmdRegB8 = FALSE; m_fCmdRegB9 = FALSE; m_fCmdRegB10 = FALSE; m_fCmdRegB11 = FALSE; m_fCmdRegB12 = FALSE; m_fCmdRegB13 = FALSE; m_fCmdRegB14 = FALSE; m_fCmdRegB15 = FALSE; m_strBrdAccessData = _T(""); m_intCnfgRd = 0; m_intCnfgWr = 0; m_intInterrupt = 0; m_intRegister = 0; m_strConnectedBoard = _T(""); m_strCnfgRdData = _T(""); m_strCnfgWrData = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CPCIUtilDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPCIUtilDlg) DDX_Control(pDX, IDC_REGISTERBTN, m_cntlRegisterBtn); DDX_Control(pDX, IDC_REGISTER, m_cntlRegister); DDX_Control(pDX, IDC_INTERRUPTBTN, m_cntlInterruptBtn); DDX_Control(pDX, IDC_INTERRUPT, m_cntlInterrupt); DDX_Control(pDX, IDC_BRDACCESSACCESS, m_cntlBrdAccessAccess); DDX_Control(pDX, IDC_BRDACCESSBAR, m_cntlBrdAccessBar); DDX_Control(pDX, IDC_BRDACCESSBTNPREV, m_cntlBrdAccessBtnPrev); DDX_Control(pDX, IDC_BRDACCEESBTNNEXT, m_cntlBrdAccessBtnNext); DDX_Control(pDX, IDC_LED0ON, m_cntlLed0On); DDX_Control(pDX, IDC_LED0OFF, m_cntlLed0Off); DDX_Control(pDX, IDC_LED0BLINK, m_cntlLed0Blink); DDX_Control(pDX, IDC_LED1ON, m_cntlLed1On); DDX_Control(pDX, IDC_LED1OFF, m_cntlLed1Off); DDX_Control(pDX, IDC_LED1BLINK, m_cntlLed1Blink); DDX_Control(pDX, IDC_LED2ON, m_cntlLed2On); DDX_Control(pDX, IDC_LED2OFF, m_cntlLed2Off); DDX_Control(pDX, IDC_LED2BLINK, m_cntlLed2Blink); DDX_Control(pDX, IDC_LED3ON, m_cntlLed3On); DDX_Control(pDX, IDC_LED3OFF, m_cntlLed3Off); DDX_Control(pDX, IDC_LED3BLINK, m_cntlLed3Blink); DDX_Control(pDX, IDC_LED4ON, m_cntlLed4On); DDX_Control(pDX, IDC_LED4OFF, m_cntlLed4Off); DDX_Control(pDX, IDC_LED4BLINK, m_cntlLed4Blink); DDX_Control(pDX, IDC_LED5ON, m_cntlLed5On); DDX_Control(pDX, IDC_LED5OFF, m_cntlLed5Off); DDX_Control(pDX, IDC_LED5BLINK, m_cntlLed5Blink); DDX_Control(pDX, IDC_LED6ON, m_cntlLed6On); DDX_Control(pDX, IDC_LED6OFF, m_cntlLed6Off); DDX_Control(pDX, IDC_LED6BLINK, m_cntlLed6Blink); DDX_Control(pDX, IDC_LED7ON, m_cntlLed7On); DDX_Control(pDX, IDC_LED7OFF, m_cntlLed7Off); DDX_Control(pDX, IDC_LED7BLINK, m_cntlLed7Blink); DDX_Control(pDX, IDC_CMDREG, m_cntlCmdReg); DDX_Control(pDX, IDC_CMDREGBTNDEF, m_cntlCmdRegBtnDefine); DDX_Control(pDX, IDC_STATICLEDON, m_cntlStaticLedOn); DDX_Control(pDX, IDC_STATICLEDOFF, m_cntlStaticLedOff); DDX_Control(pDX, IDC_STATICLEDCNTL, m_cntlStaticLedCntl); DDX_Control(pDX, IDC_STATICLEDBLINK, m_cntlStaticLedBlink); DDX_Control(pDX, IDC_STATICLED7, m_cntlStaticLed7); DDX_Control(pDX, IDC_STATICLED6, m_cntlStaticLed6); DDX_Control(pDX, IDC_STATICLED5, m_cntlStaticLed5); DDX_Control(pDX, IDC_STATICLED4, m_cntlStaticLed4); DDX_Control(pDX, IDC_STATICLED3, m_cntlStaticLed3); DDX_Control(pDX, IDC_STATICLED2, m_cntlStaticLed2); DDX_Control(pDX, IDC_STATICLED1, m_cntlStaticLed1); DDX_Control(pDX, IDC_STATICLED0, m_cntlStaticLed0); DDX_Control(pDX, IDC_STATICCMDREG, m_cntlStaticCmdReg); DDX_Control(pDX, IDC_BUSSCANBTNSCAN, m_cntlBusScanBtnScan); DDX_Control(pDX, IDC_BUSSCAN, m_cntlBusScan); DDX_Control(pDX, IDC_BRDACCESSDATA, m_cntlBrdAccessData); DDX_Control(pDX, IDC_BRDACCESSSTARTADDR, m_cntlBrdAccessStartAddr); DDX_Control(pDX, IDC_BRDACCESSENDADDR, m_cntlBrdAccessEndAddr); DDX_Control(pDX, IDC_STATICFILENAME, m_cntlStaticFilename); DDX_Control(pDX, IDC_BRDACCESSFILENAME, m_cntlBrdAccessFilename); DDX_Control(pDX, IDC_BRDACCESSBTNBROWSE, m_cntlBrdAccessBtnBrowse); DDX_Control(pDX, IDC_CMDREGB15, m_cntlCmdRegB15); DDX_Control(pDX, IDC_CMDREGB14, m_cntlCmdRegB14); DDX_Control(pDX, IDC_CMDREGB13, m_cntlCmdRegB13); DDX_Control(pDX, IDC_CMDREGB12, m_cntlCmdRegB12); DDX_Control(pDX, IDC_CMDREGB11, m_cntlCmdRegB11); DDX_Control(pDX, IDC_CMDREGB10, m_cntlCmdRegB10); DDX_Control(pDX, IDC_CMDREGB9, m_cntlCmdRegB9); DDX_Control(pDX, IDC_CMDREGB8, m_cntlCmdRegB8); DDX_Control(pDX, IDC_CMDREGB7, m_cntlCmdRegB7); DDX_Control(pDX, IDC_CMDREGB6, m_cntlCmdRegB6); DDX_Control(pDX, IDC_CMDREGB5, m_cntlCmdRegB5); DDX_Control(pDX, IDC_CMDREGB4, m_cntlCmdRegB4); DDX_Control(pDX, IDC_CMDREGB3, m_cntlCmdRegB3); DDX_Control(pDX, IDC_CMDREGB2, m_cntlCmdRegB2); DDX_Control(pDX, IDC_CMDREGB1, m_cntlCmdRegB1); DDX_Control(pDX, IDC_CMDREGB0, m_cntlCmdRegB0); DDX_Control(pDX, IDC_CMDREGBTNRDWR, m_cntlCmdRegBtnRdWr); DDX_Text(pDX, IDC_CARDNO, m_strCardNo); DDV_MaxChars(pDX, m_strCardNo, 2); DDX_Text(pDX, IDC_CMDREG, m_strCmdReg); DDV_MaxChars(pDX, m_strCmdReg, 4); DDX_Text(pDX, IDC_BRDACCESSFILENAME, m_strBrdAccessFilename); DDX_Text(pDX, IDC_BRDACCESSENDADDR, m_strBrdAccessEndAddr); DDX_Text(pDX, IDC_BRDACCESSSTARTADDR, m_strBrdAccessStartAddr); DDX_CBIndex(pDX, IDC_BRDACCESSBAR, m_intBrdAccessBar); DDX_CBIndex(pDX, IDC_BRDACCESSMODE, m_intBrdAccessMode); DDX_CBIndex(pDX, IDC_BRDACCESSACCESS, m_intBrdAccessAccess); DDX_Text(pDX, IDC_BUSSCAN, m_strBusScan); DDX_Text(pDX, IDC_VID, m_strVid); DDX_Text(pDX, IDC_DID, m_strDid); DDX_Check(pDX, IDC_CMDREGB0, m_fCmdRegB0); DDX_Check(pDX, IDC_CMDREGB1, m_fCmdRegB1); DDX_Check(pDX, IDC_CMDREGB2, m_fCmdRegB2); DDX_Check(pDX, IDC_CMDREGB3, m_fCmdRegB3); DDX_Check(pDX, IDC_CMDREGB4, m_fCmdRegB4); DDX_Check(pDX, IDC_CMDREGB5, m_fCmdRegB5); DDX_Check(pDX, IDC_CMDREGB6, m_fCmdRegB6); DDX_Check(pDX, IDC_CMDREGB7, m_fCmdRegB7); DDX_Check(pDX, IDC_CMDREGB8, m_fCmdRegB8); DDX_Check(pDX, IDC_CMDREGB9, m_fCmdRegB9); DDX_Check(pDX, IDC_CMDREGB10, m_fCmdRegB10); DDX_Check(pDX, IDC_CMDREGB11, m_fCmdRegB11); DDX_Check(pDX, IDC_CMDREGB12, m_fCmdRegB12); DDX_Check(pDX, IDC_CMDREGB13, m_fCmdRegB13); DDX_Check(pDX, IDC_CMDREGB14, m_fCmdRegB14); DDX_Check(pDX, IDC_CMDREGB15, m_fCmdRegB15); DDX_Text(pDX, IDC_BRDACCESSDATA, m_strBrdAccessData); DDX_CBIndex(pDX, IDC_CNFGRD, m_intCnfgRd); DDX_CBIndex(pDX, IDC_CNFGWR, m_intCnfgWr); DDX_CBIndex(pDX, IDC_INTERRUPT, m_intInterrupt); DDX_CBIndex(pDX, IDC_REGISTER, m_intRegister); DDX_Text(pDX, IDC_CONNECTEDBOARD, m_strConnectedBoard); DDX_Text(pDX, IDC_CNFGRDDATA, m_strCnfgRdData); DDX_Text(pDX, IDC_CNFGWRDATA, m_strCnfgWrData); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPCIUtilDlg, CDialog) //{{AFX_MSG_MAP(CPCIUtilDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(ID_EXIT, OnExit) ON_BN_CLICKED(IDC_CMDREGB0, OnCmdregb0) ON_BN_CLICKED(IDC_CMDREGB1, OnCmdregb1) ON_BN_CLICKED(IDC_CMDREGB2, OnCmdregb2) ON_BN_CLICKED(IDC_CMDREGB3, OnCmdregb3) ON_BN_CLICKED(IDC_CMDREGB4, OnCmdregb4) ON_BN_CLICKED(IDC_CMDREGB5, OnCmdregb5) ON_BN_CLICKED(IDC_CMDREGB6, OnCmdregb6) ON_BN_CLICKED(IDC_CMDREGB7, OnCmdregb7) ON_BN_CLICKED(IDC_CMDREGB8, OnCmdregb8) ON_BN_CLICKED(IDC_CMDREGB9, OnCmdregb9) ON_BN_CLICKED(IDC_CMDREGB10, OnCmdregb10) ON_BN_CLICKED(IDC_CMDREGB11, OnCmdregb11) ON_BN_CLICKED(IDC_CMDREGB12, OnCmdregb12) ON_BN_CLICKED(IDC_CMDREGB13, OnCmdregb13) ON_BN_CLICKED(IDC_CMDREGB14, OnCmdregb14) ON_BN_CLICKED(IDC_CMDREGB15, OnCmdregb15) ON_BN_CLICKED(IDC_CMDREGBTNRDWR, OnCmdregbtnrdwr) ON_EN_UPDATE(IDC_CMDREG, OnUpdateCmdreg) ON_WM_TIMER() ON_CBN_SELCHANGE(IDC_BRDACCESSMODE, OnSelchangeBrdaccessmode) ON_BN_CLICKED(IDC_CMDREGBTNDEF, OnCmdregbtndef) ON_CBN_SELCHANGE(IDC_BRDACCESSBAR, OnSelchangeBrdaccessbar) ON_BN_CLICKED(IDC_BRDACCESSBTNEXE, OnBrdaccessbtnexe) ON_BN_CLICKED(IDC_OPEN, OnOpen) ON_BN_CLICKED(IDC_CNFGRDBTN, OnCnfgrdbtn) ON_BN_CLICKED(IDC_CNFGWRBTN, OnCnfgwrbtn) ON_BN_CLICKED(IDC_BUSSCANBTNCLR, OnBusscanbtnclr) ON_BN_CLICKED(IDC_BUSSCANBTNSCAN, OnBusscanbtnscan) ON_BN_CLICKED(IDC_BRDACCESSBTNBROWSE, OnBrdaccessbtnbrowse) ON_BN_CLICKED(IDC_INTERRUPTBTN, OnInterruptbtn) ON_BN_CLICKED(IDC_REGISTERBTN, OnRegisterbtn) ON_BN_CLICKED(IDC_BRDACCEESBTNNEXT, OnBrdacceesbtnnext) ON_BN_CLICKED(IDC_BRDACCESSBTNPREV, OnBrdaccessbtnprev) ON_CBN_SELCHANGE(IDC_BRDACCESSACCESS, OnSelchangeBrdaccessaccess) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPCIUtilDlg message handlers BOOL CPCIUtilDlg::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 // Initialize command register value m_intCmdReg = 0; // Initialize Radio Button to OFF state CheckRadioButton(IDC_LED0ON, IDC_LED0BLINK, IDC_LED0OFF); CheckRadioButton(IDC_LED1ON, IDC_LED1BLINK, IDC_LED1OFF); CheckRadioButton(IDC_LED2ON, IDC_LED2BLINK, IDC_LED2OFF); CheckRadioButton(IDC_LED3ON, IDC_LED3BLINK, IDC_LED3OFF); CheckRadioButton(IDC_LED4ON, IDC_LED4BLINK, IDC_LED4OFF); CheckRadioButton(IDC_LED5ON, IDC_LED5BLINK, IDC_LED5OFF); CheckRadioButton(IDC_LED6ON, IDC_LED6BLINK, IDC_LED6OFF); CheckRadioButton(IDC_LED7ON, IDC_LED7BLINK, IDC_LED7OFF); // Initialize LED Status to have all LEDs Off m_intLedStatus = 0; // Put string limit on Data to reflect DWord m_cntlBrdAccessData.SetLimitText(8); // Limit Addresses up to 32 bit m_cntlBrdAccessStartAddr.SetLimitText(8); m_cntlBrdAccessEndAddr.SetLimitText(8); // Show ADS Banner in Lower Right corner m_strBitmap = "MIL.bmp";//"ADS Banner.bmp"; HBITMAP hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), m_strBitmap, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); if(hBitmap) { if(m_bmpBitmap.DeleteObject()) m_bmpBitmap.Detach(); m_bmpBitmap.Attach(hBitmap); } HANDLE hWD; // Create WinDriver handler // Ensure WinDriver is loaded, exit program if not if(!PCI_Get_WD_handle(&hWD)) { MessageBox("WinDriver is not loaded on this system"); OnOK(); } WD_Close(hWD); // Find and open supported board int intBoard = 1; while(!hAVPCI_DEVICE && intBoard) { m_strVid.Format("%04X", DEFAULT_VID); switch(intBoard++) { case 1: m_strDid.Format("%04X", VIRTEX_II_PRO_DID); break; case 2: m_strDid.Format("%04X", VIRTEX_II_DID); break; case 3: m_strDid.Format("%04X", DURANGO_PMC_IRL_DID); break; default: intBoard = 0; m_strDid = "0000"; break; } m_strCardNo.Format("%02X", AVPCI_DEVICE_CountCards(axtoint(m_strVid), axtoint(m_strDid))); UpdateData(FALSE); OnOpen(); } // Start LED Timer SetTimer(ID_LED_TIMER, 500, NULL); return TRUE; // return TRUE unless you set the focus to a control } void CPCIUtilDlg::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 CPCIUtilDlg::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 { CPaintDC dc(this); CWnd *pWnd; // if(m_strBitmap != "") // ShowBitmap(&dc, pWnd); CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CPCIUtilDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CPCIUtilDlg::ShowBitmap(CPaintDC *pdc, CWnd *pWnd) { BITMAP bm; // Get the loaded bitmap m_bmpBitmap.GetBitmap(&bm); CDC dcMem; // Create a device context to load the bitmap into dcMem.CreateCompatibleDC(pdc); // Select the bitmap into the compatible device context CBitmap* pOldBitmap = (CBitmap*)dcMem.SelectObject(m_bmpBitmap); CRect lRect; // Get the display area available GetClientRect(lRect); lRect.NormalizeRect(); // Copy and resize the bitmap to the dialog window pdc->StretchBlt(270, 257, ((lRect.Width() - 20)/2), ((lRect.Height() - 20) * 2/5), &dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); } void CPCIUtilDlg::OnExit() { // TODO: Add your control notification handler code here OnOK(); } void CPCIUtilDlg::OnCmdregb0() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB0)) m_intCmdReg |= BIT0; else m_intCmdReg &= ~BIT0; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb1() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB1)) m_intCmdReg |= BIT1; else m_intCmdReg &= ~BIT1; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb2() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB2)) m_intCmdReg |= BIT2; else m_intCmdReg &= ~BIT2; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb3() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB3)) m_intCmdReg |= BIT3; else m_intCmdReg &= ~BIT3; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb4() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB4)) m_intCmdReg |= BIT4; else m_intCmdReg &= ~BIT4; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb5() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB5)) m_intCmdReg |= BIT5; else m_intCmdReg &= ~BIT5; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb6() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB6)) m_intCmdReg |= BIT6; else m_intCmdReg &= ~BIT6; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb7() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB7)) m_intCmdReg |= BIT7; else m_intCmdReg &= ~BIT7; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb8() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB8)) m_intCmdReg |= BIT8; else m_intCmdReg &= ~BIT8; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb9() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB9)) m_intCmdReg |= BIT9; else m_intCmdReg &= ~BIT9; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb10() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB10)) m_intCmdReg |= BIT10; else m_intCmdReg &= ~BIT10; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb11() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB11)) m_intCmdReg |= BIT11; else m_intCmdReg &= ~BIT11; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb12() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB12)) m_intCmdReg |= BIT12; else m_intCmdReg &= ~BIT12; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb13() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB13)) m_intCmdReg |= BIT13; else m_intCmdReg &= ~BIT13; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb14() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB14)) m_intCmdReg |= BIT14; else m_intCmdReg &= ~BIT14; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregb15() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_intCmdReg = axtoint(m_strCmdReg); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); if(IsDlgButtonChecked(IDC_CMDREGB15)) m_intCmdReg |= BIT15; else m_intCmdReg &= ~BIT15; m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregbtnrdwr() { // TODO: Add your control notification handler code here UpdateData(TRUE); TCHAR lpszStringBuf[10]; CPCIUtilDlg Dlg; if(m_cntlCmdRegBtnRdWr.GetWindowText(lpszStringBuf, m_cntlCmdRegBtnRdWr.GetWindowTextLength()+1)) { if(!strcmp(lpszStringBuf, "Read")) { if(hAVPCI_DEVICE) { switch(axtoint(m_strDid)) { case VIRTEX_II_DID: break; case VIRTEX_II_PRO_DID: if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, BAR2_MS)) MessageBox("Bar2 not Active"); else m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); break; default: break; } m_strCmdReg.Format("%04X", m_intCmdReg); UpdateData(FALSE); UpdateCmdRegCheckBox(); } } else if(!strcmp(lpszStringBuf, "Write")) { if(hAVPCI_DEVICE) { switch(axtoint(m_strDid)) { case VIRTEX_II_DID: break; case VIRTEX_II_PRO_DID: if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, BAR2_MS)) MessageBox("Bar2 not Active"); else AVPCI_DEVICE_WriteWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset, m_intCmdReg); break; default: break; } // Change button caption back to "Read" m_cntlCmdRegBtnRdWr.SetWindowText("Read"); UpdateData(FALSE); } } } } void CPCIUtilDlg::OnUpdateCmdreg() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function to send the EM_SETEVENTMASK message to the control // with the ENM_UPDATE flag ORed into the lParam mask. // TODO: Add your control notification handler code here UpdateData(TRUE); m_cntlCmdRegBtnRdWr.SetWindowText("Write"); m_intCmdReg = axtoint(m_strCmdReg); UpdateCmdRegCheckBox(); } void CPCIUtilDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default // Toggle LED Blink Status m_fBlinkOnOff = (m_fBlinkOnOff) ? FALSE : TRUE; switch(GetCheckedRadioButton(IDC_LED0ON, IDC_LED0BLINK)) { case IDC_LED0ON: m_intLedStatus |= LED0; break; case IDC_LED0OFF: m_intLedStatus &= ~LED0; break; case IDC_LED0BLINK: (m_fBlinkOnOff) ? LedOn(LED0) : LedOff(LED0); break; } switch(GetCheckedRadioButton(IDC_LED1ON, IDC_LED1BLINK)) { case IDC_LED1ON: m_intLedStatus |= LED1; break; case IDC_LED1OFF: m_intLedStatus &= ~LED1; break; case IDC_LED1BLINK: (m_fBlinkOnOff) ? LedOn(LED1) : LedOff(LED1); break; } switch(GetCheckedRadioButton(IDC_LED2ON, IDC_LED2BLINK)) { case IDC_LED2ON: m_intLedStatus |= LED2; break; case IDC_LED2OFF: m_intLedStatus &= ~LED2; break; case IDC_LED2BLINK: (m_fBlinkOnOff) ? LedOn(LED2) : LedOff(LED2); break; } switch(GetCheckedRadioButton(IDC_LED3ON, IDC_LED3BLINK)) { case IDC_LED3ON: m_intLedStatus |= LED3; break; case IDC_LED3OFF: m_intLedStatus &= ~LED3; break; case IDC_LED3BLINK: (m_fBlinkOnOff) ? LedOn(LED3) : LedOff(LED3); break; } switch(GetCheckedRadioButton(IDC_LED4ON, IDC_LED4BLINK)) { case IDC_LED4ON: m_intLedStatus |= LED4; break; case IDC_LED4OFF: m_intLedStatus &= ~LED4; break; case IDC_LED4BLINK: (m_fBlinkOnOff) ? LedOn(LED4) : LedOff(LED4); break; } switch(GetCheckedRadioButton(IDC_LED5ON, IDC_LED5BLINK)) { case IDC_LED5ON: m_intLedStatus |= LED5; break; case IDC_LED5OFF: m_intLedStatus &= ~LED5; break; case IDC_LED5BLINK: (m_fBlinkOnOff) ? LedOn(LED5) : LedOff(LED5); break; } switch(GetCheckedRadioButton(IDC_LED6ON, IDC_LED6BLINK)) { case IDC_LED6ON: m_intLedStatus |= LED6; break; case IDC_LED6OFF: m_intLedStatus &= ~LED6; break; case IDC_LED6BLINK: (m_fBlinkOnOff) ? LedOn(LED6) : LedOff(LED6); break; } switch(GetCheckedRadioButton(IDC_LED7ON, IDC_LED7BLINK)) { case IDC_LED7ON: m_intLedStatus |= LED7; break; case IDC_LED7OFF: m_intLedStatus &= ~LED7; break; case IDC_LED7BLINK: (m_fBlinkOnOff) ? LedOn(LED7) : LedOff(LED7); break; } // Output to LED register if there is a board already connected if(hAVPCI_DEVICE) { switch(axtoint(m_strDid)) { case VIRTEX_II_DID: break; case VIRTEX_II_PRO_DID: if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, BAR2_MS)) MessageBox("Bar2 not Active"); else AVPCI_DEVICE_WriteByte(hAVPCI_DEVICE, BAR2_MS, m_intLedRegOffset, m_intLedStatus); break; default: break; } } CDialog::OnTimer(nIDEvent); } void CPCIUtilDlg::LedOn(int Led) { m_intLedStatus |= Led; } void CPCIUtilDlg::LedOff(int Led) { m_intLedStatus &= ~Led; } void CPCIUtilDlg::OnSelchangeBrdaccessmode() { // TODO: Add your control notification handler code here UpdateData(TRUE); switch(m_intBrdAccessMode) { case 0: // Byte m_cntlBrdAccessBtnBrowse.EnableWindow(FALSE); m_cntlBrdAccessFilename.EnableWindow(FALSE); m_cntlStaticFilename.EnableWindow(FALSE); m_cntlStaticFilename.SetWindowText("Filename"); m_cntlBrdAccessBar.EnableWindow(TRUE); m_cntlBrdAccessBtnNext.EnableWindow(TRUE); m_cntlBrdAccessBtnPrev.EnableWindow(TRUE); m_cntlBrdAccessStartAddr.EnableWindow(TRUE); m_cntlBrdAccessEndAddr.EnableWindow(TRUE); m_cntlBrdAccessData.EnableWindow(TRUE); m_cntlBrdAccessAccess.EnableWindow(TRUE); if(m_strBrdAccessData.GetLength() > 2) m_strBrdAccessData.Delete(0, m_strBrdAccessData.GetLength() - 2); m_cntlBrdAccessData.SetLimitText(2); break; case 1: // Word m_cntlBrdAccessBtnBrowse.EnableWindow(FALSE); m_cntlBrdAccessFilename.EnableWindow(FALSE); m_cntlStaticFilename.EnableWindow(FALSE); m_cntlStaticFilename.SetWindowText("Filename"); m_cntlBrdAccessBar.EnableWindow(TRUE); m_cntlBrdAccessBtnNext.EnableWindow(TRUE); m_cntlBrdAccessBtnPrev.EnableWindow(TRUE); m_cntlBrdAccessStartAddr.EnableWindow(TRUE); m_cntlBrdAccessEndAddr.EnableWindow(TRUE); m_cntlBrdAccessData.EnableWindow(TRUE); m_cntlBrdAccessAccess.EnableWindow(TRUE); if(m_strBrdAccessData.GetLength() > 4) m_strBrdAccessData.Delete(0, m_strBrdAccessData.GetLength() - 4); m_cntlBrdAccessData.SetLimitText(4); break; case 2: // DWord default: m_cntlBrdAccessBtnBrowse.EnableWindow(FALSE); m_cntlBrdAccessFilename.EnableWindow(FALSE); m_cntlStaticFilename.EnableWindow(FALSE); m_cntlStaticFilename.SetWindowText("Filename"); m_cntlBrdAccessBar.EnableWindow(TRUE); m_cntlBrdAccessBtnNext.EnableWindow(TRUE); m_cntlBrdAccessBtnPrev.EnableWindow(TRUE); m_cntlBrdAccessStartAddr.EnableWindow(TRUE); m_cntlBrdAccessEndAddr.EnableWindow(TRUE); m_cntlBrdAccessData.EnableWindow(TRUE); m_cntlBrdAccessAccess.EnableWindow(TRUE); if(m_strBrdAccessData.GetLength() > 8) m_strBrdAccessData.Delete(0, m_strBrdAccessData.GetLength() - 8); m_cntlBrdAccessData.SetLimitText(8); break; case 3: // File m_cntlBrdAccessBar.EnableWindow(TRUE); m_cntlBrdAccessBtnBrowse.EnableWindow(TRUE); m_cntlBrdAccessFilename.EnableWindow(TRUE); m_cntlStaticFilename.EnableWindow(TRUE); m_cntlBrdAccessStartAddr.EnableWindow(TRUE); m_cntlBrdAccessEndAddr.EnableWindow(TRUE); m_cntlBrdAccessData.EnableWindow(TRUE); m_cntlBrdAccessAccess.EnableWindow(TRUE); m_cntlBrdAccessBtnNext.EnableWindow(FALSE); m_cntlBrdAccessBtnPrev.EnableWindow(FALSE); OnSelchangeBrdaccessaccess(); if(m_strBrdAccessFilename.IsEmpty()) GetFileName(); break; case 4: // Configure if((axtoint(m_strVid) == XILINX_VID) && (axtoint(m_strDid) == VIRTEX_II_PRO_DID)) { m_cntlBrdAccessBtnBrowse.EnableWindow(TRUE); m_cntlBrdAccessFilename.EnableWindow(TRUE); m_cntlStaticFilename.EnableWindow(TRUE); m_cntlBrdAccessBtnNext.EnableWindow(FALSE); m_cntlBrdAccessBtnPrev.EnableWindow(FALSE); m_cntlBrdAccessData.EnableWindow(FALSE); m_strBrdAccessData.Empty(); m_cntlBrdAccessStartAddr.EnableWindow(FALSE); m_strBrdAccessStartAddr = "00000000"; m_cntlBrdAccessEndAddr.EnableWindow(FALSE); m_strBrdAccessEndAddr.Empty(); m_intBrdAccessBar = BAR0_MS + 1; m_cntlBrdAccessBar.EnableWindow(FALSE); m_intBrdAccessAccess = WRITE; m_cntlBrdAccessAccess.EnableWindow(FALSE); UpdateData(FALSE); OnSelchangeBrdaccessaccess(); if(m_strBrdAccessFilename.IsEmpty() || m_strBrdAccessFilename.Right(4) != ".bit") GetConfigFileName(); } else { m_intBrdAccessMode = 3; // Indicate File mode UpdateData(FALSE); OnSelchangeBrdaccessmode(); } break; } UpdateData(FALSE); } void CPCIUtilDlg::OnCmdregbtndef() { // TODO: Add your control notification handler code here m_dCmdReg.m_intVid = axtoint(m_strVid); m_dCmdReg.m_intDid = axtoint(m_strDid); BOOL fRetValue; CPCIUtilDlg pParent; m_dCmdReg.DestroyWindow(); fRetValue = m_dCmdReg.Create(IDD_CMDREG, &pParent); m_dCmdReg.ShowWindow(SW_SHOW); } void CPCIUtilDlg::OnSelchangeBrdaccessbar() { // TODO: Add your control notification handler code here UpdateData(TRUE); int ad_sp; switch(m_intBrdAccessBar) { case 0: // Status if(hAVPCI_DEVICE) { for(ad_sp = 0; ad_sp < AVPCI_DEVICE_ITEMS; ad_sp++) m_dBarStatus.m_strBarStatus[ad_sp] = (AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, ad_sp))? "Active": "Inactive"; BOOL fRetValue; CPCIUtilDlg pParent; m_dBarStatus.DestroyWindow(); fRetValue = m_dBarStatus.Create(IDD_BAR_STATUS, &pParent); m_dBarStatus.ShowWindow(SW_SHOW); } break; case 1: // BAR0 if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, m_intBrdAccessBar -1)) MessageBox(" BAR0 not active."); break; case 2: // BAR1 if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, m_intBrdAccessBar -1)) MessageBox(" BAR1 not active."); break; case 3: // BAR2 if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, m_intBrdAccessBar -1)) MessageBox(" BAR2 not active."); break; case 4: // BAR3 if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, m_intBrdAccessBar -1)) MessageBox(" BAR3 not active."); break; case 5: // BAR4 if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, m_intBrdAccessBar -1)) MessageBox(" BAR4 not active."); break; case 6: // BAR5 if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, m_intBrdAccessBar -1)) MessageBox(" BAR5 not active."); break; default: break; } } void CPCIUtilDlg::OnBrdaccessbtnexe() { // TODO: Add your control notification handler code here AVPCI_DEVICE_ADDR ad_sp = 0; AVPCI_DEVICE_MODE ad_mode = AVPCI_DEVICE_MODE_DWORD; if(hAVPCI_DEVICE) { for(; ad_sp < AVPCI_DEVICE_ITEMS && !AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, ad_sp); ad_sp++) { if(ad_sp == AVPCI_DEVICE_ITEMS) { MessageBox("No active memory or IO ranges on board!", "AVPCI_DEVICEDiagDlg.cpp"); return; } } // Get Dialog Inputs UpdateData(TRUE); // Check to see what Memory command is selected and process accordingly // Check for valid hex numbers if((!ishexstr(m_strBrdAccessStartAddr)) || (!ishexstr(m_strBrdAccessData))) MessageBox("Memory Address or Data not valid hex value", "AVPCI_DEVICEDiagDlg.cpp"); else { AdjustAddr(); m_intBrdAccessEndAddr = axtoint(m_strBrdAccessEndAddr); if(!AVPCI_DEVICE_IsAddrSpaceActive(hAVPCI_DEVICE, m_intBrdAccessBar-1)) MessageBox("Memory Space not active."); else { m_intFormatCounter = 0; FILE *fp; unsigned int maxTries = 0x00ff; unsigned int tryCounter = maxTries; while(tryCounter) { m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); // Check SRAM Owner bit (VII Pro only) except if doing a configuration // if((!(m_intCmdReg & SRAM_OWNER) && (m_intBrdAccessMode != 4)) && (m_strDid == VIRTEX_II_PRO_DID)) if((m_strDid != VIRTEX_II_PRO_DID) && !(m_intCmdReg & SRAM_OWNER) && (m_intBrdAccessMode != 4)) { // Set TRGT_IRQ bit(9) if 1st time through if(tryCounter == maxTries) { m_intCmdReg |= TRGT_IRQ; m_cntlCmdRegBtnRdWr.SetWindowText("Write"); UpdateData(FALSE); OnCmdregbtnrdwr(); } tryCounter--; } else { switch(m_intBrdAccessAccess) { case 0: // Memory Read default: m_dDataDump.m_strDataDump.Empty(); switch(m_intBrdAccessMode) { case 0: ByteRead(); break; case 1: WordRead(); break; case 2: default: DWordRead(); break; case 3: // Read from FPGA Write to file if(!m_strBrdAccessFilename.IsEmpty()) { if((fp = fopen(m_strBrdAccessFilename, "wb")) == NULL) MessageBox("Unable to open file."); else { if(m_intBrdAccessEndAddr < m_intBrdAccessStartAddr) m_intBrdAccessEndAddr = dwBarBytes[m_intBrdAccessBar - 1] - 1; RdDataWrFile(fp); fclose(fp); MessageBox("Done writing file from memory"); } } else GetFileName(); break; } break; case 1: if(m_intBrdAccessMode < 3) { if(m_strBrdAccessData.IsEmpty()) { MessageBox("Data field is blank, using \"0\""); m_strBrdAccessData = "0"; } } m_intBrdAccessData = axtoint(m_strBrdAccessData); switch(m_intBrdAccessMode) { case 0: ByteWrite(); break; case 1: WordWrite(); break; case 2: default: DWordWrite(); break; case 3: // Write to FPGA from file if(!m_strBrdAccessFilename.IsEmpty()) { if((fp = fopen(m_strBrdAccessFilename, "rb")) == NULL) MessageBox("Unable to open file."); else // File successfully opened to read { RdFileWrData(fp); fclose(fp); MessageBox("Done writing memory from file"); } } else GetFileName(); break; case 4: // Write FPGA from Config file if(!m_strBrdAccessFilename.IsEmpty() && m_strBrdAccessFilename.Right(4) == ".bit") { if((fp = fopen(m_strBrdAccessFilename, "rb")) == NULL) MessageBox("Unable to open file."); else { m_intBrdAccessData = 0; // Set bit 2 of command register m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); m_intCmdReg |= CNFG_FROM_SRAM | SRAM_OWNER; m_cntlCmdRegBtnRdWr.SetWindowText("Write"); UpdateData(FALSE); OnCmdregbtnrdwr(); // Wait for bit 4 to assert while(TRUE) { m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); unsigned int temp = m_intCmdReg & SRAM_OWNER; if((m_intCmdReg & SRAM_OWNER)) break; } if(IsValidBitFile(fp)) { m_intBrdAccessStartAddr += 4; RdFileWrData(fp); fclose(fp); } else { fclose(fp); break; } // Clear bit 4 of command register m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); m_intCmdReg &= ~SRAM_OWNER; m_cntlCmdRegBtnRdWr.SetWindowText("Write"); UpdateData(FALSE); OnCmdregbtnrdwr(); // Wait for FPGA to signal success or failure while(TRUE) { m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); if(m_intCmdReg & DONE_LED) { MessageBox("Configuration Successful"); // Set bit 1 of command register m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); m_intCmdReg |= TRGT_RST; m_cntlCmdRegBtnRdWr.SetWindowText("Write"); UpdateData(FALSE); OnCmdregbtnrdwr(); break; } else if(m_intCmdReg & CNFG_ERR) { MessageBox("*** Configuration Failed!!! ***"); break; } } OnCmdregbtnrdwr(); // Change back to Read operation OnCmdregbtnrdwr(); // Update checkboxes fclose(fp); } } else GetConfigFileName(); break; } break; } // Clear bit 4 of command register of VII Pro /* if(m_strDid == VIRTEX_II_PRO_DID) m_intCmdReg = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, BAR2_MS, m_intCmdRegOffset); { */ m_intCmdReg &= ~SRAM_OWNER; m_cntlCmdRegBtnRdWr.SetWindowText("Write"); UpdateData(FALSE); OnCmdregbtnrdwr(); break; /* } else break; */ } if(!tryCounter) MessageBox("Target did not relinquish SRAM bus."); } // Open DataDump Dialog if multiple data to be displayed if(m_intFormatCounter > 1) { BOOL fRetValue; CPCIUtilDlg pParent; m_strBrdAccessData.Empty(); m_dDataDump.DestroyWindow(); fRetValue = m_dDataDump.Create(IDD_DATA_DUMP, &pParent); m_dDataDump.ShowWindow(SW_SHOW); } UpdateData(FALSE); } } } } /************************************************************/ void CPCIUtilDlg::OnOpen() { // TODO: Add your control notification handler code here // Read in VID and DID strings UpdateData(TRUE); if(hAVPCI_DEVICE) AVPCI_DEVICE_Close(hAVPCI_DEVICE); if(!m_strVid.IsEmpty() && ishexstr(m_strVid)) { if(!m_strDid.IsEmpty() && ishexstr(m_strDid)) { if(axtoint(m_strVid) != 0) // Check if Vendor ID is zero hAVPCI_DEVICE = AVPCI_DEVICE_LocateAndOpenBoard(axtoint(m_strVid), axtoint(m_strDid)); else // Vender ID is zero MessageBox("Invalid VendorID"); } else MessageBox("Invalid DeviceID"); } else MessageBox("Invalid VendorID"); // Display board name if(hAVPCI_DEVICE) { m_strCardNo.Format("%02X", my_card); switch(axtoint(m_strVid)) { case XILINX_VID: switch(axtoint(m_strDid)) { case VIRTEX_II_DID: m_strConnectedBoard = "ADS Xilinx Virtex II Dev Board"; EnableCmdRegSection(FALSE); EnableLedSection(FALSE); break; case VIRTEX_II_PRO_DID: m_strConnectedBoard = "ADS Xilinx Virtex II Pro Dev Board"; m_intLedRegOffset = 0x08; m_intCmdRegOffset = 0x00; EnableCmdRegSection(TRUE); EnableLedSection(TRUE); break; case DURANGO_PMC_IRL_DID: m_strConnectedBoard = "ADS Xilinx Durango PMC - IRL"; EnableCmdRegSection(FALSE); EnableLedSection(FALSE); break; default: m_strConnectedBoard = "Unknown Xilinx PCI Board"; break; EnableIntRegSection(FALSE); } break; default: m_strConnectedBoard = "Unsupported Vendor"; break; } } else m_strConnectedBoard = "No Board Connected"; UpdateData(FALSE); } void CPCIUtilDlg::OnCnfgrdbtn() { // TODO: Add your control notification handler code here char str[9]; // Read data from GUI UpdateData(TRUE); // Read PCI Config registers if(hAVPCI_DEVICE) { WD_PCI_SLOT pciSlot; HANDLE hWD; if(!PCI_Get_WD_handle(&hWD)) return; AVPCI_DEVICE_GetPciSlot(hAVPCI_DEVICE, &pciSlot); sprintf(str, "%0*X", fields[m_intCnfgRd].dwBytes*2, PCI_ReadBytes(hWD, pciSlot, fields[m_intCnfgRd].dwOffset, fields[m_intCnfgRd].dwBytes)); m_strCnfgRdData = str; WD_Close(hWD); UpdateData(FALSE); } } void CPCIUtilDlg::OnCnfgwrbtn() { // TODO: Add your control notification handler code here // Read data from GUI UpdateData(TRUE); // Write PCI Config registers if(hAVPCI_DEVICE) { WD_PCI_SLOT pciSlot; HANDLE hWD; // Create WinDriver handler AVPCI_DEVICE_GetPciSlot(hAVPCI_DEVICE, &pciSlot); if(!PCI_Get_WD_handle(&hWD)) return; if((m_strCnfgWrData.GetLength() <= (int)fields[m_intCnfgWr].dwBytes) && ishexstr(m_strCnfgWrData)) { UINT dwVal = axtoint(m_strCnfgWrData); PCI_WriteBytes(hWD, pciSlot, fields[m_intCnfgWr].dwOffset, fields[m_intCnfgWr].dwBytes, dwVal); } else MessageBox("Value too large or is not valid hex value"); WD_Close(hWD); } } void CPCIUtilDlg::OnBusscanbtnclr() { // TODO: Add your control notification handler code here UpdateData(TRUE); m_strBusScan.Empty(); m_cntlBusScanBtnScan.SetWindowText("Scan"); m_fFont.Detach(); UpdateData(FALSE); } void CPCIUtilDlg::OnBusscanbtnscan() { // TODO: Add your control notification handler code here if(!iPCICardNo) { m_strBusScan.Empty(); m_cntlBusScanBtnScan.SetWindowText("Next"); } m_fFont.Detach(); m_fFont.CreateFont(14, 0, 0, 0, FW_THIN, 0, 0, 0, 0, 0, 0, 0, FIXED_PITCH | FF_MODERN, "Courier New"); m_cntlBusScan.SetFont(&m_fFont, TRUE); PCI_Print_all_cards_info(); m_cntlBusScan.FmtLines(TRUE); m_strBusScan.Insert(m_strBusScan.GetLength(), strBusScan); UpdateData(FALSE); // Set Scroll bar to point to bottom m_cntlBusScan.SetScrollPos(SB_VERT, m_cntlBusScan.GetScrollLimit(SB_VERT), TRUE); m_cntlBusScan.LineScroll(m_cntlBusScan.GetLineCount(), 0); } void CPCIUtilDlg::OnBrdaccessbtnbrowse() { // TODO: Add your control notification handler code here UpdateData(TRUE); if(m_intBrdAccessMode == 3) // File GetFileName(); else if(m_intBrdAccessMode == 4) // Configure GetConfigFileName(); UpdateData(FALSE); } void CPCIUtilDlg::OnInterruptbtn() { // TODO: Add your control notification handler code here // Read data from GUI UpdateData(TRUE); // Exit routine if no device is open if(hAVPCI_DEVICE) { switch(m_intInterrupt) { case 0: // Enable Interrupts if(!AVPCI_DEVICE_IntIsEnabled(hAVPCI_DEVICE)) { if(AVPCI_DEVICE_IntEnable(hAVPCI_DEVICE, AVPCI_DEVICE_IntHandlerRoutine)) MessageBox("Enabled interrupt"); else MessageBox("Failed to enable interrupt"); } break; case 1: // Disable Interrupts AVPCI_DEVICE_IntDisable(hAVPCI_DEVICE); MessageBox("Disabled interrupt"); break; default: MessageBox("Invalid Interrupt Command"); break; } } } void CPCIUtilDlg::OnRegisterbtn() { // TODO: Add your control notification handler code here // Read data from GUI UpdateData(TRUE); if(hAVPCI_DEVICE) { switch(m_intRegister) { case 0: // Register if(hAVPCI_DEVICE && !fRegisteredEvent) { dwAction |= WD_INSERT | WD_REMOVE; dwAction |= WD_ACTIONS_POWER; AVPCI_DEVICE_GetPciSlot(hAVPCI_DEVICE, &pciSlot); if(!AVPCI_DEVICE_RegisterEvent(hAVPCI_DEVICE, dwAction, AVPCI_DEVICE_DEFAULT_VENDOR_ID, AVPCI_DEVICE_DEFAULT_DEVICE_ID, pciSlot, AVPCI_DEVICE_HandlerFunc)) MessageBox("AVPCI_DEVICE_RegisterEvnet Failed"); else fRegisteredEvent = TRUE; } break; case 1: // Unregister if(hAVPCI_DEVICE && fRegisteredEvent) { fRegisteredEvent = FALSE; AVPCI_DEVICE_UnregisterEvent(hAVPCI_DEVICE); } break; default: MessageBox("Invalid Registration Command"); break; } } } void CPCIUtilDlg::OnBrdacceesbtnnext() { // TODO: Add your control notification handler code here UpdateData(TRUE); unsigned long m_intBrdAccessStartAddr; m_intBrdAccessStartAddr = axtoint(m_strBrdAccessStartAddr); switch(m_intBrdAccessMode) { case 0: m_intBrdAccessStartAddr += 1; if((dwBarBytes[m_intBrdAccessBar - 1] - 1) < m_intBrdAccessStartAddr) m_intBrdAccessStartAddr = 0; break; case 1: m_intBrdAccessStartAddr += 2; m_intBrdAccessStartAddr &= 0xfffffffe; if((dwBarBytes[m_intBrdAccessBar - 1] - 1) < m_intBrdAccessStartAddr) m_intBrdAccessStartAddr = 0; break; case 2: default: m_intBrdAccessStartAddr += 4; m_intBrdAccessStartAddr &= 0xfffffffc; if((dwBarBytes[m_intBrdAccessBar - 1] - 1) < m_intBrdAccessStartAddr) m_intBrdAccessStartAddr = 0; break; } m_strBrdAccessStartAddr.Format("%08X", m_intBrdAccessStartAddr); m_strBrdAccessEndAddr.Empty(); UpdateData(FALSE); OnBrdaccessbtnexe(); } void CPCIUtilDlg::OnBrdaccessbtnprev() { // TODO: Add your control notification handler code here UpdateData(TRUE); unsigned long m_intBrdAccessStartAddr; m_intBrdAccessStartAddr = axtoint(m_strBrdAccessStartAddr); switch(m_intBrdAccessMode) { case 0: m_intBrdAccessStartAddr -= 1; if((dwBarBytes[m_intBrdAccessBar - 1] - 1) < m_intBrdAccessStartAddr) m_intBrdAccessStartAddr = dwBarBytes[m_intBrdAccessBar - 1] - 1; break; case 1: m_intBrdAccessStartAddr -= 2; m_intBrdAccessStartAddr &= 0xfffffffe; if((dwBarBytes[m_intBrdAccessBar - 1] - 1) < m_intBrdAccessStartAddr) m_intBrdAccessStartAddr = dwBarBytes[m_intBrdAccessBar - 1] - 2; break; case 2: default: m_intBrdAccessStartAddr -= 4; m_intBrdAccessStartAddr &= 0xfffffffc; if((dwBarBytes[m_intBrdAccessBar - 1] - 1) < m_intBrdAccessStartAddr) m_intBrdAccessStartAddr = dwBarBytes[m_intBrdAccessBar-1] - 4; break; } m_strBrdAccessStartAddr.Format("%08X", m_intBrdAccessStartAddr); m_strBrdAccessEndAddr.Empty(); UpdateData(FALSE); OnBrdaccessbtnexe(); } void CPCIUtilDlg::UpdateCmdRegCheckBox() { /* m_cntlCmdRegB0.UpdateData(TRUE); m_cntlCmdRegB1.UpdateData(TRUE); m_cntlCmdRegB2.UpdateData(TRUE); m_cntlCmdRegB3.UpdateData(TRUE); m_cntlCmdRegB4.UpdateData(TRUE); m_cntlCmdRegB5.UpdateData(TRUE); m_cntlCmdRegB6.UpdateData(TRUE); m_cntlCmdRegB7.UpdateData(TRUE); m_cntlCmdRegB8.UpdateData(TRUE); m_cntlCmdRegB9.UpdateData(TRUE); m_cntlCmdRegB10.UpdateData(TRUE); m_cntlCmdRegB11.UpdateData(TRUE); m_cntlCmdRegB12.UpdateData(TRUE); m_cntlCmdRegB13.UpdateData(TRUE); m_cntlCmdRegB14.UpdateData(TRUE); m_cntlCmdRegB15.UpdateData(TRUE);*/ (m_intCmdReg & BIT0) ? CheckDlgButton(IDC_CMDREGB0, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB0, BST_UNCHECKED); (m_intCmdReg & BIT1) ? CheckDlgButton(IDC_CMDREGB1, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB1, BST_UNCHECKED); (m_intCmdReg & BIT2) ? CheckDlgButton(IDC_CMDREGB2, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB2, BST_UNCHECKED); (m_intCmdReg & BIT3) ? CheckDlgButton(IDC_CMDREGB3, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB3, BST_UNCHECKED); (m_intCmdReg & BIT4) ? CheckDlgButton(IDC_CMDREGB4, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB4, BST_UNCHECKED); (m_intCmdReg & BIT5) ? CheckDlgButton(IDC_CMDREGB5, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB5, BST_UNCHECKED); (m_intCmdReg & BIT6) ? CheckDlgButton(IDC_CMDREGB6, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB6, BST_UNCHECKED); (m_intCmdReg & BIT7) ? CheckDlgButton(IDC_CMDREGB7, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB7, BST_UNCHECKED); (m_intCmdReg & BIT8) ? CheckDlgButton(IDC_CMDREGB8, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB8, BST_UNCHECKED); (m_intCmdReg & BIT9) ? CheckDlgButton(IDC_CMDREGB9, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB9, BST_UNCHECKED); (m_intCmdReg & BIT10) ? CheckDlgButton(IDC_CMDREGB10, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB10, BST_UNCHECKED); (m_intCmdReg & BIT11) ? CheckDlgButton(IDC_CMDREGB11, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB11, BST_UNCHECKED); (m_intCmdReg & BIT12) ? CheckDlgButton(IDC_CMDREGB12, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB12, BST_UNCHECKED); (m_intCmdReg & BIT13) ? CheckDlgButton(IDC_CMDREGB13, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB13, BST_UNCHECKED); (m_intCmdReg & BIT14) ? CheckDlgButton(IDC_CMDREGB14, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB14, BST_UNCHECKED); (m_intCmdReg & BIT15) ? CheckDlgButton(IDC_CMDREGB15, BST_CHECKED) : CheckDlgButton(IDC_CMDREGB15, BST_UNCHECKED); m_cntlCmdRegB0.UpdateData(FALSE); m_cntlCmdRegB1.UpdateData(FALSE); m_cntlCmdRegB2.UpdateData(FALSE); m_cntlCmdRegB3.UpdateData(FALSE); m_cntlCmdRegB4.UpdateData(FALSE); m_cntlCmdRegB5.UpdateData(FALSE); m_cntlCmdRegB6.UpdateData(FALSE); m_cntlCmdRegB7.UpdateData(FALSE); m_cntlCmdRegB8.UpdateData(FALSE); m_cntlCmdRegB9.UpdateData(FALSE); m_cntlCmdRegB10.UpdateData(FALSE); m_cntlCmdRegB11.UpdateData(FALSE); m_cntlCmdRegB12.UpdateData(FALSE); m_cntlCmdRegB13.UpdateData(FALSE); m_cntlCmdRegB14.UpdateData(FALSE); m_cntlCmdRegB15.UpdateData(FALSE); } void CPCIUtilDlg::EnableLedSection(BOOL fState) { m_cntlStaticLedCntl.EnableWindow(fState); m_cntlStaticLedOn.EnableWindow(fState); m_cntlStaticLedOff.EnableWindow(fState); m_cntlStaticLedBlink.EnableWindow(fState); m_cntlStaticLed0.EnableWindow(fState); m_cntlStaticLed1.EnableWindow(fState); m_cntlStaticLed2.EnableWindow(fState); m_cntlStaticLed3.EnableWindow(fState); m_cntlStaticLed4.EnableWindow(fState); m_cntlStaticLed5.EnableWindow(fState); m_cntlStaticLed6.EnableWindow(fState); m_cntlStaticLed7.EnableWindow(fState); m_cntlLed0On.EnableWindow(fState); m_cntlLed0Off.EnableWindow(fState); m_cntlLed0Blink.EnableWindow(fState); m_cntlLed1On.EnableWindow(fState); m_cntlLed1Off.EnableWindow(fState); m_cntlLed1Blink.EnableWindow(fState); m_cntlLed2On.EnableWindow(fState); m_cntlLed2Off.EnableWindow(fState); m_cntlLed2Blink.EnableWindow(fState); m_cntlLed3On.EnableWindow(fState); m_cntlLed3Off.EnableWindow(fState); m_cntlLed3Blink.EnableWindow(fState); m_cntlLed4On.EnableWindow(fState); m_cntlLed4Off.EnableWindow(fState); m_cntlLed4Blink.EnableWindow(fState); m_cntlLed5On.EnableWindow(fState); m_cntlLed5Off.EnableWindow(fState); m_cntlLed5Blink.EnableWindow(fState); m_cntlLed6On.EnableWindow(fState); m_cntlLed6Off.EnableWindow(fState); m_cntlLed6Blink.EnableWindow(fState); m_cntlLed7On.EnableWindow(fState); m_cntlLed7Off.EnableWindow(fState); m_cntlLed7Blink.EnableWindow(fState); } void CPCIUtilDlg::EnableCmdRegSection(BOOL fState) { m_cntlStaticCmdReg.EnableWindow(fState); m_cntlCmdReg.EnableWindow(fState); m_cntlCmdRegBtnDefine.EnableWindow(fState); m_cntlCmdRegBtnRdWr.EnableWindow(fState); m_cntlCmdRegB0.EnableWindow(fState); m_cntlCmdRegB1.EnableWindow(fState); m_cntlCmdRegB2.EnableWindow(fState); m_cntlCmdRegB3.EnableWindow(fState); m_cntlCmdRegB4.EnableWindow(fState); m_cntlCmdRegB5.EnableWindow(fState); m_cntlCmdRegB6.EnableWindow(fState); m_cntlCmdRegB7.EnableWindow(fState); m_cntlCmdRegB8.EnableWindow(fState); m_cntlCmdRegB9.EnableWindow(fState); m_cntlCmdRegB10.EnableWindow(fState); m_cntlCmdRegB11.EnableWindow(fState); m_cntlCmdRegB12.EnableWindow(fState); m_cntlCmdRegB13.EnableWindow(fState); m_cntlCmdRegB14.EnableWindow(fState); m_cntlCmdRegB15.EnableWindow(fState); } void CPCIUtilDlg::GetFileName() { CFileDialog m_ldFile(TRUE); if(m_ldFile.DoModal() == IDOK) m_strBrdAccessFilename = m_ldFile.GetFileName(); } void CPCIUtilDlg::GetConfigFileName() { CFileDialog m_ldFile(TRUE); if(m_ldFile.DoModal() == IDOK) { if(!strcmp(m_ldFile.GetFileExt(), "bit")) m_strBrdAccessFilename = m_ldFile.GetFileName(); else { m_strBrdAccessFilename = ""; MessageBox("Incompatible file, Please select \".bit\""); } } } void CPCIUtilDlg::OnSelchangeBrdaccessaccess() { // TODO: Add your control notification handler code here UpdateData(TRUE); if(m_cntlBrdAccessFilename.IsWindowEnabled()) { switch(m_intBrdAccessAccess) { case 0: default: m_cntlStaticFilename.SetWindowText("File to write"); break; case 1: m_cntlStaticFilename.SetWindowText("File to read"); break; } m_cntlStaticFilename.UpdateData(FALSE); } } void CPCIUtilDlg::ByteRead() { char str[50]; do { if((dwBarBytes[m_intBrdAccessBar-1] - 1) >= m_intBrdAccessStartAddr) { if(axtoint(m_strDid) == VIRTEX_II_DID) m_intBrdAccessData = AVPCI_DEVICE_ReadByte(hAVPCI_DEVICE, m_intBrdAccessBar, m_intBrdAccessStartAddr); m_intBrdAccessData = AVPCI_DEVICE_ReadByte(hAVPCI_DEVICE, m_intBrdAccessBar, m_intBrdAccessStartAddr); m_strBrdAccessData.Format("%02X", m_intBrdAccessData); } else { sprintf(str, "Valid Byte Address Offsets are \"0-%X\"", dwBarBytes[m_intBrdAccessBar-1]-1); MessageBox(str); break; } if(!(m_intFormatCounter % 16)) { if(m_intFormatCounter) m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), "\t"); sprintf(str, "%08X: ", m_intBrdAccessStartAddr); m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), str); } if(!(m_intFormatCounter++ % 4)) m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), " "); m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), m_strBrdAccessData); m_intBrdAccessStartAddr += 1; }while(m_intBrdAccessEndAddr >= m_intBrdAccessStartAddr); } void CPCIUtilDlg::WordRead() { char str[50]; do { if(((dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffe) >= m_intBrdAccessStartAddr) { if(axtoint(m_strDid) == VIRTEX_II_DID) m_intBrdAccessData = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr); m_intBrdAccessData = AVPCI_DEVICE_ReadWord(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr); m_strBrdAccessData.Format("%04X", m_intBrdAccessData); } else { sprintf(str, "Valid Word Address Offsets are \"0-%X\"", (dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffe); MessageBox(str); break; } if(!(m_intFormatCounter % 8)) { if(m_intFormatCounter) m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), "\t"); sprintf(str, "%08X: ", m_intBrdAccessStartAddr); m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), str); } if(!(m_intFormatCounter++ % 2)) m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), " "); m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), m_strBrdAccessData); m_intBrdAccessStartAddr += 2; }while(m_intBrdAccessEndAddr >= m_intBrdAccessStartAddr); } void CPCIUtilDlg::DWordRead() { char str[50]; do { if(((dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffc) >= m_intBrdAccessStartAddr) { if(axtoint(m_strDid) == VIRTEX_II_DID) // Temporary fix { m_intBrdAccessData = AVPCI_DEVICE_ReadDword(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr); m_intBrdAccessData = AVPCI_DEVICE_ReadDword(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr); } m_intBrdAccessData = AVPCI_DEVICE_ReadDword(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr); m_strBrdAccessData.Format("%08X", m_intBrdAccessData); } else { sprintf(str, "Valid DWord Address Offsets are \"0-%X\"", (dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffc); MessageBox(str); break; } if(!(m_intFormatCounter++ % 4)) { if(m_intFormatCounter - 1) m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), "\t"); sprintf(str, "%08X: ", m_intBrdAccessStartAddr); m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), str); } m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), " "); m_dDataDump.m_strDataDump.Insert(m_dDataDump.m_strDataDump.GetLength(), m_strBrdAccessData); m_intBrdAccessStartAddr += 4; }while(m_intBrdAccessEndAddr >= m_intBrdAccessStartAddr); } void CPCIUtilDlg::ByteWrite() { char str[50]; do { if((dwBarBytes[m_intBrdAccessBar-1] -1) >= m_intBrdAccessStartAddr) AVPCI_DEVICE_WriteByte(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr, m_intBrdAccessData); else { sprintf(str, "Valid Byte Address Offsets are \"0-%X\"", dwBarBytes[m_intBrdAccessBar-1]-1); MessageBox(str); break; } m_intBrdAccessStartAddr += 1; }while(m_intBrdAccessEndAddr >= m_intBrdAccessStartAddr); } void CPCIUtilDlg::WordWrite() { char str[50]; do { if(((dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffe) >= m_intBrdAccessStartAddr) AVPCI_DEVICE_WriteWord(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr, m_intBrdAccessData); else { sprintf(str, "Valid Word Address Offsets are \"0-%X\"", (dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffe); MessageBox(str); break; } m_intBrdAccessStartAddr += 2; }while(m_intBrdAccessEndAddr >= m_intBrdAccessStartAddr); } void CPCIUtilDlg::DWordWrite() { char str[50]; do { if(((dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffc) >= m_intBrdAccessStartAddr) AVPCI_DEVICE_WriteDword(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr, m_intBrdAccessData); else { sprintf(str, "Valid DWord Address Offsets are \"0-%X\"", (dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffc); MessageBox(str); break; } m_intBrdAccessStartAddr += 4; }while(m_intBrdAccessEndAddr >= m_intBrdAccessStartAddr); } void CPCIUtilDlg::RdDataWrFile(FILE *fp) { char str[50]; int intOutputData; while(m_intBrdAccessEndAddr - m_intBrdAccessStartAddr) { // Read Data to put into file if(((dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffc) >= m_intBrdAccessStartAddr) m_intBrdAccessData = AVPCI_DEVICE_ReadDword(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr); else { sprintf(str, "Valid Byte Address Offsets are \"0-%X\"", dwBarBytes[m_intBrdAccessBar-1]-1); MessageBox(str); break; } // Write Data to file if (!ferror(fp)) { for(m_intBytePosition = 0; m_intBytePosition <= 3; m_intBytePosition++) { intOutputData = (m_intBrdAccessData >> (m_intBytePosition * 8)) & 0x000000ff; fputc(intOutputData, fp); // Write byte to file } m_intBrdAccessStartAddr += 4; } } } void CPCIUtilDlg::RdFileWrData(FILE *fp) { char str[50]; while (!feof(fp)) { m_intBrdAccessData = 0; for(m_intBytePosition = 0; m_intBytePosition <= 3; m_intBytePosition++) { if (!feof(fp)) m_intBrdAccessData += getc(fp) << (m_intBytePosition * 8); else break; } if(((dwBarBytes[m_intBrdAccessBar-1] - 1) & 0xfffffffc) >= m_intBrdAccessStartAddr) AVPCI_DEVICE_WriteDword(hAVPCI_DEVICE, m_intBrdAccessBar-1, m_intBrdAccessStartAddr, m_intBrdAccessData); else { sprintf(str, "Valid Byte Address Offsets are \"0-%X\"", dwBarBytes[m_intBrdAccessBar-1]-1); MessageBox(str); break; } m_intBrdAccessStartAddr += 4; } } BOOL CPCIUtilDlg::IsValidBitFile(FILE *fp) { while (!feof(fp)) { if (!feof(fp)) { m_intBrdAccessData <<= 8; m_intBrdAccessData |= (getc(fp) & 0xff); } else { MessageBox("Invalid \".bit\" file"); break; } // Check for start of data "FFFF FFFF" if(m_intBrdAccessData == 0xffffffff) { AVPCI_DEVICE_WriteDword(hAVPCI_DEVICE, m_intBrdAccessBar - 1, m_intBrdAccessStartAddr, m_intBrdAccessData); return TRUE; } } return FALSE; } void CPCIUtilDlg::AdjustAddr() { if(m_strBrdAccessStartAddr.IsEmpty()) { MessageBox("Start Address field is blank, using \"0\""); m_strBrdAccessStartAddr = "0"; } m_intBrdAccessStartAddr = axtoint(m_strBrdAccessStartAddr); if(!ishexstr(m_strBrdAccessEndAddr)) { MessageBox("End Address non-hex value"); m_strBrdAccessEndAddr = "0"; } else if(m_strBrdAccessStartAddr.IsEmpty()) m_strBrdAccessEndAddr = "0"; } void CPCIUtilDlg::EnableIntRegSection(BOOL fState) { }