/* Copyright (c) 2000-2019 Ericsson Telecom AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* Michael Josenhans
******************************************************************************/
//
//  File:               SocketCAN_J1939_test.ttcn
//  Description:        SocketCAN J1939 testcases for J1939 messages
//



module SocketCAN_J1939_test
{
import from J1939 all
import from J1939test all

function create_octetstring_of_size(in integer size) return octetstring {

  var octetstring v_pdu_mod_1024       := ''O
  var octetstring v_pdu_1024           := ''O
  var octetstring v_pdu_mod_1048576    := ''O     //1024*1024
  var octetstring v_pdu_1048576        := ''O
  var octetstring v_pdu_1073741824     := ''O     //1024*1024*1024
  var octetstring v_pdu                := ''O

  var integer vcount :=0
  var integer maxcount
  maxcount := size mod 1024
  for (vcount :=0;vcount < maxcount; vcount := vcount+1){
    v_pdu_mod_1024 := v_pdu_mod_1024 & int2oct((vcount mod 256),1)
  }

log("1")
  for (vcount :=0;vcount < 1024; vcount := vcount+1){
    v_pdu_1024 := v_pdu_1024 & int2oct((vcount mod 256),1)
  }
log("2")
  maxcount := (size /1024) mod 1024
  for (vcount :=0;vcount < maxcount; vcount := vcount+1){
    v_pdu_mod_1048576 := v_pdu_mod_1048576 & v_pdu_1024
  }
  v_pdu_mod_1048576 := v_pdu_mod_1048576 & v_pdu_mod_1024
log("3")
  for (vcount :=0;vcount < 1024; vcount := vcount+1){
    v_pdu_1048576 := v_pdu_1048576 & v_pdu_1024
  }
log("4")
  maxcount := (size / (1024*1024))
  for (vcount :=0;vcount < maxcount; vcount := vcount+1){
    v_pdu_1073741824 := v_pdu_1073741824 & v_pdu_1048576
  }
  v_pdu_1073741824 := v_pdu_1073741824 & v_pdu_mod_1048576
log("5")

  v_pdu := v_pdu_1073741824

  return v_pdu
}

testcase tc_can_j1939_send_and_receive_can_frame() runs on MTC {
  var PTC v_ptc_j1939SendInitiator := PTC.create("PTC1_ptc_j1939SendInitiator") alive
  var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive

  f_addSyncSlaveSet(v_ptc_j1939SendInitiator, v_PTCSet)
  f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet)

  connect(mtc:pt_sync, v_ptc_j1939SendInitiator:pt_sync)
  connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)

  const integer     c_send_prio        := 2
  const octetstring c_addr_source1      := '80'O
  const octetstring c_pgn_destination1  := '00E700'O // ECU to VT
  const octetstring c_addr_destination1 := '90'O



  var octetstring v_pdu_send := ''O
  //v_pdu_send := create_octetstring_of_size(117440505)
                                               
  v_pdu_send := create_octetstring_of_size    (4193975) //4193976

  log("length of v_pdu_send: ", lengthof(v_pdu_send))

  v_ptc_j1939SendInitiator.start(f_ptc_J1939SendInitiator(
      e_testbody1, 
      c_send_prio,
      c_addr_source1,
      c_pgn_destination1,
      c_addr_destination1,
      v_pdu_send))

  v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiver(
      e_testbody2,     
      c_addr_destination1,     /* p_j1939_addr_source */
      c_pgn_destination1,      /* p_peer_pgn */
      c_addr_source1,          /* p_peer_addr */
      J1939_NO_NAME,          /* p_peer_name */
      v_pdu_send              /* p_j1939_pdu_expected */))

  var e_Phase v_phase

  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
    f_startPhase(v_phase)
    log("MTC: ", v_phase)
    f_awaitEndPhase(v_phase)
  }

  all component.done;
  log("MTC done")

  disconnect(mtc:pt_sync, v_ptc_j1939SendInitiator:pt_sync)
  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)

  all component.kill;      
}

testcase tc_can_j1939_send_and_receive_can_frame_parallel() runs on MTC {
  var PTC v_ptc_j1939SendInitiator1 := PTC.create("PTC1_ptc_j1939SendInitiator1") alive
  var PTC v_ptc_j1939FrameReceiver1 := PTC.create("PTC2_ptc_j1939FrameReceiver1") alive
  var PTC v_ptc_j1939SendInitiator2 := PTC.create("PTC1_ptc_j1939SendInitiator2") alive
  var PTC v_ptc_j1939FrameReceiver2 := PTC.create("PTC2_ptc_j1939FrameReceiver2") alive
  f_addSyncSlaveSet(v_ptc_j1939SendInitiator1, v_PTCSet)
  f_addSyncSlaveSet(v_ptc_j1939FrameReceiver1, v_PTCSet)
  f_addSyncSlaveSet(v_ptc_j1939SendInitiator2, v_PTCSet)
  f_addSyncSlaveSet(v_ptc_j1939FrameReceiver2, v_PTCSet)
  connect(mtc:pt_sync, v_ptc_j1939SendInitiator1:pt_sync)
  connect(mtc:pt_sync, v_ptc_j1939FrameReceiver1:pt_sync)
  connect(mtc:pt_sync, v_ptc_j1939SendInitiator2:pt_sync)
  connect(mtc:pt_sync, v_ptc_j1939FrameReceiver2:pt_sync)

  const integer     c_send_prio        := 2
  const octetstring c_addr_source1      := '80'O
  const octetstring c_pgn_destination1  := '00E700'O // ECU to VT
  const octetstring c_addr_destination1 := '90'O 
  const octetstring c_addr_source2      := '80'O
  const octetstring c_pgn_destination2  := '00E700'O // ECU to VT
  const octetstring c_addr_destination2 := '91'O 

  var octetstring v_pdu_send1 := ''O
  var octetstring v_pdu_send2 := ''O
  //v_pdu_send := create_octetstring_of_size(117440505)
  v_pdu_send1 := create_octetstring_of_size(4193976)
  log("length of v_pdu_send1: ", lengthof(v_pdu_send1))
  v_pdu_send2 := create_octetstring_of_size(4193976)
  log("length of v_pdu_send2: ", lengthof(v_pdu_send2))

  v_ptc_j1939SendInitiator1.start(f_ptc_J1939SendInitiator(
      e_testbody1, 
      c_send_prio,
      c_addr_source1,
      c_pgn_destination1,
      c_addr_destination1,
      v_pdu_send1))

  v_ptc_j1939FrameReceiver1.start(f_ptc_J1939FrameReceiver(
      e_testbody2,     
      c_addr_destination1,     /* p_j1939_addr_source */
      c_pgn_destination1,      /* p_peer_pgn */
      c_addr_source1,          /* p_peer_addr */
      J1939_NO_NAME,           /* p_peer_name */
      v_pdu_send1              /* p_j1939_pdu_expected */))

  v_ptc_j1939SendInitiator2.start(f_ptc_J1939SendInitiator(
      e_testbody1, 
      c_send_prio,
      c_addr_source2,
      c_pgn_destination2,
      c_addr_destination2,
      v_pdu_send2))

  v_ptc_j1939FrameReceiver2.start(f_ptc_J1939FrameReceiver(
      e_testbody2,     
      c_addr_destination2,     /* p_j1939_addr_source */
      c_pgn_destination2,      /* p_peer_pgn */
      c_addr_source2,          /* p_peer_addr */
      J1939_NO_NAME,           /* p_peer_name */
      v_pdu_send2              /* p_j1939_pdu_expected */))

  var e_Phase v_phase

  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
    f_startPhase(v_phase)
    log("MTC: ", v_phase)
    f_awaitEndPhase(v_phase)
  }
    all component.done;
  log("MTC done")

  disconnect(mtc:pt_sync, v_ptc_j1939SendInitiator1:pt_sync)
  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver1:pt_sync)
  disconnect(mtc:pt_sync, v_ptc_j1939SendInitiator2:pt_sync)
  disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver2:pt_sync)
  all component.kill;      
}

testcase tc_can_f_j1939_address_claim() runs on MTC {
  var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive

  f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet)

  connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)

  const J1939_NAME c_j1939_name_source  := '1122334455667788'O

  v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim(
  	e_testbody1, 
    c_j1939_name_source))

  var e_Phase v_phase

  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
    f_startPhase(v_phase)
    log("MTC: ", v_phase)
    f_awaitEndPhase(v_phase)
  }

  all component.done;
  log("MTC done")

  disconnect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)


  all component.kill;      
}

testcase tc_can_f_j1939_address_claim2() runs on MTC {
  var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive

  f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet)

  connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)

  const J1939_NAME  c_j1939_name_source  := '1122334455667788'O
  const octetstring c_j1939_pdu_send     := '00EE00'O
  
  v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim2(
  	e_testbody1, 
    c_j1939_name_source,
    c_j1939_pdu_send))

  var e_Phase v_phase

  for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
    f_startPhase(v_phase)
    log("MTC: ", v_phase)
    f_awaitEndPhase(v_phase)
  }

  all component.done;
  log("MTC done")

  disconnect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)


  all component.kill;      
}

//=========================================================================
// Control
//=========================================================================

// Insert control part here if applicable!

}  // end of module
