Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a867c2bc authored by Andre Eisenbach's avatar Andre Eisenbach Committed by Matthew Xie
Browse files

LE: Add instance ID to descriptors (4/4)

If a remote devices offers multiple descriptors with the same UUID, the
instance ID is used to differentiate between them.

Change-Id: I176dcfe1dc582120173cf3bd2d4329d7d764e39a
parent 261e089a
Loading
Loading
Loading
Loading
+43 −36
Original line number Original line Diff line number Diff line
@@ -44,14 +44,14 @@
#define UUID_PARAMS(uuid_ptr) \
#define UUID_PARAMS(uuid_ptr) \
    uuid_lsb(uuid_ptr),  uuid_msb(uuid_ptr)
    uuid_lsb(uuid_ptr),  uuid_msb(uuid_ptr)


#define CHAR_ID_PARAMS(char_ptr) \
#define GATT_ID_PARAMS(attr_ptr) \
    char_ptr->inst_id, \
    attr_ptr->inst_id, \
    UUID_PARAMS((&char_ptr->uuid))
    UUID_PARAMS((&attr_ptr->uuid))


#define SRVC_ID_PARAMS(srvc_ptr) \
#define SRVC_ID_PARAMS(srvc_ptr) \
    (srvc_ptr->is_primary ? \
    (srvc_ptr->is_primary ? \
    BTGATT_SERVICE_TYPE_PRIMARY : BTGATT_SERVICE_TYPE_SECONDARY), \
    BTGATT_SERVICE_TYPE_PRIMARY : BTGATT_SERVICE_TYPE_SECONDARY), \
    CHAR_ID_PARAMS((&srvc_ptr->id))
    GATT_ID_PARAMS((&srvc_ptr->id))




static void set_uuid(uint8_t* uuid, jlong uuid_msb, jlong uuid_lsb)
static void set_uuid(uint8_t* uuid, jlong uuid_msb, jlong uuid_lsb)
@@ -273,24 +273,24 @@ void btgattc_search_result_cb(int conn_id, btgatt_srvc_id_t *srvc_id)
}
}


void btgattc_get_characteristic_cb(int conn_id, int status,
void btgattc_get_characteristic_cb(int conn_id, int status,
                btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
                btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id,
                int char_prop)
                int char_prop)
{
{
    CHECK_CALLBACK_ENV
    CHECK_CALLBACK_ENV
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetCharacteristic
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetCharacteristic
        , conn_id, status, SRVC_ID_PARAMS(srvc_id), CHAR_ID_PARAMS(char_id)
        , conn_id, status, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id)
        , char_prop);
        , char_prop);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
}
}


void btgattc_get_descriptor_cb(int conn_id, int status,
void btgattc_get_descriptor_cb(int conn_id, int status,
                btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id,
                btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id,
                bt_uuid_t *descr_id)
                btgatt_gatt_id_t *descr_id)
{
{
    CHECK_CALLBACK_ENV
    CHECK_CALLBACK_ENV
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetDescriptor
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetDescriptor
        , conn_id, status, SRVC_ID_PARAMS(srvc_id), CHAR_ID_PARAMS(char_id)
        , conn_id, status, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id)
        , UUID_PARAMS(descr_id));
        , GATT_ID_PARAMS(descr_id));
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
}
}


@@ -304,11 +304,11 @@ void btgattc_get_included_service_cb(int conn_id, int status,
}
}


void btgattc_register_for_notification_cb(int conn_id, int registered, int status,
void btgattc_register_for_notification_cb(int conn_id, int registered, int status,
                                          btgatt_srvc_id_t *srvc_id, btgatt_char_id_t *char_id)
                                          btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id)
{
{
    CHECK_CALLBACK_ENV
    CHECK_CALLBACK_ENV
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onRegisterForNotifications
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onRegisterForNotifications
        , conn_id, status, registered, SRVC_ID_PARAMS(srvc_id), CHAR_ID_PARAMS(char_id));
        , conn_id, status, registered, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id));
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
}
}


@@ -327,7 +327,7 @@ void btgattc_notify_cb(int conn_id, btgatt_notify_params_t *p_data)


    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotify
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotify
        , conn_id, address, SRVC_ID_PARAMS((&p_data->srvc_id))
        , conn_id, address, SRVC_ID_PARAMS((&p_data->srvc_id))
        , CHAR_ID_PARAMS((&p_data->char_id)), p_data->is_notify, jb);
        , GATT_ID_PARAMS((&p_data->char_id)), p_data->is_notify, jb);


    sCallbackEnv->DeleteLocalRef(address);
    sCallbackEnv->DeleteLocalRef(address);
    sCallbackEnv->DeleteLocalRef(jb);
    sCallbackEnv->DeleteLocalRef(jb);
@@ -352,7 +352,7 @@ void btgattc_read_characteristic_cb(int conn_id, int status, btgatt_read_params_


    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadCharacteristic
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadCharacteristic
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , CHAR_ID_PARAMS((&p_data->char_id)), p_data->value_type, jb);
        , GATT_ID_PARAMS((&p_data->char_id)), p_data->value_type, jb);
    sCallbackEnv->DeleteLocalRef(jb);
    sCallbackEnv->DeleteLocalRef(jb);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
}
}
@@ -362,7 +362,7 @@ void btgattc_write_characteristic_cb(int conn_id, int status, btgatt_write_param
    CHECK_CALLBACK_ENV
    CHECK_CALLBACK_ENV
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteCharacteristic
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteCharacteristic
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , CHAR_ID_PARAMS((&p_data->char_id)));
        , GATT_ID_PARAMS((&p_data->char_id)));
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
}
}


@@ -390,7 +390,7 @@ void btgattc_read_descriptor_cb(int conn_id, int status, btgatt_read_params_t *p


    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadDescriptor
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadDescriptor
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , CHAR_ID_PARAMS((&p_data->char_id)), UUID_PARAMS((&p_data->descr_id))
        , GATT_ID_PARAMS((&p_data->char_id)), GATT_ID_PARAMS((&p_data->descr_id))
        , p_data->value_type, jb);
        , p_data->value_type, jb);


    sCallbackEnv->DeleteLocalRef(jb);
    sCallbackEnv->DeleteLocalRef(jb);
@@ -402,7 +402,8 @@ void btgattc_write_descriptor_cb(int conn_id, int status, btgatt_write_params_t
    CHECK_CALLBACK_ENV
    CHECK_CALLBACK_ENV
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteDescriptor
    sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteDescriptor
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id))
        , CHAR_ID_PARAMS((&p_data->char_id)), UUID_PARAMS((&p_data->descr_id)));
        , GATT_ID_PARAMS((&p_data->char_id))
        , GATT_ID_PARAMS((&p_data->descr_id)));
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
    checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__);
}
}


@@ -645,11 +646,11 @@ static void classInitNative(JNIEnv* env, jclass clazz) {
    method_onExecuteCompleted = env->GetMethodID(clazz, "onExecuteCompleted",  "(II)V");
    method_onExecuteCompleted = env->GetMethodID(clazz, "onExecuteCompleted",  "(II)V");
    method_onSearchCompleted = env->GetMethodID(clazz, "onSearchCompleted",  "(II)V");
    method_onSearchCompleted = env->GetMethodID(clazz, "onSearchCompleted",  "(II)V");
    method_onSearchResult = env->GetMethodID(clazz, "onSearchResult", "(IIIJJ)V");
    method_onSearchResult = env->GetMethodID(clazz, "onSearchResult", "(IIIJJ)V");
    method_onReadDescriptor = env->GetMethodID(clazz, "onReadDescriptor", "(IIIIJJIJJJJI[B)V");
    method_onReadDescriptor = env->GetMethodID(clazz, "onReadDescriptor", "(IIIIJJIJJIJJI[B)V");
    method_onWriteDescriptor = env->GetMethodID(clazz, "onWriteDescriptor", "(IIIIJJIJJJJ)V");
    method_onWriteDescriptor = env->GetMethodID(clazz, "onWriteDescriptor", "(IIIIJJIJJIJJ)V");
    method_onNotify = env->GetMethodID(clazz, "onNotify", "(ILjava/lang/String;IIJJIJJZ[B)V");
    method_onNotify = env->GetMethodID(clazz, "onNotify", "(ILjava/lang/String;IIJJIJJZ[B)V");
    method_onGetCharacteristic = env->GetMethodID(clazz, "onGetCharacteristic", "(IIIIJJIJJI)V");
    method_onGetCharacteristic = env->GetMethodID(clazz, "onGetCharacteristic", "(IIIIJJIJJI)V");
    method_onGetDescriptor = env->GetMethodID(clazz, "onGetDescriptor", "(IIIIJJIJJJJ)V");
    method_onGetDescriptor = env->GetMethodID(clazz, "onGetDescriptor", "(IIIIJJIJJIJJ)V");
    method_onGetIncludedService = env->GetMethodID(clazz, "onGetIncludedService", "(IIIIJJIIJJ)V");
    method_onGetIncludedService = env->GetMethodID(clazz, "onGetIncludedService", "(IIIIJJIIJJ)V");
    method_onRegisterForNotifications = env->GetMethodID(clazz, "onRegisterForNotifications", "(IIIIIJJIJJ)V");
    method_onRegisterForNotifications = env->GetMethodID(clazz, "onRegisterForNotifications", "(IIIIIJJIJJ)V");
    method_onReadRemoteRssi = env->GetMethodID(clazz, "onReadRemoteRssi", "(ILjava/lang/String;II)V");
    method_onReadRemoteRssi = env->GetMethodID(clazz, "onReadRemoteRssi", "(ILjava/lang/String;II)V");
@@ -816,7 +817,7 @@ static void gattClientGetCharacteristicNative(JNIEnv* env, jobject object,


    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);


    btgatt_char_id_t char_id;
    btgatt_gatt_id_t char_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);


@@ -834,6 +835,7 @@ static void gattClientGetDescriptorNative(JNIEnv* env, jobject object,
    jlong service_id_uuid_lsb, jlong service_id_uuid_msb,
    jlong service_id_uuid_lsb, jlong service_id_uuid_msb,
    jint  char_id_inst_id,
    jint  char_id_inst_id,
    jlong char_id_uuid_lsb, jlong char_id_uuid_msb,
    jlong char_id_uuid_lsb, jlong char_id_uuid_msb,
    jint descr_id_inst_id,
    jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb)
    jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb)
{
{
    if (!sGattIf) return;
    if (!sGattIf) return;
@@ -843,12 +845,13 @@ static void gattClientGetDescriptorNative(JNIEnv* env, jobject object,
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);


    btgatt_char_id_t char_id;
    btgatt_gatt_id_t char_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);


    bt_uuid_t descr_id;
    btgatt_gatt_id_t descr_id;
    set_uuid(descr_id.uu, descr_id_uuid_msb, descr_id_uuid_lsb);
    descr_id.inst_id = (uint8_t) descr_id_inst_id;
    set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb);


    if (descr_id_uuid_lsb == 0)
    if (descr_id_uuid_lsb == 0)
    {
    {
@@ -898,7 +901,7 @@ static void gattClientReadCharacteristicNative(JNIEnv* env, jobject object,
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);


    btgatt_char_id_t char_id;
    btgatt_gatt_id_t char_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);


@@ -910,6 +913,7 @@ static void gattClientReadDescriptorNative(JNIEnv* env, jobject object,
    jlong service_id_uuid_lsb, jlong service_id_uuid_msb,
    jlong service_id_uuid_lsb, jlong service_id_uuid_msb,
    jint  char_id_inst_id,
    jint  char_id_inst_id,
    jlong char_id_uuid_lsb, jlong char_id_uuid_msb,
    jlong char_id_uuid_lsb, jlong char_id_uuid_msb,
    jint descr_id_inst_id,
    jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb,
    jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb,
    jint authReq)
    jint authReq)
{
{
@@ -920,12 +924,13 @@ static void gattClientReadDescriptorNative(JNIEnv* env, jobject object,
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);


    btgatt_char_id_t char_id;
    btgatt_gatt_id_t char_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);


    bt_uuid_t descr_id;
    btgatt_gatt_id_t descr_id;
    set_uuid(descr_id.uu, descr_id_uuid_msb, descr_id_uuid_lsb);
    descr_id.inst_id = (uint8_t) descr_id_inst_id;
    set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb);


    sGattIf->client->read_descriptor(conn_id, &srvc_id, &char_id, &descr_id, authReq);
    sGattIf->client->read_descriptor(conn_id, &srvc_id, &char_id, &descr_id, authReq);
}
}
@@ -944,7 +949,7 @@ static void gattClientWriteCharacteristicNative(JNIEnv* env, jobject object,
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);


    btgatt_char_id_t char_id;
    btgatt_gatt_id_t char_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);


@@ -969,6 +974,7 @@ static void gattClientWriteDescriptorNative(JNIEnv* env, jobject object,
    jlong service_id_uuid_lsb, jlong service_id_uuid_msb,
    jlong service_id_uuid_lsb, jlong service_id_uuid_msb,
    jint char_id_inst_id,
    jint char_id_inst_id,
    jlong char_id_uuid_lsb, jlong char_id_uuid_msb,
    jlong char_id_uuid_lsb, jlong char_id_uuid_msb,
    jint descr_id_inst_id,
    jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb,
    jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb,
    jint write_type, jint auth_req, jbyteArray value)
    jint write_type, jint auth_req, jbyteArray value)
{
{
@@ -979,12 +985,13 @@ static void gattClientWriteDescriptorNative(JNIEnv* env, jobject object,
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);


    btgatt_char_id_t char_id;
    btgatt_gatt_id_t char_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);


    bt_uuid_t descr_id;
    btgatt_gatt_id_t descr_id;
    set_uuid(descr_id.uu, descr_id_uuid_msb, descr_id_uuid_lsb);
    descr_id.inst_id = (uint8_t) descr_id_inst_id;
    set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb);


    uint16_t len = (uint16_t) env->GetArrayLength(value);
    uint16_t len = (uint16_t) env->GetArrayLength(value);
    jbyte *p_value = env->GetByteArrayElements(value, NULL);
    jbyte *p_value = env->GetByteArrayElements(value, NULL);
@@ -1010,7 +1017,7 @@ static void gattClientRegisterForNotificationsNative(JNIEnv* env, jobject object
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);
    set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb);


    btgatt_char_id_t char_id;
    btgatt_gatt_id_t char_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    char_id.inst_id = (uint8_t) char_id_inst_id;
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);
    set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb);


@@ -1239,12 +1246,12 @@ static JNINativeMethod sMethods[] = {
    {"gattClientRefreshNative", "(ILjava/lang/String;)V", (void *) gattClientRefreshNative},
    {"gattClientRefreshNative", "(ILjava/lang/String;)V", (void *) gattClientRefreshNative},
    {"gattClientSearchServiceNative", "(IZJJ)V", (void *) gattClientSearchServiceNative},
    {"gattClientSearchServiceNative", "(IZJJ)V", (void *) gattClientSearchServiceNative},
    {"gattClientGetCharacteristicNative", "(IIIJJIJJ)V", (void *) gattClientGetCharacteristicNative},
    {"gattClientGetCharacteristicNative", "(IIIJJIJJ)V", (void *) gattClientGetCharacteristicNative},
    {"gattClientGetDescriptorNative", "(IIIJJIJJJJ)V", (void *) gattClientGetDescriptorNative},
    {"gattClientGetDescriptorNative", "(IIIJJIJJIJJ)V", (void *) gattClientGetDescriptorNative},
    {"gattClientGetIncludedServiceNative", "(IIIJJIIJJ)V", (void *) gattClientGetIncludedServiceNative},
    {"gattClientGetIncludedServiceNative", "(IIIJJIIJJ)V", (void *) gattClientGetIncludedServiceNative},
    {"gattClientReadCharacteristicNative", "(IIIJJIJJI)V", (void *) gattClientReadCharacteristicNative},
    {"gattClientReadCharacteristicNative", "(IIIJJIJJI)V", (void *) gattClientReadCharacteristicNative},
    {"gattClientReadDescriptorNative", "(IIIJJIJJJJI)V", (void *) gattClientReadDescriptorNative},
    {"gattClientReadDescriptorNative", "(IIIJJIJJIJJI)V", (void *) gattClientReadDescriptorNative},
    {"gattClientWriteCharacteristicNative", "(IIIJJIJJII[B)V", (void *) gattClientWriteCharacteristicNative},
    {"gattClientWriteCharacteristicNative", "(IIIJJIJJII[B)V", (void *) gattClientWriteCharacteristicNative},
    {"gattClientWriteDescriptorNative", "(IIIJJIJJJJII[B)V", (void *) gattClientWriteDescriptorNative},
    {"gattClientWriteDescriptorNative", "(IIIJJIJJIJJII[B)V", (void *) gattClientWriteDescriptorNative},
    {"gattClientExecuteWriteNative", "(IZ)V", (void *) gattClientExecuteWriteNative},
    {"gattClientExecuteWriteNative", "(IZ)V", (void *) gattClientExecuteWriteNative},
    {"gattClientRegisterForNotificationsNative", "(ILjava/lang/String;IIJJIJJZ)V", (void *) gattClientRegisterForNotificationsNative},
    {"gattClientRegisterForNotificationsNative", "(ILjava/lang/String;IIJJIJJZ)V", (void *) gattClientRegisterForNotificationsNative},
    {"gattClientReadRemoteRssiNative", "(ILjava/lang/String;)V", (void *) gattClientReadRemoteRssiNative},
    {"gattClientReadRemoteRssiNative", "(ILjava/lang/String;)V", (void *) gattClientReadRemoteRssiNative},
+46 −38
Original line number Original line Diff line number Diff line
@@ -324,25 +324,28 @@ public class GattService extends ProfileService {
        public void readDescriptor(int clientIf, String address, int srvcType,
        public void readDescriptor(int clientIf, String address, int srvcType,
                            int srvcInstanceId, ParcelUuid srvcId,
                            int srvcInstanceId, ParcelUuid srvcId,
                            int charInstanceId, ParcelUuid charId,
                            int charInstanceId, ParcelUuid charId,
                            ParcelUuid descrId, int authReq) {
                            int descrInstanceId, ParcelUuid descrId,
                            int authReq) {
            GattService service = getService();
            GattService service = getService();
            if (service == null) return;
            if (service == null) return;
            service.readDescriptor(clientIf, address, srvcType, srvcInstanceId,
            service.readDescriptor(clientIf, address, srvcType,
                                       srvcId.getUuid(), charInstanceId,
                                   srvcInstanceId, srvcId.getUuid(),
                                       charId.getUuid(), descrId.getUuid(),
                                   charInstanceId, charId.getUuid(),
                                   descrInstanceId, descrId.getUuid(),
                                   authReq);
                                   authReq);
        }
        }


        public void writeDescriptor(int clientIf, String address, int srvcType,
        public void writeDescriptor(int clientIf, String address, int srvcType,
                            int srvcInstanceId, ParcelUuid srvcId,
                            int srvcInstanceId, ParcelUuid srvcId,
                            int charInstanceId, ParcelUuid charId,
                            int charInstanceId, ParcelUuid charId,
                            ParcelUuid descrId, int writeType,
                            int descrInstanceId, ParcelUuid descrId,
                            int authReq, byte[] value) {
                            int writeType, int authReq, byte[] value) {
            GattService service = getService();
            GattService service = getService();
            if (service == null) return;
            if (service == null) return;
            service.writeDescriptor(clientIf, address, srvcType, srvcInstanceId,
            service.writeDescriptor(clientIf, address, srvcType,
                                       srvcId.getUuid(), charInstanceId,
                                    srvcInstanceId, srvcId.getUuid(),
                                       charId.getUuid(), descrId.getUuid(),
                                    charInstanceId, charId.getUuid(),
                                    descrInstanceId, descrId.getUuid(),
                                    writeType, authReq, value);
                                    writeType, authReq, value);
        }
        }


@@ -619,7 +622,7 @@ public class GattService extends ProfileService {
    void onGetDescriptor(int connId, int status, int srvcType,
    void onGetDescriptor(int connId, int status, int srvcType,
            int srvcInstId, long srvcUuidLsb, long srvcUuidMsb,
            int srvcInstId, long srvcUuidLsb, long srvcUuidMsb,
            int charInstId, long charUuidLsb, long charUuidMsb,
            int charInstId, long charUuidLsb, long charUuidMsb,
            long descrUuidLsb, long descrUuidMsb) throws RemoteException {
            int descrInstId, long descrUuidLsb, long descrUuidMsb) throws RemoteException {


        UUID srvcUuid = new UUID(srvcUuidMsb, srvcUuidLsb);
        UUID srvcUuid = new UUID(srvcUuidMsb, srvcUuidLsb);
        UUID charUuid = new UUID(charUuidMsb, charUuidLsb);
        UUID charUuid = new UUID(charUuidMsb, charUuidLsb);
@@ -635,14 +638,14 @@ public class GattService extends ProfileService {
                app.callback.onGetDescriptor(address, srvcType,
                app.callback.onGetDescriptor(address, srvcType,
                            srvcInstId, new ParcelUuid(srvcUuid),
                            srvcInstId, new ParcelUuid(srvcUuid),
                            charInstId, new ParcelUuid(charUuid),
                            charInstId, new ParcelUuid(charUuid),
                            new ParcelUuid(descUuid));
                            descrInstId, new ParcelUuid(descUuid));
            }
            }


            // Get next descriptor for the current characteristic
            // Get next descriptor for the current characteristic
            gattClientGetDescriptorNative(connId, srvcType,
            gattClientGetDescriptorNative(connId, srvcType,
                                    srvcInstId, srvcUuidLsb, srvcUuidMsb,
                                    srvcInstId, srvcUuidLsb, srvcUuidMsb,
                                    charInstId, charUuidLsb, charUuidMsb,
                                    charInstId, charUuidLsb, charUuidMsb,
                                    descrUuidLsb, descrUuidMsb);
                                    descrInstId, descrUuidLsb, descrUuidMsb);
        } else {
        } else {
            // Explore the next service
            // Explore the next service
            continueSearch(connId, 0);
            continueSearch(connId, 0);
@@ -764,7 +767,7 @@ public class GattService extends ProfileService {
    void onReadDescriptor(int connId, int status, int srvcType,
    void onReadDescriptor(int connId, int status, int srvcType,
            int srvcInstId, long srvcUuidLsb, long srvcUuidMsb,
            int srvcInstId, long srvcUuidLsb, long srvcUuidMsb,
            int charInstId, long charUuidLsb, long charUuidMsb,
            int charInstId, long charUuidLsb, long charUuidMsb,
            long descrUuidLsb, long descrUuidMsb,
            int descrInstId, long descrUuidLsb, long descrUuidMsb,
            int charType, byte[] data) throws RemoteException {
            int charType, byte[] data) throws RemoteException {


        UUID srvcUuid = new UUID(srvcUuidMsb, srvcUuidLsb);
        UUID srvcUuid = new UUID(srvcUuidMsb, srvcUuidLsb);
@@ -780,14 +783,14 @@ public class GattService extends ProfileService {
            app.callback.onDescriptorRead(address, status, srvcType,
            app.callback.onDescriptorRead(address, status, srvcType,
                        srvcInstId, new ParcelUuid(srvcUuid),
                        srvcInstId, new ParcelUuid(srvcUuid),
                        charInstId, new ParcelUuid(charUuid),
                        charInstId, new ParcelUuid(charUuid),
                        new ParcelUuid(descrUuid), data);
                        descrInstId, new ParcelUuid(descrUuid), data);
        }
        }
    }
    }


    void onWriteDescriptor(int connId, int status, int srvcType,
    void onWriteDescriptor(int connId, int status, int srvcType,
            int srvcInstId, long srvcUuidLsb, long srvcUuidMsb,
            int srvcInstId, long srvcUuidLsb, long srvcUuidMsb,
            int charInstId, long charUuidLsb, long charUuidMsb,
            int charInstId, long charUuidLsb, long charUuidMsb,
            long descrUuidLsb, long descrUuidMsb) throws RemoteException {
            int descrInstId, long descrUuidLsb, long descrUuidMsb) throws RemoteException {


        UUID srvcUuid = new UUID(srvcUuidMsb, srvcUuidLsb);
        UUID srvcUuid = new UUID(srvcUuidMsb, srvcUuidLsb);
        UUID charUuid = new UUID(charUuidMsb, charUuidLsb);
        UUID charUuid = new UUID(charUuidMsb, charUuidLsb);
@@ -802,7 +805,7 @@ public class GattService extends ProfileService {
            app.callback.onDescriptorWrite(address, status, srvcType,
            app.callback.onDescriptorWrite(address, status, srvcType,
                        srvcInstId, new ParcelUuid(srvcUuid),
                        srvcInstId, new ParcelUuid(srvcUuid),
                        charInstId, new ParcelUuid(charUuid),
                        charInstId, new ParcelUuid(charUuid),
                        new ParcelUuid(descrUuid));
                        descrInstId, new ParcelUuid(descrUuid));
        }
        }
    }
    }


@@ -1013,7 +1016,8 @@ public class GattService extends ProfileService {
    void readDescriptor(int clientIf, String address, int srvcType,
    void readDescriptor(int clientIf, String address, int srvcType,
                            int srvcInstanceId, UUID srvcUuid,
                            int srvcInstanceId, UUID srvcUuid,
                            int charInstanceId, UUID charUuid,
                            int charInstanceId, UUID charUuid,
                            UUID descrUuid, int authReq) {
                            int descrInstanceId, UUID descrUuid,
                            int authReq) {
        enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
        enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");


        if (DBG) Log.d(TAG, "readDescriptor() - address=" + address);
        if (DBG) Log.d(TAG, "readDescriptor() - address=" + address);
@@ -1021,9 +1025,11 @@ public class GattService extends ProfileService {
        Integer connId = mClientMap.connIdByAddress(clientIf, address);
        Integer connId = mClientMap.connIdByAddress(clientIf, address);
        if (connId != null)
        if (connId != null)
            gattClientReadDescriptorNative(connId, srvcType,
            gattClientReadDescriptorNative(connId, srvcType,
                srvcInstanceId, srvcUuid.getLeastSignificantBits(),
                srvcInstanceId,
                srvcUuid.getMostSignificantBits(), charInstanceId,
                srvcUuid.getLeastSignificantBits(), srvcUuid.getMostSignificantBits(),
                charInstanceId,
                charUuid.getLeastSignificantBits(), charUuid.getMostSignificantBits(),
                charUuid.getLeastSignificantBits(), charUuid.getMostSignificantBits(),
                descrInstanceId,
                descrUuid.getLeastSignificantBits(), descrUuid.getMostSignificantBits(),
                descrUuid.getLeastSignificantBits(), descrUuid.getMostSignificantBits(),
                authReq);
                authReq);
        else
        else
@@ -1033,8 +1039,8 @@ public class GattService extends ProfileService {
    void writeDescriptor(int clientIf, String address, int srvcType,
    void writeDescriptor(int clientIf, String address, int srvcType,
                            int srvcInstanceId, UUID srvcUuid,
                            int srvcInstanceId, UUID srvcUuid,
                            int charInstanceId, UUID charUuid,
                            int charInstanceId, UUID charUuid,
                            UUID descrUuid, int writeType,
                            int descrInstanceId, UUID descrUuid,
                            int authReq, byte[] value) {
                            int writeType, int authReq, byte[] value) {
        enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
        enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");


        if (DBG) Log.d(TAG, "writeDescriptor() - address=" + address);
        if (DBG) Log.d(TAG, "writeDescriptor() - address=" + address);
@@ -1042,9 +1048,11 @@ public class GattService extends ProfileService {
        Integer connId = mClientMap.connIdByAddress(clientIf, address);
        Integer connId = mClientMap.connIdByAddress(clientIf, address);
        if (connId != null)
        if (connId != null)
            gattClientWriteDescriptorNative(connId, srvcType,
            gattClientWriteDescriptorNative(connId, srvcType,
                srvcInstanceId, srvcUuid.getLeastSignificantBits(),
                srvcInstanceId,
                srvcUuid.getMostSignificantBits(), charInstanceId,
                srvcUuid.getLeastSignificantBits(), srvcUuid.getMostSignificantBits(),
                charInstanceId,
                charUuid.getLeastSignificantBits(), charUuid.getMostSignificantBits(),
                charUuid.getLeastSignificantBits(), charUuid.getMostSignificantBits(),
                descrInstanceId,
                descrUuid.getLeastSignificantBits(), descrUuid.getMostSignificantBits(),
                descrUuid.getLeastSignificantBits(), descrUuid.getMostSignificantBits(),
                writeType, authReq, value);
                writeType, authReq, value);
        else
        else
@@ -1477,7 +1485,7 @@ public class GattService extends ProfileService {
                // Descriptor is up next
                // Descriptor is up next
                gattClientGetDescriptorNative(svc.connId, svc.srvcType,
                gattClientGetDescriptorNative(svc.connId, svc.srvcType,
                    svc.srvcInstId, svc.srvcUuidLsb, svc.srvcUuidMsb,
                    svc.srvcInstId, svc.srvcUuidLsb, svc.srvcUuidMsb,
                    svc.charInstId, svc.charUuidLsb, svc.charUuidMsb, 0,0);
                    svc.charInstId, svc.charUuidLsb, svc.charUuidMsb, 0, 0, 0);
            }
            }
        } else {
        } else {
            ClientMap.App app = mClientMap.getByConnId(connId);
            ClientMap.App app = mClientMap.getByConnId(connId);
@@ -1682,10 +1690,10 @@ public class GattService extends ProfileService {
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            long char_id_uuid_msb);
            long char_id_uuid_msb);


    private native void gattClientGetDescriptorNative(int conn_id,
    private native void gattClientGetDescriptorNative(int conn_id, int service_type,
            int service_type, int service_id_inst_id, long service_id_uuid_lsb,
            int service_id_inst_id, long service_id_uuid_lsb, long service_id_uuid_msb,
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            int char_id_inst_id, long char_id_uuid_lsb, long char_id_uuid_msb,
            long char_id_uuid_msb, long descr_id_uuid_lsb, long descr_id_uuid_msb);
            int descr_id_inst_id, long descr_id_uuid_lsb, long descr_id_uuid_msb);


    private native void gattClientGetIncludedServiceNative(int conn_id,
    private native void gattClientGetIncludedServiceNative(int conn_id,
            int service_type, int service_id_inst_id,
            int service_type, int service_id_inst_id,
@@ -1698,10 +1706,10 @@ public class GattService extends ProfileService {
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            long char_id_uuid_msb, int authReq);
            long char_id_uuid_msb, int authReq);


    private native void gattClientReadDescriptorNative(int conn_id,
    private native void gattClientReadDescriptorNative(int conn_id, int service_type,
            int service_type, int service_id_inst_id, long service_id_uuid_lsb,
            int service_id_inst_id, long service_id_uuid_lsb, long service_id_uuid_msb,
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            int char_id_inst_id, long char_id_uuid_lsb, long char_id_uuid_msb,
            long char_id_uuid_msb, long descr_id_uuid_lsb, long descr_id_uuid_msb,
            int descr_id_inst_id, long descr_id_uuid_lsb, long descr_id_uuid_msb,
            int authReq);
            int authReq);


    private native void gattClientWriteCharacteristicNative(int conn_id,
    private native void gattClientWriteCharacteristicNative(int conn_id,
@@ -1709,10 +1717,10 @@ public class GattService extends ProfileService {
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            long char_id_uuid_msb, int write_type, int auth_req, byte[] value);
            long char_id_uuid_msb, int write_type, int auth_req, byte[] value);


    private native void gattClientWriteDescriptorNative(int conn_id,
    private native void gattClientWriteDescriptorNative(int conn_id, int service_type,
            int service_type, int service_id_inst_id, long service_id_uuid_lsb,
            int service_id_inst_id, long service_id_uuid_lsb, long service_id_uuid_msb,
            long service_id_uuid_msb, int char_id_inst_id, long char_id_uuid_lsb,
            int char_id_inst_id, long char_id_uuid_lsb, long char_id_uuid_msb,
            long char_id_uuid_msb, long descr_id_uuid_lsb, long descr_id_uuid_msb,
            int descr_id_inst_id, long descr_id_uuid_lsb, long descr_id_uuid_msb,
            int write_type, int auth_req, byte[] value);
            int write_type, int auth_req, byte[] value);


    private native void gattClientExecuteWriteNative(int conn_id, boolean execute);
    private native void gattClientExecuteWriteNative(int conn_id, boolean execute);