<?xml version="1.0" encoding="UTF-8"?>
<!--
	XML

	Copyright 2018-2023 MicroEJ Corp. All rights reserved.
	Use of this source code is governed by a BSD-style license that can be found with this software.
-->

<require>
	<type name="ej.bluetooth.BluetoothAdapter"/>
	<method name="ej.bluetooth.BluetoothAdapter.addService(ej.bluetooth.BluetoothServiceDefinition)ej.bluetooth.BluetoothService"/>
	<method name="ej.bluetooth.BluetoothAdapter.connect(ej.bluetooth.BluetoothAddress)boolean"/>
	<method name="ej.bluetooth.BluetoothAdapter.disable()void"/>
	<method name="ej.bluetooth.BluetoothAdapter.enable()boolean"/>
	<method name="ej.bluetooth.BluetoothAdapter.getAdapter()ej.bluetooth.BluetoothAdapter"/>
	<method name="ej.bluetooth.BluetoothAdapter.setConnectionListener(ej.bluetooth.listeners.ConnectionListener)void"/>
	<method name="ej.bluetooth.BluetoothAdapter.startAdvertising(byte[])boolean"/>
	<method name="ej.bluetooth.BluetoothAdapter.startScanning(ej.bluetooth.BluetoothScanFilter)boolean"/>
	<method name="ej.bluetooth.BluetoothAdapter.stopAdvertising()boolean"/>
	<method name="ej.bluetooth.BluetoothAdapter.stopScanning()boolean"/>

	<type name="ej.bluetooth.BluetoothAddress"/>
	<method name="ej.bluetooth.BluetoothAddress.BluetoothAddress(byte[],int,boolean)void"/>
	<method name="ej.bluetooth.BluetoothAddress.BluetoothAddress(java.lang.String,boolean)void"/>
	<method name="ej.bluetooth.BluetoothAddress.getBytes(byte[],int)void"/>
	<method name="ej.bluetooth.BluetoothAddress.isPublic()boolean"/>

	<type name="ej.bluetooth.BluetoothAttribute"/>
	<method name="ej.bluetooth.BluetoothAttribute.getService()ej.bluetooth.BluetoothService"/>
	<method name="ej.bluetooth.BluetoothAttribute.getUuid()ej.bluetooth.BluetoothUuid"/>

	<type name="ej.bluetooth.BluetoothCharacteristic"/>
	<method name="ej.bluetooth.BluetoothCharacteristic.getDescriptor(int)ej.bluetooth.BluetoothDescriptor"/>
	<method name="ej.bluetooth.BluetoothCharacteristic.getNumDescriptors()int"/>
	<method name="ej.bluetooth.BluetoothCharacteristic.getProperties()byte"/>

	<type name="ej.bluetooth.BluetoothConnection"/>
	<method name="ej.bluetooth.BluetoothConnection.disconnect()boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.discoverService(ej.bluetooth.BluetoothUuid)boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.discoverServices()boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.getAddress()ej.bluetooth.BluetoothAddress"/>
	<method name="ej.bluetooth.BluetoothConnection.sendExecuteWriteResponse(ej.bluetooth.BluetoothAttribute,byte)boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendNotification(ej.bluetooth.BluetoothCharacteristic,byte[],boolean)boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendPairRequest()boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendPairResponse(boolean)boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendPasskeyResponse(boolean,int)boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendPrepareWriteResponse(ej.bluetooth.BluetoothAttribute,byte,byte[],int)boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendReadRequest(ej.bluetooth.BluetoothAttribute)boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendReadResponse(ej.bluetooth.BluetoothAttribute,byte,byte[])boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendWriteRequest(ej.bluetooth.BluetoothAttribute,byte[])boolean"/>
	<method name="ej.bluetooth.BluetoothConnection.sendWriteResponse(ej.bluetooth.BluetoothAttribute,byte)boolean"/>

	<type name="ej.bluetooth.BluetoothDataTypes"/>
	<field name="ej.bluetooth.BluetoothDataTypes.ADVERTISING_INTERVAL"/>
	<field name="ej.bluetooth.BluetoothDataTypes.APPEARANCE"/>
	<field name="ej.bluetooth.BluetoothDataTypes.COMPLETE_LOCAL_NAME"/>
	<field name="ej.bluetooth.BluetoothDataTypes.FLAGS"/>
	<field name="ej.bluetooth.BluetoothDataTypes.LE_SUPPORTED_FEATURES"/>
	<field name="ej.bluetooth.BluetoothDataTypes.MANUFACTURER_SPECIFIC_DATA"/>
	<field name="ej.bluetooth.BluetoothDataTypes.PUBLIC_TARGET_ADDRESS"/>
	<field name="ej.bluetooth.BluetoothDataTypes.RANDOM_TARGET_ADDRESS"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_DATA_UUID128"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_DATA_UUID16"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_DATA_UUID32"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_SOLICITATION_UUID128_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_SOLICITATION_UUID16_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_SOLICITATION_UUID32_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_UUID128_COMPLETE_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_UUID128_INCOMPLETE_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_UUID16_COMPLETE_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_UUID16_INCOMPLETE_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_UUID32_COMPLETE_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SERVICE_UUID32_INCOMPLETE_LIST"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SHORTENED_LOCAL_NAME"/>
	<field name="ej.bluetooth.BluetoothDataTypes.SLAVE_CONNECTION_INTERVAL_RANGE"/>
	<field name="ej.bluetooth.BluetoothDataTypes.TX_POWER_LEVEL"/>
	<field name="ej.bluetooth.BluetoothDataTypes.URI"/>

	<type name="ej.bluetooth.BluetoothDescriptor"/>
	<method name="ej.bluetooth.BluetoothDescriptor.getCharacteristic()ej.bluetooth.BluetoothCharacteristic"/>

	<type name="ej.bluetooth.BluetoothPermissions"/>
	<field name="ej.bluetooth.BluetoothPermissions.NONE"/>
	<field name="ej.bluetooth.BluetoothPermissions.READ"/>
	<field name="ej.bluetooth.BluetoothPermissions.READ_AUTH"/>
	<field name="ej.bluetooth.BluetoothPermissions.READ_ENCRYPT"/>
	<field name="ej.bluetooth.BluetoothPermissions.RW"/>
	<field name="ej.bluetooth.BluetoothPermissions.RW_AUTH"/>
	<field name="ej.bluetooth.BluetoothPermissions.RW_ENCRYPT"/>
	<field name="ej.bluetooth.BluetoothPermissions.WRITE"/>
	<field name="ej.bluetooth.BluetoothPermissions.WRITE_AUTH"/>
	<field name="ej.bluetooth.BluetoothPermissions.WRITE_ENCRYPT"/>

	<type name="ej.bluetooth.BluetoothProperties"/>
	<field name="ej.bluetooth.BluetoothProperties.BROADCAST"/>
	<field name="ej.bluetooth.BluetoothProperties.EXTENDED"/>
	<field name="ej.bluetooth.BluetoothProperties.INDICATE"/>
	<field name="ej.bluetooth.BluetoothProperties.NONE"/>
	<field name="ej.bluetooth.BluetoothProperties.NOTIFY"/>
	<field name="ej.bluetooth.BluetoothProperties.READ"/>
	<field name="ej.bluetooth.BluetoothProperties.WRITE"/>
	<field name="ej.bluetooth.BluetoothProperties.WRITE_NO_RESPONSE"/>
	<field name="ej.bluetooth.BluetoothProperties.WRITE_SIGNED"/>

	<type name="ej.bluetooth.BluetoothScanFilter"/>
	<method name="ej.bluetooth.BluetoothScanFilter.fieldEquals(byte,byte[])ej.bluetooth.BluetoothScanFilter"/>
	<method name="ej.bluetooth.BluetoothScanFilter.fieldExists(byte)ej.bluetooth.BluetoothScanFilter"/>
	<method name="ej.bluetooth.BluetoothScanFilter.fieldStartsWith(byte,byte[])ej.bluetooth.BluetoothScanFilter"/>
	<method name="ej.bluetooth.BluetoothScanFilter.noFilter()ej.bluetooth.BluetoothScanFilter"/>

	<type name="ej.bluetooth.BluetoothService"/>
	<method name="ej.bluetooth.BluetoothService.getCharacteristic(int)ej.bluetooth.BluetoothCharacteristic"/>
	<method name="ej.bluetooth.BluetoothService.getNumCharacteristics()int"/>
	<method name="ej.bluetooth.BluetoothService.getUuid()ej.bluetooth.BluetoothUuid"/>
	<method name="ej.bluetooth.BluetoothService.setLocalListener(ej.bluetooth.listeners.LocalServiceListener)void"/>
	<method name="ej.bluetooth.BluetoothService.setRemoteListener(ej.bluetooth.listeners.RemoteServiceListener)void"/>

	<type name="ej.bluetooth.BluetoothServiceDefinition"/>
	<method name="ej.bluetooth.BluetoothServiceDefinition.BluetoothServiceDefinition(ej.bluetooth.BluetoothUuid)void"/>
	<method name="ej.bluetooth.BluetoothServiceDefinition.addCharacteristic(ej.bluetooth.BluetoothUuid,int,int)void"/>
	<method name="ej.bluetooth.BluetoothServiceDefinition.addDescriptor(ej.bluetooth.BluetoothUuid,int)void"/>

	<type name="ej.bluetooth.BluetoothStatus"/>
	<field name="ej.bluetooth.BluetoothStatus.ATTRIBUTE_NOT_FOUND"/>
	<field name="ej.bluetooth.BluetoothStatus.ATTRIBUTE_NOT_LONG"/>
	<field name="ej.bluetooth.BluetoothStatus.CCC_DESCRIPTOR_IMPROPERLY_CONFIGURED"/>
	<field name="ej.bluetooth.BluetoothStatus.INSUFFICIENT_AUTHENTICATION"/>
	<field name="ej.bluetooth.BluetoothStatus.INSUFFICIENT_AUTHORIZATION"/>
	<field name="ej.bluetooth.BluetoothStatus.INSUFFICIENT_ENCRYPTION"/>
	<field name="ej.bluetooth.BluetoothStatus.INSUFFICIENT_KEY_SIZE"/>
	<field name="ej.bluetooth.BluetoothStatus.INSUFFICIENT_RESOURCES"/>
	<field name="ej.bluetooth.BluetoothStatus.INVALID_HANDLE"/>
	<field name="ej.bluetooth.BluetoothStatus.INVALID_OFFSET"/>
	<field name="ej.bluetooth.BluetoothStatus.INVALID_PDU"/>
	<field name="ej.bluetooth.BluetoothStatus.INVALID_VALUE_LENGTH"/>
	<field name="ej.bluetooth.BluetoothStatus.OK"/>
	<field name="ej.bluetooth.BluetoothStatus.OUT_OF_RANGE"/>
	<field name="ej.bluetooth.BluetoothStatus.PREPARE_QUEUE_FULL"/>
	<field name="ej.bluetooth.BluetoothStatus.PROCEDURE_ALREADY_IN_PROGRESS"/>
	<field name="ej.bluetooth.BluetoothStatus.READ_NOT_PERMITTED"/>
	<field name="ej.bluetooth.BluetoothStatus.REQUEST_NOT_SUPPORTED"/>
	<field name="ej.bluetooth.BluetoothStatus.UNLIKELY"/>
	<field name="ej.bluetooth.BluetoothStatus.UNSUPPORTED_GROUP_TYPE"/>
	<field name="ej.bluetooth.BluetoothStatus.WRITE_NOT_PERMITTED"/>
	<field name="ej.bluetooth.BluetoothStatus.WRITE_REQUEST_REJECTED"/>

	<type name="ej.bluetooth.BluetoothUuid"/>
	<method name="ej.bluetooth.BluetoothUuid.BluetoothUuid(byte[],int)void"/>
	<method name="ej.bluetooth.BluetoothUuid.BluetoothUuid(int)void"/>
	<method name="ej.bluetooth.BluetoothUuid.BluetoothUuid(java.lang.String)void"/>
	<method name="ej.bluetooth.BluetoothUuid.get16BitValue()short"/>
	<method name="ej.bluetooth.BluetoothUuid.getBytes(byte[],int)void"/>
	<method name="ej.bluetooth.BluetoothUuid.is16Bit()boolean"/>

	<type name="ej.bluetooth.listeners.ConnectionListener"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onAdvertisementCompleted()void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onConnectFailed(ej.bluetooth.BluetoothAddress)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onConnected(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onDisconnected(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onDiscoveryCompleted(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onDiscoveryResult(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothService)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onPairCompleted(ej.bluetooth.BluetoothConnection,boolean)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onPairRequest(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onPasskeyGenerated(ej.bluetooth.BluetoothConnection,int)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onPasskeyRequest(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onScanCompleted()void"/>
	<method name="ej.bluetooth.listeners.ConnectionListener.onScanResult(ej.bluetooth.BluetoothAddress,byte[],int)void"/>

	<type name="ej.bluetooth.listeners.LocalServiceListener"/>
	<method name="ej.bluetooth.listeners.LocalServiceListener.onExecuteWriteRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,boolean)void"/>
	<method name="ej.bluetooth.listeners.LocalServiceListener.onNotificationSent(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothCharacteristic,boolean)void"/>
	<method name="ej.bluetooth.listeners.LocalServiceListener.onPrepareWriteRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte[],int)void"/>
	<method name="ej.bluetooth.listeners.LocalServiceListener.onReadBlobRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,int)void"/>
	<method name="ej.bluetooth.listeners.LocalServiceListener.onReadRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute)void"/>
	<method name="ej.bluetooth.listeners.LocalServiceListener.onWriteRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte[])void"/>

	<type name="ej.bluetooth.listeners.RemoteServiceListener"/>
	<method name="ej.bluetooth.listeners.RemoteServiceListener.onNotificationReceived(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothCharacteristic,byte[])void"/>
	<method name="ej.bluetooth.listeners.RemoteServiceListener.onReadCompleted(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte,byte[])void"/>
	<method name="ej.bluetooth.listeners.RemoteServiceListener.onWriteCompleted(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte)void"/>

	<type name="ej.bluetooth.listeners.impl.DefaultConnectionListener"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.DefaultConnectionListener()void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onAdvertisementCompleted()void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onConnectFailed(ej.bluetooth.BluetoothAddress)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onConnected(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onDisconnected(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onDiscoveryCompleted(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onDiscoveryResult(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothService)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onPairCompleted(ej.bluetooth.BluetoothConnection,boolean)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onPairRequest(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onPasskeyGenerated(ej.bluetooth.BluetoothConnection,int)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onPasskeyRequest(ej.bluetooth.BluetoothConnection)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onScanCompleted()void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultConnectionListener.onScanResult(ej.bluetooth.BluetoothAddress,byte[],int)void"/>

	<type name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener"/>
	<method name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener.DefaultLocalServiceListener()void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener.onExecuteWriteRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,boolean)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener.onNotificationSent(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothCharacteristic,boolean)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener.onPrepareWriteRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte[],int)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener.onReadBlobRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,int)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener.onReadRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute)void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultLocalServiceListener.onWriteRequest(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte[])void"/>

	<type name="ej.bluetooth.listeners.impl.DefaultRemoteServiceListener"/>
	<method name="ej.bluetooth.listeners.impl.DefaultRemoteServiceListener.DefaultRemoteServiceListener()void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultRemoteServiceListener.onNotificationReceived(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothCharacteristic,byte[])void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultRemoteServiceListener.onReadCompleted(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte,byte[])void"/>
	<method name="ej.bluetooth.listeners.impl.DefaultRemoteServiceListener.onWriteCompleted(ej.bluetooth.BluetoothConnection,ej.bluetooth.BluetoothAttribute,byte)void"/>

</require>
