Revision: 8838
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8838&view=rev
Author:   jpgr87
Date:     2010-07-29 01:02:07 +0000 (Thu, 29 Jul 2010)

Log Message:
-----------
Applied patch #3035844: Add basic intensity reporting for sicks3000 driver

Modified Paths:
--------------
    code/player/trunk/server/drivers/laser/sicks3000.cc

Modified: code/player/trunk/server/drivers/laser/sicks3000.cc
===================================================================
--- code/player/trunk/server/drivers/laser/sicks3000.cc 2010-07-29 00:58:47 UTC 
(rev 8837)
+++ code/player/trunk/server/drivers/laser/sicks3000.cc 2010-07-29 01:02:07 UTC 
(rev 8838)
@@ -170,6 +170,10 @@
 
     IntProperty mirror;
 
+    // Is the laser upside-down? (if so, we'll reverse the ordering of the
+    // readings)
+    int invert;
+
     bool recognisedScanner;
 
     // Opaque Driver info
@@ -246,6 +250,8 @@
   this->size[0] = 0.15;
   this->size[1] = 0.15;
 
+  this->invert = cf->ReadInt(section, "invert", 0);
+
   this->opaque = NULL;
   // Must have an opaque device
   if (cf->ReadDeviceAddr(&this->opaque_id, section, "requires",
@@ -480,15 +486,26 @@
             SetScannerParams(data_count); // Set up parameters based on number 
of results.
           data_packet.ranges_count = data_count;
           data_packet.ranges = new float [data_count];
+          data_packet.intensity_count = data_count;
+         data_packet.intensity = new uint8_t [data_count];
           for (int ii = 0; ii < data_count; ++ii)
           {
             unsigned short Distance_CM = (*reinterpret_cast<unsigned short *> 
(&data[4 + 2*ii]));
             Distance_CM &= 0x1fff; // remove status bits
             double distance_m = static_cast<double>(Distance_CM)/100.0;
-            if (mirror == 1)
+            if (mirror == 1 || this->invert) {
                data_packet.ranges[data_count - ii - 1] = static_cast<float> 
(distance_m); // Reverse order.
-            else
+               if (data[(4 + 2*ii)+1] & 32)
+                       data_packet.intensity[data_count - ii - 1] = 0xff; // 
Reflex found
+               else
+                       data_packet.intensity[data_count - ii - 1] = 0x00; // 
Reflex not found
+            } else {
                data_packet.ranges[ii] = static_cast<float> (distance_m);
+               if (data[(4 + 2*ii)+1] & 32)
+                       data_packet.intensity[ii] = 0xff; // Reflex found
+               else
+                       data_packet.intensity[ii] = 0x00; // Reflex not found
+           }
           }
 
           this->Publish(this->device_addr,
@@ -496,6 +513,7 @@
                         PLAYER_LASER_DATA_SCAN,
                         (void*)&data_packet);
           delete [] data_packet.ranges;
+         delete [] data_packet.intensity;
 
         }
         else if (data[0] == 0xCC)


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to