Update of /cvsroot/playerstage/code/player/server/drivers/mixed/p2os
In directory 
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26274/server/drivers/mixed/p2os

Modified Files:
        p2os.cc p2os.h packet.cc packet.h sip.cc sip.h 
Log Message:
applied patch
[ 1876540 ] Separation of publishing data in p2os interfaces.


Index: packet.h
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/mixed/p2os/packet.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** packet.h    29 Nov 2002 17:07:43 -0000      1.1
--- packet.h    15 Feb 2008 08:53:55 -0000      1.2
***************
*** 33,36 ****
--- 33,39 ----
  #include <string.h>
  
+ #include <libplayercore/globals.h>
+ #include <libplayercore/wallclocktime.h>
+ 
  #define PACKET_LEN 256
  
***************
*** 40,43 ****
--- 43,47 ----
    unsigned char packet[PACKET_LEN];
    unsigned char size;
+   double timestamp;
  
    int CalcChkSum();

Index: p2os.cc
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/mixed/p2os/p2os.cc,v
retrieving revision 1.86
retrieving revision 1.87
diff -C2 -d -r1.86 -r1.87
*** p2os.cc     7 Dec 2007 01:50:15 -0000       1.86
--- p2os.cc     15 Feb 2008 08:53:55 -0000      1.87
***************
*** 1382,1389 ****
  
  void
! P2OS::PutData(void)
  {
-   // TODO: something smarter about timestamping.
- 
    // put odometry data
    this->Publish(this->position_id,
--- 1382,1387 ----
  
  void
! P2OS::StandardSIPPutData(double timestampStandardSIP)
  {
    // put odometry data
    this->Publish(this->position_id,
***************
*** 1392,1396 ****
                  (void*)&(this->p2os_data.position),
                  sizeof(player_position2d_data_t),
!                 NULL);
  
    // put sonar data
--- 1390,1394 ----
                  (void*)&(this->p2os_data.position),
                  sizeof(player_position2d_data_t),
!                 &timestampStandardSIP);
  
    // put sonar data
***************
*** 1400,1404 ****
                  (void*)&(this->p2os_data.sonar),
                  sizeof(player_sonar_data_t),
!                 NULL);
    delete this->p2os_data.sonar.ranges;
  
--- 1398,1402 ----
                  (void*)&(this->p2os_data.sonar),
                  sizeof(player_sonar_data_t),
!                 &timestampStandardSIP);
    delete this->p2os_data.sonar.ranges;
  
***************
*** 1409,1413 ****
                  (void*)&(this->p2os_data.aio),
                  sizeof(player_aio_data_t),
!                 NULL);
  
    // put dio data
--- 1407,1411 ----
                  (void*)&(this->p2os_data.aio),
                  sizeof(player_aio_data_t),
!                 &timestampStandardSIP);
  
    // put dio data
***************
*** 1417,1421 ****
                  (void*)&(this->p2os_data.dio),
                  sizeof(player_dio_data_t),
!                 NULL);
  
    // put gripper data
--- 1415,1419 ----
                  (void*)&(this->p2os_data.dio),
                  sizeof(player_dio_data_t),
!                 &timestampStandardSIP);
  
    // put gripper data
***************
*** 1425,1429 ****
                  (void*)&(this->p2os_data.gripper),
                  sizeof(player_gripper_data_t),
!                 NULL);
  
    // put lift data
--- 1423,1427 ----
                  (void*)&(this->p2os_data.gripper),
                  sizeof(player_gripper_data_t),
!                 &timestampStandardSIP);
  
    // put lift data
***************
*** 1433,1437 ****
                  (void*)&(this->p2os_data.lift),
                  sizeof(player_actarray_data_t),
!                 NULL);
  
    // put bumper data
--- 1431,1435 ----
                  (void*)&(this->p2os_data.lift),
                  sizeof(player_actarray_data_t),
!                 &timestampStandardSIP);
  
    // put bumper data
***************
*** 1441,1445 ****
                  (void*)&(this->p2os_data.bumper),
                  sizeof(player_bumper_data_t),
!                 NULL);
  
    // put power data
--- 1439,1443 ----
                  (void*)&(this->p2os_data.bumper),
                  sizeof(player_bumper_data_t),
!                 &timestampStandardSIP);
  
    // put power data
***************
*** 1449,1453 ****
                  (void*)&(this->p2os_data.power),
                  sizeof(player_power_data_t),
!                 NULL);
  
    // put compass data
--- 1447,1451 ----
                  (void*)&(this->p2os_data.power),
                  sizeof(player_power_data_t),
!                 &timestampStandardSIP);
  
    // put compass data
***************
*** 1457,1462 ****
                  (void*)&(this->p2os_data.compass),
                  sizeof(player_position2d_data_t),
!                 NULL);
  
    // put gyro data
    this->Publish(this->gyro_id,
--- 1455,1464 ----
                  (void*)&(this->p2os_data.compass),
                  sizeof(player_position2d_data_t),
!                 &timestampStandardSIP);
! }
  
+ void
+ P2OS::GyroPutData(double timestampGyro)
+ {
    // put gyro data
    this->Publish(this->gyro_id,
***************
*** 1465,1470 ****
                  (void*)&(this->p2os_data.gyro),
                  sizeof(player_position2d_data_t),
!                 NULL);
  
    // put blobfinder data
    this->Publish(this->blobfinder_id,
--- 1467,1476 ----
                  (void*)&(this->p2os_data.gyro),
                  sizeof(player_position2d_data_t),
!                 &timestampGyro);
! }
  
+ void
+ P2OS::BlobfinderPutData(double timestampSERAUX)
+ {
    // put blobfinder data
    this->Publish(this->blobfinder_id,
***************
*** 1473,1478 ****
                  (void*)&(this->p2os_data.blobfinder),
                  sizeof(player_blobfinder_data_t),
!                 NULL);
  
    // put actarray data
    this->Publish(this->actarray_id,
--- 1479,1488 ----
                  (void*)&(this->p2os_data.blobfinder),
                  sizeof(player_blobfinder_data_t),
!                 &timestampSERAUX);
! }
  
+ void
+ P2OS::ActarrayPutData(double timestampArm)
+ {
    // put actarray data
    this->Publish(this->actarray_id,
***************
*** 1481,1485 ****
                  (void*)&(this->p2os_data.actArray),
                  sizeof(player_actarray_data_t),
!                 NULL);
    delete[] this->p2os_data.actArray.actuators;
  
--- 1491,1495 ----
                  (void*)&(this->p2os_data.actArray),
                  sizeof(player_actarray_data_t),
!                 &timestampArm);
    delete[] this->p2os_data.actArray.actuators;
  
***************
*** 1490,1494 ****
                  (void*)&(this->limb_data),
                  sizeof(player_limb_data_t),
!                 NULL);
  
    // put arm gripper data
--- 1500,1504 ----
                  (void*)&(this->limb_data),
                  sizeof(player_limb_data_t),
!                 &timestampArm);
  
    // put arm gripper data
***************
*** 1498,1502 ****
                  (void*)&(this->p2os_data.armGripper),
                  sizeof(player_gripper_data_t),
!                 NULL);
  }
  
--- 1508,1512 ----
                  (void*)&(this->p2os_data.armGripper),
                  sizeof(player_gripper_data_t),
!                 &timestampArm);
  }
  
***************
*** 1605,1611 ****
  {
    P2OSPacket packet;
  
    // zero the combined data buffer.  it will be filled with the latest data
!   // by SIP::Fill()
    memset(&(this->p2os_data),0,sizeof(player_p2os_data_t));
    if((this->psos_fd >= 0) && this->sippacket)
--- 1615,1622 ----
  {
    P2OSPacket packet;
+   double msgTime;
  
    // zero the combined data buffer.  it will be filled with the latest data
!   // by corresponding SIP::Fill*()
    memset(&(this->p2os_data),0,sizeof(player_p2os_data_t));
    if((this->psos_fd >= 0) && this->sippacket)
***************
*** 1629,1637 ****
  
        /* It is a server packet, so process it */
!       this->sippacket->Parse( &packet.packet[3] );
!       this->sippacket->Fill(&(this->p2os_data));
  
        if(publish_data)
!         this->PutData();
      }
      else if(packet.packet[0] == 0xFA && packet.packet[1] == 0xFB &&
--- 1640,1648 ----
  
        /* It is a server packet, so process it */
!       this->sippacket->ParseStandard( &packet.packet[3] );
!       this->sippacket->FillStandard(&(this->p2os_data));
  
        if(publish_data)
!         this->StandardSIPPutData(packet.timestamp);
      }
      else if(packet.packet[0] == 0xFA && packet.packet[1] == 0xFB &&
***************
*** 1644,1647 ****
--- 1655,1659 ----
      {
        // This is an AUX2 serial packet
+       
        if(blobfinder_id.interf)
        {
***************
*** 1649,1656 ****
          /* Be sure to pass data size too (packet[2])! */
          this->sippacket->ParseSERAUX( &packet.packet[2] );
!         this->sippacket->Fill(&(this->p2os_data));
! 
          if(publish_data)
!           this->PutData();
  
          P2OSPacket cam_packet;
--- 1661,1668 ----
          /* Be sure to pass data size too (packet[2])! */
          this->sippacket->ParseSERAUX( &packet.packet[2] );
!         this->sippacket->FillSERAUX(&(this->p2os_data));
!         
          if(publish_data)
!           this->BlobfinderPutData(packet.timestamp);
  
          P2OSPacket cam_packet;
***************
*** 1700,1706 ****
          /* It's a set of gyro measurements */
          this->sippacket->ParseGyro(&packet.packet[2]);
!         this->sippacket->Fill(&(this->p2os_data));
          if(publish_data)
!           this->PutData();
  
          /* Now, the manual says that we get one gyro packet each cycle,
--- 1712,1719 ----
          /* It's a set of gyro measurements */
          this->sippacket->ParseGyro(&packet.packet[2]);
!         this->sippacket->FillGyro(&(this->p2os_data));
! 
          if(publish_data)
!           this->GyroPutData(packet.timestamp);
  
          /* Now, the manual says that we get one gyro packet each cycle,
***************
*** 1730,1734 ****
            joints[ii] = sippacket->armJointPosRads[ii];
          }
!         sippacket->Fill(&p2os_data);
          if(kineCalc)
          {
--- 1743,1747 ----
            joints[ii] = sippacket->armJointPosRads[ii];
          }
!         sippacket->FillArm(&p2os_data);
          if(kineCalc)
          {
***************
*** 1754,1760 ****
            }
          }
        }
!       if(publish_data)
!         this->PutData();
        // Go for another SIP - there had better be one or things will probably 
go boom
        SendReceive(NULL,publish_data);
--- 1767,1774 ----
            }
          }
+         if(publish_data)
+         this->ActarrayPutData(packet.timestamp);
        }
!       
        // Go for another SIP - there had better be one or things will probably 
go boom
        SendReceive(NULL,publish_data);
***************
*** 1773,1776 ****
--- 1787,1791 ----
            // Go for another SIP - there had better be one or things will 
probably go boom
          }
+         
          SendReceive(NULL,publish_data);
        }
***************
*** 1781,1784 ****
--- 1796,1800 ----
      }
    }
+ 
    return(0);
  }

Index: packet.cc
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/mixed/p2os/packet.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** packet.cc   2 Mar 2006 21:39:28 -0000       1.5
--- packet.cc   15 Feb 2008 08:53:55 -0000      1.6
***************
*** 112,115 ****
--- 112,117 ----
        if (prefix[0]==0xFA && prefix[1]==0xFB) break;
        
+       GlobalTime->GetTimeDouble(&timestamp);
+       
        prefix[0]=prefix[1];
        prefix[1]=prefix[2];

Index: sip.h
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/mixed/p2os/sip.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** sip.h       27 Nov 2007 22:20:36 -0000      1.10
--- sip.h       15 Feb 2008 08:53:55 -0000      1.11
***************
*** 83,89 ****
    // Need this value to calculate approx position of lift when in between up 
and down
    double lastLiftPos;
  
    /* returns 0 if Parsed correctly otherwise 1 */
!   void Parse( unsigned char *buffer );
    void ParseSERAUX( unsigned char *buffer );
    void ParseGyro(unsigned char* buffer);
--- 83,92 ----
    // Need this value to calculate approx position of lift when in between up 
and down
    double lastLiftPos;
+   
+   //Timestamping SIP packets
+   //double timeStandardSIP, timeGyro, timeSERAUX, timeArm;
  
    /* returns 0 if Parsed correctly otherwise 1 */
!   void ParseStandard( unsigned char *buffer );
    void ParseSERAUX( unsigned char *buffer );
    void ParseGyro(unsigned char* buffer);
***************
*** 94,98 ****
    void PrintArm ();
    void PrintArmInfo ();
!   void Fill(player_p2os_data_t* data);
  
    SIP(int idx)
--- 97,104 ----
    void PrintArm ();
    void PrintArmInfo ();
!   void FillStandard(player_p2os_data_t* data);
!   void FillSERAUX(player_p2os_data_t* data);
!   void FillGyro(player_p2os_data_t* data);
!   void FillArm(player_p2os_data_t* data);
  
    SIP(int idx)

Index: p2os.h
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/mixed/p2os/p2os.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -C2 -d -r1.35 -r1.36
*** p2os.h      1 Nov 2007 22:16:21 -0000       1.35
--- p2os.h      15 Feb 2008 08:53:55 -0000      1.36
***************
*** 146,162 ****
  typedef struct player_p2os_data
  {
    player_position2d_data_t position;
    player_sonar_data_t sonar;
    player_gripper_data_t gripper;
!   player_gripper_data_t armGripper;
    player_power_data_t power;
    player_bumper_data_t bumper;
    player_dio_data_t dio;
    player_aio_data_t aio;
    player_blobfinder_data_t blobfinder;
!   player_position2d_data_t compass;
    player_position2d_data_t gyro;
!   player_actarray_data_t lift;
    player_actarray_data_t actArray;
  } __attribute__ ((packed)) player_p2os_data_t;
  
--- 146,169 ----
  typedef struct player_p2os_data
  {
+   //Standard SIP
    player_position2d_data_t position;
    player_sonar_data_t sonar;
    player_gripper_data_t gripper;
!   player_actarray_data_t lift;
    player_power_data_t power;
    player_bumper_data_t bumper;
+   player_position2d_data_t compass;
    player_dio_data_t dio;
    player_aio_data_t aio;
+   
+   //Blobfinder
    player_blobfinder_data_t blobfinder;
! 
!   //Gyro
    player_position2d_data_t gyro;
!   
!   //ARMPAC
    player_actarray_data_t actArray;
+   player_gripper_data_t armGripper;
  } __attribute__ ((packed)) player_p2os_data_t;
  
***************
*** 226,230 ****
                       void* data);
      int HandleCommand(player_msghdr * hdr, void * data);
!     void PutData(void);
      void HandlePositionCommand(player_position2d_cmd_vel_t position_cmd);
      int HandleGripperCommand (player_msghdr *hdr, void *data);
--- 233,240 ----
                       void* data);
      int HandleCommand(player_msghdr * hdr, void * data);
!     void StandardSIPPutData(double timestampStandardSIP);
!     void GyroPutData(double timestampGyro);
!     void BlobfinderPutData(double timestampSERAUX);
!     void ActarrayPutData(double timestampArm);
      void HandlePositionCommand(player_position2d_cmd_vel_t position_cmd);
      int HandleGripperCommand (player_msghdr *hdr, void *data);

Index: sip.cc
===================================================================
RCS file: /cvsroot/playerstage/code/player/server/drivers/mixed/p2os/sip.cc,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -d -r1.29 -r1.30
*** sip.cc      7 Dec 2007 01:50:15 -0000       1.29
--- sip.cc      15 Feb 2008 08:53:55 -0000      1.30
***************
*** 43,47 ****
  static player_blobfinder_blob_t cmucamBlob;
  
! void SIP::Fill(player_p2os_data_t* data)
  {
    ///////////////////////////////////////////////////////////////
--- 43,47 ----
  static player_blobfinder_blob_t cmucamBlob;
  
! void SIP::FillStandard(player_p2os_data_t* data)
  {
    ///////////////////////////////////////////////////////////////
***************
*** 80,88 ****
  
    ///////////////////////////////////////////////////////////////
-   // gyro
-   memset(&(data->gyro),0,sizeof(data->gyro));
-   data->gyro.pos.pa = DTOR(this->gyro_rate);
- 
-   ///////////////////////////////////////////////////////////////
    // sonar
    data->sonar.ranges_count = PlayerRobotParams[param_idx].SonarNum;
--- 80,83 ----
***************
*** 174,178 ****
--- 169,184 ----
      data->aio.voltages = new float[1];
    data->aio.voltages[0] = (this->analog / 255.0) * 5.0;
+ }
  
+ void SIP::FillGyro(player_p2os_data_t* data)
+ {
+   ///////////////////////////////////////////////////////////////
+   // gyro
+   memset(&(data->gyro),0,sizeof(data->gyro));
+   data->gyro.pos.pa = DTOR(this->gyro_rate);
+ }
+ 
+ void SIP::FillSERAUX(player_p2os_data_t* data)
+ {
    /* CMUcam blob tracking interface.  The CMUcam only supports one blob
    ** (and therefore one channel too), so everything else is zero.  All
***************
*** 205,209 ****
--- 211,218 ----
    else
      data->blobfinder.blobs_count = 0;
+ }
  
+ void SIP::FillArm(player_p2os_data_t* data)
+ {
    ///////////////////////////////////////////////////////////////
    // Fill in arm data
***************
*** 329,333 ****
  }
  
! void SIP::Parse( unsigned char *buffer )
  {
    int cnt = 0, change;
--- 338,342 ----
  }
  
! void SIP::ParseStandard( unsigned char *buffer )
  {
    int cnt = 0, change;


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to