⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dualdma.c

📁 Advantech driver Demo: Analog output with DMA Data Transfer!
💻 C
📖 第 1 页 / 共 4 页
字号:

        if ((ErrCde = DRV_DeviceGetList((DEVLIST far *)&DeviceList[0],
            (SHORT)gnNumOfDevices, (SHORT far *)&nOutEntries)) != (LONG)SUCCESS)
        {
            DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
            MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
            return TRUE;
        }

        // Initialize the Device List Combobox with the retrieved information
        for (i = 0; i < gnNumOfDevices; i ++)
            SendDlgItemMessage(hDlg, IDC_DEVICE, CB_ADDSTRING, 0,
            (LPARAM)((LPSTR)DeviceList[i].szDeviceName));

        SendDlgItemMessage(hDlg, IDC_DEVICE, CB_SETCURSEL,(WPARAM)gwDevice,
            (LPARAM)0);


        // -----------------------------------------------------------
        // Initialize Module List Combobox for COM port or CAN devices
        // -----------------------------------------------------------

        // Check if there is any device attached on this COM port or CAN
        gnNumOfSubdevices = DeviceList[gwDevice].nNumOfSubdevices;
        if (gnNumOfSubdevices > MAX_DEVICES)
            gnNumOfSubdevices = MAX_DEVICES;

        // Retrieve the information of all installed devices
        if (gnNumOfSubdevices != 0)
        {
            if ((ErrCde = DRV_DeviceGetSubList(
                (DWORD)DeviceList[gwDevice].dwDeviceNum,
                (DEVLIST far *)&SubDeviceList[0],
                (SHORT)gnNumOfSubdevices,
                (SHORT far *)&nOutEntries)) != (LONG)SUCCESS)
            {
                DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                return TRUE;
            }


            // Initialize the Module List Combobox with the retrieved
            // information
            EnableWindow(GetDlgItem(hDlg, IDC_MODULE), TRUE);
            SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT, 0,
                (LPARAM)((LPSTR)0));

            for (i = 0; i < gnNumOfSubdevices; i++)
                SendDlgItemMessage(hDlg, IDC_MODULE, CB_ADDSTRING, 0,
                (LPARAM)((LPSTR)SubDeviceList[i].szDeviceName));

            SendDlgItemMessage(hDlg, IDC_MODULE, CB_SETCURSEL,
                (WPARAM)gwSubDevice, (LPARAM)0);
        }
        else
        {
            EnableWindow(GetDlgItem(hDlg, IDC_MODULE), FALSE);
            SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT, 0,
                (LPARAM)((LPSTR)0));
        }

        // ------------------------------------------------------------
        // Initialize Input Range List Combobox, it needs to get device
        // features for gain list
        // ------------------------------------------------------------

        // Step 1: Open device
        if (gnNumOfSubdevices == 0)
        {
            ErrCde = DRV_DeviceOpen(DeviceList[gwDevice].dwDeviceNum,
                (LONG far *)&DriverHandle);
        }
        else
        {
            ErrCde = DRV_DeviceOpen(
                SubDeviceList[gwSubDevice].dwDeviceNum,
                (LONG far *)&DriverHandle);
        }

        if (ErrCde != SUCCESS)
        {
            DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
            MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
            return 0;
        }

        // Step 2: Get device features
        ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
        ptDevFeatures.size = sizeof(DEVFEATURES);
        if ((ErrCde = DRV_DeviceGetFeatures(DriverHandle,
            (LPT_DeviceGetFeatures)&ptDevFeatures)) != SUCCESS)
        {
            DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
            MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
            DRV_DeviceClose((LONG far *)&DriverHandle);
            return 0;
        }

        // Step 3: Initialize Input Range List Combobox with device features
        if (DevFeatures.usNumGain != 0)
        {
            EnableWindow(GetDlgItem(hDlg, IDC_INPRANGE), TRUE);
            for (i = 0; i < (int)DevFeatures.usNumGain; i ++)
                SendDlgItemMessage(hDlg, IDC_INPRANGE, CB_ADDSTRING, 0,
                (LPARAM)((LPSTR)(DevFeatures.glGainList[i].szGainStr)));

            SendDlgItemMessage(hDlg, IDC_INPRANGE, CB_SELECTSTRING, (WPARAM)(-1),
                (LPARAM)((LPSTR)(DevFeatures.glGainList[gwGainCode].szGainStr)));

        }
        else
        {
            EnableWindow(GetDlgItem(hDlg, IDC_INPRANGE), FALSE);
            SendDlgItemMessage(hDlg, IDC_INPRANGE, CB_RESETCONTENT,
                0, (LPARAM)((LPSTR)0));
        }

        // Initialize Conversion Number
        ultoa(gulConvNum, szBuffer, 10);

        SendDlgItemMessage(hDlg, IDC_CONVERSION, EM_REPLACESEL, 0,
            (LPARAM)((LPSTR)szBuffer));

        // Initialize Pacer Rate
        ultoa(gdwPacerRate, szBuffer, 10);

        SendDlgItemMessage(hDlg, IDC_PACER, EM_REPLACESEL, 0,
            (LPARAM)((LPSTR)szBuffer));

        if (gwExtTrig)
            EnableWindow(GetDlgItem(hDlg, IDC_PACER), FALSE);
        else
            EnableWindow(GetDlgItem(hDlg, IDC_PACER), TRUE);

        // Initialize Start Channel
        itoa((int)gwStartChl, szBuffer, 10);

        SendDlgItemMessage(hDlg, IDC_ESTART, EM_REPLACESEL, 0,
            (LPARAM)((LPSTR)szBuffer));

        // Initialize Stop Channel
        itoa((int)gwNumChl, szBuffer, 10);

        SendDlgItemMessage(hDlg, IDC_ESTOP, EM_REPLACESEL, 0,
            (LPARAM)((LPSTR)szBuffer));

        // Initialize Triggering
        CheckRadioButton(hDlg, IDC_INTTRIG, IDC_EXTTRIG,
            (gwExtTrig)?IDC_EXTTRIG:IDC_INTTRIG);

        // Initialize Repeated Mode
        CheckRadioButton(hDlg, IDC_CYCLIC, IDC_NONCYCLIC,
            (gwCyclicMode)?IDC_CYCLIC:IDC_NONCYCLIC);

        // Initialize Buffer Mode
        EnableWindow(GetDlgItem(hDlg, IDC_BUFSINGLE), FALSE);
        EnableWindow(GetDlgItem(hDlg, IDC_BUFDOUBLE), FALSE);

        // CheckRadioButton(hDlg, IDC_BUFSINGLE, IDC_BUFDOUBLE,
        //     (gwBufferMode)?IDC_BUFDOUBLE:IDC_BUFSINGLE);

        // Initialize Data Type
        CheckRadioButton(hDlg, IDC_DATAUSHORT, IDC_DATAFLOAT,
            (gwDataType)?IDC_DATAFLOAT:IDC_DATAUSHORT);

        // Initialize Message Flag
        CheckRadioButton(hDlg, IDC_EVTENABLE, IDC_EVTDISABLE,
            (gwEvtFlag)?IDC_EVTENABLE:IDC_EVTDISABLE);

        // Initialize number of interrupt count
        if (gwFifoEnable)
            SendDlgItemMessage(hDlg, IDC_FifoEnable,BM_SETCHECK,0,0);

        // Initialize gain table option
        if (gwGainList)
        {
            CheckRadioButton(hDlg, IDC_OVERALLGAIN, IDC_GAINARRAY,
                IDC_GAINARRAY);
            EnableWindow(GetDlgItem(hDlg, IDC_INPRANGE), FALSE);
            EnableWindow(GetDlgItem(hDlg, IDC_GAINLIST), TRUE);
        }
        else
        {
            CheckRadioButton(hDlg, IDC_OVERALLGAIN, IDC_GAINARRAY,
                IDC_OVERALLGAIN);
            EnableWindow(GetDlgItem(hDlg, IDC_INPRANGE), TRUE);
            EnableWindow(GetDlgItem(hDlg, IDC_GAINLIST), FALSE);
        }

        // Step 4: Close device
        DRV_DeviceClose((LONG far *)&DriverHandle);

        return TRUE;

    case WM_COMMAND :
        switch (LOWORD(wParam))
        {
        case IDOK :
        case IDCANCEL :
            EndDialog(hDlg, 0);
            return TRUE;
        case IDC_GAINLIST :
            DialogBox (hInst, MAKEINTRESOURCE(IDD_GAINLIST),
                hDlg, lpfnGainListDlgProc) ;
            return TRUE;

        case IDC_DEVICE :

            //
            // When device selection is changed, it needs to
            // re-initialize sub-device combobox and input range
            // combobox.
            //

            if (HIWORD(wParam) == CBN_SELCHANGE)
            {
                if ((dwIndex = SendDlgItemMessage(hDlg, IDC_DEVICE,
                    CB_GETCURSEL, 0, 0)) != CB_ERR)
                    gwDevice = (WORD)dwIndex;
                else
                    return TRUE;


                // ------------------------------------------------------
                // Initialize Module Combobox for COM port or CAN devices
                // ------------------------------------------------------
                // Check any device attached on this COM port or CAN

                gnNumOfSubdevices = DeviceList[gwDevice].nNumOfSubdevices;
                if (gnNumOfSubdevices > MAX_DEVICES)
                    gnNumOfSubdevices = MAX_DEVICES;


                // Retrieve the information of all installed devices
                if (gnNumOfSubdevices != 0)
                {
                    if ((ErrCde = DRV_DeviceGetSubList(
                        (DWORD)DeviceList[gwDevice].dwDeviceNum,
                        (DEVLIST far *)&SubDeviceList[0],
                        (SHORT)gnNumOfSubdevices,
                        (SHORT far *)&nOutEntries)) != (LONG)SUCCESS)
                    {
                        DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                        MessageBox(hWnd, (LPCSTR)szErrMsg,
                            "Driver Message", MB_OK);
                        return TRUE;
                    }


                    // Initialize the Module List Combobox with the
                    // retrieved information
                    EnableWindow(GetDlgItem(hDlg, IDC_MODULE), TRUE);
                    SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT,
                        0, (LPARAM)((LPSTR)0));

                    for (i = 0; i < gnNumOfSubdevices; i++)
                        SendDlgItemMessage(hDlg, IDC_MODULE, CB_ADDSTRING, 0,
                        (LPARAM)((LPSTR)SubDeviceList[i].szDeviceName));

                    gwSubDevice = 0;

                    SendDlgItemMessage(hDlg, IDC_MODULE, CB_SETCURSEL,
                        (WPARAM)gwSubDevice, (LPARAM)0);
                }
                else
                {
                    EnableWindow(GetDlgItem(hDlg, IDC_MODULE), FALSE);
                    SendDlgItemMessage(hDlg, IDC_MODULE, CB_RESETCONTENT,
                        0, (LPARAM)((LPSTR)0));
                }


                // -------------------------------------------------
                // Initialize Input Range List Combobox, it needs to
                // get device features for gain list
                // -------------------------------------------------

                // Step 1: Open Device
                if (gnNumOfSubdevices == 0)
                {
                    // for non COM port or CAN device
                    ErrCde = DRV_DeviceOpen(
                        DeviceList[gwDevice].dwDeviceNum,
                        (LONG far *)&DriverHandle);
                }
                else
                {
                    // for COM port or CAN device
                    ErrCde = DRV_DeviceOpen(
                        SubDeviceList[gwSubDevice].dwDeviceNum,
                        (LONG far *)&DriverHandle);
                }

                if (ErrCde != SUCCESS)
                {
                    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                    MessageBox(hWnd, (LPCSTR)szErrMsg,
                        "Driver Message", MB_OK);
                    return 0;
                }

                // Step 2: Get device features
                ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
                ptDevFeatures.size = sizeof(DEVFEATURES);
                if ((ErrCde = DRV_DeviceGetFeatures(DriverHandle,
                    (LPT_DeviceGetFeatures)&ptDevFeatures)) != SUCCESS)
                {
                    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                    MessageBox(hWnd, (LPCSTR)szErrMsg, "Driver Message",
                        MB_OK);
                    DRV_DeviceClose((LONG far *)&DriverHandle);
                    return 0;
                }

                // Step 3: Initialize Range Combobox with device features
                gwGainCode = 0;

                if (DevFeatures.usNumGain != 0)
                {
                    EnableWindow(GetDlgItem(hDlg, IDC_INPRANGE), TRUE);
                    SendDlgItemMessage(hDlg, IDC_INPRANGE, CB_RESETCONTENT,
                        0, (LPARAM)((LPSTR)0));
                    for (i = 0; i < (int)DevFeatures.usNumGain; i ++)
                        SendDlgItemMessage(hDlg, IDC_INPRANGE, CB_ADDSTRING, 0,
                        (LPARAM)((LPSTR)(DevFeatures.glGainList[i].szGainStr)));

                    SendDlgItemMessage(hDlg, IDC_INPRANGE,
                        CB_SELECTSTRING, (WPARAM)(-1),
                        (LPARAM)((LPSTR)(DevFeatures.glGainList[gwGainCode].szGainStr)));
                }
                else
                {
                    EnableWindow(GetDlgItem(hDlg, IDC_INPRANGE), FALSE);
                    SendDlgItemMessage(hDlg, IDC_INPRANGE, CB_RESETCONTENT,
                        0, (LPARAM)((LPSTR)0));
                }

                // Step 4: Close device
                DRV_DeviceClose((LONG far *)&DriverHandle);
            }

            return TRUE;

        case IDC_CONVERSION :
            if (HIWORD(wParam) == EN_KILLFOCUS)
            {
                if(SendDlgItemMessage(hDlg, IDC_CONVERSION,
                    EM_GETMODIFY, 0, 0))
                {
                    SendDlgItemMessage(hDlg, IDC_CONVERSION,
                        WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                    gulConvNum = (ULONG)atol(szBuffer);
                    SendDlgItemMessage(hDlg, IDC_CONVERSION,
                        EM_SETMODIFY, FALSE, 0) ;
                }
            }
            return TRUE;
        case IDC_PACER :
            if (HIWORD(wParam) == EN_KILLFOCUS)
            {
                if(SendDlgItemMessage(hDlg, IDC_PACER,
                    EM_GETMODIFY, 0, 0))
                {
                    SendDlgItemMessage(hDlg, IDC_PACER,
                        WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                    gdwPacerRate = (ULONG)atol(szBuffer);
                    SendDlgItemMessage(hDlg, IDC_PACER,
                        EM_SETMODIFY, FALSE, 0) ;
                }
            }
            return TRUE;
        case IDC_INPRANGE :
            if (HIWORD(wParam) == CBN_KILLFOCUS)
            {
                i = (int)SendDlgItemMessage(hDlg, IDC_INPRANGE,
                    CB_GETCURSEL, 0, 0) ;
                if (i != CB_ERR)
                    gwGainCode = (USHORT)i;
            }
            return TRUE;
        case IDC_ESTART :
            if (HIWORD(wParam) == EN_KILLFOCUS)
            {
                if(SendDlgItemMessage(hDlg, IDC_ESTART,
                    EM_GETMODIFY, 0, 0))
                {
                    SendDlgItemMessage(hDlg, IDC_ESTART,
                        WM_GETTEXT, 10, (LPARAM)(LPSTR)szBuffer) ;
                    gwStartChl = (USHORT)atoi(szBuffer);
                    SendDlgItemMessage(hDlg, IDC_ESTART,
                        EM_SETMODIFY, FALSE, 0) ;
                }
            }
            return TRUE;

        case IDC_ESTOP :
            if (HIWORD(wParam) == EN_KILLFOCUS)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -