示例#1
0
/*************************************************************************
**
**    Function      : canClose_driver 
**
**    Description   : Close the message and control channel
**    Parameters    : CAN_HANDLE inst		- handle for CAN controller 
**    Returnvalue   : 
**   
*************************************************************************/
 int __stdcall canClose_driver(CAN_HANDLE inst)
   {
	printf("CAN close \n");
	canControlReset(hCanCtl);
	canChannelClose(hCanChn);
	canControlClose(hCanCtl);
	vciDeviceClose(hDevice);
	DeleteTimerQueueTimer(NULL,hTimerHandle,NULL); 
   return 1;
   }
LRESULT CSocketSelectDlg::DeviceListInsert(VCIID vciid)
{
  HANDLE        hDevice;
  LRESULT       lIndex;
  TCHAR         szText[512];
  VCIDEVICEINFO sInfo;

  lIndex = DeviceListSearch(vciid);

  if (lIndex == LB_ERR)
  {
    if (vciDeviceOpen(vciid, &hDevice) == VCI_OK)
    {
      if (vciDeviceGetInfo(hDevice, &sInfo) == VCI_OK)
      {
        wsprintf(szText, TEXT("%08X%08X - %s"),
          vciid.AsLuid.HighPart, vciid.AsLuid.LowPart,  sInfo.Description);

        lIndex = SendItemMessage(IDC_DEVLIST,
                   LB_ADDSTRING, 0, (LPARAM) szText);

        if (lIndex >= 0)
        {
          SendItemMessage(IDC_DEVLIST,
            LB_SETITEMDATA, lIndex, (LPARAM) hDevice);
        }
        else
        {
          vciDeviceClose(hDevice);
        }
      }
      else
      {
        vciDeviceClose(hDevice);
      }
    }
  }

  return( lIndex );
}
void CSocketSelectDlg::DeviceListUpdate( )
{
  LRESULT       lCount;
  LRESULT       lData;
  VCIDEVICEINFO sInfo;

  //
  // remove all unavailable devices from the device list
  //
  lCount = SendItemMessage(IDC_DEVLIST, LB_GETCOUNT, 0, 0);

  for (LRESULT lIndex = 0; lIndex < lCount; lIndex++)
  {
    lData = SendItemMessage(IDC_DEVLIST, LB_GETITEMDATA, lIndex, 0);
    if ((lData != LB_ERR) &&
        (vciDeviceGetInfo((HANDLE) lData, &sInfo) != VCI_OK))
    {
      vciDeviceClose((HANDLE) lData);
      SendItemMessage(IDC_DEVLIST, LB_DELETESTRING, lIndex, 0);
    }
  }

  //
  // The selection may change because the currently selected
  // item is deleted.
  //
  DeviceListSelect();

  //
  // enumerate all devices
  //
  if (m_hDevEnu != NULL)
  {
    vciEnumDeviceReset(m_hDevEnu);
    while (vciEnumDeviceNext(m_hDevEnu, &sInfo) == VCI_OK)
      DeviceListInsert(sInfo.VciObjectId);
  }
}
void CSocketSelectDlg::DeviceListClear( )
{
  LRESULT lCount;
  LRESULT lData;

  lCount = SendItemMessage(IDC_DEVLIST, LB_GETCOUNT, 0, 0);

  if (lCount != LB_ERR)
  {
    for (LRESULT lIndex = 0; lIndex < lCount; lIndex++)
    {
      lData = SendItemMessage(IDC_DEVLIST, LB_GETITEMDATA, lIndex, 0);

      if ((lData != 0) && (lData != LB_ERR))
      {
        vciDeviceClose((HANDLE) lData);
        SendItemMessage(IDC_DEVLIST, LB_SETITEMDATA, lIndex, 0);
      }
    }
  }

  SendItemMessage(IDC_DEVLIST, LB_RESETCONTENT, 0, 0);
  m_hCurDev = INVALID_HANDLE_VALUE;
}