1 /****************************************************************************** 2 * 3 * Copyright 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 "device/include/controller.h" 22 #include "hci_layer.h" 23 #include "osi/include/allocator.h" 24 #include "stack/include/bt_hdr.h" 25 26 typedef void (*transmit_finished_cb)(BT_HDR* packet, bool all_fragments_sent); 27 typedef void (*packet_reassembled_cb)(BT_HDR* packet); 28 typedef void (*packet_fragmented_cb)(BT_HDR* packet, 29 bool send_transmit_finished); 30 31 typedef struct { 32 // Called for every packet fragment. 33 packet_fragmented_cb fragmented; 34 35 // Called for every completely reassembled packet. 36 packet_reassembled_cb reassembled; 37 38 // Called when the fragmenter finishes sending all requested fragments, 39 // but the packet has not been entirely sent. 40 transmit_finished_cb transmit_finished; 41 } packet_fragmenter_callbacks_t; 42 43 typedef struct packet_fragmenter_t { 44 // Initialize the fragmenter, specifying the |result_callbacks|. 45 void (*init)(const packet_fragmenter_callbacks_t* result_callbacks); 46 47 // Release all resources associated with the fragmenter. 48 void (*cleanup)(void); 49 50 // Fragments |packet| if necessary and hands off everything to the fragmented 51 // callback. 52 void (*fragment_and_dispatch)(BT_HDR* packet); 53 // If |packet| is a complete packet, forwards to the reassembled callback. 54 // Otherwise 55 // holds onto it until all fragments arrive, at which point the reassembled 56 // callback is called 57 // with the reassembled data. 58 void (*reassemble_and_dispatch)(BT_HDR* packet); 59 } packet_fragmenter_t; 60 61 const packet_fragmenter_t* packet_fragmenter_get_interface(); 62 63 const packet_fragmenter_t* packet_fragmenter_get_test_interface( 64 const controller_t* controller_interface, 65 const allocator_t* buffer_allocator_interface); 66