module Isobus_Templates {

import from IsobusMessageTypes all
import from IsobusVTMessageTypes all
import from IsobusCMMessageTypes all
import from IsobusNMMessageTypes all
import from Isobus all
import from General_Types all


template CAN_frame_j1939 t_message(Isobus.Priority prio_param, BIT1 res_param, BIT1 dp_param, 
  OCT1 pf_param, OCT1 ps_param, SourceAddress sa_param, template AnyIsoBusPdu t_can_pdu) 
:= { can_j1939 := {
    prio := prio_param, 
    res := res_param, 
    dp  := dp_param,
    pf  := pf_param,
    ps  := ps_param,
    sa  := sa_param},
  can_pdu := t_can_pdu
}

template CAN_frame_j1939 t_network_message(Isobus.Priority prio_param, BIT1 res_param, BIT1 dp_param, 
  OCT1 pf_param, OCT1 ps_param, SourceAddress sa_param, template IsobusNMMessageTypes.NetworkMessage t_networkMessage) 
:= { can_j1939 := {
    prio := prio_param, 
    res := res_param, 
    dp  := dp_param,
    pf  := pf_param,
    ps  := ps_param,
    sa  := sa_param},
  can_pdu := {networkMessage := t_networkMessage}
}

template ECU2VT t_GetMemoryReqX( INT3 p_memoryRequired) := {
  getMemoryReq := {
    vtfunction                      := 194,
    reserved2                       := 'FF'O,
    memoryRequired                  := p_memoryRequired,
    reserved7                       := 'FF'O,
    reserved8                       := 'FF'O
  }
};

template AnyIsoBusPdu t_ecu2vt(template ECU2VT t_Message) := {
  ecu2vt := t_Message
};

template AnyIsoBusPdu t_vt2ecu(template VT2ECU t_Message) := {
  vt2ecu := t_Message
};

template AnyIsoBusPdu t_GetMemoryReq_pdu(INT3 p_memoryRequired) := {
  ecu2vt := {getMemoryReq := t_GetMemoryReq(p_memoryRequired)}
}


template ButtonActivationReq t_ButtonActivationReq(
  template e_ButtonActivationReq_KeyAactivationCode p_keyAactivationCode,
  template ValidObjectID                            p_objectID,
  template ValidObjectID                            p_parentObjectID,
  template KeyNumberType                            p_buttonKeyCode) := {
  vtfunction                    := 1,
  keyAactivationCode            := p_keyAactivationCode,
  objectID                      := p_objectID,
  parentObjectID                := p_parentObjectID,
  buttonKeyCode                 := p_buttonKeyCode,
  reserved8                     := 'FF'O
}

template ButtonActivationRes t_ButtonActivationRes (
  template e_ButtonActivationRes_KeyAactivationCode p_keyAactivationCode,
  template ValidObjectID                            p_objectID,
  template ValidObjectID                            p_parentObjectID,
  template KeyNumberType                            p_buttonKeyCode
) := {
  vtfunction                    := 1,
  keyAactivationCode            := p_keyAactivationCode,
  objectID                      := p_objectID,
  parentObjectID                := p_parentObjectID,
  buttonKeyCode                 := p_buttonKeyCode,
  reserved8                     := 'FF'O
} 

template PointingEventReq t_PointingEventReq (
  template PositionType                    p_x_position,
  template PositionType                    p_y_position,
  template e_PointingEvent_touchState      p_touchState) := {
  vtfunction                    := 2,
  x_position                    := p_x_position,
  y_position                    := p_y_position,
  touchState                    := p_touchState,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template PointingEventRes t_PointingEventRes (
  template PositionType                  p_x_position,
  template PositionType                  p_y_position,
  template e_PointingEvent_touchState    p_touchState) := {
  vtfunction                  := 2,
  x_position                  := p_x_position,
  y_position                  := p_y_position,
  touchState                  := p_touchState,
  reserved7                   := 'FF'O,
  reserved8                   := 'FF'O
}

template VTSelectInputObjectReq t_VTSelectInputObjectReq (
  template ValidObjectID                          p_objectID,
  template e_VTSelectInputObject_selection        p_selection,
  template boolean                                p_objectIsOpenForDataInput,
  template boolean                                p_reserved
  // p_reserved for v3 or earlier: true , for v4 and later: false
) := {
  vtfunction                   := 3,
  objectID                     := p_objectID,
  selection                    := p_selection,
  bitmask                      := {
    objectIsOpenForDataInput     := p_objectIsOpenForDataInput,
    reserved1                    := p_reserved,
    reserved2                    := p_reserved,
    reserved3                    := p_reserved,
    reserved4                    := p_reserved,
    reserved5                    := p_reserved,
    reserved6                    := p_reserved,
    reserved7                    := p_reserved},
  reserved6                    := 'FF'O,
  reserved7                    := 'FF'O,
  reserved8                    := 'FF'O
}

template VTSelectInputObjectReq_v3AndPrior t_VTSelectInputObjectReq_v3AndPrior (
  template ValidObjectID                   p_objectID,
  template e_VTSelectInputObject_selection p_selection) := {
  vtfunction                   := 3,
  objectID                     := p_objectID,
  selection                    := p_selection,
  reserved5                    := 'FF'O,
  reserved6                    := 'FF'O,
  reserved7                    := 'FF'O,
  reserved8                    := 'FF'O
} 

template VTSelectInputObjectReq_v4AndLater t_VTSelectInputObjectReq_v4AndLater (
  template ValidObjectID                          p_objectID,
  template e_VTSelectInputObject_selection        p_selection,
  template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
  vtfunction                   := 3,
  objectID                     := p_objectID,
  selection                    := p_selection,
  bitmask                      := p_bitmask,
  reserved6                    := 'FF'O,
  reserved7                    := 'FF'O,
  reserved8                    := 'FF'O
}

template VTSelectInputObjectRes t_VTSelectInputObjectRes(
  template ValidObjectID                          p_objectID,
  template e_VTSelectInputObject_selection        p_selection,
  template boolean                                p_objectIsOpenForDataInput,
  template boolean                                p_reserved
  // p_reserved for v3 or earlier: true , for v4 and later: false
) := {
  vtfunction                    := 3,
  objectID                      := p_objectID,
  selection                     := p_selection,
  bitmask                      := {
    objectIsOpenForDataInput     := p_objectIsOpenForDataInput,
    reserved1                    := p_reserved,
    reserved2                    := p_reserved,
    reserved3                    := p_reserved,
    reserved4                    := p_reserved,
    reserved5                    := p_reserved,
    reserved6                    := p_reserved,
    reserved7                    := p_reserved},
  reserved6                     := 'FF'O,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template VTSelectInputObjectRes_v4AndPrior t_VTSelectInputObjectRes_v4AndPrior(
  template   ValidObjectID                   p_objectID,
  template   e_VTSelectInputObject_selection p_selection) := {
  vtfunction                   := 3,
  objectID                     := p_objectID,
  selection                    := p_selection,
  reserved5                    := 'FF'O,
  reserved6                    := 'FF'O,
  reserved7                    := 'FF'O,
  reserved8                    := 'FF'O
}

template VTSelectInputObjectRes_v5AndLater t_VTSelectInputObjectRes_v5AndLater(
  template ValidObjectID                          p_objectID,
  template e_VTSelectInputObject_selection        p_selection,
  template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
  vtfunction                    := 3,
  objectID                      := p_objectID,
  selection                     := p_selection,
  bitmask                       := p_bitmask,
  reserved6                     := 'FF'O,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template VTESCReq t_VTESCReq (
  template AnyObjectID          p_objectID,
  template VTESC_ErrorCodes     p_errorCodes) := {
  vtfunction                    := 4,
  objectID                      := p_objectID,
  errorCodes                    := p_errorCodes,
  reserved5                     := 'FF'O,
  reserved6                     := 'FF'O,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template VTESCRes t_VTESCRes (
  template AnyObjectID        p_objectID) :={
  vtfunction                    := 4,
  objectID                      := p_objectID, 
  reserved4                     := 'FF'O,
  reserved5                     := 'FF'O,
  reserved6                     := 'FF'O,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template VTChangeNumericValueReq t_VTChangeNumericValueReq (
  template ValidObjectID       p_objectID,
  template OCT4                p_value) := {
  vtfunction                     := 5,
  objectID                       := p_objectID,
  reserved4                      := 'FF'O,
  value_                         := p_value
} 

template VTChangeNumericValueRes t_VTChangeNumericValueRes (
  template ValidObjectID       p_objectID,
  template OCT4                p_value) := {
  vtfunction                     := 5,
  objectID                       := p_objectID,
  reserved4                      := 'FF'O,
  value_                         := p_value
} 

template VTChangeActiveMaskReq t_VTChangeActiveMaskReq (
  template ValidObjectID                   p_activeMaskOrWindowMaskOrKeyGroupObjectID,
  template VTChangeActiveMasErrorcodes     p_errorCodes,
  template ValidObjectID                   p_objectIDcontainingError,
  template ValidObjectID                   p_parentObjectIDofErrorObjectID) := 
{
  vtfunction                               := 6,
  activeMaskOrWindowMaskOrKeyGroupObjectID := p_activeMaskOrWindowMaskOrKeyGroupObjectID,
  errorCodes                               := p_errorCodes,
  objectIDcontainingError                  := p_objectIDcontainingError,
  parentObjectIDofErrorObjectID            := p_parentObjectIDofErrorObjectID
}

template VTChangeActiveMaskRes t_VTChangeActiveMaskRes (
	template   ValidObjectID                   p_activeMaskObjectID) := {
  vtfunction                    := 6,
  activeMaskObjectID            := p_activeMaskObjectID,
  reserved4                     := 'FF'O,
  reserved5                     := 'FF'O,
  reserved6                     := 'FF'O,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template VTChangeSoftKeyMaskReq t_VTChangeSoftKeyMaskReq(
  template ValidObjectID                   p_dataOrAlarmMaskObjectID,
  template ValidObjectID                   p_softKeyMaskObjectID,
  template VTChangeSoftKeyMaskErrorCodes   p_errorCodes) := 
{
  vtfunction                    := 7,
  dataOrAlarmMaskObjectID       := p_dataOrAlarmMaskObjectID,
  softKeyMaskObjectID           := p_softKeyMaskObjectID,
  errorCodes                    := p_errorCodes,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template VTChangeSoftKeyMaskRes t_VTChangeSoftKeyMaskRes(
  template ValidObjectID                   p_dataOrAlarmMaskObjectID,
  template ValidObjectID                   p_softKeyMaskObjectID) := 
{
  vtfunction                    := 7,
  dataOrAlarmMaskObjectID       := p_dataOrAlarmMaskObjectID,
  softKeyMaskObjectID           := p_softKeyMaskObjectID,
  reserved6                     := 'FF'O,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template VTChangeStringValueReq t_VTChangeStringValueReq (
  template ValidObjectID                   p_inputStringOrStringVariableObjectID,
  template octetstring                     p_enteredStringValue) := 
{
  vtfunction                            := 8,
  inputStringOrStringVariableObjectID   := p_inputStringOrStringVariableObjectID,
  numberOfBytes                         := lengthof(p_enteredStringValue),
  enteredStringValue                    := p_enteredStringValue
} 

template VTChangeStringValueRes t_VTChangeStringValueRes (
	template ValidObjectID                   p_inputStringOrStringVariableObjectID) :=
{
  vtfunction                            := 8,
  reserved2                             := 'FF'O,
  reserved3                             := 'FF'O,
  inputStringOrStringVariableObjectID   := p_inputStringOrStringVariableObjectID,
  reserved6                             := 'FF'O,
  reserved7                             := 'FF'O,
  reserved8                             := 'FF'O
}

template GetSupportedWidecharsReq t_GetSupportedWidecharsReq(e_Codeplane p_codeplane, OCT2 p_firstWideCharInInquiryRange, OCT2 p_lastWideCharInInquiryRange) := {
  vtfunction                  := 193,
  codeplane                   := p_codeplane,
  firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
  lastWideCharInInquiryRange  := p_lastWideCharInInquiryRange,
  reserved7                   := 'FF'O,
  reserved8                   := 'FF'O
}

template GetSupportedWidecharsRes t_GetSupportedWidecharsRes(e_Codeplane p_codeplane, OCT2 p_firstWideCharInInquiryRange, 
  OCT2 p_lastWideCharInInquiryRange,
  INT1 p_numberOfRanges, 
  WideCharRangeArray p_wideCharRangeArray) := 
{
  vtfunction                  := 193,
  codeplane                   := p_codeplane,
  firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
  lastWideCharInInquiryRange  := p_lastWideCharInInquiryRange,
  numberOfRanges              := p_numberOfRanges, 
  wideCharRangeArray          := p_wideCharRangeArray
}

template GetMemoryReq t_GetMemoryReq(INT3 p_memoryRequired) := {
  vtfunction                    := 194,
  reserved2                     := 'FF'O,
  memoryRequired                := p_memoryRequired,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template GetMemoryRes t_GetMemoryRes(e_GetMemoryResVersionNumber p_versionNumber, e_GetMemoryResStatus p_status) := {
  vtfunction                      := 194,
  versionNumber                   := p_versionNumber,
  status                          := p_status,
  reserved4                       := 'FF'O,
  reserved5                       := 'FF'O,
  reserved6                       := 'FF'O,
  reserved7                       := 'FF'O,
  reserved8                       := 'FF'O
}

template AnyIsoBusPdu t_WorkingSetMaintenanceReq_pdu(
  WorkingSetMaintenanceBitMask p_bitMask, 
  e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
  ecu2vt := {workingSetMaintenanceReq := t_WorkingSetMaintenanceReq(p_bitMask, p_versionNumber)}
}

template WorkingSetMaintenanceReq t_WorkingSetMaintenanceReq(
  WorkingSetMaintenanceBitMask p_bitMask, 
  e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
  vtfunction                    := 255,
  bitMask                       := p_bitMask,
  versionNumber                 := p_versionNumber,    
  reserved4                     := 'FF'O,
  reserved5                     := 'FF'O,
  reserved6                     := 'FF'O,
  reserved7                     := 'FF'O,
  reserved8                     := 'FF'O
}

template N_SP_Response t_N_SP_Response(template e_PortNumber t_fromPort, 
  template e_PortNumber t_toPort, 
  template N_SP_Response.requestedParametrics requestedParametrics_param) := {  
  msgFunction := 132,
  portPair := {fromPort := t_fromPort, toPort := t_toPort},
  requestedParametrics := requestedParametrics_param
}

template AnyIsoBusPdu t_N_SP_Response_pdu(template e_PortNumber t_fromPort, 
  template e_PortNumber t_toPort, 
  template N_SP_Response.requestedParametrics t_requestedParametrics_param) := {  
  networkMessage := {n_SP_Response := t_N_SP_Response(t_fromPort, t_toPort, t_requestedParametrics_param)
  }}


}

