это первый раз, когда я имею дело с чтением / записью последовательных портов. Я загрузил этот код, который, кажется, работает для всех в сети:
#include "led.h"
#include <windows.h>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <fileapi.h>
led::led(QObject *parent) :
QObject(parent)
{
}
bool setColor(QString token, QString settingsFile)
{
// Open serial port
HANDLE serialHandle;
LPVOID read_data;
LPCVOID write_data;
DWORD dwBytesWritten;
serialHandle = CreateFile(L"COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(serialHandle==INVALID_HANDLE_VALUE){
if(GetLastError()==ERROR_FILE_NOT_FOUND){
qDebug() << "Serial port does not exist" << GetLastError();
return false;
}
qDebug() << "Some other error occurred" << GetLastError();
return false;
}
// Do some basic settings
DCB serialParams = { 0 };
serialParams.DCBlength = sizeof(serialParams);
if (!GetCommState(serialHandle, &serialParams)) {
qDebug() << "Error getting state:" << GetLastError();
return false;
}
serialParams.BaudRate = CBR_9600;
serialParams.ByteSize = 8;
serialParams.StopBits = ONESTOPBIT;
serialParams.Parity = NOPARITY;
if(!SetCommState(serialHandle, &serialParams)){
qDebug() << "Error setting serial port state:" << GetLastError();
return false;
}
// Set timeouts
COMMTIMEOUTS timeout = { 0 };
timeout.ReadIntervalTimeout = 50;
timeout.ReadTotalTimeoutConstant = 50;
timeout.ReadTotalTimeoutMultiplier = 50;
timeout.WriteTotalTimeoutConstant = 50;
timeout.WriteTotalTimeoutMultiplier = 10;
if(!SetCommTimeouts(serialHandle, &timeout)){
qDebug() << "Error occureed:" << GetLastError();
return false;
}
if(!WriteFile(serialHandle, write_data, sizeof(write_data), &dwBytesWritten, NULL)) {
qDebug() << "Error occurred:" << GetLastError();
return false;
}
else
{
if(!ReadFile(serialHandle, read_data, sizeof(read_data), &dwBytesWritten, NULL)) {
qDebug() << "Error occurred:" << GetLastError();
return false;
}
else
{
qDebug() << "ERROR:" << GetLastError();
CloseHandle(serialHandle);
return true;
}
}
CloseHandle(serialHandle);
}
, и цель состоит в том, чтобы установить цвет светодиода для этого устройства: https://f.ipc2u.com/files/add/doc/a88/W10IB3S-PCH2AC.pdf - ОС - Windows 10 IoT (ссылка для устаревшей таблицы данных)
, а из SDK для светодиодных индикаторов написано: https://aca.im/driver_docs/Winmate/LED%20Light%20Bar%20SDK.pdf - на стр. 5 указано базовое значение команды c для установки различных цветов и как проверить успешность
поэтому мне интересно, как объявлять типы переменных и значения, чтобы иметь именно то, что нужно для изменения цвета, и как мне прочитать успех / неудачу
У меня нет устройства еще предстоит протестировать его, однако он заказал и готовил программное обеспечение заранее.
Кажется, это легко для любого, кто имеет некоторый опыт работы с serialport, однако это мой настоящий первый раз, который будет чрезвычайно полезным и научит много ...