Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2014 Google, Inc.
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 #pragma once
     20 
     21 #include "osi/include/allocator.h"
     22 #include "bt_types.h"
     23 #include "hci_layer.h"
     24 
     25 typedef void (*transmit_finished_cb)(BT_HDR *packet, bool all_fragments_sent);
     26 typedef void (*packet_reassembled_cb)(BT_HDR *packet);
     27 typedef void (*packet_fragmented_cb)(BT_HDR *packet, bool send_transmit_finished);
     28 
     29 typedef struct {
     30   // Called for every packet fragment.
     31   packet_fragmented_cb fragmented;
     32 
     33   // Called for every completely reassembled packet.
     34   packet_reassembled_cb reassembled;
     35 
     36   // Called when the fragmenter finishes sending all requested fragments,
     37   // but the packet has not been entirely sent.
     38   transmit_finished_cb transmit_finished;
     39 } packet_fragmenter_callbacks_t;
     40 
     41 typedef struct packet_fragmenter_t {
     42   // Initialize the fragmenter, specifying the |result_callbacks|.
     43   void (*init)(const packet_fragmenter_callbacks_t *result_callbacks);
     44 
     45   // Release all resources associated with the fragmenter.
     46   void (*cleanup)(void);
     47 
     48   // Fragments |packet| if necessary and hands off everything to the fragmented callback.
     49   void (*fragment_and_dispatch)(BT_HDR *packet);
     50   // If |packet| is a complete packet, forwards to the reassembled callback. Otherwise
     51   // holds onto it until all fragments arrive, at which point the reassembled callback is called
     52   // with the reassembled data.
     53   void (*reassemble_and_dispatch)(BT_HDR *packet);
     54 } packet_fragmenter_t;
     55 
     56 const packet_fragmenter_t *packet_fragmenter_get_interface();
     57 
     58 const packet_fragmenter_t *packet_fragmenter_get_test_interface(
     59     const controller_t *controller_interface,
     60     const allocator_t *buffer_allocator_interface);
     61