/* TA_SSP::Convert_P27_to_DistanceProfile_1st_section */
void Convert_P27_to_DistancePr_TA_SSP(
  /* TA_SSP::Convert_P27_to_DistanceProfile_1st_section::q_scale */Q_SCALE q_scale,
  /* TA_SSP::Convert_P27_to_DistanceProfile_1st_section::Section1_in */P027V1_section_enum_T_TM_baseline2 *Section1_in,
  /* TA_SSP::Convert_P27_to_DistanceProfile_1st_section::TrainLength */L_internal_Type_Obu_BasicTypes_Pkg TrainLength,
  outC_Convert_P27_to_DistancePr_TA_SSP *outC)
{
  kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L98, Section1_in);
  outC->_L97 = TrainLength;
  kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L93, Section1_in);
  outC->_L96 = outC->_L93.v_static;
  outC->v_static_section1 = outC->_L96;
  outC->_L89 = q_scale;
  kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L86, Section1_in);
  outC->_L87 = outC->_L86.d_static;
  /* 2 */
  Normalize_Distance_d_inte_TA_Lib_internal(
    outC->_L89,
    outC->_L87,
    &outC->Context_2);
  outC->_L88 = outC->Context_2.d_internal;
  outC->_L95.target = outC->_L88;
  outC->_L95.speed = outC->_L96;
  outC->_L91 = outC->_L98.q_front;
  /* 2 */
  Eval_Q_Front_TA_Lib_internal(outC->_L91, outC->_L97, &outC->_1_Context_2);
  outC->_L90 = outC->_1_Context_2.added_train_length;
  outC->_L92 = outC->_L88 + outC->_L90;
  outC->_L94.target = outC->_L92;
  outC->_L94.speed = outC->_L96;
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1_delay, &outC->_L94);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1, &outC->_L95);
}
/* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop */
void SSP_Convert_P27V1_to_DistanceProfile_loop_TA_SSP(
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::i */ kcg_int i,
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::ProfileAccu */ StaticSpeedProfile_t_TrackAtlasTypes *ProfileAccu,
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::SectionIn */ P027V1_OBU_sectionlist_enum_T_TM_baseline2 *SectionIn,
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::q_scale */ Q_SCALE q_scale,
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::SpeedtProfile */ StaticSpeedProfile_t_TrackAtlasTypes *SpeedtProfile)
{
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop */
  static kcg_int tmp2;
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop */
  static kcg_int tmp1;
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop */
  static kcg_bool tmp;
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::_L135 */
  static L_internal_Type_Obu_BasicTypes_Pkg _L135;
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::_L123 */
  static P027V1_section_enum_T_TM_baseline2 _L123;
  /* TA_SSP::SSP_Convert_P27V1_to_DistanceProfile_loop::_L143 */
  static StaticSpeedSection_t_TrackAtlasTypes _L143;
  
  if ((0 <= i) & (i < 33)) {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(&_L123, &(*SectionIn)[i]);
  }
  else {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(
      &_L123,
      (P027V1_section_enum_T_TM_baseline2 *)
        &DEFAULT_P027v1_OBU_section_TM_baseline2);
  }
  _L135 = /* 2 */
    Normalize_Distance_d_internal_t_TA_Lib_internal(q_scale, _L123.d_static);
  if ((0 <= i - 1) & (i - 1 < 50)) {
    kcg_copy_StaticSpeedSection_t_TrackAtlasTypes(
      &_L143,
      &(*ProfileAccu)[i - 1]);
  }
  else {
    kcg_copy_StaticSpeedSection_t_TrackAtlasTypes(
      &_L143,
      (StaticSpeedSection_t_TrackAtlasTypes *)
        &DEFAULT_StaticSpeedSection_TrackAtlasTypes);
  }
  kcg_copy_StaticSpeedProfile_t_TrackAtlasTypes(SpeedtProfile, ProfileAccu);
  /* 2 */ if (_L123.valid) {
    tmp2 = _L135 + _L143.d_static_abs;
    tmp1 = _L135 + _L143.d_static_LRBG;
  }
  else {
    tmp2 = 0;
    tmp1 = 0;
  }
  tmp = /* 1 */ Eval_Q_Front_TA_Lib_internal(_L123.q_front);
  if ((0 <= i) & (i < 50)) {
    (*SpeedtProfile)[i].valid = _L123.valid;
    (*SpeedtProfile)[i].d_static_abs = tmp2;
    (*SpeedtProfile)[i].d_static_LRBG = tmp1;
    (*SpeedtProfile)[i].q_train_length_corr = tmp;
    (*SpeedtProfile)[i].v_static = _L123.v_static;
  }
}
/* TA_Lib_internal::DetectSpeedIncrease */
void DetectSpeedIncrease_TA_Lib_internal(
  /* TA_Lib_internal::DetectSpeedIncrease::v_static_section1 */V_internal_Type_Obu_BasicTypes_Pkg v_static_section1,
  /* TA_Lib_internal::DetectSpeedIncrease::SectionIn */P027V1_OBU_sectionlist_enum_T_TM_baseline2 *SectionIn,
  /* TA_Lib_internal::DetectSpeedIncrease::i */kcg_int i,
  outC_DetectSpeedIncrease_TA_Lib_internal *outC)
{
  outC->_L5 = i;
  outC->_L10 = 0;
  outC->_L12 = outC->_L5 == outC->_L10;
  outC->_L9 = v_static_section1;
  kcg_copy_P027V1_OBU_sectionlist_enum_T_TM_baseline2(&outC->_L16, SectionIn);
  outC->_L14 = i;
  outC->_L8 = 1;
  outC->_L7 = outC->_L14 - outC->_L8;
  if ((0 <= outC->_L7) & (outC->_L7 < 33)) {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(
      &outC->_L2,
      &outC->_L16[outC->_L7]);
  }
  else {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(
      &outC->_L2,
      (P027V1_section_enum_T_TM_baseline2 *)
        &DEFAULT_P027V1_section_enum_TM_baseline2);
  }
  outC->_L3 = outC->_L2.v_static;
  if (outC->_L12) {
    outC->_L6 = outC->_L9;
  }
  else {
    outC->_L6 = outC->_L3;
  }
  kcg_copy_P027V1_OBU_sectionlist_enum_T_TM_baseline2(&outC->_L15, SectionIn);
  outC->_L13 = i;
  if ((0 <= outC->_L13) & (outC->_L13 < 33)) {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(
      &outC->_L1,
      &outC->_L15[outC->_L13]);
  }
  else {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(
      &outC->_L1,
      (P027V1_section_enum_T_TM_baseline2 *)
        &DEFAULT_P027V1_section_enum_TM_baseline2);
  }
  outC->_L11 = outC->_L1.v_static;
  outC->_L4 = outC->_L6 < outC->_L11;
  outC->q_speed_increase = outC->_L4;
}
/* TM_baseline2::Read_P027V1_sections */
void Read_P027V1_sections_TM_baseline2(
  /* TM_baseline2::Read_P027V1_sections::i */kcg_int i,
  /* TM_baseline2::Read_P027V1_sections::Message_IN */CompressedPackets_T_Common_Types_Pkg *Message_IN,
  /* TM_baseline2::Read_P027V1_sections::n_iter_outer */kcg_int n_iter_outer,
  /* TM_baseline2::Read_P027V1_sections::meta_sections */kcg_int meta_sections,
  outC_Read_P027V1_sections_TM_baseline2 *outC)
{
  kcg_bool noname;
  
  kcg_copy_CompressedPackets_T_Common_Types_Pkg(&outC->_L175, Message_IN);
  outC->_L171 = meta_sections;
  outC->_L179 = i;
  /* 1 */
  T_Decode_Metadata_L2_TM_lib_internal(
    outC->_L171,
    outC->_L179,
    &outC->Context_1);
  outC->_L176 = outC->Context_1.nid_packet;
  /* 1 */
  RECV_ReadPackets_TM_lib_internal(
    &outC->_L175,
    outC->_L176,
    kcg_true,
    kcg_true,
    &outC->_1_Context_1);
  kcg_copy_array_int_500(&outC->_L172, &outC->_1_Context_1.Data);
  kcg_copy_MetadataElement_T_Common_Types_Pkg(
    &outC->_L173,
    &outC->_1_Context_1.Metadata);
  outC->_L181 = outC->_1_Context_1.received;
  noname = outC->_L181;
  outC->_L174 = n_iter_outer;
  outC->_L180 = outC->_L179 < outC->_L174;
  outC->cont = outC->_L180;
  /* 1 */
  C_P027V1_compr_onboard_se_TM_conversions_baseline2(
    &outC->_L172,
    &outC->_L173,
    &outC->_2_Context_1);
  kcg_copy_P027V1_section_enum_T_TM_baseline2(
    &outC->_L177,
    &outC->_2_Context_1.P027V1_section_onbard);
  kcg_copy_P027V1_section_enum_T_TM_baseline2(
    &outC->P027V1_OBU_section_out,
    &outC->_L177);
}
/* TA_SSP::Convert_P27_to_DistanceProfile */
void Convert_P27_to_DistanceProfile_TA_SSP(
  /* TA_SSP::Convert_P27_to_DistanceProfile::Packet27_in */P027V1_OBU_T_TM_baseline2 *Packet27_in,
  /* TA_SSP::Convert_P27_to_DistanceProfile::TrainLength */L_internal_Type_Obu_BasicTypes_Pkg TrainLength,
  /* TA_SSP::Convert_P27_to_DistanceProfile::SpeedProfile */SSP_cat_t_TA_MRSP *SpeedProfile,
  /* TA_SSP::Convert_P27_to_DistanceProfile::v_static_section1 */V_internal_Type_Obu_BasicTypes_Pkg *v_static_section1,
  /* TA_SSP::Convert_P27_to_DistanceProfile::section1_delay */SSP_section_t_TA_MRSP *section1_delay,
  /* TA_SSP::Convert_P27_to_DistanceProfile::section1 */SSP_section_t_TA_MRSP *section1)
{
  SSP_cat_t_TA_MRSP tmp;
  kcg_int i;
  /* TA_SSP::Convert_P27_to_DistanceProfile::_L84 */ array__11234 _L84;
  /* TA_SSP::Convert_P27_to_DistanceProfile::_L85 */ array__11351 _L85;
  
  kcg_copy_P027V1_section_enum_T_TM_baseline2(
    &_L85[0],
    (P027V1_section_enum_T_TM_baseline2 *)
      &DEFAULT_P027v1_OBU_section_TM_baseline2);
  kcg_copy_array__12119(&_L84[0], (array__12119 *) &(*Packet27_in).sections[1]);
  kcg_copy_array__11351(&_L84[32], &_L85);
  /* 3 */
  Convert_P27_to_DistanceProfile_1st_section_TA_SSP(
    (*Packet27_in).q_scale,
    &(*Packet27_in).sections[0],
    TrainLength,
    v_static_section1,
    section1_delay,
    section1);
  kcg_copy_SSP_cat_t_TA_MRSP(
    SpeedProfile,
    (SSP_cat_t_TA_MRSP *) &DEFAULT_SSP_cat_TA_MRSP);
  for (i = 0; i < 33; i++) {
    kcg_copy_SSP_cat_t_TA_MRSP(&tmp, SpeedProfile);
    /* 3 */
    Convert_P27_to_DistanceProfile_loop_TA_SSP(
      i,
      &tmp,
      &_L84,
      TrainLength,
      (*Packet27_in).q_scale,
      *v_static_section1,
      SpeedProfile);
  }
}
/* TA_SSP::Convert_P27_to_DistanceProfile */
void _17_Convert_P27_to_DistancePr_TA_SSP(
  /* TA_SSP::Convert_P27_to_DistanceProfile::Packet27_in */P027V1_OBU_T_TM_baseline2 *Packet27_in,
  /* TA_SSP::Convert_P27_to_DistanceProfile::TrainLength */L_internal_Type_Obu_BasicTypes_Pkg TrainLength,
  outC__17_Convert_P27_to_DistancePr_TA_SSP *outC)
{
  kcg_int i5;
  kcg_int i4;
  kcg_int i3;
  kcg_int i2;
  kcg_int i1;
  SSP_cat_t_TA_MRSP tmp;
  kcg_int i;
  
  kcg_copy_P027V1_section_enum_T_TM_baseline2(
    &outC->_L86,
    (P027V1_section_enum_T_TM_baseline2 *)
      &DEFAULT_P027v1_OBU_section_TM_baseline2);
  for (i5 = 0; i5 < 1; i5++) {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(&outC->_L85[i5], &outC->_L86);
  }
  kcg_copy_P027V1_OBU_T_TM_baseline2(&outC->_L73, Packet27_in);
  kcg_copy_P027V1_OBU_sectionlist_enum_T_TM_baseline2(
    &outC->_L71,
    &outC->_L73.sections);
  kcg_copy_array__10599(&outC->_L64, (array__10599 *) &outC->_L71[1]);
  kcg_copy_array__10599(&outC->_L84[0], &outC->_L64);
  kcg_copy_array__10605(&outC->_L84[32], &outC->_L85);
  kcg_copy_P027V1_OBU_T_TM_baseline2(&outC->_L63, Packet27_in);
  outC->_L65 = outC->_L63.q_scale;
  kcg_copy_P027V1_OBU_T_TM_baseline2(&outC->_L70, Packet27_in);
  kcg_copy_P027V1_section_enum_T_TM_baseline2(
    &outC->_L62,
    &outC->_L70.sections[0]);
  outC->_L72 = TrainLength;
  /* 3 */
  Convert_P27_to_DistancePr_TA_SSP(
    outC->_L65,
    &outC->_L62,
    outC->_L72,
    &outC->Context_3);
  outC->_L68 = outC->Context_3.v_static_section1;
  kcg_copy_SSP_section_t_TA_MRSP(&outC->_L66, &outC->Context_3.section1_delay);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->_L67, &outC->Context_3.section1);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1, &outC->_L67);
  kcg_copy_SSP_section_t_TA_MRSP(&outC->section1_delay, &outC->_L66);
  outC->v_static_section1 = outC->_L68;
  kcg_copy_SSP_cat_t_TA_MRSP(
    &outC->_L83,
    (SSP_cat_t_TA_MRSP *) &DEFAULT_SSP_cat_TA_MRSP);
  for (i4 = 0; i4 < 33; i4++) {
    kcg_copy_array__10437(&outC->_L74[i4], &outC->_L84);
  }
  outC->_L69 = TrainLength;
  for (i3 = 0; i3 < 33; i3++) {
    outC->_L82[i3] = outC->_L69;
  }
  for (i2 = 0; i2 < 33; i2++) {
    outC->_L76[i2] = outC->_L65;
  }
  for (i1 = 0; i1 < 33; i1++) {
    outC->_L81[i1] = outC->_L68;
  }
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->_L77, &outC->_L83);
  for (i = 0; i < 33; i++) {
    kcg_copy_SSP_cat_t_TA_MRSP(&tmp, &outC->_L77);
    /* 3 */
    _16_Convert_P27_to_DistancePr_TA_SSP(
      i,
      &tmp,
      &outC->_L74[i],
      outC->_L82[i],
      outC->_L76[i],
      outC->_L81[i],
      &outC->_1_Context_3[i]);
    kcg_copy_SSP_cat_t_TA_MRSP(
      &outC->_L77,
      &outC->_1_Context_3[i].SpeedProfile);
  }
  kcg_copy_SSP_cat_t_TA_MRSP(&outC->SpeedProfile, &outC->_L77);
}
/* TM_baseline2::Read_P027V1 */
void Read_P027V1_TM_baseline2(
  /* TM_baseline2::Read_P027V1::Message_IN */ CompressedPackets_T_Common_Types_Pkg *Message_IN,
  /* TM_baseline2::Read_P027V1::received */ kcg_bool *received,
  /* TM_baseline2::Read_P027V1::P027V1_out */ P027V1_OBU_T_TM_baseline2 *P027V1_out)
{
  static kcg_int i;
  /* TM_conversions_baseline2::C_P027V1_compr_onboard_body::_L6 */
  static array_int_5 _L6_1;
  /* TM_conversions::CAST_Int_to_Q_DIR::IfBlock1::else::else */
  static kcg_bool else_clock_1_1_IfBlock1;
  /* TM_conversions::CAST_Int_to_Q_DIR::IfBlock1 */
  static kcg_bool IfBlock1_clock_1_1;
  /* TM_conversions::CAST_Int_to_Q_SCALE::IfBlock1::else::else */
  static kcg_bool _1_else_clock_1_1_IfBlock1;
  /* TM_conversions::CAST_Int_to_Q_SCALE::IfBlock1 */
  static kcg_bool _2_IfBlock1_clock_1_1;
  /* TM_baseline2::Read_P027V1::_L5 */
  static CompressedPacketData_T_Common_Types_Pkg _L5;
  /* TM_baseline2::Read_P027V1::_L30 */
  static MetadataElement_T_Common_Types_Pkg _L30;
  /* TM_baseline2::Read_P027V1::_L166 */
  static P027V1_OBU_body_enum_T_TM_baseline2 _L166;
  /* TM_baseline2::Read_P027V1::_L182 */
  static P027V1_OBU_sectionlist_enum_T_TM_baseline2 _L182;
  /* TM_baseline2::Read_P027V1::_L184 */
  static kcg_int _L184;
  
  /* 1 */
  RECV_ReadPackets_TM_lib_internal(
    Message_IN,
    NID_META_P027V1_body_TM_baseline2,
    kcg_true,
    kcg_true,
    &_L5,
    &_L30,
    received);
  _L166.valid = _L5[0] == 27;
  kcg_copy_array_int_5(&_L6_1, (array_int_5 *) &_L5[1]);
  for (i = 0; i < 33; i++) {
    /* 1 */
    Read_P027V1_sections_TM_baseline2(
      i,
      Message_IN,
      _L6_1[3],
      _L6_1[4],
      &IfBlock1_clock_1_1,
      &_L182[i]);
    _L184 = i + 1;
    if (!IfBlock1_clock_1_1) {
      break;
    }
  }
#ifdef KCG_MAPW_CPY
  
  for (i = _L184; i < 33; i++) {
    kcg_copy_P027V1_section_enum_T_TM_baseline2(
      &_L182[i],
      (P027V1_section_enum_T_TM_baseline2 *)
        &DEFAULT_P027V1_section_enum_TM_baseline2);
  }
#endif /* KCG_MAPW_CPY */
  
  kcg_copy_P027V1_OBU_sectionlist_enum_T_TM_baseline2(
    &(*P027V1_out).sections,
    &_L182);
  IfBlock1_clock_1_1 = _L6_1[0] == INT_Q_DIR_nomiinal_TM_conversions;
  _2_IfBlock1_clock_1_1 = _L6_1[2] == INT_Q_SCALE_10cm_TM_conversions;
  /* 1_1_ck_IfBlock1 */ if (IfBlock1_clock_1_1) {
    _L166.q_dir = ENUM_Q_DIR_nominal_TM_conversions;
  }
  else {
    _1_else_clock_1_1_IfBlock1 = _L6_1[0] == INT_Q_DIR_reverse_TM_conversions;
    /* 1_1_ck_anon_activ */ if (_1_else_clock_1_1_IfBlock1) {
      _L166.q_dir = ENUM_Q_DIR_reverse_TM_conversions;
    }
    else {
      else_clock_1_1_IfBlock1 = _L6_1[0] == INT_Q_DIR_both_TM_conversions;
      /* 1_1_ck_anon_activ */ if (else_clock_1_1_IfBlock1) {
        _L166.q_dir = ENUM_Q_DIR_both_TM_conversions;
      }
      else {
        _L166.q_dir = ENUM_Q_DIR_both_TM_conversions;
      }
    }
  }
  /* 1_1_ck_IfBlock1 */ if (_2_IfBlock1_clock_1_1) {
    _L166.q_scale = ENUM_Q_SCALE_10cm_TM_conversions;
  }
  else {
    IfBlock1_clock_1_1 = _L6_1[2] == INT_Q_SCALE_1m_TM_conversions;
    /* 1_1_ck_anon_activ */ if (IfBlock1_clock_1_1) {
      _L166.q_scale = ENUM_Q_SCALE_1m_TM_conversions;
    }
    else {
      _1_else_clock_1_1_IfBlock1 = _L6_1[2] == INT_Q_SCALE_10m_TM_conversions;
      /* 1_1_ck_anon_activ */ if (_1_else_clock_1_1_IfBlock1) {
        _L166.q_scale = ENUM_Q_SCALE_10m_TM_conversions;
      }
      else {
        _L166.q_scale = ENUM_Q_SCALE_10cm_TM_conversions;
      }
    }
  }
  (*P027V1_out).valid = _L166.valid;
  (*P027V1_out).q_dir = _L166.q_dir;
  (*P027V1_out).q_scale = _L166.q_scale;
}