case CA_LE_AUTO_CONNECT_FLAG:
curState->autoConnectFlag = flag;
break;
+ case CA_LE_DESCRIPTOR_FOUND:
+ curState->isDescriptorFound = flag;
+ break;
default:
break;
}
case CA_LE_AUTO_CONNECT_FLAG:
ret = curState->autoConnectFlag;
break;
+ case CA_LE_DESCRIPTOR_FOUND:
+ ret = curState->isDescriptorFound;
+ break;
default:
break;
}
jobject gatt,
jint status)
{
- OIC_LOG_V(INFO, TAG, "CALeGattServicesDiscoveredCallback - status %d: ", status);
+ OIC_LOG_V(INFO, TAG, "CALeGattServicesDiscoveredCallback - status %d", status);
VERIFY_NON_NULL_VOID(env, TAG, "env is null");
VERIFY_NON_NULL_VOID(obj, TAG, "obj is null");
VERIFY_NON_NULL_VOID(gatt, TAG, "gatt is null");
- if (0 != status) // discovery error
+ if (GATT_SUCCESS != status) // discovery error
{
CALEClientSendFinish(env, gatt);
return;
{
OIC_LOG_V(INFO, TAG, "Descriptor is not found : %d", res);
+ res = CALEClientSetFlagToState(env, jni_address, CA_LE_DESCRIPTOR_FOUND, JNI_FALSE);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "CALEClientSetFlagToState has failed");
+ goto error_exit;
+ }
+
res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE,
STATE_SERVICE_CONNECTED);
if (CA_STATUS_OK != res)
}
}
}
+ else
+ {
+ res = CALEClientSetFlagToState(env, jni_address, CA_LE_DESCRIPTOR_FOUND, JNI_TRUE);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "CALEClientSetFlagToState has failed");
+ goto error_exit;
+ }
+ }
OIC_LOG(INFO, TAG, "ServicesDiscovery is successful");
(*env)->ReleaseStringUTFChars(env, jni_address, address);
g_clientErrorCallback(address, data, length, CA_SEND_FAILED);
}
- CALEClientSendFinish(env, gatt);
+ (*env)->ReleaseStringUTFChars(env, jni_address, address);
goto error_exit;
}
}
jobject gatt,
jint status)
{
- OIC_LOG_V(INFO, TAG, "CALeGattDescriptorWriteCallback - status %d: ", status);
+ OIC_LOG_V(INFO, TAG, "CALeGattDescriptorWriteCallback - status %d", status);
VERIFY_NON_NULL_VOID(env, TAG, "env is null");
VERIFY_NON_NULL_VOID(obj, TAG, "obj is null");
VERIFY_NON_NULL_VOID(gatt, TAG, "gatt is null");
}
const char* address = (*env)->GetStringUTFChars(env, jni_address, NULL);
- if (address)
+ if (!address)
{
- CAResult_t res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE,
- STATE_SERVICE_CONNECTED);
- if (CA_STATUS_OK != res)
- {
- OIC_LOG(ERROR, TAG, "CALEClientUpdateDeviceState has failed");
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- goto error_exit;
- }
+ goto error_exit;
}
+
+ CAResult_t res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE,
+ STATE_SERVICE_CONNECTED);
(*env)->ReleaseStringUTFChars(env, jni_address, address);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "CALEClientUpdateDeviceState has failed");
+ goto error_exit;
+ }
if (g_sendBuffer)
{
return CA_STATUS_OK;
}
+static CAResult_t CALEStateConnectedCallback(JNIEnv *env, jstring jni_address,
+ jboolean isDescriptorFound)
+{
+ VERIFY_NON_NULL(env, TAG, "env");
+ VERIFY_NON_NULL(jni_address, TAG, "jni_address");
+
+ if (CALEClientGetFlagFromState(env, jni_address, CA_LE_DESCRIPTOR_FOUND) == isDescriptorFound)
+ {
+ if (g_bleConnectionStateChangedCallback)
+ {
+ const char* address = (*env)->GetStringUTFChars(env, jni_address, NULL);
+ if (!address)
+ {
+ OIC_LOG(ERROR, TAG, "address is null");
+ return CA_STATUS_FAILED;
+ }
+
+ g_bleConnectionStateChangedCallback(CA_ADAPTER_GATT_BTLE, address, true);
+ OIC_LOG(DEBUG, TAG, "BLE is connected");
+
+ (*env)->ReleaseStringUTFChars(env, jni_address, address);
+ }
+ }
+
+ return CA_STATUS_OK;
+}
+
JNIEXPORT void JNICALL
Java_org_iotivity_ca_CaLeClientInterface_caLeStateChangedCallback(JNIEnv *env, jobject obj,
jint status)
jint status,
jint newState)
{
- VERIFY_NON_NULL_VOID(env, TAG, "env is null");
- VERIFY_NON_NULL_VOID(obj, TAG, "obj is null");
- VERIFY_NON_NULL_VOID(gatt, TAG, "gatt is null");
-
OIC_LOG_V(DEBUG, TAG, "CALeGattNWConnectionStateChangeCallback - status %d, newstate %d",
status, newState);
+ VERIFY_NON_NULL_VOID(env, TAG, "env");
+ VERIFY_NON_NULL_VOID(obj, TAG, "obj");
+ VERIFY_NON_NULL_VOID(gatt, TAG, "gatt");
jint state_disconnected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE,
"STATE_DISCONNECTED");
Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerNWConnectionStateChangeCallback(
JNIEnv *env, jobject obj, jobject device, jint status, jint newState)
{
- OIC_LOG(DEBUG, TAG, " Gatt Server NWConnectionStateChange Callback");
-
+ OIC_LOG_V(DEBUG, TAG, "caLeGattServerNWConnectionStateChangeCallback - status %d, newstate %d",
+ status, newState);
VERIFY_NON_NULL_VOID(env, TAG, "env");
VERIFY_NON_NULL_VOID(obj, TAG, "obj");
VERIFY_NON_NULL_VOID(device, TAG, "device");
- (void)status;
- jstring jni_remoteAddress = CALEGetAddressFromBTDevice(env, device);
- if (!jni_remoteAddress)
+ if (CONNECTION_FAILED_TO_BE_EASTABLISHED != status)
{
- OIC_LOG(ERROR, TAG, "jni_remoteAddress is null");
- return;
- }
+ if (g_bleConnectionStateChangedCallback)
+ {
+ jstring jni_remoteAddress = CALEGetAddressFromBTDevice(env, device);
+ if (!jni_remoteAddress)
+ {
+ OIC_LOG(ERROR, TAG, "jni_remoteAddress is null");
+ return;
+ }
- const char* address = (*env)->GetStringUTFChars(env, jni_remoteAddress, NULL);
- if (!address)
- {
- OIC_LOG(ERROR, TAG, "address is null");
- return;
- }
+ const char* address = (*env)->GetStringUTFChars(env, jni_remoteAddress, NULL);
+ if (!address)
+ {
+ OIC_LOG(ERROR, TAG, "address is null");
+ return;
+ }
- // STATE_DISCONNECTED
- jint state_disconnected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE,
- "STATE_DISCONNECTED");
+ // STATE_DISCONNECTED
+ jint state_disconnected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE,
+ "STATE_DISCONNECTED");
- // STATE_CONNECTED
- jint state_connected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE,
- "STATE_CONNECTED");
+ // STATE_CONNECTED
+ jint state_connected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE,
+ "STATE_CONNECTED");
- if (CONNECTION_FAILED_TO_BE_EASTABLISHED != status)
- {
- if (g_bleConnectionStateChangedCallback)
- {
if (state_disconnected == newState)
{
OIC_LOG_V(DEBUG, TAG, "LE Disconnected state is %d, %s", newState, address);
{
OIC_LOG_V(DEBUG, TAG, "Unknown state : %d, %s", newState, address);
}
+
+ (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, address);
}
}
- (*env)->ReleaseStringUTFChars(env, jni_remoteAddress, address);
}
JNIEXPORT void JNICALL
jobject gatt,
jint status)
{
- OIC_LOG_V(DEBUG, TAG, "caLeGattNWServicesDiscoveredCallback - status %d: ", status);
+ OIC_LOG_V(DEBUG, TAG, "caLeGattNWServicesDiscoveredCallback - status %d", status);
VERIFY_NON_NULL_VOID(env, TAG, "env");
VERIFY_NON_NULL_VOID(obj, TAG, "obj");
VERIFY_NON_NULL_VOID(gatt, TAG, "gatt");
jstring jni_address = CALEGetAddressFromGatt(env, gatt);
if (!jni_address)
{
- OIC_LOG(ERROR, TAG, "CALEGetAddressFromGatt is null");
+ OIC_LOG(ERROR, TAG, "jni_address is null");
return;
}
- const char* address = (*env)->GetStringUTFChars(env, jni_address, NULL);
- if (!address)
+ if (CA_STATUS_OK != CALEStateConnectedCallback(env, jni_address, JNI_FALSE))
{
- OIC_LOG(ERROR, TAG, "address is null");
- (*env)->DeleteLocalRef(env, jni_address);
+ OIC_LOG(ERROR, TAG, "CALEStateConnectedCallback has failed");
+ }
+
+ (*env)->DeleteLocalRef(env, jni_address);
+ }
+}
+
+JNIEXPORT void JNICALL
+Java_org_iotivity_ca_CaLeClientInterface_caLeGattNWDescriptorWriteCallback(JNIEnv *env,
+ jobject obj,
+ jobject gatt,
+ jint status)
+{
+ OIC_LOG_V(DEBUG, TAG, "caLeGattNWDescriptorWriteCallback - status %d", status);
+ VERIFY_NON_NULL_VOID(env, TAG, "env");
+ VERIFY_NON_NULL_VOID(obj, TAG, "obj");
+ VERIFY_NON_NULL_VOID(gatt, TAG, "gatt");
+
+ if (GATT_SUCCESS == status)
+ {
+ jstring jni_address = CALEGetAddressFromGatt(env, gatt);
+ if (!jni_address)
+ {
+ OIC_LOG(ERROR, TAG, "jni_address is null");
return;
}
- if (g_bleConnectionStateChangedCallback)
+ if (CA_STATUS_OK != CALEStateConnectedCallback(env, jni_address, JNI_TRUE))
{
- g_bleConnectionStateChangedCallback(CA_ADAPTER_GATT_BTLE, address, true);
- OIC_LOG(DEBUG, TAG, "BLE is connected");
+ OIC_LOG(ERROR, TAG, "CALEStateConnectedCallback has failed");
}
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
+ (*env)->DeleteLocalRef(env, jni_address);
}
}