| /****************************************************************************** |
| * 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) |
| } |
| } |