00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "ariaOSDef.h"
00028 #include "ArExport.h"
00029 #include "ArRobotConfigPacketReader.h"
00030 #include "ArRobot.h"
00031 #include "ArRobotPacket.h"
00032 #include "ArCommands.h"
00033
00041 ArRobotConfigPacketReader::ArRobotConfigPacketReader(ArRobot *robot, bool onlyOneRequest) :
00042 myPacketHandlerCB(this, &ArRobotConfigPacketReader::packetHandler),
00043 myConnectedCB(this, &ArRobotConfigPacketReader::connected)
00044 {
00045 myRobot = robot;
00046 myRobot->addPacketHandler(&myPacketHandlerCB);
00047 myRobot->addConnectCB(&myConnectedCB);
00048 myOnlyOneRequest = onlyOneRequest;
00049 myPacketRequested = false;
00050 myPacketArrived = false;
00051 }
00052
00053 ArRobotConfigPacketReader::~ArRobotConfigPacketReader(void)
00054 {
00055 myRobot->remPacketHandler(&myPacketHandlerCB);
00056 myRobot->remConnectCB(&myConnectedCB);
00057 }
00058
00059 bool ArRobotConfigPacketReader::requestPacket(void)
00060 {
00061
00062 if (myOnlyOneRequest && myPacketArrived)
00063 return false;
00064
00065 if (myPacketRequested && myLastPacketRequest.mSecSince() < 200)
00066 return true;
00067
00068 myPacketArrived = false;
00069 myPacketRequested = true;
00070 myLastPacketRequest.setToNow();
00071 myRobot->comInt(ArCommands::CONFIG, 1);
00072 return true;
00073 }
00074
00075 void ArRobotConfigPacketReader::connected(void)
00076 {
00077 if (myPacketRequested)
00078 myRobot->comInt(ArCommands::CONFIG, 1);
00079 }
00080
00081 bool ArRobotConfigPacketReader::packetHandler(ArRobotPacket *packet)
00082 {
00083 char buf[256];
00084
00085
00086 if (packet->getID() != 0x20)
00087 return false;
00088
00089 if (myPacketArrived)
00090 return false;
00091
00092 if (!myPacketRequested)
00093 return false;
00094
00095 myPacketRequested = false;
00096 myPacketArrived = true;
00097
00098 packet->bufToStr(buf, sizeof(buf));
00099 myType = buf;
00100 packet->bufToStr(buf, sizeof(buf));
00101 mySubType = buf;
00102 packet->bufToStr(buf, sizeof(buf));
00103 mySerialNumber = buf;
00104 packet->bufToUByte();
00105 myRotVelTop = packet->bufToUByte2();
00106 myTransVelTop = packet->bufToUByte2();
00107 myRotAccelTop = packet->bufToUByte2();
00108 myTransAccelTop = packet->bufToUByte2();
00109 myPwmMax = packet->bufToUByte2();
00110 packet->bufToStr(buf, sizeof(buf));
00111 myName = buf;
00112 mySipCycleTime = packet->bufToUByte();
00113 myHostBaud = packet->bufToUByte();
00114 myAux1Baud = packet->bufToUByte();
00115 myHasGripper = (bool)packet->bufToUByte2();
00116 myFrontSonar = (bool) packet->bufToUByte2();
00117 myRearSonar = (bool) packet->bufToUByte();
00118 myLowBattery = packet->bufToUByte2();
00119 myRevCount = packet->bufToUByte2();
00120 myWatchdog = packet->bufToUByte2();
00121 myNormalMPacs = (bool) packet->bufToUByte();
00122 myStallVal = packet->bufToUByte2();
00123 myStallCount = packet->bufToUByte2();
00124 myJoyVel = packet->bufToUByte2();
00125 myJoyRotVel = packet->bufToUByte2();
00126 myRotVelMax = packet->bufToUByte2();
00127 myTransVelMax = packet->bufToUByte2();
00128 myRotAccel = packet->bufToUByte2();
00129 myRotDecel = packet->bufToUByte2();
00130 myRotKP = packet->bufToUByte2();
00131 myRotKV = packet->bufToUByte2();
00132 myRotKI = packet->bufToUByte2();
00133 myTransAccel = packet->bufToUByte2();
00134 myTransDecel = packet->bufToUByte2();
00135 myTransKP = packet->bufToUByte2();
00136 myTransKV = packet->bufToUByte2();
00137 myTransKI = packet->bufToUByte2();
00138 myFrontBumps = packet->bufToUByte();
00139 myRearBumps = packet->bufToUByte();
00140 myHasCharger = packet->bufToUByte();
00141 mySonarCycle = packet->bufToUByte();
00142 if (packet->bufToUByte() == 2)
00143 myResetBaud = true;
00144 else
00145 myResetBaud = false;
00146 if (packet->bufToUByte() == 1)
00147 myHasGyro = true;
00148 else
00149 myHasGyro = false;
00150 myDriftFactor = packet->bufToUByte2();
00151 myAux2Baud = packet->bufToUByte();
00152 myAux3Baud = packet->bufToUByte();
00153 myTicksMM = packet->bufToUByte2();
00154 myShutdownVoltage = packet->bufToUByte2();
00155 return true;
00156 }
00157
00158 void ArRobotConfigPacketReader::log(void) const
00159 {
00160 ArLog::log(ArLog::Terse, "General information:");
00161 ArLog::log(ArLog::Terse, "Robot is type '%s' subtype '%s'",
00162 getType(), getSubType());
00163 ArLog::log(ArLog::Terse, "serial number '%s' name '%s'",
00164 getSerialNumber(), getName());
00165 ArLog::log(ArLog::Terse, "Intrinsic properties and unsettable maxes:");
00166 ArLog::log(ArLog::Terse, "RotVelTop %d RotAccelTop %d",
00167 getRotVelTop(), getRotAccelTop());
00168 ArLog::log(ArLog::Terse, "TransVelTop %d TransAccelTop %d",
00169 getTransVelTop(), getTransAccelTop());
00170 ArLog::log(ArLog::Terse, "PWMMax %d ResetBaud %s", getPwmMax(),
00171 ArUtil::convertBool(getResetBaud()));
00172 ArLog::log(ArLog::Terse, "Current values:");
00173 ArLog::log(ArLog::Terse, "RotVelMax %d RotAccel %d RotDecel %d",
00174 getRotVelMax(), getRotAccel(), getRotDecel());
00175 ArLog::log(ArLog::Terse, "TransVelMax %d TransAccel %d TransDecel %d",
00176 getTransVelMax(), getTransAccel(), getTransDecel());
00177
00178 ArLog::log(ArLog::Terse, "Accessories:");
00179 ArLog::log(ArLog::Terse,
00180 "Gripper %s FrontSonar %s RearSonar %s Charger %d Gyro %s",
00181 ArUtil::convertBool(getHasGripper()),
00182 ArUtil::convertBool(getFrontSonar()),
00183 ArUtil::convertBool(getRearSonar()),
00184 getHasCharger(),
00185 ArUtil::convertBool(getHasGyro()));
00186 ArLog::log(ArLog::Terse, "FrontBumps %d RearBumps %d",
00187 getFrontBumps(), getRearBumps());
00188 ArLog::log(ArLog::Terse, "Settings:");
00189 ArLog::log(ArLog::Terse, "SipCycle %d SonarCycle %d HostBaud %d Aux1Baud %d ", getSipCycleTime(), getSonarCycle(), getHostBaud(), getAux1Baud());
00190 ArLog::log(ArLog::Terse, "StallVal %d StallCount %d RevCount %d Watchdog %d ",
00191 getStallVal(), getStallCount(), getRevCount(), getWatchdog());
00192
00193 ArLog::log(ArLog::Terse, "JoyVel %d JoyRVel %d NormalMotorPackets %s ", getJoyVel(), getJoyRotVel(), ArUtil::convertBool(getNormalMPacs()));
00194 ArLog::log(ArLog::Terse, "PID Settings:");
00195 ArLog::log(ArLog::Terse, "Rot kp %d kv %d ki %d", getRotKP(), getRotKV(),
00196 getRotKI());
00197 ArLog::log(ArLog::Terse, "Trans kp %d kv %d ki %d", getTransKP(),
00198 getTransKV(), getTransKI());
00199 ArLog::log(ArLog::Terse, "DriftFactor %d", getDriftFactor());
00200 ArLog::log(ArLog::Terse, "Aux2Baud setting %d, Aux3Baud setting %d", getAux2Baud(), getAux3Baud());
00201 ArLog::log(ArLog::Terse, "TicksMM: %d", getTicksMM());
00202 ArLog::log(ArLog::Terse, "Shutdown Voltage: %d", getShutdownVoltage());
00203 }