diff options
-rw-r--r-- | coding/traffic.hpp | 19 | ||||
-rw-r--r-- | tracking/connection.cpp | 2 | ||||
-rw-r--r-- | tracking/protocol.cpp | 14 | ||||
-rw-r--r-- | tracking/protocol.hpp | 6 | ||||
-rw-r--r-- | tracking/pytracking/bindings.cpp | 1 | ||||
-rw-r--r-- | tracking/tracking_tests/protocol_test.cpp | 2 |
6 files changed, 24 insertions, 20 deletions
diff --git a/coding/traffic.hpp b/coding/traffic.hpp index c28fcea13d..0df9ee0a64 100644 --- a/coding/traffic.hpp +++ b/coding/traffic.hpp @@ -6,6 +6,8 @@ #include "geometry/latlon.hpp" +#include "base/checked_cast.hpp" + #include "std/limits.hpp" #include "std/vector.hpp" @@ -23,6 +25,7 @@ public: struct DataPoint { + // TODO(@m): document the version format DataPoint() = default; DataPoint(uint64_t timestamp, ms::LatLon latLon, uint8_t traffic) @@ -33,7 +36,9 @@ public: // It is expected that |m_timestamp| stores time since epoch in seconds. uint64_t m_timestamp = 0; ms::LatLon m_latLon = ms::LatLon::Zero(); - // TODO: comment the decision + // A pod type instead of the traffic::SpeedGroup enum + // so as not to introduce a cyclic dependency. + // This field was added in Version 1 (and was the only addition). uint8_t m_traffic = 0; bool operator==(DataPoint const & p) const @@ -174,7 +179,7 @@ private: Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLat, ms::LatLon::kMaxLat); lastLon = Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLon, ms::LatLon::kMaxLon); - result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic)); + result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic); first = false; } else @@ -182,7 +187,7 @@ private: lastTimestamp += ReadVarUint<uint64_t>(src); lastLat += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLat, kMaxDeltaLat); lastLon += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLon, kMaxDeltaLon); - result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic)); + result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic); } } } @@ -205,8 +210,8 @@ private: Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLat, ms::LatLon::kMaxLat); lastLon = Uint32ToDouble(ReadVarUint<uint32_t>(src), ms::LatLon::kMinLon, ms::LatLon::kMaxLon); - traffic = static_cast<uint8_t>(ReadVarUint<uint32_t>(src)); - result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic)); + traffic = base::asserted_cast<uint8_t>(ReadVarUint<uint32_t>(src)); + result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic); first = false; } else @@ -214,8 +219,8 @@ private: lastTimestamp += ReadVarUint<uint64_t>(src); lastLat += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLat, kMaxDeltaLat); lastLon += Uint32ToDouble(ReadVarUint<uint32_t>(src), kMinDeltaLon, kMaxDeltaLon); - traffic = static_cast<uint8_t>(ReadVarUint<uint32_t>(src)); - result.push_back(DataPoint(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic)); + traffic = base::asserted_cast<uint8_t>(ReadVarUint<uint32_t>(src)); + result.emplace_back(lastTimestamp, ms::LatLon(lastLat, lastLon), traffic); } } } diff --git a/tracking/connection.cpp b/tracking/connection.cpp index d9e13304c7..bc242f3d3b 100644 --- a/tracking/connection.cpp +++ b/tracking/connection.cpp @@ -60,7 +60,7 @@ bool Connection::Send(boost::circular_buffer<DataPoint> const & points) if (!m_socket) return false; - auto packet = Protocol::CreateDataPacket(points); + auto packet = Protocol::CreateDataPacket(points, tracking::Protocol::PacketType::CurrentData); return m_socket->Write(packet.data(), static_cast<uint32_t>(packet.size())); } } // namespace tracking diff --git a/tracking/protocol.cpp b/tracking/protocol.cpp index 3d97400a87..d394c34a8f 100644 --- a/tracking/protocol.cpp +++ b/tracking/protocol.cpp @@ -18,15 +18,15 @@ vector<uint8_t> CreateDataPacketImpl(Container const & points, vector<uint8_t> buffer; MemWriter<decltype(buffer)> writer(buffer); - uint32_t serializer_version = tracking::Protocol::Encoder::kLatestVersion; + uint32_t version = tracking::Protocol::Encoder::kLatestVersion; switch (type) { - case tracking::Protocol::PacketType::DataV0: serializer_version = 0; break; - case tracking::Protocol::PacketType::DataV1: serializer_version = 1; break; - case tracking::Protocol::PacketType::AuthV0: ASSERT(false, ("Not a DATA type.")); break; + case tracking::Protocol::PacketType::DataV0: version = 0; break; + case tracking::Protocol::PacketType::DataV1: version = 1; break; + case tracking::Protocol::PacketType::AuthV0: ASSERT(false, ("Not a DATA packet.")); break; } - tracking::Protocol::Encoder::SerializeDataPoints(serializer_version, writer, points); + tracking::Protocol::Encoder::SerializeDataPoints(version, writer, points); auto packet = tracking::Protocol::CreateHeader(type, static_cast<uint32_t>(buffer.size())); packet.insert(packet.end(), begin(buffer), end(buffer)); @@ -92,7 +92,7 @@ string Protocol::DecodeAuthPacket(Protocol::PacketType type, vector<uint8_t> con { case Protocol::PacketType::AuthV0: return string(begin(data), end(data)); case Protocol::PacketType::DataV0: - case Protocol::PacketType::DataV1: ASSERT(false, ("Not AUTH packet.")); break; + case Protocol::PacketType::DataV1: ASSERT(false, ("Not an AUTH packet.")); break; } return string(); } @@ -111,7 +111,7 @@ Protocol::DataElementsVec Protocol::DecodeDataPacket(PacketType type, vector<uin case Protocol::PacketType::DataV1: Encoder::DeserializeDataPoints(1 /* version */, src, points); break; - case Protocol::PacketType::AuthV0: ASSERT(false, ("Not DATA packet.")); break; + case Protocol::PacketType::AuthV0: ASSERT(false, ("Not a DATA packet.")); break; } return points; } diff --git a/tracking/protocol.hpp b/tracking/protocol.hpp index 03efd3dac9..da1752b80d 100644 --- a/tracking/protocol.hpp +++ b/tracking/protocol.hpp @@ -31,10 +31,8 @@ public: static vector<uint8_t> CreateHeader(PacketType type, uint32_t payloadSize); static vector<uint8_t> CreateAuthPacket(string const & clientId); - static vector<uint8_t> CreateDataPacket(DataElementsCirc const & points, - PacketType type = PacketType::CurrentData); - static vector<uint8_t> CreateDataPacket(DataElementsVec const & points, - PacketType type = PacketType::CurrentData); + static vector<uint8_t> CreateDataPacket(DataElementsCirc const & points, PacketType type); + static vector<uint8_t> CreateDataPacket(DataElementsVec const & points, PacketType type); static std::pair<PacketType, size_t> DecodeHeader(vector<uint8_t> const & data); static string DecodeAuthPacket(PacketType type, vector<uint8_t> const & data); diff --git a/tracking/pytracking/bindings.cpp b/tracking/pytracking/bindings.cpp index 528351e614..0e44b54d8f 100644 --- a/tracking/pytracking/bindings.cpp +++ b/tracking/pytracking/bindings.cpp @@ -30,6 +30,7 @@ BOOST_PYTHON_MODULE(pytracking) .def(init<uint64_t, ms::LatLon const &>()) .def_readwrite("timestamp", &coding::TrafficGPSEncoder::DataPoint::m_timestamp) .def_readwrite("coords", &coding::TrafficGPSEncoder::DataPoint::m_latLon); + .def_readwrite("traffic", &coding::TrafficGPSEncoder::DataPoint::m_traffic); enum_<Protocol::PacketType>("PacketType") .value("AuthV0", Protocol::PacketType::AuthV0) diff --git a/tracking/tracking_tests/protocol_test.cpp b/tracking/tracking_tests/protocol_test.cpp index 38f1c87381..0bd1f76a86 100644 --- a/tracking/tracking_tests/protocol_test.cpp +++ b/tracking/tracking_tests/protocol_test.cpp @@ -47,7 +47,7 @@ UNIT_TEST(Protocol_CreateDataPacket) TEST_EQUAL(packetV0[5], 227, ()); TEST_EQUAL(packetV0[6], 241, ()); - auto packetV1 = Protocol::CreateDataPacket(buffer); + auto packetV1 = Protocol::CreateDataPacket(buffer, Protocol::PacketType::DataV1); TEST_EQUAL(packetV1.size(), 28, ()); TEST_EQUAL(Protocol::PacketType(packetV1[0]), Protocol::PacketType::DataV1, ()); TEST_EQUAL(packetV1[1], 0x00, ()); |