Hi Cristoph,
On Fri, Dec 14, 2018 at 04:34:05PM +0100, Christoph Jabs wrote:
> Hello mynewt devs,
>
> I have a question regarding the mynewt-NimBLE stack.
>
> Whilst working my way through the code of the stack, trying to understand
> the structure of it and how to use it, I came accross the functions defined
> in nimble/host/include/host/ble_gatt.h for initiating GATT procedures. I
> realized that the functions are all named ble_gatts or ble_gattc (and are
> devided into two corresponding source files ble_gattc.c and ble_gatts.c)
> and I assume this devides the functions in server or client side
> functionality.
All correct.
> However, a four functions seem to break that system. These are the
> functions for sending notifications or indications to connections. My
> understanding is that the BLE peripheral (the GATT server) sends
> notifications to the BLE central (the GATT client). This seems to match the
> fact that the functions for notifying and indicating are being called in
> ble_gatts_tx_notifications. Why then are the notification and indication
> functions labeled gattc?
>
> Feel free to correct me if i'm missing something or if I completely
> misunderstand the things these functions do. From my perspective this seems
> just a bit confusing.
I agree that it is confusing. Notifications and indications are
peripheral-side (server) procedures, so it is reasonable to look in
`ble_gatts.c` for their corresponding functions.
However, ignoring the Bluetooth spec for a bit, these procedures are
logically client-side operations. They are unsolicited, and in the case
of indications, the sender needs to listen for an acknowledgement.
These operations have a lot in common with central-initiated procedures,
and very little in common with the others. As such, the code
implementing these procedures makes use of functions and data structures
that are private (`static`) to the `ble_gattc.c` file, and as a
consequence, these public functions must also go in this file. And
since the functions are in this file, well... they are named with this
file's prefix :).
I'm not sure if this was the best approach. It is too late to rename
the functions now (though I suppose we could add some `ble_gatts_...`
aliases). At the time, I convinced myself that the naming was OK,
because "client" and "server" are general descriptions of the
functionality, and not directly derived from the spec.
Chris