Commit e4494579 authored by garciay's avatar garciay
Browse files

Start UpperTester changes

parent 0ac6133d
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
#include "LibItsGeoNetworking_EncdecDeclarations.hh"

#include "GeoNetworkingCodec.hh"
#include "UpperTesterCodec.hh"
#include "loggers.hh"

namespace LibItsGeoNetworking__EncdecDeclarations {
@@ -226,4 +227,14 @@ namespace LibItsGeoNetworking__EncdecDeclarations {
    return -1;
  }

  BITSTRING fx__enc__UtGnInitialize (const LibItsGeoNetworking__TypesAndValues::UtGnInitialize& p_utGnInitialize)
  {
    loggers::get_instance().log_msg(">>> fx__enc__UtGnInitialize: ", p_utGnInitialize);
    
    UpperTesterCodec codec;
    OCTETSTRING os;
    codec.encode(p_utGnInitialize, os);
    return oct2bit(os);
  }              

} //end namespace
+5 −1
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ void UpperTesterPort::user_stop()

}

void UpperTesterPort::outgoing_send(const LibItsCommon__TypesAndValues::UtInitialize& send_par)
void UpperTesterPort::outgoing_send(const LibItsGeoNetworking__TypesAndValues::UtGnInitialize& send_par)
{
    loggers::get_instance().log_msg(">>> UppertesterPort::outgoing_send: payload=", send_par);
    
@@ -115,6 +115,10 @@ void UpperTesterPort::receiveMsg (const Base_Type& p_ind, const Params& p_params
      return;
    }

    //loggers::get_instance().log("UpperTesterPort::receive_msg: %s", p_ind.get_descriptor()->name);
    if (std::string(p_ind.get_descriptor()->name).compare("@LibItsGeoNetworking_TypesAndValues.UtGnResults") == 0) { // TODO To be refined
     incoming_message((LibItsGeoNetworking__TypesAndValues::UtGnResults&)p_ind);
    }
}

} /* end of namespace */
+3 −1
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@

//=============================================================================
#include "LibItsGeoNetworking_TestSystem.hh"
#include "LibItsGeoNetworking_TypesAndValues.hh"

namespace LibItsGeoNetworking__TestSystem {

class UpperTesterPort : public UpperTesterPort_BASE {
@@ -34,7 +36,7 @@ protected:
	void user_start();
	void user_stop();

	void outgoing_send(const LibItsCommon__TypesAndValues::UtInitialize& send_par);
	void outgoing_send(const LibItsGeoNetworking__TypesAndValues::UtGnInitialize& send_par);
	
	void outgoing_send(const LibItsCommon__TypesAndValues::UtChangePosition& send_par);
	
+13 −12
Original line number Diff line number Diff line
@@ -171,23 +171,23 @@ void GeoNetworkingLayer::start_beaconing() {
  loggers::get_instance().log(">>> GeoNetworkingLayer::start_beaconing");
  
  // Establish handler for timer signal
  loggers::get_instance().log("GeoNetworkingLayer::start_beaconing: Establishing handler for signal %d\n", SIGALRM);
  loggers::get_instance().log("GeoNetworkingLayer::start_beaconing: Establishing handler for signal %d\n", _signal_id);
  _sa.sa_flags = SA_SIGINFO;
  _sa.sa_sigaction = timer_irq_sigalrm_handler;
  sigemptyset(&_sa.sa_mask);
  if (sigaction(SIGALRM, &_sa, NULL) == -1) {
  if (sigaction(_signal_id, &_sa, NULL) == -1) {
    loggers::get_instance().error("GeoNetworkingLayer::start_beaconing: Sigaction failure: %d", errno);
  }
  // Block timer signal temporarily
  loggers::get_instance().log("GeoNetworkingLayer::start_beaconing: Blocking signal %d\n", SIGALRM);
  loggers::get_instance().log("GeoNetworkingLayer::start_beaconing: Blocking signal %d\n", _signal_id);
  sigemptyset(&_mask);
  sigaddset(&_mask, SIGALRM);
  sigaddset(&_mask, _signal_id);
  if (sigprocmask(SIG_SETMASK, &_mask, NULL) == -1) {
    loggers::get_instance().error("GeoNetworkingLayer::start_beaconing: Sigprocmask failure: %d", errno);
  }	
  // Create the timer 
  _sev.sigev_notify = SIGEV_SIGNAL;
  _sev.sigev_signo = SIGALRM; // Use signal alarm
  _sev.sigev_signo = _signal_id; // Use signal alarm
  _sev.sigev_value.sival_ptr = this; // The GeoNetworkingLayer object address
  if (timer_create(CLOCK_REALTIME, &_sev, &_timerid) == -1) {
    loggers::get_instance().error("GeoNetworkingLayer::start_beaconing: Timer failure: %d", errno);
@@ -208,7 +208,7 @@ void GeoNetworkingLayer::start_beaconing() {
    loggers::get_instance().error("GeoNetworkingLayer::start_beaconing: Sigprocmask failure: %d", errno);
  }
  // Unlock the timer signal, so that timer notification can be delivered
  loggers::get_instance().log("GeoNetworkingLayer::start_beaconing: Unblocking signal %d\n", SIGALRM);
  loggers::get_instance().log("GeoNetworkingLayer::start_beaconing: Unblocking signal %d\n", _signal_id);
  if (sigprocmask(SIG_UNBLOCK, &_mask, NULL) == -1) {
    loggers::get_instance().error("GeoNetworkingLayer::start_beaconing: Sigprocmask failure: %d", errno);
  }
@@ -218,9 +218,9 @@ void GeoNetworkingLayer::stop_beaconing() {
  loggers::get_instance().log(">>> GeoNetworkingLayer::stop_beaconing");
  
  // Block timer signal temporarily
  loggers::get_instance().log("GeoNetworkingLayer::stop_beaconing: Blocking signal %d\n", SIGALRM);
  loggers::get_instance().log("GeoNetworkingLayer::stop_beaconing: Blocking signal %d\n", _signal_id);
  sigemptyset(&_mask);
  sigaddset(&_mask, SIGALRM);
  sigaddset(&_mask, _signal_id);
  if (sigprocmask(SIG_SETMASK, &_mask, NULL) == -1) {
    loggers::get_instance().error("GeoNetworkingLayer::stop_beaconing: Sigprocmask failure: %d", errno);
  }	
@@ -237,7 +237,8 @@ void GeoNetworkingLayer::send_beacon() {
  }
  // Update timestamp
  unsigned long long ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count() - 1072911600000L;  // TODO Add method such as its_tme() & its_time_mod()
  eh->beaconHeader().srcPosVector().timestamp__() = ms;
  eh->beaconHeader().srcPosVector().timestamp__().set_long_long_val(static_cast<unsigned int>(ms));
  //loggers::get_instance().log_msg("GeoNetworkingLayer::send_beacon: ", *_beacon);
  // Encode message using TITAN because of payload in omited
  TTCN_Buffer encoding_buffer;
  _beacon->encode(*(_beacon->get_descriptor()), encoding_buffer, TTCN_EncDec::CT_RAW);
@@ -246,7 +247,7 @@ void GeoNetworkingLayer::send_beacon() {
  Params params(_params);
  sendData(data, params);
  
  loggers::get_instance().log("<<< GeoNetworkingLayer::send_beacon");
  //loggers::get_instance().log("<<< GeoNetworkingLayer::send_beacon");
} // End of send_beacon method

void GeoNetworkingLayer::fill_beacon(INTEGER& p_latitude, INTEGER& p_longitude, OCTETSTRING& p_ll_address)
@@ -313,7 +314,7 @@ void GeoNetworkingLayer::fill_beacon(INTEGER& p_latitude, INTEGER& p_longitude,

  
void GeoNetworkingLayer::timer_irq_sigalrm_handler(int p_signal, siginfo_t *p_signal_info, void *p_uc) {
  loggers::get_instance().log("GeoNetworkingLayer::timer_irq_sigalrm_handler: Caught signal %d\n", p_signal);
  //loggers::get_instance().log(">>> GeoNetworkingLayer::timer_irq_sigalrm_handler: Caught signal %d", p_signal);

  static_cast<GeoNetworkingLayer *>(p_signal_info->si_value.sival_ptr)->send_beacon();
} // End of method timer_irq_sigalrm_handler
+1 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ public:
  void start_beaconing();
  void stop_beaconing();
  void send_beacon();
  const int _signal_id = SIGTERM;
};

#endif
Loading