Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transcoding freezing #1

Open
MaximBozek-M-ECS opened this issue Jan 15, 2025 · 0 comments
Open

Transcoding freezing #1

MaximBozek-M-ECS opened this issue Jan 15, 2025 · 0 comments

Comments

@MaximBozek-M-ECS
Copy link

MaximBozek-M-ECS commented Jan 15, 2025

Hi,

I am testing this library out in my QT Creator Project. Everything I tried came to a freeze of the transcoding:

DBC file loaded successfully!
Parsed ID: "18FEF100"
Parsed Payload: "FF0000000000E9C0"
Frame ID: 419361024
Frame ID Hex: "18FEF100"
Frame DLC: 8
Frame Data: 0x7ffc833de728
Frame Data Hex: "FF0000000000E9C0"
Transcoding frame2...

Here is the most important part of the code:

void CANDecoder::loadDBC(const QString &dbcFilePath)
{
    // Read the DBC file content
    std::ifstream dbcFile(dbcFilePath.toStdString());
    if (!dbcFile.is_open()) {
        qCritical() << "Failed to open DBC file:" << dbcFilePath;
        return;
    }

    std::string dbcContent((std::istreambuf_iterator<char>(dbcFile)),
                           std::istreambuf_iterator<char>());

    // Parse the DBC file and load the transcoder
    bool parsed = can::parse_dbc(dbcContent, std::ref(m_transcoder));
    if (parsed) {
        qDebug() << "DBC file loaded successfully!";

        QString CANID = "00011000111111101111000100000000";
        QString CANPayload = "1111111100000000000000000000000000000000000000001110100111000000";
        QString CANFrame = CANID + CANPayload;

        QString idString = CANFrame.mid(0, 32);
        QString payloadString = CANFrame.mid(32);
        quint32 id = bitArrayToInt(stringToBits(idString));
        QByteArray payload = bitArrayToByteArray(stringToBits(payloadString));

        qDebug() << "Parsed ID:" << QString::number(id, 16).toUpper();
        qDebug() << "Parsed Payload:" << payload.toHex().toUpper();

        processFrame(QString::number(id, 16).toUpper(), payload);
    } else {
        qCritical() << "Failed to parse DBC file!";
    }
}

void CANDecoder::processFrame(const QString &frameId, const QByteArray &frameData)
{
    quint32 frameIdInt = frameId.toUInt(nullptr, 16);
    qDebug() << "awdawdawdawdawdawdawd ID:" << frameIdInt;

    can_frame frame;
    frame.can_id = frameIdInt;
    frame.can_dlc = frameData.size();
    std::memcpy(frame.data, frameData.constData(), std::min(static_cast<int>(frameData.size()), static_cast<int>(sizeof(frame.data))));

    qDebug() << "Frame ID:" << frame.can_id;
    qDebug() << "Frame ID Hex:" << QString::number(frame.can_id, 16).toUpper();
    qDebug() << "Frame DLC:" << frame.can_dlc;
    qDebug() << "Frame Data:" << frame.data;
    qDebug() << "Frame Data Hex:" << QByteArray(reinterpret_cast<char*>(frame.data), frame.can_dlc).toHex().toUpper();

    try {
        auto now = std::chrono::system_clock::now();
        qDebug() << "Transcoding frame2...";
        m_framePacket = m_transcoder.transcode(now, frame);
        qDebug() << "Frame transcoded.";
    } catch (const std::exception& e) {
        qDebug() << "Error in transcoding: " << e.what();
    }

    qDebug() << "SHITS:" << m_framePacket.data_begin();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant