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

📄 scommtestdlg.cpp

📁 PCusb,一个读取串口原程序,VC++6.0
💻 CPP
📖 第 1 页 / 共 2 页
字号:

      m_ctrlComm.SetCommPort(comcount); //选择com
      if( !m_ctrlComm.GetPortOpen())
	     m_ctrlComm.SetPortOpen(TRUE);   //打开串口
      else
		{return;}
	  
      m_ctrlComm.SetSettings("115200,n,8,1"); //波特率m_fvalue,无校验,8个数据位,1个停止位 
	  m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
      m_ctrlComm.SetRThreshold(1); //1 //czq
      //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
      m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
      m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据	

      id_Search_Send_Ok=1;
}

void CSCommTestDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here
	
}

BOOL CSCommTestDlg::SearchSerial(short comnumber) //搜索串口是否空闲,若有空闲串口返1,否则返0。
{
	CString ComString;
	short   comnum;
	comnum=comnumber;
	if(comnum==1)
	   ComString="com1";
	else if(comnum==2)
	   ComString="com2";
	else if(comnum==3)
	   ComString="com3";
	else if(comnum==4)
	   ComString="com4";
	else if(comnum==5)
	   ComString="com5";
	else if(comnum==6)
	   ComString="com6";
	else if(comnum==7)
	   ComString="com7";
	else if(comnum==8)
	   ComString="com8";
	else if(comnum==9)
	   ComString="com9";
	else if(comnum==10)
	   ComString="com10";
	else if(comnum==11)
	   ComString="com11";
	else if(comnum==12)
	   ComString="com12";
	else if(comnum=13)
	   ComString="com13";
	else if(comnum==14)
	   ComString="com14";
	else if(comnum==15)
	   ComString="com15";
	else if(comnum==16)
	   ComString="com16";
	else if(comnum==17)
	   ComString="com17";
	else if(comnum==18)
	   ComString="com18";
	else if(comnum==19)
	   ComString="com19";
	else if(comnum==20)
	   ComString="com20";
	else 
	   {AfxMessageBox("搜索串口超过20个");return 0;}

	HANDLE m_hCom;
	m_hCom = CreateFile(ComString, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); //打开串口。
    if (m_hCom == (HANDLE)0xFFFFFFFF)
         return 0;           //打开串口失败.
	else
	{
		CloseHandle(m_hCom); //关闭串口。
		return 1;
    }
}


BOOL CSCommTestDlg::SearchUSB()
{
	char        HCName[16];
    HANDLE      hHCDev;
    PCHAR       rootHubName;
    BOOL        success;
    PUSB_NODE_CONNECTION_INFORMATION    connectionInfo;
	HANDLE hHubDevice;

	id_USBLink_HAVE=0;

	for (HCNum = 0; HCNum < NUM_HCS_TO_CHECK; HCNum++)
    {
        wsprintf(HCName, "\\\\.\\HCD%d", HCNum);
        hHCDev = CreateFile(HCName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);
		if (hHCDev == INVALID_HANDLE_VALUE)
			break;   //没找到USB控制器

		PCHAR deviceDesc;
		ULONG           nBytes;

        rootHubName =(char*) GetRootHubName(hHCDev);
		if(rootHubName==NULL)
		{
			  goto end;//错误
		}

		 PUSB_NODE_INFORMATION HubInfo;
		 HubInfo = (PUSB_NODE_INFORMATION)malloc(sizeof(USB_NODE_INFORMATION));
		 PCHAR deviceName;
		 deviceName = (PCHAR)malloc(strlen(rootHubName) + sizeof("\\\\.\\"));
         if (rootHubName != NULL)
         {
			strcpy(deviceName, "\\\\.\\");
			strcpy(deviceName + sizeof("\\\\.\\") - 1, rootHubName);
			hHubDevice = CreateFile(deviceName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);
			free(deviceName);
			if (hHubDevice == INVALID_HANDLE_VALUE)
			{			
				goto end; //错误
			}
			success = DeviceIoControl(hHubDevice,
                              IOCTL_USB_GET_NODE_INFORMATION,
                              HubInfo,
                              sizeof(USB_NODE_INFORMATION),
                              HubInfo,
                              sizeof(USB_NODE_INFORMATION),
                              &nBytes,
                              NULL);
			if (!success)
			{
				goto end;  //错误
			}
		 }
			
		 ULONG port;
		 port=HubInfo->u.HubInformation.HubDescriptor.bNumberOfPorts;
		 for (index=1; index <= port; index++)
		 {
			 ULONG nBytes;
			 nBytes = sizeof(USB_NODE_CONNECTION_INFORMATION) +
                sizeof(USB_PIPE_INFO) * 30;
			 connectionInfo = (PUSB_NODE_CONNECTION_INFORMATION)malloc(nBytes);
			 if (connectionInfo == NULL)
			 {
				 goto end; //错误
			 }
			 connectionInfo->ConnectionIndex = index;
			 success = DeviceIoControl(hHubDevice,
                                  IOCTL_USB_GET_NODE_CONNECTION_INFORMATION,
                                  connectionInfo,
                                  nBytes,
                                  connectionInfo,
                                  nBytes,
                                  &nBytes,
                                  NULL);
			 if (!success)
			 {
				 free(connectionInfo);
				 goto end; //错误
			 }

			 deviceDesc = NULL;
	         if (connectionInfo->ConnectionStatus == DeviceConnected)
			 {
				 if((connectionInfo->DeviceDescriptor.idVendor==USB_VID) &&(connectionInfo->DeviceDescriptor.idProduct==USB_PID))
				 {id_USBLink_HAVE=1;return 1;}//AfxMessageBox("USBOK");}
			 }
		 }
         end:; 
		 CloseHandle(hHubDevice);
    	 CloseHandle(hHCDev);
    }
    return 1;
}

PCHAR CSCommTestDlg::GetRootHubName(HANDLE HostController)
{
	BOOL                success;
    ULONG               nBytes;
    USB_ROOT_HUB_NAME   rootHubName;
    PUSB_ROOT_HUB_NAME  rootHubNameW;
    PCHAR               rootHubNameA;

    rootHubNameW = NULL;
    rootHubNameA = NULL;

    success = DeviceIoControl(HostController,
                              IOCTL_USB_GET_ROOT_HUB_NAME,
                              0,
                              0,
                              &rootHubName,
                              sizeof(rootHubName),
                              &nBytes,
                              NULL);

    if (!success)
    {
        goto GetRootHubNameError;
    }

    nBytes = rootHubName.ActualLength;

    rootHubNameW =(PUSB_ROOT_HUB_NAME) malloc(nBytes);

    if (rootHubNameW == NULL)
    {

        goto GetRootHubNameError;
    }

    success = DeviceIoControl(HostController,
                              IOCTL_USB_GET_ROOT_HUB_NAME,
                              NULL,
                              0,
                              rootHubNameW,
                              nBytes,
                              &nBytes,
                              NULL);

    if (!success)
    {
       goto GetRootHubNameError;
    }

    rootHubNameA = WideStrToMultiStr(rootHubNameW->RootHubName);
    free(rootHubNameW);

    return rootHubNameA;


GetRootHubNameError:
    if (rootHubNameW != NULL)
    {
        free(rootHubNameW);
        rootHubNameW = NULL;
		//ShowMessage("出错!\r\n"); //cz
    }

    return NULL;
}

PCHAR CSCommTestDlg::WideStrToMultiStr(PWCHAR WideStr)
{
    ULONG nBytes;
    PCHAR MultiStr;
    nBytes = WideCharToMultiByte(
                 CP_ACP,
                 0,
                 WideStr,
                 -1,
                 NULL,
                 0,
                 NULL,
                 NULL);

    if (nBytes == 0)
    {
        return NULL;
    }
    MultiStr =(PCHAR) malloc(nBytes);

    if (MultiStr == NULL)
    {
        return NULL;
    }
    nBytes = WideCharToMultiByte(
                 CP_ACP,
                 0,
                 WideStr,
                 -1,
                 MultiStr,
                 nBytes,
                 NULL,
                 NULL);

    if (nBytes == 0)
    {
        free(MultiStr);
        return NULL;
    }

    return MultiStr;
}

BOOL CSCommTestDlg::SearchUSBOne()
{
    char        HCName[16];

    HANDLE      hHCDev;
    PCHAR       rootHubName;
    BOOL        success;
    PUSB_NODE_CONNECTION_INFORMATION    connectionInfo;
	HANDLE hHubDevice;

	id_USBLink_OK=0;
	//for (HCNum = 0; HCNum < NUM_HCS_TO_CHECK; HCNum++)
    //{
	
        wsprintf(HCName, "\\\\.\\HCD%d", HCNum);	//HCNum ok
        hHCDev = CreateFile(HCName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);
		if (hHCDev == INVALID_HANDLE_VALUE)
			goto end;   //没找到USB控制器

		PCHAR deviceDesc;
		ULONG           nBytes;

        rootHubName =(char*) GetRootHubName(hHCDev);
		if(rootHubName==NULL)
		{
			  goto end;//错误
		}

		 PUSB_NODE_INFORMATION HubInfo;
		 HubInfo = (PUSB_NODE_INFORMATION)malloc(sizeof(USB_NODE_INFORMATION));
		 PCHAR deviceName;
		 deviceName = (PCHAR)malloc(strlen(rootHubName) + sizeof("\\\\.\\"));
         if (rootHubName != NULL)
         {
			strcpy(deviceName, "\\\\.\\");
			strcpy(deviceName + sizeof("\\\\.\\") - 1, rootHubName);
			hHubDevice = CreateFile(deviceName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);
			free(deviceName);
			if (hHubDevice == INVALID_HANDLE_VALUE)
			{			
				goto end; //错误
			}
			success = DeviceIoControl(hHubDevice,
                              IOCTL_USB_GET_NODE_INFORMATION,
                              HubInfo,
                              sizeof(USB_NODE_INFORMATION),
                              HubInfo,
                              sizeof(USB_NODE_INFORMATION),
                              &nBytes,
                              NULL);
			if (!success)
			{
				goto end;  //错误
			}
		 }
			
		 int port;
		 port=HubInfo->u.HubInformation.HubDescriptor.bNumberOfPorts;
		 //for (index=1; index <= port; index++)
		 {                                         //index ok
			 ULONG nBytes;
			 nBytes = sizeof(USB_NODE_CONNECTION_INFORMATION) +
                sizeof(USB_PIPE_INFO) * 30;
			 connectionInfo = (PUSB_NODE_CONNECTION_INFORMATION)malloc(nBytes);
			 if (connectionInfo == NULL)
			 {
				 goto end; //错误
			 }
			 connectionInfo->ConnectionIndex = index;
			 success = DeviceIoControl(hHubDevice,
                                  IOCTL_USB_GET_NODE_CONNECTION_INFORMATION,
                                  connectionInfo,
                                  nBytes,
                                  connectionInfo,
                                  nBytes,
                                  &nBytes,
                                  NULL);
			 if (!success)
			 {
				 free(connectionInfo);
				 goto end; //错误
			 }

			 deviceDesc = NULL;
	         if (connectionInfo->ConnectionStatus == DeviceConnected)
			 {
				 if((connectionInfo->DeviceDescriptor.idVendor==USB_VID) &&(connectionInfo->DeviceDescriptor.idProduct==USB_PID))
				 {id_USBLink_OK=1;}//AfxMessageBox("USBOK");}
			 }
		 }
         end:; 
    //}
	CloseHandle(hHubDevice);
	CloseHandle(hHCDev);
    return 1;
}

⌨️ 快捷键说明

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