}
void LinkLayerController::IncomingLeAdvertisementPacket(LinkLayerPacketView incoming) {
- LOG_INFO(LOG_TAG, "LE Advertisement Packet");
// TODO: Handle multiple advertisements per packet.
LeAdvertisementView advertisement = LeAdvertisementView::GetLeAdvertisementView(incoming);
vector<uint8_t> ad;
auto itr = advertisement.GetData();
size_t ad_size = itr.NumBytesRemaining();
- LOG_INFO(LOG_TAG, "Sending advertisement %d", static_cast<int>(ad_size));
for (size_t i = 0; i < ad_size; i++) {
ad.push_back(itr.extract<uint8_t>());
}
// Active scanning
if (le_scan_enable_ && le_scan_type_ == 1) {
- LOG_INFO(LOG_TAG, "Send Scan Packet");
std::shared_ptr<LinkLayerPacketBuilder> to_send =
LinkLayerPacketBuilder::WrapLeScan(properties_.GetLeAddress(), incoming.GetSourceAddress());
SendLELinkLayerPacket(to_send);
}
void LinkLayerController::IncomingLeScanResponsePacket(LinkLayerPacketView incoming) {
- LOG_INFO(LOG_TAG, "LE Scan Response Packet");
LeAdvertisementView scan_response = LeAdvertisementView::GetLeAdvertisementView(incoming);
vector<uint8_t> ad;
auto itr = scan_response.GetData();
}
void Beacon::TimerTick() {
- LOG_INFO(LOG_TAG, "TimerTick()");
if (IsAdvertisementAvailable(std::chrono::milliseconds(5000))) {
- LOG_INFO(LOG_TAG, "Generating Advertisement %d", static_cast<int>(properties_.GetLeAdvertisement().size()));
std::unique_ptr<packets::LeAdvertisementBuilder> ad = packets::LeAdvertisementBuilder::Create(
LeAdvertisement::AddressType::PUBLIC,
static_cast<LeAdvertisement::AdvertisementType>(properties_.GetLeAdvertisementType()),
packets::LinkLayerPacketBuilder::WrapLeAdvertisement(std::move(ad), properties_.GetLeAddress());
std::vector<std::shared_ptr<PhyLayer>> le_phys = phy_layers_[Phy::Type::LOW_ENERGY];
for (std::shared_ptr<PhyLayer> phy : le_phys) {
- LOG_INFO(LOG_TAG, "Sending Advertisement on a Phy");
phy->Send(to_send);
}
}
}
void Beacon::IncomingPacket(packets::LinkLayerPacketView packet) {
- LOG_INFO(LOG_TAG, "Got a packet of type %d", static_cast<int>(packet.GetType()));
if (packet.GetDestinationAddress() == properties_.GetLeAddress() && packet.GetType() == Link::PacketType::LE_SCAN) {
- LOG_INFO(LOG_TAG, "Got a scan");
std::unique_ptr<packets::LeAdvertisementBuilder> scan_response = packets::LeAdvertisementBuilder::Create(
LeAdvertisement::AddressType::PUBLIC, LeAdvertisement::AdvertisementType::SCAN_RESPONSE,
properties_.GetLeScanResponse());
std::move(scan_response), properties_.GetLeAddress(), packet.GetSourceAddress());
std::vector<std::shared_ptr<PhyLayer>> le_phys = phy_layers_[Phy::Type::LOW_ENERGY];
for (auto phy : le_phys) {
- LOG_INFO(LOG_TAG, "Sending a Scan Response on a Phy");
phy->Send(to_send);
}
}