#pragma once // This file is autogenerated by: // cbindgen --config cbindgen.toml src/ffi.rs -o include/lmp.h // Don't modify manually. #include /// Link Manager callbacks struct LinkManagerOps { void* user_pointer; uint16_t (*get_handle)(void* user, const uint8_t (*address)[6]); void (*get_address)(void* user, uint16_t handle, uint8_t (*result)[6]); uint64_t (*extended_features)(void* user, uint8_t features_page); void (*send_hci_event)(void* user, const uint8_t* data, uintptr_t len); void (*send_lmp_packet)(void* user, const uint8_t (*to)[6], const uint8_t* data, uintptr_t len); }; extern "C" { /// Create a new link manager instance /// # Arguments /// * `ops` - Function callbacks required by the link manager const LinkManager* link_manager_create(LinkManagerOps ops); /// Register a new link with a peer inside the link manager /// # Arguments /// * `lm` - link manager pointer /// * `peer` - peer address as array of 6 bytes /// # Safety /// - This should be called from the thread of creation /// - `lm` must be a valid pointer /// - `peer` must be valid for reads for 6 bytes bool link_manager_add_link(const LinkManager* lm, const uint8_t (*peer)[6]); /// Unregister a link with a peer inside the link manager /// Returns true if successful /// # Arguments /// * `lm` - link manager pointer /// * `peer` - peer address as array of 6 bytes /// # Safety /// - This should be called from the thread of creation /// - `lm` must be a valid pointer /// - `peer` must be valid for reads for 6 bytes bool link_manager_remove_link(const LinkManager* lm, const uint8_t (*peer)[6]); /// Run the Link Manager procedures /// # Arguments /// * `lm` - link manager pointer /// # Safety /// - This should be called from the thread of creation /// - `lm` must be a valid pointer void link_manager_tick(const LinkManager* lm); /// Process an HCI packet with the link manager /// Returns true if successful /// # Arguments /// * `lm` - link manager pointer /// * `data` - HCI packet data /// * `len` - HCI packet len /// # Safety /// - This should be called from the thread of creation /// - `lm` must be a valid pointer /// - `data` must be valid for reads of len `len` bool link_manager_ingest_hci(const LinkManager* lm, const uint8_t* data, uintptr_t len); /// Process an LMP packet from a peer with the link manager /// Returns true if successful /// # Arguments /// * `lm` - link manager pointer /// * `from` - Address of peer as array of 6 bytes /// * `data` - HCI packet data /// * `len` - HCI packet len /// # Safety /// - This should be called from the thread of creation /// - `lm` must be a valid pointers /// - `from` must be valid pointer for reads for 6 bytes /// - `data` must be valid for reads of len `len` bool link_manager_ingest_lmp(const LinkManager* lm, const uint8_t (*from)[6], const uint8_t* data, uintptr_t len); /// Deallocate the link manager instance /// # Arguments /// * `lm` - link manager pointer /// # Safety /// - This should be called from the thread of creation /// - `lm` must be a valid pointers and must not be reused afterwards void link_manager_destroy(const LinkManager* lm); } // extern "C"