diff --git a/src/lib/version/version.c b/src/lib/version/version.c index ccb284c819..d5c82d9cc0 100644 --- a/src/lib/version/version.c +++ b/src/lib/version/version.c @@ -140,9 +140,9 @@ uint32_t version_tag_to_vendor_version_number(const char *tag) int16_t buffer = -1; size_t buffer_counter = 0; char version[6] = {0, 0, 0, 0, 0, 0}; - size_t dash_count = 0; size_t point_count = 0; + int firmware_type = FIRMWARE_TYPE_RELEASE; for (size_t i = 0; i < strlen(tag); i++) { if (tag[i] == '-') { @@ -151,8 +151,27 @@ uint32_t version_tag_to_vendor_version_number(const char *tag) } else if (tag[i] == '.') { point_count++; } + + if (tag[i] == 'r' && i < strlen(tag) - 1 && tag[i + 1] == 'c') { + firmware_type = FIRMWARE_TYPE_RC; + + } else if (tag[i] == 'p') { + firmware_type = FIRMWARE_TYPE_ALPHA; + + } else if (tag[i] == 't') { + firmware_type = FIRMWARE_TYPE_BETA; + + } else if (tag[i] == 'v' && i > 0) { + firmware_type = FIRMWARE_TYPE_DEV; + } } + if ((dash_count == 1 && point_count == 2 && firmware_type == FIRMWARE_TYPE_RELEASE) || + (dash_count == 2 && point_count == 2) || + (dash_count == 3 && point_count == 4)) { + firmware_type = FIRMWARE_TYPE_DEV; +} + for (size_t i = 0; i < strlen(tag); i++) { if (buffer_counter > 5) { continue; @@ -182,10 +201,12 @@ uint32_t version_tag_to_vendor_version_number(const char *tag) } if (buffer_counter == 6) { - version_number = ((uint8_t)version[3] << 8 * 2) | - ((uint8_t)version[4] << 8 * 1) | - ((uint8_t)version[5] << 8 * 0); + version_number = ((uint8_t)version[3] << 8 * 3) | + ((uint8_t)version[4] << 8 * 2) | + ((uint8_t)version[5] << 8 * 1) | firmware_type; + } else if (buffer_counter == 3) { + version_number = firmware_type; } else { version_number = 0; } diff --git a/src/lib/version/version.h b/src/lib/version/version.h index eeb3f8586a..e2c50146b0 100644 --- a/src/lib/version/version.h +++ b/src/lib/version/version.h @@ -101,6 +101,7 @@ static inline const char *px4_build_uri(void) /** * Convert a version tag string to a number * @param tag version tag in one of the following forms: + * - vendor: v1.4.0-0.2.0 * - dev: v1.4.0rc3-7-g7e282f57 * - rc: v1.4.0rc4 * - release: v1.4.0 @@ -123,13 +124,13 @@ __EXPORT uint32_t px4_firmware_version(void); * - rc: v1.4.0rc4 * - release: v1.4.0 * - linux: 7.9.3 - * @return version in the form 0xAABBCC (AA: Major, BB: Minor, CC: Patch) + * @return version in the form 0xAABBCCTT (AA: Major, BB: Minor, CC: Patch, TT Type @see FIRMWARE_TYPE) */ __EXPORT uint32_t version_tag_to_vendor_version_number(const char *tag); /** * get the PX4 Firmware vendor version - * @return version in the form 0xAABBCC (AA: Major, BB: Minor, CC: Patch) + * @return version in the form 0xAABBCCTT (AA: Major, BB: Minor, CC: Patch, TT Type @see FIRMWARE_TYPE) */ __EXPORT uint32_t px4_firmware_vendor_version(void); diff --git a/src/modules/logger/logger.cpp b/src/modules/logger/logger.cpp index 7ee23cd51b..5675896552 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -1652,12 +1652,10 @@ void Logger::write_version() { write_info("ver_sw", px4_firmware_version_string()); write_info("ver_sw_release", px4_firmware_version()); - // FIXME: px4_firmware_vendor_version() needs be converted to return the same format as px4_firmware_version(). - // This now just assumes we're on a release uint32_t vendor_version = px4_firmware_vendor_version(); if (vendor_version > 0) { - write_info("ver_vendor_sw_release", (vendor_version << 8) | 0xff); + write_info("ver_vendor_sw_release", vendor_version); } write_info("ver_hw", px4_board_name()); diff --git a/src/systemcmds/tests/test_versioning.cpp b/src/systemcmds/tests/test_versioning.cpp index ef7fe658e5..4cc5ce0a08 100644 --- a/src/systemcmds/tests/test_versioning.cpp +++ b/src/systemcmds/tests/test_versioning.cpp @@ -82,34 +82,34 @@ bool VersioningTest::_test_flight_version() bool VersioningTest::_test_vendor_version() { - ut_assert_true(_is_correct_version_tag_vendor("alpha", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("alpha23", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("v11.45.99-34.56.88", 0x223858)); - ut_assert_true(_is_correct_version_tag_vendor("v11.45.99-1.2.3", 0x010203)); - ut_assert_true(_is_correct_version_tag_vendor("1.2.3-11.45.99", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0", 0x010000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-255.255.255", 0xFFFFFF)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-255.255.255-11", 0xFFFFFF)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-rc2", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11-abababab", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99rc3-7-g7e282f57", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99rc4", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99alpha3-7-g7e282f57", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99alpha4", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99beta3-7-g7e282f57", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99beta4", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99dev4", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99dev3-7-g7e282f57", 0x0B2D63)); - ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0-rc2-abababab", 0x010000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0-rc2-23-abababab", 0x010000)); - ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-0.8.7-67-g1d5e979", 0x000807)); - ut_assert_true(_is_correct_version_tag_vendor("v1.6.0-100-g890c415", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.45.99beta4", 0x002D63)); - ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.0.0beta4", 0x000000)); - ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.0.0dev4", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("alpha", 0x00000000)); + ut_assert_true(_is_correct_version_tag_vendor("alpha23", 0x00000000)); + ut_assert_true(_is_correct_version_tag_vendor("v11.45.99-34.56.88", 0x223858FF)); + ut_assert_true(_is_correct_version_tag_vendor("v11.45.99-1.2.3", 0x010203FF)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-11.45.99", 0x0B2D63FF)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0", 0x010000FF)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-255.255.255", 0xFFFFFFFF)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-255.255.255-11", 0xFFFFFFFF)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3", 0x000000FF)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-rc2", 0x000000C0)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11", 0x00000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45", 0x00000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11-abababab", 0x00000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99rc3-7-g7e282f57", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99rc4", 0x0B2D63C0)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99alpha3-7-g7e282f57", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99alpha4", 0x0B2D6340)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99beta3-7-g7e282f57", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99beta4", 0x0B2D6380)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99dev4", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99dev3-7-g7e282f57", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0-rc2-abababab", 0x01000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0-rc2-23-abababab", 0x010000C0)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-0.8.7-67-g1d5e979", 0x00080700)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.0-100-g890c415", 0x00000000)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.45.99beta4", 0x002D6380)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.0.0beta4", 0x00000080)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.0.0dev4", 0x00000000)); return true; }