blob: 4b142a5d1db61a356f9458c7a01d4b048db88953 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright (C) 2016 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""
This test script exercises GATT notify/indicate procedures.
"""
from acts.test_decorators import test_tracker_info
from acts_contrib.test_utils.bt.BluetoothBaseTest import BluetoothBaseTest
from acts_contrib.test_utils.bt.GattConnectedBaseTest import GattConnectedBaseTest
from acts_contrib.test_utils.bt.bt_constants import gatt_characteristic
from acts_contrib.test_utils.bt.bt_constants import gatt_descriptor
from acts_contrib.test_utils.bt.bt_constants import gatt_event
from acts_contrib.test_utils.bt.bt_constants import gatt_cb_strings
from acts_contrib.test_utils.bt.bt_constants import gatt_char_desc_uuids
from math import ceil
class GattNotifyTest(GattConnectedBaseTest):
@BluetoothBaseTest.bt_test_wrap
@test_tracker_info(uuid='e0ba60af-c1f2-4516-a5d5-89e2def0c757')
def test_notify_char(self):
"""Test notify characteristic value.
Test GATT notify characteristic value.
Steps:
1. Central: write CCC - register for notifications.
2. Peripheral: receive CCC modification.
3. Peripheral: send characteristic notification.
4. Central: receive notification, verify it's conent matches what was
sent
Expected Result:
Verify that notification registration and delivery works.
Returns:
Pass if True
Fail if False
TAGS: LE, GATT, Characteristic
Priority: 0
"""
#write CCC descriptor to enable notifications
self.cen_ad.droid.gattClientDescriptorSetValue(
self.bluetooth_gatt, self.discovered_services_index,
self.test_service_index, self.NOTIFIABLE_CHAR_UUID,
gatt_char_desc_uuids['client_char_cfg'],
gatt_descriptor['enable_notification_value'])
self.cen_ad.droid.gattClientWriteDescriptor(
self.bluetooth_gatt, self.discovered_services_index,
self.test_service_index, self.NOTIFIABLE_CHAR_UUID,
gatt_char_desc_uuids['client_char_cfg'])
#enable notifications in app
self.cen_ad.droid.gattClientSetCharacteristicNotification(
self.bluetooth_gatt, self.discovered_services_index,
self.test_service_index, self.NOTIFIABLE_CHAR_UUID, True)
event = self._server_wait(gatt_event['desc_write_req'])
request_id = event['data']['requestId']
bt_device_id = 0
status = 0
#confirm notification registration was successful
self.per_ad.droid.gattServerSendResponse(
self.gatt_server, bt_device_id, request_id, status, 0, [])
#wait for client to get response
event = self._client_wait(gatt_event['desc_write'])
#set notified value
notified_value = [1, 5, 9, 7, 5, 3, 6, 4, 8, 2]
self.per_ad.droid.gattServerCharacteristicSetValue(
self.notifiable_char_index, notified_value)
#send notification
self.per_ad.droid.gattServerNotifyCharacteristicChanged(
self.gatt_server, bt_device_id, self.notifiable_char_index, False)
#wait for client to receive the notification
event = self._client_wait(gatt_event['char_change'])
self.assertEqual(notified_value, event["data"]["CharacteristicValue"])
return True