Skip to content

Commit

Permalink
Initial version of mockcan plugin. Plugin does nothing but can be loa…
Browse files Browse the repository at this point in the history
…ded.
  • Loading branch information
bstubert committed Jul 6, 2019
1 parent 1c31c77 commit 212d9d8
Show file tree
Hide file tree
Showing 10 changed files with 230 additions and 2 deletions.
4 changes: 2 additions & 2 deletions BlogPosts/CanComm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ cmake_minimum_required(VERSION 3.5)

project(CanComm)

#set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)

set(CMAKE_VERBOSE_MAKEFILE true)

add_subdirectory(canbus)
add_subdirectory(ecucan)
add_subdirectory(ecu)
add_subdirectory(terminal)
add_subdirectory(test)

26 changes: 26 additions & 0 deletions BlogPosts/CanComm/canbus/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright (C) 2019, Burkhard Stubert (DBA Embedded Use)
cmake_minimum_required(VERSION 3.5)

project(canbus)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Core)
find_package(Qt5SerialBus)

add_library(
${PROJECT_NAME} MODULE
main.cpp
mockcanbackend.cpp
mockcanbackend.h
)

#add_library(EmUse::mockcan ALIAS ${PROJECT_NAME})

target_include_directories(${PROJECT_NAME} INTERFACE .)

target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::SerialBus)


31 changes: 31 additions & 0 deletions BlogPosts/CanComm/canbus/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (C) 2019, Burkhard Stubert (DBA Embedded Use)

#include <QCanBus>
#include <QCanBusDevice>
#include <QCanBusFactoryV2>
#include <QObject>

#include "mockcanbackend.h"

class MockCanBusPlugin : public QObject, public QCanBusFactoryV2
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QCanBusFactory" FILE "plugin.json")
Q_INTERFACES(QCanBusFactoryV2)

public:
QList<QCanBusDeviceInfo> availableDevices(QString *errorMessage) const override
{
Q_UNUSED(errorMessage);
return MockCanBackend::interfaces();
}

QCanBusDevice *createDevice(const QString &interfaceName, QString *errorMessage) const override
{
Q_UNUSED(errorMessage);
auto device = new MockCanBackend(interfaceName);
return device;
}
};

#include "main.moc"
62 changes: 62 additions & 0 deletions BlogPosts/CanComm/canbus/mockcanbackend.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright (C) 2019, Burkhard Stubert (DBA Embedded Use)

#include "mockcanbackend.h"

QList<QCanBusDeviceInfo> MockCanBackend::interfaces()
{
return {};
}

MockCanBackend::MockCanBackend(const QString &name)
{
Q_UNUSED(name)
resetConfigurations();
}

MockCanBackend::~MockCanBackend()
{
close();
}

void MockCanBackend::resetConfigurations()
{
QCanBusDevice::setConfigurationParameter(
QCanBusDevice::LoopbackKey, true);
QCanBusDevice::setConfigurationParameter(
QCanBusDevice::ReceiveOwnKey, false);
QCanBusDevice::setConfigurationParameter(
QCanBusDevice::ErrorFilterKey,
QVariant::fromValue(QCanBusFrame::FrameErrors(QCanBusFrame::AnyError)));
QCanBusDevice::setConfigurationParameter(
QCanBusDevice::CanFdKey, false);
}

bool MockCanBackend::open()
{
setState(QCanBusDevice::ConnectedState);
return true;
}

void MockCanBackend::close()
{
setState(QCanBusDevice::UnconnectedState);
}

void MockCanBackend::setConfigurationParameter(int key, const QVariant &value)
{
Q_UNUSED(key)
Q_UNUSED(value)
}

bool MockCanBackend::writeFrame(const QCanBusFrame &newData)
{
Q_UNUSED(newData)
return false;
}

QString MockCanBackend::interpretErrorFrame(const QCanBusFrame &errorFrame)
{
Q_UNUSED(errorFrame)
return {};
}

33 changes: 33 additions & 0 deletions BlogPosts/CanComm/canbus/mockcanbackend.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (C) 2019, Burkhard Stubert (DBA Embedded Use)

#pragma once

#include <QCanBusFrame>
#include <QCanBusDevice>
#include <QCanBusDeviceInfo>
#include <QString>
#include <QVariant>


class MockCanBackend : public QCanBusDevice
{
Q_OBJECT
public:
explicit MockCanBackend(const QString &name);
~MockCanBackend();

bool open() override;
void close() override;

void setConfigurationParameter(int key, const QVariant &value) override;

bool writeFrame(const QCanBusFrame &newData) override;

QString interpretErrorFrame(const QCanBusFrame &errorFrame) override;

static QList<QCanBusDeviceInfo> interfaces();

private:
void resetConfigurations();
};

3 changes: 3 additions & 0 deletions BlogPosts/CanComm/canbus/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"Key": "mockcan"
}
6 changes: 6 additions & 0 deletions BlogPosts/CanComm/notes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -239,3 +239,9 @@ Error cases:

(3) A second terminal requests same parameters. First terminals sees responses as well and
sends next request.

==================================================

../qt5/configure -opensource -confirm-license -developer-build -c++std c++2a -gstreamer 1.0 \
-no-dbus -skip qtwebengine -skip qtwebchannel -skip qtwebsockets \
-nomake examples -nomake tests -v
6 changes: 6 additions & 0 deletions BlogPosts/CanComm/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Copyright (C) 2019, Burkhard Stubert (DBA Embedded Use)

cmake_minimum_required(VERSION 3.5)

add_subdirectory(testmockcanbus)

26 changes: 26 additions & 0 deletions BlogPosts/CanComm/test/testmockcanbus/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright (C) 2019, Burkhard Stubert (DBA Embedded Use)

project(testmockcanbus)

cmake_minimum_required(VERSION 3.5)

set(CMAKE_AUTOMOC on)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Test)
find_package(Qt5SerialBus)

add_executable(
${PROJECT_NAME}
testmockcanbus.cpp
)

add_test(
NAME ${PROJECT_NAME}
COMMAND ${PROJECT_NAME}
)

target_link_libraries(
${PROJECT_NAME}
Qt5::SerialBus Qt5::Test
)
35 changes: 35 additions & 0 deletions BlogPosts/CanComm/test/testmockcanbus/testmockcanbus.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (C) 2019, Burkhard Stubert (DBA Embedded Use)

#include <QCoreApplication>
#include <QObject>
#include <QtDebug>
#include <QtTest>

#include <QCanBus>

class TestMockCanBus : public QObject
{
Q_OBJECT

private slots:
void initTestCase();
void testCreate();
};

void TestMockCanBus::initTestCase()
{
QCoreApplication::addLibraryPath("../../");
}

void TestMockCanBus::testCreate()
{
QString errorStr{"None"};
auto device = QCanBus::instance()->createDevice("mockcan", "can0", &errorStr);
qDebug() << "ERROR: " << errorStr;
QVERIFY(device != nullptr);
}


QTEST_GUILESS_MAIN(TestMockCanBus)

#include "testmockcanbus.moc"

0 comments on commit 212d9d8

Please sign in to comment.