TEST(Components, RobotDriveStraightTest)
{
    RedBotSpeedController lMotor(0);
    RedBotSpeedController rMotor(1);
    frc::DifferentialDrive drive(lMotor, rMotor);
    MotorDrivePacket* mDrivePacket1;
    MotorDrivePacket* mDrivePacket2;

    drive.ArcadeDrive(1.0, 0.0);

    myPackets.push_back(lMotor.getNextPacket());
    mDrivePacket1 = dynamic_cast<MotorDrivePacket*>(myPackets.back());
    myPackets.push_back(rMotor.getNextPacket());
    mDrivePacket2 = dynamic_cast<MotorDrivePacket*>(myPackets.back());

    CHECK(NULL != mDrivePacket1);
    CHECK(NULL != mDrivePacket2);
    CHECK_EQUAL(255, mDrivePacket1->getSpeed());
    CHECK_EQUAL(255, mDrivePacket2->getSpeed());
    CHECK_EQUAL(MotorDrivePacket::DIR_FORWARD, mDrivePacket1->getDirection());
    CHECK_EQUAL(MotorDrivePacket::DIR_FORWARD, mDrivePacket2->getDirection());

    drive.ArcadeDrive(-1.0, 0.0);

    myPackets.push_back(lMotor.getNextPacket());
    mDrivePacket1 = dynamic_cast<MotorDrivePacket*>(myPackets.back());
    myPackets.push_back(rMotor.getNextPacket());
    mDrivePacket2 = dynamic_cast<MotorDrivePacket*>(myPackets.back());

    CHECK(NULL != mDrivePacket1);
    CHECK(NULL != mDrivePacket2);
    CHECK_EQUAL(255, mDrivePacket1->getSpeed());
    CHECK_EQUAL(255, mDrivePacket2->getSpeed());
    CHECK_EQUAL(MotorDrivePacket::DIR_BACKWARD, mDrivePacket1->getDirection());
    CHECK_EQUAL(MotorDrivePacket::DIR_BACKWARD, mDrivePacket2->getDirection());

    drive.ArcadeDrive(0.5, 0.0);

    myPackets.push_back(lMotor.getNextPacket());
    mDrivePacket1 = dynamic_cast<MotorDrivePacket*>(myPackets.back());
    myPackets.push_back(rMotor.getNextPacket());
    mDrivePacket2 = dynamic_cast<MotorDrivePacket*>(myPackets.back());

    CHECK(NULL != mDrivePacket1);
    CHECK(NULL != mDrivePacket2);
    CHECK_EQUAL(63, mDrivePacket1->getSpeed());
    CHECK_EQUAL(63, mDrivePacket2->getSpeed());
    CHECK_EQUAL(MotorDrivePacket::DIR_FORWARD, mDrivePacket1->getDirection());
    CHECK_EQUAL(MotorDrivePacket::DIR_FORWARD, mDrivePacket2->getDirection());

    drive.ArcadeDrive(1.5, 0.0);

    myPackets.push_back(lMotor.getNextPacket());
    mDrivePacket1 = dynamic_cast<MotorDrivePacket*>(myPackets.back());
    myPackets.push_back(rMotor.getNextPacket());
    mDrivePacket2 = dynamic_cast<MotorDrivePacket*>(myPackets.back());

    CHECK_EQUAL((MotorDrivePacket*)NULL, mDrivePacket1);
    CHECK_EQUAL((MotorDrivePacket*)NULL, mDrivePacket2);
}
Exemple #2
0
Bool BFFLoaderData::Identify(const Filename& name, UChar* probe, Int32 size)
{
	if (!probe || size < 4)
		return false;
	UInt32* p = (UInt32*)probe, v1 = p[0];
	lMotor(&v1);
	return v1 == 0x42464600;
}
TEST(Components, RobotDriveSimpleTest)
{
    RedBotSpeedController lMotor(0);
    RedBotSpeedController rMotor(1);
    frc::DifferentialDrive drive(lMotor, rMotor);
    myPackets.push_back(lMotor.getNextPacket());

    CHECK_EQUAL((Packet*)NULL, myPackets.back());

    drive.ArcadeDrive(0.0, 0.0);
    myPackets.push_back(lMotor.getNextPacket());

    CHECK(NULL != myPackets.back());
    CHECK(NULL != dynamic_cast<MotorDrivePacket*>(myPackets.back()));

    MotorDrivePacket* mDrivePacket1 = static_cast<MotorDrivePacket*>(myPackets.back());

    CHECK_EQUAL(0, mDrivePacket1->getSpeed());
    CHECK_EQUAL(MotorDrivePacket::DIR_FORWARD, mDrivePacket1->getDirection());

    myPackets.push_back(rMotor.getNextPacket());

    CHECK(NULL != myPackets.back());
    CHECK(NULL != dynamic_cast<MotorDrivePacket*>(myPackets.back()));

    MotorDrivePacket* mDrivePacket2 = static_cast<MotorDrivePacket*>(myPackets.back());

    CHECK_EQUAL(0, mDrivePacket2->getSpeed());
    CHECK_EQUAL(MotorDrivePacket::DIR_FORWARD, mDrivePacket2->getDirection());

    if (mDrivePacket1->getMotor() == MotorDrivePacket::MOTOR_RIGHT)
    {
        CHECK_EQUAL(MotorDrivePacket::MOTOR_LEFT, mDrivePacket2->getMotor())
    }
    else
    {
        CHECK_EQUAL(MotorDrivePacket::MOTOR_RIGHT, mDrivePacket2->getMotor())
    }

    myPackets.push_back(lMotor.getNextPacket());

    CHECK_EQUAL((Packet*)NULL, myPackets.back());
}
TEST(Components, SpeedControllerTest)
{
  RedBotSpeedController lMotor(0);

  myPackets.push_back(lMotor.getNextPacket());

  CHECK_EQUAL((Packet*)NULL, myPackets.back());

  lMotor.Set(1.0);
  myPackets.push_back(lMotor.getNextPacket());

  CHECK(NULL != myPackets.back());
  CHECK(NULL != dynamic_cast<MotorDrivePacket*>(myPackets.back()));

  MotorDrivePacket* mDrivePacket1 = static_cast<MotorDrivePacket*>(myPackets.back());

  CHECK_EQUAL(255, mDrivePacket1->getSpeed());
  CHECK_EQUAL(MotorDrivePacket::DIR_FORWARD, mDrivePacket1->getDirection());
  CHECK_EQUAL(MotorDrivePacket::MOTOR_LEFT, mDrivePacket1->getMotor());

  RedBotSpeedController rMotor(1);

  myPackets.push_back(rMotor.getNextPacket());

  CHECK_EQUAL((Packet*)NULL, myPackets.back());

  rMotor.Set(-0.5);
  myPackets.push_back(rMotor.getNextPacket());

  CHECK(NULL != myPackets.back());
  CHECK(NULL != dynamic_cast<MotorDrivePacket*>(myPackets.back()));

  MotorDrivePacket* mDrivePacket2 = static_cast<MotorDrivePacket*>(myPackets.back());

  CHECK_EQUAL(127, mDrivePacket2->getSpeed());
  CHECK_EQUAL(MotorDrivePacket::DIR_BACKWARD, mDrivePacket2->getDirection());
  CHECK_EQUAL(MotorDrivePacket::MOTOR_RIGHT, mDrivePacket2->getMotor());
}
TEST(Components, CurveDriveTestLinear)
{
    RedBotSpeedController lMotor(0);
    RedBotSpeedController rMotor(1);
    frc::DifferentialDrive drive(lMotor, rMotor);

    // Stationary
    CheckDrive(
            drive,
            myPackets,
            0.0,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                0,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                0,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Drive forward
    CheckDrive(
            drive,
            myPackets,
            1.0,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Drive forward at half speed
    CheckDrive(
            drive,
            myPackets,
            0.5,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Drive backward
    CheckDrive(
            drive,
            myPackets,
            -1.0,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );

    // Drive backward at half speed
    CheckDrive(
            drive,
            myPackets,
            -0.5,
            0.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );

    // Pivot right
    CheckDrive(
            drive,
            myPackets,
            0.0,
            1.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Pivot right at half speed
    CheckDrive(
            drive,
            myPackets,
            0.0,
            0.5,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            false
            );

    // Pivot left
    CheckDrive(
            drive,
            myPackets,
            0.0,
            -1.0,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                255,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                255,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );

    // Pivot left at half speed
    CheckDrive(
            drive,
            myPackets,
            0.0,
            -0.5,
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_RIGHT,
                127,
                MotorDrivePacket::DIR_FORWARD
                ),
            MotorDrivePacket(
                MotorDrivePacket::MOTOR_LEFT,
                127,
                MotorDrivePacket::DIR_BACKWARD
                ),
            false
            );
}