/* 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;
}
/* 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;
}