Как установить эти переменные для чтения / записи последовательного порта - PullRequest
0 голосов
/ 15 января 2020

это первый раз, когда я имею дело с чтением / записью последовательных портов. Я загрузил этот код, который, кажется, работает для всех в сети:

#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, однако это мой настоящий первый раз, который будет чрезвычайно полезным и научит много ...

...