List Info

Thread: reading RSSI value with D-Bus Api




reading RSSI value with D-Bus Api
user name
2007-04-05 04:26:46
Hello,
reading another post here, I saw Marcel hinted to use the inquiry from D-Bus API to sort the devices by their RSSI so I tried a simple test

this is the part of code I'm using
...

 if (dbus_message_is_signal(msg, " org.bluez.Adapter",  ;  "RemoteDeviceFound")) {
       ;   printf ("Remote Device Found Signal Receivedn");
        ;
             while (dbus_message_iter_get_arg_type(&iter)  !=  DBUS_TYPE_INVALID)  {
   ;              switch (dbus_message_iter_get_arg_type(&item)) {
       ;              case DBUS_TYPE_STRING:  /* first pameter bdaddress */
     ;                 .....                                                 
     ;                break;
        ;             case DBUS_TYPE_UINT32: /* second parameter class of device */
     ;                ........
         ;           break; 
                    
                     case DBUS_TYPE_INT16: /* rssi */
 ;                        dbus_message_iter_get_basic(&;args, &rssi);
                         printf("rssi: %dn", rssi);
        ;                 break;
        ;            
......



Now the problem is: I can read the bdaddress and the device class good, but the RSSI values I get from variuous devices are negatives (the are in range -40 -90 usually). I read somewhere RSSI should range from 0 to 255 so maybe I'm doing something wrong ? api says the type RSSI is int16 not uint16 so I used a signed variable.


Re: reading RSSI value with D-Bus Api
country flaguser name
Germany
2007-04-05 04:28:42
Hi Emanuele,

> reading another post here, I saw Marcel hinted to use
the inquiry from
> D-Bus API to sort the devices by their RSSI so I tried
a simple test
> 
> this is the part of code I'm using
> ...
> 
>  if (dbus_message_is_signal(msg, "
org.bluez.Adapter",
> "RemoteDeviceFound")) {
>           printf ("Remote Device Found Signal
Receivedn");
>          
>              while
(dbus_message_iter_get_arg_type(&iter)  !=
> DBUS_TYPE_INVALID)  { 
>                  switch
(dbus_message_iter_get_arg_type(&item)) {
>                      case DBUS_TYPE_STRING:  /* first
pameter
> bdaddress */
>                       .....
>        
>                      break;
>                      case DBUS_TYPE_UINT32: /* second
parameter class
> of device */
>                      ........ 
>                     break;  
>                      
>                      case DBUS_TYPE_INT16: /* rssi */ 
>                         
dbus_message_iter_get_basic(&args, &rssi);
>                          printf("rssi: %dn",
rssi);
>                          break;
>                      
> ......
> 
> 
> 
> Now the problem is: I can read the bdaddress and the
device class
> good, but the RSSI values I get from variuous devices
are negatives
> (the are in range -40 -90 usually). I read somewhere
RSSI should range
> from 0 to 255 so maybe I'm doing something wrong ? api
says the type
> RSSI is int16 not uint16 so I used a signed variable. 

the RSSI value is a signed int8 actually (except that D-Bus
doesn't
support this type). You might confuse this with the link
quality value,
but the RSSI is always signed.

Regards

Marcel



------------------------------------------------------------
-------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the
chance to share your
opinions on IT & business topics through brief
surveys-and earn cash
http://www.techsay.com/default.
php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Bluez-users mailing list
Bluez-userslists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bluez-users


Re: reading RSSI value with D-Bus Api
user name
2007-04-05 04:36:14
Hi Marcel,

I'm referring to this function (from bluez dbus-api) where the rssi parameter is int16

----
void RemoteDeviceFound(string address, uint32 class, int16 rssi)

            This signal will be send every time an inquiry result
            has been found by the service daemon. In general they
 ;           only appear during a device discovery.
----

you posted in another thread you can use that value to check how close is the remote device to the dongle who does inquiry. Maybe I'm wrong and that's not the correct value to check for this purpose?
Anyway the third parameter I read with the snipped code I posted is negative.

[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )