* @see companion_request_result_callback()
*/
typedef void (*companion_request_result_cb)(char *cmd, char *device_id,
- char *arg, int ret, void *user_data);
+ unsigned char *arg, int len, int ret, void *user_data);
/**
* @brief Requests my device to be joined to remote group.
* @see companion_request_result_callback()
*
*/
-int companion_device_send_data(companion_h handle, companion_device_h device, char *data,
- int len, companion_device_send_data_finish_cb finish_cb, void *user_data);
+int companion_device_send_data(companion_h handle, companion_device_h device,
+ unsigned char *data, int len,
+ companion_device_send_data_finish_cb finish_cb, void *user_data);
/**
* @}
}
EXPORT_API int companion_device_send_data(companion_h handle,
- companion_device_h device, char *data, int len,
+ companion_device_h device, unsigned char *data, int len,
companion_device_send_data_finish_cb finish_cb, void *user_data)
{
int ret = COMP_ERROR_NONE;
- char *buf = NULL;
+ unsigned char *buf = NULL;
+ GVariantBuilder *bytearray_builder = NULL;
+ int i;
+ GVariant *params = NULL;
GError *error = NULL;
CHECK_FEATURE_SUPPORTED(COMPANION_FEATURE);
}
memcpy(buf, data, len);
+ bytearray_builder = g_variant_builder_new(G_VARIANT_TYPE("ay"));
+ for (i = 0; i < len; i++)
+ g_variant_builder_add(bytearray_builder, "y", data[i]);
+
+ params = g_variant_new("(iay)", len, bytearray_builder);
+ g_variant_builder_unref(bytearray_builder);
+
_handle->send_data_finish_cb.finish_cb = finish_cb;
_handle->send_data_finish_cb.user_data = user_data;
group_call_send_data_sync(_handle->group_proxy, dev->device_id, dev->ip,
- dev->sec_port, buf, len, &ret, NULL, &error);
+ dev->sec_port, params, &ret, NULL, &error);
free(buf);
buf = NULL;
}
static void __request_result_cb(Group *object, gchar *cmd, gchar *device_id,
- gchar *arg, gint ret, gpointer user_data)
+ GVariant *arg, gint ret, gpointer user_data)
{
+ int len, length = 0;
+ unsigned char *data;
+ GVariantIter *iter;
+
NOTUSED(object);
comp_manager_s *handle = user_data;
companion_check_null_ret("user_data", user_data);
+ g_variant_get(arg, "(iay)", &len, &iter);
+
+ data = g_try_malloc0(len + 1);
+
+ while (g_variant_iter_loop(iter, "y", &data[length]))
+ length += 1;
+
+ data[length] = '\0';
+ _DBG("Received result length %d data %s", len, data);
+
+ g_variant_iter_free(iter);
+
if (handle->request_result_cb.result_cb)
- handle->request_result_cb.result_cb(cmd, device_id, arg, ret,
+ handle->request_result_cb.result_cb(cmd, device_id, data, len, ret,
handle->request_result_cb.user_data);
}
/* LCOV_EXCL_STOP */
<arg type="s" name="uuid" direction="in" />
<arg type="s" name="addr" direction="in"/>
<arg type="i" name="port" direction="in"/>
- <arg type="s" name="data" direction="in"/>
- <arg type="i" name="len" direction="in"/>
+ <arg type="(iay)" name="data" direction="in"/>
<arg type="i" name="result" direction="out" />
</method>
<method name="FindMownedDevices">
<signal name="RequestResult">
<arg type="s" name="command" direction="out" />
<arg type="s" name="device_id" direction="out" />
- <arg type="s" name="arg" direction="out" />
+ <arg type="(iay)" name="arg" direction="out" />
<arg type="i" name="result" direction="out" />
</signal>
</interface>