Merge pull request #337 from quartiq/rs/issue-276/unique-identifiers
Utilize unique MQTT prefix identifiers
This commit is contained in:
commit
bba86f4b17
@ -27,6 +27,6 @@ sleep 30
|
||||
ping -c 5 -w 20 stabilizer-hitl
|
||||
|
||||
# Test the MQTT interface.
|
||||
python3 miniconf.py dt/sinara/stabilizer afe/0='"G2"'
|
||||
python3 miniconf.py dt/sinara/stabilizer afe/0='"G1"' iir_ch/0/0=\
|
||||
python3 miniconf.py dt/sinara/dual-iir/04-91-62-d9-7e-5f afe/0='"G2"'
|
||||
python3 miniconf.py dt/sinara/dual-iir/04-91-62-d9-7e-5f afe/0='"G1"' iir_ch/0/0=\
|
||||
'{"y_min": -32767, "y_max": 32767, "y_offset": 0, "ba": [1.0, 0, 0, 0, 0]}'
|
||||
|
@ -62,7 +62,10 @@ const APP: () = {
|
||||
let mqtt_config = MiniconfInterface::new(
|
||||
stabilizer.net.stack,
|
||||
"",
|
||||
"dt/sinara/stabilizer",
|
||||
&net::get_device_prefix(
|
||||
env!("CARGO_BIN_NAME"),
|
||||
stabilizer.net.mac_address,
|
||||
),
|
||||
stabilizer.net.phy,
|
||||
stabilizer.cycle_counter,
|
||||
);
|
||||
|
@ -8,6 +8,8 @@ use serde::Deserialize;
|
||||
|
||||
use dsp::{Accu, Complex, ComplexExt, Lockin, RPLL};
|
||||
|
||||
use stabilizer::net;
|
||||
|
||||
use stabilizer::hardware::{
|
||||
design_parameters, setup, Adc0Input, Adc1Input, AfeGain, Dac0Output,
|
||||
Dac1Output, InputStamper, AFE0, AFE1,
|
||||
@ -74,7 +76,10 @@ const APP: () = {
|
||||
let mqtt_config = MiniconfInterface::new(
|
||||
stabilizer.net.stack,
|
||||
"",
|
||||
"dt/sinara/lockin",
|
||||
&net::get_device_prefix(
|
||||
env!("CARGO_BIN_NAME"),
|
||||
stabilizer.net.mac_address,
|
||||
),
|
||||
stabilizer.net.phy,
|
||||
stabilizer.cycle_counter,
|
||||
);
|
||||
|
@ -57,6 +57,7 @@ impl NetStorage {
|
||||
pub struct NetworkDevices {
|
||||
pub stack: NetworkStack,
|
||||
pub phy: EthernetPhy,
|
||||
pub mac_address: smoltcp::wire::EthernetAddress,
|
||||
}
|
||||
|
||||
/// The available hardware interfaces on Stabilizer.
|
||||
@ -618,6 +619,7 @@ pub fn setup(
|
||||
NetworkDevices {
|
||||
stack,
|
||||
phy: lan8742a,
|
||||
mac_address: mac_addr,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2,6 +2,9 @@ use crate::hardware::{
|
||||
design_parameters::MQTT_BROKER, CycleCounter, EthernetPhy, NetworkStack,
|
||||
};
|
||||
|
||||
use core::fmt::Write;
|
||||
|
||||
use heapless::{consts, String};
|
||||
use miniconf::minimq;
|
||||
|
||||
/// Potential actions for firmware to take.
|
||||
@ -107,3 +110,39 @@ where
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Get the MQTT prefix of a device.
|
||||
///
|
||||
/// # Args
|
||||
/// * `app` - The name of the application that is executing.
|
||||
/// * `mac` - The ethernet MAC address of the device.
|
||||
///
|
||||
/// # Returns
|
||||
/// The MQTT prefix used for this device.
|
||||
pub fn get_device_prefix(
|
||||
app: &str,
|
||||
mac: smoltcp_nal::smoltcp::wire::EthernetAddress,
|
||||
) -> String<consts::U128> {
|
||||
let mac_string = {
|
||||
let mut mac_string: String<consts::U32> = String::new();
|
||||
let mac = mac.as_bytes();
|
||||
|
||||
// Note(unwrap): 32-bytes is guaranteed to be valid for any mac address, as the address has
|
||||
// a fixed length.
|
||||
write!(
|
||||
&mut mac_string,
|
||||
"{:02x}-{:02x}-{:02x}-{:02x}-{:02x}-{:02x}",
|
||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
mac_string
|
||||
};
|
||||
|
||||
// Note(unwrap): The mac address + binary name must be short enough to fit into this string. If
|
||||
// they are defined too long, this will panic and the device will fail to boot.
|
||||
let mut prefix: String<consts::U128> = String::new();
|
||||
write!(&mut prefix, "dt/sinara/{}/{}", app, mac_string).unwrap();
|
||||
|
||||
prefix
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user