Exemple #1
0
//---------------------------------------------------------------------------
int __fastcall TTarget::HandleFFS(TFFSPacket *FFSPacket)
{
  switch (FFSPacket->Command) {

    case ffscCreate :
      {
        String ProjectPath = GetProjectPath(true);
        if (AutomaticUploadMode != aumFFS) {
          FFSPacket->Parameter = FFS_SERVER_ERROR_NOT_ALLOWED;
          return 8;
        }
        if (!DirectoryExists(ProjectPath)) {
          FFSPacket->Parameter = FFS_SERVER_ERROR_NO_PROCECT;
          return 8;
        }
        TFatFsImageBuilder *FatFsImageBuilder = TFatFsImageBuilder::Acquire();
        if (!FatFsImageBuilder)
          return 0;
        SetIndicator(new TIndicatorFadeOut("FFS Create image", clBlue));
        int Blocks = FatFsImageBuilder->BuildFromDirectory(ProjectPath);
        FormMain->Log(0, "FFS: Create FAT image with " + String(Blocks) + " blocks from " + ProjectPath);
        FatFsImage = FatFsImageBuilder->Clone();
        FatFsImageBuilder->Release();
        FFSPacket->Parameter = Blocks;
        return 8;
      }

    case ffscRead :
      {
        //FormMain->Log(0, "FFS: Read " + String(FFSPacket.Parameter));
        SetIndicator(new TIndicatorFadeOut("FFS Read", (TColor) RGB(128, 255, 0)));
        BYTE *Sector = FatFsImage->GetSectorAddress(FFSPacket->Parameter);
        if (!Sector)
          return 0;
        memcpy(FFSPacket->Data, Sector, 512);
        return 8 + 512;
      }

    case ffscWrite :
      {
        //FormMain->Log(0, "FFS: Write " + String(FFSPacket.Parameter));
        SetIndicator(new TIndicatorFadeOut("FFS Write", (TColor) RGB(255, 128, 0)));
        BYTE *Sector = FatFsImage->GetSectorAddress(FFSPacket->Parameter);
        if (!Sector)
          return 0;
        memcpy(Sector, FFSPacket->Data, 512);
        return 8;
      }
      break;

  }
  return 0;
}
void BRSafety()
{
	if(gOpts[SYSTEM].v == 0)
		return;
		
	if(awsTimer != AWS_TIMER_OFF && awsTimer != AWS_TIMER_BRAKE)
	{
		if(tOn(awsTimer, gState.Time, gOpts[AWSDELAY].v) && awsStop == false)
		{
			awsTimer = AWS_TIMER_BRAKE;
			awsStop = true;
			OperateBrake(BRK_EMG, true);
			awsRelease = false;
		}
	}
	
	ShowIndicator(brakeDemand);
	ShowIndicator(stopOverride);
	
	if(gState.Speed == 0)
	{
 		if(stopTimer == TIMER_OFF)
			ResetTimer(stopTimer);
		if(awsRelease)
		{
			OperateBrake(BRK_EMG, false);
			if(gOpts[AWSINDICATOR].v != -1)
				gPanel[gOpts[AWSINDICATOR].v] = 0;
			awsTimer = -1;
			awsStop = false;
			awsRelease = false;
		}
		if(tpwsRelease && tOn(stopTimer, gState.Time, gOpts[TPWSSTOPDELAY].v * 1000))
		{
			OperateBrake(BRK_EMG, false);
			SetIndicator(brakeDemand, 0);
			tpwsTrainstop = false;
			tpwsRelease = false;
		}
	}
	
	if(overrideTimer != TIMER_OFF)
		if(tOn(overrideTimer, gState.Time, gOpts[TPWSOVERRIDELIFETIME].v * 1000))
		{
			overrideTimer = TIMER_OFF;
			SetIndicator(stopOverride, 0);
		}
}
void BRSafetyReverserMovedOff()
{
	if(tpwsStartupTest != 1)
		return;
		
	if(gOpts[AWSWARNINGSOUND].v != -1)
		gSound[gOpts[AWSWARNINGSOUND].v] = ATS_SOUND_PLAYLOOPING;
	if(gOpts[STARTUPTEST].v == 2)
	{
		SetIndicator(brakeDemand, 1);
		SetIndicator(stopOverride, 1);
		if(gOpts[TPWSINDICATOR3].v != -1)
			gPanel[gOpts[TPWSINDICATOR3].v] = 1;
	}
	tpwsStartupTest = 2;
}
Exemple #4
0
//---------------------------------------------------------------------------
TStream* __fastcall TTarget::HandleTFTP(const String Path)
{
  if (AutomaticUploadMode != aumTFTP) 
    return 0;

  TFatFsImageBuilder *FatFsImageBuilder = TFatFsImageBuilder::Acquire();
  if (!FatFsImageBuilder)
    return 0;
  String ProjectPath = GetProjectPath(true);
  SetIndicator(new TIndicatorFadeOut("TFTP Create image", clBlue));
  TStream *Stream = FatFsImageBuilder->BuildFromDirectory(ProjectPath, 0);
  TreeNode = FormMain->Log(0, "TFTP: Create FAT image with " + String(FatFsImageBuilder->UsedSectors()) + " blocks from " + ProjectPath);
  FatFsImageBuilder->Release(); 
  SetIndicator(new TIndicatorStatic("TFTP Upload", (TColor) RGB(255, 255, 0)));
  return Stream;
}
Exemple #5
0
//--------------------------------------------------------------------------------------------------
le_result_t pa_sim_Init
(
    void
)
{
    if (atports_GetInterface(ATPORT_COMMAND)==NULL) {
        LE_DEBUG("SIM Module is not initialize in this session");
        return LE_NOT_POSSIBLE;
    }

    SimEventPoolRef = le_mem_CreatePool("SimEventPool", sizeof(pa_sim_Event_t));
    SimEventPoolRef = le_mem_ExpandPool(SimEventPoolRef,DEFAULT_SIMEVENT_POOL_SIZE);

    EventUnsolicitedId    = le_event_CreateId("SIMEventIdUnsol",sizeof(atmgr_UnsolResponse_t));
    EventNewSimStateId    = le_event_CreateIdWithRefCounting("SIMEventIdNewState");
    le_event_AddHandler("SIMUnsolHandler",EventUnsolicitedId  ,SIMUnsolHandler);

    LE_DEBUG_IF(SetIndicator()!=LE_OK,"cannot set sim +WIND indicator");

    return LE_OK;
}
void SetBRSafetyStatus(ATS_BEACONDATA data)
{
	if(data.Type < BCN_AWS_SIGNAL || data.Type > BCN_TPWS_SPEED || gOpts[SYSTEM].v == 0 || gState.Speed < 0)
		return;

	if((gOpts[SYSTEM].v == 1 || gOpts[SYSTEM].v == 2) &&
 		(data.Type == BCN_AWS_SIGNAL || data.Type == BCN_AWS_FIXED)) //aws
	{
		if(data.Signal < CLEAR_SIGNAL_RANGE_BASE || gState.Speed <= gOpts[AWSMINSPEED].v || data.Type == BCN_AWS_FIXED) //varoitus
		{
			if(gOpts[AWSINDICATOR].v != -1 && gOpts[AWSINDICATORAPPEAR].v == 1)
				gPanel[gOpts[AWSINDICATOR].v] = 1;
			else if(gOpts[AWSINDICATOR].v != -1)
				gPanel[gOpts[AWSINDICATOR].v] = 0;
			if(gOpts[AWSWARNINGSOUND].v != -1)
				gSound[gOpts[AWSWARNINGSOUND].v] = ATS_SOUND_PLAYLOOPING;
			if(gOpts[AWSCLEARSOUND].v != -1)
				gSound[gOpts[AWSCLEARSOUND].v] = ATS_SOUND_STOP;
			if(awsTimer == AWS_TIMER_OFF)
				ResetTimer(awsTimer);
		}
		else
		{
			if(gOpts[AWSINDICATOR].v != -1)
				gPanel[gOpts[AWSINDICATOR].v] = 0;
			if(gOpts[AWSWARNINGSOUND].v != -1)
				gSound[gOpts[AWSWARNINGSOUND].v] = ATS_SOUND_STOP;
			if(gOpts[AWSCLEARSOUND].v != -1)
				gSound[gOpts[AWSCLEARSOUND].v] = ATS_SOUND_PLAY;
			awsTimer = AWS_TIMER_OFF;
		}
	}
	
	if(gOpts[SYSTEM].v == 2 && tpwsTrainstop == false) //tpws
	{
		if(overrideTimer != TIMER_OFF)
		{
			if(data.Type == BCN_TRAINSTOP)
			{
				overrideTimer = TIMER_OFF;
				SetIndicator(stopOverride, 0);
			}
		}
		else if(
			(data.Type == BCN_TPWS_SPEED && gState.Speed > data.Optional) ||
   			(data.Type == BCN_TPWS_SIGNAL && data.Signal <= DANGER_SIGNAL_RANGE_LIMIT && gState.Speed > data.Optional) ||
      		(data.Type == BCN_TRAINSTOP && data.Signal <= DANGER_SIGNAL_RANGE_LIMIT))
		{
			BlinkIndicator(brakeDemand, 1);
			if(gOpts[TPWSWARNINGSOUND].v != -1)
				gSound[gOpts[TPWSWARNINGSOUND].v] = ATS_SOUND_PLAYLOOPING;
			OperateBrake(BRK_EMG, true);
			tpwsTrainstop = true;
			stopTimer = TIMER_OFF;
			tpwsRelease = false;
		}
	}

	if(gOpts[SYSTEM].v == 3 && data.Type == BCN_TRAINSTOP && tpwsTrainstop == false) //trainstop
	{
		if(overrideTimer != TIMER_OFF)
		{
			overrideTimer = TIMER_OFF;
			SetIndicator(stopOverride, 0);
		}
		else if(data.Signal <= DANGER_SIGNAL_RANGE_LIMIT)
		{
			BlinkIndicator(brakeDemand, 1);
			if(gOpts[TPWSWARNINGSOUND].v != -1)
				gSound[gOpts[TPWSWARNINGSOUND].v] = ATS_SOUND_PLAYLOOPING;
			OperateBrake(BRK_EMG, true);
			tpwsTrainstop = true;
			stopTimer = TIMER_OFF;
			tpwsRelease = false;
		}
	}
}
void BRSafetyKeyPressed(int key)
{
	if(key == gOpts[AWSACKNOWLEDGEKEY].v)
	{
		if(gOpts[AWSACKNOWLEDGEKEY].next != NULL)
			gPanel[gOpts[AWSACKNOWLEDGEKEY].next->v] = 1;
		
		if(tpwsStartupTest == 2)
		{
			if(gOpts[AWSINDICATOR].v != -1)
				gPanel[gOpts[AWSINDICATOR].v] = 1;
			if(gOpts[AWSWARNINGSOUND].v != -1)
				gSound[gOpts[AWSWARNINGSOUND].v] = ATS_SOUND_STOP;
				
			if(gOpts[STARTUPTEST].v == 2)
			{
				if(gOpts[AWSCLEARSOUND].v != -1)
					gSound[gOpts[AWSCLEARSOUND].v] = ATS_SOUND_PLAY;
				SetIndicator(brakeDemand, 0);
				SetIndicator(stopOverride, 0);
				if(gOpts[TPWSINDICATOR3].v != -1)
					gPanel[gOpts[TPWSINDICATOR3].v] = 0;
			}
			tpwsStartupTest = 0;
		}
		else if(awsTimer != AWS_TIMER_OFF && awsTimer != AWS_TIMER_BRAKE)
		{
			if(gOpts[AWSINDICATOR].v != -1)
				gPanel[gOpts[AWSINDICATOR].v] = 1;
			if(gOpts[AWSWARNINGSOUND].v != -1)
				gSound[gOpts[AWSWARNINGSOUND].v] = ATS_SOUND_STOP;
			awsTimer = AWS_TIMER_OFF;
		}
		else if(awsTimer == AWS_TIMER_BRAKE && (gState.Speed == 0 || gOpts[AWSBRAKECANCEL].v != 0) && awsStop == true)
		{
			if(gOpts[AWSBRAKECANCEL].v == 1)
				awsRelease = true;
			else
			{
				OperateBrake(BRK_EMG, false);
				if(gOpts[AWSINDICATOR].v != -1)
					gPanel[gOpts[AWSINDICATOR].v] = 0;
				if(gOpts[AWSWARNINGSOUND].v != -1)
					gSound[gOpts[AWSWARNINGSOUND].v] = ATS_SOUND_STOP;
				awsTimer = AWS_TIMER_OFF;
				awsStop = false;
			}
		}
	}
	
	if(key == gOpts[TPWSRESETKEY].v && tpwsTrainstop == true)
	{
		SetIndicator(brakeDemand, 1);
 		if(gOpts[TPWSBRAKECANCEL].v != 0 || (gState.Speed == 0 && tOn(stopTimer, gState.Time, gOpts[TPWSSTOPDELAY].v * 1000)))
 		{
 			if(gOpts[TPWSBRAKECANCEL].v == 1)
				tpwsRelease = true;
			else
			{
				OperateBrake(BRK_EMG, false);
				SetIndicator(brakeDemand, 0);
				tpwsTrainstop = false;
			}

			if(gOpts[TPWSWARNINGSOUND].v != -1)
				gSound[gOpts[TPWSWARNINGSOUND].v] = ATS_SOUND_STOP;
		}
	}
	
	if(key == gOpts[TPWSOVERRIDEKEY].v && tpwsTrainstop == false && tpwsStartupTest == 0)
	{
		if(overrideTimer == TIMER_OFF)
		{
			ResetTimer(overrideTimer);
			BlinkIndicator(stopOverride, 1);
		}
		else
		{
			overrideTimer = TIMER_OFF;
			SetIndicator(stopOverride, 0);
		}
	}
}
Exemple #8
0
//---------------------------------------------------------------------------
void __fastcall TTarget::HandleTFTP(TStream *Stream, bool Success)
{
  FormMain->Log(TreeNode, Success ? 1 : 3, Success ? "TFTP: Transfer of " + String(Stream->Size) + " bytes complete" : String("TFTP: Transfer error!"));
  TreeNode->Expand(true);
  SetIndicator(0);
}