def bleprph_client_task(dut, dut_addr): interface = 'hci0' ble_devname = 'nimble-bleprph' srv_uuid = '2f12' write_value = b'A' # Get BLE client module ble_client_obj = lib_ble_client.BLE_Bluez_Client(iface=interface) # Discover Bluetooth Adapter and power on is_adapter_set = ble_client_obj.set_adapter() if not is_adapter_set: return # Connect BLE Device is_connected = ble_client_obj.connect(devname=ble_devname, devaddr=dut_addr) if not is_connected: return # Get services of the connected device services = ble_client_obj.get_services() if not services: ble_client_obj.disconnect() return # Verify service uuid exists service_exists = ble_client_obj.get_service_if_exists(srv_uuid) if not service_exists: ble_client_obj.disconnect() return # Get characteristics of the connected device ble_client_obj.get_chars() # Read properties of characteristics (uuid, value and permissions) ble_client_obj.read_chars() # Write new value to characteristic having read and write permission # and display updated value write_char = ble_client_obj.write_chars(write_value) if not write_char: ble_client_obj.disconnect() return # Disconnect device ble_client_obj.disconnect() # Check dut responses dut.expect('connection established; status=0', timeout=30) dut.expect('disconnect;', timeout=30)
def blehr_client_task(hr_obj, dut_addr): interface = 'hci0' ble_devname = 'blehr_sensor_1.0' hr_srv_uuid = '180d' hr_char_uuid = '2a37' # Get BLE client module ble_client_obj = lib_ble_client.BLE_Bluez_Client(interface, devname=ble_devname, devaddr=dut_addr) if not ble_client_obj: raise RuntimeError('Failed to get DBus-Bluez object') # Discover Bluetooth Adapter and power on is_adapter_set = ble_client_obj.set_adapter() if not is_adapter_set: raise RuntimeError('Adapter Power On failed !!') # Connect BLE Device is_connected = ble_client_obj.connect() if not is_connected: # Call disconnect to perform cleanup operations before exiting application ble_client_obj.disconnect() raise RuntimeError('Connection to device ' + str(ble_devname) + ' failed !!') # Read Services services_ret = ble_client_obj.get_services() if services_ret: Utility.console_log('\nServices\n') Utility.console_log(str(services_ret)) else: ble_client_obj.disconnect() raise RuntimeError('Failure: Read Services failed') ''' Blehr application run: Start Notifications Retrieve updated value Stop Notifications ''' blehr_ret = ble_client_obj.hr_update_simulation(hr_srv_uuid, hr_char_uuid) if blehr_ret: Utility.console_log('Success: blehr example test passed') else: raise RuntimeError('Failure: blehr example test failed') # Call disconnect to perform cleanup operations before exiting application ble_client_obj.disconnect()
def blecent_client_task(dut): interface = 'hci0' adv_host_name = 'BleCentTestApp' adv_type = 'peripheral' adv_uuid = '1811' # Get BLE client module ble_client_obj = lib_ble_client.BLE_Bluez_Client(iface=interface) # Discover Bluetooth Adapter and power on is_adapter_set = ble_client_obj.set_adapter() if not is_adapter_set: return ''' Blecent application run: Create GATT data Register GATT Application Create Advertising data Register advertisement Start advertising ''' # Create Gatt Application # Register GATT Application ble_client_obj.register_gatt_app() # Register Advertisement # Check read/write/subscribe is received from device ble_client_obj.register_adv(adv_host_name, adv_type, adv_uuid) # Check dut responses dut.expect('Connection established', timeout=30) dut.expect('Service discovery complete; status=0', timeout=30) dut.expect('GATT procedure initiated: read;', timeout=30) dut.expect('Read complete; status=0', timeout=30) dut.expect('GATT procedure initiated: write;', timeout=30) dut.expect('Write complete; status=0', timeout=30) dut.expect('GATT procedure initiated: write;', timeout=30) dut.expect('Subscribe complete; status=0', timeout=30) dut.expect('received notification;', timeout=30)
def test_example_app_ble_central(env, extra_data): """ Steps: 1. Discover Bluetooth Adapter and Power On """ interface = 'hci0' adv_host_name = "BleCentTestApp" adv_iface_index = 0 adv_type = 'peripheral' adv_uuid = '1811' subprocess.check_output(['rm','-rf','/var/lib/bluetooth/*']) subprocess.check_output(['hciconfig','hci0','reset']) # Acquire DUT dut = env.get_dut("blecent", "examples/bluetooth/nimble/blecent", dut_class=ttfw_idf.ESP32DUT) # Get binary file binary_file = os.path.join(dut.app.binary_path, "blecent.bin") bin_size = os.path.getsize(binary_file) ttfw_idf.log_performance("blecent_bin_size", "{}KB".format(bin_size // 1024)) # Upload binary and start testing Utility.console_log("Starting blecent example test app") dut.start_app() dut.reset() device_addr = ':'.join(re.findall('..', '%012x' % uuid.getnode())) # Get BLE client module ble_client_obj = lib_ble_client.BLE_Bluez_Client(interface) if not ble_client_obj: raise RuntimeError("Get DBus-Bluez object failed !!") # Discover Bluetooth Adapter and power on is_adapter_set = ble_client_obj.set_adapter() if not is_adapter_set: raise RuntimeError("Adapter Power On failed !!") # Write device address to dut dut.expect("BLE Host Task Started", timeout=60) dut.write(device_addr + "\n") ''' Blecent application run: Create GATT data Register GATT Application Create Advertising data Register advertisement Start advertising ''' ble_client_obj.start_advertising(adv_host_name, adv_iface_index, adv_type, adv_uuid) # Call disconnect to perform cleanup operations before exiting application ble_client_obj.disconnect() # Check dut responses dut.expect("Connection established", timeout=60) dut.expect("Service discovery complete; status=0", timeout=60) print("Service discovery passed\n\tService Discovery Status: 0") dut.expect("GATT procedure initiated: read;", timeout=60) dut.expect("Read complete; status=0", timeout=60) print("Read passed\n\tSupportedNewAlertCategoryCharacteristic\n\tRead Status: 0") dut.expect("GATT procedure initiated: write;", timeout=60) dut.expect("Write complete; status=0", timeout=60) print("Write passed\n\tAlertNotificationControlPointCharacteristic\n\tWrite Status: 0") dut.expect("GATT procedure initiated: write;", timeout=60) dut.expect("Subscribe complete; status=0", timeout=60) print("Subscribe passed\n\tClientCharacteristicConfigurationDescriptor\n\tSubscribe Status: 0")
def bleprph_client_task(prph_obj, dut, dut_addr): interface = 'hci0' ble_devname = 'nimble-bleprph' srv_uuid = '2f12' # Get BLE client module ble_client_obj = lib_ble_client.BLE_Bluez_Client(interface, devname=ble_devname, devaddr=dut_addr) if not ble_client_obj: raise RuntimeError("Failed to get DBus-Bluez object") # Discover Bluetooth Adapter and power on is_adapter_set = ble_client_obj.set_adapter() if not is_adapter_set: raise RuntimeError("Adapter Power On failed !!") # Connect BLE Device is_connected = ble_client_obj.connect() if not is_connected: # Call disconnect to perform cleanup operations before exiting application ble_client_obj.disconnect() raise RuntimeError("Connection to device " + ble_devname + " failed !!") # Check dut responses dut.expect("GAP procedure initiated: advertise;", timeout=30) # Read Services services_ret = ble_client_obj.get_services(srv_uuid) if services_ret: Utility.console_log("\nServices\n") Utility.console_log(str(services_ret)) else: ble_client_obj.disconnect() raise RuntimeError("Failure: Read Services failed") # Read Characteristics chars_ret = {} chars_ret = ble_client_obj.read_chars() if chars_ret: Utility.console_log("\nCharacteristics retrieved") for path, props in chars_ret.items(): Utility.console_log("\n\tCharacteristic: " + str(path)) Utility.console_log("\tCharacteristic UUID: " + str(props[2])) Utility.console_log("\tValue: " + str(props[0])) Utility.console_log("\tProperties: : " + str(props[1])) else: ble_client_obj.disconnect() raise RuntimeError("Failure: Read Characteristics failed") ''' Write Characteristics - write 'A' to characteristic with write permission ''' chars_ret_on_write = {} chars_ret_on_write = ble_client_obj.write_chars('A') if chars_ret_on_write: Utility.console_log("\nCharacteristics after write operation") for path, props in chars_ret_on_write.items(): Utility.console_log("\n\tCharacteristic:" + str(path)) Utility.console_log("\tCharacteristic UUID: " + str(props[2])) Utility.console_log("\tValue:" + str(props[0])) Utility.console_log("\tProperties: : " + str(props[1])) else: ble_client_obj.disconnect() raise RuntimeError("Failure: Write Characteristics failed") # Call disconnect to perform cleanup operations before exiting application ble_client_obj.disconnect()
def blehr_client_task(hr_obj, dut, dut_addr): interface = 'hci0' ble_devname = 'blehr_sensor_1.0' hr_srv_uuid = '180d' hr_char_uuid = '2a37' # Get BLE client module ble_client_obj = lib_ble_client.BLE_Bluez_Client(iface=interface) # Discover Bluetooth Adapter and power on is_adapter_set = ble_client_obj.set_adapter() if not is_adapter_set: return # Connect BLE Device is_connected = ble_client_obj.connect(devname=ble_devname, devaddr=dut_addr) if not is_connected: return # Get services of the connected device services = ble_client_obj.get_services() if not services: ble_client_obj.disconnect() return # Get characteristics of the connected device ble_client_obj.get_chars() ''' Blehr application run: Start Notifications Retrieve updated value Stop Notifications ''' # Get service if exists service = ble_client_obj.get_service_if_exists(hr_srv_uuid) if service: # Get characteristic if exists char = ble_client_obj.get_char_if_exists(hr_char_uuid) if not char: ble_client_obj.disconnect() return else: ble_client_obj.disconnect() return # Start Notify # Read updated value # Stop Notify notify = ble_client_obj.start_notify(char) if not notify: ble_client_obj.disconnect() return # Check dut responses dut.expect('subscribe event; cur_notify=1', timeout=30) dut.expect('subscribe event; cur_notify=0', timeout=30) # Call disconnect to perform cleanup operations before exiting application ble_client_obj.disconnect() # Check dut responses dut.expect('disconnect;', timeout=30)