+ /* Do not timeout the request in certain cases. Sometime the
+ * request may take undeterministic time to reponse.
+ * (for ex: pairing retry) */
+ if (service_function == BT_BOND_DEVICE ||
+ service_function == BT_BOND_DEVICE_BY_TYPE)
+ timeout = INT_MAX;
+ else
+ timeout = BT_DBUS_TIMEOUT_MAX;
+
+ in_param5 = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ param1 = g_variant_new_from_data((const GVariantType *)"ay",
+ in_param1->data, in_param1->len,
+ TRUE, NULL, NULL);
+ param2 = g_variant_new_from_data((const GVariantType *)"ay",
+ in_param2->data, in_param2->len,
+ TRUE, NULL, NULL);
+ param3 = g_variant_new_from_data((const GVariantType *)"ay",
+ in_param3->data, in_param3->len,
+ TRUE, NULL, NULL);
+ param4 = g_variant_new_from_data((const GVariantType *)"ay",
+ in_param4->data, in_param4->len,
+ TRUE, NULL, NULL);
+ param5 = g_variant_new_from_data((const GVariantType *)"ay",
+ in_param5->data, in_param5->len,
+ TRUE, NULL, NULL);
+
+ g_dbus_proxy_call(proxy, "service_request",
+ g_variant_new("(iii@ay@ay@ay@ay@ay)",
+ service_type, service_function,
+ BT_ASYNC_REQ, param1, param2,
+ param3, param4, param5),
+ G_DBUS_CALL_FLAGS_NONE,
+ timeout, NULL,
+ (GAsyncReadyCallback)__send_request_cb,
+ (gpointer)cb_data);