bb driver impl (not tested)
This commit is contained in:
+16
-8
@@ -1,6 +1,7 @@
|
||||
#include "bbnow_pub.hpp"
|
||||
#include <cassert>
|
||||
#include <esp_log.h>
|
||||
#include <utility>
|
||||
|
||||
const static char TAG[] = "bbnow_pub";
|
||||
|
||||
@@ -49,12 +50,15 @@ size_t BBNowPubPacket::serialize_into(std::vector<uint8_t>& buf) const {
|
||||
switch (this->packet_type) {
|
||||
case BBNowPubPacketType::NONE:
|
||||
break;
|
||||
case BBNowPubPacketType::DISCOVERY:
|
||||
static_assert(sizeof(this->packet_data.discovery) == 2, "expect discovery data to be 2 bytes");
|
||||
uint16_t data = static_cast<uint16_t>(this->packet_data.discovery.expantion_type);
|
||||
case BBNowPubPacketType::DISCOVERY: {
|
||||
const auto& discovery =
|
||||
std::get<BlkBoxNowPubDiscoveryData>(this->packet_data);
|
||||
static_assert(sizeof(discovery) == 2, "expect discovery data to be 2 bytes");
|
||||
uint16_t data = static_cast<uint16_t>(discovery.expantion_type);
|
||||
buf.push_back((data >> 8) & 0xFF);
|
||||
buf.push_back((data >> 0) & 0xFF);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assert(buf.size() - initial_size == size);
|
||||
@@ -88,7 +92,7 @@ std::optional<BBNowPubPacket> BBNowPubPacket::deserialize(std::span<const uint8_
|
||||
static_assert(sizeof(BBNowPubPacketType) == 2, "expect packet type to be 2 bytes");
|
||||
uint16_t packet_type = ((uint16_t)bytes[4] << 8) | ((uint16_t)bytes[5]);
|
||||
packet.packet_type = static_cast<BBNowPubPacketType>(packet_type);
|
||||
if (packet.packet_type > BBNowPubPacketType::MAX) {
|
||||
if (packet.packet_type == BBNowPubPacketType::NONE) {
|
||||
ESP_LOGW(TAG, "BlkBoxPubPacketType was NONE! discarding");
|
||||
return std::nullopt;
|
||||
}
|
||||
@@ -111,14 +115,18 @@ std::optional<BBNowPubPacket> BBNowPubPacket::deserialize(std::span<const uint8_
|
||||
switch (packet.packet_type) {
|
||||
case BBNowPubPacketType::NONE:
|
||||
break;
|
||||
case BBNowPubPacketType::DISCOVERY:
|
||||
case BBNowPubPacketType::DISCOVERY: {
|
||||
uint16_t device = ((uint16_t)bytes[6] << 8) | ((uint16_t)bytes[7]);
|
||||
packet.packet_data.discovery.expantion_type = static_cast<BlkBoxExpantion>(device);
|
||||
if (packet.packet_data.discovery.expantion_type > BlkBoxExpantion::MAX) {
|
||||
auto data = BlkBoxNowPubDiscoveryData{
|
||||
.expantion_type = static_cast<BlkBoxExpantion>(device)
|
||||
};
|
||||
if (data.expantion_type > BlkBoxExpantion::MAX) {
|
||||
ESP_LOGW(TAG, "BlkBoxExpantion not in range! discarding");
|
||||
return std::nullopt;
|
||||
}
|
||||
packet.packet_data = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return packet;
|
||||
}
|
||||
@@ -126,6 +134,6 @@ std::optional<BBNowPubPacket> BBNowPubPacket::deserialize(std::span<const uint8_
|
||||
BBNowPubPacket BBNowPubPacket::new_discovery(BlkBoxNowPubDiscoveryData data) {
|
||||
BBNowPubPacket packet;
|
||||
packet.packet_type = BBNowPubPacketType::DISCOVERY;
|
||||
packet.packet_data.discovery = data;
|
||||
packet.packet_data = std::move(data);
|
||||
return packet;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user