return BLUETOOTH_ERROR_NONE;
}
-static gboolean __bt_get_check_service_available()
+BT_EXPORT_API int bluetooth_check_adapter(void)
{
- GDBusConnection *service_gconn;
- GDBusProxy *proxy;
- GError *err = NULL;
- GArray *in_param5 = NULL;
- GVariant *ret, *param1, *param2, *param3, *param4, *param5;
-
- service_gconn = _bt_get_system_common_conn();
- if (!service_gconn)
- return FALSE;
-
- /* G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START
- * method call will be failed not auto activation
- * if service is unavailble. */
- proxy = g_dbus_proxy_new_sync(service_gconn,
- G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, NULL,
- BT_DBUS_NAME,
- BT_SERVICE_PATH,
- BT_DBUS_NAME,
- NULL, &err);
- if (!proxy) {
- if (err) {
- BT_ERR("Unable to create proxy: %s", err->message);
- g_clear_error(&err);
- }
-
- return FALSE;
- }
+#ifndef TIZEN_BLUEDROID_PORTING
+ int result;
+ bluetooth_adapter_state_t state = BLUETOOTH_ADAPTER_DISABLED;
BT_INIT_PARAMS();
BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
- 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);
-
- ret = g_dbus_proxy_call_sync(proxy, "service_request",
- g_variant_new("(iii@ay@ay@ay@ay@ay)",
- BT_BLUEZ_SERVICE, BT_CHECK_AVAILABLE,
- BT_SYNC_REQ, param1,
- param2, param3,
- param4, param5),
- G_DBUS_CALL_FLAGS_NONE, -1,
- NULL, &err);
-
- BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
- g_array_free(in_param5, TRUE);
+ result = _bt_send_request_not_autostart(BT_BLUEZ_SERVICE, BT_CHECK_ADAPTER,
+ in_param1, in_param2, in_param3, in_param4, &out_param);
- if (ret == NULL) {
- if (err) {
- BT_ERR("D-Bus API failure: errCode[%x], message[%s]",
- err->code, err->message);
- g_clear_error(&err);
- }
- BT_ERR("bt-service is unavailable");
- return FALSE;
+ if (result == BLUETOOTH_ERROR_NONE) {
+ state = g_array_index(out_param, bluetooth_adapter_state_t, 0);
}
- return TRUE;
-}
+ BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
-BT_EXPORT_API int bluetooth_check_adapter(void)
-{
-#ifndef TIZEN_BLUEDROID_PORTING
- int ret;
- gboolean is_service_avail;
- ret = _bt_get_adapter_path(_bt_get_system_common_conn(), NULL);
- is_service_avail = __bt_get_check_service_available();
- return (ret == BLUETOOTH_ERROR_NONE && is_service_avail) ?
- BLUETOOTH_ADAPTER_ENABLED : BLUETOOTH_ADAPTER_DISABLED;
+ return state ? BLUETOOTH_ADAPTER_ENABLED : BLUETOOTH_ADAPTER_DISABLED;
#else
int value = VCONFKEY_BT_STATUS_OFF;
static GSList *sending_requests;
static GDBusProxy *service_gproxy;
+static GDBusProxy *service_gproxy_not_autostart;
static GDBusProxy *__bt_gdbus_init_service_proxy(void)
{
return proxy;
}
+static GDBusProxy *__bt_gdbus_init_service_proxy_not_autostart(void)
+{
+ GDBusConnection *service_gconn;
+ GDBusProxy *proxy;
+ GError *err = NULL;
+
+ service_gconn = _bt_get_system_common_conn();
+
+ if (!service_gconn)
+ return NULL;
+
+ /* G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START
+ * method call will be failed not auto activation
+ * if service is unavailble. */
+ proxy = g_dbus_proxy_new_sync(service_gconn,
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, NULL,
+ BT_DBUS_NAME,
+ BT_SERVICE_PATH,
+ BT_DBUS_NAME,
+ NULL, &err);
+ if (!proxy) {
+ if (err) {
+ BT_ERR("Unable to create proxy: %s", err->message);
+ g_clear_error(&err);
+ }
+
+ return NULL;
+ }
+
+ service_gproxy_not_autostart = proxy;
+
+ return proxy;
+}
+
static GDBusProxy *__bt_gdbus_get_service_proxy(void)
{
return (service_gproxy) ? service_gproxy : __bt_gdbus_init_service_proxy();
}
+static GDBusProxy *__bt_gdbus_get_service_proxy_not_autostart(void)
+{
+ return (service_gproxy_not_autostart) ? service_gproxy_not_autostart : __bt_gdbus_init_service_proxy_not_autostart();
+}
+
void _bt_gdbus_deinit_proxys(void)
{
if (service_gproxy) {
return result;
}
+
+int _bt_sync_send_request_not_autostart(int service_type, int service_function,
+ GArray *in_param1, GArray *in_param2,
+ GArray *in_param3, GArray *in_param4,
+ GArray **out_param1)
+{
+ int result = BLUETOOTH_ERROR_NONE;
+ GError *error = NULL;
+ GArray *in_param5 = NULL;
+// GArray *out_param2 = NULL;
+
+ GDBusProxy *proxy;
+ GVariant *ret;
+ GVariant *param1;
+ GVariant *param2;
+ GVariant *param3;
+ GVariant *param4;
+ GVariant *param5;
+
+ switch (service_type) {
+ case BT_BLUEZ_SERVICE:
+ case BT_OBEX_SERVICE:
+ case BT_AGENT_SERVICE:
+ case BT_CHECK_PRIVILEGE:
+ proxy = __bt_gdbus_get_service_proxy_not_autostart();
+ if (!proxy)
+ return BLUETOOTH_ERROR_INTERNAL;
+
+ 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);
+
+ ret = g_dbus_proxy_call_sync(proxy, "service_request",
+ g_variant_new("(iii@ay@ay@ay@ay@ay)",
+ service_type, service_function,
+ BT_SYNC_REQ, param1,
+ param2, param3,
+ param4, param5),
+ G_DBUS_CALL_FLAGS_NONE, -1,
+ NULL, &error);
+
+ g_array_free(in_param5, TRUE);
+
+ if (ret == NULL) {
+ if (error != NULL)
+ g_clear_error(&error);
+ BT_DBG("bt-service is not available");
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+
+ param1 = NULL;
+// param2 = NULL;
+
+ g_variant_get(ret, "(iv)", &result, ¶m1);
+
+ if (param1) {
+ *out_param1 = g_array_new(TRUE, TRUE, sizeof(gchar));
+ __bt_fill_garray_from_variant(param1, *out_param1);
+ g_variant_unref(param1);
+ }
+
+// if (param2) {
+// out_param2 = g_array_new(TRUE, TRUE, sizeof(gchar));
+// __bt_fill_garray_from_variant(param2, out_param2);
+// result = g_array_index(out_param2, int, 0);
+// g_variant_unref(param2);
+// g_array_free(out_param2, TRUE);
+// } else {
+// result = BLUETOOTH_ERROR_INTERNAL;
+// }
+
+ g_variant_unref(ret);
+ break;
+ default:
+ BT_ERR("Unknown service type");
+ return BLUETOOTH_ERROR_INTERNAL;
+ }
+
+ return result;
+}
} \
)
+int _bt_sync_send_request_not_autostart(int service_type, int service_function,
+ GArray *in_param1, GArray *in_param2,
+ GArray *in_param3, GArray *in_param4,
+ GArray **out_param1);
+
+/* The caller of this should pass #define macro/enum types as the first two params */
+#define _bt_send_request_not_autostart(a, b, format ...) ( \
+ { \
+ _bt_sync_send_request_not_autostart(a, b, format); \
+ } \
+ )
+
#ifdef __cplusplus
}
#endif
char *sender = NULL;
switch (function_name) {
- case BT_CHECK_AVAILABLE: {
- int available = true;
- g_array_append_vals(*out_param1, &available, sizeof(int));
- break;
- }
case BT_ENABLE_ADAPTER: {
result = _bt_enable_adapter();
_bt_adapter_start_enable_timer();
break;
case BT_CHECK_ADAPTER:
- case BT_CHECK_AVAILABLE:
case BT_GET_RSSI:
case BT_GET_LOCAL_NAME:
typedef enum {
BT_CHECK_ADAPTER = BT_FUNC_BASE,
- BT_CHECK_AVAILABLE,
BT_ENABLE_ADAPTER,
BT_DISABLE_ADAPTER,
BT_RECOVER_ADAPTER,