Add support for parsing the hostnames we're going to use on the Pis
Change-Id: Ifee2e2066d7d3034bdf9aece2983922d5c636a0f
diff --git a/aos/network/team_number.cc b/aos/network/team_number.cc
index b031299..14fadab 100644
--- a/aos/network/team_number.cc
+++ b/aos/network/team_number.cc
@@ -35,6 +35,29 @@
return std::nullopt;
}
+std::optional<uint16_t> ParsePiTeamNumber(const std::string &hostname) {
+ if (hostname.substr(0, 3) != "pi-") {
+ return std::nullopt;
+ }
+ size_t first_separator = hostname.find('-');
+ if (first_separator == hostname.npos ||
+ first_separator >= hostname.size() - 2) {
+ return std::nullopt;
+ }
+ ++first_separator;
+ const size_t second_separator = hostname.find('-', first_separator);
+ if (second_separator == hostname.npos) {
+ return std::nullopt;
+ }
+ const std::string number_string =
+ hostname.substr(first_separator, second_separator - first_separator);
+ int number;
+ if (!util::StringToNumber(number_string, &number)) {
+ return std::nullopt;
+ }
+ return number;
+}
+
} // namespace team_number_internal
namespace {
@@ -65,6 +88,13 @@
return *result;
}
}
+ {
+ const auto result = team_number_internal::ParsePiTeamNumber(hostname);
+ if (result) {
+ LOG(INFO) << "Pi hostname team number is: " << *result;
+ return *result;
+ }
+ }
LOG(FATAL) << "Failed to parse a team number from hostname: " << hostname;
}
diff --git a/aos/network/team_number.h b/aos/network/team_number.h
index 6eb1335..618affb 100644
--- a/aos/network/team_number.h
+++ b/aos/network/team_number.h
@@ -28,6 +28,8 @@
std::optional<uint16_t> ParseRoborioTeamNumber(const std::string &hostname);
+std::optional<uint16_t> ParsePiTeamNumber(const std::string &hostname);
+
} // namespace team_number_internal
} // namespace network
} // namespace aos
diff --git a/aos/network/team_number_test.cc b/aos/network/team_number_test.cc
index 03001de..c11f0a0 100644
--- a/aos/network/team_number_test.cc
+++ b/aos/network/team_number_test.cc
@@ -7,6 +7,7 @@
namespace testing {
using team_number_internal::ParseRoborioTeamNumber;
+using team_number_internal::ParsePiTeamNumber;
TEST(TeamNumberTest, Parse2015TeamNumber) {
EXPECT_EQ(971u, *ParseRoborioTeamNumber("roboRIO-971"));
@@ -29,6 +30,17 @@
EXPECT_FALSE(ParseRoborioTeamNumber("roboRIO--FRC"));
}
+TEST(TeamNumberTest, ParsePiTeamNumber) {
+ EXPECT_EQ(971u, *ParsePiTeamNumber("pi-971-1"));
+ EXPECT_EQ(8971u, *ParsePiTeamNumber("pi-8971-22"));
+ EXPECT_EQ(8971u, *ParsePiTeamNumber("pi-8971-"));
+
+ EXPECT_FALSE(ParseRoborioTeamNumber("pi"));
+ EXPECT_FALSE(ParseRoborioTeamNumber("pi-"));
+ EXPECT_FALSE(ParseRoborioTeamNumber("pi-971"));
+ EXPECT_FALSE(ParseRoborioTeamNumber("pi-971a-1"));
+}
+
} // namespace testing
} // namespace network
} // namespace aos