- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经通过QSerialPort打开了到使用tty0tty nullmodem仿真器创建的仿真串行端口的工作连接,并且可以向其中写入数据:
QSerialPort serial_stream;
...
serial_stream.setPortName(QString("/dev/tnt0"));
bool loc = serial_stream.open(serial_stream.ReadWrite)
...
serial_stream.write(buf);
screen /dev/tnt1
int size = serial_stream.bytesAvailable();
QByteArray data = serial_stream.read(size);
#include <unistd.h>
...
usleep(15*1000000);
echo “TEXT“ > /dev/tnt1
最佳答案
使用QSerialPort使用tty0tty - null modem emulator (v1.2)发送/读取数据
1.建立tty0tty-connections:
有两种方式可以建立tty0tty连接(在两个虚拟端口之间)。两种方式都可能需要kernel header files。对于2.,绝对有必要,否则error while make是不可避免的。
(1.)简短的方法:
下载并解压缩tty0tty(标题中的第一个链接)。
打开一个终端,然后cd
到[Path to tty0tty-folder]/tty0tty/pts
执行sudo ./tty0tty
然后应该显示两个连接的pseudo terminal slaves:
(/dev/pts/X) <=> (/dev/pts/Y)
,带有X,Y变量。
(2.)更长的途径(但或多或少是永久的):
遵循此Installation guide
跨靴的持久性可能无法正常工作,因此在重新启动后有必要重复安装指南的以下部分:
加载模块sudo depmod
sudo modprobe tty0tty
为新的串行端口(native terminal devices)授予适当的权限sudo chmod 666 /dev/tnt*
执行ls /dev/tnt*
后,将显示端口列表:
/dev/tnt0 ... /dev/tnt7
2.测试tty0tty-connection是否有效(可选):
可以使用cat测试连接:
打开一个终端[1],然后显示一个伪/本机终端设备的输出:
(1。)cat /dev/pts/X
或(2。)cat /dev/tnt0
打开另一个终端[2]并写入此伪/本机终端设备:
(1。)echo "message" > /dev/pts/Y
或(2。)echo "hello" > /dev/tnt1
输出应显示在端子[1]中:
message
附加信息:要停止猫按:Ctrl + Z
3.在Qt项目中使用QSerialPort打开终端设备作为端口:
将串行端口引用添加到[projectname].pro
文件中的Qt-specific configuration options:
QT += serialport
附加信息:允许将所有引用放在一行中:
即QT+= core gui serialport ...
在所需的[name].h
文件中添加所需的header file:
#include <QtSerialPort/QSerialPort>
添加两个QSerialPort对象,通过void QSerialPort::setPortName(const QString &name)
设置终端设备的路径,并以所需的权限(bool QSerialPort::open(OpenMode mode)
,ReadOnly
,WriteOnly
)通过ReadWrite
打开端口。例:
std::string tty0ttyPort1 = "/dev/tnt0";// or = "/dev/pts/X
std::string tty0ttyPort2 = "/dev/tnt1";// or = "/dev/pts/Y
QSerialPort qport1;
QSerialPort qport2;
qport1.setPortName(QString(tty0ttyPort1.c_str()));
bool isOpen1 = qport1.open(qport1.ReadWrite);//Read and Write permission
std::cout << "isOpen1: " << isOpen1 << std::endl;
qport2.setPortName(QString(tty0ttyPort2.c_str()));
bool isOpen2 = qport2.open(qport2.ReadWrite);
std::cout << "isOpen2: " << isOpen2 << std::endl;
isOpen1
和
isOpen2
应该为
true
:
isOpen1: 1
isOpen2: 1
cd
到
[Path to compiled project folder]/[projectname]
sudo [executable_file]
或以超级用户
su
(inadvisable)身份运行
QSocketNotifier: Can only be used with threads started with QThread
main()
函数中:
int main(int argc, char *argv[]){
QCoreApplication a(argc, argv);
//My Testcode (Showed above in section 3.3)
return a.exec();
}
qint64 QIODevice::write(const char * data)
从一个QSerialPort写入另一个。使用
qint64 QIODevice::read(char * data, qint64 maxSize)
或
QByteArray QIODevice::readAll()
读取发送的数据。在这里重要的是要知道在通过
bool QIODevice::waitForReadyRead(int msecs)
发送数据之后必须使用
QIODevice::write()
,否则将无法使用。我建议也使用
bool QIODevice::waitForBytesWritten(int msecs)
。例:
const char* sendMessage = "myMessage";
std::cout << "sendMessage: " << sendMessage << std::endl;
qport1.write(sendMessage);
qport1.waitForBytesWritten(2000);
qport2.waitForReadyRead(2000);//required
const char* readMessage = qport2.readAll().data();
std::cout << "readMessage: " << readMessage << std::endl;
readMessage: myMessage
QIODevice::read()
:
const char* readMessage = qport2.read(5);
std::cout << "readMessage: " << readMessage << std::endl;
readMessage: myMess
qint64 QIODevice::bytesAvailable() const
。例:
std::cout << qport2.bytesAvailable() << std::endl;
readyRead()
连接到
QObject::connect()
信号:
Classname::Classname(){
...
QObject::connect(&qport1, SIGNAL(readyRead()), this, SLOT(myPrivateSlotFunction()));
//with "qport1" as sender and "this" as receiver
}
...
Classname::myPrivateSlotFunction(){
...
const char* readMessage = qport1.readAll().data();
...
}
关于c++ - 如何将数据发送到QT中打开的tty0tty空调制解调器仿真器端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960920/
很长一段时间以来,我一直对蓝牙低功耗 (BLE) 协议(protocol) 4.0 版及其工作原理非常感兴趣。我开发了一个 android 应用程序,可以作为 BLE 外围设备的中央设备。问题是 BL
我正在寻找在游戏中构建一个虚拟机,并且想知道是否有人知道任何非常简单的虚拟机(我认为 RISC/PIC 接近我想要的),通常用于嵌入式项目,例如控制机器人、电机、传感器等。我主要关心的是如果我自己编写
我一直在写一个 chip8 模拟器 -- http://en.wikipedia.org/wiki/CHIP-8 我已经测试了所有的操作码和图形计算,现在我正在努力处理用户输入。我有以下方法监视用户输
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我在哪里可以找到支持 "V" Vector Extension 的 RISC-V 模拟器? 我知道当前规范版本 0.8 是草案: This is a draft of a stable proposa
我想为以下微 Controller 板创建/启动模拟器:http://www.sparkfun.com/commerce/product_info.php?products_id=707# 固件是用汇
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我正在尝试编写一个 C 程序来模拟 ARM 二进制文件的执行。所以它现在所做的是,我们从二进制文件中获取指令到一个 uint32_t 数组中,然后我对其进行解码和执行。 问题是我只使用程序计数器访问数
我正在寻找一个现代系统来进行一些简单的汇编程序设计(用于娱乐/学习),而这些程序编程不具有x86平台的遗留负担(在该平台上您仍然必须处理BIOS,切换到保护模式,VESA恐怖才能以现代分辨率/色彩深度
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在构建一个网站的移动版本,我想要一种测试它的方法。许多免费模拟器的问题在于它们是针对 Windows 的。我知道我可以在 wine 中运行它们,只是想知道是否有本地 GNU/Linux 应用程序。
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
我想在我的 Arduino mega 上安装 2 个 TCS34725 颜色传感器。传感器使用 I2c 通信,因此我不能将它们放在相同的 I2C 引脚上,因为它们具有相同的地址。我提出的解决方案是使用
在业余时间,我开始为 6502 CPU 编写一个非常简单的 C++ 仿真器。我过去常常为这个 CPU 写下很多汇编代码,所以所有的操作码、寻址模式和其他东西都不是什么大问题。 6502 有 56 条不
我是一名优秀的程序员,十分优秀!