示例#1
0
void MainWindow::onDataRecieved()
{
    QByteArray dataIncomming = _socket->read(4);

    while( dataIncomming.size() > 0 ) {
        char byte00_Command = QChar(dataIncomming[0]).toUpper().toLatin1();
        quint8 byte01_SensorId = static_cast<quint8>(dataIncomming[1]);
        qint8 byte02 = static_cast<qint8>(dataIncomming[2]);
        quint8 byte03 = static_cast<quint8>(dataIncomming[3]);

        qDebug()<< QString("[%1]").arg(QTime::currentTime().toString())
                << byte00_Command
                << byte01_SensorId
                << byte02
                << byte03;

        switch(byte00_Command) {
        case COMMAND_SET:
        {
            qreal integralPart = static_cast<qreal>(byte02);
            qreal fractionalPart = static_cast<qreal>(byte03) / FRACTIONAL_BASE;
            qreal temperature;
            temperature = integralPart + fractionalPart;

            setTemperatureIndicator(byte01_SensorId, temperature);

            break;
        }
        case COMMAND_ERROR:
        {
            // on error read additional 8 bytes of sensor's mac id
            setTemperatureSensorDisconnected(byte01_SensorId);
            QByteArray mac = _socket->read(8);
            QString mac_hex = QString::fromLatin1(mac.toHex());

            qDebug() << "0x" << mac_hex;

            break;
        }
        default:
            qDebug()<< "Error: Unknown command byte!";

            break;
        }

        dataIncomming = _socket->read(4);
    }
} // onDataRecieved()
// Private slots
void MainWindow::onDataRecieved()
{
    QByteArray dataIncomming = _socket->read(4);

    while( dataIncomming.size() > 0 )
    {
        qDebug()<< QString::fromLatin1(dataIncomming.toHex(), dataIncomming.size());

        char byte00_Command = QChar(dataIncomming[0]).toUpper().toLatin1();
        quint8 byte01_SensorId = static_cast<quint8>(dataIncomming[1]);
        qint8 byte02 = static_cast<qint8>(dataIncomming[2]);
        quint8 byte03 = static_cast<quint8>(dataIncomming[3]);

        switch(byte00_Command)
        {
        case COMMAND_SET:
        {
            qDebug()<< "SET";
            qreal integralPart = static_cast<qreal>(byte02);
            qreal fractionalPart = static_cast<qreal>(byte03) / FRACTIONAL_BASE;
            qreal temperature;
            if (0 > integralPart) {
                temperature = integralPart - fractionalPart;
            }
            else {
                temperature = integralPart + fractionalPart;
            }
            setTemperatureIndicator(byte01_SensorId, temperature);
        }
            break;
        case COMMAND_ERROR:
            qDebug()<< "ERROR";
            break;
        default:
            qDebug()<< "Error:Unknown command byte!";
        }

        dataIncomming = _socket->read(4);
    }
}