Loading system/gd/l2cap/internal/enhanced_retransmission_mode_channel_data_controller.cc +845 −2 File changed.Preview size limit exceeded, changes collapsed. Show changes system/gd/l2cap/internal/enhanced_retransmission_mode_channel_data_controller.h +53 −0 Original line number Diff line number Diff line Loading @@ -43,16 +43,69 @@ class ErtmController : public DataController { using UpperQueueDownEnd = common::BidiQueueEnd<UpperEnqueue, UpperDequeue>; ErtmController(Cid cid, Cid remote_cid, UpperQueueDownEnd* channel_queue_end, os::Handler* handler, Scheduler* scheduler); ~ErtmController(); // Segmentation is handled here void OnSdu(std::unique_ptr<packet::BasePacketBuilder> sdu) override; void OnPdu(BasicFrameView pdu) override; std::unique_ptr<BasicFrameBuilder> GetNextPacket() override; private: [[maybe_unused]] Cid cid_; [[maybe_unused]] Cid remote_cid_; [[maybe_unused]] os::EnqueueBuffer<UpperEnqueue> enqueue_buffer_; [[maybe_unused]] os::Handler* handler_; std::queue<std::unique_ptr<BasicFrameBuilder>> pdu_queue_; [[maybe_unused]] Scheduler* scheduler_; // TODO: Support FCS [[maybe_unused]] FcsType fcs_type_ = FcsType::NO_FCS; class PacketViewForReassembly : public packet::PacketView<kLittleEndian> { public: PacketViewForReassembly(const PacketView& packetView) : PacketView(packetView) {} PacketViewForReassembly(nullptr_t) : PacketView(nullptr) {} void AppendPacketView(packet::PacketView<kLittleEndian> to_append) { Append(to_append); } }; class CopyablePacketBuilder : public packet::BasePacketBuilder { public: CopyablePacketBuilder(std::unique_ptr<packet::BasePacketBuilder> builder) : builder_(builder.release()) {} void Serialize(BitInserter& it) const override; size_t size() const override; std::unique_ptr<packet::BasePacketBuilder> Create(); private: std::shared_ptr<packet::BasePacketBuilder> builder_; }; PacketViewForReassembly reassembly_stage_{nullptr}; SegmentationAndReassembly sar_state_ = SegmentationAndReassembly::END; void stage_for_reassembly(SegmentationAndReassembly sar, const packet::PacketView<kLittleEndian>& payload); void send_pdu(std::unique_ptr<BasicFrameBuilder> pdu); void close_channel(); // Configuration options // TODO: Configure these number [[maybe_unused]] uint16_t local_tx_window_ = 10; [[maybe_unused]] uint16_t local_max_transmit_ = 20; [[maybe_unused]] uint16_t local_retransmit_timeout_ms_ = 2000; [[maybe_unused]] uint16_t local_monitor_timeout_ms_ = 12000; [[maybe_unused]] uint16_t local_mps_ = 1010; [[maybe_unused]] uint16_t remote_tx_window_ = 10; [[maybe_unused]] uint16_t remote_max_transmit_ = 20; [[maybe_unused]] uint16_t remote_retransmit_timeout_ms_ = 2000; [[maybe_unused]] uint16_t remote_monitor_timeout_ms_ = 12000; [[maybe_unused]] uint16_t remote_mps_ = 1010; struct impl; std::unique_ptr<impl> pimpl_; }; } // namespace internal Loading Loading
system/gd/l2cap/internal/enhanced_retransmission_mode_channel_data_controller.cc +845 −2 File changed.Preview size limit exceeded, changes collapsed. Show changes
system/gd/l2cap/internal/enhanced_retransmission_mode_channel_data_controller.h +53 −0 Original line number Diff line number Diff line Loading @@ -43,16 +43,69 @@ class ErtmController : public DataController { using UpperQueueDownEnd = common::BidiQueueEnd<UpperEnqueue, UpperDequeue>; ErtmController(Cid cid, Cid remote_cid, UpperQueueDownEnd* channel_queue_end, os::Handler* handler, Scheduler* scheduler); ~ErtmController(); // Segmentation is handled here void OnSdu(std::unique_ptr<packet::BasePacketBuilder> sdu) override; void OnPdu(BasicFrameView pdu) override; std::unique_ptr<BasicFrameBuilder> GetNextPacket() override; private: [[maybe_unused]] Cid cid_; [[maybe_unused]] Cid remote_cid_; [[maybe_unused]] os::EnqueueBuffer<UpperEnqueue> enqueue_buffer_; [[maybe_unused]] os::Handler* handler_; std::queue<std::unique_ptr<BasicFrameBuilder>> pdu_queue_; [[maybe_unused]] Scheduler* scheduler_; // TODO: Support FCS [[maybe_unused]] FcsType fcs_type_ = FcsType::NO_FCS; class PacketViewForReassembly : public packet::PacketView<kLittleEndian> { public: PacketViewForReassembly(const PacketView& packetView) : PacketView(packetView) {} PacketViewForReassembly(nullptr_t) : PacketView(nullptr) {} void AppendPacketView(packet::PacketView<kLittleEndian> to_append) { Append(to_append); } }; class CopyablePacketBuilder : public packet::BasePacketBuilder { public: CopyablePacketBuilder(std::unique_ptr<packet::BasePacketBuilder> builder) : builder_(builder.release()) {} void Serialize(BitInserter& it) const override; size_t size() const override; std::unique_ptr<packet::BasePacketBuilder> Create(); private: std::shared_ptr<packet::BasePacketBuilder> builder_; }; PacketViewForReassembly reassembly_stage_{nullptr}; SegmentationAndReassembly sar_state_ = SegmentationAndReassembly::END; void stage_for_reassembly(SegmentationAndReassembly sar, const packet::PacketView<kLittleEndian>& payload); void send_pdu(std::unique_ptr<BasicFrameBuilder> pdu); void close_channel(); // Configuration options // TODO: Configure these number [[maybe_unused]] uint16_t local_tx_window_ = 10; [[maybe_unused]] uint16_t local_max_transmit_ = 20; [[maybe_unused]] uint16_t local_retransmit_timeout_ms_ = 2000; [[maybe_unused]] uint16_t local_monitor_timeout_ms_ = 12000; [[maybe_unused]] uint16_t local_mps_ = 1010; [[maybe_unused]] uint16_t remote_tx_window_ = 10; [[maybe_unused]] uint16_t remote_max_transmit_ = 20; [[maybe_unused]] uint16_t remote_retransmit_timeout_ms_ = 2000; [[maybe_unused]] uint16_t remote_monitor_timeout_ms_ = 12000; [[maybe_unused]] uint16_t remote_mps_ = 1010; struct impl; std::unique_ptr<impl> pimpl_; }; } // namespace internal Loading