移植 C++ 串口奇偶校验更改代码从 Linux 到 Windows
Porting C++ serial port parity change code from Linux to Windows
我没有真正的编程经验,但我正在尝试将 C++ 代码从 Linux 移植到 Windows。这是一个写入串行端口并读取答案的函数,然后对其进行解析。我可能会把它们放在一起,但我不确定如何将以下内容从 Linux 移植到 Windows:
void serialPort::mark() {
options.c_cflag |= PARENB | CMSPAR | PARODD;
tcsetattr(fd, TCSAFLUSH, &options);
}
和
void serialPort::space() {
options.c_cflag |= PARENB | CMSPAR;
options.c_cflag &= ~PARODD;
tcsetattr(fd, TCSANOW, &options);
这些函数用于在写入串口时在标记和space奇偶校验之间切换——命令的第一个字节必须用标记奇偶校验写入,其余字节用space奇偶校验写入,像这样:
char sum=checksum(length,command);
char* bufptr;
int nbytes=0;
mark();
write(fd,&length,1); //write first byte with mark parity
usleep(2000);
read(fd,buffer,255);
space(); //write remaining bytes with space parity
for(int i=0; i<length;i++){
write(fd,&command[i],1);
usleep(2000);
read(fd,buffer,1);
}
write(fd,&sum,1);
但我坚持这一点。我什至不知道 Windows 是否可行。有人请有想法吗?非常感谢。
Windows 上的等效操作是使用传递的 DCB 结构的奇偶校验成员中的适当标志调用 SetCommState。它确实支持标记奇偶校验和 space 奇偶校验。
我没有真正的编程经验,但我正在尝试将 C++ 代码从 Linux 移植到 Windows。这是一个写入串行端口并读取答案的函数,然后对其进行解析。我可能会把它们放在一起,但我不确定如何将以下内容从 Linux 移植到 Windows:
void serialPort::mark() {
options.c_cflag |= PARENB | CMSPAR | PARODD;
tcsetattr(fd, TCSAFLUSH, &options);
}
和
void serialPort::space() {
options.c_cflag |= PARENB | CMSPAR;
options.c_cflag &= ~PARODD;
tcsetattr(fd, TCSANOW, &options);
这些函数用于在写入串口时在标记和space奇偶校验之间切换——命令的第一个字节必须用标记奇偶校验写入,其余字节用space奇偶校验写入,像这样:
char sum=checksum(length,command);
char* bufptr;
int nbytes=0;
mark();
write(fd,&length,1); //write first byte with mark parity
usleep(2000);
read(fd,buffer,255);
space(); //write remaining bytes with space parity
for(int i=0; i<length;i++){
write(fd,&command[i],1);
usleep(2000);
read(fd,buffer,1);
}
write(fd,&sum,1);
但我坚持这一点。我什至不知道 Windows 是否可行。有人请有想法吗?非常感谢。
Windows 上的等效操作是使用传递的 DCB 结构的奇偶校验成员中的适当标志调用 SetCommState。它确实支持标记奇偶校验和 space 奇偶校验。