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

📄 dio_soft_dword.c

📁 16 relay output channels and 16 isolated digital input channels LED indicators to show activated
💻 C
📖 第 1 页 / 共 3 页
字号:
            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 Output Channel
         // -----------------------------
		   sprintf( szBuffer, "%d", gwPort);
         SendDlgItemMessage(
            hDlg, 
            IDC_PORT, 
            EM_REPLACESEL, 
            0,
            (LPARAM)((LPSTR)szBuffer));
         return TRUE;
      }       
   case WM_COMMAND :
        switch (LOWORD(wParam))
        {
        case IDOK :
           {
               // get device selection
               dwIndex = SendDlgItemMessage(
                  hDlg, 
                  IDC_DEVICE,
				      CB_GETCURSEL, 
                  0, 
                  0);
			      if (dwIndex != CB_ERR)                   
               {
                     gwDevice = (WORD)dwIndex;
               }

			      // get sub-device selection
               dwIndex = SendDlgItemMessage(
                  hDlg, 
                  IDC_MODULE,
				      CB_GETCURSEL, 
                  0, 
                  0);
			      if (dwIndex != CB_ERR)
               {
                  gwSubDevice = (WORD)dwIndex;
               }
                   
               // Get channel number
               if ( SendDlgItemMessage(
                  hDlg, 
                  IDC_PORT,
				      EM_GETMODIFY, 
                  0, 
                  0))
               {
                  SendDlgItemMessage(
                     hDlg, 
                     IDC_PORT,
					      WM_GETTEXT,
							10,
							( LPARAM )( LPSTR )szBuffer ) ;
						gwPort = atoi( szBuffer );
               }
			   
               EndDialog(hDlg, 0);
               return TRUE;
           }			   
         case IDCANCEL :
            {
               EndDialog(hDlg, 0);
               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)
			      {
				      dwIndex = SendDlgItemMessage(
                     hDlg, 
                     IDC_DEVICE,
					      CB_GETCURSEL, 
                     0, 
                     0);
                  if (dwIndex != 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)
				      {
					      ErrCde = DRV_DeviceGetSubList(
						      (DWORD)DeviceList[gwDevice].dwDeviceNum,
						      (DEVLIST far *)&SubDeviceList[0],
						      (SHORT)gnNumOfSubdevices,
						      (SHORT far *)&nOutEntries);
                     if (ErrCde != (LONG)SUCCESS)
					      {
						      DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
						      MessageBox(
                           hMainWnd, 
                           (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));
				      }
			      }
			      return TRUE;
            }   
        }
        break;
    }
    return FALSE ;
}

//*****************************************************************************
//    FUNCTION: RunDlgProc(HWND, unsigned, WPARAM, LPARAM)
//
//    PURPOSE:  Processes dialog box messages for IDD_RUN
//-----------------------------------------------------------------------------
BOOL FTYPE RunDlgProc(
   HWND        hDlg,                          // window handle
   unsigned    message,                       // type of message
   WPARAM      wParam,                        // additional information
   LPARAM      lParam )                        // additional information
{
   char        szBuffer[40];
	char		   *pchar;
   int i;
   USHORT usPorts;

   switch (message)
   {
   case WM_INITDIALOG :
		{
         // Initialize Output Byte Value Check Button
         for (i = 0; i < 32; i++)
         {
            CheckDlgButton( hDlg, (IDC_D0 + i), ( glDoState & (0x1<<i)) );
         }
         
			// show write Word mask.
			//_ltoa( gwWriteMask, szBuffer, 16 );
         sprintf(szBuffer,"%X",gwWriteMask);
			SendDlgItemMessage( 
            hDlg,
				IDC_WRITEWORDMASK,
				WM_SETTEXT,
				0,
				( LPARAM )( ( LPSTR )szBuffer ) );
			// show write DWord mask.
			//_ltoa( glWriteMask, szBuffer, 16 );
         sprintf(szBuffer,"%X",glWriteMask);
			SendDlgItemMessage( 
            hDlg,
				IDC_WRITEDWORDMASK,
				WM_SETTEXT,
				0,
				( LPARAM )( ( LPSTR )szBuffer ) );

         //
         // 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)
			{
            strcpy(szErrMsg,"Device open error !");
            MessageBox(hDlg,(LPCSTR)szErrMsg,"Notice",MB_OK);
            return 0;
			}

         //Get device features
         ptDevFeatures.buffer = (LPDEVFEATURES)&DevFeatures;
         ptDevFeatures.size = sizeof(DEVFEATURES);
         ErrCde = DRV_DeviceGetFeatures(
            DriverHandle,
            (LPT_DeviceGetFeatures)&ptDevFeatures);
         if (ErrCde != SUCCESS)
         {
             DRV_GetErrorMessage(ErrCde,(LPSTR)szErrMsg);
             MessageBox(hDlg,(LPCSTR)szErrMsg,"Driver Message",MB_OK);
             DRV_DeviceClose((LONG far *)&DriverHandle);
         }
      
         //If the hardware does not have DI ports
         //Then the DI functions is unuasable
         if (ptDevFeatures.buffer->usMaxDIChl == 0)
         {
            EnableWindow(GetDlgItem(hDlg, IDC_READWORD), FALSE);
            EnableWindow(GetDlgItem(hDlg, IDC_READDWORD), FALSE);
         }

         //disable unused channels according to port num
         usPorts = (ptDevFeatures.buffer->usMaxDOChl)/8;
         usTemp = ptDevFeatures.buffer->usMaxDOChl % 8;
         if (usTemp != 0)
         {
            usPorts++;
            for (i = (usPorts - 1) * 8 + usTemp; i < usPorts * 8; i++)
            {
               EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
            }
         }
         if (gwPort > (usPorts - 1))
         {
            for (i = 0; i < 32; i++)
            {
               EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
            }
         }
         if (gwPort == (usPorts - 1))
         {
            for (i = 8; i < 32; i++)
            {
               EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
            }
         }
         else if (gwPort == (usPorts - 2))
         {
            for (i = 16; i < 32; i++)
            {
               EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
            }
         }
         else if (gwPort == (usPorts - 3))
         {
            for (i = 24; i < 32; i++)
            {
               EnableWindow(GetDlgItem(hDlg, (IDC_D0 + i)), FALSE);
            }
         }
                 
         return TRUE;
		}
   case WM_COMMAND :
		{
         switch (LOWORD(wParam))
			{
         case IDCANCEL :
				{
               EndDialog(hDlg, 0);
               if (DriverHandle != (LONG)NULL)
               {
                  ErrCde = DRV_DeviceClose(&DriverHandle);
               }
               if (ErrCde != SUCCESS)
			      {

⌨️ 快捷键说明

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