}
// call start le scan method
+ OIC_LOG(INFO, TAG, "CALL API - startLeScan");
jboolean jni_obj_startLeScan = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter,
jni_mid_startLeScan, callback);
if (!jni_obj_startLeScan)
{
- OIC_LOG(INFO, TAG, "startLeScan is failed");
+ OIC_LOG(INFO, TAG, "startLeScan has failed");
}
else
{
- OIC_LOG(DEBUG, TAG, "startLeScan is started");
+ OIC_LOG(DEBUG, TAG, "LeScan has started");
CALEClientSetScanFlag(true);
}
}
// call start le scan method
+ OIC_LOG(INFO, TAG, "CALL API - startLeScan (with UUID)");
jboolean jni_obj_startLeScan = (*env)->CallBooleanMethod(env, jni_obj_BTAdapter,
jni_mid_startLeScan, uuids, callback);
if (!jni_obj_startLeScan)
{
- OIC_LOG(INFO, TAG, "startLeScan With UUID is failed");
+ OIC_LOG(INFO, TAG, "startLeScan has failed");
}
else
{
- OIC_LOG(DEBUG, TAG, "startLeScan With UUID is started");
+ OIC_LOG(DEBUG, TAG, "LeScan has started");
CALEClientSetScanFlag(true);
}
return CA_STATUS_FAILED;
}
- OIC_LOG(DEBUG, TAG, "CALL API - request to stop LE Scan");
+ OIC_LOG(INFO, TAG, "CALL API - stopLeScan");
// call start le scan method
(*env)->CallVoidMethod(env, jni_obj_BTAdapter, jni_mid_stopLeScan, callback);
if ((*env)->ExceptionCheck(env))
return CA_STATUS_OK;
}
-CAResult_t CALEClientSetFlagToState(JNIEnv *env, jstring jni_address,
- jint state_idx, jboolean flag)
+CAResult_t CALEClientSetFlagToState(JNIEnv *env, jstring jni_address, jint state_idx, jboolean flag)
{
OIC_LOG(DEBUG, TAG, "IN - CALEClientSetFlagToState");
VERIFY_NON_NULL(env, TAG, "env");
if (!address)
{
OIC_LOG(ERROR, TAG, "address is not available");
+ ca_mutex_unlock(g_deviceStateListMutex);
return JNI_FALSE;
}
CALEState_t* curState = CALEClientGetStateInfo(address);
+ (*env)->ReleaseStringUTFChars(env, jni_address, address);
if(!curState)
{
OIC_LOG(INFO, TAG, "there is no information. auto connect flag is false");
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
ca_mutex_unlock(g_deviceStateListMutex);
return JNI_FALSE;
}
default:
break;
}
- OIC_LOG_V(INFO, TAG, "%d flag is %d", state_idx, ret);
-
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
ca_mutex_unlock(g_deviceStateListMutex);
+ OIC_LOG_V(INFO, TAG, "%d flag is %d", state_idx, ret);
OIC_LOG(DEBUG, TAG, "OUT - CALEClientGetFlagFromState");
return ret;
}
}
// call disconnect gatt method
- OIC_LOG(DEBUG, TAG, "CALL API - request disconnect gatt");
+ OIC_LOG(INFO, TAG, "CALL API - disconnect");
(*env)->CallVoidMethod(env, bluetoothGatt, jni_mid_disconnectGatt);
if ((*env)->ExceptionCheck(env))
{
}
// call disconnect gatt method
- OIC_LOG(DEBUG, TAG, "CALL API - request discovery gatt services");
+ OIC_LOG(INFO, TAG, "CALL API - discoverServices");
jboolean ret = (*env)->CallBooleanMethod(env, bluetoothGatt, jni_mid_discoverServices);
if (!ret)
{
}
// call disconnect gatt method
- OIC_LOG(DEBUG, TAG, "CALL API - request to write gatt characteristic");
+ OIC_LOG(INFO, TAG, "CALL API - writeCharacteristic");
jboolean ret = (jboolean)(*env)->CallBooleanMethod(env, bluetoothGatt,
jni_mid_writeCharacteristic,
gattCharacteristic);
}
// call disconnect gatt method
- OIC_LOG(DEBUG, TAG, "CALL API - request to read gatt characteristic");
+ OIC_LOG(INFO, TAG, "CALL API - readCharacteristic");
jboolean ret = (*env)->CallBooleanMethod(env, bluetoothGatt, jni_mid_readCharacteristic,
jni_obj_GattCharacteristic);
if (ret)
return CA_STATUS_FAILED;
}
+ OIC_LOG(INFO, TAG, "CALL API - setCharacteristicNotification");
jboolean ret = (*env)->CallBooleanMethod(env, bluetoothGatt, jni_mid_setNotification,
characteristic, JNI_TRUE);
if (JNI_TRUE == ret)
{
- OIC_LOG(DEBUG, TAG, "CALL API - setCharacteristicNotification success");
+ OIC_LOG(DEBUG, TAG, "setCharacteristicNotification success");
}
else
{
- OIC_LOG(ERROR, TAG, "CALL API - setCharacteristicNotification has failed");
+ OIC_LOG(ERROR, TAG, "setCharacteristicNotification has failed");
return CA_STATUS_FAILED;
}
return CA_STATUS_FAILED;
}
- OIC_LOG(DEBUG, TAG, "request to write descriptor");
+ OIC_LOG(INFO, TAG, "CALL API - writeDescriptor");
jboolean jni_ret = (*env)->CallBooleanMethod(env, bluetoothGatt, jni_mid_writeDescriptor,
jni_obj_descriptor);
if (jni_ret)
jobject gdevice = (*env)->NewGlobalRef(env, device);
u_arraylist_add(g_deviceList, gdevice);
ca_cond_signal(g_deviceDescCond);
- OIC_LOG_V(DEBUG, TAG, "Added this BT Device[%s] in the List", remoteAddress);
+ OIC_LOG_V(DEBUG, TAG, "Added a new BT Device in deviceList [%s]", remoteAddress);
}
(*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
(*env)->ReleaseStringUTFChars(env, jni_setAddress, setAddress);
}
- OIC_LOG(DEBUG, TAG, "there are no the device in list. we can add");
+ OIC_LOG_V(DEBUG, TAG, "[%s] doesn't exist in scanned device list", remoteAddress);
return false;
}
CAResult_t CALEClientAddGattobjToList(JNIEnv *env, jobject gatt)
{
- OIC_LOG(INFO, TAG, "CALEClientAddGattobjToList");
+ OIC_LOG(DEBUG, TAG, "CALEClientAddGattobjToList");
VERIFY_NON_NULL(env, TAG, "env is null");
VERIFY_NON_NULL(gatt, TAG, "gatt is null");
return CA_STATUS_FAILED;
}
- OIC_LOG_V(INFO, TAG, "remote address : %s", remoteAddress);
+ OIC_LOG_V(DEBUG, TAG, "remote address : %s", remoteAddress);
if (!CALEClientIsGattObjInList(env, remoteAddress))
{
jobject newGatt = (*env)->NewGlobalRef(env, gatt);
u_arraylist_add(g_gattObjectList, newGatt);
- OIC_LOG(INFO, TAG, "Set GATT Object to Array as Element");
+ OIC_LOG(INFO, TAG, "added a newGatt object to gattObjectList");
}
(*env)->ReleaseStringUTFChars(env, jni_remoteAddress, remoteAddress);
jstring CALEClientGetLEAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice)
{
- OIC_LOG(DEBUG, TAG, "IN - CALEClientGetLEAddressFromBTDevice");
+ OIC_LOG(DEBUG, TAG, "CALEClientGetLEAddressFromBTDevice");
VERIFY_NON_NULL_RET(env, TAG, "env", NULL);
VERIFY_NON_NULL_RET(bluetoothDevice, TAG, "bluetoothDevice", NULL);
return NULL;
}
+ ca_mutex_lock(g_gattObjectMutex);
+
size_t length = u_arraylist_length(g_gattObjectList);
+ OIC_LOG_V(DEBUG, TAG, "length of gattObjectList : %d", length);
+ OIC_LOG_V(DEBUG, TAG, "targetAddress : %s", targetAddress);
+
for (size_t index = 0; index < length; index++)
{
jobject jarrayObj = (jobject) u_arraylist_get(g_gattObjectList, index);
if (!jarrayObj)
{
+ ca_mutex_unlock(g_gattObjectMutex);
OIC_LOG(ERROR, TAG, "jarrayObj is null");
(*env)->ReleaseStringUTFChars(env, jni_btTargetAddress, targetAddress);
return NULL;
}
- OIC_LOG(DEBUG, TAG, "CALL API - bluetoothGatt.getDevice()");
jobject jni_obj_device = (*env)->CallObjectMethod(env, jarrayObj, jni_mid_getDevice);
if (!jni_obj_device)
{
+ ca_mutex_unlock(g_gattObjectMutex);
OIC_LOG(ERROR, TAG, "jni_obj_device is null");
(*env)->ReleaseStringUTFChars(env, jni_btTargetAddress, targetAddress);
return NULL;
jstring jni_btAddress = CALEGetAddressFromBTDevice(env, jni_obj_device);
if (!jni_btAddress)
{
+ ca_mutex_unlock(g_gattObjectMutex);
OIC_LOG(ERROR, TAG, "CALEGetAddressFromBTDevice has failed");
(*env)->ReleaseStringUTFChars(env, jni_btTargetAddress, targetAddress);
return NULL;
const char* btAddress = (*env)->GetStringUTFChars(env, jni_btAddress, NULL);
if (!btAddress)
{
+ ca_mutex_unlock(g_gattObjectMutex);
OIC_LOG(ERROR, TAG, "btAddress is not available");
(*env)->ReleaseStringUTFChars(env, jni_btTargetAddress, targetAddress);
return NULL;
}
- OIC_LOG_V(DEBUG, TAG, "targetAddress : %s", targetAddress);
- OIC_LOG_V(DEBUG, TAG, "btAddress : %s", btAddress);
+ OIC_LOG_V(DEBUG, TAG, "btAddress : %s (idx: %d)", btAddress, index);
if (!strcmp(targetAddress, btAddress))
{
OIC_LOG(DEBUG, TAG, "Found Gatt object from BT device");
{
OIC_LOG(ERROR, TAG, "jni_LEAddress is null");
}
+ ca_mutex_unlock(g_gattObjectMutex);
(*env)->ReleaseStringUTFChars(env, jni_btTargetAddress, targetAddress);
(*env)->ReleaseStringUTFChars(env, jni_btAddress, btAddress);
(*env)->DeleteLocalRef(env, jni_btAddress);
(*env)->DeleteLocalRef(env, jni_btAddress);
(*env)->DeleteLocalRef(env, jni_obj_device);
}
+ ca_mutex_unlock(g_gattObjectMutex);
- OIC_LOG(DEBUG, TAG, "OUT - CALEClientGetLEAddressFromBTDevice");
+ (*env)->ReleaseStringUTFChars(env, jni_btTargetAddress, targetAddress);
+ OIC_LOG_V(DEBUG, TAG, "[%s] doesn't exist in gattObjectList", targetAddress);
return NULL;
}
uint16_t target_state)
{
VERIFY_NON_NULL(address, TAG, "address is null");
+ VERIFY_NON_NULL(address, TAG, "state_type is null");
+ VERIFY_NON_NULL(address, TAG, "target_state is null");
if (!g_deviceStateList)
{
default:
break;
}
- OIC_LOG_V(INFO, TAG, "update state : - addr : %s, "
- "conn : %d, send : %d, ACFlag : %d",
- curState->address, curState->connectedState,
- curState->sendState, curState->autoConnectFlag);
+ OIC_LOG_V(INFO, TAG, "update state - addr : %s, conn : %d, send : %d, ACFlag : %d",
+ curState->address, curState->connectedState, curState->sendState,
+ curState->autoConnectFlag);
}
else /** state is added newly **/
{
default:
break;
}
- OIC_LOG_V(INFO, TAG, "Set newState to List - addr : %s, "
+ OIC_LOG_V(INFO, TAG, "add a new state to List - addr : %s, "
"conn : %d, send : %d, ACFlag : %d",
- newstate->address, newstate->connectedState,
- newstate->sendState, newstate->autoConnectFlag);
+ newstate->address, newstate->connectedState, newstate->sendState,
+ newstate->autoConnectFlag);
u_arraylist_add(g_deviceStateList, newstate); // update new state
}
}
uint32_t length = u_arraylist_length(g_deviceStateList);
- OIC_LOG_V(DEBUG, TAG, "size of deviceStateList is %d", length);
+ OIC_LOG_V(DEBUG, TAG, "length of deviceStateList : %d", length);
+ OIC_LOG_V(DEBUG, TAG, "target address : %s", remoteAddress);
for (uint32_t index = 0; index < length; index++)
{
continue;
}
- OIC_LOG_V(DEBUG, TAG, "target address : %s", remoteAddress);
- OIC_LOG_V(DEBUG, TAG, "state address : %s", state->address);
+ OIC_LOG_V(DEBUG, TAG, "state address : %s (idx: %d)", state->address, index);
if (!strcmp(state->address, remoteAddress))
{
- OIC_LOG_V(DEBUG, TAG, "get state : %s", remoteAddress);
+ OIC_LOG(DEBUG, TAG, "found state");
return state;
}
}
+
+ OIC_LOG_V(DEBUG, TAG, "[%s] doesn't exist in deviceStateList", remoteAddress);
return NULL;
}
CALEClientTerminate();
}
-CAResult_t CAUpdateCharacteristicsToGattServer(const char *remoteAddress, const uint8_t *data,
- uint32_t dataLen, CALETransferType_t type,
- int32_t position)
+CAResult_t CAUpdateCharacteristicsToGattServer(const char *remoteAddress, const uint8_t *data,
+ uint32_t dataLen, CALETransferType_t type,
+ int32_t position)
{
OIC_LOG(DEBUG, TAG, "call CALEClientSendUnicastMessage");
VERIFY_NON_NULL(data, TAG, "data is null");
*/
JNIEXPORT void JNICALL
Java_org_iotivity_ca_CaLeClientInterface_caLeGattConnectionStateChangeCallback(JNIEnv *env,
- jobject obj,
- jobject gatt,
- jint status,
- jint newstate)
+ jobject obj,
+ jobject gatt,
+ jint status,
+ jint newstate)
{
- OIC_LOG_V(DEBUG, TAG, "CALeGattConnectionStateChangeCallback - status %d, newstate %d", status,
- newstate);
+ OIC_LOG_V(INFO, TAG, "CALeGattConnectionStateChangeCallback - status %d, newstate %d", status,
+ 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");
jint state_connected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE, "STATE_CONNECTED");
- jint state_disconnected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE, "STATE_DISCONNECTED");
- jint gatt_success = CALEGetConstantsValue(env, CLASSPATH_BT_GATT, "GATT_SUCCESS");
- if (gatt_success == status && state_connected == newstate) // le connected
+ jstring jni_address = CALEClientGetAddressFromGattObj(env, gatt);
+ if (!jni_address)
+ {
+ OIC_LOG(ERROR, TAG, "CALEClientGetAddressFromGattObj has failed");
+ goto error_exit;
+ }
+
+ const char* address = (*env)->GetStringUTFChars(env, jni_address, NULL);
+ if (!address)
{
- jstring jni_address = CALEClientGetAddressFromGattObj(env, gatt);
- if (!jni_address)
- {
- goto error_exit;
- }
+ OIC_LOG(ERROR, TAG, "address is null");
+ goto error_exit;
+ }
+ OIC_LOG_V(DEBUG, TAG, "CALeGattConnectionStateChangeCallback - address [%s]", address);
- const char* address = (*env)->GetStringUTFChars(env, jni_address, NULL);
- if (address)
+ CAResult_t res;
+ if (state_connected == newstate)
+ {
+ OIC_LOG(DEBUG, TAG, "LE is connected");
+ if (GATT_SUCCESS == status)
{
- CAResult_t res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE,
- STATE_CONNECTED);
+ res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE, STATE_CONNECTED);
+ (*env)->ReleaseStringUTFChars(env, jni_address, address);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "CALEClientUpdateDeviceState has failed");
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
goto error_exit;
}
- OIC_LOG_V(INFO, TAG, "ConnectionStateCB - remote address : %s", address);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- }
+ res = CALEClientAddGattobjToList(env, gatt);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "CALEClientAddGattobjToList has failed");
+ goto error_exit;
+ }
- CAResult_t res = CALEClientAddGattobjToList(env, gatt);
- if (CA_STATUS_OK != res)
- {
- OIC_LOG(ERROR, TAG, "CALEClientAddGattobjToList has failed");
- goto error_exit;
+ res = CALEClientDiscoverServices(env, gatt);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "CALEClientDiscoverServices has failed");
+ goto error_exit;
+ }
}
-
- res = CALEClientDiscoverServices(env, gatt);
- if (CA_STATUS_OK != res)
+ else
{
- OIC_LOG(ERROR, TAG, "CALEClientDiscoverServices has failed");
- goto error_exit;
+ OIC_LOG(INFO, TAG, "unknown status");
+ (*env)->ReleaseStringUTFChars(env, jni_address, address);
}
}
- else if (state_disconnected == newstate) // le disconnected
+ else // STATE_DISCONNECTED == newstate
{
- jstring jni_address = CALEClientGetAddressFromGattObj(env, gatt);
- if (!jni_address)
- {
- OIC_LOG(ERROR, TAG, "CALEClientGetAddressFromGattObj has failed");
- goto error_exit;
- }
+ OIC_LOG(DEBUG, TAG, "LE is disconnected");
- const char* address = (*env)->GetStringUTFChars(env, jni_address, NULL);
- if (address)
+ res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE, STATE_DISCONNECTED);
+ (*env)->ReleaseStringUTFChars(env, jni_address, address);
+ if (CA_STATUS_OK != res)
{
- CAResult_t res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE,
- STATE_DISCONNECTED);
- if (CA_STATUS_OK != res)
- {
- OIC_LOG(ERROR, TAG, "CALEClientUpdateDeviceState has failed");
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- goto error_exit;
- }
- OIC_LOG_V(INFO, TAG, "ConnectionStateCB - remote address : %s", address);
-
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
+ OIC_LOG(ERROR, TAG, "CALEClientUpdateDeviceState has failed");
+ goto error_exit;
}
- CAResult_t res = CALEClientGattClose(env, gatt);
+ res = CALEClientGattClose(env, gatt);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "CALEClientGattClose has failed");
{
// other reason except for gatt_success is expected to running
// background connection in BT platform.
- OIC_LOG(INFO, TAG, "unknown state or manual disconnected state");
+ OIC_LOG(INFO, TAG, "unknown status or manual disconnected state");
CALEClientUpdateSendCnt(env);
return;
}
// error label.
error_exit:
-
CALEClientSendFinish(env, gatt);
return;
}
*/
JNIEXPORT void JNICALL
Java_org_iotivity_ca_CaLeClientInterface_caLeGattServicesDiscoveredCallback(JNIEnv *env,
- jobject obj,
- jobject gatt,
- jint status)
+ jobject obj,
+ jobject gatt,
+ jint status)
{
- OIC_LOG_V(DEBUG, 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");
{
OIC_LOG_V(INFO, TAG, "Descriptor is not found : %d", res);
- res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE ,
+ res = CALEClientUpdateDeviceState(address, CA_LE_CONNECTION_STATE,
STATE_SERVICE_CONNECTED);
if (CA_STATUS_OK != res)
{
*/
JNIEXPORT void JNICALL
Java_org_iotivity_ca_CaLeClientInterface_caLeGattCharacteristicWriteCallback(
- JNIEnv *env, jobject obj, jobject gatt, jbyteArray data,
- jint status)
+ JNIEnv *env, jobject obj, jobject gatt, jbyteArray data, jint status)
{
- OIC_LOG_V(DEBUG, TAG, "CALeGattCharacteristicWriteCallback - status : %d", status);
+ OIC_LOG_V(INFO, TAG, "CALeGattCharacteristicWriteCallback - 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");
goto error_exit;
}
- jint gatt_success = CALEGetConstantsValue(env, CLASSPATH_BT_GATT, "GATT_SUCCESS");
- if (gatt_success != status) // error case
+ if (GATT_SUCCESS != status) // error case
{
OIC_LOG(ERROR, TAG, "send failure");
Java_org_iotivity_ca_CaLeClientInterface_caLeGattCharacteristicChangedCallback(
JNIEnv *env, jobject obj, jobject gatt, jbyteArray data)
{
- OIC_LOG(DEBUG, TAG, "CALeGattCharacteristicChangedCallback");
+ OIC_LOG(INFO, TAG, "CALeGattCharacteristicChangedCallback");
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, "CALeGattCharacteristicChangedCallback - data. : %p, %d",
receivedData, length);
- ca_mutex_lock(g_bleServerBDAddressMutex);
uint32_t sentLength = 0;
- g_CABLEClientDataReceivedCallback(address, receivedData, length,
- &sentLength);
+ ca_mutex_lock(g_bleServerBDAddressMutex);
+ g_CABLEClientDataReceivedCallback(address, receivedData, length, &sentLength);
ca_mutex_unlock(g_bleServerBDAddressMutex);
(*env)->ReleaseStringUTFChars(env, jni_address, address);
jobject gatt,
jint status)
{
- OIC_LOG_V(DEBUG, 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");
- jint gatt_success = CALEGetConstantsValue(env, CLASSPATH_BT_GATT, "GATT_SUCCESS");
- if (gatt_success != status) // error
+ if (GATT_SUCCESS != status) // error
{
goto error_exit;
}
VERIFY_NON_NULL(remote_le_address, TAG, "remote_le_address is null");
OIC_LOG(DEBUG, TAG, "IN - CAManagerStartAutoConnection");
+ ca_mutex_lock(g_connectRetryMutex);
- if (true == CAManagerGetAutoConnectionFlag(env, remote_le_address))
+ bool isAutoConnecting = false;
+ if (CA_STATUS_OK != CAManagerGetAutoConnectingFlag(env, remote_le_address, &isAutoConnecting))
{
- OIC_LOG(INFO, TAG, "auto connecting.");
+ OIC_LOG(DEBUG, TAG, "CAManagerIsAutoConnecting has failed");
+ ca_mutex_unlock(g_connectRetryMutex);
return CA_STATUS_FAILED;
}
- ca_mutex_lock(g_connectRetryMutex);
+ if (isAutoConnecting)
+ {
+ OIC_LOG(INFO, TAG, "connection has been already in progress or completed");
+ ca_mutex_unlock(g_connectRetryMutex);
+ return CA_STATUS_FAILED;
+ }
for (size_t retry_cnt = 0 ; retry_cnt < MAX_RETRY_COUNT ; retry_cnt++)
{
MAX_RETRY_COUNT - retry_cnt - 1);
if (ca_cond_wait_for(g_connectRetryCond, g_connectRetryMutex, TIMEOUT) == 0)
{
- OIC_LOG(INFO, TAG, "request to connect gatt was canceled");
ca_mutex_unlock(g_connectRetryMutex);
+ OIC_LOG(INFO, TAG, "request to connect gatt was canceled");
return CA_STATUS_OK;
}
// time out. retry connection
}
// request to connection with AutoConnection Flag
- OIC_LOG(INFO, TAG, "request to gatt connection for auto connection");
+ OIC_LOG(INFO, TAG, "request gatt connection by CM auto connector");
jobject newGatt = (jobject)CALEClientConnect(env, jni_bluetooth, JNI_TRUE);
if (NULL == newGatt)
{
}
// set flag auto connection is requested.
- CAManagerSetAutoConnectionFlag(env, remote_le_address, true);
+ CAManagerSetAutoConnectingFlag(env, remote_le_address, true);
OIC_LOG(DEBUG, TAG, "OUT - CAManagerConnectGatt");
return newGatt;
}
isAttached = true;
}
-
OIC_LOG_V(DEBUG, TAG, "set [%s] for Auto Connection", address);
+
jstring jni_leAddress = (*env)->NewStringUTF(env, address);
+ if (!jni_leAddress)
+ {
+ OIC_LOG(ERROR, TAG, "jni_leAddress is null");
+ goto error_exit;
+ }
if (!CAManagerCheckBTAddress(env, jni_leAddress))
{
OIC_LOG(ERROR, TAG, "this address is not BT address string format");
- if (isAttached)
- {
- (*g_jvm)->DetachCurrentThread(g_jvm);
- }
- return CA_STATUS_FAILED;
+ goto error_exit;
}
- // if there is target address in SharedPreference. it will be reseted.
- if (CAManagerIsConnectedDeviceAddress(env, g_context,
- jni_leAddress,
- g_connectedDeviceSet))
+ // if there is target address in SharedPreference, it will be reset.
+ if (CAManagerIsConnectedDeviceAddress(env, g_context, jni_leAddress, g_connectedDeviceSet))
{
- if (!CAManagerRemoveConnectedDeviceAddress(env, g_context,
- jni_leAddress,
+ if (!CAManagerRemoveConnectedDeviceAddress(env, g_context, jni_leAddress,
g_connectedDeviceSet))
{
OIC_LOG(ERROR, TAG, "Preference - remove has failed");
}
// it will be added new target address.
- if (!CAManagerAddConnectedDeviceAddress(env, g_context,
- jni_leAddress, g_connectedDeviceSet))
+ if (!CAManagerAddConnectedDeviceAddress(env, g_context, jni_leAddress, g_connectedDeviceSet))
{
OIC_LOG(ERROR, TAG, "Preference - putting has failed");
}
}
return CA_STATUS_OK;
+
+error_exit:
+
+ if (isAttached)
+ {
+ (*g_jvm)->DetachCurrentThread(g_jvm);
+ }
+
+ return CA_STATUS_FAILED;
}
CAResult_t CAUnsetLEClientAutoConnectionDeviceInfo(const char* address)
}
isAttached = true;
}
-
OIC_LOG_V(DEBUG, TAG, "unset [%s] for Auto Connection", address);
+
jstring jni_leAddress = (*env)->NewStringUTF(env, address);
+ if (!jni_leAddress)
+ {
+ OIC_LOG(ERROR, TAG, "jni_leAddress is null");
+ goto error_exit;
+ }
if (!CAManagerCheckBTAddress(env, jni_leAddress))
{
OIC_LOG(ERROR, TAG, "this address is not BT address string format");
- if (isAttached)
- {
- (*g_jvm)->DetachCurrentThread(g_jvm);
- }
- return CA_STATUS_FAILED;
+ goto error_exit;
}
- // if there is target address in SharedPreference. it would be removed
- if (CAManagerIsConnectedDeviceAddress(env, g_context,
- jni_leAddress,
- g_connectedDeviceSet))
+ // if there is target address in SharedPreference, it will be removed
+ if (CAManagerIsConnectedDeviceAddress(env, g_context, jni_leAddress, g_connectedDeviceSet))
{
- if (!CAManagerRemoveConnectedDeviceAddress(env, g_context,
- jni_leAddress,
+ if (!CAManagerRemoveConnectedDeviceAddress(env, g_context, jni_leAddress,
g_connectedDeviceSet))
{
OIC_LOG(ERROR, TAG, "Preference - remove has failed");
}
// remove target device for auto connection
- CAResult_t ret = CAManagerRemoveData(env, jni_leAddress);
+ CAResult_t ret = CAManagerRemoveACData(env, jni_leAddress);
if (CA_STATUS_OK != ret)
{
- OIC_LOG(ERROR, TAG, "CAManagerRemoveData has failed");
+ OIC_LOG(ERROR, TAG, "CAManagerRemoveACData has failed");
}
if (isAttached)
(*g_jvm)->DetachCurrentThread(g_jvm);
}
- return CA_STATUS_OK;
+ return ret;
+
+error_exit:
+
+ if (isAttached)
+ {
+ (*g_jvm)->DetachCurrentThread(g_jvm);
+ }
+
+ return CA_STATUS_FAILED;
}
CAResult_t CAManagerLEClientInitialize(JNIEnv *env, JavaVM *jvm, jobject context)
g_jvm = jvm;
g_context = (*env)->NewGlobalRef(env, context);;
+
CAManagerInitMutexVaraibles();
CAManagerInitLEAutoConnection();
-
- CAManagerCreateACDataList(env);
+ CAManagerCreateACDataList();
// get last connected device list
jobject set = NULL;
{
// create new set<String> object
set = CAManagerCreateSetString(env);
- if (set)
- {
- OIC_LOG(DEBUG, TAG, "created new SetString");
- }
- else
+ if (!set)
{
OIC_LOG(ERROR, TAG, "CAManagerCreateSetString has failed");
return CA_STATUS_FAILED;
}
+ OIC_LOG(DEBUG, TAG, "created new SetString");
}
else
{
OIC_LOG(ERROR, TAG, "CALEClientDisconnectAll has failed");
}
- res = CAManagerRemoveAllData(env);
+ res = CAManagerRemoveAllACData(env);
if (CA_STATUS_OK != res)
{
- OIC_LOG(ERROR, TAG, "CAManagerRemoveAllData has failed");
+ OIC_LOG(ERROR, TAG, "CAManagerRemoveAllACData has failed");
}
+ CAManagerDestroyACDataList();
CAManagerTerminateLEAutoConnection();
CAManagerTerminateMutexVariables();
Java_org_iotivity_ca_CaLeClientInterface_caManagerAdapterStateChangedCallback(
JNIEnv *env, jobject obj, jint state)
{
- OIC_LOG(DEBUG, TAG, "caManagerAdapterStateChangedCallback");
+ OIC_LOG_V(INFO, TAG, "caManagerAdapterStateChangedCallback - state %d", state);
VERIFY_NON_NULL_VOID(env, TAG, "env");
VERIFY_NON_NULL_VOID(obj, TAG, "obj");
// find target device for autoconnect
size_t length = CAManagerGetACDataLength();
- OIC_LOG_V(DEBUG, TAG, "target device : %d", length);
+ OIC_LOG_V(DEBUG, TAG, "length of ACDataList : %d", length);
for (size_t idx = 0; idx < length; idx++)
{
jstring leAddress = CAManagerGetLEAddressFromACData(env, idx);
g_adapterStateCB(CA_ADAPTER_GATT_BTLE, false);
}
- // reset autoconnect flag for all target devices
+ // reset isAutoConnecting flag for all target devices
size_t length = CAManagerGetACDataLength();
+ OIC_LOG_V(DEBUG, TAG, "length of ACDataList : %d", length);
for (size_t idx = 0; idx < length; idx++)
{
jstring address = CAManagerGetLEAddressFromACData(env, idx);
if (address)
{
- CAManagerSetAutoConnectionFlag(env, address, false);
+ CAManagerSetAutoConnectingFlag(env, address, false);
}
}
else if (state_turning_off == state)
{
OIC_LOG(DEBUG, TAG, "AdapterStateChangedCallback : state_turning_off");
- return;
}
else
{
OIC_LOG(INFO, TAG, "AdapterStateChangedCallback state is not available");
- return;
}
}
Java_org_iotivity_ca_CaLeClientInterface_caManagerBondStateChangedCallback(
JNIEnv *env, jobject obj, jobject device)
{
- OIC_LOG(DEBUG, TAG, "caManagerBondStateChangedCallback");
+ OIC_LOG(INFO, TAG, "caManagerBondStateChangedCallback");
+ // this callback is called by CaLeClientInterface
+ // only when bond state is changed from BOND_BONDED to BOND_NONE
+ OIC_LOG(DEBUG, TAG, "bond state is changed from BOND_BONDED to BOND_NONE");
VERIFY_NON_NULL_VOID(env, TAG, "env");
VERIFY_NON_NULL_VOID(obj, TAG, "obj");
VERIFY_NON_NULL_VOID(device, TAG, "device");
// if there is no data, CAData will be created.
OIC_LOG_V(DEBUG, TAG, "bond none device : %s", leAddress);
- CAResult_t res = CAManagerRemoveData(env, jni_leAddress);
+ CAResult_t res = CAManagerRemoveACData(env, jni_leAddress);
if (CA_STATUS_OK != res)
{
- OIC_LOG(ERROR, TAG, "CAManagerRemoveData has failed");
+ OIC_LOG(ERROR, TAG, "CAManagerRemoveACData has failed");
}
(*env)->ReleaseStringUTFChars(env, jni_leAddress, leAddress);
- if (!CAManagerRemoveConnectedDeviceAddress(env, g_context,
- jni_leAddress,
+ if (!CAManagerRemoveConnectedDeviceAddress(env, g_context, jni_leAddress,
g_connectedDeviceSet))
{
OIC_LOG(ERROR, TAG, "CAManagerRemoveConnectedDeviceAddress has failed");
}
-
- OIC_LOG(INFO, TAG, "bonded state changed bone_none");
}
JNIEXPORT void JNICALL
Java_org_iotivity_ca_CaLeClientInterface_caManagerLeGattConnectionStateChangeCB(
JNIEnv *env, jobject obj, jobject gatt, jint status, jint newState)
{
- OIC_LOG_V(DEBUG, TAG, "caManagerLeGattConnectionStateChangeCB-status(%d), newState(%d)",
+ OIC_LOG_V(INFO, TAG, "caManagerLeGattConnectionStateChangeCB - status %d, newState %d",
status, newState);
VERIFY_NON_NULL_VOID(env, TAG, "env");
jint state_connected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE, "STATE_CONNECTED");
jint state_disconnected = CALEGetConstantsValue(env, CLASSPATH_BT_PROFILE, "STATE_DISCONNECTED");
- jint gatt_success = CALEGetConstantsValue(env, CLASSPATH_BT_GATT, "GATT_SUCCESS");
jstring jni_address = CALEGetAddressFromGatt(env, gatt);
if (!jni_address)
if (!address)
{
OIC_LOG(ERROR, TAG, "address is null");
+ (*env)->DeleteLocalRef(env, jni_address);
return;
}
- OIC_LOG_V(INFO, TAG, "connection state : status(%d), addr:(%s), newState(%d)",
- status, address, newState);
+ OIC_LOG_V(DEBUG, TAG, "caManagerLeGattConnectionStateChangeCB - address [%s]", address);
- if (gatt_success == status && state_connected == newState) // le connected
+ if (GATT_SUCCESS == status && state_connected == newState) // le connected
{
OIC_LOG(DEBUG, TAG, "LE is connected");
+
CAResult_t res = CAManagerReadRemoteRssi(env, gatt);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "CAManagerReadRemoteRssi has failed");
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- return;
+ goto exit;
}
}
else if (state_disconnected == newState)// le disconnected
if (LINK_LOSS == status || REMOTE_DISCONNECT == status)
{
- if (!CAManagerIsMatchedACData(env, jni_address))
+ if (!CAManagerIsInACDataList(env, jni_address))
{
OIC_LOG_V(DEBUG, TAG, "this[%s] is not target address for Auto Connection",
address);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- return;
+ goto exit;
}
- CAManagerSetAutoConnectionFlag(env, jni_address, false);
+ CAManagerSetAutoConnectingFlag(env, jni_address, false);
CAResult_t res = CAManagerStartAutoConnection(env, jni_address);
if (CA_STATUS_OK != res)
{
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
OIC_LOG(ERROR, TAG, "CAManagerStartAutoConnection has failed");
- return;
+ goto exit;
}
}
else if (ACCEPT_TIMEOUT_EXCEPTION == status)
CAManagerProcessRecovery(env, START_RECOVERY);
}
}
+
+exit:
(*env)->ReleaseStringUTFChars(env, jni_address, address);
(*env)->DeleteLocalRef(env, jni_address);
}
jobject gatt,
jint status)
{
- OIC_LOG_V(DEBUG, TAG, "caManagerLeServicesDiscoveredCallback - status %d: ", status);
+ OIC_LOG_V(INFO, TAG, "caManagerLeServicesDiscoveredCallback - status %d", status);
VERIFY_NON_NULL_VOID(env, TAG, "env");
VERIFY_NON_NULL_VOID(obj, TAG, "obj");
VERIFY_NON_NULL_VOID(gatt, TAG, "gatt");
(*env)->DeleteLocalRef(env, jni_address);
return;
}
- OIC_LOG_V(DEBUG, TAG, "ServicesDiscovered device : %s", address);
- // target address for auto connection will be set in device list.
- // check set connected address information by user
- jclass jni_cls_set = (*env)->FindClass(env, "java/util/HashSet");
- if (!jni_cls_set)
- {
- OIC_LOG(ERROR, TAG, "jni_cls_set is null");
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
- }
-
- jmethodID jni_mid_iterator = (*env)->GetMethodID(env, jni_cls_set, "iterator",
- "()Ljava/util/Iterator;");
- if (!jni_mid_iterator)
- {
- OIC_LOG(ERROR, TAG, "jni_mid_iterator is null");
- (*env)->DeleteLocalRef(env, jni_cls_set);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
- }
-
- jobject jni_obj_iter = (*env)->CallObjectMethod(env, g_connectedDeviceSet, jni_mid_iterator);
- if (!jni_obj_iter)
- {
- OIC_LOG(ERROR, TAG, "jni_obj_iter is null");
- (*env)->DeleteLocalRef(env, jni_cls_set);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
- }
-
- // Get the Iterator method IDs
- jclass jni_cls_iterator = (*env)->FindClass(env, "java/util/Iterator");
- if (!jni_cls_iterator)
- {
- OIC_LOG(ERROR, TAG, "jni_cls_iterator is null");
- (*env)->DeleteLocalRef(env, jni_obj_iter);
- (*env)->DeleteLocalRef(env, jni_cls_set);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
- }
+ OIC_LOG_V(DEBUG, TAG, "ServicesDiscovered device : %s", address);
- jmethodID jni_mid_hasNext = (*env)->GetMethodID(env, jni_cls_iterator, "hasNext", "()Z");
- if (!jni_mid_hasNext)
+ if (CAManagerIsConnectedDeviceAddress(env, g_context, jni_address, g_connectedDeviceSet))
{
- OIC_LOG(ERROR, TAG, "jni_mid_hasNext is null");
- (*env)->DeleteLocalRef(env, jni_cls_iterator);
- (*env)->DeleteLocalRef(env, jni_obj_iter);
- (*env)->DeleteLocalRef(env, jni_cls_set);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
- }
+ OIC_LOG(INFO, TAG, "AC list - the address will be added to ACData list");
+ CAManagerAddACData(env, jni_address);
+ CAManagerSetAutoConnectingFlag(env, jni_address, false);
- jmethodID jni_mid_next = (*env)->GetMethodID(env, jni_cls_iterator, "next",
- "()Ljava/lang/Object;");
- if (!jni_mid_next)
- {
- OIC_LOG(ERROR, TAG, "jni_mid_next is null");
- (*env)->DeleteLocalRef(env, jni_cls_iterator);
- (*env)->DeleteLocalRef(env, jni_obj_iter);
- (*env)->DeleteLocalRef(env, jni_cls_set);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
+ // next connection will be requested with JNI_TRUE on autoConnect flag
+ // after first connection
+ CALEClientSetFlagToState(env, jni_address, CA_LE_AUTO_CONNECT_FLAG, JNI_TRUE);
}
-
- // Iterate over the entry Set
- while ((*env)->CallBooleanMethod(env, jni_obj_iter, jni_mid_hasNext))
+ else
{
- jstring jni_str_entry = (jstring)(*env)->CallObjectMethod(env, jni_obj_iter,
- jni_mid_next);
- if (!jni_str_entry)
- {
- OIC_LOG(ERROR, TAG, "jni_str_entry is null");
- (*env)->DeleteLocalRef(env, jni_cls_iterator);
- (*env)->DeleteLocalRef(env, jni_obj_iter);
- (*env)->DeleteLocalRef(env, jni_cls_set);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
- }
- const char* foundAddress = (*env)->GetStringUTFChars(env, jni_str_entry, NULL);
- if (!foundAddress)
- {
- OIC_LOG(ERROR, TAG, "addr is null");
- (*env)->DeleteLocalRef(env, jni_str_entry);
- (*env)->DeleteLocalRef(env, jni_cls_iterator);
- (*env)->DeleteLocalRef(env, jni_obj_iter);
- (*env)->DeleteLocalRef(env, jni_cls_set);
- (*env)->ReleaseStringUTFChars(env, jni_address, address);
- (*env)->DeleteLocalRef(env, jni_address);
- return;
- }
- OIC_LOG_V(INFO, TAG, "found last connected address [%s] from SharedPreferences",
- foundAddress);
-
- if (!strcmp(foundAddress, address))
- {
- // if BLE address is matched each other
- // this address will be added into auto connection list.
- OIC_LOG(INFO, TAG, "AC list - address will be added into ACData list");
- CAManagerAddACData(env, jni_address);
- CAManagerSetAutoConnectionFlag(env, jni_address, false);
-
- // next connection will be requested as JNI_TRUE flag
- // after first connection
- CALEClientSetFlagToState(env, jni_str_entry, CA_LE_AUTO_CONNECT_FLAG, JNI_TRUE);
- }
- else
- {
- OIC_LOG(INFO, TAG, "AC list - device is not matched");
- }
-
- (*env)->ReleaseStringUTFChars(env, jni_str_entry, foundAddress);
- (*env)->DeleteLocalRef(env, jni_str_entry);
+ OIC_LOG(DEBUG, TAG, "AC list - the address is not set to AutoConnect");
}
if (g_connStateCB)
OIC_LOG(DEBUG, TAG, "LE Connected callback is called");
}
- (*env)->DeleteLocalRef(env, jni_cls_iterator);
- (*env)->DeleteLocalRef(env, jni_obj_iter);
- (*env)->DeleteLocalRef(env, jni_cls_set);
(*env)->ReleaseStringUTFChars(env, jni_address, address);
(*env)->DeleteLocalRef(env, jni_address);
+
OIC_LOG(INFO, TAG, "ServicesDiscovery is successful");
}
else
jstring CAManagerGetLEAddressFromACData(JNIEnv *env, size_t idx)
{
- OIC_LOG(DEBUG, TAG, "CAManagerGetLEAddressFromACData");
- OIC_LOG_V(DEBUG, TAG, "idx : %d", idx);
+ OIC_LOG_V(DEBUG, TAG, "CAManagerGetLEAddressFromACData (idx : %d)", idx);
if (idx <= u_arraylist_length(g_deviceACDataList))
{
CAManagerACData_t *curData = (CAManagerACData_t *) u_arraylist_get(
OIC_LOG(ERROR, TAG, "address is null");
return NULL;
}
- OIC_LOG_V(INFO, TAG, "found out target address : %s", address);
+ OIC_LOG_V(INFO, TAG, "found target address : %s", address);
(*env)->ReleaseStringUTFChars(env, curData->address, address);
return curData->address;
}
+ OIC_LOG(DEBUG, TAG, "idx is greater than the length of ACDataList");
return NULL;
}
-void CAManagerCreateACDataList(JNIEnv *env)
+void CAManagerCreateACDataList()
{
OIC_LOG(DEBUG, TAG, "CAManagerCreateACDataList");
- VERIFY_NON_NULL_VOID(env, TAG, "env");
ca_mutex_lock(g_deviceACDataListMutex);
- // create new object array
- if (g_deviceACDataList == NULL)
+ if (NULL == g_deviceACDataList)
{
OIC_LOG(DEBUG, TAG, "Create AC Data list");
-
g_deviceACDataList = u_arraylist_create();
}
ca_mutex_unlock(g_deviceACDataListMutex);
}
+void CAManagerDestroyACDataList()
+{
+ OIC_LOG(DEBUG, TAG, "CAManagerDestroyACDataList");
+ if (g_deviceACDataList)
+ {
+ OIC_LOG(DEBUG, TAG, "Destroy AC Data list");
+ u_arraylist_free(&g_deviceACDataList);
+ g_deviceACDataList = NULL;
+ }
+}
+
CAResult_t CAManagerInitMutexVaraibles()
{
if (NULL == g_deviceACDataListMutex)
static CAManagerACData_t *CAManagerCreateACData(jstring jaddress)
{
- OIC_LOG(DEBUG, TAG, "IN-CAManagerCreateACData");
+ OIC_LOG(DEBUG, TAG, "IN - CAManagerCreateACData");
VERIFY_NON_NULL_RET(jaddress, TAG, "jaddress", NULL);
- // create block data
+ // create AC data
CAManagerACData_t *data = (CAManagerACData_t *) OICCalloc(1, sizeof(*data));
if (!data)
{
}
data->address = jaddress;
- data->isAutoConnect = false;
+ data->isAutoConnecting = false;
- OIC_LOG(DEBUG, TAG, "OUT-CAManagerCreateACData");
+ OIC_LOG(DEBUG, TAG, "OUT - CAManagerCreateACData");
return data;
}
-bool CAManagerIsMatchedACData(JNIEnv *env, jstring jaddress)
+bool CAManagerIsInACDataList(JNIEnv *env, jstring jaddress)
{
VERIFY_NON_NULL_RET(env, TAG, "env", NULL);
VERIFY_NON_NULL_RET(jaddress, TAG, "jaddress", false);
+ ca_mutex_lock(g_deviceACDataListMutex);
+
const char* address = (*env)->GetStringUTFChars(env, jaddress, NULL);
if (!address)
{
OIC_LOG(ERROR, TAG, "address is null");
+ ca_mutex_unlock(g_deviceACDataListMutex);
return false;
}
{
OIC_LOG(ERROR, TAG, "curData is null");
(*env)->ReleaseStringUTFChars(env, jaddress, address);
+ ca_mutex_unlock(g_deviceACDataListMutex);
return false;
}
{
OIC_LOG(ERROR, TAG, "address is null");
(*env)->ReleaseStringUTFChars(env, jaddress, address);
+ ca_mutex_unlock(g_deviceACDataListMutex);
return false;
}
{
(*env)->ReleaseStringUTFChars(env, curData->address, setAddress);
(*env)->ReleaseStringUTFChars(env, jaddress, address);
+ ca_mutex_unlock(g_deviceACDataListMutex);
return true;
}
(*env)->ReleaseStringUTFChars(env, curData->address, setAddress);
}
+
+ OIC_LOG_V(DEBUG, TAG, "[%s] doesn't exist in list", address);
(*env)->ReleaseStringUTFChars(env, jaddress, address);
+ ca_mutex_unlock(g_deviceACDataListMutex);
return false;
}
void CAManagerAddACData(JNIEnv *env, jstring jaddress)
{
- OIC_LOG(DEBUG, TAG, "IN-CAManagerAddACData");
+ OIC_LOG(DEBUG, TAG, "IN - CAManagerAddACData");
VERIFY_NON_NULL_VOID(env, TAG, "env");
VERIFY_NON_NULL_VOID(jaddress, TAG, "jaddress");
- ca_mutex_lock(g_deviceACDataListMutex);
-
- if(!CAManagerIsMatchedACData(env, jaddress))
+ if(!CAManagerIsInACDataList(env, jaddress))
{
- OIC_LOG(DEBUG, TAG, "ACdata will be added");
+ OIC_LOG(DEBUG, TAG, "new ACdata will be added in List");
// add CAManagerACData
jobject gaddress = (*env)->NewGlobalRef(env, jaddress);
CAManagerACData_t *data = CAManagerCreateACData(gaddress);
+
+ ca_mutex_lock(g_deviceACDataListMutex);
u_arraylist_add(g_deviceACDataList, data);
+ ca_mutex_unlock(g_deviceACDataListMutex);
+ }
+ else
+ {
+ OIC_LOG(DEBUG, TAG, "the address is already in ACData list");
}
- ca_mutex_unlock(g_deviceACDataListMutex);
- OIC_LOG(DEBUG, TAG, "OUT-CAManagerAddACData");
+ OIC_LOG(DEBUG, TAG, "OUT - CAManagerAddACData");
}
-CAResult_t CAManagerRemoveData(JNIEnv *env, jstring jaddress)
+CAResult_t CAManagerRemoveACData(JNIEnv *env, jstring jaddress)
{
- OIC_LOG(DEBUG, TAG, "IN-CAManagerRemoveData");
+ OIC_LOG(DEBUG, TAG, "CAManagerRemoveACData");
VERIFY_NON_NULL(env, TAG, "env");
VERIFY_NON_NULL(jaddress, TAG, "jaddress");
return CA_STATUS_FAILED;
}
- OIC_LOG_V(DEBUG, TAG, "(%s) will be removed", address);
+ OIC_LOG_V(DEBUG, TAG, "[%s] will be removed", address);
size_t length = u_arraylist_length(g_deviceACDataList);
for (size_t idx = 0; idx < length; idx++)
(*env)->ReleaseStringUTFChars(env, curData->address, setAddress);
}
+ OIC_LOG_V(DEBUG, TAG, "[%s] doesn't exist in list", address);
(*env)->ReleaseStringUTFChars(env, jaddress, address);
ca_mutex_unlock(g_deviceACDataListMutex);
- OIC_LOG(DEBUG, TAG, "OUT-CAManagerRemoveData");
+
return CA_STATUS_OK;
}
-CAResult_t CAManagerRemoveAllData(JNIEnv *env)
+CAResult_t CAManagerRemoveAllACData(JNIEnv *env)
{
- OIC_LOG(DEBUG, TAG, "IN-CAManagerRemoveAllData");
+ OIC_LOG(DEBUG, TAG, "IN - CAManagerRemoveAllACData");
VERIFY_NON_NULL(env, TAG, "env");
ca_mutex_lock(g_deviceACDataListMutex);
OICFree(curData);
}
ca_mutex_unlock(g_deviceACDataListMutex);
- OIC_LOG(DEBUG, TAG, "OUT-CAManagerRemoveAllData");
+ OIC_LOG(DEBUG, TAG, "OUT - CAManagerRemoveAllACData");
return CA_STATUS_OK;
}
-bool CAManagerGetAutoConnectionFlag(JNIEnv *env, jstring jaddress)
+CAResult_t CAManagerGetAutoConnectingFlag(JNIEnv *env, jstring jaddress, bool *flag)
{
- OIC_LOG(DEBUG, TAG, "IN-CAManagerGetAutoConnectionFlag");
- VERIFY_NON_NULL_RET(env, TAG, "env", NULL);
- VERIFY_NON_NULL_RET(jaddress, TAG, "jaddress", NULL);
+ OIC_LOG(DEBUG, TAG, "CAManagerGetAutoConnectingFlag");
+ VERIFY_NON_NULL(env, TAG, "env");
+ VERIFY_NON_NULL(jaddress, TAG, "jaddress");
ca_mutex_lock(g_deviceACDataListMutex);
if (!strcmp(setAddress, address))
{
+ OIC_LOG_V(DEBUG, TAG, "address : [%s], isAutoConnecting : %d", address,
+ curData->isAutoConnecting);
+ *flag = curData->isAutoConnecting;
(*env)->ReleaseStringUTFChars(env, curData->address, setAddress);
(*env)->ReleaseStringUTFChars(env, jaddress, address);
ca_mutex_unlock(g_deviceACDataListMutex);
- OIC_LOG_V(DEBUG, TAG, "flag is %d", curData->isAutoConnect);
- return curData->isAutoConnect;
+ return CA_STATUS_OK;
}
(*env)->ReleaseStringUTFChars(env, curData->address, setAddress);
}
+
+ OIC_LOG_V(DEBUG, TAG, "[%s] doesn't exist in list", address);
(*env)->ReleaseStringUTFChars(env, jaddress, address);
ca_mutex_unlock(g_deviceACDataListMutex);
- OIC_LOG(DEBUG, TAG, "OUT-CAManagerGetAutoConnectionFlag");
- return false;
+ return CA_STATUS_FAILED;
}
-void CAManagerSetAutoConnectionFlag(JNIEnv *env, jstring jaddress, bool flag)
+bool CAManagerSetAutoConnectingFlag(JNIEnv *env, jstring jaddress, bool flag)
{
- OIC_LOG(DEBUG, TAG, "IN-CAManagerSetAutoConnectionFlag");
- VERIFY_NON_NULL_VOID(env, TAG, "env");
- VERIFY_NON_NULL_VOID(jaddress, TAG, "jaddress");
+ OIC_LOG(DEBUG, TAG, "CAManagerSetAutoConnectingFlag");
+ VERIFY_NON_NULL_RET(env, TAG, "env", false);
+ VERIFY_NON_NULL_RET(jaddress, TAG, "jaddress", false);
ca_mutex_lock(g_deviceACDataListMutex);
{
OIC_LOG(ERROR, TAG, "address is null");
ca_mutex_unlock(g_deviceACDataListMutex);
- return;
+ return false;
}
size_t length = u_arraylist_length(g_deviceACDataList);
OIC_LOG(ERROR, TAG, "curData is null");
(*env)->ReleaseStringUTFChars(env, jaddress, address);
ca_mutex_unlock(g_deviceACDataListMutex);
- return;
+ return false;
}
const char* setAddress = (*env)->GetStringUTFChars(env, curData->address, NULL);
OIC_LOG(ERROR, TAG, "address is null");
(*env)->ReleaseStringUTFChars(env, jaddress, address);
ca_mutex_unlock(g_deviceACDataListMutex);
- return;
+ return false;
}
if (!strcmp(setAddress, address))
{
- OIC_LOG_V(DEBUG, TAG, "flag is set to %d", flag);
- curData->isAutoConnect = flag;
+ OIC_LOG_V(DEBUG, TAG, "isAutoConnecting flag of [%s] is set to %d", address,
+ curData->isAutoConnecting);
+ curData->isAutoConnecting = flag;
(*env)->ReleaseStringUTFChars(env, curData->address, setAddress);
(*env)->ReleaseStringUTFChars(env, jaddress, address);
ca_mutex_unlock(g_deviceACDataListMutex);
- return;
+ return true;
}
(*env)->ReleaseStringUTFChars(env, curData->address, setAddress);
}
+
+ OIC_LOG_V(DEBUG, TAG, "[%s] doesn't exist in list", address);
(*env)->ReleaseStringUTFChars(env, jaddress, address);
ca_mutex_unlock(g_deviceACDataListMutex);
- OIC_LOG(DEBUG, TAG, "OUT-CAManagerSetAutoConnectionFlag");
+ return false;
}
size_t CAManagerGetACDataLength()
void CAManagerSetBTRecovery(bool flag)
{
g_isBTRecovery = flag;
- OIC_LOG_V(DEBUG, TAG, "BT recovery flag : %d", g_isBTRecovery);
+ OIC_LOG_V(DEBUG, TAG, "BT recovery flag is set to %d", g_isBTRecovery);
}
bool CAManagerIsRecoveryFlagSet()
*/
typedef struct
{
- jstring address; /**< remote address */
- bool isAutoConnect; /**< auto connection flag */
+ jstring address; /**< remote address */
+ bool isAutoConnecting; /**< whether GATT connection has been in progress */
} CAManagerACData_t;
/**
/**
* create auto connection list.
- * @param[in] env JNI interface pointer.
*/
-void CAManagerCreateACDataList(JNIEnv *env);
+void CAManagerCreateACDataList();
+
+/**
+ * Destroy auto connection list.
+ */
+void CAManagerDestroyACDataList();
/**
* initialize mutex.
void CAManagerTerminateMutexVariables();
/**
- * check whether target address is already contained in list or not.
+ * check whether target address is already contained in ACData list or not.
* @param[in] env JNI interface pointer.
* @param[in] jaddress ble address.
*/
-bool CAManagerIsMatchedACData(JNIEnv *env, jstring jaddress);
+bool CAManagerIsInACDataList(JNIEnv *env, jstring jaddress);
/**
* add auto connection data into list.
void CAManagerAddACData(JNIEnv *env, jstring jaddress);
/**
- * remove auto connection data for selected ble address.
+ * remove auto connection data from ACData list for selected ble address.
* @param[in] env JNI interface pointer.
* @param[in] jaddress ble address.
* @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
*/
-CAResult_t CAManagerRemoveData(JNIEnv *env, jstring jaddress);
+CAResult_t CAManagerRemoveACData(JNIEnv *env, jstring jaddress);
/**
- * remove auto connection data for all devices.
+ * remove auto connection data from ACData list for all devices.
* @param[in] env JNI interface pointer.
* @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
*/
-CAResult_t CAManagerRemoveAllData(JNIEnv *env);
+CAResult_t CAManagerRemoveAllACData(JNIEnv *env);
/**
- * get current auto connection flag.
+ * get isAutoConnecting flag for the address.
* @param[in] env JNI interface pointer.
* @param[in] jaddress ble address.
- * @return true or false
+ * @param[out] flag isAutoConnecting flag
+ * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
*/
-bool CAManagerGetAutoConnectionFlag(JNIEnv *env, jstring jaddress);
+CAResult_t CAManagerGetAutoConnectingFlag(JNIEnv *env, jstring jaddress, bool *flag);
/**
- * set auto connection flag.
+ * set isAutoConnecting flag for the address.
* @param[in] env JNI interface pointer.
* @param[in] jaddress ble address.
- * @param[in] flag auto connection flag.
+ * @param[in] flag isAutoConnecting flag.
+ * @return true or false
*/
-void CAManagerSetAutoConnectionFlag(JNIEnv *env, jstring jaddress, bool flag);
+bool CAManagerSetAutoConnectingFlag(JNIEnv *env, jstring jaddress, bool flag);
/**
* get length of auto connection list.
bool CAManagerRemoveConnectedDeviceAddress(JNIEnv *env, jobject context,
jstring address, jobject set)
{
- OIC_LOG(DEBUG, TAG, "IN-CAManagerRemoveConnectedDeviceAddress");
+ OIC_LOG(DEBUG, TAG, "CAManagerRemoveConnectedDeviceAddress");
VERIFY_NON_NULL_RET(env, TAG, "env", false);
VERIFY_NON_NULL_RET(context, TAG, "context", false);