Files
BionxControl/bcvaluetype.h

103 lines
2.6 KiB
C
Raw Permalink Normal View History

2025-12-26 14:07:55 +01:00
/***************************************************************************
BionxControl
Copyright © 2025 christoph holzheuer
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
***************************************************************************/
2025-12-24 15:45:44 +01:00
#ifndef BCVALUETYPE_H
#define BCVALUETYPE_H
#include <QObject>
#include <QString>
#include <QList>
#include <QVariant>
2026-01-02 16:25:21 +01:00
#include <expected>
2025-12-24 15:45:44 +01:00
#include <bc.h>
2025-12-28 22:48:18 +01:00
class BCValue;
2026-01-02 16:25:21 +01:00
class BCAbstractTransmitter;
2025-12-24 15:45:44 +01:00
using optDouble = std::optional<double>;
2026-01-02 16:25:21 +01:00
// Enthält den gelesenen Wert oder einen Fehlerstring
using TransmitResult = std::expected<uint32_t,QString>;
// Funktionsobject, um Werte aus der Transmitterschicht zu holden
using ReadValueFunc = std::function<TransmitResult( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID )>;
/**
* @brief BCAbstractTransmitter ist das abstrakte Basisinterface für die eigentliche
* Datenübertragung auf Treiberebene.
*/
class BCAbstractTransmitter
2025-12-24 15:45:44 +01:00
{
2026-01-02 16:25:21 +01:00
public:
virtual TransmitResult readByte ( uint32_t deviceID, uint8_t registerID ) const = 0;
virtual TransmitResult writeByte( uint32_t deviceID, uint8_t registerID, uint8_t value_ ) const = 0;
};
struct BCValueType
{
2025-12-24 15:45:44 +01:00
Q_GADGET
public:
BCValueType();
2026-01-02 16:25:21 +01:00
BCValueType( QString unitKey_, QString unitLabel_, double factor_= 1.0, optDouble min_=std::nullopt, optDouble max_= std::nullopt );
virtual QString formatValue( uint32_t value ) const;
2025-12-24 15:45:44 +01:00
QString unitLabel;
double factor;
optDouble min;
optDouble max;
2026-01-01 22:27:48 +01:00
ReadValueFunc readValueFunc;
2026-01-03 00:09:26 +01:00
//ReadValueFunc readValueFunc;
2025-12-24 15:45:44 +01:00
2026-01-01 22:27:48 +01:00
static std::optional<BCValueType*> fetchValueType( const QString& unitTypeKey );
static std::optional<ReadValueFunc> fetchReadValueFunction( const QString& unitTypeKey );
2025-12-24 15:45:44 +01:00
};
//using BCTypeVariant = std::variant<BCValueType,BCValueTypeWord,Long,Fitz,Fatz>;
// really needed?
//using BCValueTypeCRef = std::optional<std::reference_wrapper<const BCTypeVariant>>;
#endif // BCVALUETYPE_H