Commit 9ace66e6 authored by Yann Garcia's avatar Yann Garcia
Browse files

Standbye in CPS drafting

parent 80a82ee5
Loading
Loading
Loading
Loading
Loading
+3 −22
Original line number Diff line number Diff line
@@ -3,32 +3,11 @@
		{
			"path": "."
		},
		{
			"path": "../../tmp/crypto-test-vectors"
		},
		{
			"path": "../../frameworks/openssl"
		},
		{
			"path": "../../frameworks/titan/titan.core"
		},
		{
			"path": "../../frameworks/fsmsggen"
		},
		{
			"path": "../../tmp/titan_etsi_its_per_issue"
		},
		{
			"path": "../../tmp/titan_5gngap_per_issue"
		},
		{
			"path": "../../tmp/test_cpp"
		},
		{
			"path": "../TS.ITS.pipeline-scripts"
		},
		{
			"path": "../itscertgen-r2"
		}
	],
	"settings": {
@@ -113,7 +92,9 @@
			"msggen_comm.h": "c",
			"time.h": "c",
			"pthread.h": "c",
			"msggen.h": "c"
			"msggen.h": "c",
			"uri_port_utils.h": "c",
			"uppertester.h": "c"
		},
		"java.compile.nullAnalysis.mode": "automatic"
	},
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@

//=============================================================================
#include "LibItsCps_TestSystem.hh"

namespace LibItsCps__TestSystem {

  class UpperTesterPort : public UpperTesterPort_BASE {
+2 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@

#ifdef AtsCPS
#include "BTP_ports/UpperTesterPort_BTP.hh"
#include "CAM_ports/UpperTesterPort_CAM.hh"
#include "CPS_ports/UpperTesterPort_CPS.hh"
#include "GN_ports/UpperTesterPort_GN.hh"
#endif
@@ -158,6 +159,7 @@

#ifdef AtsCPS
#include "UpperTesterPort_BTP.hh"
#include "UpperTesterPort_CAM.hh"
#include "UpperTesterPort_CPS.hh"
#include "UpperTesterPort_GN.hh"
#endif
+75 −11
Original line number Diff line number Diff line
@@ -37,19 +37,29 @@ int uppertester_cps_codec::encode(const LibItsCps__TypesAndValues::UtCpmTrigger
  encoding_buffer.put_c(static_cast<const uint8_t>(uppertester_cps_codec::c_utCpmTrigger));
  uint8_t                                                  flags = 0x00;
  OCTETSTRING                                              val;
  if (r.setVehicleRole().is_present()) {
  if (r.ischosen(LibItsCps__TypesAndValues::UtCpmTrigger::ALT_setVehicleRole)) {
    flags |= 0x80;
    val = int2oct(r.setVehicleRole(), 1);
  // } else if (r.leaveClusterWithCause().is_present()) {
  //   flags |= 0x40;
  //   val = int2oct(r.leaveClusterWithCause(), 1);
  // } else if (r.setVbsState().is_present()) {
  //   flags |= 0x20;
  //   val = int2oct(r.setVbsState(), 1);
    val = int2oct(r.setVehicleType(), 1);
  } else {
    val = int2oct(0, 1);
  }
  if (r.ischosen(LibItsCps__TypesAndValues::UtCpmTrigger::ALT_setPerceivedObjects)) {
    flags |= 0x40;
    OCTETSTRING os;
    encode(r.setPerceivedObjects(), os);
    val += int2oct(os.lengthof(), 2); // PerceivedObjectsLen set to real length
    val += os;
  } else {
    val += int2oct(0, 2); // PerceivedObjectsLen set to 0
  }
  if (r.ischosen(LibItsCps__TypesAndValues::UtCpmTrigger::ALT_segmentedCpm)) {
    flags |= 0x20;
    val += int2oct(r.segmentedCpm(), 2);
  }
  encoding_buffer.put_c(flags);
  encoding_buffer.put_string(val);
  data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data());

  loggers::get_instance().log_msg("<<< uppertester_cps_codec::encode: data=", data);
  return 0;
}
@@ -61,21 +71,75 @@ int uppertester_cps_codec::encode(const Record_Type &msg, OCTETSTRING &data) {
  TTCN_Buffer encoding_buffer;
  if (std::string(msg.get_descriptor()->name).compare("@LibItsCps_TypesAndValues.UtCpmInitialize") == 0) {
    encoding_buffer.put_c(static_cast<const uint8_t>(uppertester_cps_codec::c_utCpmInitialize));
  } else if (std::string(msg.get_descriptor()->name).compare("@LibItsCps_TypesAndValues.UtCpmPerceivedObjects") == 0) {
    encode_(msg, *msg.get_descriptor(), encoding_buffer);
  } else { // Error
    data = OCTETSTRING(0, nullptr);
    loggers::get_instance().warning("<<< uppertester_cps_codec::encode: Failed to encode UT message");
    return -1;
  }
  encode_(msg, *msg.get_descriptor(), encoding_buffer);
  data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data());
  loggers::get_instance().log_msg("<<< uppertester_cps_codec::encode: data=", data);
  return 0;
}

int uppertester_cps_codec::encode_(const Record_Of_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &encoding_buffer) {
  loggers::get_instance().log_msg(">>> uppertester_cps_codec::encode_ (2): ", type);

  for (int i = 0; i < type.size_of(); i++) {
    const Base_Type& t = *type.get_at(i);
    if (encode_(t, *t.get_descriptor(), encoding_buffer) == -1) {
      loggers::get_instance().warning("uppertester_cps_codec::encode_ (2): -1 result code returned");
      return -1;
    }
  } // End of 'for' statement

  loggers::get_instance().log_to_hexa("<<<uppertester_cps_codec::encode_ (2): encoding_buffer=", encoding_buffer);
  return 0;
}

int uppertester_cps_codec::encode_(const Base_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &encoding_buffer) {
  loggers::get_instance().error(">>> uppertester_cps_codec::encode (3)");
  loggers::get_instance().log(">>> uppertester_cps_codec::encode_: processing %s/%s/%p", type.get_descriptor()->name, field_descriptor.name,
                              dynamic_cast<const Record_Type *>(&type));
  loggers::get_instance().log_msg(">>> uppertester_cps_codec::encode_: ", type);

  if (dynamic_cast<const Record_Type *>(&type) != NULL) {
    const Record_Type &r = (const Record_Type &)type;
    loggers::get_instance().log("uppertester_cps_codec::encode_: processing Record_Type %s", r.get_descriptor()->name);
    for (int i = 0; i < r.get_count(); i++) {
      loggers::get_instance().log("uppertester_cps_codec::encode_: processing %s/%s/%s - %d (1 ==> use dynamic_cast<const OPTIONAL<...>) - %d", r.fld_name(i),
                                  r.fld_descr(i)->name, r.get_at(i)->get_descriptor()->name, r.get_at(i)->is_optional(), r.get_at(i)->is_present());
      if (std::string(r.fld_name(i)).compare("perceivedObjects") == 0) {
        loggers::get_instance().log("uppertester_cps_codec::encode_: Calling encode_ (2) for %s", r.fld_name(i));
        if (encode_(static_cast<const Record_Of_Type&>(*r.get_at(i)), *r.fld_descr(i), encoding_buffer) == -1) {
          loggers::get_instance().warning("uppertester_cps_codec::encode_: -1 result code returned");
          return -1;
        }
      } else {
        loggers::get_instance().log("uppertester_cps_codec::encode_: Calling encode_ for %s", r.fld_name(i));
        if (encode_(*r.get_at(i), *r.fld_descr(i), encoding_buffer) == -1) {
          loggers::get_instance().warning("uppertester_cps_codec::encode_: -1 result code returned");
          return -1;
        }
      }
    } // End of 'for' statement
  } else {
    std::string s(field_descriptor.name);
    loggers::get_instance().log("uppertester_cps_codec::encode_: field to process %s", s.c_str());
    if ((s.rfind(".measurementDeltaTime") != string::npos) || (s.rfind(".latitude") != string::npos) || (s.rfind(".longitude") != string::npos)
        || (s.rfind(".altitude") != string::npos) || (s.rfind(".confidence") != string::npos)
        || (s.rfind(".objectId") != string::npos)) {
      const INTEGER &i = static_cast<const INTEGER &>(type);
      encoding_buffer.put_string(int2oct(i, 4));
    } else {
      loggers::get_instance().log("uppertester_cps_codec::encode_ (else): processing type %s/%s", type.get_descriptor()->name, field_descriptor.name);
      type.encode(field_descriptor, encoding_buffer, TTCN_EncDec::CT_RAW);
    }
  }

  loggers::get_instance().log_to_hexa("<<<uppertester_cps_codec::encode_: encoding_buffer=", encoding_buffer);
  return 0;
}

int uppertester_cps_codec::decode(const OCTETSTRING &data, Record_Type &msg, params_its *params) {
  TTCN_EncDec::clear_error();
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ static uint8_t c_utCpmEventInd;

private:
  int encode_(const Base_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &encoding_buffer);
  int encode_(const Record_Of_Type &type, const TTCN_Typedescriptor_t &field_descriptor, TTCN_Buffer &encoding_buffer);

public:
  uppertester_cps_codec() : codec<Record_Type, Record_Type>(){};
Loading