linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Optimize tracker queries for PBAP
@ 2010-12-02 16:02 Radoslaw Jablonski
  2010-12-02 16:22 ` Johan Hedberg
  0 siblings, 1 reply; 7+ messages in thread
From: Radoslaw Jablonski @ 2010-12-02 16:02 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Radoslaw Jablonski

Now data from tracker is fetched without redundand fields. Also
determining which type has phone, address and email (work or home) is
done in backend code - no tracker sub-query is used for that case. Now
queries are about 6 times faster for any amount of data( call history
queries, which were heavy loaded with OPTIONAL sub-queries are even 10
times faster than before)
---
 plugins/phonebook-tracker.c |  514 ++++++++++++++-----------------------------
 1 files changed, 166 insertions(+), 348 deletions(-)

diff --git a/plugins/phonebook-tracker.c b/plugins/phonebook-tracker.c
index a6b9e72..cdc1008 100644
--- a/plugins/phonebook-tracker.c
+++ b/plugins/phonebook-tracker.c
@@ -43,30 +43,32 @@
 #define TRACKER_RESOURCES_INTERFACE "org.freedesktop.Tracker1.Resources"
 
 #define TRACKER_DEFAULT_CONTACT_ME "http://www.semanticdesktop.org/ontologies/2007/03/22/nco#default-contact-me"
+#define AFFILATION_HOME "Home"
+#define AFFILATION_WORK "Work"
 #define ADDR_FIELD_AMOUNT 7
-#define PULL_QUERY_COL_AMOUNT 48
+#define PULL_QUERY_COL_AMOUNT 40
 #define COUNT_QUERY_COL_AMOUNT 1
 
-#define COL_HOME_NUMBER 0
+#define COL_PHONE_NUMBER 0
 #define COL_FULL_NAME 1
 #define COL_FAMILY_NAME 2
 #define COL_GIVEN_NAME 3
 #define COL_ADDITIONAL_NAME 4
 #define COL_NAME_PREFIX 5
 #define COL_NAME_SUFFIX 6
-#define COL_HOME_EMAIL 7
-#define COL_WORK_NUMBER 8
+#define COL_EMAIL 7
+#define COL_CELL_NUMBER 8
 
-#define COL_HOME_ADDR_POBOX 9
-#define COL_HOME_ADDR_EXT 10
-#define COL_HOME_ADDR_STREET 11
-#define COL_HOME_ADDR_LOCALITY 12
-#define COL_HOME_ADDR_REGION 13
-#define COL_HOME_ADDR_CODE 14
-#define COL_HOME_ADDR_COUNTRY 15
+#define COL_ADDR_POBOX 9
+#define COL_ADDR_EXT 10
+#define COL_ADDR_STREET 11
+#define COL_ADDR_LOCALITY 12
+#define COL_ADDR_REGION 13
+#define COL_ADDR_CODE 14
+#define COL_ADDR_COUNTRY 15
 
 #define COL_FAX_NUMBER 16
-#define COL_WORK_EMAIL 17
+#define COL_AFF_TYPE 17
 #define COL_BIRTH_DATE 18
 #define COL_NICKNAME 19
 #define COL_URL 20
@@ -76,51 +78,39 @@
 #define COL_ORG_DEPARTMENT 23
 #define COL_ORG_ROLE 24
 
-#define COL_WORK_ADDR_POBOX 25
-#define COL_WORK_ADDR_EXT 26
-#define COL_WORK_ADDR_STREET 27
-#define COL_WORK_ADDR_LOCALITY 28
-#define COL_WORK_ADDR_REGION 29
-#define COL_WORK_ADDR_CODE 30
-#define COL_WORK_ADDR_COUNTRY 31
-
-#define COL_UID 32
-#define COL_TITLE 33
-#define COL_OTHER_NUMBER 34
-
-#define COL_OTHER_ADDR_POBOX 35
-#define COL_OTHER_ADDR_EXT 36
-#define COL_OTHER_ADDR_STREET 37
-#define COL_OTHER_ADDR_LOCALITY 38
-#define COL_OTHER_ADDR_REGION 39
-#define COL_OTHER_ADDR_CODE 40
-#define COL_OTHER_ADDR_COUNTRY 41
-
-#define COL_OTHER_EMAIL 42
-#define COL_CELL_NUMBER 43
-#define COL_DATE 44
-#define COL_SENT 45
-#define COL_ANSWERED 46
-#define CONTACTS_ID_COL 47
+#define COL_UID 25
+#define COL_TITLE 26
+#define COL_OTHER_NUMBER 27
+
+#define COL_OTHER_ADDR_POBOX 28
+#define COL_OTHER_ADDR_EXT 29
+#define COL_OTHER_ADDR_STREET 30
+#define COL_OTHER_ADDR_LOCALITY 31
+#define COL_OTHER_ADDR_REGION 32
+#define COL_OTHER_ADDR_CODE 33
+#define COL_OTHER_ADDR_COUNTRY 34
+
+#define COL_OTHER_EMAIL 35
+#define COL_DATE 36
+#define COL_SENT 37
+#define COL_ANSWERED 38
+#define CONTACTS_ID_COL 39
 #define CONTACT_ID_PREFIX "contact:"
 
 #define CONTACTS_QUERY_ALL						\
 	"SELECT nco:phoneNumber(?v) nco:fullname(?c) "			\
 	"nco:nameFamily(?c) nco:nameGiven(?c) "				\
 	"nco:nameAdditional(?c) nco:nameHonorificPrefix(?c) "		\
-	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) "		\
-	"nco:phoneNumber(?w) nco:pobox(?p) nco:extendedAddress(?p) "	\
+	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) ?vc "		\
+	"nco:pobox(?p) nco:extendedAddress(?p) "			\
 	"nco:streetAddress(?p) nco:locality(?p) nco:region(?p) "	\
-	"nco:postalcode(?p) nco:country(?p) ?f nco:emailAddress(?ew) "	\
+	"nco:postalcode(?p) nco:country(?p) ?f ?affType "		\
 	"nco:birthDate(?c) nco:nickname(?c) nco:url(?c) "		\
 	"?file nco:fullname(?o) nco:department(?a) "			\
-	"nco:role(?a) nco:pobox(?pw) nco:extendedAddress(?pw) "		\
-	"nco:streetAddress(?pw) nco:locality(?pw) nco:region(?pw) "	\
-	"nco:postalcode(?pw) nco:country(?pw) nco:contactUID(?c) "	\
+	"nco:role(?a) nco:contactUID(?c) "				\
 	"nco:title(?a) ?t nco:pobox(?po) nco:extendedAddress(?po) "	\
 	"nco:streetAddress(?po) nco:locality(?po) nco:region(?po) "	\
-        "nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
-	"?vc "								\
+	"nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
 	"\"NOTACALL\" \"false\" \"false\" ?c "				\
 	"WHERE { "							\
 		"?c a nco:PersonContact . "				\
@@ -144,16 +134,10 @@
 	"}"								\
 	"OPTIONAL { "							\
 		"?c nco:hasAffiliation ?a . "				\
-		"OPTIONAL { ?a rdfs:label \"Work\" . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"OPTIONAL { ?a nco:hasPhoneNumber ?w . } "	\
-		"}"							\
-		"OPTIONAL { ?a rdfs:label \"Home\" . "			\
+		"OPTIONAL { ?a rdfs:label ?affType .}"			\
 			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
 			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
 			"OPTIONAL { ?a nco:hasPhoneNumber ?v . } "	\
-		"}"							\
 		"OPTIONAL { ?a nco:org ?o . } "				\
 	"} "								\
 	"OPTIONAL { ?c nco:hasPostalAddress ?po . } "			\
@@ -175,22 +159,19 @@
 	"} GROUP BY ?c"
 
 #define MISSED_CALLS_QUERY						\
-	"SELECT ?h nco:fullname(?c) "					\
+	"SELECT nco:phoneNumber(?ap) nco:fullname(?c) "			\
 	"nco:nameFamily(?c) nco:nameGiven(?c) "				\
 	"nco:nameAdditional(?c) nco:nameHonorificPrefix(?c) "		\
-	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) "		\
-	"?w nco:pobox(?p) nco:extendedAddress(?p) "			\
+	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) ?vc "		\
+	"nco:pobox(?p) nco:extendedAddress(?p) "			\
 	"nco:streetAddress(?p) nco:locality(?p) nco:region(?p) "	\
-	"nco:postalcode(?p) nco:country(?p) \"\" nco:emailAddress(?ew) "\
+	"nco:postalcode(?p) nco:country(?p) \"\" ?affType "		\
 	"nco:birthDate(?c) nco:nickname(?c) nco:url(?c) "		\
 	"?file nco:fullname(?o) nco:department(?a) "			\
-	"nco:role(?a) nco:pobox(?pw) nco:extendedAddress(?pw) "		\
-	"nco:streetAddress(?pw) nco:locality(?pw) nco:region(?pw) "	\
-	"nco:postalcode(?pw) nco:country(?pw) nco:contactUID(?c) "	\
-	"?title nco:phoneNumber(?t) nco:pobox(?po) "			\
-	"nco:extendedAddress(?po) nco:streetAddress(?po) "		\
-	"nco:locality(?po) nco:region(?po) nco:postalcode(?po) "	\
-	"nco:country(?po) nco:emailAddress(?eo) ?vc "			\
+	"nco:role(?a) nco:contactUID(?c) "				\
+	"nco:title(?a) nco:phoneNumber(?t) nco:pobox(?po) nco:extendedAddress(?po) "	\
+	"nco:streetAddress(?po) nco:locality(?po) nco:region(?po) "	\
+	"nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
 	"nmo:receivedDate(?call) "					\
 	"nmo:isSent(?call) nmo:isAnswered(?call) ?x "			\
 	"WHERE { "							\
@@ -215,63 +196,30 @@
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 		"OPTIONAL { "						\
 			"?c nco:hasAffiliation ?a . "			\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Work\" . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
 			"OPTIONAL { ?a nco:title ?title } "		\
-			"}"						\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Home\" . "			\
 			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
 			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"} "						\
 			"OPTIONAL { ?a nco:org ?o . } "			\
 		"} "							\
 	"} UNION { "							\
 		"?x a nco:Contact . "					\
-		"?x nco:hasPhoneNumber ?tmp . "				\
+		"?x nco:hasPhoneNumber ?ap . "				\
 		"?call a nmo:Call ; "					\
 		"nmo:from ?x ; "					\
 		"nmo:isSent false ; "					\
 		"nmo:isAnswered false . "				\
 		"?c a nco:PersonContact . "				\
 		"?c nco:hasAffiliation ?a . "				\
-		"?a nco:hasPhoneNumber ?tmp . "				\
+		"?a nco:hasPhoneNumber ?ap . "				\
 		"OPTIONAL { "						\
 			"?c a nco:PersonContact ; nco:photo ?pht . "	\
 			"?pht a nfo:FileDataObject ; nie:url ?file . "	\
 		"} "							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Work\" . "			\
-			"?tmp nco:phoneNumber ?w . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"OPTIONAL { ?a nco:title ?title } "		\
-			"{ "						\
-			"SELECT ?p ?e ?c WHERE { "			\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Home\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL {?b nco:hasPostalAddress ?p . }}} "	\
-			"} "						\
-		"}"							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Home\" . "			\
-			"?tmp nco:phoneNumber ?h . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"{ "						\
-			"SELECT ?pw ?ew ?title ?c WHERE { "		\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Work\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL {?b nco:title ?title } "		\
-			"OPTIONAL {?b nco:hasPostalAddress ?pw . }}} "	\
-			"} "						\
-		"}"							\
+		"OPTIONAL {?a rdfs:label ?affType . }"			\
+		"OPTIONAL {?a nco:hasEmailAddress ?e . } "		\
+		"OPTIONAL {?a nco:hasPostalAddress ?p . }"		\
+		"OPTIONAL { ?a nco:org ?o . } "				\
+		"OPTIONAL { ?a nco:title ?title } "			\
 		"OPTIONAL { ?c nco:hasPostalAddress ?po . } "		\
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 	"} UNION { "							\
@@ -327,22 +275,20 @@
 	"} GROUP BY ?call ORDER BY DESC(nmo:receivedDate(?call))"
 
 #define INCOMING_CALLS_QUERY						\
-	"SELECT ?h nco:fullname(?c) "					\
+	"SELECT nco:phoneNumber(?ap) nco:fullname(?c) "			\
 	"nco:nameFamily(?c) nco:nameGiven(?c) "				\
 	"nco:nameAdditional(?c) nco:nameHonorificPrefix(?c) "		\
-	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) "		\
-	"?w nco:pobox(?p) nco:extendedAddress(?p) "			\
+	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) ?vc "		\
+	"nco:pobox(?p) nco:extendedAddress(?p) "			\
 	"nco:streetAddress(?p) nco:locality(?p) nco:region(?p) "	\
-	"nco:postalcode(?p) nco:country(?p) \"\" nco:emailAddress(?ew) "\
+	"nco:postalcode(?p) nco:country(?p) \"\" ?affType "		\
 	"nco:birthDate(?c) nco:nickname(?c) nco:url(?c) "		\
 	"?file nco:fullname(?o) nco:department(?a) "			\
-	"nco:role(?a) nco:pobox(?pw) nco:extendedAddress(?pw) "		\
-	"nco:streetAddress(?pw) nco:locality(?pw) nco:region(?pw) "	\
-	"nco:postalcode(?pw) nco:country(?pw) nco:contactUID(?c) "	\
-	"?title nco:phoneNumber(?t) nco:pobox(?po) "			\
-	"nco:extendedAddress(?po) nco:streetAddress(?po) "		\
-	"nco:locality(?po) nco:region(?po) nco:postalcode(?po) "	\
-	"nco:country(?po) nco:emailAddress(?eo) ?vc "			\
+	"nco:role(?a) nco:contactUID(?c) "				\
+	"nco:title(?a) nco:phoneNumber(?t) nco:pobox(?po) "		\
+	"nco:extendedAddress(?po) "					\
+	"nco:streetAddress(?po) nco:locality(?po) nco:region(?po) "	\
+	"nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
 	"nmo:receivedDate(?call) "					\
 	"nmo:isSent(?call) nmo:isAnswered(?call) ?x "			\
 	"WHERE { "							\
@@ -367,63 +313,30 @@
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 		"OPTIONAL { "						\
 			"?c nco:hasAffiliation ?a . "			\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Work\" . "			\
 			"OPTIONAL { ?a nco:title ?title } "		\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"}"						\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Home\" . "			\
 			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
 			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"} "						\
 			"OPTIONAL { ?a nco:org ?o . } "			\
 		"} "							\
 	"} UNION { "							\
 		"?x a nco:Contact . "					\
-		"?x nco:hasPhoneNumber ?tmp . "				\
+		"?x nco:hasPhoneNumber ?ap . "				\
 		"?call a nmo:Call ; "					\
 		"nmo:from ?x ; "					\
 		"nmo:isSent false ; "					\
 		"nmo:isAnswered true . "				\
 		"?c a nco:PersonContact . "				\
 		"?c nco:hasAffiliation ?a . "				\
-		"?a nco:hasPhoneNumber ?tmp . "				\
+		"?a nco:hasPhoneNumber ?ap . "				\
 		"OPTIONAL { "						\
 			"?c a nco:PersonContact ; nco:photo ?pht . "	\
 			"?pht a nfo:FileDataObject ; nie:url ?file . "	\
 		"} "							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Work\" . "			\
-			"?tmp nco:phoneNumber ?w . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"OPTIONAL { ?a nco:title ?title } "		\
-			"{ "						\
-			"SELECT ?p ?e ?c WHERE { "			\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Home\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL {?b nco:hasPostalAddress ?p . }}} "	\
-			"} "						\
-		"}"							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Home\" . "			\
-			"?tmp nco:phoneNumber ?h . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"{ "						\
-			"SELECT ?pw ?ew ?title ?c WHERE { "		\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Work\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL {?b nco:title ?title } "		\
-			"OPTIONAL {?b nco:hasPostalAddress ?pw . }}} "	\
-			"} "						\
-		"}"							\
+		"OPTIONAL {?a rdfs:label ?affType . }"			\
+		"OPTIONAL {?a nco:hasEmailAddress ?e . } "		\
+		"OPTIONAL {?a nco:hasPostalAddress ?p . }"		\
+		"OPTIONAL { ?a nco:org ?o . } "				\
+		"OPTIONAL { ?a nco:title ?title } "			\
 		"OPTIONAL { ?c nco:hasPostalAddress ?po . } "		\
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 	"} UNION { "							\
@@ -478,22 +391,20 @@
 	"} GROUP BY ?call ORDER BY DESC(nmo:receivedDate(?call))"
 
 #define OUTGOING_CALLS_QUERY						\
-	"SELECT ?h nco:fullname(?c) "					\
+	"SELECT nco:phoneNumber(?ap) nco:fullname(?c) "			\
 	"nco:nameFamily(?c) nco:nameGiven(?c) "				\
 	"nco:nameAdditional(?c) nco:nameHonorificPrefix(?c) "		\
-	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) "		\
-	"?w nco:pobox(?p) nco:extendedAddress(?p) "			\
+	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) ?vc "		\
+	"nco:pobox(?p) nco:extendedAddress(?p) "			\
 	"nco:streetAddress(?p) nco:locality(?p) nco:region(?p) "	\
-	"nco:postalcode(?p) nco:country(?p) \"\" nco:emailAddress(?ew) "\
+	"nco:postalcode(?p) nco:country(?p) \"\" ?affType "		\
 	"nco:birthDate(?c) nco:nickname(?c) nco:url(?c) "		\
 	"?file nco:fullname(?o) nco:department(?a) "			\
-	"nco:role(?a) nco:pobox(?pw) nco:extendedAddress(?pw) "		\
-	"nco:streetAddress(?pw) nco:locality(?pw) nco:region(?pw) "	\
-	"nco:postalcode(?pw) nco:country(?pw) nco:contactUID(?c) "	\
-	"?title nco:phoneNumber(?t) nco:pobox(?po) "			\
-	"nco:extendedAddress(?po) nco:streetAddress(?po) "		\
-	"nco:locality(?po) nco:region(?po) nco:postalcode(?po) "	\
-	"nco:country(?po) nco:emailAddress(?eo) ?vc "			\
+	"nco:role(?a) nco:contactUID(?c) "				\
+	"nco:title(?a) nco:phoneNumber(?t) nco:pobox(?po) "		\
+	"nco:extendedAddress(?po) "					\
+	"nco:streetAddress(?po) nco:locality(?po) nco:region(?po) "	\
+	"nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
 	"nmo:receivedDate(?call) "					\
 	"nmo:isSent(?call) nmo:isAnswered(?call) ?x "			\
 	"WHERE { "							\
@@ -517,62 +428,29 @@
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 		"OPTIONAL { "						\
 			"?c nco:hasAffiliation ?a . "			\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Work\" . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
 			"OPTIONAL { ?a nco:title ?title } "		\
-			"}"						\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Home\" . "			\
 			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
 			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"} "						\
 			"OPTIONAL { ?a nco:org ?o . } "			\
 		"} "							\
 	"} UNION { "							\
 		"?x a nco:Contact . "					\
-		"?x nco:hasPhoneNumber ?tmp . "				\
+		"?x nco:hasPhoneNumber ?ap . "				\
 		"?call a nmo:Call ; "					\
 		"nmo:to ?x ; "						\
 		"nmo:isSent true . "					\
 		"?c a nco:PersonContact . "				\
 		"?c nco:hasAffiliation ?a . "				\
-		"?a nco:hasPhoneNumber ?tmp . "				\
+		"?a nco:hasPhoneNumber ?ap . "				\
 		"OPTIONAL { "						\
 			"?c a nco:PersonContact ; nco:photo ?pht . "	\
 			"?pht a nfo:FileDataObject ; nie:url ?file . "	\
 		"} "							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Work\" . "			\
-			"?tmp nco:phoneNumber ?w . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"OPTIONAL { ?a nco:title ?title } "		\
-			"{ "						\
-			"SELECT ?p ?e ?c WHERE { "			\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Home\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL {?b nco:hasPostalAddress ?p . }}} "	\
-			"} "						\
-		"}"							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Home\" . "			\
-			"?tmp nco:phoneNumber ?h . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"{ "						\
-			"SELECT ?pw ?ew ?title ?c WHERE { "		\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Work\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:title ?title } "		\
-			"OPTIONAL {?b nco:hasPostalAddress ?pw . }}} "	\
-			"} "						\
-		"}"							\
+		"OPTIONAL {?a rdfs:label ?affType . }"			\
+		"OPTIONAL {?a nco:hasEmailAddress ?e . } "		\
+		"OPTIONAL {?a nco:hasPostalAddress ?p . }"		\
+		"OPTIONAL { ?a nco:org ?o . } "				\
+		"OPTIONAL { ?a nco:title ?title } "			\
 		"OPTIONAL { ?c nco:hasPostalAddress ?po . } "		\
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 	"} UNION { "							\
@@ -623,22 +501,20 @@
 	"} GROUP BY ?call ORDER BY DESC(nmo:sentDate(?call))"
 
 #define COMBINED_CALLS_QUERY						\
-	"SELECT ?h nco:fullname(?c) "					\
+	"SELECT nco:phoneNumber(?ap) nco:fullname(?c) "			\
 	"nco:nameFamily(?c) nco:nameGiven(?c) "				\
 	"nco:nameAdditional(?c) nco:nameHonorificPrefix(?c) "		\
-	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) "		\
-	"?w nco:pobox(?p) nco:extendedAddress(?p) "			\
+	"nco:nameHonorificSuffix(?c) nco:emailAddress(?e) ?vc "		\
+	"nco:pobox(?p) nco:extendedAddress(?p) "			\
 	"nco:streetAddress(?p) nco:locality(?p) nco:region(?p) "	\
-	"nco:postalcode(?p) nco:country(?p) \"\" nco:emailAddress(?ew) "\
+	"nco:postalcode(?p) nco:country(?p) \"\" ?affType "		\
 	"nco:birthDate(?c) nco:nickname(?c) nco:url(?c) "		\
 	"?file nco:fullname(?o) nco:department(?a) "			\
-	"nco:role(?a) nco:pobox(?pw) nco:extendedAddress(?pw) "		\
-	"nco:streetAddress(?pw) nco:locality(?pw) nco:region(?pw) "	\
-	"nco:postalcode(?pw) nco:country(?pw) nco:contactUID(?c) "	\
-	"?title nco:phoneNumber(?t) nco:pobox(?po) "			\
-	"nco:extendedAddress(?po) nco:streetAddress(?po) "		\
-	"nco:locality(?po) nco:region(?po) nco:postalcode(?po) "	\
-	"nco:country(?po) nco:emailAddress(?eo) ?vc "			\
+	"nco:role(?a) nco:contactUID(?c) "				\
+	"nco:title(?a) nco:phoneNumber(?t) nco:pobox(?po) "		\
+	"nco:extendedAddress(?po) "					\
+	"nco:streetAddress(?po) nco:locality(?po) nco:region(?po) "	\
+	"nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
 	"nmo:receivedDate(?call) "					\
 	"nmo:isSent(?call) nmo:isAnswered(?call) ?x "			\
 	"WHERE { "							\
@@ -662,62 +538,29 @@
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 		"OPTIONAL { "						\
 			"?c nco:hasAffiliation ?a . "			\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Work\" . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
 			"OPTIONAL { ?a nco:title ?title } "		\
-			"}"						\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Home\" . "			\
 			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
 			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"} "						\
 			"OPTIONAL { ?a nco:org ?o . } "			\
 		"} "							\
 	"} UNION { "							\
 		"?x a nco:Contact . "					\
-		"?x nco:hasPhoneNumber ?tmp . "				\
+		"?x nco:hasPhoneNumber ?ap . "				\
 		"?call a nmo:Call ; "					\
 		"nmo:to ?x ; "						\
 		"nmo:isSent true . "					\
 		"?c a nco:PersonContact . "				\
 		"?c nco:hasAffiliation ?a . "				\
-		"?a nco:hasPhoneNumber ?tmp . "				\
+		"?a nco:hasPhoneNumber ?ap . "				\
 		"OPTIONAL { "						\
 			"?c a nco:PersonContact ; nco:photo ?pht . "	\
 			"?pht a nfo:FileDataObject ; nie:url ?file . "	\
 		"} "							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Work\" . "			\
-			"?tmp nco:phoneNumber ?w . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"OPTIONAL { ?a nco:title ?title } "		\
-			"{ "						\
-			"SELECT ?p ?e ?c WHERE { "			\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Home\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL {?b nco:hasPostalAddress ?p . }}} "	\
-			"} "						\
-		"}"							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Home\" . "			\
-			"?tmp nco:phoneNumber ?h . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"{ "						\
-			"SELECT ?pw ?ew ?title ?c WHERE { "		\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Work\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL {?b nco:title ?title } "		\
-			"OPTIONAL {?b nco:hasPostalAddress ?pw . }}} "	\
-			"} "						\
-		"}"							\
+		"OPTIONAL {?a rdfs:label ?affType . }"			\
+		"OPTIONAL {?a nco:hasEmailAddress ?e . } "		\
+		"OPTIONAL {?a nco:hasPostalAddress ?p . }"		\
+		"OPTIONAL { ?a nco:org ?o . } "				\
+		"OPTIONAL { ?a nco:title ?title } "			\
 		"OPTIONAL { ?c nco:hasPostalAddress ?po . } "		\
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 	"} UNION { "							\
@@ -752,62 +595,29 @@
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 		"OPTIONAL { "						\
 			"?c nco:hasAffiliation ?a . "			\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Work\" . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
 			"OPTIONAL { ?a nco:title ?title } "		\
-			"}"						\
-			"OPTIONAL { "					\
-			"?a rdfs:label \"Home\" . "			\
 			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
 			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"} "						\
 			"OPTIONAL { ?a nco:org ?o . } "			\
 		"} "							\
 	"} UNION { "							\
 		"?x a nco:Contact . "					\
-		"?x nco:hasPhoneNumber ?tmp . "				\
+		"?x nco:hasPhoneNumber ?ap . "				\
 		"?call a nmo:Call ; "					\
 		"nmo:from ?x ; "					\
 		"nmo:isSent false . "					\
 		"?c a nco:PersonContact . "				\
 		"?c nco:hasAffiliation ?a . "				\
-		"?a nco:hasPhoneNumber ?tmp . "				\
+		"?a nco:hasPhoneNumber ?ap . "				\
 		"OPTIONAL { "						\
 			"?c a nco:PersonContact ; nco:photo ?pht . "	\
 			"?pht a nfo:FileDataObject ; nie:url ?file . "	\
 		"} "							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Work\" . "			\
-			"?tmp nco:phoneNumber ?w . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"OPTIONAL { ?a nco:title ?title } "		\
-			"{ "						\
-			"SELECT ?p ?e ?c WHERE { "			\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Home\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL {?b nco:hasPostalAddress ?p . }}} "	\
-			"} "						\
-		"}"							\
-		"OPTIONAL { "						\
-			"?a rdfs:label \"Home\" . "			\
-			"?tmp nco:phoneNumber ?h . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
-			"OPTIONAL { ?a nco:org ?o . } "			\
-			"{ "						\
-			"SELECT ?pw ?ew ?title ?c WHERE { "		\
-			"?c nco:hasAffiliation ?b . "			\
-			"OPTIONAL {?b rdfs:label \"Work\" . "		\
-			"OPTIONAL {?b nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL {?b nco:title ?title } "		\
-			"OPTIONAL {?b nco:hasPostalAddress ?pw . }}} "	\
-			"} "						\
-		"}"							\
+		"OPTIONAL {?a rdfs:label ?affType . }"			\
+		"OPTIONAL {?a nco:hasEmailAddress ?e . } "		\
+		"OPTIONAL {?a nco:hasPostalAddress ?p . }"		\
+		"OPTIONAL { ?a nco:org ?o . } "				\
+		"OPTIONAL { ?a nco:title ?title } "			\
 		"OPTIONAL { ?c nco:hasPostalAddress ?po . } "		\
 		"OPTIONAL { ?c nco:hasEmailAddress ?eo . } "		\
 	"} UNION { "							\
@@ -880,23 +690,20 @@
 	"} GROUP BY ?call ORDER BY DESC(nmo:receivedDate(?call))"
 
 #define CONTACTS_QUERY_FROM_URI						\
-	"SELECT nco:phoneNumber(?v) nco:fullname(<%s>) "		\
-	"nco:nameFamily(<%s>) nco:nameGiven(<%s>) "			\
-	"nco:nameAdditional(<%s>) nco:nameHonorificPrefix(<%s>) "	\
-	"nco:nameHonorificSuffix(<%s>) nco:emailAddress(?e) "		\
-	"nco:phoneNumber(?w) nco:pobox(?p) nco:extendedAddress(?p) "	\
+	"SELECT nco:phoneNumber(?v) nco:fullname(<%s>) "			\
+	"nco:nameFamily(<%s>) nco:nameGiven(<%s>) "				\
+	"nco:nameAdditional(<%s>) nco:nameHonorificPrefix(<%s>) "		\
+	"nco:nameHonorificSuffix(<%s>) nco:emailAddress(?e) ?vc "		\
+	"nco:pobox(?p) nco:extendedAddress(?p) "			\
 	"nco:streetAddress(?p) nco:locality(?p) nco:region(?p) "	\
-	"nco:postalcode(?p) nco:country(?p) ?f nco:emailAddress(?ew) "	\
+	"nco:postalcode(?p) nco:country(?p) ?f ?affType "		\
 	"nco:birthDate(<%s>) nco:nickname(<%s>) nco:url(<%s>) "		\
 	"?file nco:fullname(?o) nco:department(?a) "			\
-	"nco:role(?a) nco:pobox(?pw) nco:extendedAddress(?pw) "		\
-	"nco:streetAddress(?pw) nco:locality(?pw) nco:region(?pw) "	\
-	"nco:postalcode(?pw) nco:country(?pw) nco:contactUID(<%s>) "	\
+	"nco:role(?a) nco:contactUID(<%s>) "				\
 	"nco:title(?a) ?t nco:pobox(?po) nco:extendedAddress(?po) "	\
 	"nco:streetAddress(?po) nco:locality(?po) nco:region(?po) "	\
-        "nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
-	"?vc "								\
-	"\"NOTACALL\" \"false\" \"false\" <%s> "			\
+	"nco:postalcode(?po) nco:country(?po) nco:emailAddress(?eo) "	\
+	"\"NOTACALL\" \"false\" \"false\" <%s> "				\
 	"WHERE { "							\
 		"<%s> a nco:PersonContact . "				\
 		"OPTIONAL { "						\
@@ -919,16 +726,10 @@
 	"}"								\
 	"OPTIONAL { "							\
 		"<%s> nco:hasAffiliation ?a . "				\
-		"OPTIONAL { ?a rdfs:label \"Work\" . "			\
-			"OPTIONAL { ?a nco:hasEmailAddress ?ew . } "	\
-			"OPTIONAL { ?a nco:hasPostalAddress ?pw . } "	\
-			"OPTIONAL { ?a nco:hasPhoneNumber ?w . } "	\
-		"}"							\
-		"OPTIONAL { ?a rdfs:label \"Home\" . "			\
+		"OPTIONAL { ?a rdfs:label ?affType .}"			\
 			"OPTIONAL { ?a nco:hasEmailAddress ?e . } "	\
 			"OPTIONAL { ?a nco:hasPostalAddress ?p . } "	\
 			"OPTIONAL { ?a nco:hasPhoneNumber ?v . } "	\
-		"}"							\
 		"OPTIONAL { ?a nco:org ?o . } "				\
 	"} "								\
 	"OPTIONAL { <%s> nco:hasPostalAddress ?po . } "			\
@@ -939,7 +740,7 @@
 	"SELECT \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" "\
 	"\"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" "	\
 	"\"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" "	\
-	"\"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" "			\
+	"\"\" "								\
 	"nco:phoneNumber(?t) \"NOTACALL\" \"false\" \"false\" <%s> "	\
 	"WHERE { "							\
 		"<%s> a nco:Contact . "					\
@@ -1491,57 +1292,75 @@ static void contact_init(struct phonebook_contact *contact, char **reply)
 							reply[COL_ANSWERED]);
 }
 
+static enum phonebook_number_type get_phone_type(const char *affilation)
+{
+	if (g_strcmp0(AFFILATION_HOME, affilation) == 0)
+		return TEL_TYPE_HOME;
+	else if (g_strcmp0(AFFILATION_WORK, affilation) == 0)
+		return TEL_TYPE_WORK;
+
+	return TEL_TYPE_OTHER;
+}
+
 static void contact_add_numbers(struct phonebook_contact *contact,
 								char **reply)
 {
-	add_phone_number(contact, reply[COL_HOME_NUMBER], TEL_TYPE_HOME);
-	add_phone_number(contact, reply[COL_WORK_NUMBER], TEL_TYPE_WORK);
+	add_phone_number(contact, reply[COL_PHONE_NUMBER],
+					get_phone_type(reply[COL_AFF_TYPE]));
 	add_phone_number(contact, reply[COL_FAX_NUMBER], TEL_TYPE_FAX);
 	add_phone_number(contact, reply[COL_CELL_NUMBER], TEL_TYPE_MOBILE);
 
 	if (g_strcmp0(reply[COL_OTHER_NUMBER], reply[COL_CELL_NUMBER]) == 0)
 		return;
 
-	if (g_strcmp0(reply[COL_OTHER_NUMBER], reply[COL_WORK_NUMBER]) == 0)
-		return;
-
-	if (g_strcmp0(reply[COL_OTHER_NUMBER], reply[COL_HOME_NUMBER]) == 0)
+	if (g_strcmp0(reply[COL_OTHER_NUMBER], reply[COL_PHONE_NUMBER]) == 0)
 		return;
 
 	add_phone_number(contact, reply[COL_OTHER_NUMBER], TEL_TYPE_OTHER);
 }
 
+static enum phonebook_email_type get_email_type(const char *affilation)
+{
+	if (g_strcmp0(AFFILATION_HOME, affilation) == 0)
+		return EMAIL_TYPE_HOME;
+	else if (g_strcmp0(AFFILATION_WORK, affilation) == 0)
+		return EMAIL_TYPE_WORK;
+
+	return EMAIL_TYPE_OTHER;
+}
+
 static void contact_add_emails(struct phonebook_contact *contact,
 								char **reply)
 {
-	add_email(contact, reply[COL_HOME_EMAIL], EMAIL_TYPE_HOME);
-	add_email(contact, reply[COL_WORK_EMAIL], EMAIL_TYPE_WORK);
+	add_email(contact, reply[COL_EMAIL],
+					get_email_type(reply[COL_AFF_TYPE]));
 	add_email(contact, reply[COL_OTHER_EMAIL], EMAIL_TYPE_OTHER);
 }
 
+static enum phonebook_address_type get_addr_type(const char *affilation)
+{
+	if (g_strcmp0(AFFILATION_HOME, affilation) == 0)
+		return ADDR_TYPE_HOME;
+	else if (g_strcmp0(AFFILATION_WORK, affilation) == 0)
+		return ADDR_TYPE_WORK;
+
+	return ADDR_TYPE_HOME;
+}
+
 static void contact_add_addresses(struct phonebook_contact *contact,
 								char **reply)
 {
 
-	char *home_addr, *work_addr, *other_addr;
-
-	home_addr = g_strdup_printf("%s;%s;%s;%s;%s;%s;%s",
-					reply[COL_HOME_ADDR_POBOX],
-					reply[COL_HOME_ADDR_EXT],
-					reply[COL_HOME_ADDR_STREET],
-					reply[COL_HOME_ADDR_LOCALITY],
-					reply[COL_HOME_ADDR_REGION],
-					reply[COL_HOME_ADDR_CODE],
-					reply[COL_HOME_ADDR_COUNTRY]);
-
-	work_addr = g_strdup_printf("%s;%s;%s;%s;%s;%s;%s",
-					reply[COL_WORK_ADDR_POBOX],
-					reply[COL_WORK_ADDR_EXT],
-					reply[COL_WORK_ADDR_STREET],
-					reply[COL_WORK_ADDR_LOCALITY],
-					reply[COL_WORK_ADDR_REGION],
-					reply[COL_WORK_ADDR_CODE],
-					reply[COL_WORK_ADDR_COUNTRY]);
+	char *main_addr, *other_addr;
+
+	main_addr = g_strdup_printf("%s;%s;%s;%s;%s;%s;%s",
+					reply[COL_ADDR_POBOX],
+					reply[COL_ADDR_EXT],
+					reply[COL_ADDR_STREET],
+					reply[COL_ADDR_LOCALITY],
+					reply[COL_ADDR_REGION],
+					reply[COL_ADDR_CODE],
+					reply[COL_ADDR_COUNTRY]);
 
 	other_addr = g_strdup_printf("%s;%s;%s;%s;%s;%s;%s",
 					reply[COL_OTHER_ADDR_POBOX],
@@ -1552,12 +1371,11 @@ static void contact_add_addresses(struct phonebook_contact *contact,
 					reply[COL_OTHER_ADDR_CODE],
 					reply[COL_OTHER_ADDR_COUNTRY]);
 
-	add_address(contact, home_addr, ADDR_TYPE_HOME);
-	add_address(contact, work_addr, ADDR_TYPE_WORK);
+	add_address(contact, main_addr, get_addr_type(reply[COL_AFF_TYPE]));
+
 	add_address(contact, other_addr, ADDR_TYPE_OTHER);
 
-	g_free(home_addr);
-	g_free(work_addr);
+	g_free(main_addr);
 	g_free(other_addr);
 }
 
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH] Optimize tracker queries for PBAP
  2010-12-02 16:02 [PATCH] Optimize tracker queries for PBAP Radoslaw Jablonski
@ 2010-12-02 16:22 ` Johan Hedberg
  2010-12-02 23:45   ` Are LE connections possible yet? Brian Gix
  0 siblings, 1 reply; 7+ messages in thread
From: Johan Hedberg @ 2010-12-02 16:22 UTC (permalink / raw)
  To: Radoslaw Jablonski; +Cc: linux-bluetooth

Hi Radek,

On Thu, Dec 02, 2010, Radoslaw Jablonski wrote:
> Now data from tracker is fetched without redundand fields. Also
> determining which type has phone, address and email (work or home) is
> done in backend code - no tracker sub-query is used for that case. Now
> queries are about 6 times faster for any amount of data( call history
> queries, which were heavy loaded with OPTIONAL sub-queries are even 10
> times faster than before)
> ---
>  plugins/phonebook-tracker.c |  514 ++++++++++++++-----------------------------
>  1 files changed, 166 insertions(+), 348 deletions(-)

Pushed upstream. Thanks.

Johan

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Are LE connections possible yet?
  2010-12-02 16:22 ` Johan Hedberg
@ 2010-12-02 23:45   ` Brian Gix
  2010-12-03  1:21     ` Mike Tsai
  0 siblings, 1 reply; 7+ messages in thread
From: Brian Gix @ 2010-12-02 23:45 UTC (permalink / raw)
  To: linux-bluetooth

Hi All,

I am bringing up an LE capable (BR/EDR/LE) baseband, and attempting to use
it to establish a
GATT/ATT connection over an LE link.  However when executing the command:

% ./tools/hcitool lecc 00:14:BB:55:66:77

I get a very rapid failure of:

"Could not create connection: Operation not permitted"

The correct HCI command does not appear to be making it to the BR/EDR/LE
baseband.

It appears to be a socket issue of some sort.  I can cause this error, when
attached to the baseband, and:
"Could not create connection: File descriptor in bad state"

if I have not yet run hciattach.

Other (BR/EDR) hcitool commands work as expected, such as "hcitool scan" and
"hcitool inq"

Brian Gix
bgix@codeaurora.org
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum




^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: Are LE connections possible yet?
  2010-12-02 23:45   ` Are LE connections possible yet? Brian Gix
@ 2010-12-03  1:21     ` Mike Tsai
  2010-12-03 18:07       ` Claudio Takahasi
  0 siblings, 1 reply; 7+ messages in thread
From: Mike Tsai @ 2010-12-03  1:21 UTC (permalink / raw)
  To: Brian Gix, linux-bluetooth@vger.kernel.org

Hi Brian,

-----Original Message-----
From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth-owner@vger.kernel.org] On Behalf Of Brian Gix
Sent: Thursday, December 02, 2010 3:46 PM
To: linux-bluetooth@vger.kernel.org
Subject: Are LE connections possible yet?

Hi All,

I am bringing up an LE capable (BR/EDR/LE) baseband, and attempting to use
it to establish a
GATT/ATT connection over an LE link.  However when executing the command:

% ./tools/hcitool lecc 00:14:BB:55:66:77

I get a very rapid failure of:

"Could not create connection: Operation not permitted"

The correct HCI command does not appear to be making it to the BR/EDR/LE
baseband.

It appears to be a socket issue of some sort.  I can cause this error, when
attached to the baseband, and:
"Could not create connection: File descriptor in bad state"

if I have not yet run hciattach.

Other (BR/EDR) hcitool commands work as expected, such as "hcitool scan" and
"hcitool inq"
[MTsai]which kernel driver you are using? It seems the kernel does not know the LE create connection OpCode?


Brian Gix
bgix@codeaurora.org
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum



--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Are LE connections possible yet?
  2010-12-03  1:21     ` Mike Tsai
@ 2010-12-03 18:07       ` Claudio Takahasi
  2010-12-03 19:01         ` Brian Gix
  0 siblings, 1 reply; 7+ messages in thread
From: Claudio Takahasi @ 2010-12-03 18:07 UTC (permalink / raw)
  To: Mike Tsai; +Cc: Brian Gix, linux-bluetooth@vger.kernel.org

Hi All,

On Thu, Dec 2, 2010 at 10:21 PM, Mike Tsai <Mike.Tsai@atheros.com> wrote:
> Hi Brian,
>
> -----Original Message-----
> From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth-owner@vger.kernel.org] On Behalf Of Brian Gix
> Sent: Thursday, December 02, 2010 3:46 PM
> To: linux-bluetooth@vger.kernel.org
> Subject: Are LE connections possible yet?
>
> Hi All,
>
> I am bringing up an LE capable (BR/EDR/LE) baseband, and attempting to use
> it to establish a
> GATT/ATT connection over an LE link.  However when executing the command:
>
> % ./tools/hcitool lecc 00:14:BB:55:66:77
>
> I get a very rapid failure of:
>
> "Could not create connection: Operation not permitted"
>
> The correct HCI command does not appear to be making it to the BR/EDR/LE
> baseband.
>
> It appears to be a socket issue of some sort.  I can cause this error, when
> attached to the baseband, and:
> "Could not create connection: File descriptor in bad state"
>
> if I have not yet run hciattach.
>
> Other (BR/EDR) hcitool commands work as expected, such as "hcitool scan" and
> "hcitool inq"
> [MTsai]which kernel driver you are using? It seems the kernel does not know the LE create connection OpCode?
>
>
> Brian Gix
> bgix@codeaurora.org
> Employee of Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

For hcitool lecc it is not necessary a LE "capable" kernel, hcitool
sends the HCI commands from the userspace.
Try sudo hcitool lecc ... and don't forget putting the remote on
advertising mode: $hciconfig hcix leadv

If you want to test the connections managed by the kernel use Ville's kernel:
git://git.kernel.org/pub/scm/linux/kernel/git/vtervo/bluetooth-le-2.6.git

l2test support LE connections, use -J option to pass the fixed channel 4

Regards,
Claudio

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: Are LE connections possible yet?
  2010-12-03 18:07       ` Claudio Takahasi
@ 2010-12-03 19:01         ` Brian Gix
  2010-12-03 19:09           ` Anderson Lizardo
  0 siblings, 1 reply; 7+ messages in thread
From: Brian Gix @ 2010-12-03 19:01 UTC (permalink / raw)
  To: 'Claudio Takahasi', 'Mike Tsai'; +Cc: linux-bluetooth

Hi Claudio & Mike

-----Original Message-----
From: Claudio Takahasi [mailto:claudio.takahasi@openbossa.org] 
Sent: 03 December, 2010 10:07 AM
To: Mike Tsai
Cc: Brian Gix; linux-bluetooth@vger.kernel.org
Subject: Re: Are LE connections possible yet?

Hi All,

On Thu, Dec 2, 2010 at 10:21 PM, Mike Tsai <Mike.Tsai@atheros.com> wrote:
> Hi Brian,
>
> -----Original Message-----
> From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth-owner@vger.kernel.org] On Behalf Of Brian Gix
> Sent: Thursday, December 02, 2010 3:46 PM
> To: linux-bluetooth@vger.kernel.org
> Subject: Are LE connections possible yet?
>
> Hi All,
>
> I am bringing up an LE capable (BR/EDR/LE) baseband, and attempting to use
> it to establish a
> GATT/ATT connection over an LE link.  However when executing the command:
>
> % ./tools/hcitool lecc 00:14:BB:55:66:77
>
> I get a very rapid failure of:
>
> "Could not create connection: Operation not permitted"
>
> The correct HCI command does not appear to be making it to the BR/EDR/LE
> baseband.
>
> It appears to be a socket issue of some sort.  I can cause this error, when
> attached to the baseband, and:
> "Could not create connection: File descriptor in bad state"
>
> if I have not yet run hciattach.
>
> Other (BR/EDR) hcitool commands work as expected, such as "hcitool scan" and
> "hcitool inq"
> [MTsai]which kernel driver you are using? It seems the kernel does not know the LE create connection OpCode?
>
>
> Brian Gix
> bgix@codeaurora.org
> Employee of Qualcomm Innovation Center, Inc.
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum
>
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

For hcitool lecc it is not necessary a LE "capable" kernel, hcitool
sends the HCI commands from the userspace.
Try sudo hcitool lecc ... and don't forget putting the remote on
advertising mode: $hciconfig hcix leadv

If you want to test the connections managed by the kernel use Ville's kernel:
git://git.kernel.org/pub/scm/linux/kernel/git/vtervo/bluetooth-le-2.6.git

l2test support LE connections, use -J option to pass the fixed channel 4

[Gix] So I am cloning Ville's kernel as I type.  I did get the LE connection up and running (raw LE ACL connections, "sudo" was the key) but I will need it to be talking on Fixed channel 4, because it is a non-bluez server that I am connecting to, which does use Fixed-4.  This will probably take me the rest of the day.

[Gix] My next question is: How long until Ville's kernel is part of the tip? 

[Gix] And how do I get gatttool to build? This may be academic until I get fixed channel 4 access via the new kernel.


Regards,
Claudio


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: Are LE connections possible yet?
  2010-12-03 19:01         ` Brian Gix
@ 2010-12-03 19:09           ` Anderson Lizardo
  0 siblings, 0 replies; 7+ messages in thread
From: Anderson Lizardo @ 2010-12-03 19:09 UTC (permalink / raw)
  To: Brian Gix; +Cc: Claudio Takahasi, Mike Tsai, linux-bluetooth

On Fri, Dec 3, 2010 at 3:01 PM, Brian Gix <bgix@codeaurora.org> wrote:
> [Gix] And how do I get gatttool to build? This may be academic until I get fixed channel 4 access via the new kernel.

gatttool is built along with bluez. Just be sure to use latest code
from GIT, and pass "--enable-attrib" to ./configure (or use
./bootstrap-configure)

Regards,
-- 
Anderson Lizardo
OpenBossa Labs - INdT
Manaus - Brazil

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-12-03 19:09 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-02 16:02 [PATCH] Optimize tracker queries for PBAP Radoslaw Jablonski
2010-12-02 16:22 ` Johan Hedberg
2010-12-02 23:45   ` Are LE connections possible yet? Brian Gix
2010-12-03  1:21     ` Mike Tsai
2010-12-03 18:07       ` Claudio Takahasi
2010-12-03 19:01         ` Brian Gix
2010-12-03 19:09           ` Anderson Lizardo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).