1 #pragma once 2 3 // This file is autogenerated by: 4 // cbindgen --config cbindgen.toml src/ffi.rs -o include/lmp.h 5 // Don't modify manually. 6 7 #include <stdint.h> 8 9 /// Link Manager callbacks 10 struct LinkManagerOps { 11 void* user_pointer; 12 uint16_t (*get_handle)(void* user, const uint8_t (*address)[6]); 13 void (*get_address)(void* user, uint16_t handle, uint8_t (*result)[6]); 14 uint64_t (*extended_features)(void* user, uint8_t features_page); 15 void (*send_hci_event)(void* user, const uint8_t* data, uintptr_t len); 16 void (*send_lmp_packet)(void* user, const uint8_t (*to)[6], 17 const uint8_t* data, uintptr_t len); 18 }; 19 20 extern "C" { 21 22 /// Create a new link manager instance 23 /// # Arguments 24 /// * `ops` - Function callbacks required by the link manager 25 const LinkManager* link_manager_create(LinkManagerOps ops); 26 27 /// Register a new link with a peer inside the link manager 28 /// # Arguments 29 /// * `lm` - link manager pointer 30 /// * `peer` - peer address as array of 6 bytes 31 /// # Safety 32 /// - This should be called from the thread of creation 33 /// - `lm` must be a valid pointer 34 /// - `peer` must be valid for reads for 6 bytes 35 bool link_manager_add_link(const LinkManager* lm, const uint8_t (*peer)[6]); 36 37 /// Unregister a link with a peer inside the link manager 38 /// Returns true if successful 39 /// # Arguments 40 /// * `lm` - link manager pointer 41 /// * `peer` - peer address as array of 6 bytes 42 /// # Safety 43 /// - This should be called from the thread of creation 44 /// - `lm` must be a valid pointer 45 /// - `peer` must be valid for reads for 6 bytes 46 bool link_manager_remove_link(const LinkManager* lm, const uint8_t (*peer)[6]); 47 48 /// Run the Link Manager procedures 49 /// # Arguments 50 /// * `lm` - link manager pointer 51 /// # Safety 52 /// - This should be called from the thread of creation 53 /// - `lm` must be a valid pointer 54 void link_manager_tick(const LinkManager* lm); 55 56 /// Process an HCI packet with the link manager 57 /// Returns true if successful 58 /// # Arguments 59 /// * `lm` - link manager pointer 60 /// * `data` - HCI packet data 61 /// * `len` - HCI packet len 62 /// # Safety 63 /// - This should be called from the thread of creation 64 /// - `lm` must be a valid pointer 65 /// - `data` must be valid for reads of len `len` 66 bool link_manager_ingest_hci(const LinkManager* lm, const uint8_t* data, 67 uintptr_t len); 68 69 /// Process an LMP packet from a peer with the link manager 70 /// Returns true if successful 71 /// # Arguments 72 /// * `lm` - link manager pointer 73 /// * `from` - Address of peer as array of 6 bytes 74 /// * `data` - HCI packet data 75 /// * `len` - HCI packet len 76 /// # Safety 77 /// - This should be called from the thread of creation 78 /// - `lm` must be a valid pointers 79 /// - `from` must be valid pointer for reads for 6 bytes 80 /// - `data` must be valid for reads of len `len` 81 bool link_manager_ingest_lmp(const LinkManager* lm, const uint8_t (*from)[6], 82 const uint8_t* data, uintptr_t len); 83 84 /// Deallocate the link manager instance 85 /// # Arguments 86 /// * `lm` - link manager pointer 87 /// # Safety 88 /// - This should be called from the thread of creation 89 /// - `lm` must be a valid pointers and must not be reused afterwards 90 void link_manager_destroy(const LinkManager* lm); 91 92 } // extern "C" 93