~aleteoryx/muditaos

b83a325b7dcae7d468254079e3a0f7f18e7f1f88 — Lefucjusz 1 year, 1 month ago aee4561
[BH-2086] Add 2 Pro version detection

Added logic required to detect
and properly display Harmony
2 Pro version in About section.
M products/BellHybrid/apps/application-bell-settings/models/AboutYourBellModel.cpp => products/BellHybrid/apps/application-bell-settings/models/AboutYourBellModel.cpp +3 -3
@@ 49,9 49,9 @@ namespace app::bell_settings

    void AboutYourBellModel::createData()
    {
        const auto productSerialNumber = settings.getValue(factoryDataSerialPath, settings::SettingsScope::Global);
        const auto productVersion      = settings.getValue(factoryDataVersionPath, settings::SettingsScope::Global);
        const auto productName =
        const auto &productSerialNumber = settings.getValue(factoryDataSerialPath, settings::SettingsScope::Global);
        const auto &productVersion      = settings.getValue(factoryDataVersionPath, settings::SettingsScope::Global);
        const auto &productName =
            utils::translate("app_bell_settings_about_product") + std::string(" ") + productVersion;

        internalData.push_back(

M products/BellHybrid/serial-number-parser/SerialNumberParser.cpp => products/BellHybrid/serial-number-parser/SerialNumberParser.cpp +15 -2
@@ 17,7 17,7 @@
 *
 *
 * New SN is in MMRRCYYWWNNNN form, where:
 * MM - model code, 04 for Harmony;
 * MM - model code, 04 for Harmony, 05 for Harmony Pro;
 * RR - hardware revision, P1, P2, P3...;
 * C - case colour; G = gray, B = black;
 * YY - production year;


@@ 30,6 30,11 @@ namespace serial_number_parser
{
    namespace
    {
        /* Common constants */
        constexpr auto modelCodeOffset     = 0;
        constexpr auto modelCodeLength     = 2;
        constexpr auto harmonyProModelCode = "05";

        /* Old serial number constants */
        constexpr auto idStringOffset = 0;
        constexpr auto idStringLength = 6;


@@ 50,6 55,11 @@ namespace serial_number_parser
        return (serialNumber.find_first_not_of("0123456789") == std::string::npos);
    }

    bool isHarmonyPro(const std::string &serialNumber)
    {
        return (serialNumber.substr(modelCodeOffset, modelCodeLength) == harmonyProModelCode);
    }

    std::optional<VersionMetadata> getDeviceVersionMetadata(const std::string &serialNumber)
    {
        if (isOldSerialNumberFormat(serialNumber)) {


@@ 69,7 79,10 @@ namespace serial_number_parser
                return std::nullopt;
            }

            return VersionMetadata(item->second, secondVersion);
            if (!isHarmonyPro(serialNumber)) {
                return VersionMetadata(item->second, secondVersion);
            }
            return VersionMetadata(item->second, secondProVersion);
        }
    }
} // namespace serial_number_parser

M products/BellHybrid/serial-number-parser/include/serial-number-parser/Common.hpp => products/BellHybrid/serial-number-parser/include/serial-number-parser/Common.hpp +7 -6
@@ 12,13 12,14 @@ namespace serial_number_parser

    constexpr auto unknownSerialNumber = "0000000000000";

    constexpr auto firstVersion   = 1;
    constexpr auto secondVersion  = 2;
    constexpr auto unknownVersion = 0;
    constexpr auto unknownVersion   = "";
    constexpr auto firstVersion     = "1";
    constexpr auto secondVersion    = "2";
    constexpr auto secondProVersion = "2 Pro";

    using SerialNumber    = std::string;
    using CaseColor       = std::string;
    using VersionNumber   = unsigned;
    using VersionMetadata = std::pair<CaseColor, VersionNumber>;
    using CaseColour      = std::string;
    using VersionNumber   = std::string;
    using VersionMetadata = std::pair<CaseColour, VersionNumber>;
    using DeviceMetadata  = std::pair<SerialNumber, VersionMetadata>;
} // namespace serial_number_parser

M products/BellHybrid/services/db/BellFactorySettings.cpp => products/BellHybrid/services/db/BellFactorySettings.cpp +1 -1
@@ 17,7 17,7 @@ namespace settings

        factoryData->addRow({Field(factory::serial_number_key), Field(serialNumber.c_str())});
        factoryData->addRow({Field(factory::case_colour_key), Field(colour.c_str())});
        factoryData->addRow({Field(factory::device_version_key), Field(std::to_string(version).c_str())});
        factoryData->addRow({Field(factory::device_version_key), Field(version.c_str())});

        return factoryData;
    }