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; 177ecbac5b723ac906c46271c2b740a52ccef625c57Satya Callojistatic jmethodID method_onScanParamSetupCompleted; 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 584edf17f2e94bc628d4bc954264965a448981f8066Prerepa Viswanadham if (NULL != trackadv_obj) { 585655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onTrackAdvFoundLost, trackadv_obj); 586edf17f2e94bc628d4bc954264965a448981f8066Prerepa Viswanadham sCallbackEnv->DeleteLocalRef(trackadv_obj); 587edf17f2e94bc628d4bc954264965a448981f8066Prerepa Viswanadham } 5882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sCallbackEnv->DeleteLocalRef(address); 589655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->DeleteLocalRef(jb_adv_pkt); 590655434047df38242c1848eee283f134cfd299fd1Satya Calloji sCallbackEnv->DeleteLocalRef(jb_scan_rsp); 591655434047df38242c1848eee283f134cfd299fd1Satya Calloji 5922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 5932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 5942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 595ecbac5b723ac906c46271c2b740a52ccef625c57Satya Callojivoid btgattc_scan_parameter_setup_completed_cb(int client_if, btgattc_error_t status) 596ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji{ 597ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji CHECK_CALLBACK_ENV 598ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScanParamSetupCompleted, status, client_if); 599ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji checkAndClearExceptionFromCallback(sCallbackEnv, __func__); 600ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji} 601ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji 60203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_client_callbacks_t sGattClientCallbacks = { 60303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_register_app_cb, 60403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_scan_result_cb, 60503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_open_cb, 60603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_close_cb, 60703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_search_complete_cb, 60803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_search_result_cb, 60903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_characteristic_cb, 61003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_descriptor_cb, 61103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_get_included_service_cb, 61203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_register_for_notification_cb, 61303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_notify_cb, 61403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_read_characteristic_cb, 61503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_write_characteristic_cb, 61603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_read_descriptor_cb, 61703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_write_descriptor_cb, 61803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgattc_execute_write_cb, 61924dce60783d85fbf49f550203a383b2f4a171a52Wei Wang btgattc_remote_rssi_cb, 620662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach btgattc_advertise_cb, 621662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach btgattc_configure_mtu_cb, 6222b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_cfg_cb, 6232b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_param_cb, 6242b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_scan_filter_status_cb, 6251a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_enable_cb, 6261a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_update_cb, 6271a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang btgattc_multiadv_setadv_data_cb, 628afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgattc_multiadv_disable_cb, 629f2919fe3409cb17a062baa74361d2129d90ece2bWei Wang btgattc_congestion_cb, 6302b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_cfg_storage_cb, 6312b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_startstop_cb, 6322b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_reports_cb, 6332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang btgattc_batchscan_threshold_cb, 634ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji btgattc_track_adv_event_cb, 635ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji btgattc_scan_parameter_setup_completed_cb 63603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 63703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 63803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 63903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 64003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * BTA server callbacks 64103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 64203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 64303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_register_app_cb(int status, int server_if, bt_uuid_t *uuid) 64403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 64503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 64603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerRegistered 64703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta , status, server_if, UUID_PARAMS(uuid)); 64803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 64903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 65003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 651dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbachvoid btgatts_connection_cb(int conn_id, int server_if, int connected, bt_bdaddr_t *bda) 65203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 65303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 65403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 65503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 65603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 65703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 65803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 65903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 66003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 66103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientConnected, 662dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbach address, connected, conn_id, server_if); 66303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 66403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 66503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 66603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 66703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_added_cb(int status, int server_if, 66803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t *srvc_id, int srvc_handle) 66903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 67003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 67103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceAdded, status, 67203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, SRVC_ID_PARAMS(srvc_id), 67303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle); 67403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 67503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 67603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 67703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_included_service_added_cb(int status, int server_if, 67803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int srvc_handle, 67903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int incl_srvc_handle) 68003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 68103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 68203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onIncludedServiceAdded, 68303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, srvc_handle, incl_srvc_handle); 68403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 68503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 68603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 68703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_characteristic_added_cb(int status, int server_if, bt_uuid_t *char_id, 68803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int srvc_handle, int char_handle) 68903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 69003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 69103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onCharacteristicAdded, 69203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, UUID_PARAMS(char_id), 69303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle, char_handle); 69403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 69503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 69603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 69703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_descriptor_added_cb(int status, int server_if, 69803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t *descr_id, int srvc_handle, 69903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int descr_handle) 70003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 70103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 70203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onDescriptorAdded, 70303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, server_if, UUID_PARAMS(descr_id), 70403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_handle, descr_handle); 70503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 70603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 70703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 70803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_started_cb(int status, int server_if, int srvc_handle) 70903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 71003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 71103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceStarted, status, 71203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 71303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 71403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 71503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 71603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_stopped_cb(int status, int server_if, int srvc_handle) 71703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 71803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 71903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceStopped, status, 72003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 72103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 72203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 72303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 72403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_service_deleted_cb(int status, int server_if, int srvc_handle) 72503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 72603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 72703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceDeleted, status, 72803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta server_if, srvc_handle); 72903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 73003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 73103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 73203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_read_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, 73303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int attr_handle, int offset, bool is_long) 73403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 73503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 73603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 73703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 73803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 73903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 74003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 74103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 74203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 74303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAttributeRead, 74403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, attr_handle, 74503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta offset, is_long); 74603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 74703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 74803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 74903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 75003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_write_cb(int conn_id, int trans_id, 75103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t *bda, int attr_handle, 75203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int offset, int length, 75303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bool need_rsp, bool is_prep, uint8_t* value) 75403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 75503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 75603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 75703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 75803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 75903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 76003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 76103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 76203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 76303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 76403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyteArray val = sCallbackEnv->NewByteArray(length); 76503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (val) sCallbackEnv->SetByteArrayRegion(val, 0, length, (jbyte*)value); 76603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAttributeWrite, 76703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, attr_handle, 76803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta offset, length, need_rsp, is_prep, val); 76903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 77003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(val); 77103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 77203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 77303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 77403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_request_exec_write_cb(int conn_id, int trans_id, 77503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t *bda, int exec_write) 77603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 77703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 77803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 77903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char c_address[32]; 78003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sprintf(c_address, "%02X:%02X:%02X:%02X:%02X:%02X", 78103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[0], bda->address[1], bda->address[2], 78203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bda->address[3], bda->address[4], bda->address[5]); 78303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 78403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address = sCallbackEnv->NewStringUTF(c_address); 78503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExecuteWrite, 78603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta address, conn_id, trans_id, exec_write); 78703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->DeleteLocalRef(address); 78803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 78903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 79003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 79103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battavoid btgatts_response_confirmation_cb(int status, int handle) 79203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 79303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta CHECK_CALLBACK_ENV 79403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onResponseSendCompleted, 79503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta status, handle); 79603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 79703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 79803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 799afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgatts_indication_sent_cb(int conn_id, int status) 800afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 801afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 802afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotificationSent, 803afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach conn_id, status); 804afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 805afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 806afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 807afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbachvoid btgatts_congestion_cb(int conn_id, bool congested) 808afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach{ 809afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach CHECK_CALLBACK_ENV 810afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerCongestion, conn_id, congested); 811afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 812afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach} 813afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach 814e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbachvoid btgatts_mtu_changed_cb(int conn_id, int mtu) 815e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach{ 816e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach CHECK_CALLBACK_ENV 817e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerMtuChanged, conn_id, mtu); 818e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); 819e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach} 820e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach 82103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_server_callbacks_t sGattServerCallbacks = { 82203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_register_app_cb, 82303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_connection_cb, 82403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_added_cb, 82503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_included_service_added_cb, 82603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_characteristic_added_cb, 82703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_descriptor_added_cb, 82803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_started_cb, 82903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_stopped_cb, 83003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_service_deleted_cb, 83103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_read_cb, 83203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_write_cb, 83303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatts_request_exec_write_cb, 834afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgatts_response_confirmation_cb, 835afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach btgatts_indication_sent_cb, 836e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach btgatts_congestion_cb, 837e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach btgatts_mtu_changed_cb 83803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 83903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 84003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 84103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * GATT callbacks 84203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 84303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 84403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const btgatt_callbacks_t sGattCallbacks = { 84503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sizeof(btgatt_callbacks_t), 84603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &sGattClientCallbacks, 84703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &sGattServerCallbacks 84803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 84903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 85003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 85103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native function definitions 85203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 85303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void classInitNative(JNIEnv* env, jclass clazz) { 85403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 85503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta // Client callbacks 85603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 85703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onClientRegistered = env->GetMethodID(clazz, "onClientRegistered", "(IIJJ)V"); 85803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onScanResult = env->GetMethodID(clazz, "onScanResult", "(Ljava/lang/String;I[B)V"); 85903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onConnected = env->GetMethodID(clazz, "onConnected", "(IIILjava/lang/String;)V"); 86003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onDisconnected = env->GetMethodID(clazz, "onDisconnected", "(IIILjava/lang/String;)V"); 86103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onReadCharacteristic = env->GetMethodID(clazz, "onReadCharacteristic", "(IIIIJJIJJI[B)V"); 86203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onWriteCharacteristic = env->GetMethodID(clazz, "onWriteCharacteristic", "(IIIIJJIJJ)V"); 86303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onExecuteCompleted = env->GetMethodID(clazz, "onExecuteCompleted", "(II)V"); 86403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onSearchCompleted = env->GetMethodID(clazz, "onSearchCompleted", "(II)V"); 86503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onSearchResult = env->GetMethodID(clazz, "onSearchResult", "(IIIJJ)V"); 8667f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onReadDescriptor = env->GetMethodID(clazz, "onReadDescriptor", "(IIIIJJIJJIJJI[B)V"); 8677f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onWriteDescriptor = env->GetMethodID(clazz, "onWriteDescriptor", "(IIIIJJIJJIJJ)V"); 86803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onNotify = env->GetMethodID(clazz, "onNotify", "(ILjava/lang/String;IIJJIJJZ[B)V"); 86903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onGetCharacteristic = env->GetMethodID(clazz, "onGetCharacteristic", "(IIIIJJIJJI)V"); 8707f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach method_onGetDescriptor = env->GetMethodID(clazz, "onGetDescriptor", "(IIIIJJIJJIJJ)V"); 87103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onGetIncludedService = env->GetMethodID(clazz, "onGetIncludedService", "(IIIIJJIIJJ)V"); 87203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onRegisterForNotifications = env->GetMethodID(clazz, "onRegisterForNotifications", "(IIIIIJJIJJ)V"); 87303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onReadRemoteRssi = env->GetMethodID(clazz, "onReadRemoteRssi", "(ILjava/lang/String;II)V"); 874662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach method_onConfigureMTU = env->GetMethodID(clazz, "onConfigureMTU", "(III)V"); 8751a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang method_onAdvertiseCallback = env->GetMethodID(clazz, "onAdvertiseCallback", "(II)V"); 8762b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterConfig = env->GetMethodID(clazz, "onScanFilterConfig", "(IIIII)V"); 8772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterParamsConfigured = env->GetMethodID(clazz, "onScanFilterParamsConfigured", "(IIII)V"); 8782b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onScanFilterEnableDisabled = env->GetMethodID(clazz, "onScanFilterEnableDisabled", "(III)V"); 87927bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvEnable = env->GetMethodID(clazz, "onAdvertiseInstanceEnabled", "(II)V"); 88027bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvUpdate = env->GetMethodID(clazz, "onAdvertiseDataUpdated", "(II)V"); 88127bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvSetAdvData = env->GetMethodID(clazz, "onAdvertiseDataSet", "(II)V"); 88227bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang method_onMultiAdvDisable = env->GetMethodID(clazz, "onAdvertiseInstanceDisabled", "(II)V"); 883afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onClientCongestion = env->GetMethodID(clazz, "onClientCongestion", "(IZ)V"); 8842b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanStorageConfigured = env->GetMethodID(clazz, "onBatchScanStorageConfigured", "(II)V"); 8852b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanStartStopped = env->GetMethodID(clazz, "onBatchScanStartStopped", "(III)V"); 8862b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanReports = env->GetMethodID(clazz, "onBatchScanReports", "(IIII[B)V"); 8872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang method_onBatchScanThresholdCrossed = env->GetMethodID(clazz, "onBatchScanThresholdCrossed", "(I)V"); 888655434047df38242c1848eee283f134cfd299fd1Satya Calloji method_CreateonTrackAdvFoundLostObject = env->GetMethodID(clazz, "CreateonTrackAdvFoundLostObject", "(II[BI[BIIILjava/lang/String;IIII)Lcom/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo;"); 889655434047df38242c1848eee283f134cfd299fd1Satya Calloji method_onTrackAdvFoundLost = env->GetMethodID(clazz, "onTrackAdvFoundLost", 890655434047df38242c1848eee283f134cfd299fd1Satya Calloji "(Lcom/android/bluetooth/gatt/AdvtFilterOnFoundOnLostInfo;)V"); 891ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji method_onScanParamSetupCompleted = env->GetMethodID(clazz, "onScanParamSetupCompleted", "(II)V"); 89203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 893655434047df38242c1848eee283f134cfd299fd1Satya Calloji // Server callbacks 89403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 89503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServerRegistered = env->GetMethodID(clazz, "onServerRegistered", "(IIJJ)V"); 896dbaf9cd41555de7e6101f368ac348bbeb2094809Andre Eisenbach method_onClientConnected = env->GetMethodID(clazz, "onClientConnected", "(Ljava/lang/String;ZII)V"); 89703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceAdded = env->GetMethodID(clazz, "onServiceAdded", "(IIIIJJI)V"); 89803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onIncludedServiceAdded = env->GetMethodID(clazz, "onIncludedServiceAdded", "(IIII)V"); 89903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onCharacteristicAdded = env->GetMethodID(clazz, "onCharacteristicAdded", "(IIJJII)V"); 90003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onDescriptorAdded = env->GetMethodID(clazz, "onDescriptorAdded", "(IIJJII)V"); 90103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceStarted = env->GetMethodID(clazz, "onServiceStarted", "(III)V"); 90203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceStopped = env->GetMethodID(clazz, "onServiceStopped", "(III)V"); 90303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onServiceDeleted = env->GetMethodID(clazz, "onServiceDeleted", "(III)V"); 90403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onResponseSendCompleted = env->GetMethodID(clazz, "onResponseSendCompleted", "(II)V"); 90503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onAttributeRead= env->GetMethodID(clazz, "onAttributeRead", "(Ljava/lang/String;IIIIZ)V"); 90603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onAttributeWrite= env->GetMethodID(clazz, "onAttributeWrite", "(Ljava/lang/String;IIIIIZZ[B)V"); 90703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta method_onExecuteWrite= env->GetMethodID(clazz, "onExecuteWrite", "(Ljava/lang/String;III)V"); 908afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onNotificationSent = env->GetMethodID(clazz, "onNotificationSent", "(II)V"); 909afc04fcffad9713d5385894b41a1fb29c1d6ee96Andre Eisenbach method_onServerCongestion = env->GetMethodID(clazz, "onServerCongestion", "(IZ)V"); 910e632e4bb8c873f102cac7d6f39585ea06f34c082Andre Eisenbach method_onServerMtuChanged = env->GetMethodID(clazz, "onMtuChanged", "(II)V"); 91103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 91203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta info("classInitNative: Success!"); 91303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 91403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 91503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic const bt_interface_t* btIf; 91603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 91703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void initializeNative(JNIEnv *env, jobject object) { 91803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if(btIf) 91903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 92003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 92103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (btIf = getBluetoothInterface()) == NULL) { 92203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Bluetooth module is not loaded"); 92303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 92403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 92503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 92603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sGattIf != NULL) { 92703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta ALOGW("Cleaning up Bluetooth GATT Interface before initializing..."); 92803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->cleanup(); 92903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 93003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 93103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 93203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (mCallbacksObj != NULL) { 93303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta ALOGW("Cleaning up Bluetooth GATT callback object"); 93403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->DeleteGlobalRef(mCallbacksObj); 93503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = NULL; 93603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 93703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 93803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (sGattIf = (btgatt_interface_t *) 93903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btIf->get_profile_interface(BT_PROFILE_GATT_ID)) == NULL) { 94003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Failed to get Bluetooth GATT Interface"); 94103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 94203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 94303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 94403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_status_t status; 94503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if ( (status = sGattIf->init(&sGattCallbacks)) != BT_STATUS_SUCCESS) { 94603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta error("Failed to initialize Bluetooth GATT, status: %d", status); 94703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 94803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return; 94903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 95003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 95103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = env->NewGlobalRef(object); 95203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 95303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 95403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void cleanupNative(JNIEnv *env, jobject object) { 95503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_status_t status; 95603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!btIf) return; 95703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 95803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (sGattIf != NULL) { 95903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->cleanup(); 96003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf = NULL; 96103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 96203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 96303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (mCallbacksObj != NULL) { 96403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->DeleteGlobalRef(mCallbacksObj); 96503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta mCallbacksObj = NULL; 96603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 96703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btIf = NULL; 96803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 96903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 97003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 97103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native Client functions 97203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 97303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 97403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic int gattClientGetDeviceTypeNative(JNIEnv* env, jobject object, jstring address) 97503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 97603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return 0; 97703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 97803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 97903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta return sGattIf->client->get_device_type(&bda); 98003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 98103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 98203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRegisterAppNative(JNIEnv* env, jobject object, 98303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong app_uuid_lsb, jlong app_uuid_msb ) 98403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 98503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 98603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 98703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 98803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb); 98903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->register_client(&uuid); 99003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 99103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 99203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientUnregisterAppNative(JNIEnv* env, jobject object, jint clientIf) 99303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 99403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 99503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->unregister_client(clientIf); 99603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 99703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 998f745ace608784e226a78170bf5a24fe114f1026fPrerepa Viswanadhamstatic void gattClientScanNative(JNIEnv* env, jobject object, jboolean start) 99903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 100003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 1001f745ace608784e226a78170bf5a24fe114f1026fPrerepa Viswanadham sGattIf->client->scan(start); 100203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 100303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 100403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientConnectNative(JNIEnv* env, jobject object, jint clientif, 100518591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta jstring address, jboolean isDirect, jint transport) 100603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 100703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 100803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 100903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 101003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 101118591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta sGattIf->client->connect(clientif, &bda, isDirect, transport); 101203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 101303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 101403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientDisconnectNative(JNIEnv* env, jobject object, jint clientIf, 101503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address, jint conn_id) 101603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 101703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 101803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 101903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 102003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->disconnect(clientIf, &bda, conn_id); 102103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 102203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 102303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRefreshNative(JNIEnv* env, jobject object, jint clientIf, 102403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address) 102503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 102603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 102703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 102803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 102903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 103003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->refresh(clientIf, &bda); 103103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 103203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 103303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientSearchServiceNative(JNIEnv* env, jobject object, jint conn_id, 103403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jboolean search_all, jlong service_uuid_lsb, jlong service_uuid_msb) 103503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 103603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 103703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 103803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 103903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, service_uuid_msb, service_uuid_lsb); 104003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->search_service(conn_id, search_all ? 0 : &uuid); 104103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 104203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 104303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetCharacteristicNative(JNIEnv* env, jobject object, 104403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, 104503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 104603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 104703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 104803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb) 104903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 105003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 105103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 105203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 105303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 105403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 105503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 105603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 105703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10587f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 105903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 106003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 106103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 106203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (char_id_uuid_lsb == 0) 106303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 106403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_characteristic(conn_id, &srvc_id, 0); 106503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 106603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_characteristic(conn_id, &srvc_id, &char_id); 106703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 106803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 106903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 107003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetDescriptorNative(JNIEnv* env, jobject object, 107103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, 107203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 107303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 107403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 107503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 10767f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 107703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb) 107803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 107903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 108003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 108103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 108203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 108303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 108403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 108503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10867f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 108703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 108803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 108903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 10907f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 10917f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 10927f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 109303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 109403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (descr_id_uuid_lsb == 0) 109503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 109603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_descriptor(conn_id, &srvc_id, &char_id, 0); 109703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 109803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_descriptor(conn_id, &srvc_id, &char_id, &descr_id); 109903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 110003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 110103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 110203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientGetIncludedServiceNative(JNIEnv* env, jobject object, 110303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 110403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 110503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint incl_service_id_inst_id, jint incl_service_type, 110603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong incl_service_id_uuid_lsb, jlong incl_service_id_uuid_msb) 110703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 110803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 110903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 111003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 111103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 111203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 111303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 111403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 111503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t incl_srvc_id; 111603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta incl_srvc_id.id.inst_id = (uint8_t) incl_service_id_inst_id; 111703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta incl_srvc_id.is_primary = (incl_service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 111803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(incl_srvc_id.id.uuid.uu, incl_service_id_uuid_msb, incl_service_id_uuid_lsb); 111903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 112003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (incl_service_id_uuid_lsb == 0) 112103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 112203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_included_service(conn_id, &srvc_id, 0); 112303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } else { 112403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->get_included_service(conn_id, &srvc_id, &incl_srvc_id); 112503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 112603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 112703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 112803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadCharacteristicNative(JNIEnv* env, jobject object, 112903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 113003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 113103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 113203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 113303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint authReq) 113403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 113503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 113603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 113703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 113803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 113903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 114003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 114103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11427f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 114303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 114403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 114503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 114603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_characteristic(conn_id, &srvc_id, &char_id, authReq); 114703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 114803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 114903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadDescriptorNative(JNIEnv* env, jobject object, 115003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 115103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 115203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 115303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 11547f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 115503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb, 115603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint authReq) 115703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 115803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 115903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 116003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 116103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 116203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 116303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 116403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11657f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 116603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 116703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 116803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11697f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 11707f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 11717f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 117203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 117303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_descriptor(conn_id, &srvc_id, &char_id, &descr_id, authReq); 117403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 117503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 117603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientWriteCharacteristicNative(JNIEnv* env, jobject object, 117703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 117803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 117903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 118003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 118103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint write_type, jint auth_req, jbyteArray value) 118203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 118303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 118403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1185cd3a9e31632afe187f53c3a768541a68e1f99efdyongchun.x.lu if (value == NULL) { 1186cd3a9e31632afe187f53c3a768541a68e1f99efdyongchun.x.lu warn("gattClientWriteCharacteristicNative() ignoring NULL array"); 1187cd3a9e31632afe187f53c3a768541a68e1f99efdyongchun.x.lu return; 1188cd3a9e31632afe187f53c3a768541a68e1f99efdyongchun.x.lu } 1189cd3a9e31632afe187f53c3a768541a68e1f99efdyongchun.x.lu 119003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 119103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 119203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 119303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 119403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 11957f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 119603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 119703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 119803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 119903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint16_t len = (uint16_t) env->GetArrayLength(value); 120003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte *p_value = env->GetByteArrayElements(value, NULL); 120103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (p_value == NULL) return; 120203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 120303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->write_characteristic(conn_id, &srvc_id, &char_id, 120403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta write_type, len, auth_req, (char*)p_value); 120503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(value, p_value, 0); 120603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 120703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 120803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientExecuteWriteNative(JNIEnv* env, jobject object, 120903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jboolean execute) 121003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 121103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 121203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->execute_write(conn_id, execute ? 1 : 0); 121303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 121403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 121503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientWriteDescriptorNative(JNIEnv* env, jobject object, 121603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint conn_id, jint service_type, jint service_id_inst_id, 121703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 121803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 121903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 12207f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach jint descr_id_inst_id, 122103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong descr_id_uuid_lsb, jlong descr_id_uuid_msb, 122203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint write_type, jint auth_req, jbyteArray value) 122303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 122403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 122503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1226460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach if (value == NULL) { 1227460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach warn("gattClientWriteDescriptorNative() ignoring NULL array"); 1228460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach return; 1229460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach } 1230460d53a0dd8fd19947b0382506bd2b3f9da4743bAndre Eisenbach 123103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 123203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 123303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 123403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 123503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12367f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 123703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 123803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 123903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12407f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t descr_id; 12417f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach descr_id.inst_id = (uint8_t) descr_id_inst_id; 12427f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach set_uuid(descr_id.uuid.uu, descr_id_uuid_msb, descr_id_uuid_lsb); 124303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 124403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta uint16_t len = (uint16_t) env->GetArrayLength(value); 124503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte *p_value = env->GetByteArrayElements(value, NULL); 124603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (p_value == NULL) return; 124703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 124803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->write_descriptor(conn_id, &srvc_id, &char_id, &descr_id, 124903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta write_type, len, auth_req, (char*)p_value); 125003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(value, p_value, 0); 125103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 125203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 125303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientRegisterForNotificationsNative(JNIEnv* env, jobject object, 125403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint clientIf, jstring address, 125503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint service_type, jint service_id_inst_id, 125603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 125703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint char_id_inst_id, 125803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_id_uuid_lsb, jlong char_id_uuid_msb, 125903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jboolean enable) 126003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 126103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 126203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 126303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 126403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 126503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 126603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 126703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 12687f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach btgatt_gatt_id_t char_id; 126903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta char_id.inst_id = (uint8_t) char_id_inst_id; 127003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(char_id.uuid.uu, char_id_uuid_msb, char_id_uuid_lsb); 127103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 127203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bd_addr; 127303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta const char *c_address = env->GetStringUTFChars(address, NULL); 127403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr_str_to_addr(c_address, bd_addr.address); 127503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 127603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (enable) 127703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->register_for_notification(clientIf, &bd_addr, &srvc_id, &char_id); 127803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta else 127903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->deregister_for_notification(clientIf, &bd_addr, &srvc_id, &char_id); 128003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 128103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 128203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattClientReadRemoteRssiNative(JNIEnv* env, jobject object, jint clientif, 128303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address) 128403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 128503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 128603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 128703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 128803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 128903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 129003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->read_remote_rssi(clientif, &bda); 129103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 129203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1293873b8064cca4d0f32808842a39e54e305dd5b410Wei Wangstatic void gattAdvertiseNative(JNIEnv *env, jobject object, 129497d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach jint client_if, jboolean start) 129597d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach{ 129697d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach if (!sGattIf) return; 129797d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach sGattIf->client->listen(client_if, start); 129897d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach} 129997d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 13002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattSetAdvDataNative(JNIEnv *env, jobject object, jint client_if, 13012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jboolean setScanRsp, jboolean inclName, jboolean inclTxPower, jint minInterval, 13022b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint maxInterval, jint appearance, jbyteArray manufacturerData, jbyteArray serviceData, 1303873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyteArray serviceUuid) 130497d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach{ 130597d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach if (!sGattIf) return; 1306873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* arr_data = env->GetByteArrayElements(manufacturerData, NULL); 130797d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach uint16_t arr_len = (uint16_t) env->GetArrayLength(manufacturerData); 130897d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 1309873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* service_data = env->GetByteArrayElements(serviceData, NULL); 1310873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang uint16_t service_data_len = (uint16_t) env->GetArrayLength(serviceData); 1311873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang 1312873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang jbyte* service_uuid = env->GetByteArrayElements(serviceUuid, NULL); 1313873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang uint16_t service_uuid_len = (uint16_t) env->GetArrayLength(serviceUuid); 1314873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang 131597d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach sGattIf->client->set_adv_data(client_if, setScanRsp, inclName, inclTxPower, 1316873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang minInterval, maxInterval, appearance, arr_len, (char*)arr_data, 1317873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang service_data_len, (char*)service_data, service_uuid_len, 1318873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang (char*)service_uuid); 131997d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 132097d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach env->ReleaseByteArrayElements(manufacturerData, arr_data, JNI_ABORT); 1321873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang env->ReleaseByteArrayElements(serviceData, service_data, JNI_ABORT); 1322873b8064cca4d0f32808842a39e54e305dd5b410Wei Wang env->ReleaseByteArrayElements(serviceUuid, service_uuid, JNI_ABORT); 132397d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach} 132497d5a00d3d588f89b36be801461455a2ab625907Andre Eisenbach 132553f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadhamstatic void gattSetScanParametersNative(JNIEnv* env, jobject object, 1326ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji jint client_if, jint scan_interval_unit, 1327ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji jint scan_window_unit) 132853f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham{ 132953f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham if (!sGattIf) return; 1330ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji sGattIf->client->set_scan_parameters(client_if, scan_interval_unit, scan_window_unit); 133153f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham} 133203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 1333655434047df38242c1848eee283f134cfd299fd1Satya Callojistatic void gattClientScanFilterParamAddNative(JNIEnv* env, jobject object, jobject params) 13342b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 13352b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 13362b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int add_scan_filter_params_action = 0; 1337655434047df38242c1848eee283f134cfd299fd1Satya Calloji btgatt_filt_param_setup_t filt_params; 1338655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1339655434047df38242c1848eee283f134cfd299fd1Satya Calloji jmethodID methodId = 0; 1340655434047df38242c1848eee283f134cfd299fd1Satya Calloji jclass filtparam = env->GetObjectClass(params); 1341655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1342655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getClientIf", "()I"); 1343655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.client_if = env->CallIntMethod(params, methodId);; 1344655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1345655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.action = add_scan_filter_params_action; 1346655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1347655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFiltIndex", "()I"); 1348655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.filt_index = env->CallIntMethod(params, methodId);; 1349655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1350655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFeatSeln", "()I"); 1351655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.feat_seln = env->CallIntMethod(params, methodId);; 1352655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1353655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getListLogicType", "()I"); 1354655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.list_logic_type = env->CallIntMethod(params, methodId); 1355655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1356655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFiltLogicType", "()I"); 1357655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.filt_logic_type = env->CallIntMethod(params, methodId); 1358655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1359655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getDelyMode", "()I"); 1360655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.dely_mode = env->CallIntMethod(params, methodId); 1361655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1362655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFoundTimeout", "()I"); 1363655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.found_timeout = env->CallIntMethod(params, methodId); 1364655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1365655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getLostTimeout", "()I"); 1366655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.lost_timeout = env->CallIntMethod(params, methodId); 1367655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1368655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getFoundTimeOutCnt", "()I"); 1369655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.found_timeout_cnt = env->CallIntMethod(params, methodId); 1370655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1371655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getNumOfTrackEntries", "()I"); 1372655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.num_of_tracking_entries = env->CallIntMethod(params, methodId); 1373655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1374655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getRSSIHighValue", "()I"); 1375655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.rssi_high_thres = env->CallIntMethod(params, methodId); 1376655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1377655434047df38242c1848eee283f134cfd299fd1Satya Calloji methodId = env->GetMethodID(filtparam, "getRSSILowValue", "()I"); 1378655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.rssi_low_thres = env->CallIntMethod(params, methodId); 1379655434047df38242c1848eee283f134cfd299fd1Satya Calloji 1380655434047df38242c1848eee283f134cfd299fd1Satya Calloji env->DeleteLocalRef(filtparam); 1381655434047df38242c1848eee283f134cfd299fd1Satya Calloji sGattIf->client->scan_filter_param_setup(filt_params); 13822b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 13831a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 13842b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterParamDeleteNative(JNIEnv* env, jobject object, 13852b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint client_if, jint filt_index) 13861a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 13871a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 13882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int delete_scan_filter_params_action = 1; 1389655434047df38242c1848eee283f134cfd299fd1Satya Calloji btgatt_filt_param_setup_t filt_params; 1390655434047df38242c1848eee283f134cfd299fd1Satya Calloji memset(&filt_params, 0, sizeof(btgatt_filt_param_setup_t)); 1391655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.client_if = client_if; 1392655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.action = delete_scan_filter_params_action; 1393655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.filt_index = filt_index; 1394655434047df38242c1848eee283f134cfd299fd1Satya Calloji sGattIf->client->scan_filter_param_setup(filt_params); 13951a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 139680e7d011fdb511a6583258458e97821176866baaWei Wang 13972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterParamClearAllNative(JNIEnv* env, jobject object, jint client_if) 13981a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 13991a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 14002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang const int clear_scan_filter_params_action = 2; 1401655434047df38242c1848eee283f134cfd299fd1Satya Calloji btgatt_filt_param_setup_t filt_params; 1402655434047df38242c1848eee283f134cfd299fd1Satya Calloji memset(&filt_params, 0, sizeof(btgatt_filt_param_setup_t)); 1403655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.client_if = client_if; 1404655434047df38242c1848eee283f134cfd299fd1Satya Calloji filt_params.action = clear_scan_filter_params_action; 1405655434047df38242c1848eee283f134cfd299fd1Satya Calloji sGattIf->client->scan_filter_param_setup(filt_params); 14062b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14071a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14082b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterAddRemoveNative(JNIEnv* env, jobject object, 14092b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint client_if, jint action, jint filt_type, jint filt_index, jint company_id, 14102b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint company_id_mask, jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, 14112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_mask_msb, jstring name, jstring address, jbyte addr_type, 14122b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyteArray data, jbyteArray mask) 14132b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang switch(filt_type) 14151a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14161a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 0: // BTM_BLE_PF_ADDR_FILTER 14172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang { 14181a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang bt_bdaddr_t bda; 14191a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jstr2bdaddr(env, &bda, address); 14202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 0, 14212b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, NULL, NULL, &bda, addr_type,0, NULL,0, NULL); 14221a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14232b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang } 14241a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14251a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 1: // BTM_BLE_PF_SRVC_DATA 14262b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang { 14272b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* data_array = env->GetByteArrayElements(data, 0); 14282b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int data_len = env->GetArrayLength(data); 14292b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* mask_array = env->GetByteArrayElements(mask, NULL); 14302b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang uint16_t mask_len = (uint16_t) env->GetArrayLength(mask); 14312b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14322b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, NULL, NULL, NULL, 0, data_len, (char*)data_array, mask_len,(char*) mask_array); 14332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(data, data_array, JNI_ABORT); 14342b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(mask, mask_array, JNI_ABORT); 14351a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14362b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang } 14371a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14381a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 2: // BTM_BLE_PF_SRVC_UUID 14391a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 3: // BTM_BLE_PF_SRVC_SOL_UUID 14401a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14411a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang bt_uuid_t uuid, uuid_mask; 14421a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang set_uuid(uuid.uu, uuid_msb, uuid_lsb); 14431a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang set_uuid(uuid_mask.uu, uuid_mask_msb, uuid_mask_lsb); 14441a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (uuid_mask_lsb != 0 && uuid_mask_msb != 0) 14452b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14462b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, &uuid, &uuid_mask, NULL,0,0, NULL,0, NULL); 14471a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang else 14482b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14492b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 0, 0, &uuid, NULL, NULL, 0,0, NULL,0, NULL); 14501a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14511a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14521a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14531a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 4: // BTM_BLE_PF_LOCAL_NAME 14541a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14551a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang const char* c_name = env->GetStringUTFChars(name, NULL); 14561a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (c_name != NULL && strlen(c_name) != 0) 14571a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14582b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, 14592b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang filt_index, 0, 0, NULL, NULL, NULL, 0, strlen(c_name), 14602b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang (char*)c_name, 0, NULL); 14611a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseStringUTFChars(name, c_name); 14621a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14631a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14641a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14651a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang case 5: // BTM_BLE_PF_MANU_DATA 14672b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang case 6: // BTM_BLE_PF_SRVC_DATA_PATTERN 14681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang { 14691a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* data_array = env->GetByteArrayElements(data, 0); 14702b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int data_len = env->GetArrayLength(data); // Array contains mask 14712b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jbyte* mask_array = env->GetByteArrayElements(mask, NULL); 14722b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang uint16_t mask_len = (uint16_t) env->GetArrayLength(mask); 14732b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_add_remove(client_if, action, filt_type, filt_index, 14742b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, NULL, NULL, NULL, 0, data_len, (char*)data_array, 14752b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang mask_len, (char*) mask_array); 14761a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(data, data_array, JNI_ABORT); 14772b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang env->ReleaseByteArrayElements(mask, mask_array, JNI_ABORT); 14781a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14791a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14801a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14811a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang default: 14821a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang break; 14831a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang } 14841a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 14851a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 14862b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterAddNative(JNIEnv* env, jobject object, jint client_if, 14872b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_type, jint filt_index, jint company_id, jint company_id_mask, 14882b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, jlong uuid_mask_msb, 14892b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring name, jstring address, jbyte addr_type, jbyteArray data, jbyteArray mask) 14902b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 14912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 14922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int action = 0; 14932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang gattClientScanFilterAddRemoveNative(env, object, client_if, action, filt_type, filt_index, 14942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, uuid_lsb, uuid_msb, uuid_mask_lsb, uuid_mask_msb, 14952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang name, address, addr_type, data, mask); 14962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 14982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 14992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterDeleteNative(JNIEnv* env, jobject object, jint client_if, 15002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_type, jint filt_index, jint company_id, jint company_id_mask, 15012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jlong uuid_lsb, jlong uuid_msb, jlong uuid_mask_lsb, jlong uuid_mask_msb, 15022b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jstring name, jstring address, jbyte addr_type, jbyteArray data, jbyteArray mask) 15032b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15042b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15052b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang int action = 1; 15062b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang gattClientScanFilterAddRemoveNative(env, object, client_if, action, filt_type, filt_index, 15072b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang company_id, company_id_mask, uuid_lsb, uuid_msb, uuid_mask_lsb, uuid_mask_msb, 15082b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang name, address, addr_type, data, mask); 15092b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15102b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterClearNative(JNIEnv* env, jobject object, jint client_if, 15122b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint filt_index) 15132b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_clear(client_if, filt_index); 15162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 15182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientScanFilterEnableNative (JNIEnv* env, jobject object, jint client_if, 15192b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jboolean enable) 15201a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15211a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15222b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->scan_filter_enable(client_if, enable); 15231a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15241a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 1525662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbachstatic void gattClientConfigureMTUNative(JNIEnv *env, jobject object, 1526662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach jint conn_id, jint mtu) 1527662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach{ 1528662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach if (!sGattIf) return; 1529662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach sGattIf->client->configure_mtu(conn_id, mtu); 1530662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach} 1531662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach 1532fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbachstatic void gattConnectionParameterUpdateNative(JNIEnv *env, jobject object, jint client_if, 1533fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach jstring address, jint min_interval, jint max_interval, jint latency, jint timeout) 1534fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach{ 1535fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach if (!sGattIf) return; 1536fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach bt_bdaddr_t bda; 1537fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach jstr2bdaddr(env, &bda, address); 1538fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach sGattIf->client->conn_parameter_update(&bda, min_interval, max_interval, latency, timeout); 1539fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach} 1540fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach 15411a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientEnableAdvNative(JNIEnv* env, jobject object, jint client_if, 1542c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint min_interval, jint max_interval, jint adv_type, jint chnl_map, jint tx_power, 1543c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint timeout_s) 15441a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15451a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15461a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15471a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_enable(client_if, min_interval, max_interval, adv_type, chnl_map, 1548c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach tx_power, timeout_s); 15491a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15501a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15511a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientUpdateAdvNative(JNIEnv* env, jobject object, jint client_if, 1552c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint min_interval, jint max_interval, jint adv_type, jint chnl_map, jint tx_power, 1553c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach jint timeout_s) 15541a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15551a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15561a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15571a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_update(client_if, min_interval, max_interval, adv_type, chnl_map, 1558c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach tx_power, timeout_s); 15591a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15601a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15611a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientSetAdvDataNative(JNIEnv* env, jobject object , jint client_if, 15621a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jboolean set_scan_rsp, jboolean incl_name, jboolean incl_txpower, jint appearance, 15631a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyteArray manufacturer_data,jbyteArray service_data, jbyteArray service_uuid) 15641a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15651a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15661a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* manu_data = env->GetByteArrayElements(manufacturer_data, NULL); 15671a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t manu_len = (uint16_t) env->GetArrayLength(manufacturer_data); 15681a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15691a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* serv_data = env->GetByteArrayElements(service_data, NULL); 15701a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t serv_data_len = (uint16_t) env->GetArrayLength(service_data); 15711a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15721a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jbyte* serv_uuid = env->GetByteArrayElements(service_uuid, NULL); 15731a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang uint16_t serv_uuid_len = (uint16_t) env->GetArrayLength(service_uuid); 15741a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15751a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_set_inst_data(client_if, set_scan_rsp, incl_name,incl_txpower, 15761a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang appearance, manu_len, (char*)manu_data, 15771a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang serv_data_len, (char*)serv_data, serv_uuid_len, 15781a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang (char*)serv_uuid); 15791a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15801a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(manufacturer_data, manu_data, JNI_ABORT); 15811a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(service_data, serv_data, JNI_ABORT); 15821a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang env->ReleaseByteArrayElements(service_uuid, serv_uuid, JNI_ABORT); 15831a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15841a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15851a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wangstatic void gattClientDisableAdvNative(JNIEnv* env, jobject object, jint client_if) 15861a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang{ 15871a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang if (!sGattIf) return; 15881a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang sGattIf->client->multi_adv_disable(client_if); 15891a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang} 15901a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 15912b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientConfigBatchScanStorageNative(JNIEnv* env, jobject object, jint client_if, 15922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint max_full_reports_percent, jint max_trunc_reports_percent, 15932b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint notify_threshold_level_percent) 15942b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 15952b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 15962b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_cfg_storage(client_if, max_full_reports_percent, 15972b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang max_trunc_reports_percent, notify_threshold_level_percent); 15982b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 15992b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 16002b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientStartBatchScanNative(JNIEnv* env, jobject object, jint client_if, 16012b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_mode, jint scan_interval_unit, jint scan_window_unit, jint addr_type, 16022b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint discard_rule) 16032b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 16042b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 16052b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_enb_batch_scan(client_if, scan_mode, scan_interval_unit, 16062b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang scan_window_unit, addr_type, discard_rule); 16072b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 16082b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 16092b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientStopBatchScanNative(JNIEnv* env, jobject object, jint client_if) 16102b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 16112b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 16122b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_dis_batch_scan(client_if); 16132b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 16142b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 16152b670d217c743a7a8082f1d72baf532ef66ba21cWei Wangstatic void gattClientReadScanReportsNative(JNIEnv* env, jobject object, jint client_if, 16162b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang jint scan_type) 16172b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang{ 16182b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang if (!sGattIf) return; 16192b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sGattIf->client->batchscan_read_reports(client_if, scan_type); 16202b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang} 16212b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang 162203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 162303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * Native server functions 162403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 162503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerRegisterAppNative(JNIEnv* env, jobject object, 162603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong app_uuid_lsb, jlong app_uuid_msb ) 162703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 162803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 162903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 163003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb); 163103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->register_server(&uuid); 163203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 163303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 163403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerUnregisterAppNative(JNIEnv* env, jobject object, jint serverIf) 163503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 163603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 163703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->unregister_server(serverIf); 163803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 163903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 164003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerConnectNative(JNIEnv *env, jobject object, 164118591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta jint server_if, jstring address, jboolean is_direct, jint transport) 164203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 164303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 164403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 164503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bd_addr; 164603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta const char *c_address = env->GetStringUTFChars(address, NULL); 164703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bd_addr_str_to_addr(c_address, bd_addr.address); 164803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 164918591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta sGattIf->server->connect(server_if, &bd_addr, is_direct, transport); 165003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 165103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 165203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerDisconnectNative(JNIEnv* env, jobject object, jint serverIf, 165303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstring address, jint conn_id) 165403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 165503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 165603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bda; 165703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bda, address); 165803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->disconnect(serverIf, &bda, conn_id); 165903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 166003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 166103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddServiceNative (JNIEnv *env, jobject object, 166203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint service_type, jint service_id_inst_id, 166303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong service_id_uuid_lsb, jlong service_id_uuid_msb, 166403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint num_handles) 166503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 166603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 166703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 166803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_srvc_id_t srvc_id; 166903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.id.inst_id = (uint8_t) service_id_inst_id; 167003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta srvc_id.is_primary = (service_type == BTGATT_SERVICE_TYPE_PRIMARY ? 1 : 0); 167103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(srvc_id.id.uuid.uu, service_id_uuid_msb, service_id_uuid_lsb); 167203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 167303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_service(server_if, &srvc_id, num_handles); 167403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 167503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 167603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddIncludedServiceNative (JNIEnv *env, jobject object, 167703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, jint included_svc_handle) 167803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 167903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 168003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_included_service(server_if, svc_handle, 168103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta included_svc_handle); 168203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 168303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 168403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddCharacteristicNative (JNIEnv *env, jobject object, 168503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, 168603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong char_uuid_lsb, jlong char_uuid_msb, 168703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint properties, jint permissions) 168803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 168903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 169003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 169103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 169203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, char_uuid_msb, char_uuid_lsb); 169303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 169403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_characteristic(server_if, svc_handle, 169503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta &uuid, properties, permissions); 169603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 169703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 169803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerAddDescriptorNative (JNIEnv *env, jobject object, 169903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, 170003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong desc_uuid_lsb, jlong desc_uuid_msb, 170103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint permissions) 170203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 170303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 170403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 170503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid; 170603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid.uu, desc_uuid_msb, desc_uuid_lsb); 170703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 170803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->add_descriptor(server_if, svc_handle, &uuid, permissions); 170903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 171003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 171103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerStartServiceNative (JNIEnv *env, jobject object, 171203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle, jint transport ) 171303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 171403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 171503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->start_service(server_if, svc_handle, transport); 171603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 171703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 171803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerStopServiceNative (JNIEnv *env, jobject object, 171903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle) 172003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 172103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 172203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->stop_service(server_if, svc_handle); 172303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 172403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 172503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerDeleteServiceNative (JNIEnv *env, jobject object, 172603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint svc_handle) 172703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 172803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 172903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->delete_service(server_if, svc_handle); 173003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 173103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 173203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendIndicationNative (JNIEnv *env, jobject object, 173303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint attr_handle, jint conn_id, jbyteArray val) 173403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 173503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 173603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 173703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 173803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int val_len = env->GetArrayLength(val); 173903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 174003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_indication(server_if, attr_handle, conn_id, val_len, 174103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta /*confirm*/ 1, (char*)array); 174203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 174303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 174403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 174503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendNotificationNative (JNIEnv *env, jobject object, 174603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint attr_handle, jint conn_id, jbyteArray val) 174703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 174803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 174903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 175003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 175103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta int val_len = env->GetArrayLength(val); 175203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 175303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_indication(server_if, attr_handle, conn_id, val_len, 175403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta /*confirm*/ 0, (char*)array); 175503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 175603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 175703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 175803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattServerSendResponseNative (JNIEnv *env, jobject object, 175903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint server_if, jint conn_id, jint trans_id, jint status, 176003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint handle, jint offset, jbyteArray val, jint auth_req) 176103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 176203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 176303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 176403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_response_t response; 176503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 176603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.handle = handle; 176703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.auth_req = auth_req; 176803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.offset = offset; 176903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.len = 0; 177003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 177103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (val != NULL) 177203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta { 177303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.len = (uint16_t) env->GetArrayLength(val); 177403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jbyte* array = env->GetByteArrayElements(val, 0); 177503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 177603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta for (int i = 0; i != response.attr_value.len; ++i) 177703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta response.attr_value.value[i] = (uint8_t) array[i]; 177803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta env->ReleaseByteArrayElements(val, array, JNI_ABORT); 177903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta } 178003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 178103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->server->send_response(conn_id, trans_id, status, &response); 178203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 178303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 178403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic void gattTestNative(JNIEnv *env, jobject object, jint command, 178503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jlong uuid1_lsb, jlong uuid1_msb, jstring bda1, 178603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jint p1, jint p2, jint p3, jint p4, jint p5 ) 178703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 178803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta if (!sGattIf) return; 178903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 179003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_bdaddr_t bt_bda1; 179103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta jstr2bdaddr(env, &bt_bda1, bda1); 179203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 179303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta bt_uuid_t uuid1; 179403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta set_uuid(uuid1.uu, uuid1_msb, uuid1_lsb); 179503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 179603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta btgatt_test_params_t params; 179703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.bda1 = &bt_bda1; 179803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.uuid1 = &uuid1; 179903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u1 = p1; 180003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u2 = p2; 180103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u3 = p3; 180203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u4 = p4; 180303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta params.u5 = p5; 180403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta sGattIf->client->test_command(command, ¶ms); 180503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 180603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 180703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta/** 180803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta * JNI function definitinos 180903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta */ 181003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 181127bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang// JNI functions defined in AdvertiseManager class. 181227bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wangstatic JNINativeMethod sAdvertiseMethods[] = { 1813c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach {"gattClientEnableAdvNative", "(IIIIIII)V", (void *) gattClientEnableAdvNative}, 1814c1512abbe9bb60c94c5f46e90918983d1514c8e3Andre Eisenbach {"gattClientUpdateAdvNative", "(IIIIIII)V", (void *) gattClientUpdateAdvNative}, 181527bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientSetAdvDataNative", "(IZZZI[B[B[B)V", (void *) gattClientSetAdvDataNative}, 181627bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang {"gattClientDisableAdvNative", "(I)V", (void *) gattClientDisableAdvNative}, 1817a1664d61821a59145f8095a75373403a0c54244eWei Wang {"gattSetAdvDataNative", "(IZZZIII[B[B[B)V", (void *) gattSetAdvDataNative}, 1818a1664d61821a59145f8095a75373403a0c54244eWei Wang {"gattAdvertiseNative", "(IZ)V", (void *) gattAdvertiseNative}, 181927bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang}; 182027bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang 18219c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang// JNI functions defined in ScanManager class. 18229c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wangstatic JNINativeMethod sScanMethods[] = { 18231a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang {"gattClientScanNative", "(Z)V", (void *) gattClientScanNative}, 18249c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang // Batch scan JNI functions. 18252b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientConfigBatchScanStorageNative", "(IIII)V",(void *) gattClientConfigBatchScanStorageNative}, 18262b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientStartBatchScanNative", "(IIIIII)V", (void *) gattClientStartBatchScanNative}, 18272b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientStopBatchScanNative", "(I)V", (void *) gattClientStopBatchScanNative}, 18289c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang {"gattClientReadScanReportsNative", "(II)V", (void *) gattClientReadScanReportsNative}, 18299c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang // Scan filter JNI functions. 1830655434047df38242c1848eee283f134cfd299fd1Satya Calloji {"gattClientScanFilterParamAddNative", "(Lcom/android/bluetooth/gatt/FilterParams;)V", (void *) gattClientScanFilterParamAddNative}, 18312b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterParamDeleteNative", "(II)V", (void *) gattClientScanFilterParamDeleteNative}, 18322b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterParamClearAllNative", "(I)V", (void *) gattClientScanFilterParamClearAllNative}, 18332b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterAddNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterAddNative}, 18342b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterDeleteNative", "(IIIIIJJJJLjava/lang/String;Ljava/lang/String;B[B[B)V", (void *) gattClientScanFilterDeleteNative}, 18352b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterClearNative", "(II)V", (void *) gattClientScanFilterClearNative}, 18362b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang {"gattClientScanFilterEnableNative", "(IZ)V", (void *) gattClientScanFilterEnableNative}, 1837ecbac5b723ac906c46271c2b740a52ccef625c57Satya Calloji {"gattSetScanParametersNative", "(III)V", (void *) gattSetScanParametersNative}, 18381a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang}; 18391a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang 18401a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang// JNI functions defined in GattService class. 184103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battastatic JNINativeMethod sMethods[] = { 184203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"classInitNative", "()V", (void *) classInitNative}, 184303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"initializeNative", "()V", (void *) initializeNative}, 184403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"cleanupNative", "()V", (void *) cleanupNative}, 184503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetDeviceTypeNative", "(Ljava/lang/String;)I", (void *) gattClientGetDeviceTypeNative}, 184603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRegisterAppNative", "(JJ)V", (void *) gattClientRegisterAppNative}, 184703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientUnregisterAppNative", "(I)V", (void *) gattClientUnregisterAppNative}, 184818591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta {"gattClientConnectNative", "(ILjava/lang/String;ZI)V", (void *) gattClientConnectNative}, 184903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientDisconnectNative", "(ILjava/lang/String;I)V", (void *) gattClientDisconnectNative}, 185003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRefreshNative", "(ILjava/lang/String;)V", (void *) gattClientRefreshNative}, 185103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientSearchServiceNative", "(IZJJ)V", (void *) gattClientSearchServiceNative}, 185203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetCharacteristicNative", "(IIIJJIJJ)V", (void *) gattClientGetCharacteristicNative}, 18537f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientGetDescriptorNative", "(IIIJJIJJIJJ)V", (void *) gattClientGetDescriptorNative}, 185403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientGetIncludedServiceNative", "(IIIJJIIJJ)V", (void *) gattClientGetIncludedServiceNative}, 185503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientReadCharacteristicNative", "(IIIJJIJJI)V", (void *) gattClientReadCharacteristicNative}, 18567f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientReadDescriptorNative", "(IIIJJIJJIJJI)V", (void *) gattClientReadDescriptorNative}, 185703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientWriteCharacteristicNative", "(IIIJJIJJII[B)V", (void *) gattClientWriteCharacteristicNative}, 18587f9efa4413d64569cd8a25ef2262778505059d80Andre Eisenbach {"gattClientWriteDescriptorNative", "(IIIJJIJJIJJII[B)V", (void *) gattClientWriteDescriptorNative}, 185903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientExecuteWriteNative", "(IZ)V", (void *) gattClientExecuteWriteNative}, 186003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientRegisterForNotificationsNative", "(ILjava/lang/String;IIJJIJJZ)V", (void *) gattClientRegisterForNotificationsNative}, 186103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattClientReadRemoteRssiNative", "(ILjava/lang/String;)V", (void *) gattClientReadRemoteRssiNative}, 1862662758761424473da90573de5fed1b686ce9ba0eAndre Eisenbach {"gattClientConfigureMTUNative", "(II)V", (void *) gattClientConfigureMTUNative}, 1863fbe63484114cf9b7a79043e0bc5bb74504cf5730Andre Eisenbach {"gattConnectionParameterUpdateNative", "(ILjava/lang/String;IIII)V", (void *) gattConnectionParameterUpdateNative}, 186403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerRegisterAppNative", "(JJ)V", (void *) gattServerRegisterAppNative}, 186503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerUnregisterAppNative", "(I)V", (void *) gattServerUnregisterAppNative}, 186618591a7894c5e4516491438c2e758adf8d2ade90Ganesh Ganapathi Batta {"gattServerConnectNative", "(ILjava/lang/String;ZI)V", (void *) gattServerConnectNative}, 186703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerDisconnectNative", "(ILjava/lang/String;I)V", (void *) gattServerDisconnectNative}, 186803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddServiceNative", "(IIIJJI)V", (void *) gattServerAddServiceNative}, 186903b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddIncludedServiceNative", "(III)V", (void *) gattServerAddIncludedServiceNative}, 187003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddCharacteristicNative", "(IIJJII)V", (void *) gattServerAddCharacteristicNative}, 187103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerAddDescriptorNative", "(IIJJI)V", (void *) gattServerAddDescriptorNative}, 187203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerStartServiceNative", "(III)V", (void *) gattServerStartServiceNative}, 187303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerStopServiceNative", "(II)V", (void *) gattServerStopServiceNative}, 187403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerDeleteServiceNative", "(II)V", (void *) gattServerDeleteServiceNative}, 187503b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendIndicationNative", "(III[B)V", (void *) gattServerSendIndicationNative}, 187603b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendNotificationNative", "(III[B)V", (void *) gattServerSendNotificationNative}, 187703b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta {"gattServerSendResponseNative", "(IIIIII[BI)V", (void *) gattServerSendResponseNative}, 187803b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 187953f26c079f676b3a72a20de4e30f075057d3777dPrerepa Viswanadham {"gattTestNative", "(IJJLjava/lang/String;IIIII)V", (void *) gattTestNative}, 188003b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta}; 188103b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta 188203b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Battaint register_com_android_bluetooth_gatt(JNIEnv* env) 188303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta{ 18841a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang int register_success = 18859c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/ScanManager$ScanNative", 18869c24a0ef159f3332a2e66648d8d3c7dfac26cbc8Wei Wang sScanMethods, NELEM(sScanMethods)); 188727bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang register_success &= 188827bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/AdvertiseManager$AdvertiseNative", 188927bd5f277ccf471f2fa9cd9151a2a226b51bc825Wei Wang sAdvertiseMethods, NELEM(sAdvertiseMethods)); 18901a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang return register_success & 18911a2f87a202a4d634f0b6b5b6e9a8545796207288Wei Wang jniRegisterNativeMethods(env, "com/android/bluetooth/gatt/GattService", 18922b670d217c743a7a8082f1d72baf532ef66ba21cWei Wang sMethods, NELEM(sMethods)); 189303b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 189403b8386de26ba6500af2d66687bff9b01f2cbbd7Ganesh Ganapathi Batta} 1895