根据设备描述, 找到并返回一个串口设备的串口名称

 1.       根据设备类型获得设备类的GUID

VC来说, 这些GUID定义在DEVGUID.H文件中. 假设是一个端口类设备, GUIDDEFINE_GUID( GUID_DEVCLASS_PORTS,          0x4d36e978L, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 );

2.       根据GUID得到设备类信息句柄

Windows DDK, SetupDiGetClassDevs, 返回一个HDEVINFO类型句柄, 可通过它枚举该设备类下所有设备.

3.       根据设备类信息句柄依次枚举这个设备类下的所有设备的设备信息

Windows DDK, SetupDiEnumDeviceInfo, 输出一个SP_DEVINFO_DATA结构体指针, 这个结构体包含了设备的GUID, 设备实例(Device Instance)等信息.

4.       获得当前设备的属性

Windows DDK, SetupDiGetDeviceRegistryProperty, retrieves the specified Plug and Play device property. 得到一个特定的即插即用设备的属性. 可以传入参数, 以得到不同类型的属性. 通常需要连续调用两次, 每一次根据需要的属性类型, 得到传出属性所需内存大小, 第二次传出所需属性.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Linux平台上,你可以使用C++语言编写一个函数来初始化串口返回串口设备文件描述符。下面是一个示例: ```cpp #include <iostream> #include <fcntl.h> #include <termios.h> #include <unistd.h> int initializeSerialPort(const char* portName) { int fd = open(portName, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd == -1) { std::cerr << "无法打开串口设备" << std::endl; return -1; } struct termios tty; if (tcgetattr(fd, &tty) != 0) { std::cerr << "无法获取串口属性" << std::endl; return -1; } // 设置波特率为9600 cfsetospeed(&tty, B9600); cfsetispeed(&tty, B9600); // 8个数据位,无奇偶校验,1个停止位 tty.c_cflag &= ~PARENB; tty.c_cflag &= ~CSTOPB; tty.c_cflag &= ~CSIZE; tty.c_cflag |= CS8; // 禁用硬件流控制 tty.c_cflag &= ~CRTSCTS; // 使能读取和写入 tty.c_cflag |= CREAD | CWRITE; // 设置输入模式为非规范模式 tty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); // 设置输出模式为非规范模式 tty.c_oflag &= ~OPOST; // 设置字符超时时间和最小字符数 tty.c_cc[VTIME] = 10; // 1秒超时 tty.c_cc[VMIN] = 0; // 清除串口缓冲区 tcflush(fd, TCIFLUSH); // 应用新的串口设置 if (tcsetattr(fd, TCSANOW, &tty) != 0) { std::cerr << "无法设置串口属性" << std::endl; return -1; } return fd; } int main() { const char* portName = "/dev/ttyS0"; // 根据实际情况修改串口设备名称 int serialPortFD = initializeSerialPort(portName); if (serialPortFD == -1) { std::cerr << "初始化串口失败" << std::endl; return -1; } std::cout << "串口初始化成功,设备文件描述符:" << serialPortFD << std::endl; // 可以在这里进行其他操作,如读取、写入串口数据 close(serialPortFD); // 关闭串口设备 return 0; } ``` 在上述示例中,`initializeSerialPort` 函数接受一个串口设备名称作为参数,并返回一个串口设备文件描述符。在函数内部,首先通过 `open` 函数打开串口设备,并设置打开模式为读写、无控制终端以及非阻塞模式。然后使用 `tcgetattr` 和 `tcsetattr` 函数来获取和设置串口的属性,包括波特率、数据位、停止位、奇偶校验、流控制等。最后,清空串口缓冲区并返回串口设备文件描述符。 在 `main` 函数中,你可以根据需要修改要打开的串口设备名称,然后调用 `initializeSerialPort` 函数进行初始化。如果初始化成功,将会打印串口设备文件描述符。你可以在此基础上进行其他操作,如读取、写入串口数据。最后,记得使用 `close` 函数关闭串口设备
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值