diff --git a/Cargo.lock b/Cargo.lock index 716d4051..696c947a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4477,6 +4477,7 @@ name = "spl_network" version = "0.1.0" dependencies = [ "color-eyre", + "constants", "context_attribute", "framework", "log", @@ -4496,6 +4497,7 @@ dependencies = [ "bindgen 0.61.0", "byteorder", "color-eyre", + "constants", "nalgebra", "serde", "serialize_hierarchy", @@ -5113,6 +5115,7 @@ dependencies = [ "bincode", "color-eyre", "communication", + "constants", "convert_case", "eframe", "egui_dock", diff --git a/crates/constants/src/lib.rs b/crates/constants/src/lib.rs index a64f1029..cbad60dd 100644 --- a/crates/constants/src/lib.rs +++ b/crates/constants/src/lib.rs @@ -5,3 +5,4 @@ pub const HULA_SOCKET_PATH: &str = "/tmp/hula"; pub const OS_RELEASE_PATH: &str = "/etc/os-release"; pub const OS_VERSION: &str = "5.7.1"; pub const SDK_VERSION: &str = "5.7.0"; +pub const DNT_TEAM_NUMBER: u8 = 8; diff --git a/crates/spl_network/Cargo.toml b/crates/spl_network/Cargo.toml index 3285ccad..909a0b55 100644 --- a/crates/spl_network/Cargo.toml +++ b/crates/spl_network/Cargo.toml @@ -7,6 +7,7 @@ homepage = "https://github.com/hulks/hulk" [dependencies] color-eyre = { workspace = true } +constants = { workspace = true } context_attribute = { workspace = true } framework = { workspace = true } log = { workspace = true } diff --git a/crates/spl_network/src/endpoint.rs b/crates/spl_network/src/endpoint.rs index 5622eb22..66258da3 100644 --- a/crates/spl_network/src/endpoint.rs +++ b/crates/spl_network/src/endpoint.rs @@ -9,6 +9,10 @@ use thiserror::Error; use tokio::{net::UdpSocket, select, sync::Mutex}; use types::messages::{IncomingMessage, OutgoingMessage}; +use constants::DNT_TEAM_NUMBER; + +const SPL_PORT: u16 = 10000 + (DNT_TEAM_NUMBER as u16); + pub struct Endpoint { ports: Ports, game_controller_state_socket: UdpSocket, @@ -34,7 +38,7 @@ impl Endpoint { )) .await .map_err(Error::CannotBind)?; - let spl_socket = UdpSocket::bind(SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, parameters.spl)) + let spl_socket = UdpSocket::bind(SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, SPL_PORT)) .await .map_err(Error::CannotBind)?; spl_socket @@ -111,7 +115,7 @@ impl Endpoint { .spl_socket .send_to( message.as_slice(), - SocketAddr::new(Ipv4Addr::BROADCAST.into(), self.ports.spl), + SocketAddr::new(Ipv4Addr::BROADCAST.into(), SPL_PORT), ) .await { @@ -126,5 +130,4 @@ impl Endpoint { pub struct Ports { game_controller_state: u16, game_controller_return: u16, - spl: u16, } diff --git a/crates/spl_network_messages/Cargo.toml b/crates/spl_network_messages/Cargo.toml index 2e11021b..7cfc24bd 100644 --- a/crates/spl_network_messages/Cargo.toml +++ b/crates/spl_network_messages/Cargo.toml @@ -13,6 +13,7 @@ approx = { workspace = true } bifrost = { workspace = true } byteorder = { workspace = true } color-eyre = { workspace = true } +constants = { workspace = true } nalgebra = { workspace = true } serde = { workspace = true } serialize_hierarchy = { workspace = true } diff --git a/crates/spl_network_messages/src/game_controller_return_message.rs b/crates/spl_network_messages/src/game_controller_return_message.rs index 152532d6..61e8a736 100644 --- a/crates/spl_network_messages/src/game_controller_return_message.rs +++ b/crates/spl_network_messages/src/game_controller_return_message.rs @@ -1,10 +1,11 @@ use std::time::Duration; use color_eyre::{Report, Result}; +use constants::DNT_TEAM_NUMBER; use nalgebra::{point, vector, Isometry2}; use serde::{Deserialize, Serialize}; -use crate::{BallPosition, PlayerNumber, DNT_TEAM_NUMBER}; +use crate::{BallPosition, PlayerNumber}; use bifrost::{ communication::RoboCupGameControlReturnData, diff --git a/crates/spl_network_messages/src/game_controller_state_conversion.rs b/crates/spl_network_messages/src/game_controller_state_conversion.rs index 2f7274f4..fc16d0d2 100644 --- a/crates/spl_network_messages/src/game_controller_state_conversion.rs +++ b/crates/spl_network_messages/src/game_controller_state_conversion.rs @@ -1,10 +1,9 @@ use color_eyre::{Report, Result}; +use constants::DNT_TEAM_NUMBER; use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; use std::time::Duration; -use crate::DNT_TEAM_NUMBER; - use bifrost::{ communication::{ CompetitionPhase as BifrostCompetitionPhase, CompetitionType as BifrostCompetitionType, diff --git a/crates/spl_network_messages/src/game_controller_state_message.rs b/crates/spl_network_messages/src/game_controller_state_message.rs index 5c7bda89..597cf28a 100644 --- a/crates/spl_network_messages/src/game_controller_state_message.rs +++ b/crates/spl_network_messages/src/game_controller_state_message.rs @@ -4,12 +4,13 @@ use std::{ }; use color_eyre::{eyre::bail, Report, Result}; +use constants::DNT_TEAM_NUMBER; use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; use crate::{ CompetitionPhase, CompetitionType, GamePhase, GameState, Half, PenaltyShoot, Player, SubState, - Team, TeamColor, TeamState, DNT_TEAM_NUMBER, + Team, TeamColor, TeamState, }; use bifrost::{communication::RoboCupGameControlData, serialization::Decode}; diff --git a/crates/spl_network_messages/src/lib.rs b/crates/spl_network_messages/src/lib.rs index 1205ecee..0be2d42d 100644 --- a/crates/spl_network_messages/src/lib.rs +++ b/crates/spl_network_messages/src/lib.rs @@ -27,8 +27,6 @@ pub struct BallPosition { pub age: Duration, } -pub const DNT_TEAM_NUMBER: u8 = 8; - use bifrost::serialization::{Decode, Encode}; #[derive( diff --git a/crates/spl_network_messages/src/spl_message.rs b/crates/spl_network_messages/src/spl_message.rs index 86d83655..20e4e4eb 100644 --- a/crates/spl_network_messages/src/spl_message.rs +++ b/crates/spl_network_messages/src/spl_message.rs @@ -4,11 +4,12 @@ use std::{ }; use color_eyre::{eyre::bail, Report, Result}; +use constants::DNT_TEAM_NUMBER; use nalgebra::{point, vector, Isometry2}; use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; -use crate::{BallPosition, PlayerNumber, DNT_TEAM_NUMBER}; +use crate::{BallPosition, PlayerNumber}; use bifrost::communication::SPLStandardMessage; diff --git a/etc/configuration/hardware.json b/etc/configuration/hardware.json index 0c26d5ce..2d530844 100644 --- a/etc/configuration/hardware.json +++ b/etc/configuration/hardware.json @@ -9,8 +9,7 @@ }, "spl_network_ports": { "game_controller_state": 3838, - "game_controller_return": 3939, - "spl": 10024 + "game_controller_return": 3939 }, "camera_top": { "width": 640, diff --git a/tools/pepsi/src/parsers.rs b/tools/pepsi/src/parsers.rs index 78aeee73..5d28a762 100644 --- a/tools/pepsi/src/parsers.rs +++ b/tools/pepsi/src/parsers.rs @@ -8,6 +8,7 @@ use color_eyre::{ eyre::{bail, eyre, WrapErr}, Report, Result, }; +use constants::DNT_TEAM_NUMBER; use regex::Regex; use nao::{Network, SystemctlAction}; @@ -100,7 +101,7 @@ pub fn number_to_ip(nao_number: u8, connection: Connection) -> Result Connection::Wireless => 0, Connection::Wired => 1, }; - Ok(Ipv4Addr::new(10, subnet, 8, nao_number)) + Ok(Ipv4Addr::new(10, subnet, DNT_TEAM_NUMBER, nao_number)) } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] @@ -130,7 +131,7 @@ impl TryFrom for NaoNumber { fn try_from(nao_address: NaoAddress) -> Result { if nao_address.ip.octets()[0] != 10 || (nao_address.ip.octets()[1] != 0 && nao_address.ip.octets()[1] != 1) - || nao_address.ip.octets()[2] != 8 + || nao_address.ip.octets()[2] != DNT_TEAM_NUMBER { bail!("failed to extract NAO number from IP {nao_address}"); } diff --git a/tools/twix/Cargo.toml b/tools/twix/Cargo.toml index 3502e9e5..638fc301 100644 --- a/tools/twix/Cargo.toml +++ b/tools/twix/Cargo.toml @@ -9,6 +9,7 @@ homepage = "https://github.com/hulks/hulk" bincode = { workspace = true } color-eyre = { workspace = true } communication = { workspace = true } +constants = { workspace = true } convert_case = { workspace = true } eframe = { workspace = true } egui_dock = { workspace = true } diff --git a/tools/twix/src/completion_edit.rs b/tools/twix/src/completion_edit.rs index f8f8e1ef..4d0f9dad 100644 --- a/tools/twix/src/completion_edit.rs +++ b/tools/twix/src/completion_edit.rs @@ -1,6 +1,7 @@ use std::{iter::once, ops::Range}; use communication::messages::Fields; +use constants::DNT_TEAM_NUMBER; use eframe::egui::{ text::CCursor, text_edit::CCursorRange, Area, Context, Frame, Id, Key, Modifiers, Order, Response, ScrollArea, TextEdit, Ui, Widget, @@ -41,8 +42,10 @@ impl<'key> CompletionEdit<'key> { pub fn addresses(key: &'key mut String, numbers: Range) -> Self { let completion_items = chain!( once("localhost".to_string()), - numbers.clone().map(|number| format!("10.1.8.{number}")), - numbers.map(|number| format!("10.0.8.{number}")) + numbers + .clone() + .map(|number| format!("10.1.{DNT_TEAM_NUMBER}.{number}")), + numbers.map(|number| format!("10.0.{DNT_TEAM_NUMBER}.{number}")) ) .collect();