com_android_bluetooth_gatt.cpp revision 27bd5f277ccf471f2fa9cd9151a2a226b51bc825
103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/* 203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Copyright (C) 2013 The Android Open Source Project 303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * 403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Licensed under the Apache License, Version 2.0 (the "License"); 503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * you may not use this file except in compliance with the License. 603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * You may obtain a copy of the License at 703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * 803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * http://www.apache.org/licenses/LICENSE-2.0 903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * 1003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Unless required by applicable law or agreed to in writing, software 1103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * distributed under the License is distributed on an "AS IS" BASIS, 1203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * See the License for the specific language governing permissions and 1403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * limitations under the License. 1503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 1603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 18c7f38d71d51e3554ab03ffc4000ee444a1517d55Mike Lockwood#define LOG_TAG "BtGatt.JNI" 1903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 20c7f38d71d51e3554ab03ffc4000ee444a1517d55Mike Lockwood#define LOG_NDEBUG 0 2103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 2203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define CHECK_CALLBACK_ENV \ 2303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!checkCallbackThread()) { \ 2403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Callback: '%s' is not called on the correct thread", __FUNCTION__);\ 2503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; \ 2603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 2703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 2803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#include "com_android_bluetooth.h" 2903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#include "hardware/bt_gatt.h" 3003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#include "utils/Log.h" 3103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#include "android_runtime/AndroidRuntime.h" 3203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 3303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#include <string.h> 3403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 3503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#include <cutils/log.h> 3603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define info(fmt, ...) ALOGI ("%s(L%d): " fmt,__FUNCTION__, __LINE__, ## __VA_ARGS__) 3703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define debug(fmt, ...) ALOGD ("%s(L%d): " fmt,__FUNCTION__, __LINE__, ## __VA_ARGS__) 3803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define warn(fmt, ...) ALOGW ("WARNING: %s(L%d): " fmt "##",__FUNCTION__, __LINE__, ## __VA_ARGS__) 3903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define error(fmt, ...) ALOGE ("ERROR: %s(L%d): " fmt "##",__FUNCTION__, __LINE__, ## __VA_ARGS__) 4003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define asrt(s) if(!(s)) ALOGE ("%s(L%d): ASSERT %s failed! ##",__FUNCTION__, __LINE__, #s) 4103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 4203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define BD_ADDR_LEN 6 4303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 4403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define UUID_PARAMS(uuid_ptr) \ 4503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uuid_lsb(uuid_ptr), uuid_msb(uuid_ptr) 4603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 477f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach#define GATT_ID_PARAMS(attr_ptr) \ 487f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach attr_ptr->inst_id, \ 497f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach UUID_PARAMS((&attr_ptr->uuid)) 5003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 5103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta#define SRVC_ID_PARAMS(srvc_ptr) \ 5203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta (srvc_ptr->is_primary ? \ 5303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta BTGATT_SERVICE_TYPE_PRIMARY : BTGATT_SERVICE_TYPE_SECONDARY), \ 547f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach GATT_ID_PARAMS((&srvc_ptr->id)) 5503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 5603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 5703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void set_uuid(uint8_t* uuid, jlong uuid_msb, jlong uuid_lsb) 5803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 5903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (int i = 0; i != 8; ++i) 6003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 6103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uuid[i] = (uuid_lsb >> (8 * i)) & 0xFF; 6203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uuid[i + 8] = (uuid_msb >> (8 * i)) & 0xFF; 6303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 6403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 6503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 6603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic uint64_t uuid_lsb(bt_uuid_t* uuid) 6703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 6803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint64_t lsb = 0; 6903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int i; 7003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 7103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (i = 7; i >= 0; i--) 7203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 7303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta lsb <<= 8; 7403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta lsb |= uuid->uu[i]; 7503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 7603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 7703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return lsb; 7803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 7903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 8003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic uint64_t uuid_msb(bt_uuid_t* uuid) 8103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 8203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint64_t msb = 0; 8303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int i; 8403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 8503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (i = 15; i >= 8; i--) 8603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 8703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta msb <<= 8; 8803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta msb |= uuid->uu[i]; 8903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 9003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 9103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return msb; 9203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 9303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 9403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void bd_addr_str_to_addr(const char* str, uint8_t *bd_addr) 9503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 9603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int i; 9703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c; 9803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 9903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta c = *str++; 10003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (i = 0; i < BD_ADDR_LEN; i++) 10103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 10203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (c >= '0' && c <= '9') 10303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr[i] = c - '0'; 10403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta else if (c >= 'a' && c <= 'z') 10503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr[i] = c - 'a' + 10; 10603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta else // (c >= 'A' && c <= 'Z') 10703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr[i] = c - 'A' + 10; 10803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta c = *str++; 11003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (c != ':') 11103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 11203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr[i] <<= 4; 11303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (c >= '0' && c <= '9') 11403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr[i] |= c - '0'; 11503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta else if (c >= 'a' && c <= 'z') 11603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr[i] |= c - 'a' + 10; 11703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta else // (c >= 'A' && c <= 'Z') 11803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr[i] |= c - 'A' + 10; 11903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta c = *str++; 12103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 12203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta c = *str++; 12403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 12503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 12603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void jstr2bdaddr(JNIEnv* env, bt_bdaddr_t *bda, jstring address) 12803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 12903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta const char* c_bda = env->GetStringUTFChars(address, NULL); 13003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (c_bda != NULL && bda != NULL && strlen(c_bda) == 17) 13103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 13203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr_str_to_addr(c_bda, bda->address); 13303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseStringUTFChars(address, c_bda); 13403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 13503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 13603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 13703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battanamespace android { 13803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 13903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 14003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Client callback methods 14103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 14203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 14303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onClientRegistered; 14403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onScanResult; 14503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onConnected; 14603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onDisconnected; 14703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onReadCharacteristic; 14803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onWriteCharacteristic; 14903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onExecuteCompleted; 15003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onSearchCompleted; 15103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onSearchResult; 15203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onReadDescrExtProp; 15303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onReadDescriptor; 15403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onWriteDescriptor; 15503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onNotify; 15603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onGetCharacteristic; 15703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onGetDescriptor; 15803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onGetIncludedService; 15903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onRegisterForNotifications; 16003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onReadRemoteRssi; 16124dce60783d85fbf49f550203a383b2f4a171a52Wei Wangstatic jmethodID method_onAdvertiseCallback; 162662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbachstatic jmethodID method_onConfigureMTU; 1631a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onScanFilterConfig; 1642b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onScanFilterParamsConfigured; 1652b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onScanFilterEnableDisabled; 1661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvEnable; 1671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvUpdate; 1681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvSetAdvData; 1691a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvDisable; 170afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachstatic jmethodID method_onClientCongestion; 1712b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanStorageConfigured; 1722b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanStartStopped; 1732b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanReports; 1742b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanThresholdCrossed; 1752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onTrackAdvFoundLost; 17603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 17703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 17803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Server callback methods 17903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 18003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServerRegistered; 18103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onClientConnected; 18203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceAdded; 18303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onIncludedServiceAdded; 18403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onCharacteristicAdded; 18503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onDescriptorAdded; 18603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceStarted; 18703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceStopped; 18803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceDeleted; 18903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onResponseSendCompleted; 19003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onAttributeRead; 19103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onAttributeWrite; 19203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onExecuteWrite; 193afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachstatic jmethodID method_onNotificationSent; 194afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachstatic jmethodID method_onServerCongestion; 19503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 19603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 19703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Static variables 19803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 19903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 20003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_interface_t *sGattIf = NULL; 20103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jobject mCallbacksObj = NULL; 20203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic JNIEnv *sCallbackEnv = NULL; 20303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 20403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic bool checkCallbackThread() { 20503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv = getCallbackEnv(); 20603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 20703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta JNIEnv* env = AndroidRuntime::getJNIEnv(); 20803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sCallbackEnv != env || sCallbackEnv == NULL) return false; 20903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return true; 21003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 21103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 21203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 21303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * BTA client callbacks 21403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 21503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 21603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_register_app_cb(int status, int clientIf, bt_uuid_t *app_uuid) 21703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 21803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 21903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientRegistered, status, 22003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta clientIf, UUID_PARAMS(app_uuid)); 22103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 22203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 22303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 22403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_scan_result_cb(bt_bdaddr_t* bda, int rssi, uint8_t* adv_data) 22503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 22603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 22703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 22803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 22903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 23003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 23103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 23203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 23303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 23403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb = sCallbackEnv->NewByteArray(62); 23503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, 62, (jbyte *) adv_data); 23603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 23703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanResult 23803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , address, rssi, jb); 23903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 24003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 24103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 24203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 24303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 24403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 24503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_open_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) 24603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 24703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 24803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 24903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 25003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 25103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 25203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 25303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 25403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 25503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConnected, 25603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta clientIf, conn_id, status, address); 25703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 25803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 25903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 26003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 26103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_close_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) 26203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 26303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 26403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 26503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 26603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 26703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 26803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 26903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 27003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onDisconnected, 27103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta clientIf, conn_id, status, address); 27203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 27303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 27403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 27503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 27603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_search_complete_cb(int conn_id, int status) 27703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 27803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 27903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onSearchCompleted, 28003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta conn_id, status); 28103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 28203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 28303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 28403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_search_result_cb(int conn_id, btgatt_srvc_id_t *srvc_id) 28503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 28603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 28703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onSearchResult, conn_id, 28803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta SRVC_ID_PARAMS(srvc_id)); 28903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 29003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 29103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 29203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_get_characteristic_cb(int conn_id, int status, 2937f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id, 29403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int char_prop) 29503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 29603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 29703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetCharacteristic 2987f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , conn_id, status, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id) 29903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , char_prop); 30003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 30103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 30203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 30303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_get_descriptor_cb(int conn_id, int status, 3047f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id, 3057f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t *descr_id) 30603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 30703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 30803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetDescriptor 3097f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , conn_id, status, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id) 3107f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS(descr_id)); 31103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 31203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 31303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 31403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_get_included_service_cb(int conn_id, int status, 31503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t *srvc_id, btgatt_srvc_id_t *incl_srvc_id) 31603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 31703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 31803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetIncludedService 31903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS(srvc_id), SRVC_ID_PARAMS(incl_srvc_id)); 32003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 32103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 32203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 32303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_register_for_notification_cb(int conn_id, int registered, int status, 3247f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id) 32503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 32603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 32703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onRegisterForNotifications 3287f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , conn_id, status, registered, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id)); 32903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 33003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 33103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 33203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_notify_cb(int conn_id, btgatt_notify_params_t *p_data) 33303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 33403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 33503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 33603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 33703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address), "%02X:%02X:%02X:%02X:%02X:%02X", 33803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta p_data->bda.address[0], p_data->bda.address[1], p_data->bda.address[2], 33903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta p_data->bda.address[3], p_data->bda.address[4], p_data->bda.address[5]); 34003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 34103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 34203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb = sCallbackEnv->NewByteArray(p_data->len); 34303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, p_data->len, (jbyte *) p_data->value); 34403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 34503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotify 34603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, address, SRVC_ID_PARAMS((&p_data->srvc_id)) 3477f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)), p_data->is_notify, jb); 34803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 34903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 35003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 35103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 35203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 35303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 35403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_read_characteristic_cb(int conn_id, int status, btgatt_read_params_t *p_data) 35503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 35603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 35703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 35803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb; 35903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( status == 0 ) //successful 36003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 36103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(p_data->value.len); 36203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, p_data->value.len, 36303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta (jbyte *) p_data->value.value); 36403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 36503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint8_t value = 0; 36603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(1); 36703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, 1, (jbyte *) &value); 36803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 36903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 37003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadCharacteristic 37103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 3727f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)), p_data->value_type, jb); 37303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 37403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 37503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 37603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 37703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_write_characteristic_cb(int conn_id, int status, btgatt_write_params_t *p_data) 37803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 37903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 38003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteCharacteristic 38103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 3827f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id))); 38303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 38403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 38503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 38603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_execute_write_cb(int conn_id, int status) 38703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 38803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 38903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExecuteCompleted 39003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status); 39103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 39203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 39303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 39403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_read_descriptor_cb(int conn_id, int status, btgatt_read_params_t *p_data) 39503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 39603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 39703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 39803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb; 39903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( p_data->value.len != 0 ) 40003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 40103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(p_data->value.len); 40203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, p_data->value.len, 40303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta (jbyte *) p_data->value.value); 40403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 40503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(1); 40603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 40703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 40803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadDescriptor 40903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 4107f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)), GATT_ID_PARAMS((&p_data->descr_id)) 41103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , p_data->value_type, jb); 41203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 41303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 41403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 41503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 41603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 41703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_write_descriptor_cb(int conn_id, int status, btgatt_write_params_t *p_data) 41803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 41903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 42003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteDescriptor 42103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 4227f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)) 4237f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->descr_id))); 42403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 42503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 42603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 42703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_remote_rssi_cb(int client_if,bt_bdaddr_t* bda, int rssi, int status) 42803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 42903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 43003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 43103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 43203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 43303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 43403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 43503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 43603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadRemoteRssi, 43703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta client_if, address, rssi, status); 43803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 43903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 44003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 44103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 44224dce60783d85fbf49f550203a383b2f4a171a52Wei Wangvoid btgattc_advertise_cb(int status, int client_if) 44324dce60783d85fbf49f550203a383b2f4a171a52Wei Wang{ 44424dce60783d85fbf49f550203a383b2f4a171a52Wei Wang CHECK_CALLBACK_ENV 44524dce60783d85fbf49f550203a383b2f4a171a52Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAdvertiseCallback, status, client_if); 44624dce60783d85fbf49f550203a383b2f4a171a52Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 44724dce60783d85fbf49f550203a383b2f4a171a52Wei Wang} 44824dce60783d85fbf49f550203a383b2f4a171a52Wei Wang 449662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbachvoid btgattc_configure_mtu_cb(int conn_id, int status, int mtu) 450662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach{ 451662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach CHECK_CALLBACK_ENV 452662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConfigureMTU, 453662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach conn_id, status, mtu); 454662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 455662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach} 456662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach 4572b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_scan_filter_cfg_cb(int action, int client_if, int status, int filt_type, 4582b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int avbl_space) 4591a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 4601a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 4611a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterConfig, 4622b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang action, status, client_if, filt_type, avbl_space); 4632b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4642b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 4652b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 4662b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_scan_filter_param_cb(int action, int client_if, int status, int avbl_space) 4672b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 4682b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 4692b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterParamsConfigured, 4702b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang action, status, client_if, avbl_space); 4712b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4722b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 4732b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 4742b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_scan_filter_status_cb(int action, int client_if, int status) 4752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 4762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 4772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterEnableDisabled, 4782b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang action, status, client_if); 4791a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4801a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 4811a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 4821a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_enable_cb(int client_if, int status) 4831a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 4841a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 4851a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvEnable, status,client_if); 4861a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4871a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 4881a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 4891a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_update_cb(int client_if, int status) 4901a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 4911a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 4921a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvUpdate, status, client_if); 4931a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4941a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 4951a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 4961a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_setadv_data_cb(int client_if, int status) 4971a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 4981a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 4991a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvSetAdvData, status, client_if); 5001a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5011a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 5021a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 5031a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_disable_cb(int client_if, int status) 5041a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 5051a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 5061a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvDisable, status, client_if); 5071a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5081a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 5091a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 510afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgattc_congestion_cb(int conn_id, bool congested) 511afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 512afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 513afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientCongestion, conn_id, congested); 514afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 515afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 516afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 5172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_cfg_storage_cb(int client_if, int status) 5182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5192b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanStorageConfigured, status, client_if); 5212b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5222b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5232b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5242b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_startstop_cb(int startstop_action, int client_if, int status) 5252b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5262b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5272b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanStartStopped, startstop_action, 5282b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang status, client_if); 5292b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5302b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5312b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5322b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_reports_cb(int client_if, int status, int report_format, 5332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int num_records, int data_len, uint8_t *p_rep_data) 5342b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5352b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5362b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyteArray jb = sCallbackEnv->NewByteArray(data_len); 5372b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->SetByteArrayRegion(jb, 0, data_len, (jbyte *) p_rep_data); 5382b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5392b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanReports, status, client_if, 5402b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang report_format, num_records, jb); 5412b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->DeleteLocalRef(jb); 5422b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5432b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5442b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5452b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_threshold_cb(int client_if) 5462b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5472b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5482b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanThresholdCrossed, client_if); 5492b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5502b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5512b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5522b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_track_adv_event_cb(int client_if, int filt_index, int addr_type, 5532b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang bt_bdaddr_t* bda, int adv_state) 5542b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5552b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5562b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang char c_address[32]; 5572b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 5582b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang bda->address[0], bda->address[1], bda->address[2], 5592b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang bda->address[3], bda->address[4], bda->address[5]); 5602b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring address = sCallbackEnv->NewStringUTF(c_address); 5612b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onTrackAdvFoundLost, 5622b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang filt_index, addr_type, address, adv_state, client_if); 5632b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->DeleteLocalRef(address); 5642b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5652b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5662b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5672b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 56803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_client_callbacks_t sGattClientCallbacks = { 56903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_register_app_cb, 57003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_scan_result_cb, 57103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_open_cb, 57203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_close_cb, 57303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_search_complete_cb, 57403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_search_result_cb, 57503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_characteristic_cb, 57603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_descriptor_cb, 57703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_included_service_cb, 57803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_register_for_notification_cb, 57903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_notify_cb, 58003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_read_characteristic_cb, 58103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_write_characteristic_cb, 58203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_read_descriptor_cb, 58303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_write_descriptor_cb, 58403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_execute_write_cb, 58524dce60783d85fbf49f550203a383b2f4a171a52Wei Wang btgattc_remote_rssi_cb, 586662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach btgattc_advertise_cb, 587662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach btgattc_configure_mtu_cb, 5882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_cfg_cb, 5892b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_param_cb, 5902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_status_cb, 5911a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_enable_cb, 5921a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_update_cb, 5931a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_setadv_data_cb, 594afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgattc_multiadv_disable_cb, 595f2919fe3409cb17a062baa74361d2129d90ece2bWei Wang btgattc_congestion_cb, 5962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_cfg_storage_cb, 5972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_startstop_cb, 5982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_reports_cb, 5992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_threshold_cb, 6002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_track_adv_event_cb 60103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 60203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 60303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 60403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 60503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * BTA server callbacks 60603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 60703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 60803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_register_app_cb(int status, int server_if, bt_uuid_t *uuid) 60903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 61003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 61103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerRegistered 61203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , status, server_if, UUID_PARAMS(uuid)); 61303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 61403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 61503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 616dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbachvoid btgatts_connection_cb(int conn_id, int server_if, int connected, bt_bdaddr_t *bda) 61703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 61803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 61903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 62003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 62103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 62203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 62303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 62403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 62503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 62603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientConnected, 627dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbach address, connected, conn_id, server_if); 62803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 62903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 63003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 63103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 63203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_added_cb(int status, int server_if, 63303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t *srvc_id, int srvc_handle) 63403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 63503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 63603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceAdded, status, 63703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, SRVC_ID_PARAMS(srvc_id), 63803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle); 63903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 64003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 64103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 64203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_included_service_added_cb(int status, int server_if, 64303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int srvc_handle, 64403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int incl_srvc_handle) 64503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 64603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 64703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onIncludedServiceAdded, 64803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, srvc_handle, incl_srvc_handle); 64903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 65003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 65103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 65203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_characteristic_added_cb(int status, int server_if, bt_uuid_t *char_id, 65303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int srvc_handle, int char_handle) 65403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 65503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 65603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onCharacteristicAdded, 65703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, UUID_PARAMS(char_id), 65803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle, char_handle); 65903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 66003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 66103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 66203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_descriptor_added_cb(int status, int server_if, 66303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t *descr_id, int srvc_handle, 66403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int descr_handle) 66503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 66603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 66703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onDescriptorAdded, 66803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, UUID_PARAMS(descr_id), 66903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle, descr_handle); 67003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 67103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 67203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 67303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_started_cb(int status, int server_if, int srvc_handle) 67403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 67503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 67603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceStarted, status, 67703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 67803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 67903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 68003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 68103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_stopped_cb(int status, int server_if, int srvc_handle) 68203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 68303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 68403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceStopped, status, 68503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 68603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 68703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 68803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 68903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_deleted_cb(int status, int server_if, int srvc_handle) 69003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 69103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 69203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceDeleted, status, 69303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 69403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 69503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 69603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 69703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_read_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, 69803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int attr_handle, int offset, bool is_long) 69903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 70003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 70103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 70203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 70303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 70403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 70503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 70603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 70703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 70803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAttributeRead, 70903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, attr_handle, 71003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta offset, is_long); 71103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 71203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 71303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 71403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 71503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_write_cb(int conn_id, int trans_id, 71603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t *bda, int attr_handle, 71703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int offset, int length, 71803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bool need_rsp, bool is_prep, uint8_t* value) 71903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 72003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 72103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 72203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 72303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 72403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 72503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 72603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 72703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 72803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 72903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray val = sCallbackEnv->NewByteArray(length); 73003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (val) sCallbackEnv->SetByteArrayRegion(val, 0, length, (jbyte*)value); 73103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAttributeWrite, 73203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, attr_handle, 73303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta offset, length, need_rsp, is_prep, val); 73403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 73503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(val); 73603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 73703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 73803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 73903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_exec_write_cb(int conn_id, int trans_id, 74003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t *bda, int exec_write) 74103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 74203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 74303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 74403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 74503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 74603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 74703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 74803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 74903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 75003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExecuteWrite, 75103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, exec_write); 75203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 75303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 75403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 75503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 75603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_response_confirmation_cb(int status, int handle) 75703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 75803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 75903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onResponseSendCompleted, 76003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, handle); 76103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 76203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 76303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 764afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgatts_indication_sent_cb(int conn_id, int status) 765afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 766afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 767afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotificationSent, 768afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach conn_id, status); 769afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 770afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 771afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 772afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgatts_congestion_cb(int conn_id, bool congested) 773afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 774afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 775afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerCongestion, conn_id, congested); 776afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 777afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 778afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 77903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_server_callbacks_t sGattServerCallbacks = { 78003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_register_app_cb, 78103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_connection_cb, 78203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_added_cb, 78303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_included_service_added_cb, 78403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_characteristic_added_cb, 78503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_descriptor_added_cb, 78603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_started_cb, 78703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_stopped_cb, 78803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_deleted_cb, 78903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_read_cb, 79003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_write_cb, 79103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_exec_write_cb, 792afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgatts_response_confirmation_cb, 793afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgatts_indication_sent_cb, 794afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgatts_congestion_cb 79503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 79603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 79703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 79803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * GATT callbacks 79903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 80003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 80103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_callbacks_t sGattCallbacks = { 80203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sizeof(btgatt_callbacks_t), 80303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &sGattClientCallbacks, 80403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &sGattServerCallbacks 80503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 80603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 80703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 80803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native function definitions 80903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 81003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void classInitNative(JNIEnv* env, jclass clazz) { 81103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 81203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta // Client callbacks 81303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 81403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onClientRegistered = env->GetMethodID(clazz, "onClientRegistered", "(IIJJ)V"); 81503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onScanResult = env->GetMethodID(clazz, "onScanResult", "(Ljava/lang/String;I[B)V"); 81603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onConnected = env->GetMethodID(clazz, "onConnected", "(IIILjava/lang/String;)V"); 81703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onDisconnected = env->GetMethodID(clazz, "onDisconnected", "(IIILjava/lang/String;)V"); 81803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onReadCharacteristic = env->GetMethodID(clazz, "onReadCharacteristic", "(IIIIJJIJJI[B)V"); 81903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onWriteCharacteristic = env->GetMethodID(clazz, "onWriteCharacteristic", "(IIIIJJIJJ)V"); 82003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onExecuteCompleted = env->GetMethodID(clazz, "onExecuteCompleted", "(II)V"); 82103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onSearchCompleted = env->GetMethodID(clazz, "onSearchCompleted", "(II)V"); 82203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onSearchResult = env->GetMethodID(clazz, "onSearchResult", "(IIIJJ)V"); 8237f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onReadDescriptor = env->GetMethodID(clazz, "onReadDescriptor", "(IIIIJJIJJIJJI[B)V"); 8247f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onWriteDescriptor = env->GetMethodID(clazz, "onWriteDescriptor", "(IIIIJJIJJIJJ)V"); 82503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onNotify = env->GetMethodID(clazz, "onNotify", "(ILjava/lang/String;IIJJIJJZ[B)V"); 82603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onGetCharacteristic = env->GetMethodID(clazz, "onGetCharacteristic", "(IIIIJJIJJI)V"); 8277f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onGetDescriptor = env->GetMethodID(clazz, "onGetDescriptor", "(IIIIJJIJJIJJ)V"); 82803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onGetIncludedService = env->GetMethodID(clazz, "onGetIncludedService", "(IIIIJJIIJJ)V"); 82903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onRegisterForNotifications = env->GetMethodID(clazz, "onRegisterForNotifications", "(IIIIIJJIJJ)V"); 83003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onReadRemoteRssi = env->GetMethodID(clazz, "onReadRemoteRssi", "(ILjava/lang/String;II)V"); 831662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach method_onConfigureMTU = env->GetMethodID(clazz, "onConfigureMTU", "(III)V"); 8321a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang method_onAdvertiseCallback = env->GetMethodID(clazz, "onAdvertiseCallback", "(II)V"); 8332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterConfig = env->GetMethodID(clazz, "onScanFilterConfig", "(IIIII)V"); 8342b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterParamsConfigured = env->GetMethodID(clazz, "onScanFilterParamsConfigured", "(IIII)V"); 8352b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterEnableDisabled = env->GetMethodID(clazz, "onScanFilterEnableDisabled", "(III)V"); 83627bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvEnable = env->GetMethodID(clazz, "onAdvertiseInstanceEnabled", "(II)V"); 83727bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvUpdate = env->GetMethodID(clazz, "onAdvertiseDataUpdated", "(II)V"); 83827bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvSetAdvData = env->GetMethodID(clazz, "onAdvertiseDataSet", "(II)V"); 83927bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvDisable = env->GetMethodID(clazz, "onAdvertiseInstanceDisabled", "(II)V"); 840afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onClientCongestion = env->GetMethodID(clazz, "onClientCongestion", "(IZ)V"); 8412b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanStorageConfigured = env->GetMethodID(clazz, "onBatchScanStorageConfigured", "(II)V"); 8422b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanStartStopped = env->GetMethodID(clazz, "onBatchScanStartStopped", "(III)V"); 8432b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanReports = env->GetMethodID(clazz, "onBatchScanReports", "(IIII[B)V"); 8442b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanThresholdCrossed = env->GetMethodID(clazz, "onBatchScanThresholdCrossed", "(I)V"); 8452b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onTrackAdvFoundLost = env->GetMethodID(clazz, "onTrackAdvFoundLost", "(IILjava/lang/String;II)V"); 84603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 84703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta // Server callbacks 84803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 84903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServerRegistered = env->GetMethodID(clazz, "onServerRegistered", "(IIJJ)V"); 850dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbach method_onClientConnected = env->GetMethodID(clazz, "onClientConnected", "(Ljava/lang/String;ZII)V"); 85103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceAdded = env->GetMethodID(clazz, "onServiceAdded", "(IIIIJJI)V"); 85203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onIncludedServiceAdded = env->GetMethodID(clazz, "onIncludedServiceAdded", "(IIII)V"); 85303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onCharacteristicAdded = env->GetMethodID(clazz, "onCharacteristicAdded", "(IIJJII)V"); 85403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onDescriptorAdded = env->GetMethodID(clazz, "onDescriptorAdded", "(IIJJII)V"); 85503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceStarted = env->GetMethodID(clazz, "onServiceStarted", "(III)V"); 85603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceStopped = env->GetMethodID(clazz, "onServiceStopped", "(III)V"); 85703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceDeleted = env->GetMethodID(clazz, "onServiceDeleted", "(III)V"); 85803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onResponseSendCompleted = env->GetMethodID(clazz, "onResponseSendCompleted", "(II)V"); 85903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onAttributeRead= env->GetMethodID(clazz, "onAttributeRead", "(Ljava/lang/String;IIIIZ)V"); 86003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onAttributeWrite= env->GetMethodID(clazz, "onAttributeWrite", "(Ljava/lang/String;IIIIIZZ[B)V"); 86103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onExecuteWrite= env->GetMethodID(clazz, "onExecuteWrite", "(Ljava/lang/String;III)V"); 862afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onNotificationSent = env->GetMethodID(clazz, "onNotificationSent", "(II)V"); 863afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onServerCongestion = env->GetMethodID(clazz, "onServerCongestion", "(IZ)V"); 86403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 86503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta info("classInitNative: Success!"); 86603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 86703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 86803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const bt_interface_t* btIf; 86903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 87003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void initializeNative(JNIEnv *env, jobject object) { 87103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if(btIf) 87203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 87303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 87403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (btIf = getBluetoothInterface()) == NULL) { 87503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Bluetooth module is not loaded"); 87603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 87703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 87803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 87903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sGattIf != NULL) { 88003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta ALOGW("Cleaning up Bluetooth GATT Interface before initializing..."); 88103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->cleanup(); 88203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 88303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 88403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 88503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (mCallbacksObj != NULL) { 88603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta ALOGW("Cleaning up Bluetooth GATT callback object"); 88703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->DeleteGlobalRef(mCallbacksObj); 88803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = NULL; 88903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 89003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 89103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (sGattIf = (btgatt_interface_t *) 89203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btIf->get_profile_interface(BT_PROFILE_GATT_ID)) == NULL) { 89303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Failed to get Bluetooth GATT Interface"); 89403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 89503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 89603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 89703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_status_t status; 89803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (status = sGattIf->init(&sGattCallbacks)) != BT_STATUS_SUCCESS) { 89903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Failed to initialize Bluetooth GATT, status: %d", status); 90003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 90103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 90203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 90303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 90403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = env->NewGlobalRef(object); 90503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 90603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 90703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void cleanupNative(JNIEnv *env, jobject object) { 90803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_status_t status; 90903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!btIf) return; 91003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 91103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sGattIf != NULL) { 91203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->cleanup(); 91303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 91403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 91503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 91603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (mCallbacksObj != NULL) { 91703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->DeleteGlobalRef(mCallbacksObj); 91803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = NULL; 91903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 92003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btIf = NULL; 92103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 92203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 92303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 92403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native Client functions 92503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 92603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 92703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic int gattClientGetDeviceTypeNative(JNIEnv* env, jobject object, jstring address) 92803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 92903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return 0; 93003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 93103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 93203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return sGattIf->client->get_device_type(&bda); 93303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 93403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 93503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRegisterAppNative(JNIEnv* env, jobject object, 93603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong app_uuid_lsb, jlong app_uuid_msb ) 93703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 93803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 93903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 94003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 94103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb); 94203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->register_client(&uuid); 94303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 94403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 94503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientUnregisterAppNative(JNIEnv* env, jobject object, jint clientIf) 94603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 94703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 94803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->unregister_client(clientIf); 94903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 95003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 951f745ace608784e226a78170bf5a24fe114f1026fPrerepa Viswanadhamstatic void gattClientScanNative(JNIEnv* env, jobject object, jboolean start) 95203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 95303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 954f745ace608784e226a78170bf5a24fe114f1026fPrerepa Viswanadham sGattIf->client->scan(start); 95503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 95603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 95703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientConnectNative(JNIEnv* env, jobject object, jint clientif, 95818591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta jstring address, jboolean isDirect, jint transport) 95903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 96003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 96103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 96203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 96303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 96418591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta sGattIf->client->connect(clientif, &bda, isDirect, transport); 96503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 96603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 96703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientDisconnectNative(JNIEnv* env, jobject object, jint clientIf, 96803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address, jint conn_id) 96903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 97003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 97103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 97203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 97303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->disconnect(clientIf, &bda, conn_id); 97403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 97503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 97603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRefreshNative(JNIEnv* env, jobject object, jint clientIf, 97703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address) 97803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 97903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 98003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 98103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 98203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 98303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->refresh(clientIf, &bda); 98403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 98503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 98603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientSearchServiceNative(JNIEnv* env, jobject object, jint conn_id, 98703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jboolean search_all, jlong service_uuid_lsb, jlong service_uuid_msb) 98803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 98903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 99003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 99103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 99203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, service_uuid_msb, service_uuid_lsb); 99303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->search_service(conn_id, search_all ? 0 : &uuid); 99403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 99503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 99603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetCharacteristicNative(JNIEnv* env, jobject object, 99703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, 99803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 99903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 100003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 100103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb) 100203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 100303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 100403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 100503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 100603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 100703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 100803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 100903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 101003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10117f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 101203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 101303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 101403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 101503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (char_id_uuid_lsb == 0) 101603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 101703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_characteristic(conn_id, &srvc_id, 0); 101803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 101903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_characteristic(conn_id, &srvc_id, &char_id); 102003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 102103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 102203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 102303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetDescriptorNative(JNIEnv* env, jobject object, 102403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, 102503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 102603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 102703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 102803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 10297f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 103003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb) 103103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 103203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 103303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 103403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 103503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 103603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 103703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 103803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10397f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 104003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 104103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 104203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10437f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 10447f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 10457f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 104603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 104703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (descr_id_uuid_lsb == 0) 104803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 104903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_descriptor(conn_id, &srvc_id, &char_id, 0); 105003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 105103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_descriptor(conn_id, &srvc_id, &char_id, &descr_id); 105203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 105303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 105403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 105503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetIncludedServiceNative(JNIEnv* env, jobject object, 105603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 105703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 105803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint incl_service_id_inst_id, jint incl_service_type, 105903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong incl_service_id_uuid_lsb, jlong incl_service_id_uuid_msb) 106003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 106103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 106203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 106303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 106403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 106503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 106603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 106703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 106803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t incl_srvc_id; 106903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta incl_srvc_id.id.inst_id = (uint8_t) incl_service_id_inst_id; 107003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta incl_srvc_id.is_primary = (incl_service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 107103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(incl_srvc_id.id.uuid.uu, incl_service_id_uuid_msb, incl_service_id_uuid_lsb); 107203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 107303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (incl_service_id_uuid_lsb == 0) 107403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 107503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_included_service(conn_id, &srvc_id, 0); 107603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 107703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_included_service(conn_id, &srvc_id, &incl_srvc_id); 107803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 107903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 108003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 108103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadCharacteristicNative(JNIEnv* env, jobject object, 108203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 108303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 108403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 108503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 108603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint authReq) 108703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 108803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 108903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 109003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 109103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 109203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 109303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 109403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10957f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 109603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 109703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 109803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 109903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_characteristic(conn_id, &srvc_id, &char_id, authReq); 110003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 110103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 110203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadDescriptorNative(JNIEnv* env, jobject object, 110303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 110403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 110503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 110603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 11077f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 110803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb, 110903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint authReq) 111003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 111103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 111203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 111303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 111403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 111503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 111603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 111703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11187f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 111903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 112003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 112103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11227f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 11237f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 11247f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 112503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 112603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_descriptor(conn_id, &srvc_id, &char_id, &descr_id, authReq); 112703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 112803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 112903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientWriteCharacteristicNative(JNIEnv* env, jobject object, 113003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 113103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 113203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 113303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 113403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint write_type, jint auth_req, jbyteArray value) 113503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 113603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 113703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 113803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 113903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 114003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 114103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 114203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11437f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 114403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 114503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 114603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 114703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint16_t len = (uint16_t) env->GetArrayLength(value); 114803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte *p_value = env->GetByteArrayElements(value, NULL); 114903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (p_value == NULL) return; 115003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 115103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->write_characteristic(conn_id, &srvc_id, &char_id, 115203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta write_type, len, auth_req, (char*)p_value); 115303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(value, p_value, 0); 115403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 115503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 115603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientExecuteWriteNative(JNIEnv* env, jobject object, 115703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jboolean execute) 115803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 115903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 116003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->execute_write(conn_id, execute ? 1 : 0); 116103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 116203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 116303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientWriteDescriptorNative(JNIEnv* env, jobject object, 116403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 116503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 116603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 116703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 11687f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 116903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb, 117003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint write_type, jint auth_req, jbyteArray value) 117103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 117203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 117303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1174460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach if (value == NULL) { 1175460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach warn("gattClientWriteDescriptorNative() ignoring NULL array"); 1176460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach return; 1177460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach } 1178460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach 117903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 118003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 118103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 118203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 118303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11847f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 118503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 118603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 118703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11887f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 11897f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 11907f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 119103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 119203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint16_t len = (uint16_t) env->GetArrayLength(value); 119303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte *p_value = env->GetByteArrayElements(value, NULL); 119403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (p_value == NULL) return; 119503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 119603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->write_descriptor(conn_id, &srvc_id, &char_id, &descr_id, 119703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta write_type, len, auth_req, (char*)p_value); 119803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(value, p_value, 0); 119903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 120003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 120103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRegisterForNotificationsNative(JNIEnv* env, jobject object, 120203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint clientIf, jstring address, 120303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 120403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 120503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 120603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 120703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jboolean enable) 120803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 120903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 121003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 121103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 121203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 121303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 121403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 121503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12167f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 121703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 121803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 121903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 122003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bd_addr; 122103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta const char *c_address = env->GetStringUTFChars(address, NULL); 122203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr_str_to_addr(c_address, bd_addr.address); 122303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 122403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (enable) 122503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->register_for_notification(clientIf, &bd_addr, &srvc_id, &char_id); 122603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta else 122703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->deregister_for_notification(clientIf, &bd_addr, &srvc_id, &char_id); 122803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 122903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 123003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadRemoteRssiNative(JNIEnv* env, jobject object, jint clientif, 123103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address) 123203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 123303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 123403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 123503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 123603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 123703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 123803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_remote_rssi(clientif, &bda); 123903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 124003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1241873b8064cca4d0f32808842a39e54e305dd5b410Wei Wangstatic void gattAdvertiseNative(JNIEnv *env, jobject object, 124297d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach jint client_if, jboolean start) 124397d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach{ 124497d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach if (!sGattIf) return; 124597d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach sGattIf->client->listen(client_if, start); 124697d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach} 124797d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 12482b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattSetAdvDataNative(JNIEnv *env, jobject object, jint client_if, 12492b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jboolean setScanRsp, jboolean inclName, jboolean inclTxPower, jint minInterval, 12502b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint maxInterval, jint appearance, jbyteArray manufacturerData, jbyteArray serviceData, 1251873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyteArray serviceUuid) 125297d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach{ 125397d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach if (!sGattIf) return; 1254873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* arr_data = env->GetByteArrayElements(manufacturerData, NULL); 125597d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach uint16_t arr_len = (uint16_t) env->GetArrayLength(manufacturerData); 125697d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 1257873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* service_data = env->GetByteArrayElements(serviceData, NULL); 1258873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang uint16_t service_data_len = (uint16_t) env->GetArrayLength(serviceData); 1259873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang 1260873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* service_uuid = env->GetByteArrayElements(serviceUuid, NULL); 1261873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang uint16_t service_uuid_len = (uint16_t) env->GetArrayLength(serviceUuid); 1262873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang 126397d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach sGattIf->client->set_adv_data(client_if, setScanRsp, inclName, inclTxPower, 1264873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang minInterval, maxInterval, appearance, arr_len, (char*)arr_data, 1265873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang service_data_len, (char*)service_data, service_uuid_len, 1266873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang (char*)service_uuid); 126797d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 126897d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach env->ReleaseByteArrayElements(manufacturerData, arr_data, JNI_ABORT); 1269873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang env->ReleaseByteArrayElements(serviceData, service_data, JNI_ABORT); 1270873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang env->ReleaseByteArrayElements(serviceUuid, service_uuid, JNI_ABORT); 127197d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach} 127297d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 127353f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadhamstatic void gattSetScanParametersNative(JNIEnv* env, jobject object, 12742b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_interval_unit, jint scan_window_unit) 127553f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham{ 127653f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham if (!sGattIf) return; 12772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->set_scan_parameters(scan_interval_unit, scan_window_unit); 127853f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham} 127903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12802b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterParamAddNative(JNIEnv* env, jobject object, 12812b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint client_if, jint filt_index, 12822b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint feat_seln, jint list_logic_type, jint filt_logic_type, 12832b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint rssi_high_thres, jint rssi_low_thres, 12842b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint dely_mode, jint found_timeout, jint lost_timeout, jint found_timeout_cnt) 12852b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 12862b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 12872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int add_scan_filter_params_action = 0; 12882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_param_setup(client_if, add_scan_filter_params_action, filt_index, 12892b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang feat_seln, list_logic_type, filt_logic_type, 12902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang rssi_high_thres, rssi_low_thres, 12912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang dely_mode, found_timeout, lost_timeout, found_timeout_cnt); 12922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 12931a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 12942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterParamDeleteNative(JNIEnv* env, jobject object, 12952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint client_if, jint filt_index) 12961a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 12971a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 12982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int delete_scan_filter_params_action = 1; 12992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_param_setup(client_if, delete_scan_filter_params_action, 13002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang filt_index, 0, 0, 0, 0, 0, 0, 0, 0, 0); 13011a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 130280e7d011fdb511a6583258458e97821176866baaWei Wang 13032b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterParamClearAllNative(JNIEnv* env, jobject object, jint client_if) 13041a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 13051a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 13062b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int clear_scan_filter_params_action = 2; 13072b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_param_setup(client_if, clear_scan_filter_params_action, 13082b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 13092b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 13101a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterAddRemoveNative(JNIEnv* env, jobject object, 13122b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint client_if, jint action, jint filt_type, jint filt_index, jint company_id, 13132b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint company_id_mask, jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, 13142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_mask_msb, jstring name, jstring address, jbyte addr_type, 13152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyteArray data, jbyteArray mask) 13162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 13172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang switch(filt_type) 13181a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 13191a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 0: // BTM_BLE_PF_ADDR_FILTER 13202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang { 13211a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang bt_bdaddr_t bda; 13221a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jstr2bdaddr(env, &bda, address); 13232b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 0, 13242b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, NULL, NULL, &bda, addr_type,0, NULL,0, NULL); 13251a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 13262b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang } 13271a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13281a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 1: // BTM_BLE_PF_SRVC_DATA 13292b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang { 13302b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* data_array = env->GetByteArrayElements(data, 0); 13312b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int data_len = env->GetArrayLength(data); 13322b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* mask_array = env->GetByteArrayElements(mask, NULL); 13332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang uint16_t mask_len = (uint16_t) env->GetArrayLength(mask); 13342b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 13352b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, NULL, NULL, NULL, 0, data_len, (char*)data_array, mask_len,(char*) mask_array); 13362b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(data, data_array, JNI_ABORT); 13372b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(mask, mask_array, JNI_ABORT); 13381a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 13392b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang } 13401a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13411a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 2: // BTM_BLE_PF_SRVC_UUID 13421a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 3: // BTM_BLE_PF_SRVC_SOL_UUID 13431a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 13441a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang bt_uuid_t uuid, uuid_mask; 13451a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang set_uuid(uuid.uu, uuid_msb, uuid_lsb); 13461a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang set_uuid(uuid_mask.uu, uuid_mask_msb, uuid_mask_lsb); 13471a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (uuid_mask_lsb != 0 && uuid_mask_msb != 0) 13482b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 13492b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, &uuid, &uuid_mask, NULL,0,0, NULL,0, NULL); 13501a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang else 13512b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 13522b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, &uuid, NULL, NULL, 0,0, NULL,0, NULL); 13531a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 13541a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 13551a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13561a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 4: // BTM_BLE_PF_LOCAL_NAME 13571a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 13581a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang const char* c_name = env->GetStringUTFChars(name, NULL); 13591a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (c_name != NULL && strlen(c_name) != 0) 13601a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 13612b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, 13622b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang filt_index, 0, 0, NULL, NULL, NULL, 0, strlen(c_name), 13632b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang (char*)c_name, 0, NULL); 13641a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseStringUTFChars(name, c_name); 13651a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 13661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 13671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 13681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13691a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 5: // BTM_BLE_PF_MANU_DATA 13702b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang case 6: // BTM_BLE_PF_SRVC_DATA_PATTERN 13711a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 13721a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* data_array = env->GetByteArrayElements(data, 0); 13732b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int data_len = env->GetArrayLength(data); // Array contains mask 13742b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* mask_array = env->GetByteArrayElements(mask, NULL); 13752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang uint16_t mask_len = (uint16_t) env->GetArrayLength(mask); 13762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 13772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, NULL, NULL, NULL, 0, data_len, (char*)data_array, 13782b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang mask_len, (char*) mask_array); 13791a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(data, data_array, JNI_ABORT); 13802b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(mask, mask_array, JNI_ABORT); 13811a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 13821a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 13831a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13841a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang default: 13851a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 13861a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 13871a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 13881a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13892b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterAddNative(JNIEnv* env, jobject object, jint client_if, 13902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_type, jint filt_index, jint company_id, jint company_id_mask, 13912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, jlong uuid_mask_msb, 13922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring name, jstring address, jbyte addr_type, jbyteArray data, jbyteArray mask) 13932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 13942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 13952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int action = 0; 13962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang gattClientScanFilterAddRemoveNative(env, object, client_if, action, filt_type, filt_index, 13972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, uuid_lsb, uuid_msb, uuid_mask_lsb, uuid_mask_msb, 13982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang name, address, addr_type, data, mask); 13992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14022b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterDeleteNative(JNIEnv* env, jobject object, jint client_if, 14032b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_type, jint filt_index, jint company_id, jint company_id_mask, 14042b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, jlong uuid_mask_msb, 14052b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring name, jstring address, jbyte addr_type, jbyteArray data, jbyteArray mask) 14062b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14072b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14082b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int action = 1; 14092b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang gattClientScanFilterAddRemoveNative(env, object, client_if, action, filt_type, filt_index, 14102b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, uuid_lsb, uuid_msb, uuid_mask_lsb, uuid_mask_msb, 14112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang name, address, addr_type, data, mask); 14122b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14132b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterClearNative(JNIEnv* env, jobject object, jint client_if, 14152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_index) 14162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_clear(client_if, filt_index); 14192b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14212b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterEnableNative (JNIEnv* env, jobject object, jint client_if, 14222b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jboolean enable) 14231a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 14241a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 14252b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_enable(client_if, enable); 14261a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 14271a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 1428662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbachstatic void gattClientConfigureMTUNative(JNIEnv *env, jobject object, 1429662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach jint conn_id, jint mtu) 1430662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach{ 1431662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach if (!sGattIf) return; 1432662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach sGattIf->client->configure_mtu(conn_id, mtu); 1433662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach} 1434662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach 14351a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientEnableAdvNative(JNIEnv* env, jobject object, jint client_if, 14361a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jint min_interval, jint max_interval, jint adv_type, jint chnl_map, jint tx_power) 14371a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 14381a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 14391a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14401a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_enable(client_if, min_interval, max_interval, adv_type, chnl_map, 14411a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang tx_power); 14421a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 14431a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14441a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientUpdateAdvNative(JNIEnv* env, jobject object, jint client_if, 14451a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jint min_interval, jint max_interval, jint adv_type, jint chnl_map, jint tx_power) 14461a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 14471a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 14481a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14491a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_update(client_if, min_interval, max_interval, adv_type, chnl_map, 14501a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang tx_power); 14511a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 14521a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14531a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientSetAdvDataNative(JNIEnv* env, jobject object , jint client_if, 14541a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jboolean set_scan_rsp, jboolean incl_name, jboolean incl_txpower, jint appearance, 14551a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyteArray manufacturer_data,jbyteArray service_data, jbyteArray service_uuid) 14561a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 14571a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 14581a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* manu_data = env->GetByteArrayElements(manufacturer_data, NULL); 14591a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t manu_len = (uint16_t) env->GetArrayLength(manufacturer_data); 14601a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14611a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* serv_data = env->GetByteArrayElements(service_data, NULL); 14621a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t serv_data_len = (uint16_t) env->GetArrayLength(service_data); 14631a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14641a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* serv_uuid = env->GetByteArrayElements(service_uuid, NULL); 14651a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t serv_uuid_len = (uint16_t) env->GetArrayLength(service_uuid); 14661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_set_inst_data(client_if, set_scan_rsp, incl_name,incl_txpower, 14681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang appearance, manu_len, (char*)manu_data, 14691a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang serv_data_len, (char*)serv_data, serv_uuid_len, 14701a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang (char*)serv_uuid); 14711a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14721a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(manufacturer_data, manu_data, JNI_ABORT); 14731a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(service_data, serv_data, JNI_ABORT); 14741a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(service_uuid, serv_uuid, JNI_ABORT); 14751a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 14761a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14771a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientDisableAdvNative(JNIEnv* env, jobject object, jint client_if) 14781a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 14791a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 14801a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_disable(client_if); 14811a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 14821a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14832b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientConfigBatchScanStorageNative(JNIEnv* env, jobject object, jint client_if, 14842b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint max_full_reports_percent, jint max_trunc_reports_percent, 14852b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint notify_threshold_level_percent) 14862b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_cfg_storage(client_if, max_full_reports_percent, 14892b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang max_trunc_reports_percent, notify_threshold_level_percent); 14902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientStartBatchScanNative(JNIEnv* env, jobject object, jint client_if, 14932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_mode, jint scan_interval_unit, jint scan_window_unit, jint addr_type, 14942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint discard_rule) 14952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_enb_batch_scan(client_if, scan_mode, scan_interval_unit, 14982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang scan_window_unit, addr_type, discard_rule); 14992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientStopBatchScanNative(JNIEnv* env, jobject object, jint client_if) 15022b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15032b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15042b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_dis_batch_scan(client_if); 15052b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15062b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15072b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientReadScanReportsNative(JNIEnv* env, jobject object, jint client_if, 15082b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_type) 15092b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15102b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_read_reports(client_if, scan_type); 15122b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15132b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 151403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 151503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native server functions 151603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 151703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerRegisterAppNative(JNIEnv* env, jobject object, 151803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong app_uuid_lsb, jlong app_uuid_msb ) 151903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 152003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 152103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 152203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb); 152303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->register_server(&uuid); 152403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 152503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 152603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerUnregisterAppNative(JNIEnv* env, jobject object, jint serverIf) 152703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 152803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 152903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->unregister_server(serverIf); 153003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 153103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 153203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerConnectNative(JNIEnv *env, jobject object, 153318591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta jint server_if, jstring address, jboolean is_direct, jint transport) 153403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 153503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 153603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 153703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bd_addr; 153803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta const char *c_address = env->GetStringUTFChars(address, NULL); 153903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr_str_to_addr(c_address, bd_addr.address); 154003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 154118591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta sGattIf->server->connect(server_if, &bd_addr, is_direct, transport); 154203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 154303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 154403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerDisconnectNative(JNIEnv* env, jobject object, jint serverIf, 154503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address, jint conn_id) 154603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 154703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 154803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 154903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 155003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->disconnect(serverIf, &bda, conn_id); 155103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 155203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 155303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddServiceNative (JNIEnv *env, jobject object, 155403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint service_type, jint service_id_inst_id, 155503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 155603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint num_handles) 155703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 155803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 155903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 156003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 156103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 156203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 156303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 156403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 156503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_service(server_if, &srvc_id, num_handles); 156603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 156703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 156803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddIncludedServiceNative (JNIEnv *env, jobject object, 156903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, jint included_svc_handle) 157003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 157103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 157203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_included_service(server_if, svc_handle, 157303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta included_svc_handle); 157403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 157503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 157603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddCharacteristicNative (JNIEnv *env, jobject object, 157703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, 157803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_uuid_lsb, jlong char_uuid_msb, 157903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint properties, jint permissions) 158003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 158103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 158203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 158303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 158403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, char_uuid_msb, char_uuid_lsb); 158503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 158603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_characteristic(server_if, svc_handle, 158703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &uuid, properties, permissions); 158803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 158903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 159003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddDescriptorNative (JNIEnv *env, jobject object, 159103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, 159203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong desc_uuid_lsb, jlong desc_uuid_msb, 159303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint permissions) 159403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 159503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 159603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 159703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 159803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, desc_uuid_msb, desc_uuid_lsb); 159903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 160003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_descriptor(server_if, svc_handle, &uuid, permissions); 160103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 160203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 160303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerStartServiceNative (JNIEnv *env, jobject object, 160403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, jint transport ) 160503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 160603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 160703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->start_service(server_if, svc_handle, transport); 160803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 160903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 161003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerStopServiceNative (JNIEnv *env, jobject object, 161103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle) 161203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 161303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 161403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->stop_service(server_if, svc_handle); 161503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 161603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 161703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerDeleteServiceNative (JNIEnv *env, jobject object, 161803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle) 161903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 162003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 162103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->delete_service(server_if, svc_handle); 162203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 162303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 162403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendIndicationNative (JNIEnv *env, jobject object, 162503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint attr_handle, jint conn_id, jbyteArray val) 162603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 162703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 162803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 162903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 163003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int val_len = env->GetArrayLength(val); 163103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 163203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_indication(server_if, attr_handle, conn_id, val_len, 163303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta /*confirm*/ 1, (char*)array); 163403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 163503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 163603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 163703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendNotificationNative (JNIEnv *env, jobject object, 163803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint attr_handle, jint conn_id, jbyteArray val) 163903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 164003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 164103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 164203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 164303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int val_len = env->GetArrayLength(val); 164403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 164503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_indication(server_if, attr_handle, conn_id, val_len, 164603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta /*confirm*/ 0, (char*)array); 164703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 164803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 164903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 165003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendResponseNative (JNIEnv *env, jobject object, 165103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint conn_id, jint trans_id, jint status, 165203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint handle, jint offset, jbyteArray val, jint auth_req) 165303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 165403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 165503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 165603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_response_t response; 165703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 165803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.handle = handle; 165903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.auth_req = auth_req; 166003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.offset = offset; 166103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.len = 0; 166203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 166303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (val != NULL) 166403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 166503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.len = (uint16_t) env->GetArrayLength(val); 166603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 166703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 166803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (int i = 0; i != response.attr_value.len; ++i) 166903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.value[i] = (uint8_t) array[i]; 167003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 167103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 167203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 167303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_response(conn_id, trans_id, status, &response); 167403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 167503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 167603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattTestNative(JNIEnv *env, jobject object, jint command, 167703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong uuid1_lsb, jlong uuid1_msb, jstring bda1, 167803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint p1, jint p2, jint p3, jint p4, jint p5 ) 167903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 168003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 168103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 168203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bt_bda1; 168303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bt_bda1, bda1); 168403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 168503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid1; 168603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid1.uu, uuid1_msb, uuid1_lsb); 168703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 168803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_test_params_t params; 168903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.bda1 = &bt_bda1; 169003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.uuid1 = &uuid1; 169103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u1 = p1; 169203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u2 = p2; 169303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u3 = p3; 169403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u4 = p4; 169503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u5 = p5; 169603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->test_command(command, ¶ms); 169703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 169803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 169903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 170003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * JNI function definitinos 170103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 170203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 170327bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang// JNI functions defined in AdvertiseManager class. 170427bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wangstatic JNINativeMethod sAdvertiseMethods[] = { 170527bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientEnableAdvNative", "(IIIIII)V", (void *) gattClientEnableAdvNative}, 170627bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientUpdateAdvNative", "(IIIIII)V", (void *) gattClientUpdateAdvNative}, 170727bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientSetAdvDataNative", "(IZZZI[B[B[B)V", (void *) gattClientSetAdvDataNative}, 170827bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientDisableAdvNative", "(I)V", (void *) gattClientDisableAdvNative}, 170927bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang}; 171027bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang 17111a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang// JNI functions defined in GattStateMachine class. 17121a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic JNINativeMethod sStateMachineMethods[] = { 17131a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang {"gattClientScanNative", "(Z)V", (void *) gattClientScanNative}, 17142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientConfigBatchScanStorageNative", "(IIII)V",(void *) gattClientConfigBatchScanStorageNative}, 17152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientStartBatchScanNative", "(IIIIII)V", (void *) gattClientStartBatchScanNative}, 17162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientStopBatchScanNative", "(I)V", (void *) gattClientStopBatchScanNative}, 17172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterParamAddNative", "(IIIIIIIIIII)V", (void *) gattClientScanFilterParamAddNative}, 17182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterParamDeleteNative", "(II)V", (void *) gattClientScanFilterParamDeleteNative}, 17192b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterParamClearAllNative", "(I)V", (void *) gattClientScanFilterParamClearAllNative}, 17202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterAddNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterAddNative}, 17212b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterDeleteNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterDeleteNative}, 17222b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterClearNative", "(II)V", (void *) gattClientScanFilterClearNative}, 17232b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterEnableNative", "(IZ)V", (void *) gattClientScanFilterEnableNative}, 17241a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang}; 17251a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 17261a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang// JNI functions defined in GattService class. 172703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic JNINativeMethod sMethods[] = { 172803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"classInitNative", "()V", (void *) classInitNative}, 172903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"initializeNative", "()V", (void *) initializeNative}, 173003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"cleanupNative", "()V", (void *) cleanupNative}, 173103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetDeviceTypeNative", "(Ljava/lang/String;)I", (void *) gattClientGetDeviceTypeNative}, 173203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRegisterAppNative", "(JJ)V", (void *) gattClientRegisterAppNative}, 173303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientUnregisterAppNative", "(I)V", (void *) gattClientUnregisterAppNative}, 173418591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta {"gattClientConnectNative", "(ILjava/lang/String;ZI)V", (void *) gattClientConnectNative}, 173503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientDisconnectNative", "(ILjava/lang/String;I)V", (void *) gattClientDisconnectNative}, 173603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRefreshNative", "(ILjava/lang/String;)V", (void *) gattClientRefreshNative}, 173703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientSearchServiceNative", "(IZJJ)V", (void *) gattClientSearchServiceNative}, 173803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetCharacteristicNative", "(IIIJJIJJ)V", (void *) gattClientGetCharacteristicNative}, 17397f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientGetDescriptorNative", "(IIIJJIJJIJJ)V", (void *) gattClientGetDescriptorNative}, 174003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetIncludedServiceNative", "(IIIJJIIJJ)V", (void *) gattClientGetIncludedServiceNative}, 174103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientReadCharacteristicNative", "(IIIJJIJJI)V", (void *) gattClientReadCharacteristicNative}, 17427f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientReadDescriptorNative", "(IIIJJIJJIJJI)V", (void *) gattClientReadDescriptorNative}, 174303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientWriteCharacteristicNative", "(IIIJJIJJII[B)V", (void *) gattClientWriteCharacteristicNative}, 17447f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientWriteDescriptorNative", "(IIIJJIJJIJJII[B)V", (void *) gattClientWriteDescriptorNative}, 174503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientExecuteWriteNative", "(IZ)V", (void *) gattClientExecuteWriteNative}, 174603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRegisterForNotificationsNative", "(ILjava/lang/String;IIJJIJJZ)V", (void *) gattClientRegisterForNotificationsNative}, 174703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientReadRemoteRssiNative", "(ILjava/lang/String;)V", (void *) gattClientReadRemoteRssiNative}, 1748873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang {"gattAdvertiseNative", "(IZ)V", (void *) gattAdvertiseNative}, 1749662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach {"gattClientConfigureMTUNative", "(II)V", (void *) gattClientConfigureMTUNative}, 175003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerRegisterAppNative", "(JJ)V", (void *) gattServerRegisterAppNative}, 175103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerUnregisterAppNative", "(I)V", (void *) gattServerUnregisterAppNative}, 175218591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta {"gattServerConnectNative", "(ILjava/lang/String;ZI)V", (void *) gattServerConnectNative}, 175303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerDisconnectNative", "(ILjava/lang/String;I)V", (void *) gattServerDisconnectNative}, 175403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddServiceNative", "(IIIJJI)V", (void *) gattServerAddServiceNative}, 175503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddIncludedServiceNative", "(III)V", (void *) gattServerAddIncludedServiceNative}, 175603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddCharacteristicNative", "(IIJJII)V", (void *) gattServerAddCharacteristicNative}, 175703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddDescriptorNative", "(IIJJI)V", (void *) gattServerAddDescriptorNative}, 175803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerStartServiceNative", "(III)V", (void *) gattServerStartServiceNative}, 175903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerStopServiceNative", "(II)V", (void *) gattServerStopServiceNative}, 176003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerDeleteServiceNative", "(II)V", (void *) gattServerDeleteServiceNative}, 176103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendIndicationNative", "(III[B)V", (void *) gattServerSendIndicationNative}, 176203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendNotificationNative", "(III[B)V", (void *) gattServerSendNotificationNative}, 176303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendResponseNative", "(IIIIII[BI)V", (void *) gattServerSendResponseNative}, 176403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1765873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang {"gattSetAdvDataNative", "(IZZZIII[B[B[B)V", (void *) gattSetAdvDataNative}, 176653f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham {"gattSetScanParametersNative", "(II)V", (void *) gattSetScanParametersNative}, 1767e84b9ab8ebca5e6d108d722fa84234fddf3685cdWei Wang {"gattClientReadScanReportsNative", "(II)V", (void *) gattClientReadScanReportsNative}, 176853f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham {"gattTestNative", "(IJJLjava/lang/String;IIIII)V", (void *) gattTestNative}, 176903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 177003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 177103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaint register_com_android_bluetooth_gatt(JNIEnv* env) 177203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 17731a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang int register_success = 17741a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/GattServiceStateMachine", 17752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sStateMachineMethods, NELEM(sStateMachineMethods)); 177627bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang register_success &= 177727bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/AdvertiseManager$AdvertiseNative", 177827bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang sAdvertiseMethods, NELEM(sAdvertiseMethods)); 17791a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang return register_success & 17801a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/GattService", 17812b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sMethods, NELEM(sMethods)); 178203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 178303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 1784