/****************************************************************************** | |
* Copyright (c) 2010, 2016 Ericsson AB | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* Michael Josenhans | |
******************************************************************************/ | |
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) | |
} | |
} |