• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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