2 * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
26 #include <mdg_debug.h>
27 #include <mdg_gdbus.h>
28 #include <mdg_private.h>
30 GSList *handle_list = NULL;
32 EXPORT_API int mdg_initialize(mdg_h *handle)
34 int ret = MDG_ERROR_NONE;
35 struct mdg_manager_s *mdg_manager = NULL;
37 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
39 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
43 mdg_manager = calloc(1, sizeof(mdg_manager_s));
44 if (NULL == mdg_manager) {
46 _ERR("Failed to create handle");
47 return MDG_ERROR_OUT_OF_MEMORY;
50 *handle = mdg_manager;
52 ret = gdbus_initialize(*handle);
54 handle_list = g_slist_prepend(handle_list, *handle);
61 EXPORT_API int mdg_deinitialize(mdg_h handle)
63 int ret = MDG_ERROR_NONE;
65 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
66 CHECK_HANDLE_IS_VALID(handle);
70 handle_list = g_slist_remove(handle_list, handle);
72 ret = gdbus_deinitialize(handle);
79 EXPORT_API int mdg_group_create(mdg_h handle, char *group_name)
81 int ret = MDG_ERROR_NONE;
84 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
86 mdg_manager_s *_handle = handle;
87 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
88 CHECK_HANDLE_IS_VALID(handle);
90 /* create group to daemon using gdbus */
91 group_call_create_sync(_handle->group_proxy, group_name, &ret, NULL, &error);
96 EXPORT_API void mdg_group_destroy(mdg_group_s *group)
98 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
100 mdg_check_null_ret("group", group);
102 if (group->device_id) {
103 g_free(group->device_id);
104 group->device_id = NULL;
106 if (group->group_name) {
107 g_free(group->group_name);
108 group->group_name = NULL;
115 EXPORT_API int mdg_group_find(mdg_h handle, int timeout,
116 mdg_group_found_cb found_cb, mdg_group_find_finish_cb finish_cb,
119 int ret = MDG_ERROR_NONE;
120 GError *error = NULL;
122 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
124 mdg_manager_s *_handle = handle;
125 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
126 CHECK_HANDLE_IS_VALID(handle);
128 _handle->group_found_cb.found_cb = found_cb;
129 _handle->group_find_finish_cb.finish_cb = finish_cb;
130 _handle->group_found_cb.user_data = user_data;
131 _handle->group_find_finish_cb.user_data = user_data;
133 /* get groups from daemon using gdbus */
134 group_call_find_sync(_handle->group_proxy, timeout, &ret, NULL, &error);
136 _ERR("Failed DBus call [%s]", error->message);
138 ret = MDG_ERROR_IO_ERROR;
144 EXPORT_API int mdg_device_find(mdg_h handle, int timeout, bool is_invited,
145 mdg_device_found_cb found_cb, mdg_device_find_finish_cb finish_cb,
148 int ret = MDG_ERROR_NONE;
149 GError *error = NULL;
151 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
153 mdg_manager_s *_handle = handle;
154 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
155 CHECK_HANDLE_IS_VALID(handle);
157 _handle->device_found_cb.found_cb = found_cb;
158 _handle->device_found_cb.user_data = user_data;
159 _handle->device_find_finish_cb.finish_cb = finish_cb;
160 _handle->device_find_finish_cb.user_data = user_data;
162 /* get groups from daemon using gdbus */
163 group_call_find_device_sync(_handle->group_proxy, timeout, is_invited, &ret, NULL, &error);
165 _ERR("Failed DBus call [%s]", error->message);
167 ret = MDG_ERROR_IO_ERROR;
174 * Companion Manager CAPI
176 int __add_channel_cb(mdg_manager_s *handle, char *channel_id, mdg_channel_cb channel_cb, void *user_data)
178 channel_cb_s *channel_s;
181 for (l1 = handle_list; l1 != NULL; l1 = l1->next) {
182 mdg_manager_s *tmp_handle = (mdg_manager_s *)l1->data;
183 for (l2 = tmp_handle->channel_cb_list; l2 != NULL; l2 = l2->next) {
184 channel_cb_s *tmp_channel = (channel_cb_s *)l2->data;
185 if (g_strcmp0(tmp_channel->channel_id, channel_id) == 0)
186 return MDG_ERROR_OPERATION_FAILED;
190 channel_s = g_try_new0(channel_cb_s, 1);
191 if (channel_s == NULL)
192 return MDG_ERROR_OUT_OF_MEMORY;
194 channel_s->channel_id = g_strdup(channel_id);
195 channel_s->cb = channel_cb;
196 channel_s->user_data = user_data;
198 handle->channel_cb_list = g_slist_prepend(handle->channel_cb_list, channel_s);
203 EXPORT_API int mdg_device_regist_channel(mdg_h handle, char *channel_id,
204 mdg_channel_cb channel_cb, void *user_data)
206 int ret = MDG_ERROR_NONE;
207 GError *error = NULL;
209 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
211 mdg_manager_s *_handle = handle;
212 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
213 CHECK_HANDLE_IS_VALID(_handle);
217 group_call_regist_channel_sync(_handle->group_proxy, channel_id, &ret, NULL, &error);
219 _ERR("Failed DBus call [%s]", error->message);
221 ret = MDG_ERROR_IO_ERROR;
224 if (ret == MDG_ERROR_NONE)
225 ret = __add_channel_cb(handle, channel_id, channel_cb, user_data);
232 EXPORT_API int mdg_device_unregist_channel(mdg_h handle, char *channel_id)
234 int ret = MDG_ERROR_NONE;
235 bool is_exist = false;
236 GError *error = NULL;
238 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
240 mdg_manager_s *_handle = handle;
241 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
242 CHECK_HANDLE_IS_VALID(handle);
247 for (l = _handle->channel_cb_list; l != NULL; l = l->next) {
248 channel_cb_s *tmp_channel = (channel_cb_s *)l->data;
249 if (g_strcmp0(tmp_channel->channel_id, channel_id) == 0) {
250 g_free(tmp_channel->channel_id);
251 _handle->channel_cb_list = g_slist_remove_link(_handle->channel_cb_list, l);
257 if (is_exist == false)
258 ret = MDG_ERROR_OPERATION_FAILED;
260 if (ret == MDG_ERROR_NONE) {
261 group_call_unregist_channel_sync(_handle->group_proxy, channel_id, &ret, NULL, &error);
263 _ERR("Failed DBus call [%s]", error->message);
265 ret = MDG_ERROR_IO_ERROR;
274 EXPORT_API int mdg_device_send_data(mdg_h handle,
275 mdg_device_h device, char *channel_id, unsigned char *data, int len,
276 mdg_device_send_data_finish_cb finish_cb, void *user_data)
278 int ret = MDG_ERROR_NONE;
279 unsigned char *buf = NULL;
280 GVariantBuilder *bytearray_builder = NULL;
282 GVariant *params = NULL;
283 GError *error = NULL;
285 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
287 mdg_manager_s *_handle = handle;
288 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
289 CHECK_HANDLE_IS_VALID(handle);
291 mdg_device_s *dev = (mdg_device_s *)device;
292 mdg_check_null_ret_error("dev", dev, MDG_ERROR_INVALID_PARAMETER);
294 buf = g_try_malloc0(len + 1);
296 /* LCOV_EXCL_START */
297 _ERR("g_malloc0 is failed");
298 return MDG_ERROR_OUT_OF_MEMORY;
301 memcpy(buf, data, len);
303 bytearray_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
304 for (i = 0; i < len; i++)
305 g_variant_builder_add(bytearray_builder, "y", buf[i]);
307 params = g_variant_new("(iay)", len, bytearray_builder);
308 g_variant_builder_unref(bytearray_builder);
310 _handle->send_data_finish_cb.finish_cb = finish_cb;
311 _handle->send_data_finish_cb.user_data = user_data;
313 group_call_send_data_sync(_handle->group_proxy, dev->device_id,
314 channel_id, params, &ret, NULL, &error);
316 _ERR("Failed DBus call [%s]", error->message);
318 ret = MDG_ERROR_IO_ERROR;
327 EXPORT_API int mdg_device_send_file(mdg_h handle, mdg_device_h device,
328 char *file_path, mdg_send_file_progress_cb progress_cb, mdg_send_file_finish_cb finish_cb, void *user_data)
330 int ret = MDG_ERROR_NONE;
331 GError *error = NULL;
333 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
335 mdg_manager_s *_handle = handle;
336 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
337 CHECK_HANDLE_IS_VALID(handle);
339 mdg_device_s *dev = (mdg_device_s *)device;
340 mdg_check_null_ret_error("dev", dev, MDG_ERROR_INVALID_PARAMETER);
341 mdg_check_null_ret_error("file_path", file_path, MDG_ERROR_INVALID_PARAMETER);
343 mdg_device_h cloned_device = NULL;
344 mdg_device_info_clone(&cloned_device, device);
346 _handle->send_file_cb.finish_cb = finish_cb;
347 _handle->send_file_cb.progress_cb = progress_cb;
348 _handle->send_file_cb.device = cloned_device;
349 _handle->send_file_cb.user_data = user_data;
351 group_call_send_file_sync(_handle->group_proxy, dev->device_id, file_path, &ret, NULL, &error);
353 _ERR("Failed DBus call [%s]", error->message);
355 ret = MDG_ERROR_IO_ERROR;
361 EXPORT_API int mdg_set_receive_file_cb(mdg_h handle,
362 mdg_receive_file_cb receive_cb, void *user_data)
364 int ret = MDG_ERROR_NONE;
366 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
368 mdg_manager_s *_handle = handle;
369 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
370 CHECK_HANDLE_IS_VALID(handle);
372 _handle->receive_file_cb.receive_cb = receive_cb;
373 _handle->receive_file_cb.user_data = user_data;
378 EXPORT_API int mdg_unset_receive_file_cb(mdg_h handle)
380 int ret = MDG_ERROR_NONE;
382 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
384 mdg_manager_s *_handle = handle;
385 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
386 CHECK_HANDLE_IS_VALID(handle);
388 _handle->receive_file_cb.receive_cb = NULL;
389 _handle->receive_file_cb.user_data = NULL;
394 EXPORT_API int mdg_device_get_local_device(mdg_h handle,
395 mdg_device_h *device)
397 int ret = MDG_ERROR_NONE;
398 GError *error = NULL;
401 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
403 mdg_manager_s *_handle = handle;
404 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
405 CHECK_HANDLE_IS_VALID(handle);
407 group_call_get_local_device_sync(_handle->group_proxy, &va, NULL, &error);
409 _ERR("Failed DBus call [%s]", error->message);
411 ret = MDG_ERROR_IO_ERROR;
414 *device = mdg_get_device_from_variant(va);
419 EXPORT_API int mdg_group_delete(mdg_h handle, mdg_group_h group)
421 int ret = MDG_ERROR_NONE;
422 GError *error = NULL;
424 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
426 mdg_manager_s *_handle = handle;
427 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
428 CHECK_HANDLE_IS_VALID(handle);
430 mdg_group_s *grp = (mdg_group_s *)group;
431 mdg_check_null_ret_error("grp", grp, MDG_ERROR_INVALID_PARAMETER);
433 /* create group to daemon using gdbus */
434 group_call_delete_sync(_handle->group_proxy, grp->group_name, &ret, NULL, &error);
439 EXPORT_API int mdg_group_foreach_device(mdg_h handle, mdg_group_h group,
440 mdg_group_foreach_cb foreach_cb, void *user_data)
442 int ret = MDG_ERROR_NONE;
443 GError *error = NULL;
447 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
449 mdg_manager_s *_handle = handle;
450 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
451 CHECK_HANDLE_IS_VALID(handle);
453 mdg_group_s *grp = (mdg_group_s *)group;
454 mdg_check_null_ret_error("grp", grp, MDG_ERROR_INVALID_PARAMETER);
456 group_call_foreach_device_sync(_handle->group_proxy, grp->group_name, &ret, &va, NULL, &error);
457 count = g_variant_n_children(va);
460 GVariantIter *iter = NULL;
461 GVariant *device_va = NULL;
464 g_variant_get(va, "aa{sv}", &iter);
465 while ((device_va = g_variant_iter_next_value(iter)) != NULL) {
466 mdg_device_s *device;
468 device = mdg_get_device_from_variant(device_va);
470 result = foreach_cb((mdg_device_h)device, user_data);
474 g_variant_iter_free(iter);
482 EXPORT_API int mdg_group_invite_device(mdg_h handle,
483 mdg_group_h group, mdg_device_h device, char *PIN,
484 mdg_group_invite_device_finish_cb finish_cb, void *user_data)
486 int ret = MDG_ERROR_NONE;
487 GError *error = NULL;
490 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
492 mdg_manager_s *_handle = handle;
493 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
494 CHECK_HANDLE_IS_VALID(handle);
496 mdg_group_s *grp = (mdg_group_s *)group;
497 mdg_check_null_ret_error("grp", grp, MDG_ERROR_INVALID_PARAMETER);
499 mdg_device_s *dev = (mdg_device_s *)device;
500 mdg_check_null_ret_error("dev", dev, MDG_ERROR_INVALID_PARAMETER);
502 mdg_device_h cloned_device = NULL;
503 mdg_device_info_clone(&cloned_device, device);
505 va = mdg_create_variant_device(dev);
507 _handle->device_invite_finish_cb.finish_cb = finish_cb;
508 _handle->device_invite_finish_cb.user_data = user_data;
509 _handle->device_invite_finish_cb.device = cloned_device;
511 group_call_invite_device_sync(_handle->group_proxy, grp->group_name, va, PIN,
517 EXPORT_API int mdg_group_eject_device(mdg_h handle,
518 mdg_group_h group, mdg_device_h device,
519 mdg_group_eject_device_finish_cb finish_cb, void *user_data)
521 int ret = MDG_ERROR_NONE;
522 GError *error = NULL;
524 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
526 mdg_manager_s *_handle = handle;
527 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
528 CHECK_HANDLE_IS_VALID(handle);
530 mdg_device_s *dev = (mdg_device_s *)device;
531 mdg_check_null_ret_error("dev", dev, MDG_ERROR_INVALID_PARAMETER);
533 mdg_group_s *grp = (mdg_group_s *)group;
534 mdg_check_null_ret_error("grp", grp, MDG_ERROR_INVALID_PARAMETER);
536 _handle->device_eject_finish_cb.finish_cb = finish_cb;
537 _handle->device_eject_finish_cb.user_data = user_data;
539 group_call_eject_device_sync(_handle->group_proxy, grp->group_name, dev->device_id, &ret,
545 EXPORT_API int mdg_group_info_create(mdg_group_h* group)
547 int ret = MDG_ERROR_NONE;
549 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
551 mdg_group_h _group = g_malloc0(sizeof(mdg_group_s));
552 if (NULL == _group) {
553 /* LCOV_EXCL_START */
554 _ERR("Memory allocation Failed(%d)", errno);
555 return MDG_ERROR_OUT_OF_MEMORY;
563 EXPORT_API int mdg_group_info_clone(mdg_group_h *target,
566 int ret = MDG_ERROR_NONE;
568 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
570 mdg_group_s * src = (mdg_group_s *)source;
571 mdg_check_null_ret_error("source", source, MDG_ERROR_INVALID_PARAMETER);
573 *target = (mdg_group_s *)g_malloc0(sizeof(mdg_group_s));
574 mdg_check_null_ret_error("target", target, MDG_ERROR_INVALID_PARAMETER);
575 mdg_group_s *dst = *target;
578 dst->device_id = g_strdup(src->device_id);
581 dst->group_name = g_strdup(src->group_name);
583 dst->type = src->type;
588 EXPORT_API int mdg_group_info_destroy(mdg_group_h data)
590 int ret = MDG_ERROR_NONE;
592 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
594 mdg_group_s * group = (mdg_group_s *)data;
595 mdg_check_null_ret_error("group", group, MDG_ERROR_INVALID_PARAMETER);
597 if (group->device_id) {
598 g_free(group->device_id);
599 group->device_id = NULL;
601 if (group->group_name) {
602 g_free(group->group_name);
603 group->group_name = NULL;
612 EXPORT_API int mdg_group_info_get_device_id(
613 mdg_group_h group, char **device_id)
615 int ret = MDG_ERROR_NONE;
617 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
619 *device_id = g_strdup(((mdg_group_s *)group)->device_id);
624 EXPORT_API int mdg_group_info_get_type(mdg_group_h group,
625 mdg_group_type_e *type)
627 int ret = MDG_ERROR_NONE;
629 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
631 *type = ((mdg_group_s *)group)->type;
636 EXPORT_API int mdg_group_info_get_name(
637 mdg_group_h group, char **name)
639 int ret = MDG_ERROR_NONE;
641 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
643 *name = g_strdup(((mdg_group_s *)group)->group_name);
648 EXPORT_API int mdg_device_info_clone(mdg_device_h *target,
651 int ret = MDG_ERROR_NONE;
653 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
655 mdg_device_s * src = (mdg_device_s *)source;
656 mdg_check_null_ret_error("source", source, MDG_ERROR_INVALID_PARAMETER);
658 *target = (mdg_device_s *)g_malloc0(sizeof(mdg_device_s));
659 mdg_check_null_ret_error("target", target, MDG_ERROR_INVALID_PARAMETER);
660 mdg_device_s *dst = *target;
663 dst->device_id = g_strdup(src->device_id);
666 dst->model_name = g_strdup(src->model_name);
668 if (src->device_name)
669 dst->device_name = g_strdup(src->device_name);
671 if (src->platform_ver)
672 dst->platform_ver = g_strdup(src->platform_ver);
675 dst->vendor_id = g_strdup(src->vendor_id);
678 dst->profile = g_strdup(src->profile);
680 dst->is_invited = src->is_invited;
681 dst->type = src->type;
686 EXPORT_API int mdg_device_info_destroy(mdg_device_h data)
688 int ret = MDG_ERROR_NONE;
690 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
692 mdg_device_s * device = (mdg_device_s *)data;
693 mdg_check_null_ret_error("data", data, MDG_ERROR_INVALID_PARAMETER);
695 if (device->device_id) {
696 g_free(device->device_id);
697 device->device_id = NULL;
700 if (device->model_name) {
701 g_free(device->model_name);
702 device->model_name = NULL;
705 if (device->device_name) {
706 g_free(device->device_name);
707 device->device_name = NULL;
710 if (device->platform_ver) {
711 g_free(device->platform_ver);
712 device->platform_ver = NULL;
715 if (device->vendor_id) {
716 g_free(device->vendor_id);
717 device->vendor_id = NULL;
720 if (device->profile) {
721 g_free(device->profile);
722 device->profile = NULL;
731 EXPORT_API int mdg_device_info_get_device_id(
732 mdg_device_h device, char **device_id)
734 int ret = MDG_ERROR_NONE;
736 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
738 *device_id = g_strdup(((mdg_device_s *)device)->device_id);
743 EXPORT_API int mdg_device_info_get_model_name(
744 mdg_device_h device, char **model_name)
746 int ret = MDG_ERROR_NONE;
748 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
750 *model_name = g_strdup(((mdg_device_s *)device)->model_name);
755 EXPORT_API int mdg_device_info_get_device_name(
756 mdg_device_h device, char **device_name)
758 int ret = MDG_ERROR_NONE;
760 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
762 *device_name = g_strdup(((mdg_device_s *)device)->device_name);
767 EXPORT_API int mdg_device_info_get_platform_ver(
768 mdg_device_h device, char **platform_ver)
770 int ret = MDG_ERROR_NONE;
772 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
774 *platform_ver = g_strdup(((mdg_device_s *)device)->platform_ver);
779 EXPORT_API int mdg_device_info_get_vendor_id(
780 mdg_device_h device, char **vendor_id)
782 int ret = MDG_ERROR_NONE;
784 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
786 *vendor_id = g_strdup(((mdg_device_s *)device)->vendor_id);
791 EXPORT_API int mdg_device_info_get_profile(
792 mdg_device_h device, char **profile)
794 int ret = MDG_ERROR_NONE;
796 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
798 *profile = g_strdup(((mdg_device_s *)device)->profile);
803 EXPORT_API int mdg_device_info_is_invited(
804 mdg_device_h device, bool *is_invited)
806 int ret = MDG_ERROR_NONE;
808 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
810 *is_invited = ((mdg_device_s *)device)->is_invited;
815 EXPORT_API int mdg_device_info_get_type(
816 mdg_device_h device, mdg_device_type_e *type)
818 int ret = MDG_ERROR_NONE;
820 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
822 *type = ((mdg_device_s *)device)->type;
827 EXPORT_API int mdg_request_create_group(mdg_h handle,
828 mdg_device_h device, char *group_name, mdg_request_result_cb cb,
831 int ret = MDG_ERROR_NONE;
832 GError *error = NULL;
837 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
839 mdg_manager_s *_handle = handle;
840 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
841 CHECK_HANDLE_IS_VALID(handle);
843 mdg_device_s *dev = (mdg_device_s *)device;
844 mdg_check_null_ret_error("device", device, MDG_ERROR_INVALID_PARAMETER);
845 mdg_check_null_ret_error("group_name", group_name,
846 MDG_ERROR_INVALID_PARAMETER);
848 _DBG("Device id : %s", dev->device_id);
850 group_call_request_create_group_sync(_handle->group_proxy, dev->device_id,
851 group_name, &ret, NULL, &error);
856 EXPORT_API int mdg_request_invite_device(mdg_h handle,
857 mdg_group_h group, mdg_device_h device, char *PIN,
858 mdg_request_result_cb cb, void *user_data)
860 int ret = MDG_ERROR_NONE;
861 GError *error = NULL;
866 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
868 mdg_manager_s *_handle = handle;
869 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
870 CHECK_HANDLE_IS_VALID(handle);
872 mdg_group_s *grp = (mdg_group_s *)group;
873 mdg_check_null_ret_error("group", group, MDG_ERROR_INVALID_PARAMETER);
875 mdg_device_s *dev = (mdg_device_s *)device;
876 mdg_check_null_ret_error("device", device, MDG_ERROR_INVALID_PARAMETER);
878 _DBG("%s", grp->device_id);
879 _DBG("%s", grp->group_name);
880 _DBG("%s", dev->device_id);
882 group_call_request_invite(_handle->group_proxy, grp->device_id,
883 grp->group_name, dev->device_id, PIN, NULL, NULL, &error);
885 _ERR("Failed DBus call [%s]", error->message);
887 ret = MDG_ERROR_IO_ERROR;
893 EXPORT_API int mdg_request_eject_device(mdg_h handle,
894 mdg_group_h group, mdg_device_h device, mdg_request_result_cb cb,
897 int ret = MDG_ERROR_NONE;
898 GError *error = NULL;
903 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
905 mdg_manager_s *_handle = handle;
906 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
907 CHECK_HANDLE_IS_VALID(handle);
909 mdg_group_s *grp = (mdg_group_s *)group;
910 mdg_check_null_ret_error("group", group, MDG_ERROR_INVALID_PARAMETER);
912 mdg_device_s *dev = (mdg_device_s *)device;
913 mdg_check_null_ret_error("device", device, MDG_ERROR_INVALID_PARAMETER);
915 _DBG("%s", grp->device_id);
916 _DBG("%s", grp->group_name);
917 _DBG("%s", dev->device_id);
919 group_call_request_eject(_handle->group_proxy, grp->device_id,
920 grp->group_name, dev->device_id, NULL, NULL, &error);
922 _ERR("Failed DBus call [%s]", error->message);
924 ret = MDG_ERROR_IO_ERROR;
930 EXPORT_API int mdg_request_channel_list(mdg_h handle, mdg_device_h device,
931 mdg_request_channel_list_finish_cb finish_cb, void *user_data)
933 int ret = MDG_ERROR_NONE;
934 GError *error = NULL;
936 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
938 mdg_manager_s *_handle = handle;
939 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
940 CHECK_HANDLE_IS_VALID(handle);
942 mdg_device_s *dev = (mdg_device_s *)device;
943 mdg_check_null_ret_error("device", device, MDG_ERROR_INVALID_PARAMETER);
944 _handle->request_channel_list_finish_cb.finish_cb = finish_cb;
945 _handle->request_channel_list_finish_cb.user_data = user_data;
947 _DBG("%s", dev->device_id);
949 group_call_request_channel_list(_handle->group_proxy, dev->device_id, NULL, NULL, &error);
951 _ERR("Failed DBus call [%s]", error->message);
953 ret = MDG_ERROR_IO_ERROR;
959 EXPORT_API int mdg_request_result_callback(mdg_h handle,
960 mdg_request_result_cb result_cb, void *user_data)
962 int ret = MDG_ERROR_NONE;
964 CHECK_FEATURE_SUPPORTED(MDG_FEATURE);
966 mdg_manager_s *_handle = handle;
967 mdg_check_null_ret_error("handle", handle, MDG_ERROR_INVALID_PARAMETER);
969 _handle->request_result_cb.result_cb = result_cb;
970 _handle->request_result_cb.user_data = user_data;