| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |\ \ \
| | | | |
| | | | |
| | | | | |
Change-Id: I83175151c0eef1a11d2f21648cc04c86e46777c1
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This change enables the optional use of the Win32-based Bluetooth
backend on Windows. By default, the WinRT backend is used, if
supported by the platform. The use of the Win32 backend must be
selected by the -native-win32-bluetooth configuration option.
Task-number: QTBUG-40698
Change-Id: I6904bf077467d826e3ff5ad026ebae5f955f2e37
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Silence a couple of type of warnings:
1)
warning: missing initializer for member '_BLUETOOTH_DEVICE_INFO::Address'
[-Wmissing-field-initializers]
BLUETOOTH_DEVICE_INFO deviceInfo = {0};
Unlike C, C++ is not happy about this type of initializer
Use '{}' instead to init all members to zero or 'NULL' properly.
2)
warning: comparison between signed and unsigned integer expressions
[-Wsign-compare]
if (socket != INVALID_SOCKET) {
'socket' is defined as 'int', while 'INVALID_SOCKET' is derived from
'SOCKET' which is of type UINT. Cast 'socket' to 'SOCKET' before
performing the comparison.
Change-Id: I9fcbff1c60ae36b8a8fed63382a8ffc0157f4923
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| |\ \ \ \
| | | | | |
| | | | | |
| | | | | | |
Change-Id: I3402f42380068e3e6e7b3df8b15a712f0d86a3cd
|
| |\ \ \ \ \
| | | | | | |
| | | | | | |
| | | | | | | |
Change-Id: Ie99a67b63f8259227f42f5b464c6bbc16e79313b
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
The import of "WinSock2.h" fails on MXE environments because cross
building from Linux to Windows makes it so that the filesystem
is case sensitive.
Change-Id: I6d89530f430eb45bf07154cffb5938eb3761ee1e
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Recently, a problem was discovered that adding event registration
on a descriptor does not work because the associated service handle
is closed right after. For events to work a service should remain
open if an event is registered for it.
Store service handles (hService) is QLowEnergyServicePrivate.
A handle is opened by
QLowEnergyControllerPrivateWin32::discoverServiceDetails()
and remains open until the device is disconnected.
This removes the need to open/close services each time a Write/Read
operation is performed on GATT characteristics / descriptors.
Move the creation of the worker thread to connectToDevice().
Quit the thread in disconnectFromDevice() and also close any
open service handles.
Change-Id: Ia634af2e4225f5c1be93b0ddd17639c2dbd70c21
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Change-Id: Ib2b33490694c8608edda3eb0cbe7b8d0dd233254
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
Change-Id: If3fc4e1078c63d7ca2af0e79353a62b9a9bb0c6f
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| |\ \ \ \ \ \
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Change-Id: Ia5d83a88d6231984d9745d1c64f03553499a5882
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
by migrating to templated QMetaObject::invokeMethod
Change-Id: I79e2dec7aa81987894a26859648d31da60cf47ee
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
remove calls to WSACleanup, because it terminates use
of the Winsock 2 DLL, including sockets operations.
WSALookupServiceEnd only is needed.
add missing WSALookupServiceEnd if pendingStop or error
remove useless parameters of findFirst/NextService
Change-Id: I587987b77c1be8f05a840e4333c31fd79af06ed3
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
QVERIFY(discoveryAgent.errorString().isEmpty()) was failing
Change-Id: I7b45db5b1af1ee3da75569d8855487c771cb29ed
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
arguments pass by ref
NULL and 0 replaced with nullptr
::ZeroMemory replaced by default initialization
range based for loop
Change-Id: I393806f19155ee31e4ebe7f33ce22e9d14eafe40
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Introduce usage of QThread for service discovery instead of
QFuture.
Details:
- Make _q_nextSdpScan() accept arguments.
- Make QBluetoothServiceDiscoveryAgentPrivate inherit
QObject for QT_WIN_BLUETOOTH.
- Remove usage of the member variables 'systemError', 'hSearch'.
Pass values around, instead.
- Add the helper structs 'FindServiceArguments' and 'FindServiceResult'.
Change-Id: I4e2178b2a7b333c30a235a02807dd64526db4685
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Introduce a couple of QThread instances and workers for
the Bluetooth Classic and BLE device discovery.
Replaces the usage of QFuture for this file.
Remove includes of QtConcurrent.
This introduced some errors which are solved by including:
- QLoggingCategory in qbluetoothdevicediscoveryagent_win.cpp
- QDataStream and QCoreApplication in qlowenergycontroller_win.cpp
Change-Id: Iba2cbc147c714ae87515294d50cb4e502edd00a7
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Change-Id: If20574e7bc182e5ee3d5adf6cc6d63cf9ee9d0ef
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Add support for the ThreadWorkerJob type ReadDesc
in QLowEnergyControllerPrivateWin32.
This type of job is responsible for reading GATT descriptors
in a separate thread using the previously implemented
ThreadWorkerJob scheme:
- ThreadWorker::runPendingJob()
- QLowEnergyControllerPrivateWin32::jobFinished()
The blocking function in this case is getGattDescriptorValue().
Change-Id: I19298323f8ebc630b4dc34ae2e71c7e3c603beae
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Add support for the ThreadWorkerJob type WriteDesc
in QLowEnergyControllerPrivateWin32.
This type of job is responsible for writing GATT descriptors
in a separate thread using the previously implemented
ThreadWorkerJob scheme:
- ThreadWorker::runPendingJob()
- QLowEnergyControllerPrivateWin32::jobFinished()
The blocking function in this case is setGattDescriptorValue().
Change-Id: Ib221862d50cdbe5af951d4ad82850bea4f9a6645
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Add support for the ThreadWorkerJob type ReadChar
in QLowEnergyControllerPrivateWin32.
This type of job is responsible for reading GATT characteristics
in a separate thread using the previously implemented
ThreadWorkerJob scheme:
- ThreadWorker::runPendingJob()
- QLowEnergyControllerPrivateWin32::jobFinished()
The blocking function in this case is getGattCharacteristicValue().
Change-Id: Idc87267a44aab51febae4addaca4b61d7e582a8a
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Create a re-usable thread ('thread') and worker ('treadWorker')
in QLowEnergyControllerPrivateWin32 that have the same lifespan
as the controller object.
Add "job" support (ThreadWorkerJob) for the thread so that jobs
are scheduled and executed sequentially.
Each job should have a data struct. For writing that is
WriteCharData.
Handle writing of characteristics in:
QLowEnergyControllerPrivateWin32::writeCharacteristic()
QLowEnergyControllerPrivateWin32::jobFinished()
ThreadWorker::runPendingJob()
The above jobFinished() and runPendingJob() use a `switch`
to determine the ThreadWorkerJob type.
Change-Id: I3331e0d4adc29565a88fd792f9a54833881ea694
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
getDeviceAddress() does not work for all path cases, thus
instead of using:
firstbound = servicePath.indexOf(...)
use:
firstbound = servicePath.lastIndexOf(...)
Example path that breaks the current code:
"\\\\?\\bthledevice#{00001800-0000-1000-8000-00805f9b34fb}_dev_vid&01008f_pid&b00d_rev&0100_00802534ce0e#8&5481851&5&0001#{00001800-0000-1000-8000-00805f9b34fb}"
The current code works with paths of this format:
"\\\\?\\BTHLEDevice#{00001800-0000-1000-8000-00805f9b34fb}_7c669d8a6d7a#8&35290589&1&0001#{00001800-0000-1000-8000-00805f9b34fb}"
Notice that there are more than one "_" in the path that breaks.
Change-Id: I5f081b78d8f5bc5693ba05c8e73d4dcf0b42b6b2
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Fix strange bug in getServiceSystemPath() where after the
first call to SetupDiGetDeviceInterfaceDetail(), GetLastError()
returns 0 instead of ERROR_INSUFFICIENT_BUFFER (122).
A fix is to use a `const DWORD` for the error immediately after
the SetupDiGetDeviceInterfaceDetail() call. Possibly a compiler
issue.
Target toolchain is:
gcc version 5.3.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project)
Change-Id: Id197201e9e161f7240c339231990196f58cb87eb
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
... that simplified a code a bit.
Change-Id: Ice7d082f005bfc36e86909784fb6fe38c6f6811f
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
The GetLastError() function always returns the NO_ERROR code
when any of the BluetoothGATTXXX() function fails. The reason
is that the BluetoothGATTXXX() function uses the COM API, but
the GetLastError() function uses the WIN32 API.
We need to convert the HRESULT error code to the WIN32 error
code directly, using a macro such as WIN32_FROM_HRESULT.
Note: At least, it is reproduced with
BluetoothGATTSetCharacteristicValue() function on Windows 10.
Change-Id: I548e90bb16647c885b06c32397c277255fd362f4
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Lubomir I. Ivanov <neolit123@gmail.com>
|
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | | |
Change-Id: Iec42df246c5faec4260bbeb0dbf806477530d30f
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| |\ \ \ \ \ \ \
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
Change-Id: I4e86dcfe5088b0bd5087de309c435250c76d4718
|
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | | |
Without this warning the build would not succeed.
Change-Id: Ie43c494d80db2dfffa1f45c8896d996928678df0
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| |\ \ \ \ \ \ \ \
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | | |
Change-Id: I3a3557c6b8d565322358825d4b07c61cf6b97c9f
|
| |\ \ \ \ \ \ \ \ \
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
refs/staging/wip/win
|
| | |\ \ \ \ \ \ \ \ \
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | | |
Change-Id: I28ee9f95cc0fb85a36b5bd7b2ad87e0179446995
|
| |/ / / / / / / / / /
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Change-Id: Idfc9f44cd9ab6064448804ed3a5d9fb81e644281
Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
... where now we use std::find_if algorithm instead of indexed
container enumeration.
Change-Id: I081dcc92e7b6c1d7a160e62d32ba2cc1182cf43a
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Devices discovery was broken due to merging from 5.9 branch. Where were
introduced new QBluetoothDeviceDiscoveryAgent::DiscoveryMethods feature.
But now, this code is refactored and adjusted in completelly asynchronous
manner.
Change-Id: I9b7c4cbe27066ed05d1ed4546f71ea559544f6f5
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Sometimes are possible a situations when triggered event callback function
contains a pointer with a context of unexistent controller's object (f.e.
this controller can be already deleted). That causes a crash at trying to
access by this pointer.
Solution is to append a pointer of each created object (or to remove a
pointer of each destroyed object) to (from) some guarded vector of pointers.
And then to check every received context with pointers inside of this vector.
If a context does not contains in a vector, then skip any actions with this
context.
Change-Id: I94e237c41028724307f58bb09235299eae15d6b5
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
We need to check on a device address from the returned system path
and to return matched path. Otherwise always returns a first found
system path for devices with same service UUID.
Change-Id: Iccfae4d7b19451b4fa19fce9bbd1ab9b749cd5bb
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Change-Id: Ib702e7aa95a26212e1713b514adb5e6c81e9bbd7
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Change-Id: I872e7d6bc4371beed0b80eb1ebb374d2c48c9167
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Change-Id: If735ef8abf793fed46c43f692d413e76013a899e
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Change-Id: I7010ff54a146a9d70029e2607b415e0e1dcc1d78
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Change-Id: I53af8c2a5dc848d1f90221d036c59f17c44921dc
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
Change-Id: I402b856be06db0e55ec2efb21fc6cb8f35e57a0c
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
|
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | | |
.. that allows to pass the tst_discoveryTimeout() test.
Change-Id: I1af53c8186151fcb6017b07b28f4b8355d91d072
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
| |\ \ \ \ \ \ \ \ \ \
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | | |
Change-Id: Ia247c260a9fa27df79d18e5397eba5918d626684
|
| |\ \ \ \ \ \ \ \ \ \ \
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Change-Id: I6acdeda9ec2a69d237e49c8ee53fde4e8696d19e
|
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Change-Id: I4f2194501f652c38cff43ac1716a5853cd1e1b13
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
|
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Change-Id: I77811a65b530c8994b622d4d18718c50ec629684
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@theqtcompany.com>
|
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Also is supported the notification when characteristic
value changes.
Change-Id: Ic50ea7e6bf53db60180cbe2fcd72439b048747ef
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
|
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Based on previous change by Philip Schuchardt
Change-Id: If27e1fce63f2a832d19965219f1a5567f76ab770
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
|
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | | |
Change-Id: I03f02c376f2cd9e83b7e2559c2becb80ff307435
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
|