93 lines
3.2 KiB
C
93 lines
3.2 KiB
C
#pragma once
|
|
|
|
// This file is autogenerated by:
|
|
// cbindgen --config cbindgen.toml src/ffi.rs -o include/lmp.h
|
|
// Don't modify manually.
|
|
|
|
#include <stdint.h>
|
|
|
|
/// 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"
|