147 lines
4.5 KiB
C++
147 lines
4.5 KiB
C++
/***************************************************************************
|
|
|
|
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
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
#include <bcvaluetype.h>
|
|
#include <bcvalue.h>
|
|
|
|
|
|
BCValueType::BCValueType()
|
|
{
|
|
|
|
}
|
|
|
|
BCValueType::BCValueType( QString unitLabel_, double factor_, optDouble min_, optDouble max_ )
|
|
: unitLabel{unitLabel_}, factor{factor_}, min{min_}, max{max_}
|
|
{
|
|
|
|
}
|
|
|
|
QString BCValueType::formatValue( uint32_t value ) const
|
|
{
|
|
if( factor == 1 )
|
|
return QString::number( value );
|
|
|
|
double result = value * factor;
|
|
return QString::number(result, 'f', 2);
|
|
}
|
|
|
|
/*
|
|
_dataTypes.insert( "Float", new Fitz{{ "", 1.5625F}} );
|
|
_dataTypes.insert( "Percent",new Fatz{{ "%", 1.5625 }} );
|
|
_dataTypes.insert( "KWh", new Fatz{{ "kwh", 1.5625 }} );
|
|
_dataTypes.insert( "Watt", new Long{{ "w", 1.5625 }} );
|
|
_dataTypes.insert( "Km", new BCValueTypeWord{{ "km", 1.5625 }} );
|
|
_dataTypes.insert( "Kmh", new BCValueTypeWord{{ "km/h", 0.1 }} );
|
|
_dataTypes.insert( "Mm", new BCValueTypeWord{{ "mm", 1.5625 }} );
|
|
_dataTypes.insert( "Sec", new BCValueTypeWord{{ "s", 1.5625 }} );
|
|
_dataTypes.insert( "SoC", new Long{{ "%", 1.5625 }} );
|
|
_dataTypes.insert( "Odo", new Fitz{{ "km", 1.5625 }} );
|
|
_dataTypes.insert( "Assist", new Fatz{{ "", 0 ,4 }} );
|
|
_dataTypes.insert( "Assist", new Fatz{{ "%" }} );
|
|
//_dataTypes.insert( "Date", { BCValueType::TypeID::Date } );
|
|
*/
|
|
std::optional<BCValueType*> BCValueType::fetchValueType( const QString& unitTypeKey )
|
|
{
|
|
static QHash<QString,BCValueType*> s_bcDataTypes
|
|
{
|
|
{ "Byte", new BCValueTypeWord( "", 1.5625F) },
|
|
{ "Word", new BCValueTypeWord( "", 1.5625F) },
|
|
|
|
{ "Float", new BCValueTypeWord( "", 1.5625F) },
|
|
{ "Percent",new BCValueTypeWord( "%", 1.5625 ) },
|
|
{ "KWh", new BCValueTypeWord( "kwh", 1.5625 ) },
|
|
{ "Watt", new BCValueTypeWord( "w", 1.5625 ) },
|
|
{ "Km", new BCValueTypeWord( "km", 1.5625 ) },
|
|
{ "Kmh", new BCValueTypeWord( "km/h", 0.1 ) },
|
|
{ "Mm", new BCValueTypeWord( "mm", 1.5625 ) },
|
|
{ "Sec", new BCValueTypeWord( "s", 1.5625 ) },
|
|
{ "Degree", new BCValueTypeByte( "°C", 1.0 ) },
|
|
{ "SoC", new BCValueTypeWord( "%", 1.5625 ) },
|
|
{ "Odo", new BCValueTypeWord( "km", 1.5625 ) },
|
|
{ "Assist", new BCValueTypeWord( "", 0 ,4 ) },
|
|
{ "Assist", new BCValueTypeWord( "%" ) },
|
|
};
|
|
|
|
if( !s_bcDataTypes.contains( unitTypeKey ) )
|
|
return std::nullopt;
|
|
|
|
return s_bcDataTypes[unitTypeKey];
|
|
|
|
}
|
|
|
|
/// ----
|
|
|
|
BCValueTypeByte::BCValueTypeByte( QString unitLabel_, double factor_, optDouble min_, optDouble max_ )
|
|
: BCValueType{ unitLabel_, factor_, min_, max_}
|
|
{
|
|
|
|
}
|
|
|
|
QString BCValueTypeByte::createStringValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) const
|
|
{
|
|
uint32_t result = transmitter.readRawByte( deviceID, registerID );
|
|
return formatValue( result );
|
|
}
|
|
|
|
/// ----
|
|
|
|
BCValueTypeWord::BCValueTypeWord( QString unitLabel_, double factor_, optDouble min_, optDouble max_ )
|
|
: BCValueType{ unitLabel_, factor_, min_, max_}
|
|
{
|
|
|
|
}
|
|
|
|
QString BCValueTypeWord::createStringValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) const
|
|
{
|
|
//getValue(CONSOLE, CONSOLE_SN_PN_HI) << 8) + getValue(CONSOLE, CONSOLE_SN_PN_LO)),
|
|
// hi byte
|
|
uint32_t result = transmitter.readRawByte( deviceID, registerID ) << 8;
|
|
// low byte, use followup register: +1
|
|
result += transmitter.readRawByte( deviceID, registerID+1 );
|
|
|
|
return formatValue( result );
|
|
}
|
|
|
|
/// ----
|
|
|
|
BCValueTypeODO::BCValueTypeODO( QString unitLabel_, double factor_, optDouble min_, optDouble max_ )
|
|
: BCValueType{ unitLabel_, factor_, min_, max_}
|
|
{
|
|
|
|
}
|
|
|
|
QString BCValueTypeODO::createStringValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) const
|
|
{
|
|
return "0x0";
|
|
}
|
|
|