I'm working with newtmgr over BLE based on the newtmgr lib in the master
branch of apache-mynewt-core, which currently has the following structure:
Service UUID: 8D53DC1D-1DB7-4CD3-868B-8A527460AA84
Characteristic UUID: DA2E7828-FBCE-4E01-AE9E-261174997C48
The source code has this explanatory comment on the service:
> The "newtmgr" service consists of one write no-rsp characteristic for
> newtmgr requests: a single-byte characteristic that can only accepts
> write-without-response commands. The contents of each write command
> contains an NMP request. NMP responses are sent back in the form of
> unsolicited notifications from the same characteristic.
I remember some discussions previously about unsolicited notifies and
whether this was or wasn't supported in the BLE spec (I believe between
Carles Cufi from Nordic and I believe Will and/or Chris at Runtime?),
but given the uncertainty around this I wonder if it wouldn't be better
to adjust the newtmgr service definition to have two characteristics
similar to the way 'nus' (Nordic UART Service) works:
- One TXD or 'Request' characteristic to write commands to, which can
reuse the existing characteristic as-is
- A new RXD or 'Response' characteristic with notify enabled, which
would also allow you to send multiple data chunks since each packet will
cause a new notify event on the Central, making it relatively easy to
manage rebuilding packets.
I've been doing some initial tests with the netmgr service as is and
many apps don't seem to like the unsolicited notifications even if they
can be made to work. Two separate characteristics would probably ensure
everything is handled unambiguously on any platform, but I'm curious to
hear other people's thoughts?
Kevin