Revision: 8183
          http://playerstage.svn.sourceforge.net/playerstage/?rev=8183&view=rev
Author:   gbiggs
Date:     2009-08-07 08:14:17 +0000 (Fri, 07 Aug 2009)

Log Message:
-----------
Applied patch #2832758: p2os big patch

Modified Paths:
--------------
    code/player/trunk/server/drivers/mixed/p2os/p2os.cc
    code/player/trunk/server/drivers/mixed/p2os/p2os.h
    code/player/trunk/server/drivers/mixed/p2os/packet.cc
    code/player/trunk/server/drivers/mixed/p2os/packet.h
    code/player/trunk/server/drivers/mixed/p2os/robot_params.h

Modified: code/player/trunk/server/drivers/mixed/p2os/p2os.cc
===================================================================
--- code/player/trunk/server/drivers/mixed/p2os/p2os.cc 2009-08-07 08:08:34 UTC 
(rev 8182)
+++ code/player/trunk/server/drivers/mixed/p2os/p2os.cc 2009-08-07 08:14:17 UTC 
(rev 8183)
@@ -292,9 +292,11 @@
 - armgrip_innersize (3 floats, metres)
   - Default: (0.054, 0.025, 1.0)
   - Size of the inside of the arm's gripper (largest object it can hold)
+- oldschool (integer)
+  - Default: 0 (no effect)
+  - If set to 1, checksum will be compared the same way as in older versions 
of this driver
 
 
-
 @par Example
 
 @verbatim
@@ -558,6 +560,7 @@
   ::initialize_robot_params();
 
   // Read config file options
+  this->oldschool = cf->ReadInt(section, "oldschool", 0);
   this->bumpstall = cf->ReadInt(section,"bumpstall",-1);
   this->pulse = cf->ReadFloat(section,"pulse",-1);
   this->rot_kp = cf->ReadInt(section, "rot_kp", -1);
@@ -700,7 +703,7 @@
   // connection code might not work (i think that the radio modems operate at
   // 9600).
   int bauds[] = {B9600, B38400, B19200, B115200, B57600};
-  int numbauds = sizeof(bauds);
+  int numbauds = sizeof bauds / sizeof(int);
   int currbaud = 0;
 
   struct termios term;
@@ -791,7 +794,11 @@
     fflush(stdout);
 
     if((this->psos_fd = open(this->psos_serial_port,
+#ifdef __QNXNTO__
+                     O_RDWR | O_NONBLOCK, S_IRUSR | S_IWUSR )) < 0 )
+#else
                      O_RDWR | O_SYNC | O_NONBLOCK, S_IRUSR | S_IWUSR )) < 0 )
+#endif
     {
       perror("P2OS::Setup():open():");
       return(1);
@@ -991,7 +998,7 @@
     }
     usleep(P2OS_CYCLETIME_USEC);
 
-    if(receivedpacket.Receive(this->psos_fd))
+    if(receivedpacket.Receive(this->psos_fd, this->oldschool))
     {
       if((psos_state == NO_SYNC) && (num_sync_attempts >= 0))
       {
@@ -1064,7 +1071,6 @@
 
   if(psos_state != READY)
   {
-    if(this->psos_use_tcp)
     printf("Couldn't synchronize with P2OS.\n"
            "  Most likely because the robot is not connected %s %s\n",
            this->psos_use_tcp ? "to the ethernet-serial bridge device " : "to 
the serial port",
@@ -1111,7 +1117,6 @@
             "using defaults\n",stderr);
     param_idx = 0;
   }
-
   // first, receive a packet so we know we're connected.
   if(!this->sippacket)
     this->sippacket = new SIP(param_idx);
@@ -1723,7 +1728,7 @@
 
     /* receive a packet */
     pthread_testcancel();
-    if(packet.Receive(this->psos_fd))
+    if(packet.Receive(this->psos_fd, this->oldschool))
     {
       puts("RunPsosThread(): Receive errored");
       pthread_exit(NULL);

Modified: code/player/trunk/server/drivers/mixed/p2os/p2os.h
===================================================================
--- code/player/trunk/server/drivers/mixed/p2os/p2os.h  2009-08-07 08:08:34 UTC 
(rev 8182)
+++ code/player/trunk/server/drivers/mixed/p2os/p2os.h  2009-08-07 08:14:17 UTC 
(rev 8183)
@@ -225,6 +225,8 @@
 class P2OS : public ThreadedDriver
 {
   private:
+    int oldschool;
+
     player_p2os_data_t p2os_data;
 
     player_devaddr_t position_id;

Modified: code/player/trunk/server/drivers/mixed/p2os/packet.cc
===================================================================
--- code/player/trunk/server/drivers/mixed/p2os/packet.cc       2009-08-07 
08:08:34 UTC (rev 8182)
+++ code/player/trunk/server/drivers/mixed/p2os/packet.cc       2009-08-07 
08:14:17 UTC (rev 8183)
@@ -55,14 +55,20 @@
 }
 
 
-bool P2OSPacket::Check() {
+bool P2OSPacket::Check(bool oldschool) {
   short chksum;
   chksum = CalcChkSum();
 
-  if ( chksum == (packet[size-2] << 8 | packet[size-1]))
-    return(true);
+  if (oldschool)
+  {
+    if ( (chksum == packet[size-2] << 8) | packet[size-1])
+      return(true);
+  } else
+  {
+    if ( chksum == (packet[size-2] << 8 | packet[size-1]))
+      return(true);
+  }
 
-
   return(false);
 }
 
@@ -84,7 +90,7 @@
   return(c);
 }
 
-int P2OSPacket::Receive( int fd )
+int P2OSPacket::Receive( int fd, bool oldschool )
 {
   unsigned char prefix[3];
   //int skipped=0;
@@ -131,7 +137,7 @@
         return(1);
       }
     }
-  } while (!Check());
+  } while (!Check(oldschool));
   return(0);
 }
 

Modified: code/player/trunk/server/drivers/mixed/p2os/packet.h
===================================================================
--- code/player/trunk/server/drivers/mixed/p2os/packet.h        2009-08-07 
08:08:34 UTC (rev 8182)
+++ code/player/trunk/server/drivers/mixed/p2os/packet.h        2009-08-07 
08:14:17 UTC (rev 8183)
@@ -50,8 +50,8 @@
   void PrintHex();
   int Build( unsigned char *data, unsigned char datasize );
   int Send( int fd );
-  int Receive( int fd );
-  bool Check();
+  int Receive( int fd, bool oldschool );
+  bool Check(bool oldschool = false);
   
   bool operator!= ( P2OSPacket p ) {
     if ( size != p.size) return(true);

Modified: code/player/trunk/server/drivers/mixed/p2os/robot_params.h
===================================================================
--- code/player/trunk/server/drivers/mixed/p2os/robot_params.h  2009-08-07 
08:08:34 UTC (rev 8182)
+++ code/player/trunk/server/drivers/mixed/p2os/robot_params.h  2009-08-07 
08:14:17 UTC (rev 8183)
@@ -190,7 +190,7 @@
   int Qtt; //
   int Qxx; //
   int Qyy; //
-  int RangeConvFactor; //
+  double RangeConvFactor; //
   int RearBumpers; //
   int RecoverOnFail; //
   int ReflectorMatchDist; //


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

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to