blob: 71c3dc5308e6bb7174bfd5bf34356fc497bafeb4 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2000-2018 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
******************************************************************************/
//Revision R1A
module Can
{
import from General_Types all;
// special address description flags for the CAN_ID
// should become an enum, definedable as hex
const octetstring CAN_EFF_FLAG := '80000000'O; // EFF/SFF is set in the MSB
const octetstring CAN_RTR_FLAG := '40000000'O; // remote transmission request
const octetstring CAN_ERR_FLAG := '20000000'O; // error message frame
// valid bits in CAN ID for frame formats
const octetstring CAN_SFF_MASK := '000007FF'O // standard frame format (SFF)
const octetstring CAN_EFF_MASK := '1FFFFFFF'O // extended frame format (EFF)
const octetstring CAN_ERR_MASK := '1FFFFFFF'O // omit EFF, RTR, ERR flags
template octetstring t_CAN_EFF_FLAG:=(
'80???'O,'81???'O,'82???'O,'83???'O,'84???'O,'85???'O,'86???'O,'87???'O,
'88???'O,'89???'O,'8A???'O,'8B???'O,'8C???'O,'8D???'O,'8E???'O,'8F???'O,
'90???'O,'91???'O,'92???'O,'93???'O,'94???'O,'95???'O,'96???'O,'97???'O,
'98???'O,'99???'O,'9A???'O,'9B???'O,'9C???'O,'9D???'O,'9E???'O,'9F???'O,
'A0???'O,'A1???'O,'A2???'O,'A3???'O,'A4???'O,'A5???'O,'A6???'O,'A7???'O,
'A8???'O,'A9???'O,'AA???'O,'AB???'O,'AC???'O,'AD???'O,'AE???'O,'AF???'O,
'B0???'O,'B1???'O,'B2???'O,'B3???'O,'B4???'O,'B5???'O,'B6???'O,'B7???'O,
'B8???'O,'B9???'O,'BA???'O,'BB???'O,'BC???'O,'BD???'O,'BE???'O,'BF???'O,
'C0???'O,'C1???'O,'C2???'O,'C3???'O,'C4???'O,'C5???'O,'C6???'O,'C7???'O,
'C8???'O,'C9???'O,'CA???'O,'CB???'O,'CC???'O,'CD???'O,'CE???'O,'CF???'O,
'D0???'O,'D1???'O,'D2???'O,'D3???'O,'D4???'O,'D5???'O,'D6???'O,'D7???'O,
'D8???'O,'D9???'O,'DA???'O,'DB???'O,'DC???'O,'DD???'O,'DE???'O,'DF???'O,
'E0???'O,'E1???'O,'E2???'O,'E3???'O,'E4???'O,'E5???'O,'E6???'O,'E7???'O,
'E8???'O,'E9???'O,'EA???'O,'EB???'O,'EC???'O,'ED???'O,'EE???'O,'EF???'O,
'F0???'O,'F1???'O,'F2???'O,'F3???'O,'F4???'O,'F5???'O,'F6???'O,'F7???'O,
'F8???'O,'F9???'O,'FA???'O,'FB???'O,'FC???'O,'FD???'O,'FE???'O,'FF???'O);
template octetstring t_CAN_SFF_FLAG:=(
'00???'O,'01???'O,'02???'O,'03???'O,'04???'O,'05???'O,'06???'O,'07???'O,
'08???'O,'09???'O,'0A???'O,'0B???'O,'0C???'O,'0D???'O,'0E???'O,'0F???'O,
'10???'O,'11???'O,'12???'O,'13???'O,'14???'O,'15???'O,'16???'O,'17???'O,
'18???'O,'19???'O,'1A???'O,'1B???'O,'1C???'O,'1D???'O,'1E???'O,'1F???'O,
'20???'O,'21???'O,'22???'O,'23???'O,'24???'O,'25???'O,'26???'O,'27???'O,
'28???'O,'29???'O,'2A???'O,'2B???'O,'2C???'O,'2D???'O,'2E???'O,'2F???'O,
'30???'O,'31???'O,'32???'O,'33???'O,'34???'O,'35???'O,'36???'O,'37???'O,
'38???'O,'39???'O,'3A???'O,'3B???'O,'3C???'O,'3D???'O,'3E???'O,'3F???'O,
'40???'O,'41???'O,'42???'O,'43???'O,'44???'O,'45???'O,'46???'O,'47???'O,
'48???'O,'49???'O,'4A???'O,'4B???'O,'4C???'O,'4D???'O,'4E???'O,'4F???'O,
'50???'O,'51???'O,'52???'O,'53???'O,'54???'O,'55???'O,'56???'O,'57???'O,
'58???'O,'59???'O,'5A???'O,'5B???'O,'5C???'O,'5D???'O,'5E???'O,'5F???'O,
'60???'O,'61???'O,'62???'O,'63???'O,'64???'O,'65???'O,'66???'O,'67???'O,
'68???'O,'69???'O,'6A???'O,'6B???'O,'6C???'O,'6D???'O,'6E???'O,'6F???'O,
'70???'O,'71???'O,'72???'O,'73???'O,'74???'O,'75???'O,'76???'O,'77???'O,
'78???'O,'79???'O,'7A???'O,'7B???'O,'7C???'O,'7D???'O,'7E???'O,'7F???'O);
template octetstring t_CAN_RTR_FLAG:=(
'40???'O,'41???'O,'42???'O,'43???'O,'44???'O,'45???'O,'46???'O,'47???'O,
'48???'O,'49???'O,'4A???'O,'4B???'O,'4C???'O,'4D???'O,'4E???'O,'4F???'O,
'50???'O,'51???'O,'52???'O,'53???'O,'54???'O,'55???'O,'56???'O,'57???'O,
'58???'O,'59???'O,'5A???'O,'5B???'O,'5C???'O,'5D???'O,'5E???'O,'5F???'O,
'60???'O,'61???'O,'62???'O,'63???'O,'64???'O,'65???'O,'66???'O,'67???'O,
'68???'O,'69???'O,'6A???'O,'6B???'O,'6C???'O,'6D???'O,'6E???'O,'6F???'O,
'70???'O,'71???'O,'72???'O,'73???'O,'74???'O,'75???'O,'76???'O,'77???'O,
'78???'O,'79???'O,'7A???'O,'7B???'O,'7C???'O,'7D???'O,'7E???'O,'7F???'O,
'C0???'O,'C1???'O,'C2???'O,'C3???'O,'C4???'O,'C5???'O,'C6???'O,'C7???'O,
'C8???'O,'C9???'O,'CA???'O,'CB???'O,'CC???'O,'CD???'O,'CE???'O,'CF???'O,
'D0???'O,'D1???'O,'D2???'O,'D3???'O,'D4???'O,'D5???'O,'D6???'O,'D7???'O,
'D8???'O,'D9???'O,'DA???'O,'DB???'O,'DC???'O,'DD???'O,'DE???'O,'DF???'O,
'E0???'O,'E1???'O,'E2???'O,'E3???'O,'E4???'O,'E5???'O,'E6???'O,'E7???'O,
'E8???'O,'E9???'O,'EA???'O,'EB???'O,'EC???'O,'ED???'O,'EE???'O,'EF???'O,
'F0???'O,'F1???'O,'F2???'O,'F3???'O,'F4???'O,'F5???'O,'F6???'O,'F7???'O,
'F8???'O,'F9???'O,'FA???'O,'FB???'O,'FC???'O,'FD???'O,'FE???'O,'FF???'O);
template octetstring t_CAN_ERR_FLAG:=(
'20???'O,'21???'O,'22???'O,'23???'O,'24???'O,'25???'O,'26???'O,'27???'O,
'28???'O,'29???'O,'2A???'O,'2B???'O,'2C???'O,'2D???'O,'2E???'O,'2F???'O,
'30???'O,'31???'O,'32???'O,'33???'O,'34???'O,'35???'O,'36???'O,'37???'O,
'38???'O,'39???'O,'3A???'O,'3B???'O,'3C???'O,'3D???'O,'3E???'O,'3F???'O,
'60???'O,'61???'O,'62???'O,'63???'O,'64???'O,'65???'O,'66???'O,'67???'O,
'68???'O,'69???'O,'6A???'O,'6B???'O,'6C???'O,'6D???'O,'6E???'O,'6F???'O,
'70???'O,'71???'O,'72???'O,'73???'O,'74???'O,'75???'O,'76???'O,'77???'O,
'78???'O,'79???'O,'7A???'O,'7B???'O,'7C???'O,'7D???'O,'7E???'O,'7F???'O,
'A0???'O,'A1???'O,'A2???'O,'A3???'O,'A4???'O,'A5???'O,'A6???'O,'A7???'O,
'A8???'O,'A9???'O,'AA???'O,'AB???'O,'AC???'O,'AD???'O,'AE???'O,'AF???'O,
'B0???'O,'B1???'O,'B2???'O,'B3???'O,'B4???'O,'B5???'O,'B6???'O,'B7???'O,
'B8???'O,'B9???'O,'BA???'O,'BB???'O,'BC???'O,'BD???'O,'BE???'O,'BF???'O,
'E0???'O,'E1???'O,'E2???'O,'E3???'O,'E4???'O,'E5???'O,'E6???'O,'E7???'O,
'E8???'O,'E9???'O,'EA???'O,'EB???'O,'EC???'O,'ED???'O,'EE???'O,'EF???'O,
'F0???'O,'F1???'O,'F2???'O,'F3???'O,'F4???'O,'F5???'O,'F6???'O,'F7???'O,
'F8???'O,'F9???'O,'FA???'O,'FB???'O,'FC???'O,'FD???'O,'FE???'O,'FF???'O);
type enumerated AdresseFamily_enum
{
// Supported address families
PF_CAN (29) // Controller Area Network
}
// Supported address families
const integer AF_CAN := 29; // See /include/linux/socket.h
type enumerated ProtocolFamily_enum {
//SOCK_STREAM (1),
SOCK_DGRAM (2),
SOCK_RAW (3)
//SOCK_RDM (4),
//SOCK_SEQPACKET (5),
//SOCK_DCCP (6),
//SOCK_PACKET (10)
}
// particular protocols of the protocol family PF_CAN
type enumerated PF_CAN_protocols_enum {
CAN_RAW (1), // RAW sockets
CAN_BCM (2), // Broadcast Manager
CAN_TP16 (3), // VAG Transport Protocol v1.6
CAN_TP20 (4), // VAG Transport Protocol v2.0
CAN_MCNET (5), // Bosch MCNet
CAN_ISOTP (6), // ISO 15765-2 Transport Protocol
CAN_NPROTO (7)
}
// CAN payload length and DLC definitions according to ISO 11898-1
// See /usr/include/linux/can.h
const integer CAN_MAX_DLEN := 8;
// CAN FD payload length and DLC definitions according to ISO 11898-7
// See /usr/include/linux/can.h
const integer CANFD_MAX_DLEN := 64;
// should be octetstring length (4);
type octetstring CAN_id length (4);
type bitstring CAN_flags length (8); // only used with CAN FD
type octetstring CAN_PDU;
type record CAN_frame {
CAN_id can_id, // 32 bit CAN_ID + EFF/RTR/
CAN_PDU can_pdu length (0 .. CAN_MAX_DLEN)
}
type record CANFD_frame {
CAN_id can_id, // 32 bit CAN_ID + EFF/RTR/
CAN_flags can_flags, // only used with CAN FD
CAN_PDU can_pdu length (0 .. CANFD_MAX_DLEN)
}
}