I'm developing an audio application which requires Bluetooth connectivity, using an nRF52833. Bluetooth will only be used for control, not for streaming audio in any way. We have a dedicated audio DSP, which allows certain parameters to be read/written via SPI. I want to create a GATT characteristic for every DSP parameter which should be controllable by the user.
After following the GATT tutorials I've noticed that the SoftDevice API assumes that all characteristics should have a block of memory attached to them, either in the user application or in the SoftDevice stack. Reads and writes will then automatically directed to this block of memory.
This doesn't quite suite my needs, because in my case, I want to create a GATT interface to the DSP, which is behind the SPI bus. It does not make sense to have all the DSP values in my local RAM too, then I would need to make sure they're always in sync with the DSP. I was expecting something like a separate read/write callback per characteristic, so the operations could be implemented by means of SPI reads/writes instead. I noticed that the Zephyr GATT API uses this approach.
Is this possible in any way using the SoftDevice, or should I switch my project from the nRF5 SDK to the nRF Connect SDK with Zephyr instead, to accomplish this?