1 // Copyright 2023 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 15 #pragma once 16 #include "pw_bluetooth_sapphire/internal/host/common/byte_buffer.h" 17 #include "pw_bluetooth_sapphire/internal/host/l2cap/pdu.h" 18 19 namespace bt::l2cap::internal { 20 21 // The interface between a Channel, and the module implementing the 22 // mode-specific receive logic. The primary purpose of an RxEngine is to 23 // transform PDUs into SDUs. See Bluetooth Core Spec v5.0, Volume 3, Part A, 24 // Sec 2.4, "Modes of Operation" for more information about the possible modes. 25 class RxEngine { 26 public: 27 RxEngine() = default; 28 virtual ~RxEngine() = default; 29 30 // Consumes a PDU and returns a buffer containing the resulting SDU. Returns 31 // nullptr if no SDU was produced. 32 // 33 // Notes: 34 // * Callers should not interpret a nullptr as an error, as there are many 35 // valid conditions under which a PDU does not yield an SDU. 36 // * The caller must ensure that |pdu.is_valid() == true|. 37 virtual ByteBufferPtr ProcessPdu(PDU pdu) = 0; 38 39 private: 40 BT_DISALLOW_COPY_AND_ASSIGN_ALLOW_MOVE(RxEngine); 41 }; 42 43 } // namespace bt::l2cap::internal 44