コード例 #1
0
typename Generic_obj_space<SPACE>::Capability
Generic_obj_space<SPACE>::lookup(Address virt)
{
  Capability *c = get_cap(virt);

  if (EXPECT_FALSE(!c))
    return Capability(0); // void

  return *c;
}
コード例 #2
0
typename Obj_space_phys<SPACE>::Capability __attribute__((__flatten__))
Obj_space_phys<SPACE>::lookup(Cap_index virt)
{
  Capability *c = get_cap(virt);

  if (EXPECT_FALSE(!c))
    return Capability(0); // void

  return *c;
}
コード例 #3
0
TEST(ReachabilitySphere, convertToCapability)
{
    Capability capability(CONE, 70.0, 55.0, 25.0);
    
    ReachabilitySphere sphere = createReachabilitySphereFromCapability(capability, 500);

    Capability testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CONE);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    ASSERT_EQ(0.0, testCapability.getShapeFitError());


    capability = Capability(CYLINDER_1, 70.0, 55.0, 25.0);
    
    sphere = createReachabilitySphereFromCapability(capability, 10000);

    testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CYLINDER_1);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    // ASSERT_EQ(0.0, testCapability.getShapeFitError());
    // TODO: improve PCA to get correct axis (for now SFE could be 0.0 but is higher)


    capability = Capability(CYLINDER_2, 70.0, 55.0, 25.0);
    
    sphere = createReachabilitySphereFromCapability(capability, 10000);

    testCapability = sphere.convertToCapability();

    ASSERT_TRUE(testCapability.getType() == CYLINDER_2);
    ASSERT_TRUE(std::abs(testCapability.getPhi() - capability.getPhi()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getTheta() - capability.getTheta()) < 2.0);
    ASSERT_TRUE(std::abs(testCapability.getHalfOpeningAngle() - capability.getHalfOpeningAngle()) < 2.0);
    // ASSERT_EQ(0.0, testCapability.getShapeFitError());
}
コード例 #4
0
typename Obj_space_virt<SPACE>::Capability __attribute__((__flatten__))
Obj_space_virt<SPACE>::lookup(Cap_index virt)
{
  Capability *c;
  virt &= Cap_index(~(~0UL << Whole_space));

  if (SPACE::mem_space(this) == Mem_space::current_mem_space(current_cpu()))
    c = reinterpret_cast<Capability*>(cap_virt(virt));
  else
    c = get_cap(virt);

  if (EXPECT_FALSE(!c))
    return Capability(0); // void

  return Mem_layout::read_special_safe(c);
}
コード例 #5
0
typename Generic_obj_space<SPACE>::Capability
Generic_obj_space<SPACE>::lookup(Address virt)
{
  Capability *c;
  virt &= ~(~0UL << Whole_space);

  if (mem_space() == Mem_space::current_mem_space(current_cpu()))
    c = reinterpret_cast<Capability*>(cap_virt(virt));
  else
    c = get_cap(virt);

  if (EXPECT_FALSE(!c))
    return Capability(0); // void

  return Mem_layout::read_special_safe(c);
}
コード例 #6
0
ファイル: xtraz.cpp プロジェクト: Anderty/qutim
XtrazData::XtrazData(const QString &body, const Cookie &cookie) :
	Tlv2711(MsgPlugin, 0, 0, 1, cookie)
{
	appendEmptyPacket();

	// Plugin type ID
	append<quint16>(0x04f, LittleEndian); // Length
	append(Capability(0x3b60b3ef, 0xd82a6c45, 0xa4e09c5a, 0x5e67e865)); // type: xtraz script
	append<quint16>(xtrazNotify, LittleEndian); // Function ID
	append<quint32>(0x002a, LittleEndian); // Request type
	append(QString("Script Plug-in: Remote Notification Arrive"));
	// unknown
	append<quint32>(0x00000100);
	append<quint32>(0x00000000);
	append<quint32>(0x00000000);
	append<quint16>(0x0000);
	append<quint8>(0x00);

	// data
	DataUnit data;
	data.append<quint32>(body, LittleEndian);
	append<quint32>(data.data(), LittleEndian);
}
コード例 #7
0
bool ReachabilityDummyInterface::isReachable(const octomath::Pose6D &pose) const
{
    Capability cap;
    if (pose.y() > 0.04 && pose.y() < 0.06 && pose.z() > 0.44 && pose.z() < 0.46)
    {
        if (pose.x() > 0.14 && pose.x() < 0.16)
        {
            cap = Capability(SPHERE, 0.0, 0.0, 0.0);
        }
        else if (pose.x() > 0.34 && pose.x() < 0.36)
        {
            cap = Capability(CONE, 0.0, 90.0, 15.0);
        }
        else if (pose.x() > 0.54 && pose.x() < 0.56)
        {
            cap = Capability(CONE, 90.0, 0.0, 45.0);
        }
        else if (pose.x() > 0.74 && pose.x() < 0.76)
        {
            cap = Capability(CONE, 90.0, 0.0, 125.0);
        }
        else if (pose.x() > 0.94 && pose.x() < 0.96)
        {
            cap = Capability(CONE, 180.0, 120.0, 70.0);
        }
        else if (pose.x() > 1.14 && pose.x() < 1.16)
        {
            cap = Capability(CYLINDER_1, 0.0, 0.0, 10.0);
        }
        else if (pose.x() > 1.34 && pose.x() < 1.36)
        {
            cap = Capability(CYLINDER_1, 0.0, 0.0, 90.0);
        }
        else if (pose.x() > 1.54 && pose.x() < 1.56)
        {
            cap = Capability(CYLINDER_1, 40.0, 50.0, 45.0);
        }
        else if (pose.x() > 1.74 && pose.x() < 1.76)
        {
            cap = Capability(CYLINDER_2, 0.0, 0.0, 10.0);
        }
        else if (pose.x() > 1.94 && pose.x() < 1.96)
        {
            cap = Capability(CYLINDER_2, 0.0, 0.0, 45.0);
        }
        else if (pose.x() > 2.14 && pose.x() < 2.16)
        {
            cap = Capability(CYLINDER_2, 90.0, 90.0, 89.0);
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }

    octomath::Vector3 unitVector(1.0, 0.0, 0.0);
    octomath::Vector3 rotatedVector = pose.rot().rotate(unitVector);

    double phi = atan2(rotatedVector.y(), rotatedVector.x()) * 180.0 / M_PI;
    double theta = acos(rotatedVector.z()) * 180.0 / M_PI;

    return cap.isDirectionPossible(phi, theta);
}