Характеристика сервера Bluetooth LE Gatt всегда равна NULL в Tizen 3.0.0.2 - PullRequest
0 голосов
/ 18 мая 2018

В настоящее время я работаю над проектом, который использует Samsung Galaxy Gear S3 в качестве сервера с низким энергопотреблением Bluetooth для обеспечения обслуживания клиентов.Проблема в том, что после того, как я собрал характеристику и дескриптор, добавил их к другому и к сервису, зарегистрировал сервис на сервере и запустил сервер, приложение BlueScanner на моем iPhone просто показывает, что мои характеристика и дескриптор не имеют значения,но есть uuid.Вот мой код:

const char *service_uuid = "ADE3D529-C784-4F63-A987-EB69F70EE816";
bt_gatt_service_type_e type = BT_GATT_SERVICE_TYPE_PRIMARY;
//server handle
static bt_gatt_server_h gattServer = NULL;

//service handle
static bt_gatt_h gattSvc = NULL;

//Characteristic handle
bt_gatt_h gattChara = NULL;
const char *charaUuid = "AD7B334F-4637-4B86-90B6-9D787F03D218";
//const char *charaValue = "myCharacteristic";

//descriptor handle
static bt_gatt_h gattDescriptor = NULL;
const char *DescUuid = "0x1002";
const char *DescValue = "50";

void createService() {
dlog_print(DLOG_INFO, LOG_TAG, "Create Service");
int ret = bt_gatt_server_initialize();
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG, "Init GATT server failed. err = %s",
            err);
}

if (!gattServer) {
//      gattServer not exist, create server
    ret = bt_gatt_server_create(&gattServer);
    if (ret != BT_ERROR_NONE) {
        char* err;
        err = get_error_message(ret);
        dlog_print(DLOG_ERROR, LOG_TAG,
                "Create GATT server failed. err = %s", err);
    } else {
        dlog_print(DLOG_INFO, LOG_TAG, "Create GATT server Succeed");
    }
}

ret = bt_gatt_service_create(service_uuid, type, &gattSvc);
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG, "Create GATT service failed. err = %s",
            err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG, "Create GATT service Succeed");
}

ret = bt_gatt_characteristic_create(charaUuid,
        BT_GATT_PERMISSION_READ | BT_GATT_PERMISSION_WRITE,
        BT_GATT_PROPERTY_INDICATE | BT_GATT_PROPERTY_READ, charaValue,
        LE_INITIAL_BUF_SIZE, &gattChara);
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG,
            "create characteristic  failed. err = %s", err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG, "create characteristic Succeed");
}

ret = bt_gatt_server_set_read_value_requested_cb(gattChara,
        __bt_gatt_server_read_value_requested_cb, NULL);
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG, "create read request failed. err = %s",
            err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG, "create read request Succeed");
}

ret = bt_gatt_descriptor_create(DescUuid,
        BT_GATT_PERMISSION_READ | BT_GATT_PERMISSION_WRITE, DescValue,
        LE_INITIAL_BUF_SIZE, &gattDescriptor);
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG, "create descriptor failed. err = %s",
            err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG, "create descriptor server Succeed");
}

ret = bt_gatt_characteristic_add_descriptor(gattChara, gattDescriptor);
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG,
            "add descriptor to characteristic failed. err = %s", err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG,
            "add descriptor to characteristic Succeed");
}
ret = bt_gatt_service_add_characteristic(gattSvc, gattChara);
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG,
            "add characteristic to service failed. err = %s", err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG, "add characteristic to service Succeed");
}

ret = bt_gatt_server_register_service(gattServer, gattSvc);
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG,
            "register GATT service failed. err = %s", err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG, "register GATT service Succeed");
}

ret = bt_gatt_server_start();
if (ret != BT_ERROR_NONE) {
    char* err;
    err = get_error_message(ret);
    dlog_print(DLOG_ERROR, LOG_TAG, "start GATT server failed. err = %s",
            err);
} else {
    dlog_print(DLOG_INFO, LOG_TAG, "start GATT server Succeed");
}
}

Заранее спасибо!

1 Ответ

0 голосов
/ 21 мая 2018

Я исправил проблему в конце концов.Оказывается, функция "bt_gatt_server_send_response" должна быть вызвана в "__bt_gatt_server_read_value_requested_cb".Я предполагаю, что клиент читает значение каждый раз, и поскольку функция не определена, он не будет ничего возвращать, поэтому значение сервера было установлено в NULL.

...