2 * //******************************************************************
4 * // Copyright 2015 Intel Corporation.
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * // Licensed under the Apache License, Version 2.0 (the "License");
9 * // you may not use this file except in compliance with the License.
10 * // You may obtain a copy of the License at
12 * // http://www.apache.org/licenses/LICENSE-2.0
14 * // Unless required by applicable law or agreed to in writing, software
15 * // distributed under the License is distributed on an "AS IS" BASIS,
16 * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * // See the License for the specific language governing permissions and
18 * // limitations under the License.
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
26 #include "cainterface.h"
27 #include "JniCaInterface.h"
28 #include "cautilinterface.h"
31 #define LOG_TAG "JNI_CA_INTERFACE"
32 #define LOGI(...) OIC_LOG_V(OC_LOG_INFO, LOG_TAG, __VA_ARGS__)
33 #define LOGE(...) OIC_LOG_V(OC_LOG_ERROR, LOG_TAG, __VA_ARGS__)
35 static jobject g_foundDeviceListenerObject = NULL;
36 static jobject g_listenerObject = NULL;
37 static JavaVM *g_jvm = NULL;
39 JNIEXPORT jint JNI_OnLoad(JavaVM *jvm, void *reserved)
41 LOGI("CaInterface_initialize");
43 CANativeJNISetJavaVM(jvm);
45 return JNI_VERSION_1_6;
48 void JNI_OnUnload(JavaVM *jvm, void *reserved)
54 JNIEXPORT void JNICALL
55 Java_org_iotivity_ca_CaInterface_initialize
56 (JNIEnv *env, jclass clazz, jobject activity, jobject context)
58 LOGI("CaInterface_initialize");
60 CANativeSetActivity(env, activity);
61 CANativeJNISetContext(env, context);
64 JNIEXPORT void JNICALL
65 Java_org_iotivity_ca_CaInterface_initialize
66 (JNIEnv *env, jclass clazz)
68 LOGI("CaInterface_initialize");
72 void CAManagerConnectionStateChangedCB(CATransportAdapter_t adapter,
73 const char *remote_address,
76 LOGI("Callback - CAManagerConnectionStateChangedCB : type(%d), address(%s), connected(%d)",
77 adapter, remote_address, connected);
79 if (!g_listenerObject)
81 LOGE("g_listener is NULL, cannot have callback");
85 bool isAttached = false;
87 jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6);
90 LOGI("AttachCurrentThread will be called for JNIEnv pointer");
91 res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL);
95 LOGE("AttachCurrentThread has failed");
101 jclass jni_cls_listener = (*env)->GetObjectClass(env, g_listenerObject);
102 if (!jni_cls_listener)
104 LOGE("could not get jni_cls_listener");
108 jmethodID jni_mid_listener = (*env)->GetMethodID(env, jni_cls_listener,
109 "onConnectionStateChanged",
110 "(Lorg/iotivity/base/OcConnectivityType;"
111 "Ljava/lang/String;Z)V");
112 if (!jni_mid_listener)
114 LOGE("could not get Method ID");
118 jstring jni_address = (*env)->NewStringUTF(env, remote_address);
121 LOGE("jni_address is null");
125 jclass jni_cls_enum = (*env)->FindClass(env, "org/iotivity/base/OcConnectivityType");
128 LOGE("could not get jni_cls_enum");
132 jmethodID jni_mid_enum = (*env)->GetStaticMethodID(env, jni_cls_enum, "getInstance",
133 "(I)Lorg/iotivity/base/OcConnectivityType;");
136 LOGE("could not get Method ID (getInstance)");
140 jobject jni_adaptertype = (*env)->CallStaticObjectMethod(env, jni_cls_enum,
141 jni_mid_enum, adapter);
142 (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
143 jni_adaptertype, jni_address,
144 (jboolean)connected);
149 (*g_jvm)->DetachCurrentThread(g_jvm);
152 LOGI("OUT - CAManagerConnectionStateChangedCB");
155 void CAManagerAdapterStateChangedCB(CATransportAdapter_t adapter, bool enabled)
157 LOGI("Callback - CAManagerAdapterStateChangedCB : type(%d), enabled(%d)",
160 if (!g_listenerObject)
162 LOGE("g_listener is NULL, cannot have callback");
166 bool isAttached = false;
168 jint res = (*g_jvm)->GetEnv(g_jvm, (void**) &env, JNI_VERSION_1_6);
171 LOGI("AttachCurrentThread will be called for JNIEnv pointer");
172 res = (*g_jvm)->AttachCurrentThread(g_jvm, &env, NULL);
176 LOGE("AttachCurrentThread has failed");
182 jclass jni_cls_listener = (*env)->GetObjectClass(env, g_listenerObject);
183 if (!jni_cls_listener)
185 LOGE("could not get jni_cls_listener");
189 jmethodID jni_mid_listener = (*env)->GetMethodID(env, jni_cls_listener,
190 "onAdapterStateChanged",
191 "(Lorg/iotivity/base/OcConnectivityType;Z)V");
192 if (!jni_mid_listener)
194 LOGE("could not get Method ID");
198 jclass jni_cls_enum = (*env)->FindClass(env, "org/iotivity/base/OcConnectivityType");
201 LOGE("could not get jni_cls_enum");
205 jmethodID jni_mid_enum = (*env)->GetStaticMethodID(env, jni_cls_enum, "getInstance",
206 "(I)Lorg/iotivity/base/OcConnectivityType;");
209 LOGE("could not get Method ID (getInstance)");
213 jobject jni_adaptertype = (*env)->CallStaticObjectMethod(env, jni_cls_enum,
214 jni_mid_enum, adapter);
216 (*env)->CallVoidMethod(env, g_listenerObject, jni_mid_listener,
217 jni_adaptertype, (jboolean)enabled);
222 (*g_jvm)->DetachCurrentThread(g_jvm);
224 LOGI("OUT - CAManagerAdapterStateChangedCB");
228 JNIEXPORT void JNICALL
229 Java_org_iotivity_ca_CaInterface_caManagerInitialize(JNIEnv *env, jclass clazz,
230 jobject context, jobject listener)
232 LOGI("CaManagere_initialize");
234 CAUtilClientInitialize(env, g_jvm, context);
236 g_listenerObject = (*env)->NewGlobalRef(env, listener);
238 CARegisterNetworkMonitorHandler(CAManagerAdapterStateChangedCB,
239 CAManagerConnectionStateChangedCB);
242 JNIEXPORT void JNICALL
243 Java_org_iotivity_ca_CaInterface_caManagerInitialize(JNIEnv *env, jclass clazz,
246 LOGI("CaManagere_initialize");
248 g_listenerObject = (*env)->NewGlobalRef(env, listener);
250 CARegisterNetworkMonitorHandler(CAManagerAdapterStateChangedCB,
251 CAManagerConnectionStateChangedCB);
255 JNIEXPORT void JNICALL
256 Java_org_iotivity_ca_CaInterface_caManagerTerminate(JNIEnv *env, jclass clazz)
258 LOGI("CaManager_terminate");
260 CAUtilClientTerminate(env);
262 if (g_listenerObject)
264 (*env)->DeleteGlobalRef(env, g_listenerObject);
265 g_listenerObject = NULL;
269 JNIEXPORT void JNICALL
270 Java_org_iotivity_ca_CaInterface_caManagerSetAutoConnectionDeviceInfo(JNIEnv *env,
274 LOGI("CaManager_setAutoConnectionDeviceInfo");
276 const char* address = (*env)->GetStringUTFChars(env, jaddress, NULL);
279 LOGE("address is null");
283 CASetAutoConnectionDeviceInfo(address);
285 (*env)->ReleaseStringUTFChars(env, jaddress, address);
288 JNIEXPORT void JNICALL
289 Java_org_iotivity_ca_CaInterface_caManagerUnsetAutoConnectionDeviceInfo(JNIEnv *env,
293 LOGI("CaManager_unsetAutoConnectionDeviceInfo");
295 const char* address = (*env)->GetStringUTFChars(env, jaddress, NULL);
298 LOGE("address is null");
302 CAUnsetAutoConnectionDeviceInfo(address);
304 (*env)->ReleaseStringUTFChars(env, jaddress, address);
308 JNIEXPORT void JNICALL
309 Java_org_iotivity_ca_CaInterface_caBtPairingInitialize(JNIEnv *env, jclass clazz,
310 jobject context, jobject listener)
312 LOGI("caBtPairingInitialize");
315 CAUtilClientInitialize(env, g_jvm, context);
317 g_foundDeviceListenerObject = (*env)->NewGlobalRef(env, listener);
318 CAUtilSetFoundDeviceListener(g_foundDeviceListenerObject);
321 JNIEXPORT void JNICALL
322 Java_org_iotivity_ca_CaInterface_caBtPairingInitialize(JNIEnv *env, jclass clazz,
325 LOGI("caBtPairingInitialize");
328 CAUtilClientInitialize(env, g_jvm);
330 g_foundDeviceListenerObject = (*env)->NewGlobalRef(env, listener);
331 CAUtilSetFoundDeviceListener(g_foundDeviceListenerObject);
335 JNIEXPORT void JNICALL
336 Java_org_iotivity_ca_CaInterface_caBtPairingTerminate(JNIEnv *env, jclass clazz)
338 LOGI("caBtPairingTerminate");
341 if (g_foundDeviceListenerObject)
343 (*env)->DeleteGlobalRef(env, g_foundDeviceListenerObject);
347 JNIEXPORT void JNICALL
348 Java_org_iotivity_ca_CaInterface_caBtPairingStartScan(JNIEnv *env, jclass clazz)
350 LOGI("caBtPairingStartScan");
352 CAUtilStartScan(env);
355 JNIEXPORT void JNICALL
356 Java_org_iotivity_ca_CaInterface_caBtPairingStopScan(JNIEnv *env, jclass clazz)
358 LOGI("caBtPairingStopScan");
363 JNIEXPORT void JNICALL
364 Java_org_iotivity_ca_CaInterface_caBtPairingCreateBond(JNIEnv *env, jclass clazz, jobject device)
366 LOGI("caBtPairingCreateBond");
368 CAUtilCreateBond(env, device);