1*cf78ab8cSAndroid Build Coastguard Worker // Copyright 2023 The Android Open Source Project
2*cf78ab8cSAndroid Build Coastguard Worker //
3*cf78ab8cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*cf78ab8cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*cf78ab8cSAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*cf78ab8cSAndroid Build Coastguard Worker //
7*cf78ab8cSAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0
8*cf78ab8cSAndroid Build Coastguard Worker //
9*cf78ab8cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*cf78ab8cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*cf78ab8cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cf78ab8cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*cf78ab8cSAndroid Build Coastguard Worker // limitations under the License.
14*cf78ab8cSAndroid Build Coastguard Worker
15*cf78ab8cSAndroid Build Coastguard Worker #include "hci/rust_device.h"
16*cf78ab8cSAndroid Build Coastguard Worker
17*cf78ab8cSAndroid Build Coastguard Worker #include <cstdint>
18*cf78ab8cSAndroid Build Coastguard Worker
19*cf78ab8cSAndroid Build Coastguard Worker #include "netsim-daemon/src/ffi.rs.h"
20*cf78ab8cSAndroid Build Coastguard Worker #include "packets/link_layer_packets.h"
21*cf78ab8cSAndroid Build Coastguard Worker #include "phy.h"
22*cf78ab8cSAndroid Build Coastguard Worker #include "rust/cxx.h"
23*cf78ab8cSAndroid Build Coastguard Worker
24*cf78ab8cSAndroid Build Coastguard Worker namespace netsim::hci::facade {
Tick()25*cf78ab8cSAndroid Build Coastguard Worker void RustDevice::Tick() { ::netsim::hci::facade::Tick(*callbacks_); }
26*cf78ab8cSAndroid Build Coastguard Worker
ReceiveLinkLayerPacket(::model::packets::LinkLayerPacketView packet,rootcanal::Phy::Type type,int8_t rssi)27*cf78ab8cSAndroid Build Coastguard Worker void RustDevice::ReceiveLinkLayerPacket(
28*cf78ab8cSAndroid Build Coastguard Worker ::model::packets::LinkLayerPacketView packet, rootcanal::Phy::Type type,
29*cf78ab8cSAndroid Build Coastguard Worker int8_t rssi) {
30*cf78ab8cSAndroid Build Coastguard Worker auto packet_vec = packet.bytes().bytes();
31*cf78ab8cSAndroid Build Coastguard Worker auto slice = rust::Slice<const uint8_t>(packet_vec.data(), packet_vec.size());
32*cf78ab8cSAndroid Build Coastguard Worker
33*cf78ab8cSAndroid Build Coastguard Worker ::netsim::hci::facade::ReceiveLinkLayerPacket(
34*cf78ab8cSAndroid Build Coastguard Worker *callbacks_, packet.GetSourceAddress().ToString(),
35*cf78ab8cSAndroid Build Coastguard Worker packet.GetDestinationAddress().ToString(),
36*cf78ab8cSAndroid Build Coastguard Worker static_cast<int8_t>(packet.GetType()), slice);
37*cf78ab8cSAndroid Build Coastguard Worker }
38*cf78ab8cSAndroid Build Coastguard Worker
SendLinkLayerLePacket(const rust::Slice<const uint8_t> packet,int8_t tx_power) const39*cf78ab8cSAndroid Build Coastguard Worker void RustBluetoothChip::SendLinkLayerLePacket(
40*cf78ab8cSAndroid Build Coastguard Worker const rust::Slice<const uint8_t> packet, int8_t tx_power) const {
41*cf78ab8cSAndroid Build Coastguard Worker std::vector<uint8_t> buffer(packet.begin(), packet.end());
42*cf78ab8cSAndroid Build Coastguard Worker rust_device->SendLinkLayerPacket(buffer, rootcanal::Phy::Type::LOW_ENERGY,
43*cf78ab8cSAndroid Build Coastguard Worker tx_power);
44*cf78ab8cSAndroid Build Coastguard Worker }
45*cf78ab8cSAndroid Build Coastguard Worker } // namespace netsim::hci::facade
46