summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Lilleengen <lulf@redhat.com>2022-05-16 19:49:13 +0200
committerGitHub <noreply@github.com>2022-05-16 19:49:13 +0200
commit91a59a14083bf32baf2af64c4ebf368f937f7799 (patch)
tree356a99673fbf0988cc4d1483e9d4009aceb17f26
parent14eae6c04fcb9081532300cdc7b4d2904b329f0f (diff)
parent18688ae733d2e204bb0c5a810751fda07b94d443 (diff)
downloadnrf-softdevice-91a59a14083bf32baf2af64c4ebf368f937f7799.zip
Merge pull request #111 from bobmcwhirter/write_without_response
Add support for `write_without_response` on server characteristics.
-rw-r--r--nrf-softdevice-macro/src/lib.rs6
-rw-r--r--nrf-softdevice/src/ble/gatt_server.rs4
2 files changed, 9 insertions, 1 deletions
diff --git a/nrf-softdevice-macro/src/lib.rs b/nrf-softdevice-macro/src/lib.rs
index 3a73263..b0382d6 100644
--- a/nrf-softdevice-macro/src/lib.rs
+++ b/nrf-softdevice-macro/src/lib.rs
@@ -25,6 +25,8 @@ struct CharacteristicArgs {
#[darling(default)]
write: bool,
#[darling(default)]
+ write_without_response: bool,
+ #[darling(default)]
notify: bool,
#[darling(default)]
indicate: bool,
@@ -221,6 +223,7 @@ pub fn gatt_service(args: TokenStream, item: TokenStream) -> TokenStream {
let uuid = ch.args.uuid;
let read = ch.args.read;
let write = ch.args.write;
+ let write_without_response = ch.args.write_without_response;
let notify = ch.args.notify;
let indicate = ch.args.indicate;
let ty = &ch.ty;
@@ -240,6 +243,7 @@ pub fn gatt_service(args: TokenStream, item: TokenStream) -> TokenStream {
uuid: #uuid,
can_read: #read,
can_write: #write,
+ can_write_without_response: #write_without_response,
can_notify: #notify,
can_indicate: #indicate,
max_len: #ty_as_val::MAX_SIZE as _,
@@ -281,7 +285,7 @@ pub fn gatt_service(args: TokenStream, item: TokenStream) -> TokenStream {
));
}
- if write {
+ if write || write_without_response {
let case_write = format_ident!("{}Write", name_pascal);
code_event_enum.extend(quote_spanned!(ch.span=>
#case_write(#ty),
diff --git a/nrf-softdevice/src/ble/gatt_server.rs b/nrf-softdevice/src/ble/gatt_server.rs
index 6c7eb8c..398f88d 100644
--- a/nrf-softdevice/src/ble/gatt_server.rs
+++ b/nrf-softdevice/src/ble/gatt_server.rs
@@ -15,6 +15,7 @@ pub struct Characteristic {
pub uuid: Uuid,
pub can_read: bool,
pub can_write: bool,
+ pub can_write_without_response: bool,
pub can_notify: bool,
pub can_indicate: bool,
pub max_len: usize,
@@ -107,6 +108,9 @@ pub fn register_service<S: Service>(_sd: &Softdevice) -> Result<S, RegisterError
let mut char_md: raw::ble_gatts_char_md_t = unsafe { mem::zeroed() };
char_md.char_props.set_read(char.can_read as u8);
char_md.char_props.set_write(char.can_write as u8);
+ char_md
+ .char_props
+ .set_write_wo_resp(char.can_write_without_response as u8);
char_md.char_props.set_notify(char.can_notify as u8);
char_md.char_props.set_indicate(char.can_indicate as u8);
char_md.p_cccd_md = &mut cccd_attr_md;