1 /* ****************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 ******************************************************************/
23 * This file contains the APIs for BT LE communications.
25 #ifndef CA_LE_UTILS_H_
26 #define CA_LE_UTILS_H_
29 #include "cathreadpool.h"
30 #include "cagattservice.h"
31 #include "uarraylist.h"
39 #define CA_LE_AUTO_CONNECT_FLAG 1
40 #define CA_LE_CONNECTION_STATE 2
41 #define CA_LE_SEND_STATE 3
42 #define CA_LE_DESCRIPTOR_FOUND 4
45 static const char OIC_GATT_SERVICE_UUID[] = CA_GATT_SERVICE_UUID;
46 static const char OIC_GATT_CHARACTERISTIC_REQUEST_UUID[] = CA_GATT_REQUEST_CHRC_UUID;
47 static const char OIC_GATT_CHARACTERISTIC_RESPONSE_UUID[] = CA_GATT_RESPONSE_CHRC_UUID;
48 static const char OIC_GATT_CHARACTERISTIC_CONFIG_UUID[] = "00002902-0000-1000-8000-00805f9b34fb";
50 static const char CLASSPATH_BT_PROFILE[] = "android/bluetooth/BluetoothProfile";
51 static const char CLASSPATH_BT_GATT[] = "android/bluetooth/BluetoothGatt";
52 static const char CLASSPATH_BT_ADAPTER[] = "android/bluetooth/BluetoothAdapter";
53 static const char CLASSPATH_BT_DEVICE[] = "android/bluetooth/BluetoothDevice";
54 static const char CLASSPATH_BT_UUID[] = "java/util/UUID";
55 static const char CLASSPATH_LE_SCANNER[] = "android/bluetooth/le/BluetoothLeScanner";
56 static const char CLASSPATH_LE_SCANSETTINGS[] = "android/bluetooth/le/ScanSettings";
58 static const char METHODID_OBJECTNONPARAM[] = "()Landroid/bluetooth/BluetoothAdapter;";
59 static const char METHODID_BT_DEVICE[] = "()Landroid/bluetooth/BluetoothDevice;";
60 static const char METHODID_BT_REMOTE_DEVICE[] = "(Ljava/lang/String;)Landroid/bluetooth/BluetoothDevice;";
62 static const jint GATT_PROFILE = 7;
63 static const jint GATT_SUCCESS = 0;
65 static const jint BOND_BONDED = 12;
66 static const jint BOND_BONDING = 11;
67 static const jint BOND_NONE = 10;
69 static const uint16_t STATE_CONNECTED = 3;
70 static const uint16_t STATE_SERVICE_CONNECTED = 2;
71 static const uint16_t STATE_DISCONNECTED = 1;
73 static const uint16_t GATT_ERROR = 133;
75 static const uint16_t STATE_SEND_NONE = 1;
76 static const uint16_t STATE_SEND_SUCCESS = 2;
77 static const uint16_t STATE_SEND_FAIL = 3;
78 static const uint16_t STATE_SENDING = 4;
79 static const uint16_t STATE_SEND_PREPARING = 5;
80 static const uint16_t STATE_SEND_MTU_NEGO_SUCCESS = 6;
83 * get uuid(jni object) from uuid(character).
84 * @param[in] env JNI interface pointer.
85 * @param[in] uuid uuid(character).
86 * @return uuid(jni object).
88 jobject CALEGetUuidFromString(JNIEnv *env, const char* uuid);
91 * get parcel uuid object.
92 * @param[in] env JNI interface pointer.
93 * @param[in] uuid uuid (jni object).
94 * @return parcel uuid object.
96 jobject CALEGetParcelUuid(JNIEnv *env, jobject uuid);
99 * get parcel uuid object from uuid string value.
100 * @param[in] env JNI interface pointer.
101 * @param[in] uuid uuid (const char*).
102 * @return parcel uuid object.
104 jobject CALEGetParcelUuidFromString(JNIEnv *env, const char* uuid);
107 * get address from a local device.
108 * @param[in] env JNI interface pointer.
109 * @return local address.
111 jstring CALEGetLocalDeviceAddress(JNIEnv *env);
115 * @param[in] env JNI interface pointer.
116 * @return bonded list.
118 jobjectArray CALEGetBondedDevices(JNIEnv *env);
121 * get constants information of bluetooth state-on.
122 * @param[in] env JNI interface pointer.
123 * @return constants information of bluetooth state-on.
125 jint CALEGetBTStateOnInfo(JNIEnv *env);
128 * check this device can be supported as BLE client or server.
129 * @param[in] env JNI interface pointer.
130 * @param[in] level Android API Level to support.
131 * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h).
133 CAResult_t CALECheckPlatformVersion(JNIEnv *env, uint16_t level);
136 * get constants information of android.os.Build.VERSION.SDK_INT.
137 * @param[in] env JNI interface pointer.
138 * @return constants information of android.os.Build.VERSION.SDK_INT.
140 jint CALEGetBuildVersion(JNIEnv *env);
143 * get constants information of android.os.Build.VERSION_CODES.[VersionName].
144 * @param[in] env JNI interface pointer.
145 * @param[in] versionName version name (.., KITKAT, LOLLIPOP, ..).
146 * @return constants information of android.os.Build.VERSION_CODES.[VersionName].
148 jint CALEGetBuildVersionCodeForName(JNIEnv *env, const char* versionName);
151 * get bluetooth adapter state information.
152 * @param[in] env JNI interface pointer.
153 * @return JNI_TRUE if the local adapter is turned on.
155 jboolean CALEIsEnableBTAdapter(JNIEnv *env);
158 * get address from remote device.
159 * @param[in] env JNI interface pointer.
160 * @param[in] bluetoothDevice bluetooth device object.
161 * @return remote address.
163 jstring CALEGetAddressFromBTDevice(JNIEnv *env, jobject bluetoothDevice);
166 * get value from selected constants.
167 * @param[in] env JNI interface pointer.
168 * @param[in] classType class type
169 * @param[in] name constants name to get.
170 * @return remote address.
172 jint CALEGetConstantsValue(JNIEnv *env, const char* classType, const char* name);
175 * get bluetooth device object from bluetooth adapter.
176 * @param[in] env JNI interface pointer.
177 * @param[in] address bluetooth address.
178 * @return bluetooth device object.
180 jobject CALEGetRemoteDevice(JNIEnv *env, jstring address);
183 * get address from gatt profile object.
184 * @param[in] env JNI interface pointer.
185 * @param[in] gatt gatt profile object.
186 * @return LE address.
188 jstring CALEGetAddressFromGatt(JNIEnv *env, jobject gatt);
194 #endif /* CA_LE_UTILS_H_ */