diff --git a/NetworkSync.cpp b/NetworkSync.cpp index 22a2a05..7616d63 100644 --- a/NetworkSync.cpp +++ b/NetworkSync.cpp @@ -210,10 +210,27 @@ void NetworkSync::PublishClient() { #endif } +void NetworkSync::BroadcastState(Sensor* sensor) { + unsigned char ix = 0; + buffer[ix++] = StateMsg; + buffer[ix++] = sensor->type; + float* value = (float*)sensor->GetValue(); + SendFloat16(buffer, &ix, *value); + SendBuffer(ix); +} + void NetworkSync::BroadcastPerception(Roboid *roboid) { - if (roboid->perception == nullptr) + Perception* perception = roboid->perception; + if (perception == nullptr) return; - + + for (int sensorIx = 0; sensorIx < perception->sensorCount; sensorIx++) { + Sensor* sensor = perception->sensors[sensorIx]; + if (sensor == nullptr) + continue; + // sensor->BroadcastState(); + BroadcastState(sensor); + } PublishTrackedObjects(roboid, roboid->perception->GetTrackedObjects()); } diff --git a/NetworkSync.h b/NetworkSync.h index 47432e5..f511707 100644 --- a/NetworkSync.h +++ b/NetworkSync.h @@ -11,6 +11,7 @@ namespace RoboidControl { /// @brief Interface for synchronizaing state between clients across a network class NetworkSync { public: + NetworkSync() {}; NetworkSync(Roboid* roboid); unsigned char networkId; @@ -29,6 +30,7 @@ class NetworkSync { static const unsigned char PoseMsg = 0x10; static const unsigned char PoseTypeMsg = 0x11; static const unsigned char RelativePoseMsg = 0x12; + static const unsigned char StateMsg = 0x18; /// @brief A bit pattern for the pose, stating that this message contains a /// position in world coordinates static const unsigned char Pose_Position = 0x01; @@ -82,6 +84,8 @@ class NetworkSync { Roboid* roboid; NetworkPerception* networkPerception; + void BroadcastState(Sensor* sensor); + void PublishTrackedObject(Roboid* roboid, InterestingThing* object); void PublishRelativeObject(Buffer sendBuffer, UInt8 parentId, diff --git a/Sensor.h b/Sensor.h index 8457e7e..fec6cd4 100644 --- a/Sensor.h +++ b/Sensor.h @@ -10,10 +10,18 @@ class Sensor : public Thing { public: /// @brief Default Constructor for a Sensor Sensor(); - + /// @brief Sets the parent Thing /// @param parent The Thing which should become the parent virtual void SetParent(Thing *parent) override; + + virtual void BroadcastState() {}; + + enum SensorType { + Unknown = 0, + Temperature = 1, + }; + virtual void* GetValue() { return nullptr; }; }; } // namespace RoboidControl diff --git a/TemperatureSensor.cpp b/TemperatureSensor.cpp new file mode 100644 index 0000000..8f57215 --- /dev/null +++ b/TemperatureSensor.cpp @@ -0,0 +1,15 @@ +#include "TemperatureSensor.h" + +TemperatureSensor::TemperatureSensor() +{ + this->type = (unsigned int) SensorType::Temperature; +} + +float TemperatureSensor::InCelsius() +{ + return this->temperature; +} + +void* TemperatureSensor::GetValue() { + return &this->temperature; +} diff --git a/TemperatureSensor.h b/TemperatureSensor.h new file mode 100644 index 0000000..01f7f92 --- /dev/null +++ b/TemperatureSensor.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Sensor.h" +#include "NetworkSync.h" + +namespace Passer::RoboidControl +{ +class TemperatureSensor : public Sensor { +public: + TemperatureSensor(); + + float InCelsius(); + virtual void* GetValue() override; + // virtual void BroadcastState() override; +protected: + float temperature = 0; // in Celsius +}; +} // namespace Passer::RoboidControl +using namespace Passer::RoboidControl;