/*
* Contributors:
* Michael Josenhans
*/

module IsobusNMMessageTypes {

import from General_Types all
import from IsobusMessageTypes all

type OCT1 DestinationAddress

type OCT1 PDUFormat
type OCT1 SourceAddress
//type OCT8 NAME 

type bitstring Priority length(6)
with {
  variant "ALIGN(left)";
  variant "FIELDLENGTH(6)"
}

type BIT1  SelfConfigurableAddressBits
type BIT3  IndustryGroupBits
type BIT4  DeviceClassInstanceBits
type BIT7  DeviceClassBits
type BIT1  ReservedBits
type BIT8  FunctionBits
type BIT5  FunctionInstanceBits
type BIT3  ECUInstanceBits
type BIT11 ManufacturerCodeBits
type BIT21 IdentityNumberBits

type record NAME {
  SelfConfigurableAddressBits selfConfigurableAddressValue,
  IndustryGroupBits           industryGroupValue,
  DeviceClassInstanceBits     deviceClassInstanceValue,
  DeviceClassBits             deviceClassValue,
  ReservedBits                reserveValued,
  FunctionBits                functionValue,
  FunctionInstanceBits        functionInstanceValue,
  ECUInstanceBits             ecuInstancceValue,
  ManufacturerCodeBits        manufacturerCodeValue,
  IdentityNumberBits          identityNumberBits
} with { variant "FIELDORDER(msb)" }


type record CannotClaimSourceAddress
{
  NAME          name
} with { variant "" }

type record AddressClaimed
{
  NAME          name
} with { variant "" }

type record RequestForAddressClaimed {
  PGN          pgn
} with { variant "" }



type record CommandedAddress {
  NAME          name,
  SourceAddress newSourceAddress
} with { variant "" }

// --------- NetworkMessage -------------

type INT1 Function

type record N_MFDB_Request 
{
  Function                                  msgFunction (0),
  PortPair                                  portPair,  
  OCT1                                      reserved3  ('FF'O),
  OCT1                                      reserved4  ('FF'O),
  OCT1                                      reserved5  ('FF'O),
  OCT1                                      reserved6  ('FF'O),
  OCT1                                      reserved7  ('FF'O),
  OCT1                                      reserved8  ('FF'O)
} with {variant "" };

type record N_MFDB_Response
{
  Function                                  msgFunction (1),
  PortPair                                  portPair,  
  e_FilterMode                              filterMode,
  record length (1..infinity) of PGN        pgnEntries
} with {variant "" };


type record N_MFDB_Add
{
  Function                                  msgFunction (2),
  PortPair                                  portPair,  
  record length (1..infinity) of PGN        pgnEntries
} with {variant "" };

type record N_MFDB_Delete
{
  Function                                  msgFunction (3),
  PortPair                                  portPair,  
  record length (1..infinity) of PGN        pgnEntries
} with {variant "" };

type record N_MFDB_Clear 
{
  Function                                  msgFunction (4),
  PortPair                                  portPair,  
  OCT1                                      reserved3  ('FF'O),
  OCT1                                      reserved4  ('FF'O),
  OCT1                                      reserved5  ('FF'O),
  OCT1                                      reserved6  ('FF'O),
  OCT1                                      reserved7  ('FF'O),
  OCT1                                      reserved8  ('FF'O)
} with {variant "" };

type record N_MFDB_Create_Entry
{
  Function                                  msgFunction (6),
  PortPair                                  portPair,  
  e_FilterMode                              filterMode,
  record length (1..infinity) of PGN        pgnEntries
} with {variant "" };

type record PGNEntry
{
  INT1                                      maxTransferRate,
  PGN                                       pgn,
  NAME                                      name,
  OCT8                                      nameQualifier
} with {variant "" };

type record N_MFDBNQ_Add
{
  Function                                  msgFunction (7),
  PortPair                                  portPair,  
  e_FilterMode                              filterMode,
  OCT1                                      reserved4  ('FF'O),  
  record length (1..infinity) of PGNEntry   pgnEntries
} with {variant "" };


type record N_NT_Request 
{
  Function                                  msgFunction (64),
  PortNibble                                portPair,  
  OCT1                                      reserved3  ('FF'O),
  OCT1                                      reserved4  ('FF'O),
  OCT1                                      reserved5  ('FF'O),
  OCT1                                      reserved6  ('FF'O),
  OCT1                                      reserved7  ('FF'O),
  OCT1                                      reserved8  ('FF'O)
} with {variant "" };

type record N_NT_Response 
{
  Function                                      msgFunction (65),
  PortNibble                                    portPair,  
  record length (1..infinity) of SourceAddress  SourceAddressEntries
} with {variant "" };

type record N_NTX_Request 
{
  Function                                  msgFunction (66),
  PortNibble                                portPair,  
  OCT1                                      reserved3  ('FF'O),
  OCT1                                      reserved4  ('FF'O),
  OCT1                                      reserved5  ('FF'O),
  OCT1                                      reserved6  ('FF'O),
  OCT1                                      reserved7  ('FF'O),
  OCT1                                      reserved8  ('FF'O)
} with {variant "" };


type record SA_NAME_pair
{
  SourceAddress                             sourceAddress,
  NAME                                      name
} with {variant "" };

type record N_NTX_Response 
{
  Function                                    msgFunction (67),
  PortNibble                                  portPair,  
  INT1                                        numberOfReportedPorts,
  record length (1..infinity) of SA_NAME_pair sourceaddress_NAME_pairs
} with {
  variant (numberOfReportedPorts) "LENGTHTO(sourceaddress_NAME_pairs)";
  variant (numberOfReportedPorts) "UNIT(elements)"
}

type enumerated e_ParametricIdentifier { 
  requestAllParameters                         (0),
  buffersize                                   (1),
  maximumFilterDatabaseSize                    (2),
  numberOfFilterDatabaseEntries                (3),
  maximumNumberOfMessagesReceivedPerSecond     (4),
  maximumNumberOfMessagesForwardedPerSecond    (5),
  maximumNumberOfMessagesFilteredPerSecond     (6),
  maximumTransitDelayTime_ms                   (7),
  averageTransitDelayTime_ms                   (8),
  numberOfMessagesLostDueToBufferOverflow      (9),
  numberOfMessagesWithExcessTransitDelayTime  (10),
  averageNumberOfMessagesReceivedPerSecond    (11),
  averageNumberOfMessagesForwardedPerSecond   (12),
  averageNumberOfMessagesFilteredPerSecond    (13),
  uptimeSinceLastPowerOnReset_s               (14),
  numberOfPorts                               (15),
  networkInterconnectionUnitType              (16),
  reserved                                   (255) // for message padding (workaround) 
}
with {variant "PADDING(octet)"}

type record N_GP_Request 
{
  Function                                    msgFunction (128),
  record length (6..255) of e_ParametricIdentifier parametricIdentifiers
  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved within ParametricIdentifiers
  // this is the easiest way to handle it
} with {
  variant "" }

// begin not used
// the following is currently not used as it is impossible to handle it with raw encoding
type OCT2 Buffersize
type OCT2 MaximumFilterDatabaseSize
type OCT2 NumberOfFilterDatabaseEntries
type OCT2 MaximumNumberOfMessagesReceivedPerSecond
type OCT2 MaximumNumberOfMessagesForwardedPerSecond
type OCT2 MaximumNumberOfMessagesFilteredPerSecond
type OCT2 MaximumTransitDelayTime_ms
type OCT2 AverageTransitDelayTime_ms
type OCT2 NumberOfMessagesLostDueToBufferOverflow
type OCT2 NumberOfMessagesWithExcessTransitDelayTime
type OCT2 AverageNumberOfMessagesReceivedPerSecond
type OCT2 AverageNumberOfMessagesForwardedPerSecond
type OCT2 AverageNumberOfMessagesFilteredPerSecond
type OCT4 UptimeSinceLastPowerOnReset_s
type OCT1 NumberOfPorts
type OCT1 NetworkInterconnectionUnitType
type OCT1 Reserved ('FF'O)

type union RequestedParametric
{
  Buffersize                                 buffersize,
  MaximumFilterDatabaseSize                  maximumFilterDatabaseSize,
  NumberOfFilterDatabaseEntries              numberOfFilterDatabaseEntries,
  MaximumNumberOfMessagesReceivedPerSecond   maximumNumberOfMessagesReceivedPerSecond,
  MaximumNumberOfMessagesForwardedPerSecond  maximumNumberOfMessagesForwardedPerSecond,
  MaximumNumberOfMessagesFilteredPerSecond   maximumNumberOfMessagesFilteredPerSecond,
  MaximumTransitDelayTime_ms                 maximumTransitDelayTime_ms,
  AverageTransitDelayTime_ms                 averageTransitDelayTime_ms,
  NumberOfMessagesLostDueToBufferOverflow    numberOfMessagesLostDueToBufferOverflow,
  NumberOfMessagesWithExcessTransitDelayTime numberOfMessagesWithExcessTransitDelayTime, 
  AverageNumberOfMessagesReceivedPerSecond   averageNumberOfMessagesReceivedPerSecond,
  AverageNumberOfMessagesForwardedPerSecond  averageNumberOfMessagesForwardedPerSecond,
  AverageNumberOfMessagesFilteredPerSecond   averageNumberOfMessagesFilteredPerSecond,
  UptimeSinceLastPowerOnReset_s              uptimeSinceLastPowerOnReset_s,
  NumberOfPorts                              numberOfPorts,  
  NetworkInterconnectionUnitType             networkInterconnectionUnitType,
  Reserved                                   reserved
} with {variant ""}

// end not used

type record N_GP_Response
{
  Function                                  msgFunction (129),
  record length (6..255) of OCT1            requestedParametrics
  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
  // this is the easiest way to handle it
} with {
  variant "" }

type record N_GP_Reset_Statistics 
{
  Function                                  msgFunction (130),
  PortNibble                                portPair,  
  OCT1                                      reserved3  ('FF'O),
  OCT1                                      reserved4  ('FF'O),
  OCT1                                      reserved5  ('FF'O),
  OCT1                                      reserved6  ('FF'O),
  OCT1                                      reserved7  ('FF'O),
  OCT1                                      reserved8  ('FF'O)
} with {variant "" };

type record N_SP_Request 
{
  Function                                  msgFunction (131),
  PortPair                                  portPair, 
  record length (5..255) of e_ParametricIdentifier parametricIdentifiers
  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved within ParametricIdentifiers
  // this is the easiest way to handle it
} with {
  variant "" }
 
type record N_SP_Response
{
  Function                                  msgFunction (132),
  PortPair                                  portPair, 
  record length (5..255) of OCT1            requestedParametrics
  // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
  // this is the easiest way to handle it
} with {
  variant "" }
  
  
  
type record N_SP_Reset_Statistics 
{
  Function                                  msgFunction (133),
  PortPair                                  portPair, 
  OCT1                                      reserved3  ('FF'O),
  OCT1                                      reserved4  ('FF'O),
  OCT1                                      reserved5  ('FF'O),
  OCT1                                      reserved6  ('FF'O),
  OCT1                                      reserved7  ('FF'O),
  OCT1                                      reserved8  ('FF'O)
} with {
  variant "" }  


type record N_OC_Request
{
  Function                                  msgFunction (192),
  PortPair                                  portPair,  
  NAME                                      nameOfCF
} with {
  variant "" }

type record N_CC_Request
{
  Function                                  msgFunction (193),
  PortPair                                  portPair,  
  NAME                                      nameOfCF
} with {
  variant "" }  
  
type enumerated e_Status { 
  failure                         (0),
  success                         (1)
}
with {variant "PADDING(octet)"} 
 
type enumerated e_FailureReasonCode { 
  cannotFindCFwithNAME                         (0),
  numberOfConnectionsToNAMEexceeded            (1),
  numberOfConnectionsToNIUexceeded             (2),
  busy                                         (3),
  requestTypeNotSupported                      (4),
  notAvailable                               (255)
}
with {variant "PADDING(octet)"}  
  
  
type record N_OC_Response
{
  Function                                  msgFunction (194),
  PortPair                                  portPair, 
  e_Status                                  status,
  e_FailureReasonCode                       failureReasonCode 
} with {
  variant "" }  
  
type record N_CC_Response
{
  Function                                  msgFunction (195),
  PortPair                                  portPair, 
  e_Status                                  status,
  e_FailureReasonCode                       failureReasonCode 
} with {
  variant "" }    
  
type union NetworkMessage
{
  N_MFDB_Request                              n_MFDB_Request,        // CF to NIU
  N_MFDB_Response                             n_MFDB_Response,       // NIU to CF
  N_MFDB_Add                                  n_MFDB_Add,            // CF to NIU
  N_MFDB_Delete                               n_MFDB_Delete,         // CF to NIU
  N_MFDB_Clear                                n_MFDB_Clear,          // CF to NIU
  N_MFDB_Create_Entry                         n_MFDB_Create_Entry,   // CF to NIU
  N_MFDBNQ_Add                                n_MFDBNQ_Add,          // CF to NIU
  N_NT_Request                                n_NT_Request,          // CF to NIU
  N_NT_Response                               n_NT_Response,         // NIU to CF
  N_NTX_Request                               n_NTX_Request,         // CF to NIU
  N_NTX_Response                              n_NTX_Response,        // NIU to CF
  N_GP_Request                                n_GP_Request,          // CF to NIU
  N_GP_Response                               n_GP_Response,         // NIU to CF
  N_GP_Reset_Statistics                       n_GP_Reset_Statistics, // CF to NIU
  N_SP_Request                                n_SP_Request,          // CF to NIU
  N_SP_Response                               n_SP_Response,         // NIU to CF
  N_SP_Reset_Statistics                       n_SP_Reset_Statistics, // CF to NIU
  N_OC_Request                                n_OC_Request,          // CF to NIU
  N_OC_Response                               n_OC_Response,         // NIU to CF
  N_CC_Request                                n_CC_Request,          // CF to NIU
  N_CC_Response                               n_CC_Response          // NIU to CF    
}
with {variant "TAG	(
  n_MFDB_Request,                        msgFunction =   0;
  n_MFDB_Response,                       msgFunction =   1;
  n_MFDB_Add,                            msgFunction =   2;
  n_MFDB_Delete,                         msgFunction =   3;
  n_MFDB_Clear,                          msgFunction =   4;
  n_MFDB_Create_Entry,                   msgFunction =   6;
  n_MFDBNQ_Add,                          msgFunction =   7;
  n_NT_Request,                          msgFunction =  64;
  n_NT_Response,                         msgFunction =  65;
  n_NTX_Request,                         msgFunction =  66;
  n_NTX_Response,                        msgFunction =  67;
  n_GP_Request,                          msgFunction = 128;
  n_GP_Response,                         msgFunction = 129;
  n_GP_Reset_Statistics,                 msgFunction = 130;
  n_SP_Request,                          msgFunction = 131;
  n_SP_Response,                         msgFunction = 132;
  n_SP_Reset_Statistics,                 msgFunction = 133;
  n_OC_Request,                          msgFunction = 192;
  n_OC_Response,                         msgFunction = 193; // there is a specification inconsistency concerning this value 193 vs. 194
  n_CC_Request,                          msgFunction = 194; // there is a specification inconsistency concerning this value 194 vs. 193
  n_CC_Response,                         msgFunction = 195;  ) " 
}

type enumerated e_PortNumber { 
  port_local                 (0),
  port_1                     (1),
  port_2                     (2),
  port_3                     (3),
  port_4                     (4),
  port_5                     (5),
  port_6                     (6),
  port_7                     (7),
  port_8                     (8),
  port_9                     (9),
  port_10                    (10),
  port_11                    (11),
  port_12                    (12),
  port_13                    (13),
  port_14                    (14),
  port_global                (15)}
with {variant "PADDING(nibble)" };

type enumerated e_FilterMode { 
  blockSpecificPGNs          (0),
  passSecificPGNs            (1)}
with {variant "PADDING(octet)" };

type record PortPair
{
  e_PortNumber          fromPort,
  e_PortNumber          toPort
} with { variant "" }

type record PortNibble
{
  e_PortNumber          portNumber,
  HEX1                  reserved ('F'H)
} with { variant "" }

}with { encode "RAW" }

