Tôi đã viết một trình điều khiển thiết bị char và bây giờ viết một QT "wrapper" mà một phần của nó là để có được một tín hiệu để cháy khi thiết bị trở nên dễ đọc thông qua cơ chế thăm dò ý kiến. Tôi đã cố gắng làm:Sử dụng QSocketNotifier để chọn trên thiết bị char.
QFile file("/dev/testDriver");
if(file.open(QFile::ReadOnly)) {
QSocketNotifier sn(file.handle(), , QSocketNotifier::Read);
sn.setEnabled(true);
connect(&sn, SIGNAL(activated(int)), &this, SLOT(readyRead()));
}
Nhưng readyRead chưa bao giờ được gọi và tài xế của tôi chưa bao giờ báo cáo có phương pháp thăm dò ý kiến.
tôi đã có thể để có được đoạn mã sau để làm việc vì vậy tôi biết lái xe của tôi đang làm việc
QFile file("/dev/testDriver");
if(file.open(QFile::ReadOnly)) {
struct pollfd fd;
fd.fd = file.handle();
fd.events = POLLIN;
struct pollfd fds[] = {fd};
int ready;
qDebug() << "Started poll";
ready = poll(fds, 1, -1);
qDebug() << "Poll returned: " << ready;
QTextStream in(&file);
QTextStream out(stdout);
out << in.readAll();
}
này đúng chờ tài xế của tôi để gọi wake_up và tôi có thể thấy hai cuộc thăm dò các cuộc gọi từ người lái xe của tôi. Một cho đăng ký thăm dò ý kiến ban đầu và một cho khi wake_up xảy ra.
Làm theo cách này tôi có lẽ sẽ phải sinh ra một chuỗi riêng biệt mà tất cả nó đã làm là thăm dò ý kiến trên thiết bị này và ném một tín hiệu và vòng lặp.
Có thể sử dụng QSocketNotifier theo cách này không? Các tài liệu của QFile::handle() dường như chỉ ra nó nên được.
Bạn đã bao giờ làm việc này? Tôi đã viết một cái gì đó tương tự, nhưng tôi không thể nhận được 'file-> đọc (buf, 1)' để làm việc. Nó sẽ treo. Tuy nhiên, 'read (file-> handle(), buf, 1)' hoạt động tốt. – Harvey
@Harvey Có câu trả lời tôi đã kiểm tra làm việc cho tôi. Hóa ra là một lỗi mã hóa đơn giản. Ngoài ra kiểm tra câu trả lời của tôi để xem nếu nó giúp bạn. – jjcf89
Để sửa lại nhận xét trước đó của tôi, đó là một sự hiểu lầm về phần của tôi về cách thức hoạt động của trình điều khiển thiết bị. Cả hai đoạn mã đều hoạt động, nó chỉ xảy ra là các yếu tố khác của tôi đã khiến toàn bộ thử nghiệm thất bại khi tôi sử dụng một trong số chúng khiến tôi tạo ra kết nối sai. – Harvey