Перегруженная функция BLE gattServer.write()

У меня проблема с попыткой обновить значение характеристики в пользовательской службе BLE, работающей на MCU с mbedOS v5.8.6. Я пытаюсь обновить значение этой характеристики значением датчика. См. функцию ниже:

void onDataReadCallback(const GattReadCallbackParams *eventDataP) {
    if (eventDataP->handle == dhtServicePtr->dataStream.getValueHandle()) {

        const uint8_t data = sensorData;

        BLE::Instance().gattServer().write(eventDataP->handle, &data, sizeof(data), false);   
    }
}

Я попытался явно указать правильный тип переменной (согласно справочной документации BLE gattServer) безрезультатно.

Точная ошибка, которую я получаю:

Error: No instance of overloaded function "GattServer::write" matches the argument list in "main.cpp", Line: 135, Col: 39

Я считаю, что делаю это правильно в соответствии с вышеупомянутой документацией. Итак, мой вопрос: где именно я ошибаюсь? Вполне возможно, что я только что совершил глупую ошибку!

Спасибо, Адам


person amitchone    schedule 11.07.2018    source источник
comment
Я думаю, что sizeof не вернет uint16_t, попробуйте преобразовать его в uint16_t, а затем проверьте. Поскольку сигнатура функции требует uint16_t   -  person yadhu    schedule 11.07.2018
comment
@yadhu Я пытался специально преобразовать sizeof(data) в uint16_t, но, к сожалению, получил ту же ошибку!   -  person amitchone    schedule 11.07.2018
comment
Я надеюсь, что мой ответ решит вашу проблему. Если да, то примите ответ.   -  person yadhu    schedule 11.07.2018


Ответы (1)


Вы пытаетесь отправить указатель на константу, хотя сигнатура функции требует обычного указателя. В приведенном ниже примере, когда значение const, компилятор выполнит ошибку.

#include <iostream>

    void test(int *ptr)
    {
        printf("%d",*ptr);
    }


    int main ()
    {
        //const int a = 10; //Gives error
        int a = 10;       //This works fine.

        test(&a);

        return 0;
    }
person yadhu    schedule 11.07.2018