Files
BionxControl/bcdriver.h

123 lines
3.2 KiB
C
Raw Normal View History

2025-12-26 14:07:55 +01:00
/***************************************************************************
BionxControl
2026-01-03 23:51:14 +01:00
© 2025 -2026 christoph holzheuer
2025-12-26 14:07:55 +01:00
christoph.holzheuer@gmail.com
Using:
mhs_can_drv.c
© 2011 - 2023 by MHS-Elektronik GmbH & Co. KG, Germany
Klaus Demlehner, klaus@mhs-elektronik.de
@see www.mhs-elektronik.de
Based on Bionx data type descriptions from:
BigXionFlasher USB V 0.2.4 rev. 97
© 2011-2013 by Thomas Koenig <info@bigxionflasher.org>
@see www.bigxionflasher.org
Bionx Bike Info
© 2018 Thorsten Schmidt (tschmidt@ts-soft.de)
@see www.ts-soft.de
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
@see https://github.com/bikemike/bionx-bikeinfo
***************************************************************************/
2026-02-09 16:03:09 +01:00
#ifndef BC_DRIVER_H
#define BC_DRIVER_H
2025-12-20 16:33:00 +01:00
#include <QObject>
2026-01-01 13:28:17 +01:00
#include <expected>
2026-01-02 16:25:21 +01:00
#include <bcvalue.h>
2026-01-03 02:50:28 +01:00
2025-12-20 16:33:00 +01:00
struct CBCItem;
2025-12-30 10:12:01 +01:00
class BCDriverStatus;
2025-12-20 16:33:00 +01:00
/**
* @Abstrakte Basisklasse für alle CAN-Bus Treiber.
* Das Bionx CAN-Bus System kann auf verschiedenen Wegen
* angesprochen werden, etwa den über BBI USB2CAN Controller,
2026-01-01 13:28:17 +01:00
* über den TinyCAN Adapter oder ggf. über einen ELM327 Stecker.
2025-12-20 16:33:00 +01:00
*
* Die hier relevante Implementierung über das TinyCan System
2025-12-30 10:12:01 +01:00
* findet sich in der Unterklasse 'BCDriverTinyCan'.
2025-12-20 16:33:00 +01:00
*
2025-12-30 10:12:01 +01:00
* @see BCDriverTinyCan
2025-12-20 16:33:00 +01:00
*/
2026-01-03 20:10:30 +01:00
class BCDriver
2025-12-20 16:33:00 +01:00
{
2026-01-03 20:10:30 +01:00
Q_GADGET
2025-12-20 16:33:00 +01:00
public:
2026-01-01 13:28:17 +01:00
// Die möglichen Zustände beim Laden
// des CAN-Bus Treibers.
2026-01-03 23:51:14 +01:00
enum class DriverState : uint8_t
{
NotPresent,
Error,
2025-12-21 18:31:16 +01:00
Loaded,
Initialized,
2026-01-01 01:58:54 +01:00
Opened, // bis hierher: dll vorhanden, Treiber geladen
2026-01-03 23:51:14 +01:00
DeviceReady // hier: devices connectable, wir können arbeiten.
2025-12-21 18:31:16 +01:00
};
Q_ENUM(DriverState)
2025-12-20 16:33:00 +01:00
2026-01-01 13:28:17 +01:00
// Enthält den Treiberzustand oder einen Fehlerstring
using DriverStateResult = std::expected<DriverState,QString>;
2026-01-03 20:10:30 +01:00
explicit BCDriver() = default;
2025-12-30 10:12:01 +01:00
virtual ~BCDriver() = default;
2025-12-20 16:33:00 +01:00
2026-01-03 20:10:30 +01:00
virtual BCDriver::DriverStateResult loadAndStartDriver() = 0;
2026-01-01 23:01:31 +01:00
// Gibt den aktuelle Zustand des Treibers zurück. Der DriverState
// muss auf DeviceReady stehen, um Werte lesen & schreiben zu können.
// Dazu muss das Bionx-System eingeschaltet sein.
2025-12-20 16:33:00 +01:00
2026-01-01 23:01:31 +01:00
DriverState getDriverState() const;
// Abstrakte Methoden für das tatsächliche Lesen & Schreiben über den CAN-Bus. In der Implementierungs-
// Klasse 'BCDriverTinyCan' werden die C-Funktionen der Treiber DLL gekapselt.
virtual TransmitResult readRawByte ( uint32_t deviceID, uint8_t registerID ) const = 0;
virtual TransmitResult writeRawByte( uint32_t deviceID, uint8_t registerID, uint8_t value ) const = 0;
2025-12-20 16:33:00 +01:00
protected:
2025-12-21 18:31:16 +01:00
DriverState _driverState{DriverState::NotPresent};
2025-12-20 16:33:00 +01:00
2025-12-30 14:42:49 +01:00
};
2026-01-03 23:51:14 +01:00
/// -----------------------------------------------------------------------------------
/// -----------------------------------------------------------------------------------
2025-12-30 14:42:49 +01:00
class BCDriverDummy : public BCDriver
{
public:
2026-01-03 20:10:30 +01:00
BCDriver::DriverStateResult loadAndStartDriver() override;
2025-12-30 14:42:49 +01:00
2026-01-01 13:28:17 +01:00
TransmitResult readRawByte( uint32_t deviceID, uint8_t registerID ) const override;
TransmitResult writeRawByte( uint32_t deviceID, uint8_t registerID, uint8_t value ) const override;
2025-12-20 16:33:00 +01:00
2026-01-01 00:40:27 +01:00
2025-12-20 16:33:00 +01:00
};
2026-02-09 16:03:09 +01:00
#endif // BC_DRIVER_H