Commit c08f1aaa authored by Yann Garcia's avatar Yann Garcia
Browse files

Start validate AtsMapem

parent db871991
Loading
Loading
Loading
Loading
+47 −1
Original line number Diff line number Diff line
@@ -224,6 +224,9 @@ void ConfigRsuSimulatorLayer::sendMsg(const LibItsMapemSpatem__TypesAndValues::U
  if (send_par.ischosen(LibItsMapemSpatem__TypesAndValues::UtMapemSpatemResults::ALT_utMapemSpatemInitializeResult)) {
    encoding_buffer.put_c(static_cast<const unsigned char>(uppertester_mapem_spatem_codec::c_utMapemSpatemInitializeResult));
    encoding_buffer.put_c((unsigned char)static_cast<const boolean>(send_par.utMapemSpatemInitializeResult()));
  } else if (send_par.ischosen(LibItsMapemSpatem__TypesAndValues::UtMapemSpatemResults::ALT_utMapemSpatemTriggerResult)) {
    encoding_buffer.put_c(static_cast<const unsigned char>(uppertester_mapem_spatem_codec::c_utMapemSpatemTriggerResult));
    encoding_buffer.put_c((unsigned char)static_cast<const boolean>(send_par.utMapemSpatemTriggerResult()));
  } else {
    loggers::get_instance().warning("ConfigRsuSimulatorLayer::sendMsg: Unsupported UtMapemSpatemResults variant");
    return;
@@ -380,6 +383,8 @@ void ConfigRsuSimulatorLayer::receive_data(OCTETSTRING& data, params& params)
    process_ut_denm_update(data, params);
  } else if (id == uppertester_denm_codec::c_utDenmTermination) {
    process_ut_denm_termination(data, params);
  } else if (id == uppertester_mapem_spatem_codec::c_utMapemSpatemTrigger) {
    process_ut_mapem_spatem_trigger(data, params);
  } else if (id == uppertester_ivim_codec::c_utIvimTrigger) {
    process_ut_ivim_trigger(data, params);
  } else if (id == uppertester_ivim_codec::c_utIvimUpdate) {
@@ -868,6 +873,47 @@ int ConfigRsuSimulatorLayer::process_ut_pki_trigger(const OCTETSTRING& data, par
  return 0;
}

int ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger(const OCTETSTRING& data, params& params) {
  loggers::get_instance().log_msg(">>> ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger", data);

  params::const_iterator it = _params.find("ut");
  if (it == _params.cend()) {
    loggers::get_instance().warning("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: CF layer's ut parameter is missing");
    return -1;
  }

  if (_params[std::string("ut")].compare("mapemspatem") == 0) {
    unsigned char* p = (unsigned char*)static_cast<const unsigned char*>(data);
    unsigned char msg_id = *p++;
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: msg_id=%02x", msg_id);
    LibItsMapemSpatem__TypesAndValues::UtMapemSpatemTrigger trigger; // See ETSI TR 103 34 099 Cause C.4.1 GenerateIvimEvent
    // Decode Event
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: event=%02x", *p);
    trigger.event().int2enum(static_cast<int>(*p++));
    // Decode IntersectionId
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: intersectionID=%04x", (short)*p);
    trigger.intersectionID() = static_cast<int>((*p << 8) | *(p + 1));
    p += 2;
    // Decode RegulatorySpeedLimit
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: type__=%02x", *p);
    trigger.regulatorySpeedLimit().type__().int2enum(static_cast<int>(*p++));
    loggers::get_instance().log("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: speed=%04x", (short)*p);
    trigger.regulatorySpeedLimit().speed() = static_cast<int>((*p << 8) | *(p + 1));
    p += 2;
    // FIXME Add flags
    trigger.latitude().set_to_omit();
    loggers::get_instance().log_msg("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: ", trigger);

    // Pass it to the ports if any
    to_all_upper_ports(trigger, params);
  } else {
    loggers::get_instance().warning("ConfigRsuSimulatorLayer::process_ut_mapem_spatem_trigger: Unsupported protocol");
    return -1;
  }

  return 0;
}

int ConfigRsuSimulatorLayer::process_ut_ivim_trigger(const OCTETSTRING& data, params& params) {
  loggers::get_instance().log_msg(">>> ConfigRsuSimulatorLayer::process_ut_ivim_trigger", data);

+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ private:
  int process_ut_ivim_trigger(const OCTETSTRING& data, params& params);
  int process_ut_ivim_update(const OCTETSTRING& data, params& params);
  int process_ut_ivim_termination(const OCTETSTRING& data, params& params);
  int process_ut_mapemspatem_trigger(const OCTETSTRING& data, params& params);
  int process_ut_mapem_spatem_trigger(const OCTETSTRING& data, params& params);
  int process_ut_srem_trigger(const OCTETSTRING& data, params& params);
  int process_ut_srem_update(const OCTETSTRING& data, params& params);
  int process_ut_srem_termination(const OCTETSTRING& data, params& params);
+4 −2
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ mapem_spatem_layer::mapem_spatem_layer(const std::string & p_type, const std::st
  loggers::get_instance().log(">>> mapem_spatem_layer::mapem_spatem_layer: %s, %s", to_string().c_str(), param.c_str());
  // Setup parameters
  params::convert(_params, param);
  _params.insert(std::make_pair<std::string, std::string>("its_aid", "138")); // ETSI TS 102 965 V1.2.1 (2015-06)
  _params.insert(std::make_pair<std::string, std::string>("payload_type", "2")); // MAPE message id - See ETSI TS 102 894

  // Register this object for AdapterControlPort
  loggers::get_instance().log("mapem_spatem_layer::mapem_spatem_layer: Register %s/%p", p_type.c_str(), this);
@@ -52,7 +54,7 @@ void mapem_spatem_layer::receive_data(OCTETSTRING& data, params& params)
  loggers::get_instance().log_msg(">>> mapem_spatem_layer::receive_data: ", data);
  
  // Sanity check
  if (*(static_cast<const unsigned char*>(data)+ 1) == 0x04) { // Check that received packet has MAPE message id 
  if (*(static_cast<const unsigned char*>(data)+ 1) == 0x05) { // Check that received packet has MAPE message id 
    // Decode the MAPEM payload
    LibItsMapemSpatem__TestSystem::MapemInd p;
    _mapem_codec.decode(data, p.msgIn());
@@ -135,7 +137,7 @@ void mapem_spatem_layer::receive_data(OCTETSTRING& data, params& params)
  
    // Pass it to the ports if any
    to_all_upper_ports(p, params);
  } else if (*(static_cast<const unsigned char*>(data)+ 1) == 0x05) { // Check that received packet has SPATE message id 
  } else if (*(static_cast<const unsigned char*>(data)+ 1) == 0x04) { // Check that received packet has SPATE message id 
    // Decode the SPATEM payload
    LibItsMapemSpatem__TestSystem::SpatemInd p;
    _spatem_codec.decode(data, p.msgIn());
+11 −3
Original line number Diff line number Diff line
@@ -61,8 +61,16 @@ int uppertester_mapem_spatem_codec::encode_ (const Base_Type& type, const TTCN_T
    std::string s(field_descriptor.name);
    loggers::get_instance().log("uppertester_mapem_spatem_codec::encode_: field to process %s", s.c_str());
    loggers::get_instance().log("uppertester_mapem_spatem_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
    if (s.compare("@DSRC-REGION-noCircular.RegulatorySpeedLimit.type") == 0) {
      const int t = dynamic_cast<const Enum_Type&>(type).as_int();
      encoding_buffer.put_c((unsigned char)t);
    } else if ((s.compare("@LibItsMapemSpatem_TypesAndValues.UtMapemSpatemTrigger.intersectionID") == 0) || (s.compare("@DSRC-REGION-noCircular.RegulatorySpeedLimit.speed") == 0)) {
      const INTEGER& s = dynamic_cast<const INTEGER&>(type);
      OCTETSTRING os = int2oct(s, 2);
      encoding_buffer.put_s(os.lengthof(), static_cast<const unsigned char*>(os));
    } else {
      type.encode(field_descriptor, encoding_buffer, TTCN_EncDec::CT_RAW);

    }
  }

  loggers::get_instance().log_to_hexa("<<<uppertester_mapem_spatem_codec::encode_: encoding_buffer=", encoding_buffer);
+2 −7
Original line number Diff line number Diff line
@@ -2371,13 +2371,8 @@ module ItsCam_TpFunctions {
            function f_CAM_MSD_GFQ_TI_03() runs on ItsCam {
                
                // Local variables
                timer t_maxTransInterval_min := PICS_T_GENCAMMAX * 0.90;
                timer t_maxTransInterval_max := PICS_T_GENCAMMAX * 1.10;
                timer t_interval_1_measure := PX_TWAIT;
                timer t_interval_1_min;
                timer t_interval_1_max;
                var float v_interval_1_min;
                var float v_interval_1_max;
                var float v_interval_1_measured := 0.0;
                var float v_receiveTime;
                var integer v_N_GenCam := 3;
                var integer v_i;
                
Loading