| /* |
| * Copyright (C) 2019 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package android.hardware.automotive.can@1.0; |
| |
| /** |
| * CAN message ID. |
| * |
| * Does not include any flags like RTR nor ERR, only a plain 11-bit |
| * or 29-bit identifier, as defined in CAN 1.x/2.0x. |
| * |
| * Unused bits must be set to zero. |
| */ |
| typedef uint32_t CanMessageId; |
| |
| /** |
| * CAN message being sent or received. |
| */ |
| struct CanMessage { |
| CanMessageId id; |
| |
| /** |
| * CAN message payload, as defined in CAN 1.x and CAN 2.x standards. |
| * |
| * The length of the payload vector directly translates to the length |
| * of the data frame (i.e. includes any padding bytes), so it may be in |
| * a range of: |
| * - 0-8 bytes for standard CAN; |
| * - up to 64 bytes for CAN FD. |
| * ISO TP is not supported directly for now. |
| */ |
| vec<uint8_t> payload; |
| |
| /** |
| * Time in nanoseconds since boot. |
| * |
| * Ignored for outgoing messages. |
| */ |
| uint64_t timestamp; |
| |
| /** |
| * A request to proactively pull certain data from other ECU in CAN network. |
| * |
| * For details please refer to CAN standard. |
| * |
| * If this flag is set, payload must be empty. |
| */ |
| bool remoteTransmissionRequest; |
| |
| /** |
| * Flag indicating if the message has an extended ID. |
| * |
| * Extended ID's are 29 bits long, as opposed to the standard 11 bit ID. |
| * It can not simply be inferred from the length of the ID itself, as the |
| * message ID 0x00000123 != message ID 0x123. |
| */ |
| bool isExtendedId; |
| }; |
| |
| /** |
| * Single filter rule for CAN messages. |
| * |
| * A filter is satisfied if: |
| * ((receivedId & mask) == (id & mask)) == !exclude |
| * |
| * In order for set of filters to match, at least one non-exclude filters must match (if there is |
| * one) and all exclude filters must match. In other words: |
| * - a single matching non-exclude filter makes the whole set matching; |
| * - a single non-matching excluded filter makes the whole set non-matching. |
| */ |
| struct CanMessageFilter { |
| CanMessageId id; |
| uint32_t mask; |
| /** Remote Transmission Request; another ECU requests <DLC> bytes of data on this message ID */ |
| FilterFlag rtr; |
| /** 29 bit message ID is used instead of 11 bits */ |
| FilterFlag extendedFormat; |
| /** 'exclude' *DOES* apply to rtr and extendedFormat! */ |
| bool exclude; |
| }; |
| |
| |
| /** |
| * Types of filter that can be applied to a CanMessageFilter |
| */ |
| enum FilterFlag : uint8_t { |
| /** Default, FilterFlag doesn't effect what messages filtered */ |
| DONT_CARE = 0, |
| /** This FilterFlag MUST be present in received messages to pass though the filter */ |
| SET, |
| /** This FilterFlag must NOT be present in received messages to pass though the filter */ |
| NOT_SET, |
| }; |
| |
| enum Result : uint8_t { |
| OK, |
| UNKNOWN_ERROR, |
| PAYLOAD_TOO_LONG, |
| INTERFACE_DOWN, |
| TRANSMISSION_FAILURE, |
| INVALID_ARGUMENTS, |
| }; |
| |
| /** |
| * @see ICanMessageListener#onError |
| */ |
| enum ErrorEvent : uint8_t { |
| UNKNOWN_ERROR, |
| |
| /** A problem with CAN interface HW. */ |
| HARDWARE_ERROR, |
| |
| /** CAN interface is down. */ |
| INTERFACE_DOWN, |
| |
| /** TX buffer overflow: client is sending too many packets. */ |
| TX_OVERFLOW, |
| |
| /** RX buffer overflow: client is not reading packets fast enough. */ |
| RX_OVERFLOW, |
| |
| /** Received malformed input. */ |
| MALFORMED_INPUT, |
| |
| /** Bus overload: there is too much traffic on the bus. */ |
| BUS_OVERLOAD, |
| |
| /** Bus error: shorted Hi/Lo line, bus off etc. */ |
| BUS_ERROR, |
| }; |