Re: HDP, can't read data from fd which Acquire from HealthChannel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2011/4/8 Yi Hui Fan <yihuifan@xxxxxxxxxx>:
> Jose,
>
>
>> Jose Antonio Santos Cadenas <santoscadenas@xxxxxxxxx>
>> Sent by: linux-bluetooth-owner@xxxxxxxxxxxxxxx
>>
>> 2011-04-08 15:04
>>
>> To
>>
>> Yi Hui Fan/China/IBM@IBMCN
>>
>> cc
>>
>> linux-bluetooth@xxxxxxxxxxxxxxx
>>
>> Subject
>>
>> Re: HDP, can't read data from fd which Acquire from HealthChannel
>>
>> Hi,
>>
>> 2011/4/8 Yi Hui Fan <yihuifan@xxxxxxxxxx>:
>> > Dears
>> >
>> > I'd like to build a demo for HDP sink. I try to use the DBUS API
> provided
>> > by Bluez. But there is a problem with unix fd to receive data.
>> >
>> > I can get fd by calling HealthChannel.Acquire method.  following is
> the
>> > code I write to read data according the sock I got.
>> >
>> >        fd_set rfds;
>> >        struct timeval tv;
>> >        int rv;
>> >        char buff[1024];
>> >
>> >        FD_ZERO(&rfds);
>> >        FD_SET(sock, &rfds);
>> >        tv.tv_sec = 10;
>> >        tv.tv_usec = 500;
>> >
>> >        rv = select(sock+1, &rfds, NULL, NULL, &tv);
>> >
>> >        rv = recv(sock, buff, 1024, 0);
>> >
>> > rv is always return 0 when I call select method. I can't get anything.
>> >
>> > Any problem with these codes?
>>
>> It seems that you don't have a valid file descriptor. How are you
>> getting the file descriptor? Are you using Dbus 1.4?
>>
>
> Yes, I am using Dbus 1.4.
> I got the file descriptor by calling Acquire method of HealthChannel. Here
> is the code I wrote to get file descriptor.
>
>        DBusConnection* conn;
>        DBusError err;
>        DBusMessage* msg;
>        DBusMessage* reply;
>        DBusMessageIter *iter;
>
>        int sock;
>
>        dbus_error_init(&err);
>        printf("start get dbus connection\n");
>        conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
>        if (dbus_error_is_set(&err)) {
>                fprintf(stderr, "Connection Error (%s)\n", err.message);
>                dbus_error_free(&err);
>                return -1;
>        }
>
>        if((msg = dbus_message_new_method_call("org.bluez", channel_path,
> "org.bluez.HealthChannel",
>                        "Acquire"))==NULL)
>        {
>                dbus_message_unref(msg);
>                printf("initial msg failed!");
>                return -1;
>        }
>
>        reply = dbus_connection_send_with_reply_and_block(conn, msg, -1,
> &err);
>
>        dbus_message_get_args(reply, &err, DBUS_TYPE_UNIX_FD, &sock,
> DBUS_TYPE_INVALID);

The err variable should be initialized each time you use it and you
should also check the ret value of the previous function if fail, err
will contain a description.

You can also use dbus_error_is_set(&err) in order to check for errors.

>
>        dbus_message_unref(msg);
>        dbus_message_unref(reply);
>        dbus_connection_unref(conn);
>
>        return sock;
>
>>
>> >
>> > Thanks &
>> > Best regards,
>>
>> Regards
>>
>> Jose.
>>
>> >
>> > Yihui,Fan
>> --
>> To unsubscribe from this list: send the line "unsubscribe
> linux-bluetooth" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> 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@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux