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

📄 cdadint.c

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 C
📖 第 1 页 / 共 5 页
字号:
             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: Allocate memory for driver
             if((hBuf=(USHORT far *)GlobalAlloc(GHND,
                 sizeof(USHORT) * gulConvNum)) == 0)
             {
                 MessageBox(hWnd,"Not enough memory for buffer ",
                     "High Speed",MB_OK);
                 DRV_DeviceClose((LONG far *)&DriverHandle);
                 return 0;
             }

             // Step 4: Allocate memory for Voltage data or Raw data
             if((hUserBuf=(FLOAT far *)GlobalAlloc(GHND,
                 sizeof(FLOAT) * gulConvNum)) == 0)
             {
                 MessageBox(hWnd,"Not enough memory for buffer ",
                     "High Speed",MB_OK);
                 GlobalFree(hBuf);
                 DRV_DeviceClose((LONG far *)&DriverHandle);
                 return 0;
             }

             ptFAIIntWatchdogStart.buffer = (USHORT far *)GlobalLock(hBuf);
             ptFAITransfer.DataBuffer     = (FLOAT far  *)GlobalLock(hUserBuf);

             // Step 5: Enable event feature
             ptEnableEvent.EventType = ADS_EVT_INTERRUPT  |
                                       ADS_EVT_BUFCHANGE  |
                                       ADS_EVT_TERMINATED |
                                       ADS_EVT_OVERRUN    |
                                       ADS_EVT_WATCHDOG;
             ptEnableEvent.Enabled = gwEvtFlag;
             ptEnableEvent.Count   = gwIntrCount;

             if ((ErrCde = DRV_EnableEvent(DriverHandle,
                 (LPT_EnableEvent)&ptEnableEvent)) != 0)
             {
                 DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                 MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                 GlobalUnlock(hBuf);
                 GlobalUnlock(hUserBuf);
                 GlobalFree(hBuf);
                 GlobalFree(hUserBuf);
                 DRV_DeviceClose((LONG far *)&DriverHandle);
                 return 0;
             }

             for (i=0 ; i < gwNumChl ; i++)
             {
                 // gain setting
                 if (!gwGainList)
                 {
                     gwGainCde[i] = DevFeatures.glGainList[gwGainCode].usGainCde;      // no gain list
                 }
                 else
                 {
                     temp = gwGain[i];
                     gwGainCde[i] = DevFeatures.glGainList[temp].usGainCde;
                 }

                 // condition setting
                 if (!gwCondList)
                     gwCond[i] = gwCondition;   // no condition list

                 // level setting
                 if (!gwLevelList)
                 {
                     gfLevel[i].fHigh = fHiLevel;  // no level list
                     gfLevel[i].fLow  = fLoLevel;  // no level list
                 }
             }

             // Step 6: Configuration watchdog interrupt transfer
             ptFAIWatchdogConfig.StartChan  = gwStartChl;
             ptFAIWatchdogConfig.NumChans   = gwNumChl;
             ptFAIWatchdogConfig.GainList   = &gwGainCde[0];
             ptFAIWatchdogConfig.CondList   = &gwCond[gwStartChl];// 8/7/1998 Eric
             ptFAIWatchdogConfig.LevelList  = &gfLevel[0];
             if (gwAcqMode)
                 ptFAIWatchdogConfig.TrigMode = PRE_TRIG;
             else
                 ptFAIWatchdogConfig.TrigMode = POST_TRIG;

             if ((ErrCde = DRV_FAIWatchdogConfig(DriverHandle,
                 (LPT_FAIWatchdogConfig)&ptFAIWatchdogConfig)) != 0)
             {
                 DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                 MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                 GlobalUnlock(hBuf);
                 GlobalUnlock(hUserBuf);
                 GlobalFree(hBuf);
                 GlobalFree(hUserBuf);
                 DRV_DeviceClose((LONG far *)&DriverHandle);
                 return 0;
             }

             // Step 7: Start watchdog interrupt transfer
             ptFAIIntWatchdogStart.TrigSrc    = gwExtTrig;
             ptFAIIntWatchdogStart.SampleRate = gdwPacerRate;
             ptFAIIntWatchdogStart.count      = gulConvNum;
             ptFAIIntWatchdogStart.cyclic     = gwCyclicMode;
             ptFAIIntWatchdogStart.IntrCount  = gwIntrCount;

             if ((ErrCde = DRV_FAIIntWatchdogStart(DriverHandle,
                 (LPT_FAIIntWatchdogStart)&ptFAIIntWatchdogStart)) != 0)
             {
                 DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                 MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                 GlobalUnlock(hBuf);
                 GlobalUnlock(hUserBuf);
                 GlobalFree(hBuf);
                 GlobalFree(hUserBuf);
                 DRV_DeviceClose((LONG far *)&DriverHandle);
                 return 0;
             }

             gwCyclicCount = 0;

             // if event feature is enabled , then create one thread.
             if (gwEvtFlag)
             {
                 hThreadHandle = CreateThread(0, 0,
                     (LPTHREAD_START_ROUTINE) UserThread,
                     0, 0, (LPDWORD)&dwThreadID);
             }

             Sleep(0);

             EnableMenuItem(hMenu, IDM_RUN, MF_DISABLED | MF_BYCOMMAND);

             // Enable stop and status buttons
             EnableWindow(hwndStopButton, TRUE);
             EnableWindow(hwndStatusButton, TRUE);

             return 0;

            //end IDM_RUN

           case IDC_STOPBUTTON:
               
                // Disable stop and status buttons
                EnableWindow(hwndStopButton, FALSE);
                EnableWindow(hwndStatusButton, FALSE);

                // Stop A/D conversion for high speed
                if ((ErrCde = DRV_FAITerminate(DriverHandle)) != 0)
                {
                    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                    MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                    GlobalUnlock(hBuf);
                    GlobalUnlock(hUserBuf);
                    GlobalFree(hBuf);
                    GlobalFree(hUserBuf);
                    DRV_DeviceClose((LONG far *)&DriverHandle);     
					return 0;
                }   
				if (gwEvtFlag == 0) 
				{
					adTerminateEvent();
				}
                return 0;

           case IDC_STATUSBUTTON:

                // Get Interrupt transfer status
                ptFAICheck.ActiveBuf = &gwActiveBuf;
                ptFAICheck.stopped   = &gwStopped;
                ptFAICheck.retrieved = &gulRetrieved;
                ptFAICheck.overrun   = &gwOverrun;
                ptFAICheck.HalfReady = &gwHalfReady;

                if ((ErrCde = DRV_FAICheck(DriverHandle,
                    (LPT_FAICheck)&ptFAICheck)) != 0)
                {
                    DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
                    MessageBox(hWnd,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
                    GlobalUnlock(hBuf);
                    GlobalUnlock(hUserBuf);
                    GlobalFree(hBuf);
                    GlobalFree(hUserBuf);
                    DRV_DeviceClose((LONG far *)&DriverHandle);
                    return 0;
                }

                // Display the status of the A/D conversion
                sprintf(szDest, "Cyclic Counts: %d\n", gwCyclicCount);
                if (gwHalfReady == 0)
                    strcpy(szTemp, "Buffer : not  ready\n");
                else if (gwHalfReady == 1)
                    strcpy(szTemp, "Buffer : half ready\n");
                else if (gwHalfReady == 2)
                    strcpy(szTemp, "Buffer : full ready\n");
                else
                    strcpy(szTemp, "Buffer : unknow \n");
                strcat(szDest, szTemp);
                ratio = 100.0 * gulRetrieved / gulConvNum;
                szStr = fcvt((double)ratio, 0, &dec, &sign);
                strcat(szDest, "Finish:  ");
                strcat(szDest, szStr);
                strcat(szDest, "%...");
                MessageBox(hWnd,(LPCSTR)szDest, "Check Status", MB_OK);

                return 0;

          }

    case WM_DESTROY:

         PostQuitMessage(0);
         break;

    default:
         return (DefWindowProc(hWnd, message, wParam, lParam));
      }

   return ((LONG)NULL);
}

//------------------------------------------------------------------
void UserThread()
{
    USHORT usEventType;
    LONG  ErrCde;
 // DWORD TickValue;

 // TickValue = GetTickCount();
 // TickValue = TickValue + 500000;
 // while(TickValue > GetTickCount())

	while (1)
    {
        // Check message
        ptCheckEvent.EventType = &usEventType;
        ptCheckEvent.Milliseconds = 50000;

        if ((ErrCde = DRV_CheckEvent(DriverHandle,
            (LPT_CheckEvent)&ptCheckEvent)) != 0)
        {
            MessageBox(hWnd,"Check Event Error !","Thread Message",MB_OK);
            return ;
        }

        // Process interrupt event
        if (usEventType & ADS_EVT_INTERRUPT)
            adInterruptEvent();

        // Process buffer change event
        if (usEventType & ADS_EVT_BUFCHANGE)
            adBufChangeEvent();

        // Process overrun event
        if (usEventType & ADS_EVT_OVERRUN)
            adOverrunEvent();

        // Process watchdog event
        if (usEventType & ADS_EVT_WATCHDOG)
            adWatchdogEvent();

        // Process terminate event
        if (usEventType & ADS_EVT_TERMINATED)
        {
            adTerminateEvent();
            return ;
        }
    }

 // MessageBox(hWnd,"Never Get Any Event !","Thread Message",MB_OK);
}

//------------------------------------------------------------------
void adInterruptEvent()
{
    return;
}

//------------------------------------------------------------------
void adBufChangeEvent()
{
    ptFAICheck.ActiveBuf = &gwActiveBuf;
    ptFAICheck.stopped   = &gwStopped;
    ptFAICheck.retrieved = &gulRetrieved;
    ptFAICheck.overrun   = &gwOverrun;
    ptFAICheck.HalfReady = &gwHalfReady;

    if ((ErrCde = DRV_FAICheck(DriverHandle,
         (LPT_FAICheck)&ptFAICheck)) != 0)
    {
        DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
        MessageBox(hWnd,(LPCSTR)szErrMsg,"Thread Message",MB_OK);
        return ;
    }

    if (gwHalfReady == 1)  // first ready
    {
        ptFAITransfer.ActiveBuf = 0;   // single buffer
        ptFAITransfer.DataType = gwDataType;
        ptFAITransfer.start    = 0;
        ptFAITransfer.count    = gulConvNum/2;
        ptFAITransfer.overrun  = &gwOverrun;

        if ((ErrCde = DRV_FAITransfer(DriverHandle,
            (LPT_FAITransfer)&ptFAITransfer)) != 0)
        {
            DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
            MessageBox(hWnd,(LPCSTR)szErrMsg,"Thread Message",MB_OK);
            return ;
        }
    }
    else if (gwHalfReady == 2) // second half ready
    {
        ptFAITransfer.ActiveBuf = 0;   // single buffer
        ptFAITransfer.DataType = gwDataType;
        ptFAITransfer.start   

⌨️ 快捷键说明

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