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