#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")
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;
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;
}
"()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)
{
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");
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)
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;
}
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");
}
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");
}
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");
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
{
}
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");
}
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");
}
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");
}
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);
}
* adapter common
*/
-CAResult_t CAStartBleGattServer()
+CAResult_t CAStartLEGattServer()
{
OIC_LOG(DEBUG, TAG, "IN");
return CA_STATUS_OK;
}
-CAResult_t CAStopBleGattServer()
+CAResult_t CAStopLEGattServer()
{
OIC_LOG(DEBUG, TAG, "IN");
return CA_STATUS_OK;
}
-void CATerminateBleGattServer()
+void CATerminateLEGattServer()
{
OIC_LOG(DEBUG, TAG, "IN");
OIC_LOG(DEBUG, TAG, "OUT");
}
-void CASetBLEReqRespServerCallback(CABLEServerDataReceivedCallback callback)
+void CASetLEReqRespServerCallback(CABLEServerDataReceivedCallback callback)
{
OIC_LOG(DEBUG, TAG, "IN");
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");
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");