Nordi c nrf52: Уведомления сервера GATT не получены - PullRequest
1 голос
/ 04 февраля 2020

Я нахожусь в процессе разработки устройства, которое будет работать в качестве сервера GATT с потоковой передачей по пяти характеристикам со скоростью примерно 33 Ббит / с. Я установил службу GATT и настроил свои характеристики, и, хотя их можно читать, уведомления не отправляются подключенным клиентам.

Я создал собственный класс для своей службы - сводку определение следующее.

public:
    GattService() : 
        _raw_char(
            "236fd558-ed37-4d21-a791-2119aede27bb",0,
            sizeof(Payload),
            sizeof(Payload),
            (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ) ,
            NULL,
            0,
            false),
        _server(NULL),
        _ble(NULL),
        _event_queue(NULL),
        _gatt_service(
            "4f815c30-e3ff-4c1a-a81d-339698ced987",
             _raw_characteristic,
            1
         )

    void start(BLE &ble_interface, events::EventQueue &event_queue)
    {

        _ble = &ble_interface;
        _server = &ble_interface.gattServer();
        _event_queue = &event_queue;

        _server->addService(_gatt_service);

        _server->onDataSent(as_cb(&Self::when_data_sent));
        _server->onDataRead(as_cb(&Self::when_data_read));

        _server->onUpdatesEnabled(as_cb(&Self::when_update_enabled));
        _server->onUpdatesDisabled(as_cb(&Self::when_update_disabled));
        _server->onConfirmationReceived(as_cb(&Self::when_confirmation_received));

    }

     void setValue(Payload payload){

        bool enabled = false;
        _server->areUpdatesEnabled(_raw_char, &enabled);
        if(enabled){
            _server->write(_raw_char.getValueHandle(), (uint8_t*)&payload, sizeof(payload), false);
        }
    }

private:
     GattCharacteristic _raw_char;
     GattService _gatt_service;
     GattServer* _server;
     BLE* _ble;
     events::EventQueue *_event_queue;

Благодаря отладке я знаю, что AttsHandleValueNtf () вызывается, как и ожидалось, но просто не отправляется уведомление, и клиенты не получают обновленное значение.

...