1 //! Shared data-types and utility methods go here.
2 
3 pub mod address;
4 mod ffi;
5 pub mod shared_box;
6 pub mod shared_mutex;
7 pub mod uuid;
8 
9 use std::{pin::Pin, rc::Rc, thread};
10 
11 use cxx::UniquePtr;
12 
13 use crate::{
14     gatt::ffi::{AttTransportImpl, GattCallbacksImpl},
15     GlobalModuleRegistry, MainThreadTxMessage, GLOBAL_MODULE_REGISTRY,
16 };
17 
18 use self::ffi::{future_ready, Future, GattServerCallbacks};
19 
start( gatt_server_callbacks: UniquePtr<GattServerCallbacks>, on_started: Pin<&'static mut Future>, )20 fn start(
21     gatt_server_callbacks: UniquePtr<GattServerCallbacks>,
22     on_started: Pin<&'static mut Future>,
23 ) {
24     thread::spawn(move || {
25         GlobalModuleRegistry::start(
26             Rc::new(GattCallbacksImpl(gatt_server_callbacks)),
27             Rc::new(AttTransportImpl()),
28             || {
29                 future_ready(on_started);
30             },
31         );
32     });
33 }
34 
stop()35 fn stop() {
36     let _ = GLOBAL_MODULE_REGISTRY
37         .try_lock()
38         .unwrap()
39         .as_ref()
40         .map(|registry| registry.task_tx.send(MainThreadTxMessage::Stop));
41 }
42