com_android_bluetooth_gatt.cpp revision 655434047df38242c1848eee283f134cfd299fd1
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_onReadDescriptor; 15303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onWriteDescriptor; 15403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onNotify; 15503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onGetCharacteristic; 15603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onGetDescriptor; 15703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onGetIncludedService; 15803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onRegisterForNotifications; 15903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onReadRemoteRssi; 16024dce60783d85fbf49f550203a383b2f4a171a52Wei Wangstatic jmethodID method_onAdvertiseCallback; 161662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbachstatic jmethodID method_onConfigureMTU; 1621a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onScanFilterConfig; 1632b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onScanFilterParamsConfigured; 1642b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onScanFilterEnableDisabled; 1651a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvEnable; 1661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvUpdate; 1671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvSetAdvData; 1681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic jmethodID method_onMultiAdvDisable; 169afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachstatic jmethodID method_onClientCongestion; 1702b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanStorageConfigured; 1712b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanStartStopped; 1722b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanReports; 1732b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onBatchScanThresholdCrossed; 174655434047df38242c1848eee283f134cfd299fd1Satya Calloji 175655434047df38242c1848eee283f134cfd299fd1Satya Callojistatic jmethodID method_CreateonTrackAdvFoundLostObject; 1762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic jmethodID method_onTrackAdvFoundLost; 17703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 178655434047df38242c1848eee283f134cfd299fd1Satya Calloji 17903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 18003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Server callback methods 18103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 18203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServerRegistered; 18303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onClientConnected; 18403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceAdded; 18503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onIncludedServiceAdded; 18603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onCharacteristicAdded; 18703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onDescriptorAdded; 18803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceStarted; 18903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceStopped; 19003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onServiceDeleted; 19103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onResponseSendCompleted; 19203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onAttributeRead; 19303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onAttributeWrite; 19403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jmethodID method_onExecuteWrite; 195afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachstatic jmethodID method_onNotificationSent; 196afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachstatic jmethodID method_onServerCongestion; 197e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbachstatic jmethodID method_onServerMtuChanged; 19803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 19903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 20003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Static variables 20103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 20203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 20303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_interface_t *sGattIf = NULL; 20403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic jobject mCallbacksObj = NULL; 20503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic JNIEnv *sCallbackEnv = NULL; 20603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 20703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic bool checkCallbackThread() { 20803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv = getCallbackEnv(); 20903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 21003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta JNIEnv* env = AndroidRuntime::getJNIEnv(); 21103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sCallbackEnv != env || sCallbackEnv == NULL) return false; 21203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return true; 21303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 21403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 21503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 21603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * BTA client callbacks 21703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 21803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 21903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_register_app_cb(int status, int clientIf, bt_uuid_t *app_uuid) 22003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 22103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 22203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientRegistered, status, 22303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta clientIf, UUID_PARAMS(app_uuid)); 22403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 22503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 22603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 22703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_scan_result_cb(bt_bdaddr_t* bda, int rssi, uint8_t* adv_data) 22803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 22903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 23003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 23103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 23203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 23303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 23403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 23503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 23603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 23703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb = sCallbackEnv->NewByteArray(62); 23803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, 62, (jbyte *) adv_data); 23903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 24003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanResult 24103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , address, rssi, jb); 24203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 24303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 24403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 24503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 24603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 24703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 24803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_open_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) 24903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 25003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 25103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 25203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 25303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 25403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 25503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 25603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 25703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 25803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConnected, 25903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta clientIf, conn_id, status, address); 26003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 26103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 26203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 26303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 26403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_close_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) 26503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 26603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 26703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 26803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 26903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 27003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 27103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 27203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 27303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onDisconnected, 27403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta clientIf, conn_id, status, address); 27503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 27603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 27703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 27803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 27903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_search_complete_cb(int conn_id, int status) 28003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 28103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 28203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onSearchCompleted, 28303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta conn_id, status); 28403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 28503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 28603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 28703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_search_result_cb(int conn_id, btgatt_srvc_id_t *srvc_id) 28803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 28903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 29003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onSearchResult, conn_id, 29103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta SRVC_ID_PARAMS(srvc_id)); 29203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 29303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 29403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 29503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_get_characteristic_cb(int conn_id, int status, 2967f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id, 29703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int char_prop) 29803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 29903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 30003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetCharacteristic 3017f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , conn_id, status, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id) 30203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , char_prop); 30303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 30403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 30503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 30603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_get_descriptor_cb(int conn_id, int status, 3077f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id, 3087f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t *descr_id) 30903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 31003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 31103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetDescriptor 3127f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , conn_id, status, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id) 3137f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS(descr_id)); 31403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 31503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 31603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 31703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_get_included_service_cb(int conn_id, int status, 31803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t *srvc_id, btgatt_srvc_id_t *incl_srvc_id) 31903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 32003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 32103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onGetIncludedService 32203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS(srvc_id), SRVC_ID_PARAMS(incl_srvc_id)); 32303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 32403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 32503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 32603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_register_for_notification_cb(int conn_id, int registered, int status, 3277f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id) 32803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 32903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 33003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onRegisterForNotifications 3317f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , conn_id, status, registered, SRVC_ID_PARAMS(srvc_id), GATT_ID_PARAMS(char_id)); 33203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 33303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 33403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 33503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_notify_cb(int conn_id, btgatt_notify_params_t *p_data) 33603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 33703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 33803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 33903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 34003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address), "%02X:%02X:%02X:%02X:%02X:%02X", 34103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta p_data->bda.address[0], p_data->bda.address[1], p_data->bda.address[2], 34203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta p_data->bda.address[3], p_data->bda.address[4], p_data->bda.address[5]); 34303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 34403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 34503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb = sCallbackEnv->NewByteArray(p_data->len); 34603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, p_data->len, (jbyte *) p_data->value); 34703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 34803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotify 34903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, address, SRVC_ID_PARAMS((&p_data->srvc_id)) 3507f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)), p_data->is_notify, jb); 35103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 35203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 35303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 35403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 35503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 35603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 35703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_read_characteristic_cb(int conn_id, int status, btgatt_read_params_t *p_data) 35803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 35903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 36003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 36103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb; 36203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( status == 0 ) //successful 36303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 36403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(p_data->value.len); 36503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, p_data->value.len, 36603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta (jbyte *) p_data->value.value); 36703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 36803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint8_t value = 0; 36903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(1); 37003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, 1, (jbyte *) &value); 37103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 37203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 37303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadCharacteristic 37403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 3757f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)), p_data->value_type, jb); 37603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 37703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 37803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 37903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 38003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_write_characteristic_cb(int conn_id, int status, btgatt_write_params_t *p_data) 38103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 38203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 38303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteCharacteristic 38403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 3857f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id))); 38603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 38703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 38803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 38903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_execute_write_cb(int conn_id, int status) 39003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 39103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 39203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExecuteCompleted 39303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status); 39403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 39503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 39603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 39703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_read_descriptor_cb(int conn_id, int status, btgatt_read_params_t *p_data) 39803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 39903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 40003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 40103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray jb; 40203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( p_data->value.len != 0 ) 40303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 40403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(p_data->value.len); 40503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->SetByteArrayRegion(jb, 0, p_data->value.len, 40603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta (jbyte *) p_data->value.value); 40703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 40803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jb = sCallbackEnv->NewByteArray(1); 40903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 41003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 41103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadDescriptor 41203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 4137f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)), GATT_ID_PARAMS((&p_data->descr_id)) 41403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , p_data->value_type, jb); 41503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 41603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(jb); 41703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 41803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 41903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 42003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_write_descriptor_cb(int conn_id, int status, btgatt_write_params_t *p_data) 42103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 42203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 42303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onWriteDescriptor 42403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , conn_id, status, SRVC_ID_PARAMS((&p_data->srvc_id)) 4257f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->char_id)) 4267f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach , GATT_ID_PARAMS((&p_data->descr_id))); 42703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 42803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 42903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 43003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgattc_remote_rssi_cb(int client_if,bt_bdaddr_t* bda, int rssi, int status) 43103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 43203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 43303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 43403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 43503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 43603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 43703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 43803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 43903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadRemoteRssi, 44003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta client_if, address, rssi, status); 44103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 44203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 44303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 44403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 44524dce60783d85fbf49f550203a383b2f4a171a52Wei Wangvoid btgattc_advertise_cb(int status, int client_if) 44624dce60783d85fbf49f550203a383b2f4a171a52Wei Wang{ 44724dce60783d85fbf49f550203a383b2f4a171a52Wei Wang CHECK_CALLBACK_ENV 44824dce60783d85fbf49f550203a383b2f4a171a52Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAdvertiseCallback, status, client_if); 44924dce60783d85fbf49f550203a383b2f4a171a52Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 45024dce60783d85fbf49f550203a383b2f4a171a52Wei Wang} 45124dce60783d85fbf49f550203a383b2f4a171a52Wei Wang 452662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbachvoid btgattc_configure_mtu_cb(int conn_id, int status, int mtu) 453662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach{ 454662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach CHECK_CALLBACK_ENV 455662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConfigureMTU, 456662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach conn_id, status, mtu); 457662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 458662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach} 459662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach 4602b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_scan_filter_cfg_cb(int action, int client_if, int status, int filt_type, 4612b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int avbl_space) 4621a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 4631a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 4641a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterConfig, 4652b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang action, status, client_if, filt_type, avbl_space); 4662b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4672b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 4682b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 4692b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_scan_filter_param_cb(int action, int client_if, int status, int avbl_space) 4702b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 4712b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 4722b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterParamsConfigured, 4732b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang action, status, client_if, avbl_space); 4742b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 4762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 4772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_scan_filter_status_cb(int action, int client_if, int status) 4782b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 4792b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 4802b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanFilterEnableDisabled, 4812b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang action, status, client_if); 4821a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4831a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 4841a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 4851a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_enable_cb(int client_if, int status) 4861a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 4871a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 4881a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvEnable, status,client_if); 4891a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4901a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 4911a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 4921a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_update_cb(int client_if, int status) 4931a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 4941a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 4951a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvUpdate, status, client_if); 4961a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 4971a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 4981a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 4991a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_setadv_data_cb(int client_if, int status) 5001a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 5011a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 5021a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvSetAdvData, status, client_if); 5031a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5041a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 5051a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 5061a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangvoid btgattc_multiadv_disable_cb(int client_if, int status) 5071a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 5081a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang CHECK_CALLBACK_ENV 5091a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onMultiAdvDisable, status, client_if); 5101a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5111a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 5121a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 513afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgattc_congestion_cb(int conn_id, bool congested) 514afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 515afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 516afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientCongestion, conn_id, congested); 517afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 518afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 519afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 5202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_cfg_storage_cb(int client_if, int status) 5212b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5222b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5232b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanStorageConfigured, status, client_if); 5242b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5252b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5262b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5272b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_startstop_cb(int startstop_action, int client_if, int status) 5282b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5292b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5302b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanStartStopped, startstop_action, 5312b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang status, client_if); 5322b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5342b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5352b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_reports_cb(int client_if, int status, int report_format, 5362b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int num_records, int data_len, uint8_t *p_rep_data) 5372b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5382b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5392b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyteArray jb = sCallbackEnv->NewByteArray(data_len); 5402b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->SetByteArrayRegion(jb, 0, data_len, (jbyte *) p_rep_data); 5412b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5422b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanReports, status, client_if, 5432b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang report_format, num_records, jb); 5442b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->DeleteLocalRef(jb); 5452b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5462b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5472b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 5482b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangvoid btgattc_batchscan_threshold_cb(int client_if) 5492b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5502b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5512b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onBatchScanThresholdCrossed, client_if); 5522b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5532b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5542b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 555655434047df38242c1848eee283f134cfd299fd1Satya Callojivoid btgattc_track_adv_event_cb(btgatt_track_adv_info_t *p_adv_track_info) 5562b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 5572b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang CHECK_CALLBACK_ENV 5582b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang char c_address[32]; 559655434047df38242c1848eee283f134cfd299fd1Satya Calloji jobject trackadv_obj = NULL; 560655434047df38242c1848eee283f134cfd299fd1Satya Calloji 5612b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang snprintf(c_address, sizeof(c_address),"%02X:%02X:%02X:%02X:%02X:%02X", 562655434047df38242c1848eee283f134cfd299fd1Satya Calloji p_adv_track_info->bd_addr.address[0], p_adv_track_info->bd_addr.address[1], 563655434047df38242c1848eee283f134cfd299fd1Satya Calloji p_adv_track_info->bd_addr.address[2], p_adv_track_info->bd_addr.address[3], 564655434047df38242c1848eee283f134cfd299fd1Satya Calloji p_adv_track_info->bd_addr.address[4], p_adv_track_info->bd_addr.address[5]); 565655434047df38242c1848eee283f134cfd299fd1Satya Calloji 5662b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring address = sCallbackEnv->NewStringUTF(c_address); 567655434047df38242c1848eee283f134cfd299fd1Satya Calloji 568655434047df38242c1848eee283f134cfd299fd1Satya Calloji jbyteArray jb_adv_pkt = sCallbackEnv->NewByteArray(p_adv_track_info->adv_pkt_len); 569655434047df38242c1848eee283f134cfd299fd1Satya Calloji jbyteArray jb_scan_rsp = sCallbackEnv->NewByteArray(p_adv_track_info->scan_rsp_len); 570655434047df38242c1848eee283f134cfd299fd1Satya Calloji 571655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->SetByteArrayRegion(jb_adv_pkt, 0, p_adv_track_info->adv_pkt_len, 572655434047df38242c1848eee283f134cfd299fd1Satya Calloji (jbyte *) p_adv_track_info->p_adv_pkt_data); 573655434047df38242c1848eee283f134cfd299fd1Satya Calloji 574655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->SetByteArrayRegion(jb_scan_rsp, 0, p_adv_track_info->scan_rsp_len, 575655434047df38242c1848eee283f134cfd299fd1Satya Calloji (jbyte *) p_adv_track_info->p_scan_rsp_data); 576655434047df38242c1848eee283f134cfd299fd1Satya Calloji 577655434047df38242c1848eee283f134cfd299fd1Satya Calloji trackadv_obj = sCallbackEnv->CallObjectMethod(mCallbacksObj, method_CreateonTrackAdvFoundLostObject, 578655434047df38242c1848eee283f134cfd299fd1Satya Calloji p_adv_track_info->client_if, p_adv_track_info->adv_pkt_len, jb_adv_pkt, 579655434047df38242c1848eee283f134cfd299fd1Satya Calloji p_adv_track_info->scan_rsp_len, jb_scan_rsp, p_adv_track_info->filt_index, 580655434047df38242c1848eee283f134cfd299fd1Satya Calloji p_adv_track_info->advertiser_state, p_adv_track_info->advertiser_info_present, 581655434047df38242c1848eee283f134cfd299fd1Satya Calloji address, p_adv_track_info->addr_type, p_adv_track_info->tx_power, 582655434047df38242c1848eee283f134cfd299fd1Satya Calloji p_adv_track_info->rssi_value, p_adv_track_info->time_stamp); 583655434047df38242c1848eee283f134cfd299fd1Satya Calloji 584655434047df38242c1848eee283f134cfd299fd1Satya Calloji if (NULL != trackadv_obj) 585655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onTrackAdvFoundLost, trackadv_obj); 586655434047df38242c1848eee283f134cfd299fd1Satya Calloji 5872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->DeleteLocalRef(address); 588655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->DeleteLocalRef(jb_adv_pkt); 589655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->DeleteLocalRef(jb_scan_rsp); 590655434047df38242c1848eee283f134cfd299fd1Satya Calloji 5912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 59403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_client_callbacks_t sGattClientCallbacks = { 59503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_register_app_cb, 59603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_scan_result_cb, 59703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_open_cb, 59803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_close_cb, 59903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_search_complete_cb, 60003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_search_result_cb, 60103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_characteristic_cb, 60203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_descriptor_cb, 60303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_included_service_cb, 60403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_register_for_notification_cb, 60503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_notify_cb, 60603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_read_characteristic_cb, 60703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_write_characteristic_cb, 60803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_read_descriptor_cb, 60903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_write_descriptor_cb, 61003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_execute_write_cb, 61124dce60783d85fbf49f550203a383b2f4a171a52Wei Wang btgattc_remote_rssi_cb, 612662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach btgattc_advertise_cb, 613662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach btgattc_configure_mtu_cb, 6142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_cfg_cb, 6152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_param_cb, 6162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_status_cb, 6171a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_enable_cb, 6181a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_update_cb, 6191a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_setadv_data_cb, 620afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgattc_multiadv_disable_cb, 621f2919fe3409cb17a062baa74361d2129d90ece2bWei Wang btgattc_congestion_cb, 6222b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_cfg_storage_cb, 6232b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_startstop_cb, 6242b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_reports_cb, 6252b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_threshold_cb, 6262b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_track_adv_event_cb 62703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 62803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 62903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 63003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 63103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * BTA server callbacks 63203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 63303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 63403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_register_app_cb(int status, int server_if, bt_uuid_t *uuid) 63503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 63603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 63703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerRegistered 63803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , status, server_if, UUID_PARAMS(uuid)); 63903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 64003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 64103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 642dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbachvoid btgatts_connection_cb(int conn_id, int server_if, int connected, bt_bdaddr_t *bda) 64303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 64403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 64503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 64603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 64703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 64803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 64903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 65003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 65103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 65203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientConnected, 653dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbach address, connected, conn_id, server_if); 65403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 65503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 65603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 65703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 65803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_added_cb(int status, int server_if, 65903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t *srvc_id, int srvc_handle) 66003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 66103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 66203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceAdded, status, 66303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, SRVC_ID_PARAMS(srvc_id), 66403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle); 66503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 66603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 66703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 66803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_included_service_added_cb(int status, int server_if, 66903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int srvc_handle, 67003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int incl_srvc_handle) 67103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 67203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 67303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onIncludedServiceAdded, 67403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, srvc_handle, incl_srvc_handle); 67503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 67603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 67703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 67803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_characteristic_added_cb(int status, int server_if, bt_uuid_t *char_id, 67903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int srvc_handle, int char_handle) 68003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 68103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 68203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onCharacteristicAdded, 68303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, UUID_PARAMS(char_id), 68403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle, char_handle); 68503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 68603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 68703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 68803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_descriptor_added_cb(int status, int server_if, 68903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t *descr_id, int srvc_handle, 69003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int descr_handle) 69103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 69203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 69303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onDescriptorAdded, 69403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, UUID_PARAMS(descr_id), 69503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle, descr_handle); 69603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 69703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 69803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 69903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_started_cb(int status, int server_if, int srvc_handle) 70003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 70103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 70203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceStarted, status, 70303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 70403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 70503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 70603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 70703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_stopped_cb(int status, int server_if, int srvc_handle) 70803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 70903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 71003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceStopped, status, 71103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 71203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 71303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 71403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 71503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_deleted_cb(int status, int server_if, int srvc_handle) 71603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 71703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 71803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceDeleted, status, 71903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 72003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 72103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 72203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 72303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_read_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, 72403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int attr_handle, int offset, bool is_long) 72503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 72603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 72703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 72803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 72903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 73003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 73103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 73203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 73303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 73403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAttributeRead, 73503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, attr_handle, 73603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta offset, is_long); 73703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 73803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 73903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 74003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 74103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_write_cb(int conn_id, int trans_id, 74203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t *bda, int attr_handle, 74303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int offset, int length, 74403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bool need_rsp, bool is_prep, uint8_t* value) 74503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 74603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 74703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 74803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 74903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 75003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 75103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 75203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 75303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 75403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 75503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray val = sCallbackEnv->NewByteArray(length); 75603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (val) sCallbackEnv->SetByteArrayRegion(val, 0, length, (jbyte*)value); 75703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAttributeWrite, 75803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, attr_handle, 75903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta offset, length, need_rsp, is_prep, val); 76003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 76103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(val); 76203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 76303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 76403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 76503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_exec_write_cb(int conn_id, int trans_id, 76603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t *bda, int exec_write) 76703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 76803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 76903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 77003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 77103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 77203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 77303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 77403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 77503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 77603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExecuteWrite, 77703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, exec_write); 77803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 77903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 78003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 78103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 78203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_response_confirmation_cb(int status, int handle) 78303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 78403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 78503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onResponseSendCompleted, 78603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, handle); 78703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 78803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 78903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 790afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgatts_indication_sent_cb(int conn_id, int status) 791afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 792afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 793afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotificationSent, 794afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach conn_id, status); 795afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 796afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 797afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 798afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgatts_congestion_cb(int conn_id, bool congested) 799afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 800afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 801afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerCongestion, conn_id, congested); 802afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 803afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 804afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 805e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbachvoid btgatts_mtu_changed_cb(int conn_id, int mtu) 806e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach{ 807e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach CHECK_CALLBACK_ENV 808e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerMtuChanged, conn_id, mtu); 809e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 810e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach} 811e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach 81203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_server_callbacks_t sGattServerCallbacks = { 81303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_register_app_cb, 81403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_connection_cb, 81503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_added_cb, 81603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_included_service_added_cb, 81703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_characteristic_added_cb, 81803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_descriptor_added_cb, 81903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_started_cb, 82003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_stopped_cb, 82103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_deleted_cb, 82203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_read_cb, 82303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_write_cb, 82403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_exec_write_cb, 825afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgatts_response_confirmation_cb, 826afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgatts_indication_sent_cb, 827e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach btgatts_congestion_cb, 828e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach btgatts_mtu_changed_cb 82903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 83003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 83103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 83203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * GATT callbacks 83303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 83403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 83503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_callbacks_t sGattCallbacks = { 83603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sizeof(btgatt_callbacks_t), 83703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &sGattClientCallbacks, 83803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &sGattServerCallbacks 83903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 84003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 84103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 84203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native function definitions 84303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 84403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void classInitNative(JNIEnv* env, jclass clazz) { 84503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 84603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta // Client callbacks 84703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 84803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onClientRegistered = env->GetMethodID(clazz, "onClientRegistered", "(IIJJ)V"); 84903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onScanResult = env->GetMethodID(clazz, "onScanResult", "(Ljava/lang/String;I[B)V"); 85003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onConnected = env->GetMethodID(clazz, "onConnected", "(IIILjava/lang/String;)V"); 85103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onDisconnected = env->GetMethodID(clazz, "onDisconnected", "(IIILjava/lang/String;)V"); 85203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onReadCharacteristic = env->GetMethodID(clazz, "onReadCharacteristic", "(IIIIJJIJJI[B)V"); 85303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onWriteCharacteristic = env->GetMethodID(clazz, "onWriteCharacteristic", "(IIIIJJIJJ)V"); 85403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onExecuteCompleted = env->GetMethodID(clazz, "onExecuteCompleted", "(II)V"); 85503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onSearchCompleted = env->GetMethodID(clazz, "onSearchCompleted", "(II)V"); 85603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onSearchResult = env->GetMethodID(clazz, "onSearchResult", "(IIIJJ)V"); 8577f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onReadDescriptor = env->GetMethodID(clazz, "onReadDescriptor", "(IIIIJJIJJIJJI[B)V"); 8587f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onWriteDescriptor = env->GetMethodID(clazz, "onWriteDescriptor", "(IIIIJJIJJIJJ)V"); 85903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onNotify = env->GetMethodID(clazz, "onNotify", "(ILjava/lang/String;IIJJIJJZ[B)V"); 86003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onGetCharacteristic = env->GetMethodID(clazz, "onGetCharacteristic", "(IIIIJJIJJI)V"); 8617f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onGetDescriptor = env->GetMethodID(clazz, "onGetDescriptor", "(IIIIJJIJJIJJ)V"); 86203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onGetIncludedService = env->GetMethodID(clazz, "onGetIncludedService", "(IIIIJJIIJJ)V"); 86303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onRegisterForNotifications = env->GetMethodID(clazz, "onRegisterForNotifications", "(IIIIIJJIJJ)V"); 86403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onReadRemoteRssi = env->GetMethodID(clazz, "onReadRemoteRssi", "(ILjava/lang/String;II)V"); 865662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach method_onConfigureMTU = env->GetMethodID(clazz, "onConfigureMTU", "(III)V"); 8661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang method_onAdvertiseCallback = env->GetMethodID(clazz, "onAdvertiseCallback", "(II)V"); 8672b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterConfig = env->GetMethodID(clazz, "onScanFilterConfig", "(IIIII)V"); 8682b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterParamsConfigured = env->GetMethodID(clazz, "onScanFilterParamsConfigured", "(IIII)V"); 8692b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterEnableDisabled = env->GetMethodID(clazz, "onScanFilterEnableDisabled", "(III)V"); 87027bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvEnable = env->GetMethodID(clazz, "onAdvertiseInstanceEnabled", "(II)V"); 87127bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvUpdate = env->GetMethodID(clazz, "onAdvertiseDataUpdated", "(II)V"); 87227bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvSetAdvData = env->GetMethodID(clazz, "onAdvertiseDataSet", "(II)V"); 87327bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvDisable = env->GetMethodID(clazz, "onAdvertiseInstanceDisabled", "(II)V"); 874afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onClientCongestion = env->GetMethodID(clazz, "onClientCongestion", "(IZ)V"); 8752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanStorageConfigured = env->GetMethodID(clazz, "onBatchScanStorageConfigured", "(II)V"); 8762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanStartStopped = env->GetMethodID(clazz, "onBatchScanStartStopped", "(III)V"); 8772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanReports = env->GetMethodID(clazz, "onBatchScanReports", "(IIII[B)V"); 8782b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanThresholdCrossed = env->GetMethodID(clazz, "onBatchScanThresholdCrossed", "(I)V"); 879655434047df38242c1848eee283f134cfd299fd1Satya Calloji method_CreateonTrackAdvFoundLostObject = env->GetMethodID(clazz, "CreateonTrackAdvFoundLostObject", "(II[BI[BIIILjava/lang/String;IIII)Lcom/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo;"); 880655434047df38242c1848eee283f134cfd299fd1Satya Calloji method_onTrackAdvFoundLost = env->GetMethodID(clazz, "onTrackAdvFoundLost", 881655434047df38242c1848eee283f134cfd299fd1Satya Calloji "(Lcom/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo;)V"); 88203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 883655434047df38242c1848eee283f134cfd299fd1Satya Calloji // Server callbacks 88403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 88503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServerRegistered = env->GetMethodID(clazz, "onServerRegistered", "(IIJJ)V"); 886dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbach method_onClientConnected = env->GetMethodID(clazz, "onClientConnected", "(Ljava/lang/String;ZII)V"); 88703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceAdded = env->GetMethodID(clazz, "onServiceAdded", "(IIIIJJI)V"); 88803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onIncludedServiceAdded = env->GetMethodID(clazz, "onIncludedServiceAdded", "(IIII)V"); 88903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onCharacteristicAdded = env->GetMethodID(clazz, "onCharacteristicAdded", "(IIJJII)V"); 89003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onDescriptorAdded = env->GetMethodID(clazz, "onDescriptorAdded", "(IIJJII)V"); 89103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceStarted = env->GetMethodID(clazz, "onServiceStarted", "(III)V"); 89203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceStopped = env->GetMethodID(clazz, "onServiceStopped", "(III)V"); 89303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceDeleted = env->GetMethodID(clazz, "onServiceDeleted", "(III)V"); 89403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onResponseSendCompleted = env->GetMethodID(clazz, "onResponseSendCompleted", "(II)V"); 89503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onAttributeRead= env->GetMethodID(clazz, "onAttributeRead", "(Ljava/lang/String;IIIIZ)V"); 89603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onAttributeWrite= env->GetMethodID(clazz, "onAttributeWrite", "(Ljava/lang/String;IIIIIZZ[B)V"); 89703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onExecuteWrite= env->GetMethodID(clazz, "onExecuteWrite", "(Ljava/lang/String;III)V"); 898afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onNotificationSent = env->GetMethodID(clazz, "onNotificationSent", "(II)V"); 899afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onServerCongestion = env->GetMethodID(clazz, "onServerCongestion", "(IZ)V"); 900e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach method_onServerMtuChanged = env->GetMethodID(clazz, "onMtuChanged", "(II)V"); 90103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 90203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta info("classInitNative: Success!"); 90303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 90403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 90503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const bt_interface_t* btIf; 90603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 90703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void initializeNative(JNIEnv *env, jobject object) { 90803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if(btIf) 90903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 91003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 91103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (btIf = getBluetoothInterface()) == NULL) { 91203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Bluetooth module is not loaded"); 91303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 91403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 91503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 91603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sGattIf != NULL) { 91703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta ALOGW("Cleaning up Bluetooth GATT Interface before initializing..."); 91803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->cleanup(); 91903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 92003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 92103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 92203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (mCallbacksObj != NULL) { 92303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta ALOGW("Cleaning up Bluetooth GATT callback object"); 92403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->DeleteGlobalRef(mCallbacksObj); 92503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = NULL; 92603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 92703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 92803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (sGattIf = (btgatt_interface_t *) 92903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btIf->get_profile_interface(BT_PROFILE_GATT_ID)) == NULL) { 93003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Failed to get Bluetooth GATT Interface"); 93103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 93203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 93303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 93403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_status_t status; 93503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (status = sGattIf->init(&sGattCallbacks)) != BT_STATUS_SUCCESS) { 93603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Failed to initialize Bluetooth GATT, status: %d", status); 93703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 93803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 93903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 94003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 94103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = env->NewGlobalRef(object); 94203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 94303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 94403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void cleanupNative(JNIEnv *env, jobject object) { 94503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_status_t status; 94603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!btIf) return; 94703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 94803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sGattIf != NULL) { 94903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->cleanup(); 95003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 95103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 95203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 95303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (mCallbacksObj != NULL) { 95403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->DeleteGlobalRef(mCallbacksObj); 95503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = NULL; 95603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 95703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btIf = NULL; 95803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 95903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 96003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 96103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native Client functions 96203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 96303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 96403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic int gattClientGetDeviceTypeNative(JNIEnv* env, jobject object, jstring address) 96503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 96603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return 0; 96703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 96803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 96903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return sGattIf->client->get_device_type(&bda); 97003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 97103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 97203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRegisterAppNative(JNIEnv* env, jobject object, 97303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong app_uuid_lsb, jlong app_uuid_msb ) 97403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 97503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 97603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 97703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 97803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb); 97903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->register_client(&uuid); 98003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 98103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 98203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientUnregisterAppNative(JNIEnv* env, jobject object, jint clientIf) 98303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 98403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 98503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->unregister_client(clientIf); 98603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 98703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 988f745ace608784e226a78170bf5a24fe114f1026fPrerepa Viswanadhamstatic void gattClientScanNative(JNIEnv* env, jobject object, jboolean start) 98903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 99003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 991f745ace608784e226a78170bf5a24fe114f1026fPrerepa Viswanadham sGattIf->client->scan(start); 99203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 99303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 99403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientConnectNative(JNIEnv* env, jobject object, jint clientif, 99518591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta jstring address, jboolean isDirect, jint transport) 99603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 99703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 99803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 99903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 100003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 100118591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta sGattIf->client->connect(clientif, &bda, isDirect, transport); 100203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 100303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 100403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientDisconnectNative(JNIEnv* env, jobject object, jint clientIf, 100503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address, jint conn_id) 100603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 100703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 100803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 100903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 101003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->disconnect(clientIf, &bda, conn_id); 101103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 101203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 101303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRefreshNative(JNIEnv* env, jobject object, jint clientIf, 101403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address) 101503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 101603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 101703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 101803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 101903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 102003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->refresh(clientIf, &bda); 102103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 102203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 102303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientSearchServiceNative(JNIEnv* env, jobject object, jint conn_id, 102403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jboolean search_all, jlong service_uuid_lsb, jlong service_uuid_msb) 102503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 102603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 102703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 102803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 102903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, service_uuid_msb, service_uuid_lsb); 103003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->search_service(conn_id, search_all ? 0 : &uuid); 103103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 103203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 103303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetCharacteristicNative(JNIEnv* env, jobject object, 103403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, 103503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 103603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 103703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 103803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb) 103903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 104003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 104103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 104203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 104303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 104403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 104503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 104603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 104703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10487f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 104903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 105003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 105103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 105203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (char_id_uuid_lsb == 0) 105303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 105403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_characteristic(conn_id, &srvc_id, 0); 105503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 105603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_characteristic(conn_id, &srvc_id, &char_id); 105703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 105803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 105903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 106003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetDescriptorNative(JNIEnv* env, jobject object, 106103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, 106203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 106303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 106403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 106503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 10667f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 106703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb) 106803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 106903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 107003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 107103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 107203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 107303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 107403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 107503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10767f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 107703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 107803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 107903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10807f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 10817f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 10827f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 108303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 108403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (descr_id_uuid_lsb == 0) 108503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 108603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_descriptor(conn_id, &srvc_id, &char_id, 0); 108703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 108803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_descriptor(conn_id, &srvc_id, &char_id, &descr_id); 108903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 109003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 109103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 109203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetIncludedServiceNative(JNIEnv* env, jobject object, 109303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 109403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 109503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint incl_service_id_inst_id, jint incl_service_type, 109603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong incl_service_id_uuid_lsb, jlong incl_service_id_uuid_msb) 109703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 109803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 109903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 110003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 110103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 110203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 110303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 110403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 110503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t incl_srvc_id; 110603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta incl_srvc_id.id.inst_id = (uint8_t) incl_service_id_inst_id; 110703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta incl_srvc_id.is_primary = (incl_service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 110803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(incl_srvc_id.id.uuid.uu, incl_service_id_uuid_msb, incl_service_id_uuid_lsb); 110903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 111003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (incl_service_id_uuid_lsb == 0) 111103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 111203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_included_service(conn_id, &srvc_id, 0); 111303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 111403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_included_service(conn_id, &srvc_id, &incl_srvc_id); 111503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 111603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 111703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 111803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadCharacteristicNative(JNIEnv* env, jobject object, 111903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 112003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 112103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 112203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 112303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint authReq) 112403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 112503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 112603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 112703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 112803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 112903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 113003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 113103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11327f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 113303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 113403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 113503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 113603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_characteristic(conn_id, &srvc_id, &char_id, authReq); 113703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 113803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 113903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadDescriptorNative(JNIEnv* env, jobject object, 114003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 114103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 114203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 114303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 11447f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 114503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb, 114603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint authReq) 114703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 114803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 114903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 115003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 115103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 115203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 115303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 115403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11557f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 115603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 115703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 115803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11597f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 11607f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 11617f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 116203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 116303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_descriptor(conn_id, &srvc_id, &char_id, &descr_id, authReq); 116403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 116503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 116603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientWriteCharacteristicNative(JNIEnv* env, jobject object, 116703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 116803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 116903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 117003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 117103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint write_type, jint auth_req, jbyteArray value) 117203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 117303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 117403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 117503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 117603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 117703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 117803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 117903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11807f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 118103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 118203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 118303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 118403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint16_t len = (uint16_t) env->GetArrayLength(value); 118503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte *p_value = env->GetByteArrayElements(value, NULL); 118603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (p_value == NULL) return; 118703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 118803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->write_characteristic(conn_id, &srvc_id, &char_id, 118903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta write_type, len, auth_req, (char*)p_value); 119003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(value, p_value, 0); 119103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 119203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 119303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientExecuteWriteNative(JNIEnv* env, jobject object, 119403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jboolean execute) 119503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 119603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 119703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->execute_write(conn_id, execute ? 1 : 0); 119803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 119903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 120003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientWriteDescriptorNative(JNIEnv* env, jobject object, 120103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 120203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 120303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 120403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 12057f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 120603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb, 120703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint write_type, jint auth_req, jbyteArray value) 120803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 120903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 121003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1211460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach if (value == NULL) { 1212460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach warn("gattClientWriteDescriptorNative() ignoring NULL array"); 1213460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach return; 1214460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach } 1215460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach 121603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 121703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 121803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 121903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 122003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12217f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 122203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 122303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 122403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12257f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 12267f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 12277f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 122803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 122903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint16_t len = (uint16_t) env->GetArrayLength(value); 123003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte *p_value = env->GetByteArrayElements(value, NULL); 123103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (p_value == NULL) return; 123203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 123303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->write_descriptor(conn_id, &srvc_id, &char_id, &descr_id, 123403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta write_type, len, auth_req, (char*)p_value); 123503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(value, p_value, 0); 123603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 123703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 123803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRegisterForNotificationsNative(JNIEnv* env, jobject object, 123903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint clientIf, jstring address, 124003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 124103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 124203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 124303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 124403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jboolean enable) 124503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 124603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 124703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 124803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 124903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 125003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 125103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 125203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12537f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 125403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 125503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 125603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 125703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bd_addr; 125803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta const char *c_address = env->GetStringUTFChars(address, NULL); 125903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr_str_to_addr(c_address, bd_addr.address); 126003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 126103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (enable) 126203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->register_for_notification(clientIf, &bd_addr, &srvc_id, &char_id); 126303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta else 126403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->deregister_for_notification(clientIf, &bd_addr, &srvc_id, &char_id); 126503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 126603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 126703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadRemoteRssiNative(JNIEnv* env, jobject object, jint clientif, 126803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address) 126903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 127003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 127103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 127203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 127303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 127403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 127503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_remote_rssi(clientif, &bda); 127603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 127703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1278873b8064cca4d0f32808842a39e54e305dd5b410Wei Wangstatic void gattAdvertiseNative(JNIEnv *env, jobject object, 127997d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach jint client_if, jboolean start) 128097d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach{ 128197d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach if (!sGattIf) return; 128297d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach sGattIf->client->listen(client_if, start); 128397d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach} 128497d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 12852b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattSetAdvDataNative(JNIEnv *env, jobject object, jint client_if, 12862b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jboolean setScanRsp, jboolean inclName, jboolean inclTxPower, jint minInterval, 12872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint maxInterval, jint appearance, jbyteArray manufacturerData, jbyteArray serviceData, 1288873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyteArray serviceUuid) 128997d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach{ 129097d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach if (!sGattIf) return; 1291873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* arr_data = env->GetByteArrayElements(manufacturerData, NULL); 129297d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach uint16_t arr_len = (uint16_t) env->GetArrayLength(manufacturerData); 129397d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 1294873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* service_data = env->GetByteArrayElements(serviceData, NULL); 1295873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang uint16_t service_data_len = (uint16_t) env->GetArrayLength(serviceData); 1296873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang 1297873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* service_uuid = env->GetByteArrayElements(serviceUuid, NULL); 1298873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang uint16_t service_uuid_len = (uint16_t) env->GetArrayLength(serviceUuid); 1299873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang 130097d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach sGattIf->client->set_adv_data(client_if, setScanRsp, inclName, inclTxPower, 1301873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang minInterval, maxInterval, appearance, arr_len, (char*)arr_data, 1302873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang service_data_len, (char*)service_data, service_uuid_len, 1303873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang (char*)service_uuid); 130497d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 130597d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach env->ReleaseByteArrayElements(manufacturerData, arr_data, JNI_ABORT); 1306873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang env->ReleaseByteArrayElements(serviceData, service_data, JNI_ABORT); 1307873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang env->ReleaseByteArrayElements(serviceUuid, service_uuid, JNI_ABORT); 130897d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach} 130997d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 131053f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadhamstatic void gattSetScanParametersNative(JNIEnv* env, jobject object, 13112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_interval_unit, jint scan_window_unit) 131253f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham{ 131353f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham if (!sGattIf) return; 13142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->set_scan_parameters(scan_interval_unit, scan_window_unit); 131553f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham} 131603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1317655434047df38242c1848eee283f134cfd299fd1Satya Callojistatic void gattClientScanFilterParamAddNative(JNIEnv* env, jobject object, jobject params) 13182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 13192b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 13202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int add_scan_filter_params_action = 0; 1321655434047df38242c1848eee283f134cfd299fd1Satya Calloji btgatt_filt_param_setup_t filt_params; 1322655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1323655434047df38242c1848eee283f134cfd299fd1Satya Calloji jmethodID methodId = 0; 1324655434047df38242c1848eee283f134cfd299fd1Satya Calloji jclass filtparam = env->GetObjectClass(params); 1325655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1326655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getClientIf", "()I"); 1327655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.client_if = env->CallIntMethod(params, methodId);; 1328655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1329655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.action = add_scan_filter_params_action; 1330655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1331655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFiltIndex", "()I"); 1332655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.filt_index = env->CallIntMethod(params, methodId);; 1333655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1334655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFeatSeln", "()I"); 1335655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.feat_seln = env->CallIntMethod(params, methodId);; 1336655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1337655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getListLogicType", "()I"); 1338655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.list_logic_type = env->CallIntMethod(params, methodId); 1339655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1340655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFiltLogicType", "()I"); 1341655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.filt_logic_type = env->CallIntMethod(params, methodId); 1342655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1343655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getDelyMode", "()I"); 1344655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.dely_mode = env->CallIntMethod(params, methodId); 1345655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1346655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFoundTimeout", "()I"); 1347655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.found_timeout = env->CallIntMethod(params, methodId); 1348655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1349655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getLostTimeout", "()I"); 1350655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.lost_timeout = env->CallIntMethod(params, methodId); 1351655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1352655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFoundTimeOutCnt", "()I"); 1353655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.found_timeout_cnt = env->CallIntMethod(params, methodId); 1354655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1355655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getNumOfTrackEntries", "()I"); 1356655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.num_of_tracking_entries = env->CallIntMethod(params, methodId); 1357655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1358655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getRSSIHighValue", "()I"); 1359655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.rssi_high_thres = env->CallIntMethod(params, methodId); 1360655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1361655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getRSSILowValue", "()I"); 1362655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.rssi_low_thres = env->CallIntMethod(params, methodId); 1363655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1364655434047df38242c1848eee283f134cfd299fd1Satya Calloji env->DeleteLocalRef(filtparam); 1365655434047df38242c1848eee283f134cfd299fd1Satya Calloji sGattIf->client->scan_filter_param_setup(filt_params); 13662b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 13671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13682b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterParamDeleteNative(JNIEnv* env, jobject object, 13692b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint client_if, jint filt_index) 13701a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 13711a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 13722b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int delete_scan_filter_params_action = 1; 1373655434047df38242c1848eee283f134cfd299fd1Satya Calloji btgatt_filt_param_setup_t filt_params; 1374655434047df38242c1848eee283f134cfd299fd1Satya Calloji memset(&filt_params, 0, sizeof(btgatt_filt_param_setup_t)); 1375655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.client_if = client_if; 1376655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.action = delete_scan_filter_params_action; 1377655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.filt_index = filt_index; 1378655434047df38242c1848eee283f134cfd299fd1Satya Calloji sGattIf->client->scan_filter_param_setup(filt_params); 13791a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 138080e7d011fdb511a6583258458e97821176866baaWei Wang 13812b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterParamClearAllNative(JNIEnv* env, jobject object, jint client_if) 13821a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 13831a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 13842b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int clear_scan_filter_params_action = 2; 1385655434047df38242c1848eee283f134cfd299fd1Satya Calloji btgatt_filt_param_setup_t filt_params; 1386655434047df38242c1848eee283f134cfd299fd1Satya Calloji memset(&filt_params, 0, sizeof(btgatt_filt_param_setup_t)); 1387655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.client_if = client_if; 1388655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.action = clear_scan_filter_params_action; 1389655434047df38242c1848eee283f134cfd299fd1Satya Calloji sGattIf->client->scan_filter_param_setup(filt_params); 13902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 13911a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterAddRemoveNative(JNIEnv* env, jobject object, 13932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint client_if, jint action, jint filt_type, jint filt_index, jint company_id, 13942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint company_id_mask, jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, 13952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_mask_msb, jstring name, jstring address, jbyte addr_type, 13962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyteArray data, jbyteArray mask) 13972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 13982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang switch(filt_type) 13991a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14001a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 0: // BTM_BLE_PF_ADDR_FILTER 14012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang { 14021a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang bt_bdaddr_t bda; 14031a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jstr2bdaddr(env, &bda, address); 14042b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 0, 14052b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, NULL, NULL, &bda, addr_type,0, NULL,0, NULL); 14061a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14072b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang } 14081a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14091a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 1: // BTM_BLE_PF_SRVC_DATA 14102b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang { 14112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* data_array = env->GetByteArrayElements(data, 0); 14122b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int data_len = env->GetArrayLength(data); 14132b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* mask_array = env->GetByteArrayElements(mask, NULL); 14142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang uint16_t mask_len = (uint16_t) env->GetArrayLength(mask); 14152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, NULL, NULL, NULL, 0, data_len, (char*)data_array, mask_len,(char*) mask_array); 14172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(data, data_array, JNI_ABORT); 14182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(mask, mask_array, JNI_ABORT); 14191a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang } 14211a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14221a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 2: // BTM_BLE_PF_SRVC_UUID 14231a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 3: // BTM_BLE_PF_SRVC_SOL_UUID 14241a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14251a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang bt_uuid_t uuid, uuid_mask; 14261a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang set_uuid(uuid.uu, uuid_msb, uuid_lsb); 14271a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang set_uuid(uuid_mask.uu, uuid_mask_msb, uuid_mask_lsb); 14281a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (uuid_mask_lsb != 0 && uuid_mask_msb != 0) 14292b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14302b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, &uuid, &uuid_mask, NULL,0,0, NULL,0, NULL); 14311a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang else 14322b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, &uuid, NULL, NULL, 0,0, NULL,0, NULL); 14341a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14351a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14361a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14371a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 4: // BTM_BLE_PF_LOCAL_NAME 14381a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14391a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang const char* c_name = env->GetStringUTFChars(name, NULL); 14401a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (c_name != NULL && strlen(c_name) != 0) 14411a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14422b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, 14432b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang filt_index, 0, 0, NULL, NULL, NULL, 0, strlen(c_name), 14442b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang (char*)c_name, 0, NULL); 14451a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseStringUTFChars(name, c_name); 14461a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14471a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14481a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14491a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14501a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 5: // BTM_BLE_PF_MANU_DATA 14512b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang case 6: // BTM_BLE_PF_SRVC_DATA_PATTERN 14521a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14531a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* data_array = env->GetByteArrayElements(data, 0); 14542b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int data_len = env->GetArrayLength(data); // Array contains mask 14552b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* mask_array = env->GetByteArrayElements(mask, NULL); 14562b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang uint16_t mask_len = (uint16_t) env->GetArrayLength(mask); 14572b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14582b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, NULL, NULL, NULL, 0, data_len, (char*)data_array, 14592b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang mask_len, (char*) mask_array); 14601a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(data, data_array, JNI_ABORT); 14612b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(mask, mask_array, JNI_ABORT); 14621a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14631a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14641a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14651a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang default: 14661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 14691a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14702b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterAddNative(JNIEnv* env, jobject object, jint client_if, 14712b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_type, jint filt_index, jint company_id, jint company_id_mask, 14722b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, jlong uuid_mask_msb, 14732b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring name, jstring address, jbyte addr_type, jbyteArray data, jbyteArray mask) 14742b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int action = 0; 14772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang gattClientScanFilterAddRemoveNative(env, object, client_if, action, filt_type, filt_index, 14782b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, uuid_lsb, uuid_msb, uuid_mask_lsb, uuid_mask_msb, 14792b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang name, address, addr_type, data, mask); 14802b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14812b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14822b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14832b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterDeleteNative(JNIEnv* env, jobject object, jint client_if, 14842b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_type, jint filt_index, jint company_id, jint company_id_mask, 14852b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, jlong uuid_mask_msb, 14862b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring name, jstring address, jbyte addr_type, jbyteArray data, jbyteArray mask) 14872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14892b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int action = 1; 14902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang gattClientScanFilterAddRemoveNative(env, object, client_if, action, filt_type, filt_index, 14912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, uuid_lsb, uuid_msb, uuid_mask_lsb, uuid_mask_msb, 14922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang name, address, addr_type, data, mask); 14932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterClearNative(JNIEnv* env, jobject object, jint client_if, 14962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_index) 14972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_clear(client_if, filt_index); 15002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15022b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterEnableNative (JNIEnv* env, jobject object, jint client_if, 15032b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jboolean enable) 15041a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15051a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15062b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_enable(client_if, enable); 15071a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15081a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 1509662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbachstatic void gattClientConfigureMTUNative(JNIEnv *env, jobject object, 1510662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach jint conn_id, jint mtu) 1511662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach{ 1512662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach if (!sGattIf) return; 1513662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach sGattIf->client->configure_mtu(conn_id, mtu); 1514662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach} 1515662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach 1516fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbachstatic void gattConnectionParameterUpdateNative(JNIEnv *env, jobject object, jint client_if, 1517fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach jstring address, jint min_interval, jint max_interval, jint latency, jint timeout) 1518fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach{ 1519fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach if (!sGattIf) return; 1520fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach bt_bdaddr_t bda; 1521fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach jstr2bdaddr(env, &bda, address); 1522fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach sGattIf->client->conn_parameter_update(&bda, min_interval, max_interval, latency, timeout); 1523fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach} 1524fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach 15251a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientEnableAdvNative(JNIEnv* env, jobject object, jint client_if, 1526c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint min_interval, jint max_interval, jint adv_type, jint chnl_map, jint tx_power, 1527c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint timeout_s) 15281a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15291a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15301a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15311a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_enable(client_if, min_interval, max_interval, adv_type, chnl_map, 1532c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach tx_power, timeout_s); 15331a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15341a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15351a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientUpdateAdvNative(JNIEnv* env, jobject object, jint client_if, 1536c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint min_interval, jint max_interval, jint adv_type, jint chnl_map, jint tx_power, 1537c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint timeout_s) 15381a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15391a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15401a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15411a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_update(client_if, min_interval, max_interval, adv_type, chnl_map, 1542c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach tx_power, timeout_s); 15431a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15441a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15451a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientSetAdvDataNative(JNIEnv* env, jobject object , jint client_if, 15461a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jboolean set_scan_rsp, jboolean incl_name, jboolean incl_txpower, jint appearance, 15471a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyteArray manufacturer_data,jbyteArray service_data, jbyteArray service_uuid) 15481a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15491a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15501a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* manu_data = env->GetByteArrayElements(manufacturer_data, NULL); 15511a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t manu_len = (uint16_t) env->GetArrayLength(manufacturer_data); 15521a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15531a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* serv_data = env->GetByteArrayElements(service_data, NULL); 15541a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t serv_data_len = (uint16_t) env->GetArrayLength(service_data); 15551a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15561a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* serv_uuid = env->GetByteArrayElements(service_uuid, NULL); 15571a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t serv_uuid_len = (uint16_t) env->GetArrayLength(service_uuid); 15581a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15591a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_set_inst_data(client_if, set_scan_rsp, incl_name,incl_txpower, 15601a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang appearance, manu_len, (char*)manu_data, 15611a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang serv_data_len, (char*)serv_data, serv_uuid_len, 15621a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang (char*)serv_uuid); 15631a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15641a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(manufacturer_data, manu_data, JNI_ABORT); 15651a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(service_data, serv_data, JNI_ABORT); 15661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(service_uuid, serv_uuid, JNI_ABORT); 15671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15691a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientDisableAdvNative(JNIEnv* env, jobject object, jint client_if) 15701a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15711a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15721a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_disable(client_if); 15731a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15741a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientConfigBatchScanStorageNative(JNIEnv* env, jobject object, jint client_if, 15762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint max_full_reports_percent, jint max_trunc_reports_percent, 15772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint notify_threshold_level_percent) 15782b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15792b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15802b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_cfg_storage(client_if, max_full_reports_percent, 15812b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang max_trunc_reports_percent, notify_threshold_level_percent); 15822b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15832b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15842b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientStartBatchScanNative(JNIEnv* env, jobject object, jint client_if, 15852b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_mode, jint scan_interval_unit, jint scan_window_unit, jint addr_type, 15862b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint discard_rule) 15872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15892b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_enb_batch_scan(client_if, scan_mode, scan_interval_unit, 15902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang scan_window_unit, addr_type, discard_rule); 15912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientStopBatchScanNative(JNIEnv* env, jobject object, jint client_if) 15942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_dis_batch_scan(client_if); 15972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientReadScanReportsNative(JNIEnv* env, jobject object, jint client_if, 16002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_type) 16012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 16022b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 16032b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_read_reports(client_if, scan_type); 16042b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 16052b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 160603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 160703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native server functions 160803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 160903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerRegisterAppNative(JNIEnv* env, jobject object, 161003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong app_uuid_lsb, jlong app_uuid_msb ) 161103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 161203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 161303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 161403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb); 161503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->register_server(&uuid); 161603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 161703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 161803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerUnregisterAppNative(JNIEnv* env, jobject object, jint serverIf) 161903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 162003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 162103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->unregister_server(serverIf); 162203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 162303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 162403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerConnectNative(JNIEnv *env, jobject object, 162518591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta jint server_if, jstring address, jboolean is_direct, jint transport) 162603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 162703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 162803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 162903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bd_addr; 163003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta const char *c_address = env->GetStringUTFChars(address, NULL); 163103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr_str_to_addr(c_address, bd_addr.address); 163203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 163318591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta sGattIf->server->connect(server_if, &bd_addr, is_direct, transport); 163403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 163503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 163603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerDisconnectNative(JNIEnv* env, jobject object, jint serverIf, 163703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address, jint conn_id) 163803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 163903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 164003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 164103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 164203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->disconnect(serverIf, &bda, conn_id); 164303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 164403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 164503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddServiceNative (JNIEnv *env, jobject object, 164603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint service_type, jint service_id_inst_id, 164703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 164803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint num_handles) 164903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 165003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 165103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 165203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 165303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 165403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 165503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 165603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 165703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_service(server_if, &srvc_id, num_handles); 165803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 165903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 166003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddIncludedServiceNative (JNIEnv *env, jobject object, 166103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, jint included_svc_handle) 166203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 166303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 166403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_included_service(server_if, svc_handle, 166503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta included_svc_handle); 166603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 166703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 166803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddCharacteristicNative (JNIEnv *env, jobject object, 166903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, 167003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_uuid_lsb, jlong char_uuid_msb, 167103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint properties, jint permissions) 167203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 167303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 167403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 167503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 167603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, char_uuid_msb, char_uuid_lsb); 167703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 167803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_characteristic(server_if, svc_handle, 167903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &uuid, properties, permissions); 168003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 168103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 168203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddDescriptorNative (JNIEnv *env, jobject object, 168303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, 168403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong desc_uuid_lsb, jlong desc_uuid_msb, 168503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint permissions) 168603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 168703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 168803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 168903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 169003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, desc_uuid_msb, desc_uuid_lsb); 169103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 169203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_descriptor(server_if, svc_handle, &uuid, permissions); 169303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 169403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 169503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerStartServiceNative (JNIEnv *env, jobject object, 169603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, jint transport ) 169703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 169803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 169903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->start_service(server_if, svc_handle, transport); 170003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 170103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 170203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerStopServiceNative (JNIEnv *env, jobject object, 170303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle) 170403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 170503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 170603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->stop_service(server_if, svc_handle); 170703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 170803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 170903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerDeleteServiceNative (JNIEnv *env, jobject object, 171003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle) 171103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 171203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 171303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->delete_service(server_if, svc_handle); 171403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 171503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 171603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendIndicationNative (JNIEnv *env, jobject object, 171703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint attr_handle, jint conn_id, jbyteArray val) 171803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 171903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 172003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 172103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 172203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int val_len = env->GetArrayLength(val); 172303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 172403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_indication(server_if, attr_handle, conn_id, val_len, 172503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta /*confirm*/ 1, (char*)array); 172603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 172703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 172803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 172903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendNotificationNative (JNIEnv *env, jobject object, 173003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint attr_handle, jint conn_id, jbyteArray val) 173103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 173203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 173303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 173403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 173503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int val_len = env->GetArrayLength(val); 173603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 173703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_indication(server_if, attr_handle, conn_id, val_len, 173803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta /*confirm*/ 0, (char*)array); 173903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 174003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 174103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 174203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendResponseNative (JNIEnv *env, jobject object, 174303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint conn_id, jint trans_id, jint status, 174403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint handle, jint offset, jbyteArray val, jint auth_req) 174503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 174603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 174703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 174803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_response_t response; 174903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 175003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.handle = handle; 175103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.auth_req = auth_req; 175203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.offset = offset; 175303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.len = 0; 175403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 175503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (val != NULL) 175603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 175703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.len = (uint16_t) env->GetArrayLength(val); 175803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 175903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 176003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (int i = 0; i != response.attr_value.len; ++i) 176103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.value[i] = (uint8_t) array[i]; 176203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 176303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 176403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 176503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_response(conn_id, trans_id, status, &response); 176603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 176703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 176803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattTestNative(JNIEnv *env, jobject object, jint command, 176903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong uuid1_lsb, jlong uuid1_msb, jstring bda1, 177003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint p1, jint p2, jint p3, jint p4, jint p5 ) 177103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 177203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 177303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 177403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bt_bda1; 177503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bt_bda1, bda1); 177603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 177703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid1; 177803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid1.uu, uuid1_msb, uuid1_lsb); 177903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 178003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_test_params_t params; 178103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.bda1 = &bt_bda1; 178203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.uuid1 = &uuid1; 178303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u1 = p1; 178403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u2 = p2; 178503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u3 = p3; 178603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u4 = p4; 178703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u5 = p5; 178803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->test_command(command, ¶ms); 178903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 179003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 179103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 179203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * JNI function definitinos 179303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 179403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 179527bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang// JNI functions defined in AdvertiseManager class. 179627bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wangstatic JNINativeMethod sAdvertiseMethods[] = { 1797c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach {"gattClientEnableAdvNative", "(IIIIIII)V", (void *) gattClientEnableAdvNative}, 1798c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach {"gattClientUpdateAdvNative", "(IIIIIII)V", (void *) gattClientUpdateAdvNative}, 179927bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientSetAdvDataNative", "(IZZZI[B[B[B)V", (void *) gattClientSetAdvDataNative}, 180027bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientDisableAdvNative", "(I)V", (void *) gattClientDisableAdvNative}, 1801a1664d61821a59145f8095a75373403a0c54244eWei Wang {"gattSetAdvDataNative", "(IZZZIII[B[B[B)V", (void *) gattSetAdvDataNative}, 1802a1664d61821a59145f8095a75373403a0c54244eWei Wang {"gattAdvertiseNative", "(IZ)V", (void *) gattAdvertiseNative}, 180327bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang}; 180427bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang 18059c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang// JNI functions defined in ScanManager class. 18069c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wangstatic JNINativeMethod sScanMethods[] = { 18071a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang {"gattClientScanNative", "(Z)V", (void *) gattClientScanNative}, 18089c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang // Batch scan JNI functions. 18092b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientConfigBatchScanStorageNative", "(IIII)V",(void *) gattClientConfigBatchScanStorageNative}, 18102b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientStartBatchScanNative", "(IIIIII)V", (void *) gattClientStartBatchScanNative}, 18112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientStopBatchScanNative", "(I)V", (void *) gattClientStopBatchScanNative}, 18129c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang {"gattClientReadScanReportsNative", "(II)V", (void *) gattClientReadScanReportsNative}, 18139c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang // Scan filter JNI functions. 1814655434047df38242c1848eee283f134cfd299fd1Satya Calloji {"gattClientScanFilterParamAddNative", "(Lcom/android/bluetooth/gatt/FilterParams;)V", (void *) gattClientScanFilterParamAddNative}, 18152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterParamDeleteNative", "(II)V", (void *) gattClientScanFilterParamDeleteNative}, 18162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterParamClearAllNative", "(I)V", (void *) gattClientScanFilterParamClearAllNative}, 18172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterAddNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterAddNative}, 18182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterDeleteNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterDeleteNative}, 18192b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterClearNative", "(II)V", (void *) gattClientScanFilterClearNative}, 18202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterEnableNative", "(IZ)V", (void *) gattClientScanFilterEnableNative}, 1821e0a211b1c15672734e329390cb2f04ca006b59bdPrerepa Viswanadham {"gattSetScanParametersNative", "(II)V", (void *) gattSetScanParametersNative}, 18221a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang}; 18231a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 18241a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang// JNI functions defined in GattService class. 182503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic JNINativeMethod sMethods[] = { 182603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"classInitNative", "()V", (void *) classInitNative}, 182703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"initializeNative", "()V", (void *) initializeNative}, 182803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"cleanupNative", "()V", (void *) cleanupNative}, 182903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetDeviceTypeNative", "(Ljava/lang/String;)I", (void *) gattClientGetDeviceTypeNative}, 183003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRegisterAppNative", "(JJ)V", (void *) gattClientRegisterAppNative}, 183103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientUnregisterAppNative", "(I)V", (void *) gattClientUnregisterAppNative}, 183218591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta {"gattClientConnectNative", "(ILjava/lang/String;ZI)V", (void *) gattClientConnectNative}, 183303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientDisconnectNative", "(ILjava/lang/String;I)V", (void *) gattClientDisconnectNative}, 183403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRefreshNative", "(ILjava/lang/String;)V", (void *) gattClientRefreshNative}, 183503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientSearchServiceNative", "(IZJJ)V", (void *) gattClientSearchServiceNative}, 183603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetCharacteristicNative", "(IIIJJIJJ)V", (void *) gattClientGetCharacteristicNative}, 18377f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientGetDescriptorNative", "(IIIJJIJJIJJ)V", (void *) gattClientGetDescriptorNative}, 183803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetIncludedServiceNative", "(IIIJJIIJJ)V", (void *) gattClientGetIncludedServiceNative}, 183903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientReadCharacteristicNative", "(IIIJJIJJI)V", (void *) gattClientReadCharacteristicNative}, 18407f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientReadDescriptorNative", "(IIIJJIJJIJJI)V", (void *) gattClientReadDescriptorNative}, 184103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientWriteCharacteristicNative", "(IIIJJIJJII[B)V", (void *) gattClientWriteCharacteristicNative}, 18427f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientWriteDescriptorNative", "(IIIJJIJJIJJII[B)V", (void *) gattClientWriteDescriptorNative}, 184303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientExecuteWriteNative", "(IZ)V", (void *) gattClientExecuteWriteNative}, 184403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRegisterForNotificationsNative", "(ILjava/lang/String;IIJJIJJZ)V", (void *) gattClientRegisterForNotificationsNative}, 184503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientReadRemoteRssiNative", "(ILjava/lang/String;)V", (void *) gattClientReadRemoteRssiNative}, 1846662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach {"gattClientConfigureMTUNative", "(II)V", (void *) gattClientConfigureMTUNative}, 1847fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach {"gattConnectionParameterUpdateNative", "(ILjava/lang/String;IIII)V", (void *) gattConnectionParameterUpdateNative}, 184803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerRegisterAppNative", "(JJ)V", (void *) gattServerRegisterAppNative}, 184903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerUnregisterAppNative", "(I)V", (void *) gattServerUnregisterAppNative}, 185018591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta {"gattServerConnectNative", "(ILjava/lang/String;ZI)V", (void *) gattServerConnectNative}, 185103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerDisconnectNative", "(ILjava/lang/String;I)V", (void *) gattServerDisconnectNative}, 185203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddServiceNative", "(IIIJJI)V", (void *) gattServerAddServiceNative}, 185303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddIncludedServiceNative", "(III)V", (void *) gattServerAddIncludedServiceNative}, 185403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddCharacteristicNative", "(IIJJII)V", (void *) gattServerAddCharacteristicNative}, 185503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddDescriptorNative", "(IIJJI)V", (void *) gattServerAddDescriptorNative}, 185603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerStartServiceNative", "(III)V", (void *) gattServerStartServiceNative}, 185703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerStopServiceNative", "(II)V", (void *) gattServerStopServiceNative}, 185803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerDeleteServiceNative", "(II)V", (void *) gattServerDeleteServiceNative}, 185903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendIndicationNative", "(III[B)V", (void *) gattServerSendIndicationNative}, 186003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendNotificationNative", "(III[B)V", (void *) gattServerSendNotificationNative}, 186103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendResponseNative", "(IIIIII[BI)V", (void *) gattServerSendResponseNative}, 186203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 186353f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham {"gattTestNative", "(IJJLjava/lang/String;IIIII)V", (void *) gattTestNative}, 186403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 186503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 186603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaint register_com_android_bluetooth_gatt(JNIEnv* env) 186703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 18681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang int register_success = 18699c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/ScanManager$ScanNative", 18709c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang sScanMethods, NELEM(sScanMethods)); 187127bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang register_success &= 187227bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/AdvertiseManager$AdvertiseNative", 187327bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang sAdvertiseMethods, NELEM(sAdvertiseMethods)); 18741a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang return register_success & 18751a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/GattService", 18762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sMethods, NELEM(sMethods)); 187703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 187803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 1879