summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2015-08-09 15:26:50 +0200
committerFrederik Gladhorn <frederik.gladhorn@theqtcompany.com>2015-08-09 15:26:50 +0200
commit7d75db90cc22ca02a30b1c15e7c684ff0b4f6d5f (patch)
treed1386f720c4fe985c05ce11b6e55dcd54c5af86f
parent03dec8534776881d6a0f03f3e468efe5e805de6a (diff)
parentadfed1222fbe73267f4a3be149d9acff158ddfa1 (diff)
Merge remote-tracking branch 'origin/5.5' into dev
-rw-r--r--src/bluetooth/qlowenergycontroller_bluez.cpp5
-rw-r--r--src/bluetooth/qlowenergycontroller_p.h2
-rw-r--r--src/tools/sdpscanner/main.cpp34
3 files changed, 34 insertions, 7 deletions
diff --git a/src/bluetooth/qlowenergycontroller_bluez.cpp b/src/bluetooth/qlowenergycontroller_bluez.cpp
index bb490ba9..8906eb06 100644
--- a/src/bluetooth/qlowenergycontroller_bluez.cpp
+++ b/src/bluetooth/qlowenergycontroller_bluez.cpp
@@ -478,7 +478,7 @@ QLowEnergyHandle parseReadByTypeCharDiscovery(
QLowEnergyHandle attributeHandle = bt_get_le16(&data[0]);
charData->properties =
- (QLowEnergyCharacteristic::PropertyTypes)data[2];
+ (QLowEnergyCharacteristic::PropertyTypes)(data[2] & 0xff);
charData->valueHandle = bt_get_le16(&data[3]);
if (elementLength == 7) // 16 bit uuid
@@ -672,6 +672,7 @@ void QLowEnergyControllerPrivate::processReply(
lastHandle = parseReadByTypeCharDiscovery(
&characteristic, &data[offset], elementLength);
p->characteristicList[lastHandle] = characteristic;
+ offset += elementLength;
} else if (attributeType == GATT_INCLUDED_SERVICE) {
QList<QBluetoothUuid> includedServices;
lastHandle = parseReadByTypeIncludeDiscovery(
@@ -1222,7 +1223,7 @@ void QLowEnergyControllerPrivate::readServiceValues(
starting the next read request.
*/
void QLowEnergyControllerPrivate::readServiceValuesByOffset(
- quint16 handleData, quint16 offset, bool isLastValue)
+ uint handleData, quint16 offset, bool isLastValue)
{
const QLowEnergyHandle charHandle = (handleData & 0xffff);
const QLowEnergyHandle descriptorHandle = ((handleData >> 16) & 0xffff);
diff --git a/src/bluetooth/qlowenergycontroller_p.h b/src/bluetooth/qlowenergycontroller_p.h
index bb26a538..810f0ff4 100644
--- a/src/bluetooth/qlowenergycontroller_p.h
+++ b/src/bluetooth/qlowenergycontroller_p.h
@@ -173,7 +173,7 @@ private:
void sendReadValueRequest(QLowEnergyHandle attributeHandle, bool isDescriptor);
void readServiceValues(const QBluetoothUuid &service,
bool readCharacteristics);
- void readServiceValuesByOffset(quint16 handleData, quint16 offset,
+ void readServiceValuesByOffset(uint handleData, quint16 offset,
bool isLastValue);
void discoverServiceDescriptors(const QBluetoothUuid &serviceUuid);
diff --git a/src/tools/sdpscanner/main.cpp b/src/tools/sdpscanner/main.cpp
index 1efb6de2..50870651 100644
--- a/src/tools/sdpscanner/main.cpp
+++ b/src/tools/sdpscanner/main.cpp
@@ -46,9 +46,11 @@
void usage()
{
fprintf(stderr, "Usage:\n");
- fprintf(stderr, "\tsdpscanner <remote bdaddr> <local bdaddr>\n\n");
+ fprintf(stderr, "\tsdpscanner <remote bdaddr> <local bdaddr> [Options]\n\n");
fprintf(stderr, "Performs an SDP scan on remote device, using the SDP server\n"
- "represented by the local Bluetooth device.\n");
+ "represented by the local Bluetooth device.\n\n"
+ "Options:\n"
+ " -p Show scan results in human-readable form\n");
}
#define BUFFER_SIZE 1024
@@ -245,7 +247,7 @@ QByteArray parseSdpRecord(sdp_record_t *record)
int main(int argc, char **argv)
{
- if (argc != 3) {
+ if (argc < 3) {
usage();
return RETURN_USAGE;
}
@@ -266,6 +268,27 @@ int main(int argc, char **argv)
return RETURN_INVALPARAM;
}
+ bool showHumanReadable = false;
+
+ for (int i = 3; i < argc; i++) {
+ if (argv[i][0] != '-') {
+ usage();
+ return RETURN_USAGE;
+ }
+
+ switch (argv[i][1])
+ {
+ case 'p':
+ showHumanReadable = true;
+ break;
+ default:
+ fprintf(stderr, "Wrong argument: %s\n", argv[i]);
+ usage();
+ return RETURN_USAGE;
+
+ }
+ }
+
sdp_session_t *session = sdp_connect( &local, &remote, SDP_RETRY_IF_BUSY);
if (!session) {
//try one more time if first time failed
@@ -314,7 +337,10 @@ int main(int argc, char **argv)
}
if (!total.isEmpty()) {
- printf("%s", total.toBase64().constData());
+ if (showHumanReadable)
+ printf("%s", total.constData());
+ else
+ printf("%s", total.toBase64().constData());
}
sdp_close(session);