/* ProvidePositionReport_Pkg::Build_Packet1 */
void Build_Packet1_ProvidePositionReport_Pkg(
  /* ProvidePositionReport_Pkg::Build_Packet1::packet0 */ Position_Report_TrainToTrack *packet0,
  /* ProvidePositionReport_Pkg::Build_Packet1::prvDirTrain */ Q_DIRTRAIN prvDirTrain,
  /* ProvidePositionReport_Pkg::Build_Packet1::trainPos */ trainPosition_T_TrainPosition_Types_Pck *trainPos,
  /* ProvidePositionReport_Pkg::Build_Packet1::packet1 */ PT1_PositionReport_2BG_T_Packet_TrainTypes_Pkg *packet1)
{
  /* ProvidePositionReport_Pkg::Build_Packet1 */
  static Q_DLRBG tmp1;
  /* ProvidePositionReport_Pkg::Build_Packet1 */
  static Q_DIRTRAIN tmp;
  /* ProvidePositionReport_Pkg::Build_Packet1::IfBlock1::else */
  static kcg_bool _2_else_clock_IfBlock1;
  /* ProvidePositionReport_Pkg::Build_Packet1::IfBlock1::else::else */
  static kcg_bool else_clock_IfBlock1;
  /* ProvidePositionReport_Pkg::Build_Packet1::IfBlock1 */
  static kcg_bool IfBlock1_clock;
  /* ProvidePositionReport_Pkg::Build_Packet1::cond_3_4_2_3_3_4 */
  static kcg_bool cond_3_4_2_3_3_4;
  /* ProvidePositionReport_Pkg::Build_Packet1::cond_3_4_2_3_3_3 */
  static kcg_bool cond_3_4_2_3_3_3;
  /* ProvidePositionReport_Pkg::Build_Packet1::cond_3_4_2_3_3_2 */
  static kcg_bool cond_3_4_2_3_3_2;
  
  (*packet1).valid = kcg_true;
  (*packet1).packet1.NID_PACKET = (*packet0).NID_PACKET;
  (*packet1).packet1.L_PACKET = (*packet0).L_PACKET;
  (*packet1).packet1.qscale = (*packet0).qscale;
  (*packet1).packet1.NID_LRBG = (*packet0).NID_LRBG;
  (*packet1).packet1.D_LRBG = (*packet0).D_LRBG;
  (*packet1).packet1.L_DOUBTOVER = (*packet0).L_DOUBTOVER;
  (*packet1).packet1.L_DOUBTUNDER = (*packet0).L_DOUBTUNDER;
  (*packet1).packet1.length = (*packet0).length;
  (*packet1).packet1.L_TRAININT = (*packet0).L_TRAININT;
  (*packet1).packet1.V_TRAIN = (*packet0).V_TRAIN;
  (*packet1).packet1.mode = (*packet0).mode;
  (*packet1).packet1.level = (*packet0).level;
  (*packet1).packet1.NID_NTC = (*packet0).NID_NTC;
  /* 1 */
  op_cond_3_4_2_3_3_ProvidePositionReport_Pkg(
    packet0,
    trainPos,
    prvDirTrain,
    &(*packet1).packet1.NID_PRVLRBG,
    &cond_3_4_2_3_3_2,
    &cond_3_4_2_3_3_3,
    &cond_3_4_2_3_3_4);
  IfBlock1_clock = cond_3_4_2_3_3_2 & ((*trainPos).trainOrientationToLRBG ==
      Q_DIRLRBG_Reverse);
  /* ck_IfBlock1 */ if (IfBlock1_clock) {
    (*packet1).packet1.dirlrbg = Q_DIRLRBG_Reverse;
    tmp1 = Q_DLRBG_Reverse;
    tmp = Q_DIRTRAIN_Reverse;
  }
  else {
    _2_else_clock_IfBlock1 = cond_3_4_2_3_3_2 &
      ((*trainPos).trainOrientationToLRBG == Q_DIRLRBG_Nominal);
    /* ck_anon_activ */ if (_2_else_clock_IfBlock1) {
      (*packet1).packet1.dirlrbg = Q_DIRLRBG_Nominal;
      tmp1 = Q_DLRBG_Nominal;
      tmp = Q_DIRTRAIN_Nominal;
    }
    else {
      else_clock_IfBlock1 = (cond_3_4_2_3_3_2 &
          ((*trainPos).trainOrientationToLRBG == Q_DIRLRBG_Unknown)) |
        cond_3_4_2_3_3_3 | cond_3_4_2_3_3_4;
      /* ck_anon_activ */ if (else_clock_IfBlock1) {
        (*packet1).packet1.dirlrbg = Q_DIRLRBG_Unknown;
        tmp1 = Q_DLRBG_Unknown;
        tmp = Q_DIRTRAIN_Unknown;
      }
      else {
        (*packet1).packet1.dirlrbg = Q_DIRLRBG_Unknown;
        tmp1 = Q_DLRBG_Unknown;
        tmp = Q_DIRTRAIN_Unknown;
      }
    }
  }
  (*packet1).packet1.dlrbg = tmp1;
  (*packet1).packet1.dirtrain = tmp;
}
/* ProvidePositionReport_Pkg::AggregatePacket_1 */
void AggregatePacket_1_ProvidePositionReport_Pkg(
  /* ProvidePositionReport_Pkg::AggregatePacket_1::modeLevelStatus */ ModeAndLevelStatus_T_BG_Types_Pkg *modeLevelStatus,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::posBGs */ positionedBGs_T_TrainPosition_Types_Pck *posBGs,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::trainPos */ trainPosition_T_TrainPosition_Types_Pck *trainPos,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::train2trackStatus */ TrainToTrackStatus_T_BG_Types_Pkg *train2trackStatus,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::TrainRearEndPos4 */ L_TRAININT TrainRearEndPos4,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::directionLRBG */ BG_Orientation_T_ProvidePositionReport_Pkg directionLRBG,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::prvDirTrain */ Q_DIRTRAIN prvDirTrain,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::odometry */ odometry_T_Obu_BasicTypes_Pkg *odometry,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::sendNoReport */ kcg_bool *sendNoReport,
  /* ProvidePositionReport_Pkg::AggregatePacket_1::packet1 */ PT1_PositionReport_2BG_T_Packet_TrainTypes_Pkg *packet1)
{
  Q_DLRBG tmp1;
  Q_DIRTRAIN tmp;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::IfBlock1::else */ kcg_bool _2_else_clock_IfBlock1;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::IfBlock1::else::else */ kcg_bool else_clock_IfBlock1;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::IfBlock1 */ kcg_bool IfBlock1_clock;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::cond_3_4_2_3_3_2 */ kcg_bool cond_3_4_2_3_3_2;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::cond_3_4_2_3_3_3 */ kcg_bool cond_3_4_2_3_3_3;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::cond_3_4_2_3_3_4 */ kcg_bool cond_3_4_2_3_3_4;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::_L5 */ Position_Report_TrainToTrack _L5;
  /* ProvidePositionReport_Pkg::AggregatePacket_1::_L171 */ kcg_int _L171;
  
  /* 1 */
  op_prepack_0_ProvidePositionReport_Pkg(
    TrainRearEndPos4,
    trainPos,
    train2trackStatus,
    posBGs,
    odometry,
    modeLevelStatus,
    &else_clock_IfBlock1,
    &_L5);
  /* op_cond_3_4_2_3_3 */
  op_cond_3_4_2_3_3_ProvidePositionReport_Pkg(
    &_L5,
    trainPos,
    prvDirTrain,
    &_L171,
    &cond_3_4_2_3_3_2,
    &cond_3_4_2_3_3_3,
    &cond_3_4_2_3_3_4);
  IfBlock1_clock = cond_3_4_2_3_3_2 & (directionLRBG == Q_DIRLRBG_Reverse);
  _2_else_clock_IfBlock1 = !else_clock_IfBlock1;
  (*packet1).valid = _2_else_clock_IfBlock1;
  (*packet1).packet1.NID_PACKET = _L5.NID_PACKET;
  (*packet1).packet1.L_PACKET = _L5.L_PACKET;
  (*packet1).packet1.qscale = _L5.qscale;
  (*packet1).packet1.NID_LRBG = _L5.NID_LRBG;
  (*packet1).packet1.NID_PRVLRBG = _L171;
  (*packet1).packet1.D_LRBG = _L5.D_LRBG;
  (*packet1).packet1.L_DOUBTOVER = _L5.L_DOUBTOVER;
  (*packet1).packet1.L_DOUBTUNDER = _L5.L_DOUBTUNDER;
  (*packet1).packet1.length = _L5.length;
  (*packet1).packet1.L_TRAININT = _L5.L_TRAININT;
  (*packet1).packet1.V_TRAIN = _L5.V_TRAIN;
  (*packet1).packet1.mode = _L5.mode;
  (*packet1).packet1.level = _L5.level;
  (*packet1).packet1.NID_NTC = _L5.NID_NTC;
  *sendNoReport = _2_else_clock_IfBlock1 & !cond_3_4_2_3_3_2;
  if (IfBlock1_clock) {
    (*packet1).packet1.dirlrbg = Q_DIRLRBG_Reverse;
    tmp1 = Q_DLRBG_Reverse;
    tmp = Q_DIRTRAIN_Reverse;
  }
  else {
    _2_else_clock_IfBlock1 = cond_3_4_2_3_3_2 & (directionLRBG ==
        Q_DIRLRBG_Nominal);
    if (_2_else_clock_IfBlock1) {
      (*packet1).packet1.dirlrbg = Q_DIRLRBG_Nominal;
      tmp1 = Q_DLRBG_Nominal;
      tmp = Q_DIRTRAIN_Nominal;
    }
    else {
      else_clock_IfBlock1 = (cond_3_4_2_3_3_2 & (directionLRBG ==
            Q_DIRLRBG_Unknown)) | cond_3_4_2_3_3_3 | cond_3_4_2_3_3_4;
      if (else_clock_IfBlock1) {
        (*packet1).packet1.dirlrbg = Q_DIRLRBG_Unknown;
        tmp1 = Q_DLRBG_Unknown;
        tmp = Q_DIRTRAIN_Unknown;
      }
      else {
        (*packet1).packet1.dirlrbg = Q_DIRLRBG_Unknown;
        tmp1 = Q_DLRBG_Unknown;
        tmp = Q_DIRTRAIN_Unknown;
      }
    }
  }
  (*packet1).packet1.dlrbg = tmp1;
  (*packet1).packet1.dirtrain = tmp;
}