/*************************************************************************** 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 @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 #include /// reader functions uint32_t readByteValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) { return transmitter.readByte( deviceID, registerID ); } uint32_t readWordValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) { //getValue(CONSOLE, CONSOLE_SN_PN_HI) << 8) + getValue(CONSOLE, CONSOLE_SN_PN_LO)), // hi byte uint32_t result = transmitter.readByte( deviceID, registerID ) << 8; // low byte, use followup register: +1 result += transmitter.readByte( deviceID, registerID+1 ); return result; } uint32_t readODOValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) { return 0x0; } uint32_t readVoltValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) { return 0x0; } uint32_t readCircValue( const BCAbstractTransmitter& transmitter, uint32_t deviceID, uint8_t registerID ) { return 0x0; } /** * @brief BCValueType::BCValueType */ 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::fetchReadValueFunction( const QString& unitTypeKey ) { static QHash s_bcReadValueFunctions { { "Byte", readByteValue }, { "Word", readWordValue }, { "Percent",readByteValue }, { "KWh", readByteValue }, { "Watt", readByteValue }, { "Km", readByteValue }, { "Kmh", readByteValue }, { "Mm", readByteValue }, { "Sec", readByteValue }, { "Degree", readByteValue }, { "SoC", readByteValue }, { "Odo", readByteValue }, { "Assist", readByteValue }, { "Assist", readByteValue }, }; if( !s_bcReadValueFunctions.contains( unitTypeKey ) ) return std::nullopt; return s_bcReadValueFunctions[unitTypeKey]; } std::optional BCValueType::fetchValueType( const QString& unitTypeKey ) { static QHash s_bcDataTypes { { "Byte", new BCValueType( "", 1.5625F) }, { "Word", new BCValueType( "", 1.5625F) }, { "Float", new BCValueType( "", 1.5625F) }, { "Percent",new BCValueType( "%", 1.5625 ) }, { "KWh", new BCValueType( "kwh", 1.5625 ) }, { "Watt", new BCValueType( "w", 1.5625 ) }, { "Km", new BCValueType( "km", 1.5625 ) }, { "Kmh", new BCValueType( "km/h", 0.1 ) }, { "Mm", new BCValueType( "mm", 1.5625 ) }, { "Sec", new BCValueType( "s", 1.5625 ) }, { "Degree", new BCValueType( "°C", 1.0 ) }, { "SoC", new BCValueType( "%", 1.5625 ) }, { "Odo", new BCValueType( "km", 1.5625 ) }, { "Assist", new BCValueType( "", 0 ,4 ) }, { "Assist", new BCValueType( "%" ) }, }; if( !s_bcDataTypes.contains( unitTypeKey ) ) return std::nullopt; return s_bcDataTypes[unitTypeKey]; } /// ----