BLE Characteristic Read By Connected Client

Hello,

I have a BLE peripheral device that becomes the server once a connection is established. The BLE services and characteristics are all custom, I will include the defines below as a reference. What I am having a problem with is the data sent when a read characteristic is done by the connected client. Where is this data retrieved from on the peripheral/server side? Basically, where is the local database storage on the peripheral that is referenced by the connected client?

I was assuming I could just load the correct data in the buffer during a specified read callback, but that doesn't seem to be working correctly.

Below are the services and characteristics being used, the one I have a problem currently using is:  BT_UUID_MOBILE_APP_GENERIC_UTILITY which has both BT_GATT_CHRC_READ and BT_GATT_CHRC_WRITE_WITHOUT_RESP characteristic capabilities.

// Custom Services and Characteristics Declarations
BT_GATT_SERVICE_DEFINE(mobile_app_svc,
    BT_GATT_PRIMARY_SERVICE(BT_UUID_MOBILE_APP_SERVICE),
    BT_GATT_CHARACTERISTIC(BT_UUID_MOBILE_APP_DATA_OUT,
                   BT_GATT_CHRC_NOTIFY,
                   BT_GATT_PERM_NONE,
                   NULL, NULL, NULL),
    BT_GATT_CCC(data_out_cfg_changed_callback, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),
    BT_GATT_CHARACTERISTIC(BT_UUID_MOBILE_APP_DATA_IN,
                   BT_GATT_CHRC_WRITE_WITHOUT_RESP,
                   BT_GATT_PERM_WRITE,
                   NULL, write_data_in_callback, NULL),
    BT_GATT_CHARACTERISTIC(BT_UUID_MOBILE_APP_GENERIC_UTILITY,
                   BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE_WITHOUT_RESP,
                   BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
                   read_generic_utility_callback, write_generic_utility_callback, NULL),
    BT_GATT_CHARACTERISTIC(BT_UUID_MOBILE_APP_DATA_OUT_UTILITY,
                   BT_GATT_CHRC_NOTIFY,
                   BT_GATT_PERM_NONE,
                   NULL, NULL, NULL),
    BT_GATT_CCC(data_out_utility_cfg_changed_callback, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),
    BT_GATT_CHARACTERISTIC(BT_UUID_MOBILE_APP_DATA_IN_UTILITY,
                   BT_GATT_CHRC_WRITE_WITHOUT_RESP,
                   BT_GATT_PERM_WRITE,
                   NULL, write_data_in_utility_callback, NULL),
);

BT_GATT_SERVICE_DEFINE(pairing_svc,
    BT_GATT_PRIMARY_SERVICE(BT_UUID_PAIRING_SERVICE),
    BT_GATT_CHARACTERISTIC(BT_UUID_PAIRING_UTILITY,
                   BT_GATT_CHRC_READ,
                   BT_GATT_PERM_READ,
                   NULL, NULL, NULL),
);
Let me know if you require more information, I realize this is a unique design therefore giving you code to use on a development kit is not so simple.
Best regards,
Pam
Related