Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 37 additions & 9 deletions Orbitersdk/samples/ProjectApollo/src_lm/lemsystems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2479,6 +2479,8 @@ void LEM::CreateMissionSpecificSystems()
aeaa = new LEM_AEAA();
}
EventTimerDisplay.SetReverseAtZero(pMission->IsLMEventTimerReversingAtZero());
LR.SelfTest(pMission->GetLMNumber());
RR.SelfTest(pMission->GetLMNumber());
}

// SYSTEMS COMPONENTS
Expand Down Expand Up @@ -2580,32 +2582,58 @@ bool LEM_RadarTape::TimingFailure()
return false;
}


void LEM_RadarTape::Timestep(double simdt) {

if (!IsPowered())
{
return;
}

if( lem->AltRngMonSwitch.GetState()==TOGGLESWITCH_UP ) {
setRange(lem->RR.GetRadarRange());
setRate(lem->RR.GetRadarRate());
}

if (lem->AltRngMonSwitch.GetState()==TOGGLESWITCH_UP) {
if (lem->RadarTestSwitch.GetState() == THREEPOSSWITCH_UP && lem->RR.GetRadarRate() == 0.0)
{
setRange(lem->RR.GetRadarRange());
setRate(lem->RR.GetRadarRate());
}
else if (lem->RadarTestSwitch.GetState() == THREEPOSSWITCH_UP)
{
setRange(lem->RR.GetRadarRange());
setRate(lem->RR.GetRadarRate() - 0.6096); // 2 f/s bias from procedures (TM=R2-2)
}
else
{
setRange(lem->RR.GetRadarRange());
setRate(lem->RR.GetRadarRate());
}
}
else {
if (lem->ModeSelSwitch.IsUp()) // LR
{
if (lem->LR.IsRangeDataGood())
{
setRange(lem->LR.GetAltitude());
if (lem->LR.antennaAngle == 0)
{
setRange(lem->LR.GetAltitude() * cos(Radians(15))); // Tapemeter slant range bias of cos 15 deg in position 2
}
else
{
setRange(lem->LR.GetAltitude()); // Position 1
}
}
else
{
setRange(0);
}
if (lem->LR.IsVelocityDataGood())
{
setRate(lem->LR.GetAltitudeRate());
if ((lem->pMission->GetLMNumber()) == 3)
{
setRate(lem->LR.GetAltitudeRate() * 1.82388664); // Generates seen rate signal from LM-3 \\FIXME: This is a hack, need to investigate why LM-3 generates this rate signal
}
else
{
setRate(lem->LR.GetAltitudeRate());
}
}
/*else
{
Expand Down
111 changes: 79 additions & 32 deletions Orbitersdk/samples/ProjectApollo/src_lm/lm_lr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ LEM_LR::LEM_LR()
lrheat = 0;
antennaAngle = 24; // Position 1

//LM-5 Defaults
rangetest = 8287;
ratetest[0] = -494;
ratetest[1] = 1861;
ratetest[2] = 1331;
altxmtr = 3.5;
velxmtr = 3.6;
}

void LEM_LR::Init(LEM *s, e_object *dc_src, h_Radiator *ant, Boiler *anheat, h_HeatLoad *hl) {
Expand Down Expand Up @@ -128,7 +135,7 @@ double LEM_LR::GetAltTransmitterPower()
return 0;
}

return 3.0;
return altxmtr;
}

double LEM_LR::GetVelTransmitterPower()
Expand All @@ -138,11 +145,11 @@ double LEM_LR::GetVelTransmitterPower()
return 0;
}

return 3.0;
return velxmtr;
}

void LEM_LR::Timestep(double simdt) {

if (lem == NULL) { return; }
//LR Mesh Animation
if (lem->stage < 2) {
Expand Down Expand Up @@ -250,35 +257,14 @@ void LEM_LR::Timestep(double simdt) {
}

// Data Determination
if (lem->RadarTestSwitch.GetState() == THREEPOSSWITCH_DOWN) {
if (antennaAngle == 0) {
// Test Mode POS 2
// Drive to:
//
//
//
//
range = 8000;
rate[0] = -494;
rate[1] = 1861;
rate[2] = 1331;
rangeGood = 1;
velocityGood = 1;
}
else {
// Test Mode
// Drive to:
// Alt 8287 ft
// Vel -494,1861,1331 ft/sec
// on the LGC
// For some reason this should show up as 8000 ft and -480 fps on the alt/alt-rate monitor?
range = 8287;
rate[0] = -494;
rate[1] = 1861;
rate[2] = 1331;
rangeGood = 1;
velocityGood = 1;
}
if (lem->RadarTestSwitch.GetState() == THREEPOSSWITCH_DOWN)
{
range = rangetest;
rate[0] = ratetest[0];
rate[1] = ratetest[1];
rate[2] = ratetest[2];
rangeGood = 1;
velocityGood = 1;
}
else {
// Operate Mode
Expand Down Expand Up @@ -402,6 +388,67 @@ void LEM_LR::SystemTimestep(double simdt)
}
}

void LEM_LR::SelfTest(int LMNumber)
{
switch (LMNumber)
{
case 3: //LM-3
{
rangetest = 8287;
ratetest[0] = -247;
ratetest[1] = 930;
ratetest[2] = 666;
altxmtr = 3.6;
velxmtr = 3.8;
}
break;
case 4: //LM-4
{
rangetest = 8276;
ratetest[0] = -247;
ratetest[1] = -929;
ratetest[2] = 665;
altxmtr = 3.6;
velxmtr = 3.6;
}
break;
case 5: //LM-5
{
rangetest = 8275;
ratetest[0] = -494;
ratetest[1] = 1858;
ratetest[2] = 1329;
altxmtr = 3.5;
velxmtr = 3.6;
}
break;
case 6: //LM-6
case 7: //LM-7
case 8: //LM-8
case 11: //LM-11
case 12: //LM-12
{
rangetest = 8286;
ratetest[0] = -495;
ratetest[1] = 1862;
ratetest[2] = 1331;
altxmtr = 3.5;
velxmtr = 3.6;
}
break;
case 10: //LM-10
{
rangetest = 8287;
ratetest[0] = -495;
ratetest[1] = 1862;
ratetest[2] = 1331;
altxmtr = 3.5;
velxmtr = 3.6;
}
break;
}
}

void LEM_LR::DefineAnimations(UINT idx) {

//LR Mode Animation
Expand Down
4 changes: 4 additions & 0 deletions Orbitersdk/samples/ProjectApollo/src_lm/lm_lr.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class LEM_LR : public e_object {
void DeleteAnimations();

bool IsPowered();
void SelfTest(int LMNumber);

LEM* lem; // Pointer at LEM
h_Radiator* antenna; // Antenna (loses heat into space)
Expand All @@ -61,4 +62,7 @@ class LEM_LR : public e_object {
UINT anim_LR; // LR Animation
double lr_proc; // LR Animation State
double lr_proc_last; // Previous LR Animation State

private:
double rangetest, ratetest[3], altxmtr, velxmtr;
};
Loading