X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fsrc%2Fbt_le_adapter%2Fandroid%2Fcaleserver.c;h=e9680c529b457b43ec846d9ebdea5de9d7e1e8a3;hb=8c01dff2c5bc5496f7dc1632c498943ec6ecb015;hp=dec140904aa360799ee9e12f449b40e631e39f06;hpb=935fdb9b67b6c10d007e652e9e2e028fd6ccfe09;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c b/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c index dec1409..e9680c5 100644 --- a/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c +++ b/resource/csdk/connectivity/src/bt_le_adapter/android/caleserver.c @@ -33,7 +33,7 @@ #include "cathreadpool.h" #include "camutex.h" #include "uarraylist.h" -#include "org_iotivity_jar_caleserverinterface.h" +#include "org_iotivity_ca_CaLeServerInterface.h" #define TAG PCF("CA_LE_SERVER") @@ -44,6 +44,8 @@ static jobject g_bluetoothGattServerCallback = NULL; static jobject g_leAdvertiseCallback = NULL; static CAPacketReceiveCallback g_packetReceiveCallback = NULL; +static CABLEErrorHandleCallback g_serverErrorCallback; + static u_arraylist_t *g_connectedDeviceList = NULL; static ca_thread_pool_t g_threadPoolHandle = NULL; @@ -99,10 +101,10 @@ CAResult_t CALEServerCreateJniInterfaceObject() isAttached = true; } - jclass jni_LEInterface = (*env)->FindClass(env, "org/iotivity/jar/caleserverinterface"); + jclass jni_LEInterface = (*env)->FindClass(env, "org/iotivity/ca/CaLeServerInterface"); if (!jni_LEInterface) { - OIC_LOG(ERROR, TAG, "Could not get caleserverinterface class"); + OIC_LOG(ERROR, TAG, "Could not get CaLeServerInterface class"); goto exit; } @@ -110,12 +112,12 @@ CAResult_t CALEServerCreateJniInterfaceObject() "()V"); if (!LeInterfaceConstructorMethod) { - OIC_LOG(ERROR, TAG, "Could not get caleserverinterface constructor method"); + OIC_LOG(ERROR, TAG, "Could not get CaLeServerInterface constructor method"); goto exit; } (*env)->NewObject(env, jni_LEInterface, LeInterfaceConstructorMethod, g_context); - OIC_LOG(DEBUG, TAG, "Create instance for caleserverinterface"); + OIC_LOG(DEBUG, TAG, "Create instance for CaLeServerInterface"); if (isAttached) { @@ -1296,6 +1298,44 @@ CAResult_t CALEServerDisconnect(JNIEnv *env, jobject bluetoothDevice) return CA_STATUS_OK; } +CAResult_t CALEServerGattClose(JNIEnv *env, jobject bluetoothGattServer) +{ + // GATT CLOSE + OIC_LOG(DEBUG, TAG, "GattServer Close"); + VERIFY_NON_NULL(bluetoothGattServer, TAG, "bluetoothGattServer is null"); + VERIFY_NON_NULL(env, TAG, "env is null"); + + // get BluetoothGatt class + OIC_LOG(DEBUG, TAG, "get BluetoothGatt class"); + jclass jni_cid_BluetoothGatt = (*env)->FindClass(env, "android/bluetooth/BluetoothGattServer"); + if (!jni_cid_BluetoothGatt) + { + OIC_LOG(ERROR, TAG, "jni_cid_BluetoothGatt is null"); + return CA_STATUS_FAILED; + } + + jmethodID jni_mid_closeGatt = (*env)->GetMethodID(env, jni_cid_BluetoothGatt, "close", "()V"); + if (!jni_mid_closeGatt) + { + OIC_LOG(ERROR, TAG, "jni_mid_closeGatt is null"); + return CA_STATUS_OK; + } + + // call disconnect gatt method + OIC_LOG(DEBUG, TAG, "request to close GATT"); + (*env)->CallVoidMethod(env, bluetoothGattServer, jni_mid_closeGatt); + + if ((*env)->ExceptionCheck(env)) + { + OIC_LOG(ERROR, TAG, "closeGATT has failed"); + (*env)->ExceptionDescribe(env); + (*env)->ExceptionClear(env); + return CA_STATUS_FAILED; + } + + return CA_STATUS_OK; +} + CAResult_t CALEServerSend(JNIEnv *env, jobject bluetoothDevice, jbyteArray responseData) { OIC_LOG(DEBUG, TAG, "IN - CALEServerSend"); @@ -1616,7 +1656,7 @@ CAResult_t CALEServerStartMulticastServer() ret = CALEServerStartAdvertise(env, g_leAdvertiseCallback); if (CA_STATUS_OK != ret) { - OIC_LOG(ERROR, TAG, "CALEServerSendMulticastMessageImpl has failed"); + OIC_LOG(ERROR, TAG, "CALEServerStartAdvertise has failed"); } if (isAttached) @@ -1663,7 +1703,7 @@ CAResult_t CALEServerStopMulticastServer() CAResult_t ret = CALEServerStopAdvertise(env, g_leAdvertiseCallback); if (CA_STATUS_OK != ret) { - OIC_LOG(ERROR, TAG, "CALEServerSendMulticastMessageImpl has failed"); + OIC_LOG(ERROR, TAG, "CALEServerStopAdvertise has failed"); } g_isStartServer = false; @@ -2041,10 +2081,10 @@ CAResult_t CALEServerReorderinglist(uint32_t index) } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CARegisterLeGattServerCallback(JNIEnv *env, jobject obj, +Java_org_iotivity_ca_CaLeServerInterface_caLeRegisterGattServerCallback(JNIEnv *env, jobject obj, jobject callback) { - OIC_LOG(DEBUG, TAG, "caleserverinterface - Register Le Gatt Server Callback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface - Register Le Gatt Server Callback"); VERIFY_NON_NULL_VOID(env, TAG, "env is null"); VERIFY_NON_NULL_VOID(callback, TAG, "callback is null"); @@ -2052,11 +2092,11 @@ Java_org_iotivity_jar_caleserverinterface_CARegisterLeGattServerCallback(JNIEnv } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CARegisterBluetoothLeAdvertiseCallback(JNIEnv *env, - jobject obj, - jobject callback) +Java_org_iotivity_ca_CaLeServerInterface_caLeRegisterBluetoothLeAdvertiseCallback(JNIEnv *env, + jobject obj, + jobject callback) { - OIC_LOG(DEBUG, TAG, "caleserverinterface - Register Le Advertise Callback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface - Register Le Advertise Callback"); VERIFY_NON_NULL_VOID(env, TAG, "env is null"); VERIFY_NON_NULL_VOID(callback, TAG, "callback is null"); @@ -2064,10 +2104,10 @@ Java_org_iotivity_jar_caleserverinterface_CARegisterBluetoothLeAdvertiseCallback } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerConnectionStateChangeCallback( +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerConnectionStateChangeCallback( JNIEnv *env, jobject obj, jobject device, jint status, jint newState) { - OIC_LOG(DEBUG, TAG, "caleserverinterface - Gatt Server ConnectionStateChange Callback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface - Gatt Server ConnectionStateChange Callback"); OIC_LOG_V(DEBUG, TAG, "New connection State: %d", newState); VERIFY_NON_NULL_VOID(env, TAG, "env is null"); @@ -2133,6 +2173,11 @@ Java_org_iotivity_jar_caleserverinterface_CALeGattServerConnectionStateChangeCal else if (newState == jni_int_state_disconnected) { OIC_LOG(DEBUG, TAG, "LE DISCONNECTED"); + CAResult_t res = CALEServerGattClose(env, g_bluetoothGattServer); + if (CA_STATUS_OK != res) + { + OIC_LOG(ERROR, TAG, "CALEServerGattClose has failed"); + } } else { @@ -2142,20 +2187,20 @@ Java_org_iotivity_jar_caleserverinterface_CALeGattServerConnectionStateChangeCal } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerServiceAddedCallback(JNIEnv *env, +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerServiceAddedCallback(JNIEnv *env, jobject obj, jint status, jobject gattService) { - OIC_LOG_V(DEBUG, TAG, "caleserverinterface - Gatt Service Added Callback(%d)", status); + OIC_LOG_V(DEBUG, TAG, "CaLeServerInterface - Gatt Service Added Callback(%d)", status); } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerCharacteristicReadRequestCallback( +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerCharacteristicReadRequestCallback( JNIEnv *env, jobject obj, jobject device, jint requestId, jint offset, jobject characteristic, jbyteArray data) { - OIC_LOG(DEBUG, TAG, "caleserverinterface - Gatt Server Characteristic Read Request Callback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface - Gatt Server Characteristic Read Request Callback"); VERIFY_NON_NULL_VOID(env, TAG, "env is null"); VERIFY_NON_NULL_VOID(device, TAG, "device is null"); @@ -2166,12 +2211,12 @@ Java_org_iotivity_jar_caleserverinterface_CALeGattServerCharacteristicReadReques } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerCharacteristicWriteRequestCallback( +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerCharacteristicWriteRequestCallback( JNIEnv *env, jobject obj, jobject device, jint requestId, jobject characteristic, jbyteArray data, jboolean preparedWrite, jboolean responseNeeded, jint offset, jbyteArray value) { - OIC_LOG(DEBUG, TAG, "caleserverinterface - Gatt Server Characteristic Write Request Callback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface - Gatt Server Characteristic Write Request Callback"); VERIFY_NON_NULL_VOID(env, TAG, "env is null"); VERIFY_NON_NULL_VOID(device, TAG, "device is null"); VERIFY_NON_NULL_VOID(value, TAG, "value is null"); @@ -2227,28 +2272,28 @@ Java_org_iotivity_jar_caleserverinterface_CALeGattServerCharacteristicWriteReque } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerDescriptorReadRequestCallback( +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerDescriptorReadRequestCallback( JNIEnv *env, jobject obj, jobject device, jint requestId, jint offset, jobject descriptor) { - OIC_LOG(DEBUG, TAG, "caleserverinterface_CALeGattServerDescriptorReadRequestCallback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface_CALeGattServerDescriptorReadRequestCallback"); } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerDescriptorWriteRequestCallback( +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerDescriptorWriteRequestCallback( JNIEnv *env, jobject obj, jobject device, jint requestId, jobject descriptor, jboolean preparedWrite, jboolean responseNeeded, jint offset, jbyteArray value) { - OIC_LOG(DEBUG, TAG, "caleserverinterface_CALeGattServerDescriptorWriteRequestCallback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface_CALeGattServerDescriptorWriteRequestCallback"); } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerExecuteWriteCallback(JNIEnv *env, +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerExecuteWriteCallback(JNIEnv *env, jobject obj, jobject device, jint requestId, jboolean execute) { - OIC_LOG(DEBUG, TAG, "caleserverinterface_CALeGattServerExecuteWriteCallback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface_CALeGattServerExecuteWriteCallback"); VERIFY_NON_NULL_VOID(env, TAG, "env is null"); VERIFY_NON_NULL_VOID(device, TAG, "device is null"); @@ -2256,27 +2301,27 @@ Java_org_iotivity_jar_caleserverinterface_CALeGattServerExecuteWriteCallback(JNI } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeGattServerNotificationSentCallback(JNIEnv *env, +Java_org_iotivity_ca_CaLeServerInterface_caLeGattServerNotificationSentCallback(JNIEnv *env, jobject obj, jobject device, jint status) { - OIC_LOG(DEBUG, TAG, "caleserverinterface - Gatt Server Notification Sent Callback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface - Gatt Server Notification Sent Callback"); } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeAdvertiseStartSuccessCallback( +Java_org_iotivity_ca_CaLeServerInterface_caLeAdvertiseStartSuccessCallback( JNIEnv *env, jobject obj, jobject settingsInEffect) { - OIC_LOG(DEBUG, TAG, "caleserverinterface - LE Advertise Start Success Callback"); + OIC_LOG(DEBUG, TAG, "CaLeServerInterface - LE Advertise Start Success Callback"); } JNIEXPORT void JNICALL -Java_org_iotivity_jar_caleserverinterface_CALeAdvertiseStartFailureCallback(JNIEnv *env, +Java_org_iotivity_ca_CaLeServerInterface_caLeAdvertiseStartFailureCallback(JNIEnv *env, jobject obj, jint errorCode) { - OIC_LOG_V(ERROR, TAG, "caleserverinterface - LE Advertise Start Failure Callback(%)", + OIC_LOG_V(ERROR, TAG, "CaLeServerInterface - LE Advertise Start Failure Callback(%)", errorCode); } @@ -2284,7 +2329,7 @@ Java_org_iotivity_jar_caleserverinterface_CALeAdvertiseStartFailureCallback(JNIE * adapter common */ -CAResult_t CAStartBleGattServer() +CAResult_t CAStartLEGattServer() { OIC_LOG(DEBUG, TAG, "IN"); @@ -2311,7 +2356,7 @@ CAResult_t CAStartBleGattServer() return CA_STATUS_OK; } -CAResult_t CAStopBleGattServer() +CAResult_t CAStopLEGattServer() { OIC_LOG(DEBUG, TAG, "IN"); @@ -2319,7 +2364,7 @@ CAResult_t CAStopBleGattServer() return CA_STATUS_OK; } -void CATerminateBleGattServer() +void CATerminateLEGattServer() { OIC_LOG(DEBUG, TAG, "IN"); @@ -2329,7 +2374,7 @@ void CATerminateBleGattServer() OIC_LOG(DEBUG, TAG, "OUT"); } -void CASetBLEReqRespServerCallback(CABLEServerDataReceivedCallback callback) +void CASetLEReqRespServerCallback(CABLEServerDataReceivedCallback callback) { OIC_LOG(DEBUG, TAG, "IN"); @@ -2340,9 +2385,15 @@ void CASetBLEReqRespServerCallback(CABLEServerDataReceivedCallback callback) OIC_LOG(DEBUG, TAG, "OUT"); } +void CASetBLEServerErrorHandleCallback(CABLEErrorHandleCallback callback) +{ + g_serverErrorCallback = callback; +} + CAResult_t CAUpdateCharacteristicsToGattClient(const char* address, const char *charValue, const uint32_t charValueLen) { + CAResult_t result = CA_SEND_FAILED; OIC_LOG(DEBUG, TAG, "IN"); VERIFY_NON_NULL(address, TAG, "env is null"); VERIFY_NON_NULL(charValue, TAG, "device is null"); @@ -2350,28 +2401,28 @@ CAResult_t CAUpdateCharacteristicsToGattClient(const char* address, const char * if (address) { OIC_LOG(DEBUG, TAG, "CALEServerSendUnicastData"); - CALEServerSendUnicastMessage(address, charValue, charValueLen); + result = CALEServerSendUnicastMessage(address, charValue, charValueLen); } OIC_LOG(DEBUG, TAG, "OUT"); - return CA_STATUS_OK; + return result; } CAResult_t CAUpdateCharacteristicsToAllGattClients(const char *charValue, - const uint32_t charValueLen) + uint32_t charValueLen) { OIC_LOG(DEBUG, TAG, "IN"); VERIFY_NON_NULL(charValue, TAG, "device is null"); OIC_LOG(DEBUG, TAG, "CALEServerSendMulticastMessage"); - CALEServerSendMulticastMessage(charValue, charValueLen); + CAResult_t result = CALEServerSendMulticastMessage(charValue, charValueLen); OIC_LOG(DEBUG, TAG, "OUT"); - return CA_STATUS_OK; + return result; } -void CASetBleServerThreadPoolHandle(ca_thread_pool_t handle) +void CASetLEServerThreadPoolHandle(ca_thread_pool_t handle) { OIC_LOG(DEBUG, TAG, "IN");