diff options
author | Albert Skog <mail@albertskog.se> | 2021-09-30 15:07:45 +0200 |
---|---|---|
committer | Albert Skog <mail@albertskog.se> | 2021-09-30 15:12:05 +0200 |
commit | 3b869f8e25ace92d4444a4ae3351c9cb10691060 (patch) | |
tree | 1a87a33f24aacfdb61c357b39559b314aef8a37b /nrf-softdevice-macro | |
parent | 71b9e4b3c20ac4fab0d14c4541b365ed48aab58b (diff) | |
download | nrf-softdevice-3b869f8e25ace92d4444a4ae3351c9cb10691060.zip |
add support for indications
Diffstat (limited to 'nrf-softdevice-macro')
-rw-r--r-- | nrf-softdevice-macro/src/lib.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/nrf-softdevice-macro/src/lib.rs b/nrf-softdevice-macro/src/lib.rs index d2e4789..fad3e93 100644 --- a/nrf-softdevice-macro/src/lib.rs +++ b/nrf-softdevice-macro/src/lib.rs @@ -122,6 +122,7 @@ pub fn gatt_server(args: TokenStream, item: TokenStream) -> TokenStream { let get_fn = format_ident!("{}_get", ch.name); let set_fn = format_ident!("{}_set", ch.name); let notify_fn = format_ident!("{}_notify", ch.name); + let indicate_fn = format_ident!("{}_indicate", ch.name); let uuid = ch.args.uuid; let read = ch.args.read; @@ -226,6 +227,35 @@ pub fn gatt_server(args: TokenStream, item: TokenStream) -> TokenStream { } )); } + if indicate { + let case_enabled = format_ident!("{}IndicationsEnabled", name_pascal); + let case_disabled = format_ident!("{}IndicationsDisabled", name_pascal); + + code_impl.extend(quote_spanned!(ch.span=> + fn #indicate_fn( + &self, + conn: &#ble::Connection, + val: #ty, + ) -> Result<(), #ble::gatt_server::IndicateValueError> { + let buf = #ty_as_val::to_gatt(&val); + #ble::gatt_server::indicate_value(conn, self.#value_handle, buf) + } + )); + + code_event_enum.extend(quote_spanned!(ch.span=> + #case_enabled, + #case_disabled, + )); + code_on_write.extend(quote_spanned!(ch.span=> + if handle == self.#cccd_handle { + if data.len() != 0 && data[0] & 0x01 != 0 { + return Some(#event_enum_name::#case_enabled); + } else { + return Some(#event_enum_name::#case_disabled); + } + } + )); + } } let uuid = args.uuid; |